From 09ddfffa6bcbfee6af727bdcdec40e8fa1cf9f9b Mon Sep 17 00:00:00 2001 From: Cory McWilliams Date: Thu, 29 Dec 2022 23:55:49 +0000 Subject: [PATCH] Add prebuild OpenSSL, and remove SCHANNEL code and whatever it was on MacOS. Build mingw for 64-bit. git-svn-id: https://www.unprompted.com/svn/projects/tildefriends/trunk@4088 ed5197a5-7fde-0310-b194-c3ffbd925b24 --- Makefile | 24 +- .../android/arm64-v8a/usr/local/bin/c_rehash | 232 + .../android/arm64-v8a/usr/local/bin/openssl | Bin 0 -> 793560 bytes .../arm64-v8a/usr/local/include/openssl/aes.h | 92 + .../usr/local/include/openssl/asn1.h | 886 +++ .../usr/local/include/openssl/asn1_mac.h | 10 + .../usr/local/include/openssl/asn1err.h | 256 + .../usr/local/include/openssl/asn1t.h | 945 +++ .../usr/local/include/openssl/async.h | 76 + .../usr/local/include/openssl/asyncerr.h | 42 + .../arm64-v8a/usr/local/include/openssl/bio.h | 801 +++ .../usr/local/include/openssl/bioerr.h | 124 + .../usr/local/include/openssl/blowfish.h | 61 + .../arm64-v8a/usr/local/include/openssl/bn.h | 539 ++ .../usr/local/include/openssl/bnerr.h | 100 + .../usr/local/include/openssl/buffer.h | 58 + .../usr/local/include/openssl/buffererr.h | 34 + .../usr/local/include/openssl/camellia.h | 83 + .../usr/local/include/openssl/cast.h | 53 + .../usr/local/include/openssl/cmac.h | 41 + .../arm64-v8a/usr/local/include/openssl/cms.h | 339 ++ .../usr/local/include/openssl/cmserr.h | 202 + .../usr/local/include/openssl/comp.h | 53 + .../usr/local/include/openssl/comperr.h | 44 + .../usr/local/include/openssl/conf.h | 168 + .../usr/local/include/openssl/conf_api.h | 40 + .../usr/local/include/openssl/conferr.h | 76 + .../usr/local/include/openssl/crypto.h | 445 ++ .../usr/local/include/openssl/cryptoerr.h | 57 + .../arm64-v8a/usr/local/include/openssl/ct.h | 474 ++ .../usr/local/include/openssl/cterr.h | 80 + .../arm64-v8a/usr/local/include/openssl/des.h | 174 + .../arm64-v8a/usr/local/include/openssl/dh.h | 340 ++ .../usr/local/include/openssl/dherr.h | 88 + .../arm64-v8a/usr/local/include/openssl/dsa.h | 244 + .../usr/local/include/openssl/dsaerr.h | 72 + .../usr/local/include/openssl/dtls1.h | 55 + .../usr/local/include/openssl/e_os2.h | 300 + .../usr/local/include/openssl/ebcdic.h | 33 + .../arm64-v8a/usr/local/include/openssl/ec.h | 1479 +++++ .../usr/local/include/openssl/ecdh.h | 10 + .../usr/local/include/openssl/ecdsa.h | 10 + .../usr/local/include/openssl/ecerr.h | 275 + .../usr/local/include/openssl/engine.h | 751 +++ .../usr/local/include/openssl/engineerr.h | 111 + .../arm64-v8a/usr/local/include/openssl/err.h | 274 + .../arm64-v8a/usr/local/include/openssl/evp.h | 1666 ++++++ .../usr/local/include/openssl/evperr.h | 205 + .../usr/local/include/openssl/hmac.h | 51 + .../usr/local/include/openssl/idea.h | 64 + .../arm64-v8a/usr/local/include/openssl/kdf.h | 97 + .../usr/local/include/openssl/kdferr.h | 55 + .../usr/local/include/openssl/lhash.h | 241 + .../arm64-v8a/usr/local/include/openssl/md2.h | 44 + .../arm64-v8a/usr/local/include/openssl/md4.h | 51 + .../arm64-v8a/usr/local/include/openssl/md5.h | 50 + .../usr/local/include/openssl/mdc2.h | 42 + .../usr/local/include/openssl/modes.h | 208 + .../usr/local/include/openssl/obj_mac.h | 5198 +++++++++++++++++ .../usr/local/include/openssl/objects.h | 175 + .../usr/local/include/openssl/objectserr.h | 42 + .../usr/local/include/openssl/ocsp.h | 352 ++ .../usr/local/include/openssl/ocsperr.h | 78 + .../usr/local/include/openssl/opensslconf.h | 195 + .../usr/local/include/openssl/opensslv.h | 101 + .../usr/local/include/openssl/ossl_typ.h | 197 + .../arm64-v8a/usr/local/include/openssl/pem.h | 378 ++ .../usr/local/include/openssl/pem2.h | 13 + .../usr/local/include/openssl/pemerr.h | 103 + .../usr/local/include/openssl/pkcs12.h | 223 + .../usr/local/include/openssl/pkcs12err.h | 81 + .../usr/local/include/openssl/pkcs7.h | 319 + .../usr/local/include/openssl/pkcs7err.h | 103 + .../usr/local/include/openssl/rand.h | 77 + .../usr/local/include/openssl/rand_drbg.h | 130 + .../usr/local/include/openssl/randerr.h | 94 + .../arm64-v8a/usr/local/include/openssl/rc2.h | 51 + .../arm64-v8a/usr/local/include/openssl/rc4.h | 36 + .../arm64-v8a/usr/local/include/openssl/rc5.h | 63 + .../usr/local/include/openssl/ripemd.h | 47 + .../arm64-v8a/usr/local/include/openssl/rsa.h | 513 ++ .../usr/local/include/openssl/rsaerr.h | 167 + .../usr/local/include/openssl/safestack.h | 207 + .../usr/local/include/openssl/seed.h | 96 + .../arm64-v8a/usr/local/include/openssl/sha.h | 119 + .../arm64-v8a/usr/local/include/openssl/srp.h | 135 + .../usr/local/include/openssl/srtp.h | 50 + .../arm64-v8a/usr/local/include/openssl/ssl.h | 2438 ++++++++ .../usr/local/include/openssl/ssl2.h | 24 + .../usr/local/include/openssl/ssl3.h | 339 ++ .../usr/local/include/openssl/sslerr.h | 773 +++ .../usr/local/include/openssl/stack.h | 83 + .../usr/local/include/openssl/store.h | 266 + .../usr/local/include/openssl/storeerr.h | 91 + .../usr/local/include/openssl/symhacks.h | 37 + .../usr/local/include/openssl/tls1.h | 1237 ++++ .../arm64-v8a/usr/local/include/openssl/ts.h | 559 ++ .../usr/local/include/openssl/tserr.h | 132 + .../usr/local/include/openssl/txt_db.h | 57 + .../arm64-v8a/usr/local/include/openssl/ui.h | 368 ++ .../usr/local/include/openssl/uierr.h | 65 + .../usr/local/include/openssl/whrlpool.h | 48 + .../usr/local/include/openssl/x509.h | 1047 ++++ .../usr/local/include/openssl/x509_vfy.h | 628 ++ .../usr/local/include/openssl/x509err.h | 130 + .../usr/local/include/openssl/x509v3.h | 937 +++ .../usr/local/include/openssl/x509v3err.h | 162 + .../usr/local/lib/pkgconfig/libcrypto.pc | 12 + .../usr/local/lib/pkgconfig/libssl.pc | 11 + .../usr/local/lib/pkgconfig/openssl.pc | 9 + .../share/doc/openssl/html/man1/CA.pl.html | 198 + .../doc/openssl/html/man1/asn1parse.html | 227 + .../local/share/doc/openssl/html/man1/ca.html | 671 +++ .../share/doc/openssl/html/man1/ciphers.html | 811 +++ .../share/doc/openssl/html/man1/cms.html | 636 ++ .../share/doc/openssl/html/man1/crl.html | 170 + .../doc/openssl/html/man1/crl2pkcs7.html | 119 + .../share/doc/openssl/html/man1/dgst.html | 250 + .../share/doc/openssl/html/man1/dhparam.html | 170 + .../share/doc/openssl/html/man1/dsa.html | 178 + .../share/doc/openssl/html/man1/dsaparam.html | 144 + .../local/share/doc/openssl/html/man1/ec.html | 198 + .../share/doc/openssl/html/man1/ecparam.html | 201 + .../share/doc/openssl/html/man1/enc.html | 412 ++ .../share/doc/openssl/html/man1/engine.html | 133 + .../share/doc/openssl/html/man1/errstr.html | 64 + .../share/doc/openssl/html/man1/gendsa.html | 103 + .../share/doc/openssl/html/man1/genpkey.html | 363 ++ .../share/doc/openssl/html/man1/genrsa.html | 123 + .../share/doc/openssl/html/man1/list.html | 111 + .../share/doc/openssl/html/man1/nseq.html | 101 + .../share/doc/openssl/html/man1/ocsp.html | 415 ++ .../share/doc/openssl/html/man1/openssl.html | 712 +++ .../share/doc/openssl/html/man1/passwd.html | 154 + .../share/doc/openssl/html/man1/pkcs12.html | 379 ++ .../share/doc/openssl/html/man1/pkcs7.html | 141 + .../share/doc/openssl/html/man1/pkcs8.html | 291 + .../share/doc/openssl/html/man1/pkey.html | 185 + .../doc/openssl/html/man1/pkeyparam.html | 110 + .../share/doc/openssl/html/man1/pkeyutl.html | 331 ++ .../share/doc/openssl/html/man1/prime.html | 89 + .../share/doc/openssl/html/man1/rand.html | 101 + .../share/doc/openssl/html/man1/rehash.html | 132 + .../share/doc/openssl/html/man1/req.html | 612 ++ .../share/doc/openssl/html/man1/rsa.html | 202 + .../share/doc/openssl/html/man1/rsautl.html | 236 + .../share/doc/openssl/html/man1/s_client.html | 681 +++ .../share/doc/openssl/html/man1/s_server.html | 714 +++ .../share/doc/openssl/html/man1/s_time.html | 190 + .../share/doc/openssl/html/man1/sess_id.html | 195 + .../share/doc/openssl/html/man1/smime.html | 454 ++ .../share/doc/openssl/html/man1/speed.html | 117 + .../share/doc/openssl/html/man1/spkac.html | 167 + .../share/doc/openssl/html/man1/srp.html | 71 + .../share/doc/openssl/html/man1/storeutl.html | 151 + .../local/share/doc/openssl/html/man1/ts.html | 555 ++ .../share/doc/openssl/html/man1/tsget.html | 190 + .../share/doc/openssl/html/man1/verify.html | 825 +++ .../share/doc/openssl/html/man1/version.html | 110 + .../share/doc/openssl/html/man1/x509.html | 892 +++ .../doc/openssl/html/man3/ADMISSIONS.html | 120 + .../html/man3/ASN1_INTEGER_get_int64.html | 116 + .../openssl/html/man3/ASN1_ITEM_lookup.html | 59 + .../openssl/html/man3/ASN1_OBJECT_new.html | 68 + .../html/man3/ASN1_STRING_TABLE_add.html | 82 + .../openssl/html/man3/ASN1_STRING_length.html | 107 + .../openssl/html/man3/ASN1_STRING_new.html | 69 + .../html/man3/ASN1_STRING_print_ex.html | 103 + .../doc/openssl/html/man3/ASN1_TIME_set.html | 190 + .../doc/openssl/html/man3/ASN1_TYPE_get.html | 89 + .../html/man3/ASN1_generate_nconf.html | 274 + .../openssl/html/man3/ASYNC_WAIT_CTX_new.html | 96 + .../openssl/html/man3/ASYNC_start_job.html | 273 + .../doc/openssl/html/man3/BF_encrypt.html | 95 + .../share/doc/openssl/html/man3/BIO_ADDR.html | 96 + .../doc/openssl/html/man3/BIO_ADDRINFO.html | 101 + .../doc/openssl/html/man3/BIO_connect.html | 121 + .../share/doc/openssl/html/man3/BIO_ctrl.html | 115 + .../doc/openssl/html/man3/BIO_f_base64.html | 102 + .../doc/openssl/html/man3/BIO_f_buffer.html | 89 + .../doc/openssl/html/man3/BIO_f_cipher.html | 81 + .../share/doc/openssl/html/man3/BIO_f_md.html | 156 + .../doc/openssl/html/man3/BIO_f_null.html | 58 + .../doc/openssl/html/man3/BIO_f_ssl.html | 263 + .../doc/openssl/html/man3/BIO_find_type.html | 83 + .../doc/openssl/html/man3/BIO_get_data.html | 76 + .../html/man3/BIO_get_ex_new_index.html | 75 + .../doc/openssl/html/man3/BIO_meth_new.html | 128 + .../share/doc/openssl/html/man3/BIO_new.html | 84 + .../doc/openssl/html/man3/BIO_new_CMS.html | 81 + .../openssl/html/man3/BIO_parse_hostserv.html | 91 + .../doc/openssl/html/man3/BIO_printf.html | 61 + .../share/doc/openssl/html/man3/BIO_push.html | 98 + .../share/doc/openssl/html/man3/BIO_read.html | 90 + .../doc/openssl/html/man3/BIO_s_accept.html | 175 + .../doc/openssl/html/man3/BIO_s_bio.html | 157 + .../doc/openssl/html/man3/BIO_s_connect.html | 171 + .../share/doc/openssl/html/man3/BIO_s_fd.html | 103 + .../doc/openssl/html/man3/BIO_s_file.html | 159 + .../doc/openssl/html/man3/BIO_s_mem.html | 137 + .../doc/openssl/html/man3/BIO_s_null.html | 60 + .../doc/openssl/html/man3/BIO_s_socket.html | 68 + .../openssl/html/man3/BIO_set_callback.html | 251 + .../openssl/html/man3/BIO_should_retry.html | 115 + .../openssl/html/man3/BN_BLINDING_new.html | 112 + .../doc/openssl/html/man3/BN_CTX_new.html | 87 + .../doc/openssl/html/man3/BN_CTX_start.html | 66 + .../share/doc/openssl/html/man3/BN_add.html | 117 + .../doc/openssl/html/man3/BN_add_word.html | 78 + .../doc/openssl/html/man3/BN_bn2bin.html | 100 + .../share/doc/openssl/html/man3/BN_cmp.html | 63 + .../share/doc/openssl/html/man3/BN_copy.html | 75 + .../openssl/html/man3/BN_generate_prime.html | 174 + .../doc/openssl/html/man3/BN_mod_inverse.html | 59 + .../html/man3/BN_mod_mul_montgomery.html | 99 + .../html/man3/BN_mod_mul_reciprocal.html | 84 + .../share/doc/openssl/html/man3/BN_new.html | 75 + .../doc/openssl/html/man3/BN_num_bytes.html | 71 + .../share/doc/openssl/html/man3/BN_rand.html | 88 + .../openssl/html/man3/BN_security_bits.html | 66 + .../doc/openssl/html/man3/BN_set_bit.html | 81 + .../share/doc/openssl/html/man3/BN_swap.html | 51 + .../share/doc/openssl/html/man3/BN_zero.html | 82 + .../doc/openssl/html/man3/BUF_MEM_new.html | 86 + .../doc/openssl/html/man3/CMS_add0_cert.html | 79 + .../html/man3/CMS_add1_recipient_cert.html | 77 + .../openssl/html/man3/CMS_add1_signer.html | 89 + .../doc/openssl/html/man3/CMS_compress.html | 85 + .../doc/openssl/html/man3/CMS_decrypt.html | 79 + .../doc/openssl/html/man3/CMS_encrypt.html | 98 + .../doc/openssl/html/man3/CMS_final.html | 61 + .../html/man3/CMS_get0_RecipientInfos.html | 110 + .../html/man3/CMS_get0_SignerInfos.html | 89 + .../doc/openssl/html/man3/CMS_get0_type.html | 87 + .../html/man3/CMS_get1_ReceiptRequest.html | 82 + .../share/doc/openssl/html/man3/CMS_sign.html | 104 + .../openssl/html/man3/CMS_sign_receipt.html | 65 + .../doc/openssl/html/man3/CMS_uncompress.html | 74 + .../doc/openssl/html/man3/CMS_verify.html | 114 + .../openssl/html/man3/CMS_verify_receipt.html | 67 + .../openssl/html/man3/CONF_modules_free.html | 72 + .../html/man3/CONF_modules_load_file.html | 137 + .../html/man3/CRYPTO_THREAD_run_once.html | 159 + .../html/man3/CRYPTO_get_ex_new_index.html | 129 + .../doc/openssl/html/man3/CRYPTO_memcmp.html | 56 + .../html/man3/CTLOG_STORE_get0_log_by_id.html | 65 + .../openssl/html/man3/CTLOG_STORE_new.html | 86 + .../doc/openssl/html/man3/CTLOG_new.html | 80 + .../html/man3/CT_POLICY_EVAL_CTX_new.html | 126 + .../openssl/html/man3/DEFINE_STACK_OF.html | 197 + .../doc/openssl/html/man3/DES_random_key.html | 217 + .../openssl/html/man3/DH_generate_key.html | 66 + .../html/man3/DH_generate_parameters.html | 155 + .../doc/openssl/html/man3/DH_get0_pqg.html | 106 + .../openssl/html/man3/DH_get_1024_160.html | 71 + .../doc/openssl/html/man3/DH_meth_new.html | 135 + .../share/doc/openssl/html/man3/DH_new.html | 62 + .../doc/openssl/html/man3/DH_new_by_nid.html | 55 + .../doc/openssl/html/man3/DH_set_method.html | 82 + .../share/doc/openssl/html/man3/DH_size.html | 75 + .../doc/openssl/html/man3/DSA_SIG_new.html | 69 + .../doc/openssl/html/man3/DSA_do_sign.html | 63 + .../doc/openssl/html/man3/DSA_dup_DH.html | 61 + .../openssl/html/man3/DSA_generate_key.html | 58 + .../html/man3/DSA_generate_parameters.html | 114 + .../doc/openssl/html/man3/DSA_get0_pqg.html | 98 + .../doc/openssl/html/man3/DSA_meth_new.html | 171 + .../share/doc/openssl/html/man3/DSA_new.html | 62 + .../doc/openssl/html/man3/DSA_set_method.html | 80 + .../share/doc/openssl/html/man3/DSA_sign.html | 75 + .../share/doc/openssl/html/man3/DSA_size.html | 66 + .../openssl/html/man3/DTLS_get_data_mtu.html | 56 + .../openssl/html/man3/DTLS_set_timer_cb.html | 58 + .../doc/openssl/html/man3/DTLSv1_listen.html | 95 + .../doc/openssl/html/man3/ECDSA_SIG_new.html | 180 + .../html/man3/ECPKParameters_print.html | 59 + .../html/man3/EC_GFp_simple_method.html | 75 + .../doc/openssl/html/man3/EC_GROUP_copy.html | 180 + .../doc/openssl/html/man3/EC_GROUP_new.html | 123 + .../html/man3/EC_KEY_get_enc_flags.html | 61 + .../doc/openssl/html/man3/EC_KEY_new.html | 143 + .../doc/openssl/html/man3/EC_POINT_add.html | 95 + .../doc/openssl/html/man3/EC_POINT_new.html | 169 + .../doc/openssl/html/man3/ENGINE_add.html | 422 ++ .../doc/openssl/html/man3/ERR_GET_LIB.html | 77 + .../openssl/html/man3/ERR_clear_error.html | 56 + .../openssl/html/man3/ERR_error_string.html | 77 + .../doc/openssl/html/man3/ERR_get_error.html | 81 + .../html/man3/ERR_load_crypto_strings.html | 74 + .../openssl/html/man3/ERR_load_strings.html | 74 + .../openssl/html/man3/ERR_print_errors.html | 70 + .../doc/openssl/html/man3/ERR_put_error.html | 79 + .../openssl/html/man3/ERR_remove_state.html | 67 + .../doc/openssl/html/man3/ERR_set_mark.html | 57 + .../doc/openssl/html/man3/EVP_BytesToKey.html | 81 + .../man3/EVP_CIPHER_CTX_get_cipher_data.html | 61 + .../html/man3/EVP_CIPHER_meth_new.html | 217 + .../doc/openssl/html/man3/EVP_DigestInit.html | 442 ++ .../openssl/html/man3/EVP_DigestSignInit.html | 157 + .../html/man3/EVP_DigestVerifyInit.html | 96 + .../doc/openssl/html/man3/EVP_EncodeInit.html | 108 + .../openssl/html/man3/EVP_EncryptInit.html | 467 ++ .../openssl/html/man3/EVP_MD_meth_new.html | 163 + .../doc/openssl/html/man3/EVP_OpenInit.html | 75 + .../html/man3/EVP_PKEY_ASN1_METHOD.html | 341 ++ .../openssl/html/man3/EVP_PKEY_CTX_ctrl.html | 278 + .../openssl/html/man3/EVP_PKEY_CTX_new.html | 77 + .../html/man3/EVP_PKEY_CTX_set1_pbe_pass.html | 69 + .../html/man3/EVP_PKEY_CTX_set_hkdf_md.html | 153 + .../EVP_PKEY_CTX_set_rsa_pss_keygen_md.html | 93 + .../html/man3/EVP_PKEY_CTX_set_scrypt_N.html | 84 + .../man3/EVP_PKEY_CTX_set_tls1_prf_md.html | 109 + .../html/man3/EVP_PKEY_asn1_get_count.html | 78 + .../doc/openssl/html/man3/EVP_PKEY_cmp.html | 77 + .../openssl/html/man3/EVP_PKEY_decrypt.html | 113 + .../openssl/html/man3/EVP_PKEY_derive.html | 111 + .../openssl/html/man3/EVP_PKEY_encrypt.html | 114 + .../man3/EVP_PKEY_get_default_digest_nid.html | 65 + .../openssl/html/man3/EVP_PKEY_keygen.html | 181 + .../html/man3/EVP_PKEY_meth_get_count.html | 67 + .../openssl/html/man3/EVP_PKEY_meth_new.html | 394 ++ .../doc/openssl/html/man3/EVP_PKEY_new.html | 106 + .../html/man3/EVP_PKEY_print_private.html | 75 + .../openssl/html/man3/EVP_PKEY_set1_RSA.html | 135 + .../doc/openssl/html/man3/EVP_PKEY_sign.html | 118 + .../doc/openssl/html/man3/EVP_PKEY_size.html | 71 + .../openssl/html/man3/EVP_PKEY_verify.html | 110 + .../html/man3/EVP_PKEY_verify_recover.html | 118 + .../doc/openssl/html/man3/EVP_SealInit.html | 82 + .../doc/openssl/html/man3/EVP_SignInit.html | 92 + .../doc/openssl/html/man3/EVP_VerifyInit.html | 93 + .../share/doc/openssl/html/man3/EVP_aes.html | 108 + .../share/doc/openssl/html/man3/EVP_aria.html | 74 + .../doc/openssl/html/man3/EVP_bf_cbc.html | 72 + .../doc/openssl/html/man3/EVP_blake2b512.html | 83 + .../doc/openssl/html/man3/EVP_camellia.html | 68 + .../doc/openssl/html/man3/EVP_cast5_cbc.html | 72 + .../doc/openssl/html/man3/EVP_chacha20.html | 79 + .../share/doc/openssl/html/man3/EVP_des.html | 86 + .../doc/openssl/html/man3/EVP_desx_cbc.html | 68 + .../doc/openssl/html/man3/EVP_idea_cbc.html | 70 + .../share/doc/openssl/html/man3/EVP_md2.html | 71 + .../share/doc/openssl/html/man3/EVP_md4.html | 71 + .../share/doc/openssl/html/man3/EVP_md5.html | 82 + .../share/doc/openssl/html/man3/EVP_mdc2.html | 71 + .../doc/openssl/html/man3/EVP_rc2_cbc.html | 80 + .../share/doc/openssl/html/man3/EVP_rc4.html | 84 + .../html/man3/EVP_rc5_32_12_16_cbc.html | 88 + .../doc/openssl/html/man3/EVP_ripemd160.html | 71 + .../doc/openssl/html/man3/EVP_seed_cbc.html | 72 + .../share/doc/openssl/html/man3/EVP_sha1.html | 71 + .../doc/openssl/html/man3/EVP_sha224.html | 78 + .../doc/openssl/html/man3/EVP_sha3_224.html | 85 + .../share/doc/openssl/html/man3/EVP_sm3.html | 71 + .../doc/openssl/html/man3/EVP_sm4_cbc.html | 73 + .../doc/openssl/html/man3/EVP_whirlpool.html | 71 + .../share/doc/openssl/html/man3/HMAC.html | 137 + .../share/doc/openssl/html/man3/MD5.html | 104 + .../doc/openssl/html/man3/MDC2_Init.html | 81 + .../doc/openssl/html/man3/OBJ_nid2obj.html | 165 + .../openssl/html/man3/OCSP_REQUEST_new.html | 117 + .../openssl/html/man3/OCSP_cert_to_id.html | 94 + .../html/man3/OCSP_request_add1_nonce.html | 82 + .../html/man3/OCSP_resp_find_status.html | 140 + .../html/man3/OCSP_response_status.html | 107 + .../openssl/html/man3/OCSP_sendreq_new.html | 107 + .../openssl/html/man3/OPENSSL_Applink.html | 49 + .../html/man3/OPENSSL_LH_COMPFUNC.html | 176 + .../openssl/html/man3/OPENSSL_LH_stats.html | 75 + .../html/man3/OPENSSL_VERSION_NUMBER.html | 132 + .../doc/openssl/html/man3/OPENSSL_config.html | 88 + .../html/man3/OPENSSL_fork_prepare.html | 67 + .../openssl/html/man3/OPENSSL_ia32cap.html | 206 + .../html/man3/OPENSSL_init_crypto.html | 221 + .../openssl/html/man3/OPENSSL_init_ssl.html | 87 + .../html/man3/OPENSSL_instrument_bus.html | 58 + .../man3/OPENSSL_load_builtin_modules.html | 71 + .../doc/openssl/html/man3/OPENSSL_malloc.html | 164 + .../html/man3/OPENSSL_secure_malloc.html | 114 + .../openssl/html/man3/OSSL_STORE_INFO.html | 163 + .../openssl/html/man3/OSSL_STORE_LOADER.html | 219 + .../openssl/html/man3/OSSL_STORE_SEARCH.html | 151 + .../openssl/html/man3/OSSL_STORE_expect.html | 82 + .../openssl/html/man3/OSSL_STORE_open.html | 133 + .../html/man3/OpenSSL_add_all_algorithms.html | 77 + .../openssl/html/man3/PEM_bytes_read_bio.html | 81 + .../share/doc/openssl/html/man3/PEM_read.html | 98 + .../doc/openssl/html/man3/PEM_read_CMS.html | 78 + .../html/man3/PEM_read_bio_PrivateKey.html | 381 ++ .../openssl/html/man3/PEM_read_bio_ex.html | 80 + .../html/man3/PEM_write_bio_CMS_stream.html | 68 + .../html/man3/PEM_write_bio_PKCS7_stream.html | 68 + .../doc/openssl/html/man3/PKCS12_create.html | 83 + .../doc/openssl/html/man3/PKCS12_newpass.html | 125 + .../doc/openssl/html/man3/PKCS12_parse.html | 81 + .../openssl/html/man3/PKCS5_PBKDF2_HMAC.html | 82 + .../doc/openssl/html/man3/PKCS7_decrypt.html | 72 + .../doc/openssl/html/man3/PKCS7_encrypt.html | 90 + .../doc/openssl/html/man3/PKCS7_sign.html | 109 + .../html/man3/PKCS7_sign_add_signer.html | 87 + .../doc/openssl/html/man3/PKCS7_verify.html | 110 + .../openssl/html/man3/RAND_DRBG_generate.html | 80 + .../html/man3/RAND_DRBG_get0_master.html | 80 + .../doc/openssl/html/man3/RAND_DRBG_new.html | 105 + .../openssl/html/man3/RAND_DRBG_reseed.html | 91 + .../html/man3/RAND_DRBG_set_callbacks.html | 120 + .../html/man3/RAND_DRBG_set_ex_data.html | 74 + .../share/doc/openssl/html/man3/RAND_add.html | 92 + .../doc/openssl/html/man3/RAND_bytes.html | 87 + .../doc/openssl/html/man3/RAND_cleanup.html | 63 + .../share/doc/openssl/html/man3/RAND_egd.html | 67 + .../doc/openssl/html/man3/RAND_load_file.html | 94 + .../html/man3/RAND_set_rand_method.html | 82 + .../doc/openssl/html/man3/RC4_set_key.html | 76 + .../doc/openssl/html/man3/RIPEMD160_Init.html | 83 + .../openssl/html/man3/RSA_blinding_on.html | 59 + .../doc/openssl/html/man3/RSA_check_key.html | 81 + .../openssl/html/man3/RSA_generate_key.html | 105 + .../doc/openssl/html/man3/RSA_get0_key.html | 136 + .../doc/openssl/html/man3/RSA_meth_new.html | 202 + .../share/doc/openssl/html/man3/RSA_new.html | 62 + .../man3/RSA_padding_add_PKCS1_type_1.html | 149 + .../doc/openssl/html/man3/RSA_print.html | 71 + .../html/man3/RSA_private_encrypt.html | 84 + .../openssl/html/man3/RSA_public_encrypt.html | 106 + .../doc/openssl/html/man3/RSA_set_method.html | 161 + .../share/doc/openssl/html/man3/RSA_sign.html | 71 + .../html/man3/RSA_sign_ASN1_OCTET_STRING.html | 75 + .../share/doc/openssl/html/man3/RSA_size.html | 75 + .../share/doc/openssl/html/man3/SCT_new.html | 199 + .../doc/openssl/html/man3/SCT_print.html | 68 + .../doc/openssl/html/man3/SCT_validate.html | 108 + .../doc/openssl/html/man3/SHA256_Init.html | 107 + .../doc/openssl/html/man3/SMIME_read_CMS.html | 85 + .../openssl/html/man3/SMIME_read_PKCS7.html | 85 + .../openssl/html/man3/SMIME_write_CMS.html | 78 + .../openssl/html/man3/SMIME_write_PKCS7.html | 78 + .../html/man3/SSL_CIPHER_get_name.html | 181 + .../man3/SSL_COMP_add_compression_method.html | 111 + .../openssl/html/man3/SSL_CONF_CTX_new.html | 66 + .../html/man3/SSL_CONF_CTX_set1_prefix.html | 70 + .../html/man3/SSL_CONF_CTX_set_flags.html | 105 + .../html/man3/SSL_CONF_CTX_set_ssl_ctx.html | 69 + .../doc/openssl/html/man3/SSL_CONF_cmd.html | 556 ++ .../openssl/html/man3/SSL_CONF_cmd_argv.html | 65 + .../html/man3/SSL_CTX_add1_chain_cert.html | 122 + .../man3/SSL_CTX_add_extra_chain_cert.html | 75 + .../html/man3/SSL_CTX_add_session.html | 83 + .../doc/openssl/html/man3/SSL_CTX_config.html | 105 + .../doc/openssl/html/man3/SSL_CTX_ctrl.html | 60 + .../html/man3/SSL_CTX_dane_enable.html | 252 + .../html/man3/SSL_CTX_flush_sessions.html | 65 + .../doc/openssl/html/man3/SSL_CTX_free.html | 65 + .../openssl/html/man3/SSL_CTX_get0_param.html | 81 + .../html/man3/SSL_CTX_get_verify_mode.html | 71 + .../man3/SSL_CTX_has_client_custom_ext.html | 56 + .../man3/SSL_CTX_load_verify_locations.html | 131 + .../doc/openssl/html/man3/SSL_CTX_new.html | 205 + .../html/man3/SSL_CTX_sess_number.html | 89 + .../man3/SSL_CTX_sess_set_cache_size.html | 70 + .../html/man3/SSL_CTX_sess_set_get_cb.html | 93 + .../openssl/html/man3/SSL_CTX_sessions.html | 61 + .../html/man3/SSL_CTX_set0_CA_list.html | 130 + .../html/man3/SSL_CTX_set1_curves.html | 102 + .../html/man3/SSL_CTX_set1_sigalgs.html | 106 + .../man3/SSL_CTX_set1_verify_cert_store.html | 90 + .../html/man3/SSL_CTX_set_alpn_select_cb.html | 167 + .../html/man3/SSL_CTX_set_cert_cb.html | 77 + .../html/man3/SSL_CTX_set_cert_store.html | 84 + .../SSL_CTX_set_cert_verify_callback.html | 81 + .../html/man3/SSL_CTX_set_cipher_list.html | 109 + .../html/man3/SSL_CTX_set_client_cert_cb.html | 83 + .../man3/SSL_CTX_set_client_hello_cb.html | 97 + .../SSL_CTX_set_ct_validation_callback.html | 101 + .../man3/SSL_CTX_set_ctlog_list_file.html | 66 + .../man3/SSL_CTX_set_default_passwd_cb.html | 100 + .../html/man3/SSL_CTX_set_ex_data.html | 64 + .../man3/SSL_CTX_set_generate_session_id.html | 116 + .../html/man3/SSL_CTX_set_info_callback.html | 186 + .../man3/SSL_CTX_set_keylog_callback.html | 63 + .../html/man3/SSL_CTX_set_max_cert_list.html | 81 + .../man3/SSL_CTX_set_min_proto_version.html | 80 + .../openssl/html/man3/SSL_CTX_set_mode.html | 136 + .../html/man3/SSL_CTX_set_msg_callback.html | 142 + .../html/man3/SSL_CTX_set_num_tickets.html | 67 + .../html/man3/SSL_CTX_set_options.html | 350 ++ .../man3/SSL_CTX_set_psk_client_callback.html | 143 + .../html/man3/SSL_CTX_set_quiet_shutdown.html | 77 + .../html/man3/SSL_CTX_set_read_ahead.html | 72 + .../SSL_CTX_set_record_padding_callback.html | 94 + .../html/man3/SSL_CTX_set_security_level.html | 167 + .../man3/SSL_CTX_set_session_cache_mode.html | 128 + .../man3/SSL_CTX_set_session_id_context.html | 95 + .../man3/SSL_CTX_set_session_ticket_cb.html | 169 + .../man3/SSL_CTX_set_split_send_fragment.html | 150 + .../html/man3/SSL_CTX_set_ssl_version.html | 85 + ..._CTX_set_stateless_cookie_generate_cb.html | 89 + .../html/man3/SSL_CTX_set_timeout.html | 74 + ...SL_CTX_set_tlsext_servername_callback.html | 167 + .../man3/SSL_CTX_set_tlsext_status_cb.html | 87 + .../SSL_CTX_set_tlsext_ticket_key_cb.html | 175 + .../man3/SSL_CTX_set_tlsext_use_srtp.html | 106 + .../man3/SSL_CTX_set_tmp_dh_callback.html | 119 + .../openssl/html/man3/SSL_CTX_set_verify.html | 264 + .../html/man3/SSL_CTX_use_certificate.html | 121 + .../man3/SSL_CTX_use_psk_identity_hint.html | 126 + .../html/man3/SSL_CTX_use_serverinfo.html | 73 + .../openssl/html/man3/SSL_SESSION_free.html | 79 + .../html/man3/SSL_SESSION_get0_cipher.html | 68 + .../html/man3/SSL_SESSION_get0_hostname.html | 80 + .../man3/SSL_SESSION_get0_id_context.html | 70 + .../html/man3/SSL_SESSION_get0_peer.html | 56 + .../man3/SSL_SESSION_get_compress_id.html | 56 + .../html/man3/SSL_SESSION_get_ex_data.html | 61 + .../SSL_SESSION_get_protocol_version.html | 68 + .../html/man3/SSL_SESSION_get_time.html | 81 + .../html/man3/SSL_SESSION_has_ticket.html | 70 + .../html/man3/SSL_SESSION_is_resumable.html | 61 + .../openssl/html/man3/SSL_SESSION_print.html | 62 + .../html/man3/SSL_SESSION_set1_id.html | 66 + .../doc/openssl/html/man3/SSL_accept.html | 87 + .../html/man3/SSL_alert_type_string.html | 255 + .../openssl/html/man3/SSL_alloc_buffers.html | 77 + .../openssl/html/man3/SSL_check_chain.html | 89 + .../doc/openssl/html/man3/SSL_clear.html | 81 + .../doc/openssl/html/man3/SSL_connect.html | 91 + .../openssl/html/man3/SSL_do_handshake.html | 87 + .../html/man3/SSL_export_keying_material.html | 78 + .../html/man3/SSL_extension_supported.html | 261 + .../share/doc/openssl/html/man3/SSL_free.html | 60 + .../openssl/html/man3/SSL_get0_peer_scts.html | 61 + .../openssl/html/man3/SSL_get_SSL_CTX.html | 56 + .../html/man3/SSL_get_all_async_fds.html | 76 + .../openssl/html/man3/SSL_get_ciphers.html | 89 + .../html/man3/SSL_get_client_random.html | 84 + .../html/man3/SSL_get_current_cipher.html | 73 + .../html/man3/SSL_get_default_timeout.html | 63 + .../doc/openssl/html/man3/SSL_get_error.html | 150 + .../html/man3/SSL_get_extms_support.html | 58 + .../doc/openssl/html/man3/SSL_get_fd.html | 74 + .../html/man3/SSL_get_peer_cert_chain.html | 84 + .../html/man3/SSL_get_peer_certificate.html | 81 + .../html/man3/SSL_get_peer_signature_nid.html | 63 + .../html/man3/SSL_get_peer_tmp_key.html | 67 + .../html/man3/SSL_get_psk_identity.html | 54 + .../doc/openssl/html/man3/SSL_get_rbio.html | 73 + .../openssl/html/man3/SSL_get_session.html | 97 + .../html/man3/SSL_get_shared_sigalgs.html | 83 + .../html/man3/SSL_get_verify_result.html | 84 + .../openssl/html/man3/SSL_get_version.html | 145 + .../doc/openssl/html/man3/SSL_in_init.html | 117 + .../doc/openssl/html/man3/SSL_key_update.html | 86 + .../openssl/html/man3/SSL_library_init.html | 75 + .../html/man3/SSL_load_client_CA_file.html | 102 + .../share/doc/openssl/html/man3/SSL_new.html | 80 + .../doc/openssl/html/man3/SSL_pending.html | 68 + .../share/doc/openssl/html/man3/SSL_read.html | 106 + .../html/man3/SSL_read_early_data.html | 184 + .../openssl/html/man3/SSL_rstate_string.html | 94 + .../openssl/html/man3/SSL_session_reused.html | 77 + .../doc/openssl/html/man3/SSL_set1_host.html | 96 + .../doc/openssl/html/man3/SSL_set_bio.html | 94 + .../html/man3/SSL_set_connect_state.html | 77 + .../doc/openssl/html/man3/SSL_set_fd.html | 80 + .../openssl/html/man3/SSL_set_session.html | 79 + .../openssl/html/man3/SSL_set_shutdown.html | 95 + .../html/man3/SSL_set_verify_result.html | 63 + .../doc/openssl/html/man3/SSL_shutdown.html | 129 + .../openssl/html/man3/SSL_state_string.html | 68 + .../share/doc/openssl/html/man3/SSL_want.html | 125 + .../doc/openssl/html/man3/SSL_write.html | 104 + .../doc/openssl/html/man3/UI_STRING.html | 113 + .../openssl/html/man3/UI_UTIL_read_pw.html | 73 + .../openssl/html/man3/UI_create_method.html | 178 + .../share/doc/openssl/html/man3/UI_new.html | 178 + .../doc/openssl/html/man3/X509V3_get_d2i.html | 214 + .../doc/openssl/html/man3/X509_ALGOR_dup.html | 70 + .../html/man3/X509_CRL_get0_by_serial.html | 99 + .../html/man3/X509_EXTENSION_set_object.html | 96 + .../doc/openssl/html/man3/X509_LOOKUP.html | 177 + .../html/man3/X509_LOOKUP_hash_dir.html | 106 + .../html/man3/X509_LOOKUP_meth_new.html | 158 + .../html/man3/X509_NAME_ENTRY_get_object.html | 94 + .../html/man3/X509_NAME_add_entry_by_txt.html | 119 + .../openssl/html/man3/X509_NAME_get0_der.html | 57 + .../html/man3/X509_NAME_get_index_by_NID.html | 112 + .../openssl/html/man3/X509_NAME_print_ex.html | 106 + .../openssl/html/man3/X509_PUBKEY_new.html | 110 + .../doc/openssl/html/man3/X509_SIG_get0.html | 59 + .../html/man3/X509_STORE_CTX_get_error.html | 374 ++ .../openssl/html/man3/X509_STORE_CTX_new.html | 141 + .../man3/X509_STORE_CTX_set_verify_cb.html | 184 + .../html/man3/X509_STORE_add_cert.html | 86 + .../html/man3/X509_STORE_get0_param.html | 71 + .../doc/openssl/html/man3/X509_STORE_new.html | 75 + .../man3/X509_STORE_set_verify_cb_func.html | 169 + .../man3/X509_VERIFY_PARAM_set_flags.html | 231 + .../doc/openssl/html/man3/X509_check_ca.html | 58 + .../openssl/html/man3/X509_check_host.html | 128 + .../openssl/html/man3/X509_check_issued.html | 56 + .../html/man3/X509_check_private_key.html | 67 + .../openssl/html/man3/X509_check_purpose.html | 111 + .../share/doc/openssl/html/man3/X509_cmp.html | 81 + .../doc/openssl/html/man3/X509_cmp_time.html | 68 + .../doc/openssl/html/man3/X509_digest.html | 77 + .../share/doc/openssl/html/man3/X509_dup.html | 76 + .../html/man3/X509_get0_notBefore.html | 88 + .../html/man3/X509_get0_signature.html | 106 + .../doc/openssl/html/man3/X509_get0_uids.html | 62 + .../html/man3/X509_get_extension_flags.html | 184 + .../openssl/html/man3/X509_get_pubkey.html | 77 + .../html/man3/X509_get_serialNumber.html | 69 + .../html/man3/X509_get_subject_name.html | 81 + .../openssl/html/man3/X509_get_version.html | 79 + .../share/doc/openssl/html/man3/X509_new.html | 78 + .../doc/openssl/html/man3/X509_sign.html | 86 + .../openssl/html/man3/X509_verify_cert.html | 70 + .../html/man3/X509v3_get_ext_by_NID.html | 123 + .../doc/openssl/html/man3/d2i_DHparams.html | 61 + .../html/man3/d2i_PKCS8PrivateKey_bio.html | 86 + .../doc/openssl/html/man3/d2i_PrivateKey.html | 83 + .../openssl/html/man3/d2i_SSL_SESSION.html | 62 + .../share/doc/openssl/html/man3/d2i_X509.html | 239 + .../openssl/html/man3/i2d_CMS_bio_stream.html | 73 + .../html/man3/i2d_PKCS7_bio_stream.html | 73 + .../openssl/html/man3/i2d_re_X509_tbs.html | 74 + .../doc/openssl/html/man3/o2i_SCT_LIST.html | 65 + .../share/doc/openssl/html/man5/config.html | 362 ++ .../doc/openssl/html/man5/x509v3_config.html | 464 ++ .../share/doc/openssl/html/man7/Ed25519.html | 84 + .../share/doc/openssl/html/man7/RAND.html | 64 + .../doc/openssl/html/man7/RAND_DRBG.html | 224 + .../share/doc/openssl/html/man7/RSA-PSS.html | 73 + .../share/doc/openssl/html/man7/SM2.html | 84 + .../share/doc/openssl/html/man7/X25519.html | 80 + .../share/doc/openssl/html/man7/bio.html | 72 + .../share/doc/openssl/html/man7/crypto.html | 70 + .../local/share/doc/openssl/html/man7/ct.html | 58 + .../doc/openssl/html/man7/des_modes.html | 214 + .../share/doc/openssl/html/man7/evp.html | 83 + .../openssl/html/man7/ossl_store-file.html | 60 + .../doc/openssl/html/man7/ossl_store.html | 105 + .../html/man7/passphrase-encoding.html | 124 + .../openssl/html/man7/proxy-certificates.html | 345 ++ .../share/doc/openssl/html/man7/scrypt.html | 112 + .../share/doc/openssl/html/man7/ssl.html | 1248 ++++ .../share/doc/openssl/html/man7/x509.html | 67 + .../usr/local/share/man/man1/CA.pl.1 | 341 ++ .../usr/local/share/man/man1/asn1parse.1 | 339 ++ .../arm64-v8a/usr/local/share/man/man1/ca.1 | 823 +++ .../usr/local/share/man/man1/ciphers.1 | 868 +++ .../arm64-v8a/usr/local/share/man/man1/cms.1 | 820 +++ .../arm64-v8a/usr/local/share/man/man1/crl.1 | 257 + .../usr/local/share/man/man1/crl2pkcs7.1 | 227 + .../arm64-v8a/usr/local/share/man/man1/dgst.1 | 347 ++ .../usr/local/share/man/man1/dhparam.1 | 276 + .../arm64-v8a/usr/local/share/man/man1/dsa.1 | 306 + .../usr/local/share/man/man1/dsaparam.1 | 245 + .../arm64-v8a/usr/local/share/man/man1/ec.1 | 326 ++ .../usr/local/share/man/man1/ecparam.1 | 312 + .../arm64-v8a/usr/local/share/man/man1/enc.1 | 543 ++ .../usr/local/share/man/man1/engine.1 | 240 + .../usr/local/share/man/man1/errstr.1 | 181 + .../usr/local/share/man/man1/gendsa.1 | 219 + .../usr/local/share/man/man1/genpkey.1 | 434 ++ .../usr/local/share/man/man1/genrsa.1 | 243 + .../arm64-v8a/usr/local/share/man/man1/list.1 | 211 + .../arm64-v8a/usr/local/share/man/man1/nseq.1 | 211 + .../arm64-v8a/usr/local/share/man/man1/ocsp.1 | 584 ++ .../usr/local/share/man/man1/openssl.1 | 583 ++ .../usr/local/share/man/man1/passwd.1 | 248 + .../usr/local/share/man/man1/pkcs12.1 | 479 ++ .../usr/local/share/man/man1/pkcs7.1 | 242 + .../usr/local/share/man/man1/pkcs8.1 | 434 ++ .../arm64-v8a/usr/local/share/man/man1/pkey.1 | 288 + .../usr/local/share/man/man1/pkeyparam.1 | 207 + .../usr/local/share/man/man1/pkeyutl.1 | 428 ++ .../usr/local/share/man/man1/prime.1 | 189 + .../arm64-v8a/usr/local/share/man/man1/rand.1 | 214 + .../usr/local/share/man/man1/rehash.1 | 259 + .../arm64-v8a/usr/local/share/man/man1/req.1 | 797 +++ .../arm64-v8a/usr/local/share/man/man1/rsa.1 | 330 ++ .../usr/local/share/man/man1/rsautl.1 | 345 ++ .../usr/local/share/man/man1/s_client.1 | 863 +++ .../usr/local/share/man/man1/s_server.1 | 868 +++ .../usr/local/share/man/man1/s_time.1 | 320 + .../usr/local/share/man/man1/sess_id.1 | 272 + .../usr/local/share/man/man1/smime.1 | 617 ++ .../usr/local/share/man/man1/speed.1 | 220 + .../usr/local/share/man/man1/spkac.1 | 274 + .../arm64-v8a/usr/local/share/man/man1/srp.1 | 198 + .../usr/local/share/man/man1/storeutl.1 | 249 + .../arm64-v8a/usr/local/share/man/man1/ts.1 | 727 +++ .../usr/local/share/man/man1/tsget.1 | 325 ++ .../usr/local/share/man/man1/verify.1 | 780 +++ .../usr/local/share/man/man1/version.1 | 198 + .../arm64-v8a/usr/local/share/man/man1/x509.1 | 955 +++ .../usr/local/share/man/man3/ADMISSIONS.3 | 280 + .../share/man/man3/ASN1_INTEGER_get_int64.3 | 260 + .../local/share/man/man3/ASN1_ITEM_lookup.3 | 171 + .../local/share/man/man3/ASN1_OBJECT_new.3 | 182 + .../share/man/man3/ASN1_STRING_TABLE_add.3 | 195 + .../local/share/man/man3/ASN1_STRING_length.3 | 242 + .../local/share/man/man3/ASN1_STRING_new.3 | 182 + .../share/man/man3/ASN1_STRING_print_ex.3 | 245 + .../usr/local/share/man/man3/ASN1_TIME_set.3 | 380 ++ .../usr/local/share/man/man3/ASN1_TYPE_get.3 | 231 + .../share/man/man3/ASN1_generate_nconf.3 | 381 ++ .../local/share/man/man3/ASYNC_WAIT_CTX_new.3 | 270 + .../local/share/man/man3/ASYNC_start_job.3 | 453 ++ .../usr/local/share/man/man3/BF_encrypt.3 | 249 + .../usr/local/share/man/man3/BIO_ADDR.3 | 253 + .../usr/local/share/man/man3/BIO_ADDRINFO.3 | 239 + .../usr/local/share/man/man3/BIO_connect.3 | 240 + .../usr/local/share/man/man3/BIO_ctrl.3 | 263 + .../usr/local/share/man/man3/BIO_f_base64.3 | 223 + .../usr/local/share/man/man3/BIO_f_buffer.3 | 227 + .../usr/local/share/man/man3/BIO_f_cipher.3 | 211 + .../usr/local/share/man/man3/BIO_f_md.3 | 295 + .../usr/local/share/man/man3/BIO_f_null.3 | 171 + .../usr/local/share/man/man3/BIO_f_ssl.3 | 435 ++ .../usr/local/share/man/man3/BIO_find_type.3 | 203 + .../usr/local/share/man/man3/BIO_get_data.3 | 195 + .../share/man/man3/BIO_get_ex_new_index.3 | 191 + .../usr/local/share/man/man3/BIO_meth_new.3 | 288 + .../usr/local/share/man/man3/BIO_new.3 | 202 + .../usr/local/share/man/man3/BIO_new_CMS.3 | 204 + .../local/share/man/man3/BIO_parse_hostserv.3 | 212 + .../usr/local/share/man/man3/BIO_printf.3 | 182 + .../usr/local/share/man/man3/BIO_push.3 | 224 + .../usr/local/share/man/man3/BIO_read.3 | 226 + .../usr/local/share/man/man3/BIO_s_accept.3 | 365 ++ .../usr/local/share/man/man3/BIO_s_bio.3 | 329 ++ .../usr/local/share/man/man3/BIO_s_connect.3 | 338 ++ .../usr/local/share/man/man3/BIO_s_fd.3 | 230 + .../usr/local/share/man/man3/BIO_s_file.3 | 303 + .../usr/local/share/man/man3/BIO_s_mem.3 | 297 + .../usr/local/share/man/man3/BIO_s_null.3 | 176 + .../usr/local/share/man/man3/BIO_s_socket.3 | 186 + .../local/share/man/man3/BIO_set_callback.3 | 392 ++ .../local/share/man/man3/BIO_should_retry.3 | 273 + .../local/share/man/man3/BN_BLINDING_new.3 | 254 + .../usr/local/share/man/man3/BN_CTX_new.3 | 213 + .../usr/local/share/man/man3/BN_CTX_start.3 | 189 + .../usr/local/share/man/man3/BN_add.3 | 259 + .../usr/local/share/man/man3/BN_add_word.3 | 192 + .../usr/local/share/man/man3/BN_bn2bin.3 | 245 + .../usr/local/share/man/man3/BN_cmp.3 | 180 + .../usr/local/share/man/man3/BN_copy.3 | 191 + .../local/share/man/man3/BN_generate_prime.3 | 341 ++ .../usr/local/share/man/man3/BN_mod_inverse.3 | 173 + .../share/man/man3/BN_mod_mul_montgomery.3 | 218 + .../share/man/man3/BN_mod_mul_reciprocal.3 | 205 + .../usr/local/share/man/man3/BN_new.3 | 195 + .../usr/local/share/man/man3/BN_num_bytes.3 | 192 + .../usr/local/share/man/man3/BN_rand.3 | 220 + .../local/share/man/man3/BN_security_bits.3 | 181 + .../usr/local/share/man/man3/BN_set_bit.3 | 200 + .../usr/local/share/man/man3/BN_swap.3 | 163 + .../usr/local/share/man/man3/BN_zero.3 | 197 + .../usr/local/share/man/man3/BUF_MEM_new.3 | 204 + .../usr/local/share/man/man3/CMS_add0_cert.3 | 200 + .../share/man/man3/CMS_add1_recipient_cert.3 | 203 + .../local/share/man/man3/CMS_add1_signer.3 | 238 + .../usr/local/share/man/man3/CMS_compress.3 | 210 + .../usr/local/share/man/man3/CMS_decrypt.3 | 212 + .../usr/local/share/man/man3/CMS_encrypt.3 | 233 + .../usr/local/share/man/man3/CMS_final.3 | 177 + .../share/man/man3/CMS_get0_RecipientInfos.3 | 265 + .../share/man/man3/CMS_get0_SignerInfos.3 | 218 + .../usr/local/share/man/man3/CMS_get0_type.3 | 217 + .../share/man/man3/CMS_get1_ReceiptRequest.3 | 209 + .../usr/local/share/man/man3/CMS_sign.3 | 258 + .../local/share/man/man3/CMS_sign_receipt.3 | 183 + .../usr/local/share/man/man3/CMS_uncompress.3 | 189 + .../usr/local/share/man/man3/CMS_verify.3 | 261 + .../local/share/man/man3/CMS_verify_receipt.3 | 185 + .../local/share/man/man3/CONF_modules_free.3 | 190 + .../share/man/man3/CONF_modules_load_file.3 | 282 + .../share/man/man3/CRYPTO_THREAD_run_once.3 | 283 + .../share/man/man3/CRYPTO_get_ex_new_index.3 | 298 + .../usr/local/share/man/man3/CRYPTO_memcmp.3 | 171 + .../man/man3/CTLOG_STORE_get0_log_by_id.3 | 179 + .../local/share/man/man3/CTLOG_STORE_new.3 | 209 + .../usr/local/share/man/man3/CTLOG_new.3 | 201 + .../share/man/man3/CT_POLICY_EVAL_CTX_new.3 | 229 + .../local/share/man/man3/DEFINE_STACK_OF.3 | 404 ++ .../usr/local/share/man/man3/DES_random_key.3 | 444 ++ .../local/share/man/man3/DH_generate_key.3 | 186 + .../share/man/man3/DH_generate_parameters.3 | 263 + .../usr/local/share/man/man3/DH_get0_pqg.3 | 254 + .../local/share/man/man3/DH_get_1024_160.3 | 191 + .../usr/local/share/man/man3/DH_meth_new.3 | 294 + .../usr/local/share/man/man3/DH_new.3 | 178 + .../usr/local/share/man/man3/DH_new_by_nid.3 | 172 + .../usr/local/share/man/man3/DH_set_method.3 | 219 + .../usr/local/share/man/man3/DH_size.3 | 187 + .../usr/local/share/man/man3/DSA_SIG_new.3 | 189 + .../usr/local/share/man/man3/DSA_do_sign.3 | 184 + .../usr/local/share/man/man3/DSA_dup_DH.3 | 172 + .../local/share/man/man3/DSA_generate_key.3 | 173 + .../share/man/man3/DSA_generate_parameters.3 | 240 + .../usr/local/share/man/man3/DSA_get0_pqg.3 | 239 + .../usr/local/share/man/man3/DSA_meth_new.3 | 342 ++ .../usr/local/share/man/man3/DSA_new.3 | 180 + .../usr/local/share/man/man3/DSA_set_method.3 | 219 + .../usr/local/share/man/man3/DSA_sign.3 | 202 + .../usr/local/share/man/man3/DSA_size.3 | 180 + .../local/share/man/man3/DTLS_get_data_mtu.3 | 168 + .../local/share/man/man3/DTLS_set_timer_cb.3 | 170 + .../usr/local/share/man/man3/DTLSv1_listen.3 | 264 + .../usr/local/share/man/man3/ECDSA_SIG_new.3 | 347 ++ .../share/man/man3/ECPKParameters_print.3 | 175 + .../share/man/man3/EC_GFp_simple_method.3 | 201 + .../usr/local/share/man/man3/EC_GROUP_copy.3 | 345 ++ .../usr/local/share/man/man3/EC_GROUP_new.3 | 279 + .../share/man/man3/EC_KEY_get_enc_flags.3 | 190 + .../usr/local/share/man/man3/EC_KEY_new.3 | 309 + .../usr/local/share/man/man3/EC_POINT_add.3 | 216 + .../usr/local/share/man/man3/EC_POINT_new.3 | 359 ++ .../usr/local/share/man/man3/ENGINE_add.3 | 767 +++ .../usr/local/share/man/man3/ERR_GET_LIB.3 | 196 + .../local/share/man/man3/ERR_clear_error.3 | 166 + .../local/share/man/man3/ERR_error_string.3 | 206 + .../usr/local/share/man/man3/ERR_get_error.3 | 208 + .../share/man/man3/ERR_load_crypto_strings.3 | 188 + .../local/share/man/man3/ERR_load_strings.3 | 191 + .../local/share/man/man3/ERR_print_errors.3 | 191 + .../usr/local/share/man/man3/ERR_put_error.3 | 207 + .../local/share/man/man3/ERR_remove_state.3 | 180 + .../usr/local/share/man/man3/ERR_set_mark.3 | 172 + .../usr/local/share/man/man3/EVP_BytesToKey.3 | 210 + .../man/man3/EVP_CIPHER_CTX_get_cipher_data.3 | 182 + .../share/man/man3/EVP_CIPHER_meth_new.3 | 343 ++ .../usr/local/share/man/man3/EVP_DigestInit.3 | 497 ++ .../local/share/man/man3/EVP_DigestSignInit.3 | 283 + .../share/man/man3/EVP_DigestVerifyInit.3 | 243 + .../usr/local/share/man/man3/EVP_EncodeInit.3 | 290 + .../local/share/man/man3/EVP_EncryptInit.3 | 720 +++ .../local/share/man/man3/EVP_MD_meth_new.3 | 301 + .../usr/local/share/man/man3/EVP_OpenInit.3 | 200 + .../share/man/man3/EVP_PKEY_ASN1_METHOD.3 | 553 ++ .../local/share/man/man3/EVP_PKEY_CTX_ctrl.3 | 538 ++ .../local/share/man/man3/EVP_PKEY_CTX_new.3 | 192 + .../man/man3/EVP_PKEY_CTX_set1_pbe_pass.3 | 183 + .../share/man/man3/EVP_PKEY_CTX_set_hkdf_md.3 | 288 + .../man3/EVP_PKEY_CTX_set_rsa_pss_keygen_md.3 | 222 + .../man/man3/EVP_PKEY_CTX_set_scrypt_N.3 | 211 + .../man/man3/EVP_PKEY_CTX_set_tls1_prf_md.3 | 240 + .../share/man/man3/EVP_PKEY_asn1_get_count.3 | 207 + .../usr/local/share/man/man3/EVP_PKEY_cmp.3 | 203 + .../local/share/man/man3/EVP_PKEY_decrypt.3 | 236 + .../local/share/man/man3/EVP_PKEY_derive.3 | 234 + .../local/share/man/man3/EVP_PKEY_encrypt.3 | 241 + .../man3/EVP_PKEY_get_default_digest_nid.3 | 181 + .../local/share/man/man3/EVP_PKEY_keygen.3 | 335 ++ .../share/man/man3/EVP_PKEY_meth_get_count.3 | 182 + .../local/share/man/man3/EVP_PKEY_meth_new.3 | 594 ++ .../usr/local/share/man/man3/EVP_PKEY_new.3 | 260 + .../share/man/man3/EVP_PKEY_print_private.3 | 191 + .../local/share/man/man3/EVP_PKEY_set1_RSA.3 | 282 + .../usr/local/share/man/man3/EVP_PKEY_sign.3 | 245 + .../usr/local/share/man/man3/EVP_PKEY_size.3 | 210 + .../local/share/man/man3/EVP_PKEY_verify.3 | 234 + .../share/man/man3/EVP_PKEY_verify_recover.3 | 245 + .../usr/local/share/man/man3/EVP_SealInit.3 | 223 + .../usr/local/share/man/man3/EVP_SignInit.3 | 228 + .../usr/local/share/man/man3/EVP_VerifyInit.3 | 223 + .../usr/local/share/man/man3/EVP_aes.3 | 223 + .../usr/local/share/man/man3/EVP_aria.3 | 182 + .../usr/local/share/man/man3/EVP_bf_cbc.3 | 179 + .../usr/local/share/man/man3/EVP_blake2b512.3 | 186 + .../usr/local/share/man/man3/EVP_camellia.3 | 177 + .../usr/local/share/man/man3/EVP_cast5_cbc.3 | 179 + .../usr/local/share/man/man3/EVP_chacha20.3 | 188 + .../usr/local/share/man/man3/EVP_des.3 | 187 + .../usr/local/share/man/man3/EVP_desx_cbc.3 | 175 + .../usr/local/share/man/man3/EVP_idea_cbc.3 | 177 + .../usr/local/share/man/man3/EVP_md2.3 | 176 + .../usr/local/share/man/man3/EVP_md4.3 | 176 + .../usr/local/share/man/man3/EVP_md5.3 | 186 + .../usr/local/share/man/man3/EVP_mdc2.3 | 177 + .../usr/local/share/man/man3/EVP_rc2_cbc.3 | 189 + .../usr/local/share/man/man3/EVP_rc4.3 | 189 + .../share/man/man3/EVP_rc5_32_12_16_cbc.3 | 196 + .../usr/local/share/man/man3/EVP_ripemd160.3 | 176 + .../usr/local/share/man/man3/EVP_seed_cbc.3 | 179 + .../usr/local/share/man/man3/EVP_sha1.3 | 177 + .../usr/local/share/man/man3/EVP_sha224.3 | 187 + .../usr/local/share/man/man3/EVP_sha3_224.3 | 192 + .../usr/local/share/man/man3/EVP_sm3.3 | 177 + .../usr/local/share/man/man3/EVP_sm4_cbc.3 | 182 + .../usr/local/share/man/man3/EVP_whirlpool.3 | 177 + .../arm64-v8a/usr/local/share/man/man3/HMAC.3 | 279 + .../arm64-v8a/usr/local/share/man/man3/MD5.3 | 224 + .../usr/local/share/man/man3/MDC2_Init.3 | 199 + .../usr/local/share/man/man3/OBJ_nid2obj.3 | 327 ++ .../local/share/man/man3/OCSP_REQUEST_new.3 | 248 + .../local/share/man/man3/OCSP_cert_to_id.3 | 218 + .../share/man/man3/OCSP_request_add1_nonce.3 | 215 + .../share/man/man3/OCSP_resp_find_status.3 | 319 + .../share/man/man3/OCSP_response_status.3 | 244 + .../local/share/man/man3/OCSP_sendreq_new.3 | 252 + .../local/share/man/man3/OPENSSL_Applink.3 | 168 + .../share/man/man3/OPENSSL_LH_COMPFUNC.3 | 369 ++ .../local/share/man/man3/OPENSSL_LH_stats.3 | 197 + .../share/man/man3/OPENSSL_VERSION_NUMBER.3 | 242 + .../usr/local/share/man/man3/OPENSSL_config.3 | 210 + .../share/man/man3/OPENSSL_fork_prepare.3 | 191 + .../local/share/man/man3/OPENSSL_ia32cap.3 | 295 + .../share/man/man3/OPENSSL_init_crypto.3 | 379 ++ .../local/share/man/man3/OPENSSL_init_ssl.3 | 209 + .../share/man/man3/OPENSSL_instrument_bus.3 | 186 + .../man/man3/OPENSSL_load_builtin_modules.3 | 187 + .../usr/local/share/man/man3/OPENSSL_malloc.3 | 371 ++ .../share/man/man3/OPENSSL_secure_malloc.3 | 263 + .../local/share/man/man3/OSSL_STORE_INFO.3 | 314 + .../local/share/man/man3/OSSL_STORE_LOADER.3 | 362 ++ .../local/share/man/man3/OSSL_STORE_SEARCH.3 | 300 + .../local/share/man/man3/OSSL_STORE_expect.3 | 206 + .../local/share/man/man3/OSSL_STORE_open.3 | 281 + .../man/man3/OpenSSL_add_all_algorithms.3 | 195 + .../local/share/man/man3/PEM_bytes_read_bio.3 | 216 + .../usr/local/share/man/man3/PEM_read.3 | 263 + .../usr/local/share/man/man3/PEM_read_CMS.3 | 199 + .../share/man/man3/PEM_read_bio_PrivateKey.3 | 622 ++ .../local/share/man/man3/PEM_read_bio_ex.3 | 199 + .../share/man/man3/PEM_write_bio_CMS_stream.3 | 180 + .../man/man3/PEM_write_bio_PKCS7_stream.3 | 179 + .../usr/local/share/man/man3/PKCS12_create.3 | 217 + .../usr/local/share/man/man3/PKCS12_newpass.3 | 246 + .../usr/local/share/man/man3/PKCS12_parse.3 | 203 + .../local/share/man/man3/PKCS5_PBKDF2_HMAC.3 | 208 + .../usr/local/share/man/man3/PKCS7_decrypt.3 | 187 + .../usr/local/share/man/man3/PKCS7_encrypt.3 | 218 + .../usr/local/share/man/man3/PKCS7_sign.3 | 252 + .../share/man/man3/PKCS7_sign_add_signer.3 | 224 + .../usr/local/share/man/man3/PKCS7_verify.3 | 258 + .../local/share/man/man3/RAND_DRBG_generate.3 | 214 + .../share/man/man3/RAND_DRBG_get0_master.3 | 204 + .../usr/local/share/man/man3/RAND_DRBG_new.3 | 247 + .../local/share/man/man3/RAND_DRBG_reseed.3 | 239 + .../share/man/man3/RAND_DRBG_set_callbacks.3 | 268 + .../share/man/man3/RAND_DRBG_set_ex_data.3 | 193 + .../usr/local/share/man/man3/RAND_add.3 | 235 + .../usr/local/share/man/man3/RAND_bytes.3 | 215 + .../usr/local/share/man/man3/RAND_cleanup.3 | 175 + .../usr/local/share/man/man3/RAND_egd.3 | 193 + .../usr/local/share/man/man3/RAND_load_file.3 | 218 + .../share/man/man3/RAND_set_rand_method.3 | 203 + .../usr/local/share/man/man3/RC4_set_key.3 | 197 + .../usr/local/share/man/man3/RIPEMD160_Init.3 | 200 + .../local/share/man/man3/RSA_blinding_on.3 | 176 + .../usr/local/share/man/man3/RSA_check_key.3 | 213 + .../local/share/man/man3/RSA_generate_key.3 | 233 + .../usr/local/share/man/man3/RSA_get0_key.3 | 303 + .../usr/local/share/man/man3/RSA_meth_new.3 | 382 ++ .../usr/local/share/man/man3/RSA_new.3 | 179 + .../man/man3/RSA_padding_add_PKCS1_type_1.3 | 276 + .../usr/local/share/man/man3/RSA_print.3 | 182 + .../share/man/man3/RSA_private_encrypt.3 | 200 + .../local/share/man/man3/RSA_public_encrypt.3 | 231 + .../usr/local/share/man/man3/RSA_set_method.3 | 315 + .../usr/local/share/man/man3/RSA_sign.3 | 196 + .../man/man3/RSA_sign_ASN1_OCTET_STRING.3 | 198 + .../usr/local/share/man/man3/RSA_size.3 | 186 + .../usr/local/share/man/man3/SCT_new.3 | 306 + .../usr/local/share/man/man3/SCT_print.3 | 187 + .../usr/local/share/man/man3/SCT_validate.3 | 223 + .../usr/local/share/man/man3/SHA256_Init.3 | 236 + .../usr/local/share/man/man3/SMIME_read_CMS.3 | 207 + .../local/share/man/man3/SMIME_read_PKCS7.3 | 210 + .../local/share/man/man3/SMIME_write_CMS.3 | 199 + .../local/share/man/man3/SMIME_write_PKCS7.3 | 200 + .../share/man/man3/SSL_CIPHER_get_name.3 | 325 ++ .../man3/SSL_COMP_add_compression_method.3 | 229 + .../local/share/man/man3/SSL_CONF_CTX_new.3 | 181 + .../share/man/man3/SSL_CONF_CTX_set1_prefix.3 | 188 + .../share/man/man3/SSL_CONF_CTX_set_flags.3 | 205 + .../share/man/man3/SSL_CONF_CTX_set_ssl_ctx.3 | 186 + .../usr/local/share/man/man3/SSL_CONF_cmd.3 | 777 +++ .../local/share/man/man3/SSL_CONF_cmd_argv.3 | 182 + .../share/man/man3/SSL_CTX_add1_chain_cert.3 | 282 + .../man/man3/SSL_CTX_add_extra_chain_cert.3 | 209 + .../share/man/man3/SSL_CTX_add_session.3 | 200 + .../usr/local/share/man/man3/SSL_CTX_config.3 | 224 + .../usr/local/share/man/man3/SSL_CTX_ctrl.3 | 175 + .../share/man/man3/SSL_CTX_dane_enable.3 | 508 ++ .../share/man/man3/SSL_CTX_flush_sessions.3 | 188 + .../usr/local/share/man/man3/SSL_CTX_free.3 | 182 + .../local/share/man/man3/SSL_CTX_get0_param.3 | 194 + .../share/man/man3/SSL_CTX_get_verify_mode.3 | 191 + .../man/man3/SSL_CTX_has_client_custom_ext.3 | 168 + .../man/man3/SSL_CTX_load_verify_locations.3 | 287 + .../usr/local/share/man/man3/SSL_CTX_new.3 | 326 ++ .../share/man/man3/SSL_CTX_sess_number.3 | 217 + .../man/man3/SSL_CTX_sess_set_cache_size.3 | 193 + .../share/man/man3/SSL_CTX_sess_set_get_cb.3 | 254 + .../local/share/man/man3/SSL_CTX_sessions.3 | 178 + .../share/man/man3/SSL_CTX_set0_CA_list.3 | 307 + .../share/man/man3/SSL_CTX_set1_curves.3 | 238 + .../share/man/man3/SSL_CTX_set1_sigalgs.3 | 249 + .../man/man3/SSL_CTX_set1_verify_cert_store.3 | 226 + .../man/man3/SSL_CTX_set_alpn_select_cb.3 | 314 + .../share/man/man3/SSL_CTX_set_cert_cb.3 | 213 + .../share/man/man3/SSL_CTX_set_cert_store.3 | 219 + .../man3/SSL_CTX_set_cert_verify_callback.3 | 209 + .../share/man/man3/SSL_CTX_set_cipher_list.3 | 237 + .../man/man3/SSL_CTX_set_client_cert_cb.3 | 241 + .../man/man3/SSL_CTX_set_client_hello_cb.3 | 262 + .../man3/SSL_CTX_set_ct_validation_callback.3 | 271 + .../man/man3/SSL_CTX_set_ctlog_list_file.3 | 183 + .../man/man3/SSL_CTX_set_default_passwd_cb.3 | 240 + .../share/man/man3/SSL_CTX_set_ex_data.3 | 182 + .../man3/SSL_CTX_set_generate_session_id.3 | 267 + .../man/man3/SSL_CTX_set_info_callback.3 | 285 + .../man/man3/SSL_CTX_set_keylog_callback.3 | 183 + .../man/man3/SSL_CTX_set_max_cert_list.3 | 213 + .../man/man3/SSL_CTX_set_min_proto_version.3 | 199 + .../local/share/man/man3/SSL_CTX_set_mode.3 | 266 + .../share/man/man3/SSL_CTX_set_msg_callback.3 | 252 + .../share/man/man3/SSL_CTX_set_num_tickets.3 | 196 + .../share/man/man3/SSL_CTX_set_options.3 | 471 ++ .../man3/SSL_CTX_set_psk_client_callback.3 | 292 + .../man/man3/SSL_CTX_set_quiet_shutdown.3 | 203 + .../share/man/man3/SSL_CTX_set_read_ahead.3 | 202 + .../SSL_CTX_set_record_padding_callback.3 | 219 + .../man/man3/SSL_CTX_set_security_level.3 | 309 + .../man/man3/SSL_CTX_set_session_cache_mode.3 | 258 + .../man/man3/SSL_CTX_set_session_id_context.3 | 215 + .../man/man3/SSL_CTX_set_session_ticket_cb.3 | 301 + .../man3/SSL_CTX_set_split_send_fragment.3 | 303 + .../share/man/man3/SSL_CTX_set_ssl_version.3 | 193 + ...SSL_CTX_set_stateless_cookie_generate_cb.3 | 222 + .../share/man/man3/SSL_CTX_set_timeout.3 | 199 + .../SSL_CTX_set_tlsext_servername_callback.3 | 285 + .../man/man3/SSL_CTX_set_tlsext_status_cb.3 | 245 + .../man3/SSL_CTX_set_tlsext_ticket_key_cb.3 | 323 + .../man/man3/SSL_CTX_set_tlsext_use_srtp.3 | 231 + .../man/man3/SSL_CTX_set_tmp_dh_callback.3 | 269 + .../local/share/man/man3/SSL_CTX_set_verify.3 | 472 ++ .../share/man/man3/SSL_CTX_use_certificate.3 | 324 + .../man/man3/SSL_CTX_use_psk_identity_hint.3 | 269 + .../share/man/man3/SSL_CTX_use_serverinfo.3 | 215 + .../local/share/man/man3/SSL_SESSION_free.3 | 214 + .../share/man/man3/SSL_SESSION_get0_cipher.3 | 187 + .../man/man3/SSL_SESSION_get0_hostname.3 | 204 + .../man/man3/SSL_SESSION_get0_id_context.3 | 185 + .../share/man/man3/SSL_SESSION_get0_peer.3 | 169 + .../man/man3/SSL_SESSION_get_compress_id.3 | 170 + .../share/man/man3/SSL_SESSION_get_ex_data.3 | 177 + .../man3/SSL_SESSION_get_protocol_version.3 | 185 + .../share/man/man3/SSL_SESSION_get_time.3 | 204 + .../share/man/man3/SSL_SESSION_has_ticket.3 | 188 + .../share/man/man3/SSL_SESSION_is_resumable.3 | 174 + .../local/share/man/man3/SSL_SESSION_print.3 | 176 + .../share/man/man3/SSL_SESSION_set1_id.3 | 179 + .../usr/local/share/man/man3/SSL_accept.3 | 205 + .../share/man/man3/SSL_alert_type_string.3 | 369 ++ .../local/share/man/man3/SSL_alloc_buffers.3 | 193 + .../local/share/man/man3/SSL_check_chain.3 | 225 + .../usr/local/share/man/man3/SSL_clear.3 | 208 + .../usr/local/share/man/man3/SSL_connect.3 | 220 + .../local/share/man/man3/SSL_do_handshake.3 | 204 + .../man/man3/SSL_export_keying_material.3 | 217 + .../share/man/man3/SSL_extension_supported.3 | 399 ++ .../usr/local/share/man/man3/SSL_free.3 | 186 + .../local/share/man/man3/SSL_get0_peer_scts.3 | 176 + .../local/share/man/man3/SSL_get_SSL_CTX.3 | 167 + .../share/man/man3/SSL_get_all_async_fds.3 | 213 + .../local/share/man/man3/SSL_get_ciphers.3 | 241 + .../share/man/man3/SSL_get_client_random.3 | 229 + .../share/man/man3/SSL_get_current_cipher.3 | 200 + .../share/man/man3/SSL_get_default_timeout.3 | 181 + .../usr/local/share/man/man3/SSL_get_error.3 | 304 + .../share/man/man3/SSL_get_extms_support.3 | 172 + .../usr/local/share/man/man3/SSL_get_fd.3 | 179 + .../share/man/man3/SSL_get_peer_cert_chain.3 | 201 + .../share/man/man3/SSL_get_peer_certificate.3 | 189 + .../man/man3/SSL_get_peer_signature_nid.3 | 183 + .../share/man/man3/SSL_get_peer_tmp_key.3 | 183 + .../share/man/man3/SSL_get_psk_identity.3 | 173 + .../usr/local/share/man/man3/SSL_get_rbio.3 | 175 + .../local/share/man/man3/SSL_get_session.3 | 235 + .../share/man/man3/SSL_get_shared_sigalgs.3 | 219 + .../share/man/man3/SSL_get_verify_result.3 | 190 + .../local/share/man/man3/SSL_get_version.3 | 221 + .../usr/local/share/man/man3/SSL_in_init.3 | 227 + .../usr/local/share/man/man3/SSL_key_update.3 | 236 + .../local/share/man/man3/SSL_library_init.3 | 185 + .../share/man/man3/SSL_load_client_CA_file.3 | 209 + .../usr/local/share/man/man3/SSL_new.3 | 195 + .../usr/local/share/man/man3/SSL_pending.3 | 199 + .../usr/local/share/man/man3/SSL_read.3 | 275 + .../share/man/man3/SSL_read_early_data.3 | 480 ++ .../local/share/man/man3/SSL_rstate_string.3 | 195 + .../local/share/man/man3/SSL_session_reused.3 | 178 + .../usr/local/share/man/man3/SSL_set1_host.3 | 249 + .../usr/local/share/man/man3/SSL_set_bio.3 | 227 + .../share/man/man3/SSL_set_connect_state.3 | 207 + .../usr/local/share/man/man3/SSL_set_fd.3 | 188 + .../local/share/man/man3/SSL_set_session.3 | 194 + .../local/share/man/man3/SSL_set_shutdown.3 | 204 + .../share/man/man3/SSL_set_verify_result.3 | 178 + .../usr/local/share/man/man3/SSL_shutdown.3 | 287 + .../local/share/man/man3/SSL_state_string.3 | 185 + .../usr/local/share/man/man3/SSL_want.3 | 233 + .../usr/local/share/man/man3/SSL_write.3 | 251 + .../usr/local/share/man/man3/UI_STRING.3 | 274 + .../local/share/man/man3/UI_UTIL_read_pw.3 | 202 + .../local/share/man/man3/UI_create_method.3 | 319 + .../usr/local/share/man/man3/UI_new.3 | 376 ++ .../usr/local/share/man/man3/X509V3_get_d2i.3 | 375 ++ .../usr/local/share/man/man3/X509_ALGOR_dup.3 | 193 + .../share/man/man3/X509_CRL_get0_by_serial.3 | 242 + .../man/man3/X509_EXTENSION_set_object.3 | 223 + .../usr/local/share/man/man3/X509_LOOKUP.3 | 310 + .../share/man/man3/X509_LOOKUP_hash_dir.3 | 264 + .../share/man/man3/X509_LOOKUP_meth_new.3 | 310 + .../man/man3/X509_NAME_ENTRY_get_object.3 | 224 + .../man/man3/X509_NAME_add_entry_by_txt.3 | 257 + .../local/share/man/man3/X509_NAME_get0_der.3 | 171 + .../man/man3/X509_NAME_get_index_by_NID.3 | 254 + .../local/share/man/man3/X509_NAME_print_ex.3 | 252 + .../local/share/man/man3/X509_PUBKEY_new.3 | 248 + .../usr/local/share/man/man3/X509_SIG_get0.3 | 172 + .../share/man/man3/X509_STORE_CTX_get_error.3 | 416 ++ .../local/share/man/man3/X509_STORE_CTX_new.3 | 295 + .../man/man3/X509_STORE_CTX_set_verify_cb.3 | 334 ++ .../share/man/man3/X509_STORE_add_cert.3 | 243 + .../share/man/man3/X509_STORE_get0_param.3 | 186 + .../usr/local/share/man/man3/X509_STORE_new.3 | 188 + .../man/man3/X509_STORE_set_verify_cb_func.3 | 364 ++ .../man/man3/X509_VERIFY_PARAM_set_flags.3 | 500 ++ .../usr/local/share/man/man3/X509_check_ca.3 | 177 + .../local/share/man/man3/X509_check_host.3 | 288 + .../local/share/man/man3/X509_check_issued.3 | 175 + .../share/man/man3/X509_check_private_key.3 | 183 + .../local/share/man/man3/X509_check_purpose.3 | 204 + .../usr/local/share/man/man3/X509_cmp.3 | 209 + .../usr/local/share/man/man3/X509_cmp_time.3 | 192 + .../usr/local/share/man/man3/X509_digest.3 | 194 + .../usr/local/share/man/man3/X509_dup.3 | 202 + .../share/man/man3/X509_get0_notBefore.3 | 231 + .../share/man/man3/X509_get0_signature.3 | 257 + .../usr/local/share/man/man3/X509_get0_uids.3 | 188 + .../share/man/man3/X509_get_extension_flags.3 | 308 + .../local/share/man/man3/X509_get_pubkey.3 | 215 + .../share/man/man3/X509_get_serialNumber.3 | 200 + .../share/man/man3/X509_get_subject_name.3 | 214 + .../local/share/man/man3/X509_get_version.3 | 211 + .../usr/local/share/man/man3/X509_new.3 | 213 + .../usr/local/share/man/man3/X509_sign.3 | 227 + .../local/share/man/man3/X509_verify_cert.3 | 190 + .../share/man/man3/X509v3_get_ext_by_NID.3 | 264 + .../usr/local/share/man/man3/d2i_DHparams.3 | 174 + .../share/man/man3/d2i_PKCS8PrivateKey_bio.3 | 203 + .../usr/local/share/man/man3/d2i_PrivateKey.3 | 209 + .../local/share/man/man3/d2i_SSL_SESSION.3 | 182 + .../usr/local/share/man/man3/d2i_X509.3 | 385 ++ .../local/share/man/man3/i2d_CMS_bio_stream.3 | 182 + .../share/man/man3/i2d_PKCS7_bio_stream.3 | 182 + .../local/share/man/man3/i2d_re_X509_tbs.3 | 218 + .../usr/local/share/man/man3/o2i_SCT_LIST.3 | 179 + .../usr/local/share/man/man5/config.5 | 600 ++ .../usr/local/share/man/man5/x509v3_config.5 | 704 +++ .../usr/local/share/man/man7/Ed25519.7 | 221 + .../arm64-v8a/usr/local/share/man/man7/RAND.7 | 210 + .../usr/local/share/man/man7/RAND_DRBG.7 | 396 ++ .../usr/local/share/man/man7/RSA-PSS.7 | 189 + .../arm64-v8a/usr/local/share/man/man7/SM2.7 | 217 + .../usr/local/share/man/man7/X25519.7 | 208 + .../arm64-v8a/usr/local/share/man/man7/bio.7 | 217 + .../usr/local/share/man/man7/crypto.7 | 191 + .../arm64-v8a/usr/local/share/man/man7/ct.7 | 185 + .../usr/local/share/man/man7/des_modes.7 | 295 + .../arm64-v8a/usr/local/share/man/man7/evp.7 | 236 + .../local/share/man/man7/ossl_store-file.7 | 191 + .../usr/local/share/man/man7/ossl_store.7 | 215 + .../share/man/man7/passphrase-encoding.7 | 287 + .../local/share/man/man7/proxy-certificates.7 | 478 ++ .../usr/local/share/man/man7/scrypt.7 | 248 + .../arm64-v8a/usr/local/share/man/man7/ssl.7 | 914 +++ .../arm64-v8a/usr/local/share/man/man7/x509.7 | 206 + .../arm64-v8a/usr/local/ssl/ct_log_list.cnf | 9 + .../usr/local/ssl/ct_log_list.cnf.dist | 9 + .../arm64-v8a/usr/local/ssl/misc/CA.pl | 215 + .../arm64-v8a/usr/local/ssl/misc/tsget.pl | 200 + .../arm64-v8a/usr/local/ssl/openssl.cnf | 350 ++ .../arm64-v8a/usr/local/ssl/openssl.cnf.dist | 350 ++ deps/openssl/mingw64/bin/c_rehash | 232 + deps/openssl/mingw64/bin/openssl.exe | Bin 0 -> 4872751 bytes deps/openssl/mingw64/include/openssl/aes.h | 92 + deps/openssl/mingw64/include/openssl/asn1.h | 886 +++ .../mingw64/include/openssl/asn1_mac.h | 10 + .../openssl/mingw64/include/openssl/asn1err.h | 256 + deps/openssl/mingw64/include/openssl/asn1t.h | 945 +++ deps/openssl/mingw64/include/openssl/async.h | 76 + .../mingw64/include/openssl/asyncerr.h | 42 + deps/openssl/mingw64/include/openssl/bio.h | 801 +++ deps/openssl/mingw64/include/openssl/bioerr.h | 124 + .../mingw64/include/openssl/blowfish.h | 61 + deps/openssl/mingw64/include/openssl/bn.h | 539 ++ deps/openssl/mingw64/include/openssl/bnerr.h | 100 + deps/openssl/mingw64/include/openssl/buffer.h | 58 + .../mingw64/include/openssl/buffererr.h | 34 + .../mingw64/include/openssl/camellia.h | 83 + deps/openssl/mingw64/include/openssl/cast.h | 53 + deps/openssl/mingw64/include/openssl/cmac.h | 41 + deps/openssl/mingw64/include/openssl/cms.h | 339 ++ deps/openssl/mingw64/include/openssl/cmserr.h | 202 + deps/openssl/mingw64/include/openssl/comp.h | 53 + .../openssl/mingw64/include/openssl/comperr.h | 44 + deps/openssl/mingw64/include/openssl/conf.h | 168 + .../mingw64/include/openssl/conf_api.h | 40 + .../openssl/mingw64/include/openssl/conferr.h | 76 + deps/openssl/mingw64/include/openssl/crypto.h | 445 ++ .../mingw64/include/openssl/cryptoerr.h | 57 + deps/openssl/mingw64/include/openssl/ct.h | 474 ++ deps/openssl/mingw64/include/openssl/cterr.h | 80 + deps/openssl/mingw64/include/openssl/des.h | 174 + deps/openssl/mingw64/include/openssl/dh.h | 340 ++ deps/openssl/mingw64/include/openssl/dherr.h | 88 + deps/openssl/mingw64/include/openssl/dsa.h | 244 + deps/openssl/mingw64/include/openssl/dsaerr.h | 72 + deps/openssl/mingw64/include/openssl/dtls1.h | 55 + deps/openssl/mingw64/include/openssl/e_os2.h | 300 + deps/openssl/mingw64/include/openssl/ebcdic.h | 33 + deps/openssl/mingw64/include/openssl/ec.h | 1479 +++++ deps/openssl/mingw64/include/openssl/ecdh.h | 10 + deps/openssl/mingw64/include/openssl/ecdsa.h | 10 + deps/openssl/mingw64/include/openssl/ecerr.h | 275 + deps/openssl/mingw64/include/openssl/engine.h | 751 +++ .../mingw64/include/openssl/engineerr.h | 111 + deps/openssl/mingw64/include/openssl/err.h | 274 + deps/openssl/mingw64/include/openssl/evp.h | 1666 ++++++ deps/openssl/mingw64/include/openssl/evperr.h | 205 + deps/openssl/mingw64/include/openssl/hmac.h | 51 + deps/openssl/mingw64/include/openssl/idea.h | 64 + deps/openssl/mingw64/include/openssl/kdf.h | 97 + deps/openssl/mingw64/include/openssl/kdferr.h | 55 + deps/openssl/mingw64/include/openssl/lhash.h | 241 + deps/openssl/mingw64/include/openssl/md2.h | 44 + deps/openssl/mingw64/include/openssl/md4.h | 51 + deps/openssl/mingw64/include/openssl/md5.h | 50 + deps/openssl/mingw64/include/openssl/mdc2.h | 42 + deps/openssl/mingw64/include/openssl/modes.h | 208 + .../openssl/mingw64/include/openssl/obj_mac.h | 5198 +++++++++++++++++ .../openssl/mingw64/include/openssl/objects.h | 175 + .../mingw64/include/openssl/objectserr.h | 42 + deps/openssl/mingw64/include/openssl/ocsp.h | 352 ++ .../openssl/mingw64/include/openssl/ocsperr.h | 78 + .../mingw64/include/openssl/opensslconf.h | 198 + .../mingw64/include/openssl/opensslv.h | 101 + .../mingw64/include/openssl/ossl_typ.h | 197 + deps/openssl/mingw64/include/openssl/pem.h | 378 ++ deps/openssl/mingw64/include/openssl/pem2.h | 13 + deps/openssl/mingw64/include/openssl/pemerr.h | 103 + deps/openssl/mingw64/include/openssl/pkcs12.h | 223 + .../mingw64/include/openssl/pkcs12err.h | 81 + deps/openssl/mingw64/include/openssl/pkcs7.h | 319 + .../mingw64/include/openssl/pkcs7err.h | 103 + deps/openssl/mingw64/include/openssl/rand.h | 77 + .../mingw64/include/openssl/rand_drbg.h | 130 + .../openssl/mingw64/include/openssl/randerr.h | 94 + deps/openssl/mingw64/include/openssl/rc2.h | 51 + deps/openssl/mingw64/include/openssl/rc4.h | 36 + deps/openssl/mingw64/include/openssl/rc5.h | 63 + deps/openssl/mingw64/include/openssl/ripemd.h | 47 + deps/openssl/mingw64/include/openssl/rsa.h | 513 ++ deps/openssl/mingw64/include/openssl/rsaerr.h | 167 + .../mingw64/include/openssl/safestack.h | 207 + deps/openssl/mingw64/include/openssl/seed.h | 96 + deps/openssl/mingw64/include/openssl/sha.h | 119 + deps/openssl/mingw64/include/openssl/srp.h | 135 + deps/openssl/mingw64/include/openssl/srtp.h | 50 + deps/openssl/mingw64/include/openssl/ssl.h | 2438 ++++++++ deps/openssl/mingw64/include/openssl/ssl2.h | 24 + deps/openssl/mingw64/include/openssl/ssl3.h | 339 ++ deps/openssl/mingw64/include/openssl/sslerr.h | 773 +++ deps/openssl/mingw64/include/openssl/stack.h | 83 + deps/openssl/mingw64/include/openssl/store.h | 266 + .../mingw64/include/openssl/storeerr.h | 91 + .../mingw64/include/openssl/symhacks.h | 37 + deps/openssl/mingw64/include/openssl/tls1.h | 1237 ++++ deps/openssl/mingw64/include/openssl/ts.h | 559 ++ deps/openssl/mingw64/include/openssl/tserr.h | 132 + deps/openssl/mingw64/include/openssl/txt_db.h | 57 + deps/openssl/mingw64/include/openssl/ui.h | 368 ++ deps/openssl/mingw64/include/openssl/uierr.h | 65 + .../mingw64/include/openssl/whrlpool.h | 48 + deps/openssl/mingw64/include/openssl/x509.h | 1047 ++++ .../mingw64/include/openssl/x509_vfy.h | 628 ++ .../openssl/mingw64/include/openssl/x509err.h | 130 + deps/openssl/mingw64/include/openssl/x509v3.h | 937 +++ .../mingw64/include/openssl/x509v3err.h | 162 + .../mingw64/lib/pkgconfig/libcrypto.pc | 12 + deps/openssl/mingw64/lib/pkgconfig/libssl.pc | 11 + deps/openssl/mingw64/lib/pkgconfig/openssl.pc | 9 + .../share/doc/openssl/html/man1/CA.pl.html | 198 + .../doc/openssl/html/man1/asn1parse.html | 227 + .../share/doc/openssl/html/man1/ca.html | 671 +++ .../share/doc/openssl/html/man1/ciphers.html | 811 +++ .../share/doc/openssl/html/man1/cms.html | 636 ++ .../share/doc/openssl/html/man1/crl.html | 170 + .../doc/openssl/html/man1/crl2pkcs7.html | 119 + .../share/doc/openssl/html/man1/dgst.html | 250 + .../share/doc/openssl/html/man1/dhparam.html | 170 + .../share/doc/openssl/html/man1/dsa.html | 178 + .../share/doc/openssl/html/man1/dsaparam.html | 144 + .../share/doc/openssl/html/man1/ec.html | 198 + .../share/doc/openssl/html/man1/ecparam.html | 201 + .../share/doc/openssl/html/man1/enc.html | 412 ++ .../share/doc/openssl/html/man1/engine.html | 133 + .../share/doc/openssl/html/man1/errstr.html | 64 + .../share/doc/openssl/html/man1/gendsa.html | 103 + .../share/doc/openssl/html/man1/genpkey.html | 363 ++ .../share/doc/openssl/html/man1/genrsa.html | 123 + .../share/doc/openssl/html/man1/list.html | 111 + .../share/doc/openssl/html/man1/nseq.html | 101 + .../share/doc/openssl/html/man1/ocsp.html | 415 ++ .../share/doc/openssl/html/man1/openssl.html | 712 +++ .../share/doc/openssl/html/man1/passwd.html | 154 + .../share/doc/openssl/html/man1/pkcs12.html | 379 ++ .../share/doc/openssl/html/man1/pkcs7.html | 141 + .../share/doc/openssl/html/man1/pkcs8.html | 291 + .../share/doc/openssl/html/man1/pkey.html | 185 + .../doc/openssl/html/man1/pkeyparam.html | 110 + .../share/doc/openssl/html/man1/pkeyutl.html | 331 ++ .../share/doc/openssl/html/man1/prime.html | 89 + .../share/doc/openssl/html/man1/rand.html | 101 + .../share/doc/openssl/html/man1/rehash.html | 132 + .../share/doc/openssl/html/man1/req.html | 612 ++ .../share/doc/openssl/html/man1/rsa.html | 202 + .../share/doc/openssl/html/man1/rsautl.html | 236 + .../share/doc/openssl/html/man1/s_client.html | 681 +++ .../share/doc/openssl/html/man1/s_server.html | 714 +++ .../share/doc/openssl/html/man1/s_time.html | 190 + .../share/doc/openssl/html/man1/sess_id.html | 195 + .../share/doc/openssl/html/man1/smime.html | 454 ++ .../share/doc/openssl/html/man1/speed.html | 117 + .../share/doc/openssl/html/man1/spkac.html | 167 + .../share/doc/openssl/html/man1/srp.html | 71 + .../share/doc/openssl/html/man1/storeutl.html | 151 + .../share/doc/openssl/html/man1/ts.html | 555 ++ .../share/doc/openssl/html/man1/tsget.html | 190 + .../share/doc/openssl/html/man1/verify.html | 825 +++ .../share/doc/openssl/html/man1/version.html | 110 + .../share/doc/openssl/html/man1/x509.html | 892 +++ .../doc/openssl/html/man3/ADMISSIONS.html | 120 + .../html/man3/ASN1_INTEGER_get_int64.html | 116 + .../openssl/html/man3/ASN1_ITEM_lookup.html | 59 + .../openssl/html/man3/ASN1_OBJECT_new.html | 68 + .../html/man3/ASN1_STRING_TABLE_add.html | 82 + .../openssl/html/man3/ASN1_STRING_length.html | 107 + .../openssl/html/man3/ASN1_STRING_new.html | 69 + .../html/man3/ASN1_STRING_print_ex.html | 103 + .../doc/openssl/html/man3/ASN1_TIME_set.html | 190 + .../doc/openssl/html/man3/ASN1_TYPE_get.html | 89 + .../html/man3/ASN1_generate_nconf.html | 274 + .../openssl/html/man3/ASYNC_WAIT_CTX_new.html | 96 + .../openssl/html/man3/ASYNC_start_job.html | 273 + .../doc/openssl/html/man3/BF_encrypt.html | 95 + .../share/doc/openssl/html/man3/BIO_ADDR.html | 96 + .../doc/openssl/html/man3/BIO_ADDRINFO.html | 101 + .../doc/openssl/html/man3/BIO_connect.html | 121 + .../share/doc/openssl/html/man3/BIO_ctrl.html | 115 + .../doc/openssl/html/man3/BIO_f_base64.html | 102 + .../doc/openssl/html/man3/BIO_f_buffer.html | 89 + .../doc/openssl/html/man3/BIO_f_cipher.html | 81 + .../share/doc/openssl/html/man3/BIO_f_md.html | 156 + .../doc/openssl/html/man3/BIO_f_null.html | 58 + .../doc/openssl/html/man3/BIO_f_ssl.html | 263 + .../doc/openssl/html/man3/BIO_find_type.html | 83 + .../doc/openssl/html/man3/BIO_get_data.html | 76 + .../html/man3/BIO_get_ex_new_index.html | 75 + .../doc/openssl/html/man3/BIO_meth_new.html | 128 + .../share/doc/openssl/html/man3/BIO_new.html | 84 + .../doc/openssl/html/man3/BIO_new_CMS.html | 81 + .../openssl/html/man3/BIO_parse_hostserv.html | 91 + .../doc/openssl/html/man3/BIO_printf.html | 61 + .../share/doc/openssl/html/man3/BIO_push.html | 98 + .../share/doc/openssl/html/man3/BIO_read.html | 90 + .../doc/openssl/html/man3/BIO_s_accept.html | 175 + .../doc/openssl/html/man3/BIO_s_bio.html | 157 + .../doc/openssl/html/man3/BIO_s_connect.html | 171 + .../share/doc/openssl/html/man3/BIO_s_fd.html | 103 + .../doc/openssl/html/man3/BIO_s_file.html | 159 + .../doc/openssl/html/man3/BIO_s_mem.html | 137 + .../doc/openssl/html/man3/BIO_s_null.html | 60 + .../doc/openssl/html/man3/BIO_s_socket.html | 68 + .../openssl/html/man3/BIO_set_callback.html | 251 + .../openssl/html/man3/BIO_should_retry.html | 115 + .../openssl/html/man3/BN_BLINDING_new.html | 112 + .../doc/openssl/html/man3/BN_CTX_new.html | 87 + .../doc/openssl/html/man3/BN_CTX_start.html | 66 + .../share/doc/openssl/html/man3/BN_add.html | 117 + .../doc/openssl/html/man3/BN_add_word.html | 78 + .../doc/openssl/html/man3/BN_bn2bin.html | 100 + .../share/doc/openssl/html/man3/BN_cmp.html | 63 + .../share/doc/openssl/html/man3/BN_copy.html | 75 + .../openssl/html/man3/BN_generate_prime.html | 174 + .../doc/openssl/html/man3/BN_mod_inverse.html | 59 + .../html/man3/BN_mod_mul_montgomery.html | 99 + .../html/man3/BN_mod_mul_reciprocal.html | 84 + .../share/doc/openssl/html/man3/BN_new.html | 75 + .../doc/openssl/html/man3/BN_num_bytes.html | 71 + .../share/doc/openssl/html/man3/BN_rand.html | 88 + .../openssl/html/man3/BN_security_bits.html | 66 + .../doc/openssl/html/man3/BN_set_bit.html | 81 + .../share/doc/openssl/html/man3/BN_swap.html | 51 + .../share/doc/openssl/html/man3/BN_zero.html | 82 + .../doc/openssl/html/man3/BUF_MEM_new.html | 86 + .../doc/openssl/html/man3/CMS_add0_cert.html | 79 + .../html/man3/CMS_add1_recipient_cert.html | 77 + .../openssl/html/man3/CMS_add1_signer.html | 89 + .../doc/openssl/html/man3/CMS_compress.html | 85 + .../doc/openssl/html/man3/CMS_decrypt.html | 79 + .../doc/openssl/html/man3/CMS_encrypt.html | 98 + .../doc/openssl/html/man3/CMS_final.html | 61 + .../html/man3/CMS_get0_RecipientInfos.html | 110 + .../html/man3/CMS_get0_SignerInfos.html | 89 + .../doc/openssl/html/man3/CMS_get0_type.html | 87 + .../html/man3/CMS_get1_ReceiptRequest.html | 82 + .../share/doc/openssl/html/man3/CMS_sign.html | 104 + .../openssl/html/man3/CMS_sign_receipt.html | 65 + .../doc/openssl/html/man3/CMS_uncompress.html | 74 + .../doc/openssl/html/man3/CMS_verify.html | 114 + .../openssl/html/man3/CMS_verify_receipt.html | 67 + .../openssl/html/man3/CONF_modules_free.html | 72 + .../html/man3/CONF_modules_load_file.html | 137 + .../html/man3/CRYPTO_THREAD_run_once.html | 159 + .../html/man3/CRYPTO_get_ex_new_index.html | 129 + .../doc/openssl/html/man3/CRYPTO_memcmp.html | 56 + .../html/man3/CTLOG_STORE_get0_log_by_id.html | 65 + .../openssl/html/man3/CTLOG_STORE_new.html | 86 + .../doc/openssl/html/man3/CTLOG_new.html | 80 + .../html/man3/CT_POLICY_EVAL_CTX_new.html | 126 + .../openssl/html/man3/DEFINE_STACK_OF.html | 197 + .../doc/openssl/html/man3/DES_random_key.html | 217 + .../openssl/html/man3/DH_generate_key.html | 66 + .../html/man3/DH_generate_parameters.html | 155 + .../doc/openssl/html/man3/DH_get0_pqg.html | 106 + .../openssl/html/man3/DH_get_1024_160.html | 71 + .../doc/openssl/html/man3/DH_meth_new.html | 135 + .../share/doc/openssl/html/man3/DH_new.html | 62 + .../doc/openssl/html/man3/DH_new_by_nid.html | 55 + .../doc/openssl/html/man3/DH_set_method.html | 82 + .../share/doc/openssl/html/man3/DH_size.html | 75 + .../doc/openssl/html/man3/DSA_SIG_new.html | 69 + .../doc/openssl/html/man3/DSA_do_sign.html | 63 + .../doc/openssl/html/man3/DSA_dup_DH.html | 61 + .../openssl/html/man3/DSA_generate_key.html | 58 + .../html/man3/DSA_generate_parameters.html | 114 + .../doc/openssl/html/man3/DSA_get0_pqg.html | 98 + .../doc/openssl/html/man3/DSA_meth_new.html | 171 + .../share/doc/openssl/html/man3/DSA_new.html | 62 + .../doc/openssl/html/man3/DSA_set_method.html | 80 + .../share/doc/openssl/html/man3/DSA_sign.html | 75 + .../share/doc/openssl/html/man3/DSA_size.html | 66 + .../openssl/html/man3/DTLS_get_data_mtu.html | 56 + .../openssl/html/man3/DTLS_set_timer_cb.html | 58 + .../doc/openssl/html/man3/DTLSv1_listen.html | 95 + .../doc/openssl/html/man3/ECDSA_SIG_new.html | 180 + .../html/man3/ECPKParameters_print.html | 59 + .../html/man3/EC_GFp_simple_method.html | 75 + .../doc/openssl/html/man3/EC_GROUP_copy.html | 180 + .../doc/openssl/html/man3/EC_GROUP_new.html | 123 + .../html/man3/EC_KEY_get_enc_flags.html | 61 + .../doc/openssl/html/man3/EC_KEY_new.html | 143 + .../doc/openssl/html/man3/EC_POINT_add.html | 95 + .../doc/openssl/html/man3/EC_POINT_new.html | 169 + .../doc/openssl/html/man3/ENGINE_add.html | 422 ++ .../doc/openssl/html/man3/ERR_GET_LIB.html | 77 + .../openssl/html/man3/ERR_clear_error.html | 56 + .../openssl/html/man3/ERR_error_string.html | 77 + .../doc/openssl/html/man3/ERR_get_error.html | 81 + .../html/man3/ERR_load_crypto_strings.html | 74 + .../openssl/html/man3/ERR_load_strings.html | 74 + .../openssl/html/man3/ERR_print_errors.html | 70 + .../doc/openssl/html/man3/ERR_put_error.html | 79 + .../openssl/html/man3/ERR_remove_state.html | 67 + .../doc/openssl/html/man3/ERR_set_mark.html | 57 + .../doc/openssl/html/man3/EVP_BytesToKey.html | 81 + .../man3/EVP_CIPHER_CTX_get_cipher_data.html | 61 + .../html/man3/EVP_CIPHER_meth_new.html | 217 + .../doc/openssl/html/man3/EVP_DigestInit.html | 442 ++ .../openssl/html/man3/EVP_DigestSignInit.html | 157 + .../html/man3/EVP_DigestVerifyInit.html | 96 + .../doc/openssl/html/man3/EVP_EncodeInit.html | 108 + .../openssl/html/man3/EVP_EncryptInit.html | 467 ++ .../openssl/html/man3/EVP_MD_meth_new.html | 163 + .../doc/openssl/html/man3/EVP_OpenInit.html | 75 + .../html/man3/EVP_PKEY_ASN1_METHOD.html | 341 ++ .../openssl/html/man3/EVP_PKEY_CTX_ctrl.html | 278 + .../openssl/html/man3/EVP_PKEY_CTX_new.html | 77 + .../html/man3/EVP_PKEY_CTX_set1_pbe_pass.html | 69 + .../html/man3/EVP_PKEY_CTX_set_hkdf_md.html | 153 + .../EVP_PKEY_CTX_set_rsa_pss_keygen_md.html | 93 + .../html/man3/EVP_PKEY_CTX_set_scrypt_N.html | 84 + .../man3/EVP_PKEY_CTX_set_tls1_prf_md.html | 109 + .../html/man3/EVP_PKEY_asn1_get_count.html | 78 + .../doc/openssl/html/man3/EVP_PKEY_cmp.html | 77 + .../openssl/html/man3/EVP_PKEY_decrypt.html | 113 + .../openssl/html/man3/EVP_PKEY_derive.html | 111 + .../openssl/html/man3/EVP_PKEY_encrypt.html | 114 + .../man3/EVP_PKEY_get_default_digest_nid.html | 65 + .../openssl/html/man3/EVP_PKEY_keygen.html | 181 + .../html/man3/EVP_PKEY_meth_get_count.html | 67 + .../openssl/html/man3/EVP_PKEY_meth_new.html | 394 ++ .../doc/openssl/html/man3/EVP_PKEY_new.html | 106 + .../html/man3/EVP_PKEY_print_private.html | 75 + .../openssl/html/man3/EVP_PKEY_set1_RSA.html | 135 + .../doc/openssl/html/man3/EVP_PKEY_sign.html | 118 + .../doc/openssl/html/man3/EVP_PKEY_size.html | 71 + .../openssl/html/man3/EVP_PKEY_verify.html | 110 + .../html/man3/EVP_PKEY_verify_recover.html | 118 + .../doc/openssl/html/man3/EVP_SealInit.html | 82 + .../doc/openssl/html/man3/EVP_SignInit.html | 92 + .../doc/openssl/html/man3/EVP_VerifyInit.html | 93 + .../share/doc/openssl/html/man3/EVP_aes.html | 108 + .../share/doc/openssl/html/man3/EVP_aria.html | 74 + .../doc/openssl/html/man3/EVP_bf_cbc.html | 72 + .../doc/openssl/html/man3/EVP_blake2b512.html | 83 + .../doc/openssl/html/man3/EVP_camellia.html | 68 + .../doc/openssl/html/man3/EVP_cast5_cbc.html | 72 + .../doc/openssl/html/man3/EVP_chacha20.html | 79 + .../share/doc/openssl/html/man3/EVP_des.html | 86 + .../doc/openssl/html/man3/EVP_desx_cbc.html | 68 + .../doc/openssl/html/man3/EVP_idea_cbc.html | 70 + .../share/doc/openssl/html/man3/EVP_md2.html | 71 + .../share/doc/openssl/html/man3/EVP_md4.html | 71 + .../share/doc/openssl/html/man3/EVP_md5.html | 82 + .../share/doc/openssl/html/man3/EVP_mdc2.html | 71 + .../doc/openssl/html/man3/EVP_rc2_cbc.html | 80 + .../share/doc/openssl/html/man3/EVP_rc4.html | 84 + .../html/man3/EVP_rc5_32_12_16_cbc.html | 88 + .../doc/openssl/html/man3/EVP_ripemd160.html | 71 + .../doc/openssl/html/man3/EVP_seed_cbc.html | 72 + .../share/doc/openssl/html/man3/EVP_sha1.html | 71 + .../doc/openssl/html/man3/EVP_sha224.html | 78 + .../doc/openssl/html/man3/EVP_sha3_224.html | 85 + .../share/doc/openssl/html/man3/EVP_sm3.html | 71 + .../doc/openssl/html/man3/EVP_sm4_cbc.html | 73 + .../doc/openssl/html/man3/EVP_whirlpool.html | 71 + .../share/doc/openssl/html/man3/HMAC.html | 137 + .../share/doc/openssl/html/man3/MD5.html | 104 + .../doc/openssl/html/man3/MDC2_Init.html | 81 + .../doc/openssl/html/man3/OBJ_nid2obj.html | 165 + .../openssl/html/man3/OCSP_REQUEST_new.html | 117 + .../openssl/html/man3/OCSP_cert_to_id.html | 94 + .../html/man3/OCSP_request_add1_nonce.html | 82 + .../html/man3/OCSP_resp_find_status.html | 140 + .../html/man3/OCSP_response_status.html | 107 + .../openssl/html/man3/OCSP_sendreq_new.html | 107 + .../openssl/html/man3/OPENSSL_Applink.html | 49 + .../html/man3/OPENSSL_LH_COMPFUNC.html | 176 + .../openssl/html/man3/OPENSSL_LH_stats.html | 75 + .../html/man3/OPENSSL_VERSION_NUMBER.html | 132 + .../doc/openssl/html/man3/OPENSSL_config.html | 88 + .../html/man3/OPENSSL_fork_prepare.html | 67 + .../openssl/html/man3/OPENSSL_ia32cap.html | 206 + .../html/man3/OPENSSL_init_crypto.html | 221 + .../openssl/html/man3/OPENSSL_init_ssl.html | 87 + .../html/man3/OPENSSL_instrument_bus.html | 58 + .../man3/OPENSSL_load_builtin_modules.html | 71 + .../doc/openssl/html/man3/OPENSSL_malloc.html | 164 + .../html/man3/OPENSSL_secure_malloc.html | 114 + .../openssl/html/man3/OSSL_STORE_INFO.html | 163 + .../openssl/html/man3/OSSL_STORE_LOADER.html | 219 + .../openssl/html/man3/OSSL_STORE_SEARCH.html | 151 + .../openssl/html/man3/OSSL_STORE_expect.html | 82 + .../openssl/html/man3/OSSL_STORE_open.html | 133 + .../html/man3/OpenSSL_add_all_algorithms.html | 77 + .../openssl/html/man3/PEM_bytes_read_bio.html | 81 + .../share/doc/openssl/html/man3/PEM_read.html | 98 + .../doc/openssl/html/man3/PEM_read_CMS.html | 78 + .../html/man3/PEM_read_bio_PrivateKey.html | 381 ++ .../openssl/html/man3/PEM_read_bio_ex.html | 80 + .../html/man3/PEM_write_bio_CMS_stream.html | 68 + .../html/man3/PEM_write_bio_PKCS7_stream.html | 68 + .../doc/openssl/html/man3/PKCS12_create.html | 83 + .../doc/openssl/html/man3/PKCS12_newpass.html | 125 + .../doc/openssl/html/man3/PKCS12_parse.html | 81 + .../openssl/html/man3/PKCS5_PBKDF2_HMAC.html | 82 + .../doc/openssl/html/man3/PKCS7_decrypt.html | 72 + .../doc/openssl/html/man3/PKCS7_encrypt.html | 90 + .../doc/openssl/html/man3/PKCS7_sign.html | 109 + .../html/man3/PKCS7_sign_add_signer.html | 87 + .../doc/openssl/html/man3/PKCS7_verify.html | 110 + .../openssl/html/man3/RAND_DRBG_generate.html | 80 + .../html/man3/RAND_DRBG_get0_master.html | 80 + .../doc/openssl/html/man3/RAND_DRBG_new.html | 105 + .../openssl/html/man3/RAND_DRBG_reseed.html | 91 + .../html/man3/RAND_DRBG_set_callbacks.html | 120 + .../html/man3/RAND_DRBG_set_ex_data.html | 74 + .../share/doc/openssl/html/man3/RAND_add.html | 92 + .../doc/openssl/html/man3/RAND_bytes.html | 87 + .../doc/openssl/html/man3/RAND_cleanup.html | 63 + .../share/doc/openssl/html/man3/RAND_egd.html | 67 + .../doc/openssl/html/man3/RAND_load_file.html | 94 + .../html/man3/RAND_set_rand_method.html | 82 + .../doc/openssl/html/man3/RC4_set_key.html | 76 + .../doc/openssl/html/man3/RIPEMD160_Init.html | 83 + .../openssl/html/man3/RSA_blinding_on.html | 59 + .../doc/openssl/html/man3/RSA_check_key.html | 81 + .../openssl/html/man3/RSA_generate_key.html | 105 + .../doc/openssl/html/man3/RSA_get0_key.html | 136 + .../doc/openssl/html/man3/RSA_meth_new.html | 202 + .../share/doc/openssl/html/man3/RSA_new.html | 62 + .../man3/RSA_padding_add_PKCS1_type_1.html | 149 + .../doc/openssl/html/man3/RSA_print.html | 71 + .../html/man3/RSA_private_encrypt.html | 84 + .../openssl/html/man3/RSA_public_encrypt.html | 106 + .../doc/openssl/html/man3/RSA_set_method.html | 161 + .../share/doc/openssl/html/man3/RSA_sign.html | 71 + .../html/man3/RSA_sign_ASN1_OCTET_STRING.html | 75 + .../share/doc/openssl/html/man3/RSA_size.html | 75 + .../share/doc/openssl/html/man3/SCT_new.html | 199 + .../doc/openssl/html/man3/SCT_print.html | 68 + .../doc/openssl/html/man3/SCT_validate.html | 108 + .../doc/openssl/html/man3/SHA256_Init.html | 107 + .../doc/openssl/html/man3/SMIME_read_CMS.html | 85 + .../openssl/html/man3/SMIME_read_PKCS7.html | 85 + .../openssl/html/man3/SMIME_write_CMS.html | 78 + .../openssl/html/man3/SMIME_write_PKCS7.html | 78 + .../html/man3/SSL_CIPHER_get_name.html | 181 + .../man3/SSL_COMP_add_compression_method.html | 111 + .../openssl/html/man3/SSL_CONF_CTX_new.html | 66 + .../html/man3/SSL_CONF_CTX_set1_prefix.html | 70 + .../html/man3/SSL_CONF_CTX_set_flags.html | 105 + .../html/man3/SSL_CONF_CTX_set_ssl_ctx.html | 69 + .../doc/openssl/html/man3/SSL_CONF_cmd.html | 556 ++ .../openssl/html/man3/SSL_CONF_cmd_argv.html | 65 + .../html/man3/SSL_CTX_add1_chain_cert.html | 122 + .../man3/SSL_CTX_add_extra_chain_cert.html | 75 + .../html/man3/SSL_CTX_add_session.html | 83 + .../doc/openssl/html/man3/SSL_CTX_config.html | 105 + .../doc/openssl/html/man3/SSL_CTX_ctrl.html | 60 + .../html/man3/SSL_CTX_dane_enable.html | 252 + .../html/man3/SSL_CTX_flush_sessions.html | 65 + .../doc/openssl/html/man3/SSL_CTX_free.html | 65 + .../openssl/html/man3/SSL_CTX_get0_param.html | 81 + .../html/man3/SSL_CTX_get_verify_mode.html | 71 + .../man3/SSL_CTX_has_client_custom_ext.html | 56 + .../man3/SSL_CTX_load_verify_locations.html | 131 + .../doc/openssl/html/man3/SSL_CTX_new.html | 205 + .../html/man3/SSL_CTX_sess_number.html | 89 + .../man3/SSL_CTX_sess_set_cache_size.html | 70 + .../html/man3/SSL_CTX_sess_set_get_cb.html | 93 + .../openssl/html/man3/SSL_CTX_sessions.html | 61 + .../html/man3/SSL_CTX_set0_CA_list.html | 130 + .../html/man3/SSL_CTX_set1_curves.html | 102 + .../html/man3/SSL_CTX_set1_sigalgs.html | 106 + .../man3/SSL_CTX_set1_verify_cert_store.html | 90 + .../html/man3/SSL_CTX_set_alpn_select_cb.html | 167 + .../html/man3/SSL_CTX_set_cert_cb.html | 77 + .../html/man3/SSL_CTX_set_cert_store.html | 84 + .../SSL_CTX_set_cert_verify_callback.html | 81 + .../html/man3/SSL_CTX_set_cipher_list.html | 109 + .../html/man3/SSL_CTX_set_client_cert_cb.html | 83 + .../man3/SSL_CTX_set_client_hello_cb.html | 97 + .../SSL_CTX_set_ct_validation_callback.html | 101 + .../man3/SSL_CTX_set_ctlog_list_file.html | 66 + .../man3/SSL_CTX_set_default_passwd_cb.html | 100 + .../html/man3/SSL_CTX_set_ex_data.html | 64 + .../man3/SSL_CTX_set_generate_session_id.html | 116 + .../html/man3/SSL_CTX_set_info_callback.html | 186 + .../man3/SSL_CTX_set_keylog_callback.html | 63 + .../html/man3/SSL_CTX_set_max_cert_list.html | 81 + .../man3/SSL_CTX_set_min_proto_version.html | 80 + .../openssl/html/man3/SSL_CTX_set_mode.html | 136 + .../html/man3/SSL_CTX_set_msg_callback.html | 142 + .../html/man3/SSL_CTX_set_num_tickets.html | 67 + .../html/man3/SSL_CTX_set_options.html | 350 ++ .../man3/SSL_CTX_set_psk_client_callback.html | 143 + .../html/man3/SSL_CTX_set_quiet_shutdown.html | 77 + .../html/man3/SSL_CTX_set_read_ahead.html | 72 + .../SSL_CTX_set_record_padding_callback.html | 94 + .../html/man3/SSL_CTX_set_security_level.html | 167 + .../man3/SSL_CTX_set_session_cache_mode.html | 128 + .../man3/SSL_CTX_set_session_id_context.html | 95 + .../man3/SSL_CTX_set_session_ticket_cb.html | 169 + .../man3/SSL_CTX_set_split_send_fragment.html | 150 + .../html/man3/SSL_CTX_set_ssl_version.html | 85 + ..._CTX_set_stateless_cookie_generate_cb.html | 89 + .../html/man3/SSL_CTX_set_timeout.html | 74 + ...SL_CTX_set_tlsext_servername_callback.html | 167 + .../man3/SSL_CTX_set_tlsext_status_cb.html | 87 + .../SSL_CTX_set_tlsext_ticket_key_cb.html | 175 + .../man3/SSL_CTX_set_tlsext_use_srtp.html | 106 + .../man3/SSL_CTX_set_tmp_dh_callback.html | 119 + .../openssl/html/man3/SSL_CTX_set_verify.html | 264 + .../html/man3/SSL_CTX_use_certificate.html | 121 + .../man3/SSL_CTX_use_psk_identity_hint.html | 126 + .../html/man3/SSL_CTX_use_serverinfo.html | 73 + .../openssl/html/man3/SSL_SESSION_free.html | 79 + .../html/man3/SSL_SESSION_get0_cipher.html | 68 + .../html/man3/SSL_SESSION_get0_hostname.html | 80 + .../man3/SSL_SESSION_get0_id_context.html | 70 + .../html/man3/SSL_SESSION_get0_peer.html | 56 + .../man3/SSL_SESSION_get_compress_id.html | 56 + .../html/man3/SSL_SESSION_get_ex_data.html | 61 + .../SSL_SESSION_get_protocol_version.html | 68 + .../html/man3/SSL_SESSION_get_time.html | 81 + .../html/man3/SSL_SESSION_has_ticket.html | 70 + .../html/man3/SSL_SESSION_is_resumable.html | 61 + .../openssl/html/man3/SSL_SESSION_print.html | 62 + .../html/man3/SSL_SESSION_set1_id.html | 66 + .../doc/openssl/html/man3/SSL_accept.html | 87 + .../html/man3/SSL_alert_type_string.html | 255 + .../openssl/html/man3/SSL_alloc_buffers.html | 77 + .../openssl/html/man3/SSL_check_chain.html | 89 + .../doc/openssl/html/man3/SSL_clear.html | 81 + .../doc/openssl/html/man3/SSL_connect.html | 91 + .../openssl/html/man3/SSL_do_handshake.html | 87 + .../html/man3/SSL_export_keying_material.html | 78 + .../html/man3/SSL_extension_supported.html | 261 + .../share/doc/openssl/html/man3/SSL_free.html | 60 + .../openssl/html/man3/SSL_get0_peer_scts.html | 61 + .../openssl/html/man3/SSL_get_SSL_CTX.html | 56 + .../html/man3/SSL_get_all_async_fds.html | 76 + .../openssl/html/man3/SSL_get_ciphers.html | 89 + .../html/man3/SSL_get_client_random.html | 84 + .../html/man3/SSL_get_current_cipher.html | 73 + .../html/man3/SSL_get_default_timeout.html | 63 + .../doc/openssl/html/man3/SSL_get_error.html | 150 + .../html/man3/SSL_get_extms_support.html | 58 + .../doc/openssl/html/man3/SSL_get_fd.html | 74 + .../html/man3/SSL_get_peer_cert_chain.html | 84 + .../html/man3/SSL_get_peer_certificate.html | 81 + .../html/man3/SSL_get_peer_signature_nid.html | 63 + .../html/man3/SSL_get_peer_tmp_key.html | 67 + .../html/man3/SSL_get_psk_identity.html | 54 + .../doc/openssl/html/man3/SSL_get_rbio.html | 73 + .../openssl/html/man3/SSL_get_session.html | 97 + .../html/man3/SSL_get_shared_sigalgs.html | 83 + .../html/man3/SSL_get_verify_result.html | 84 + .../openssl/html/man3/SSL_get_version.html | 145 + .../doc/openssl/html/man3/SSL_in_init.html | 117 + .../doc/openssl/html/man3/SSL_key_update.html | 86 + .../openssl/html/man3/SSL_library_init.html | 75 + .../html/man3/SSL_load_client_CA_file.html | 102 + .../share/doc/openssl/html/man3/SSL_new.html | 80 + .../doc/openssl/html/man3/SSL_pending.html | 68 + .../share/doc/openssl/html/man3/SSL_read.html | 106 + .../html/man3/SSL_read_early_data.html | 184 + .../openssl/html/man3/SSL_rstate_string.html | 94 + .../openssl/html/man3/SSL_session_reused.html | 77 + .../doc/openssl/html/man3/SSL_set1_host.html | 96 + .../doc/openssl/html/man3/SSL_set_bio.html | 94 + .../html/man3/SSL_set_connect_state.html | 77 + .../doc/openssl/html/man3/SSL_set_fd.html | 80 + .../openssl/html/man3/SSL_set_session.html | 79 + .../openssl/html/man3/SSL_set_shutdown.html | 95 + .../html/man3/SSL_set_verify_result.html | 63 + .../doc/openssl/html/man3/SSL_shutdown.html | 129 + .../openssl/html/man3/SSL_state_string.html | 68 + .../share/doc/openssl/html/man3/SSL_want.html | 125 + .../doc/openssl/html/man3/SSL_write.html | 104 + .../doc/openssl/html/man3/UI_STRING.html | 113 + .../openssl/html/man3/UI_UTIL_read_pw.html | 73 + .../openssl/html/man3/UI_create_method.html | 178 + .../share/doc/openssl/html/man3/UI_new.html | 178 + .../doc/openssl/html/man3/X509V3_get_d2i.html | 214 + .../doc/openssl/html/man3/X509_ALGOR_dup.html | 70 + .../html/man3/X509_CRL_get0_by_serial.html | 99 + .../html/man3/X509_EXTENSION_set_object.html | 96 + .../doc/openssl/html/man3/X509_LOOKUP.html | 177 + .../html/man3/X509_LOOKUP_hash_dir.html | 106 + .../html/man3/X509_LOOKUP_meth_new.html | 158 + .../html/man3/X509_NAME_ENTRY_get_object.html | 94 + .../html/man3/X509_NAME_add_entry_by_txt.html | 119 + .../openssl/html/man3/X509_NAME_get0_der.html | 57 + .../html/man3/X509_NAME_get_index_by_NID.html | 112 + .../openssl/html/man3/X509_NAME_print_ex.html | 106 + .../openssl/html/man3/X509_PUBKEY_new.html | 110 + .../doc/openssl/html/man3/X509_SIG_get0.html | 59 + .../html/man3/X509_STORE_CTX_get_error.html | 374 ++ .../openssl/html/man3/X509_STORE_CTX_new.html | 141 + .../man3/X509_STORE_CTX_set_verify_cb.html | 184 + .../html/man3/X509_STORE_add_cert.html | 86 + .../html/man3/X509_STORE_get0_param.html | 71 + .../doc/openssl/html/man3/X509_STORE_new.html | 75 + .../man3/X509_STORE_set_verify_cb_func.html | 169 + .../man3/X509_VERIFY_PARAM_set_flags.html | 231 + .../doc/openssl/html/man3/X509_check_ca.html | 58 + .../openssl/html/man3/X509_check_host.html | 128 + .../openssl/html/man3/X509_check_issued.html | 56 + .../html/man3/X509_check_private_key.html | 67 + .../openssl/html/man3/X509_check_purpose.html | 111 + .../share/doc/openssl/html/man3/X509_cmp.html | 81 + .../doc/openssl/html/man3/X509_cmp_time.html | 68 + .../doc/openssl/html/man3/X509_digest.html | 77 + .../share/doc/openssl/html/man3/X509_dup.html | 76 + .../html/man3/X509_get0_notBefore.html | 88 + .../html/man3/X509_get0_signature.html | 106 + .../doc/openssl/html/man3/X509_get0_uids.html | 62 + .../html/man3/X509_get_extension_flags.html | 184 + .../openssl/html/man3/X509_get_pubkey.html | 77 + .../html/man3/X509_get_serialNumber.html | 69 + .../html/man3/X509_get_subject_name.html | 81 + .../openssl/html/man3/X509_get_version.html | 79 + .../share/doc/openssl/html/man3/X509_new.html | 78 + .../doc/openssl/html/man3/X509_sign.html | 86 + .../openssl/html/man3/X509_verify_cert.html | 70 + .../html/man3/X509v3_get_ext_by_NID.html | 123 + .../doc/openssl/html/man3/d2i_DHparams.html | 61 + .../html/man3/d2i_PKCS8PrivateKey_bio.html | 86 + .../doc/openssl/html/man3/d2i_PrivateKey.html | 83 + .../openssl/html/man3/d2i_SSL_SESSION.html | 62 + .../share/doc/openssl/html/man3/d2i_X509.html | 239 + .../openssl/html/man3/i2d_CMS_bio_stream.html | 73 + .../html/man3/i2d_PKCS7_bio_stream.html | 73 + .../openssl/html/man3/i2d_re_X509_tbs.html | 74 + .../doc/openssl/html/man3/o2i_SCT_LIST.html | 65 + .../share/doc/openssl/html/man5/config.html | 362 ++ .../doc/openssl/html/man5/x509v3_config.html | 464 ++ .../share/doc/openssl/html/man7/Ed25519.html | 84 + .../share/doc/openssl/html/man7/RAND.html | 64 + .../doc/openssl/html/man7/RAND_DRBG.html | 224 + .../share/doc/openssl/html/man7/RSA-PSS.html | 73 + .../share/doc/openssl/html/man7/SM2.html | 84 + .../share/doc/openssl/html/man7/X25519.html | 80 + .../share/doc/openssl/html/man7/bio.html | 72 + .../share/doc/openssl/html/man7/crypto.html | 70 + .../share/doc/openssl/html/man7/ct.html | 58 + .../doc/openssl/html/man7/des_modes.html | 214 + .../share/doc/openssl/html/man7/evp.html | 83 + .../openssl/html/man7/ossl_store-file.html | 60 + .../doc/openssl/html/man7/ossl_store.html | 105 + .../html/man7/passphrase-encoding.html | 124 + .../openssl/html/man7/proxy-certificates.html | 345 ++ .../share/doc/openssl/html/man7/scrypt.html | 112 + .../share/doc/openssl/html/man7/ssl.html | 1248 ++++ .../share/doc/openssl/html/man7/x509.html | 67 + deps/openssl/mingw64/share/man/man1/CA.pl.1 | 341 ++ .../mingw64/share/man/man1/asn1parse.1 | 339 ++ deps/openssl/mingw64/share/man/man1/ca.1 | 823 +++ deps/openssl/mingw64/share/man/man1/ciphers.1 | 868 +++ deps/openssl/mingw64/share/man/man1/cms.1 | 820 +++ deps/openssl/mingw64/share/man/man1/crl.1 | 257 + .../mingw64/share/man/man1/crl2pkcs7.1 | 227 + deps/openssl/mingw64/share/man/man1/dgst.1 | 347 ++ deps/openssl/mingw64/share/man/man1/dhparam.1 | 276 + deps/openssl/mingw64/share/man/man1/dsa.1 | 306 + .../openssl/mingw64/share/man/man1/dsaparam.1 | 245 + deps/openssl/mingw64/share/man/man1/ec.1 | 326 ++ deps/openssl/mingw64/share/man/man1/ecparam.1 | 312 + deps/openssl/mingw64/share/man/man1/enc.1 | 543 ++ deps/openssl/mingw64/share/man/man1/engine.1 | 240 + deps/openssl/mingw64/share/man/man1/errstr.1 | 181 + deps/openssl/mingw64/share/man/man1/gendsa.1 | 219 + deps/openssl/mingw64/share/man/man1/genpkey.1 | 434 ++ deps/openssl/mingw64/share/man/man1/genrsa.1 | 243 + deps/openssl/mingw64/share/man/man1/list.1 | 211 + deps/openssl/mingw64/share/man/man1/nseq.1 | 211 + deps/openssl/mingw64/share/man/man1/ocsp.1 | 584 ++ deps/openssl/mingw64/share/man/man1/openssl.1 | 583 ++ deps/openssl/mingw64/share/man/man1/passwd.1 | 248 + deps/openssl/mingw64/share/man/man1/pkcs12.1 | 479 ++ deps/openssl/mingw64/share/man/man1/pkcs7.1 | 242 + deps/openssl/mingw64/share/man/man1/pkcs8.1 | 434 ++ deps/openssl/mingw64/share/man/man1/pkey.1 | 288 + .../mingw64/share/man/man1/pkeyparam.1 | 207 + deps/openssl/mingw64/share/man/man1/pkeyutl.1 | 428 ++ deps/openssl/mingw64/share/man/man1/prime.1 | 189 + deps/openssl/mingw64/share/man/man1/rand.1 | 214 + deps/openssl/mingw64/share/man/man1/rehash.1 | 259 + deps/openssl/mingw64/share/man/man1/req.1 | 797 +++ deps/openssl/mingw64/share/man/man1/rsa.1 | 330 ++ deps/openssl/mingw64/share/man/man1/rsautl.1 | 345 ++ .../openssl/mingw64/share/man/man1/s_client.1 | 863 +++ .../openssl/mingw64/share/man/man1/s_server.1 | 868 +++ deps/openssl/mingw64/share/man/man1/s_time.1 | 320 + deps/openssl/mingw64/share/man/man1/sess_id.1 | 272 + deps/openssl/mingw64/share/man/man1/smime.1 | 617 ++ deps/openssl/mingw64/share/man/man1/speed.1 | 220 + deps/openssl/mingw64/share/man/man1/spkac.1 | 274 + deps/openssl/mingw64/share/man/man1/srp.1 | 198 + .../openssl/mingw64/share/man/man1/storeutl.1 | 249 + deps/openssl/mingw64/share/man/man1/ts.1 | 727 +++ deps/openssl/mingw64/share/man/man1/tsget.1 | 325 ++ deps/openssl/mingw64/share/man/man1/verify.1 | 780 +++ deps/openssl/mingw64/share/man/man1/version.1 | 198 + deps/openssl/mingw64/share/man/man1/x509.1 | 955 +++ .../mingw64/share/man/man3/ADMISSIONS.3 | 280 + .../share/man/man3/ASN1_INTEGER_get_int64.3 | 260 + .../mingw64/share/man/man3/ASN1_ITEM_lookup.3 | 171 + .../mingw64/share/man/man3/ASN1_OBJECT_new.3 | 182 + .../share/man/man3/ASN1_STRING_TABLE_add.3 | 195 + .../share/man/man3/ASN1_STRING_length.3 | 242 + .../mingw64/share/man/man3/ASN1_STRING_new.3 | 182 + .../share/man/man3/ASN1_STRING_print_ex.3 | 245 + .../mingw64/share/man/man3/ASN1_TIME_set.3 | 380 ++ .../mingw64/share/man/man3/ASN1_TYPE_get.3 | 231 + .../share/man/man3/ASN1_generate_nconf.3 | 381 ++ .../share/man/man3/ASYNC_WAIT_CTX_new.3 | 270 + .../mingw64/share/man/man3/ASYNC_start_job.3 | 453 ++ .../mingw64/share/man/man3/BF_encrypt.3 | 249 + .../openssl/mingw64/share/man/man3/BIO_ADDR.3 | 253 + .../mingw64/share/man/man3/BIO_ADDRINFO.3 | 239 + .../mingw64/share/man/man3/BIO_connect.3 | 240 + .../openssl/mingw64/share/man/man3/BIO_ctrl.3 | 263 + .../mingw64/share/man/man3/BIO_f_base64.3 | 223 + .../mingw64/share/man/man3/BIO_f_buffer.3 | 227 + .../mingw64/share/man/man3/BIO_f_cipher.3 | 211 + .../openssl/mingw64/share/man/man3/BIO_f_md.3 | 295 + .../mingw64/share/man/man3/BIO_f_null.3 | 171 + .../mingw64/share/man/man3/BIO_f_ssl.3 | 435 ++ .../mingw64/share/man/man3/BIO_find_type.3 | 203 + .../mingw64/share/man/man3/BIO_get_data.3 | 195 + .../share/man/man3/BIO_get_ex_new_index.3 | 191 + .../mingw64/share/man/man3/BIO_meth_new.3 | 288 + deps/openssl/mingw64/share/man/man3/BIO_new.3 | 202 + .../mingw64/share/man/man3/BIO_new_CMS.3 | 204 + .../share/man/man3/BIO_parse_hostserv.3 | 212 + .../mingw64/share/man/man3/BIO_printf.3 | 182 + .../openssl/mingw64/share/man/man3/BIO_push.3 | 224 + .../openssl/mingw64/share/man/man3/BIO_read.3 | 226 + .../mingw64/share/man/man3/BIO_s_accept.3 | 365 ++ .../mingw64/share/man/man3/BIO_s_bio.3 | 329 ++ .../mingw64/share/man/man3/BIO_s_connect.3 | 338 ++ .../openssl/mingw64/share/man/man3/BIO_s_fd.3 | 230 + .../mingw64/share/man/man3/BIO_s_file.3 | 303 + .../mingw64/share/man/man3/BIO_s_mem.3 | 297 + .../mingw64/share/man/man3/BIO_s_null.3 | 176 + .../mingw64/share/man/man3/BIO_s_socket.3 | 186 + .../mingw64/share/man/man3/BIO_set_callback.3 | 392 ++ .../mingw64/share/man/man3/BIO_should_retry.3 | 273 + .../mingw64/share/man/man3/BN_BLINDING_new.3 | 254 + .../mingw64/share/man/man3/BN_CTX_new.3 | 213 + .../mingw64/share/man/man3/BN_CTX_start.3 | 189 + deps/openssl/mingw64/share/man/man3/BN_add.3 | 259 + .../mingw64/share/man/man3/BN_add_word.3 | 192 + .../mingw64/share/man/man3/BN_bn2bin.3 | 245 + deps/openssl/mingw64/share/man/man3/BN_cmp.3 | 180 + deps/openssl/mingw64/share/man/man3/BN_copy.3 | 191 + .../share/man/man3/BN_generate_prime.3 | 341 ++ .../mingw64/share/man/man3/BN_mod_inverse.3 | 173 + .../share/man/man3/BN_mod_mul_montgomery.3 | 218 + .../share/man/man3/BN_mod_mul_reciprocal.3 | 205 + deps/openssl/mingw64/share/man/man3/BN_new.3 | 195 + .../mingw64/share/man/man3/BN_num_bytes.3 | 192 + deps/openssl/mingw64/share/man/man3/BN_rand.3 | 220 + .../mingw64/share/man/man3/BN_security_bits.3 | 181 + .../mingw64/share/man/man3/BN_set_bit.3 | 200 + deps/openssl/mingw64/share/man/man3/BN_swap.3 | 163 + deps/openssl/mingw64/share/man/man3/BN_zero.3 | 197 + .../mingw64/share/man/man3/BUF_MEM_new.3 | 204 + .../mingw64/share/man/man3/CMS_add0_cert.3 | 200 + .../share/man/man3/CMS_add1_recipient_cert.3 | 203 + .../mingw64/share/man/man3/CMS_add1_signer.3 | 238 + .../mingw64/share/man/man3/CMS_compress.3 | 210 + .../mingw64/share/man/man3/CMS_decrypt.3 | 212 + .../mingw64/share/man/man3/CMS_encrypt.3 | 233 + .../mingw64/share/man/man3/CMS_final.3 | 177 + .../share/man/man3/CMS_get0_RecipientInfos.3 | 265 + .../share/man/man3/CMS_get0_SignerInfos.3 | 218 + .../mingw64/share/man/man3/CMS_get0_type.3 | 217 + .../share/man/man3/CMS_get1_ReceiptRequest.3 | 209 + .../openssl/mingw64/share/man/man3/CMS_sign.3 | 258 + .../mingw64/share/man/man3/CMS_sign_receipt.3 | 183 + .../mingw64/share/man/man3/CMS_uncompress.3 | 189 + .../mingw64/share/man/man3/CMS_verify.3 | 261 + .../share/man/man3/CMS_verify_receipt.3 | 185 + .../share/man/man3/CONF_modules_free.3 | 190 + .../share/man/man3/CONF_modules_load_file.3 | 282 + .../share/man/man3/CRYPTO_THREAD_run_once.3 | 283 + .../share/man/man3/CRYPTO_get_ex_new_index.3 | 298 + .../mingw64/share/man/man3/CRYPTO_memcmp.3 | 171 + .../man/man3/CTLOG_STORE_get0_log_by_id.3 | 179 + .../mingw64/share/man/man3/CTLOG_STORE_new.3 | 209 + .../mingw64/share/man/man3/CTLOG_new.3 | 201 + .../share/man/man3/CT_POLICY_EVAL_CTX_new.3 | 229 + .../mingw64/share/man/man3/DEFINE_STACK_OF.3 | 404 ++ .../mingw64/share/man/man3/DES_random_key.3 | 444 ++ .../mingw64/share/man/man3/DH_generate_key.3 | 186 + .../share/man/man3/DH_generate_parameters.3 | 263 + .../mingw64/share/man/man3/DH_get0_pqg.3 | 254 + .../mingw64/share/man/man3/DH_get_1024_160.3 | 191 + .../mingw64/share/man/man3/DH_meth_new.3 | 294 + deps/openssl/mingw64/share/man/man3/DH_new.3 | 178 + .../mingw64/share/man/man3/DH_new_by_nid.3 | 172 + .../mingw64/share/man/man3/DH_set_method.3 | 219 + deps/openssl/mingw64/share/man/man3/DH_size.3 | 187 + .../mingw64/share/man/man3/DSA_SIG_new.3 | 189 + .../mingw64/share/man/man3/DSA_do_sign.3 | 184 + .../mingw64/share/man/man3/DSA_dup_DH.3 | 172 + .../mingw64/share/man/man3/DSA_generate_key.3 | 173 + .../share/man/man3/DSA_generate_parameters.3 | 240 + .../mingw64/share/man/man3/DSA_get0_pqg.3 | 239 + .../mingw64/share/man/man3/DSA_meth_new.3 | 342 ++ deps/openssl/mingw64/share/man/man3/DSA_new.3 | 180 + .../mingw64/share/man/man3/DSA_set_method.3 | 219 + .../openssl/mingw64/share/man/man3/DSA_sign.3 | 202 + .../openssl/mingw64/share/man/man3/DSA_size.3 | 180 + .../share/man/man3/DTLS_get_data_mtu.3 | 168 + .../share/man/man3/DTLS_set_timer_cb.3 | 170 + .../mingw64/share/man/man3/DTLSv1_listen.3 | 264 + .../mingw64/share/man/man3/ECDSA_SIG_new.3 | 347 ++ .../share/man/man3/ECPKParameters_print.3 | 175 + .../share/man/man3/EC_GFp_simple_method.3 | 201 + .../mingw64/share/man/man3/EC_GROUP_copy.3 | 345 ++ .../mingw64/share/man/man3/EC_GROUP_new.3 | 279 + .../share/man/man3/EC_KEY_get_enc_flags.3 | 190 + .../mingw64/share/man/man3/EC_KEY_new.3 | 309 + .../mingw64/share/man/man3/EC_POINT_add.3 | 216 + .../mingw64/share/man/man3/EC_POINT_new.3 | 359 ++ .../mingw64/share/man/man3/ENGINE_add.3 | 767 +++ .../mingw64/share/man/man3/ERR_GET_LIB.3 | 196 + .../mingw64/share/man/man3/ERR_clear_error.3 | 166 + .../mingw64/share/man/man3/ERR_error_string.3 | 206 + .../mingw64/share/man/man3/ERR_get_error.3 | 208 + .../share/man/man3/ERR_load_crypto_strings.3 | 188 + .../mingw64/share/man/man3/ERR_load_strings.3 | 191 + .../mingw64/share/man/man3/ERR_print_errors.3 | 191 + .../mingw64/share/man/man3/ERR_put_error.3 | 207 + .../mingw64/share/man/man3/ERR_remove_state.3 | 180 + .../mingw64/share/man/man3/ERR_set_mark.3 | 172 + .../mingw64/share/man/man3/EVP_BytesToKey.3 | 210 + .../man/man3/EVP_CIPHER_CTX_get_cipher_data.3 | 182 + .../share/man/man3/EVP_CIPHER_meth_new.3 | 343 ++ .../mingw64/share/man/man3/EVP_DigestInit.3 | 497 ++ .../share/man/man3/EVP_DigestSignInit.3 | 283 + .../share/man/man3/EVP_DigestVerifyInit.3 | 243 + .../mingw64/share/man/man3/EVP_EncodeInit.3 | 290 + .../mingw64/share/man/man3/EVP_EncryptInit.3 | 720 +++ .../mingw64/share/man/man3/EVP_MD_meth_new.3 | 301 + .../mingw64/share/man/man3/EVP_OpenInit.3 | 200 + .../share/man/man3/EVP_PKEY_ASN1_METHOD.3 | 553 ++ .../share/man/man3/EVP_PKEY_CTX_ctrl.3 | 538 ++ .../mingw64/share/man/man3/EVP_PKEY_CTX_new.3 | 192 + .../man/man3/EVP_PKEY_CTX_set1_pbe_pass.3 | 183 + .../share/man/man3/EVP_PKEY_CTX_set_hkdf_md.3 | 288 + .../man3/EVP_PKEY_CTX_set_rsa_pss_keygen_md.3 | 222 + .../man/man3/EVP_PKEY_CTX_set_scrypt_N.3 | 211 + .../man/man3/EVP_PKEY_CTX_set_tls1_prf_md.3 | 240 + .../share/man/man3/EVP_PKEY_asn1_get_count.3 | 207 + .../mingw64/share/man/man3/EVP_PKEY_cmp.3 | 203 + .../mingw64/share/man/man3/EVP_PKEY_decrypt.3 | 236 + .../mingw64/share/man/man3/EVP_PKEY_derive.3 | 234 + .../mingw64/share/man/man3/EVP_PKEY_encrypt.3 | 241 + .../man3/EVP_PKEY_get_default_digest_nid.3 | 181 + .../mingw64/share/man/man3/EVP_PKEY_keygen.3 | 335 ++ .../share/man/man3/EVP_PKEY_meth_get_count.3 | 182 + .../share/man/man3/EVP_PKEY_meth_new.3 | 594 ++ .../mingw64/share/man/man3/EVP_PKEY_new.3 | 260 + .../share/man/man3/EVP_PKEY_print_private.3 | 191 + .../share/man/man3/EVP_PKEY_set1_RSA.3 | 282 + .../mingw64/share/man/man3/EVP_PKEY_sign.3 | 245 + .../mingw64/share/man/man3/EVP_PKEY_size.3 | 210 + .../mingw64/share/man/man3/EVP_PKEY_verify.3 | 234 + .../share/man/man3/EVP_PKEY_verify_recover.3 | 245 + .../mingw64/share/man/man3/EVP_SealInit.3 | 223 + .../mingw64/share/man/man3/EVP_SignInit.3 | 228 + .../mingw64/share/man/man3/EVP_VerifyInit.3 | 223 + deps/openssl/mingw64/share/man/man3/EVP_aes.3 | 223 + .../openssl/mingw64/share/man/man3/EVP_aria.3 | 182 + .../mingw64/share/man/man3/EVP_bf_cbc.3 | 179 + .../mingw64/share/man/man3/EVP_blake2b512.3 | 186 + .../mingw64/share/man/man3/EVP_camellia.3 | 177 + .../mingw64/share/man/man3/EVP_cast5_cbc.3 | 179 + .../mingw64/share/man/man3/EVP_chacha20.3 | 188 + deps/openssl/mingw64/share/man/man3/EVP_des.3 | 187 + .../mingw64/share/man/man3/EVP_desx_cbc.3 | 175 + .../mingw64/share/man/man3/EVP_idea_cbc.3 | 177 + deps/openssl/mingw64/share/man/man3/EVP_md2.3 | 176 + deps/openssl/mingw64/share/man/man3/EVP_md4.3 | 176 + deps/openssl/mingw64/share/man/man3/EVP_md5.3 | 186 + .../openssl/mingw64/share/man/man3/EVP_mdc2.3 | 177 + .../mingw64/share/man/man3/EVP_rc2_cbc.3 | 189 + deps/openssl/mingw64/share/man/man3/EVP_rc4.3 | 189 + .../share/man/man3/EVP_rc5_32_12_16_cbc.3 | 196 + .../mingw64/share/man/man3/EVP_ripemd160.3 | 176 + .../mingw64/share/man/man3/EVP_seed_cbc.3 | 179 + .../openssl/mingw64/share/man/man3/EVP_sha1.3 | 177 + .../mingw64/share/man/man3/EVP_sha224.3 | 187 + .../mingw64/share/man/man3/EVP_sha3_224.3 | 192 + deps/openssl/mingw64/share/man/man3/EVP_sm3.3 | 177 + .../mingw64/share/man/man3/EVP_sm4_cbc.3 | 182 + .../mingw64/share/man/man3/EVP_whirlpool.3 | 177 + deps/openssl/mingw64/share/man/man3/HMAC.3 | 279 + deps/openssl/mingw64/share/man/man3/MD5.3 | 224 + .../mingw64/share/man/man3/MDC2_Init.3 | 199 + .../mingw64/share/man/man3/OBJ_nid2obj.3 | 327 ++ .../mingw64/share/man/man3/OCSP_REQUEST_new.3 | 248 + .../mingw64/share/man/man3/OCSP_cert_to_id.3 | 218 + .../share/man/man3/OCSP_request_add1_nonce.3 | 215 + .../share/man/man3/OCSP_resp_find_status.3 | 319 + .../share/man/man3/OCSP_response_status.3 | 244 + .../mingw64/share/man/man3/OCSP_sendreq_new.3 | 252 + .../mingw64/share/man/man3/OPENSSL_Applink.3 | 168 + .../share/man/man3/OPENSSL_LH_COMPFUNC.3 | 369 ++ .../mingw64/share/man/man3/OPENSSL_LH_stats.3 | 197 + .../share/man/man3/OPENSSL_VERSION_NUMBER.3 | 242 + .../mingw64/share/man/man3/OPENSSL_config.3 | 210 + .../share/man/man3/OPENSSL_fork_prepare.3 | 191 + .../mingw64/share/man/man3/OPENSSL_ia32cap.3 | 295 + .../share/man/man3/OPENSSL_init_crypto.3 | 379 ++ .../mingw64/share/man/man3/OPENSSL_init_ssl.3 | 209 + .../share/man/man3/OPENSSL_instrument_bus.3 | 186 + .../man/man3/OPENSSL_load_builtin_modules.3 | 187 + .../mingw64/share/man/man3/OPENSSL_malloc.3 | 371 ++ .../share/man/man3/OPENSSL_secure_malloc.3 | 263 + .../mingw64/share/man/man3/OSSL_STORE_INFO.3 | 314 + .../share/man/man3/OSSL_STORE_LOADER.3 | 362 ++ .../share/man/man3/OSSL_STORE_SEARCH.3 | 300 + .../share/man/man3/OSSL_STORE_expect.3 | 206 + .../mingw64/share/man/man3/OSSL_STORE_open.3 | 281 + .../man/man3/OpenSSL_add_all_algorithms.3 | 195 + .../share/man/man3/PEM_bytes_read_bio.3 | 216 + .../openssl/mingw64/share/man/man3/PEM_read.3 | 263 + .../mingw64/share/man/man3/PEM_read_CMS.3 | 199 + .../share/man/man3/PEM_read_bio_PrivateKey.3 | 622 ++ .../mingw64/share/man/man3/PEM_read_bio_ex.3 | 199 + .../share/man/man3/PEM_write_bio_CMS_stream.3 | 180 + .../man/man3/PEM_write_bio_PKCS7_stream.3 | 179 + .../mingw64/share/man/man3/PKCS12_create.3 | 217 + .../mingw64/share/man/man3/PKCS12_newpass.3 | 246 + .../mingw64/share/man/man3/PKCS12_parse.3 | 203 + .../share/man/man3/PKCS5_PBKDF2_HMAC.3 | 208 + .../mingw64/share/man/man3/PKCS7_decrypt.3 | 187 + .../mingw64/share/man/man3/PKCS7_encrypt.3 | 218 + .../mingw64/share/man/man3/PKCS7_sign.3 | 252 + .../share/man/man3/PKCS7_sign_add_signer.3 | 224 + .../mingw64/share/man/man3/PKCS7_verify.3 | 258 + .../share/man/man3/RAND_DRBG_generate.3 | 214 + .../share/man/man3/RAND_DRBG_get0_master.3 | 204 + .../mingw64/share/man/man3/RAND_DRBG_new.3 | 247 + .../mingw64/share/man/man3/RAND_DRBG_reseed.3 | 239 + .../share/man/man3/RAND_DRBG_set_callbacks.3 | 268 + .../share/man/man3/RAND_DRBG_set_ex_data.3 | 193 + .../openssl/mingw64/share/man/man3/RAND_add.3 | 235 + .../mingw64/share/man/man3/RAND_bytes.3 | 215 + .../mingw64/share/man/man3/RAND_cleanup.3 | 175 + .../openssl/mingw64/share/man/man3/RAND_egd.3 | 193 + .../mingw64/share/man/man3/RAND_load_file.3 | 218 + .../share/man/man3/RAND_set_rand_method.3 | 203 + .../mingw64/share/man/man3/RC4_set_key.3 | 197 + .../mingw64/share/man/man3/RIPEMD160_Init.3 | 200 + .../mingw64/share/man/man3/RSA_blinding_on.3 | 176 + .../mingw64/share/man/man3/RSA_check_key.3 | 213 + .../mingw64/share/man/man3/RSA_generate_key.3 | 233 + .../mingw64/share/man/man3/RSA_get0_key.3 | 303 + .../mingw64/share/man/man3/RSA_meth_new.3 | 382 ++ deps/openssl/mingw64/share/man/man3/RSA_new.3 | 179 + .../man/man3/RSA_padding_add_PKCS1_type_1.3 | 276 + .../mingw64/share/man/man3/RSA_print.3 | 182 + .../share/man/man3/RSA_private_encrypt.3 | 200 + .../share/man/man3/RSA_public_encrypt.3 | 231 + .../mingw64/share/man/man3/RSA_set_method.3 | 315 + .../openssl/mingw64/share/man/man3/RSA_sign.3 | 196 + .../man/man3/RSA_sign_ASN1_OCTET_STRING.3 | 198 + .../openssl/mingw64/share/man/man3/RSA_size.3 | 186 + deps/openssl/mingw64/share/man/man3/SCT_new.3 | 306 + .../mingw64/share/man/man3/SCT_print.3 | 187 + .../mingw64/share/man/man3/SCT_validate.3 | 223 + .../mingw64/share/man/man3/SHA256_Init.3 | 236 + .../mingw64/share/man/man3/SMIME_read_CMS.3 | 207 + .../mingw64/share/man/man3/SMIME_read_PKCS7.3 | 210 + .../mingw64/share/man/man3/SMIME_write_CMS.3 | 199 + .../share/man/man3/SMIME_write_PKCS7.3 | 200 + .../share/man/man3/SSL_CIPHER_get_name.3 | 325 ++ .../man3/SSL_COMP_add_compression_method.3 | 229 + .../mingw64/share/man/man3/SSL_CONF_CTX_new.3 | 181 + .../share/man/man3/SSL_CONF_CTX_set1_prefix.3 | 188 + .../share/man/man3/SSL_CONF_CTX_set_flags.3 | 205 + .../share/man/man3/SSL_CONF_CTX_set_ssl_ctx.3 | 186 + .../mingw64/share/man/man3/SSL_CONF_cmd.3 | 777 +++ .../share/man/man3/SSL_CONF_cmd_argv.3 | 182 + .../share/man/man3/SSL_CTX_add1_chain_cert.3 | 282 + .../man/man3/SSL_CTX_add_extra_chain_cert.3 | 209 + .../share/man/man3/SSL_CTX_add_session.3 | 200 + .../mingw64/share/man/man3/SSL_CTX_config.3 | 224 + .../mingw64/share/man/man3/SSL_CTX_ctrl.3 | 175 + .../share/man/man3/SSL_CTX_dane_enable.3 | 508 ++ .../share/man/man3/SSL_CTX_flush_sessions.3 | 188 + .../mingw64/share/man/man3/SSL_CTX_free.3 | 182 + .../share/man/man3/SSL_CTX_get0_param.3 | 194 + .../share/man/man3/SSL_CTX_get_verify_mode.3 | 191 + .../man/man3/SSL_CTX_has_client_custom_ext.3 | 168 + .../man/man3/SSL_CTX_load_verify_locations.3 | 287 + .../mingw64/share/man/man3/SSL_CTX_new.3 | 326 ++ .../share/man/man3/SSL_CTX_sess_number.3 | 217 + .../man/man3/SSL_CTX_sess_set_cache_size.3 | 193 + .../share/man/man3/SSL_CTX_sess_set_get_cb.3 | 254 + .../mingw64/share/man/man3/SSL_CTX_sessions.3 | 178 + .../share/man/man3/SSL_CTX_set0_CA_list.3 | 307 + .../share/man/man3/SSL_CTX_set1_curves.3 | 238 + .../share/man/man3/SSL_CTX_set1_sigalgs.3 | 249 + .../man/man3/SSL_CTX_set1_verify_cert_store.3 | 226 + .../man/man3/SSL_CTX_set_alpn_select_cb.3 | 314 + .../share/man/man3/SSL_CTX_set_cert_cb.3 | 213 + .../share/man/man3/SSL_CTX_set_cert_store.3 | 219 + .../man3/SSL_CTX_set_cert_verify_callback.3 | 209 + .../share/man/man3/SSL_CTX_set_cipher_list.3 | 237 + .../man/man3/SSL_CTX_set_client_cert_cb.3 | 241 + .../man/man3/SSL_CTX_set_client_hello_cb.3 | 262 + .../man3/SSL_CTX_set_ct_validation_callback.3 | 271 + .../man/man3/SSL_CTX_set_ctlog_list_file.3 | 183 + .../man/man3/SSL_CTX_set_default_passwd_cb.3 | 240 + .../share/man/man3/SSL_CTX_set_ex_data.3 | 182 + .../man3/SSL_CTX_set_generate_session_id.3 | 267 + .../man/man3/SSL_CTX_set_info_callback.3 | 285 + .../man/man3/SSL_CTX_set_keylog_callback.3 | 183 + .../man/man3/SSL_CTX_set_max_cert_list.3 | 213 + .../man/man3/SSL_CTX_set_min_proto_version.3 | 199 + .../mingw64/share/man/man3/SSL_CTX_set_mode.3 | 266 + .../share/man/man3/SSL_CTX_set_msg_callback.3 | 252 + .../share/man/man3/SSL_CTX_set_num_tickets.3 | 196 + .../share/man/man3/SSL_CTX_set_options.3 | 471 ++ .../man3/SSL_CTX_set_psk_client_callback.3 | 292 + .../man/man3/SSL_CTX_set_quiet_shutdown.3 | 203 + .../share/man/man3/SSL_CTX_set_read_ahead.3 | 202 + .../SSL_CTX_set_record_padding_callback.3 | 219 + .../man/man3/SSL_CTX_set_security_level.3 | 309 + .../man/man3/SSL_CTX_set_session_cache_mode.3 | 258 + .../man/man3/SSL_CTX_set_session_id_context.3 | 215 + .../man/man3/SSL_CTX_set_session_ticket_cb.3 | 301 + .../man3/SSL_CTX_set_split_send_fragment.3 | 303 + .../share/man/man3/SSL_CTX_set_ssl_version.3 | 193 + ...SSL_CTX_set_stateless_cookie_generate_cb.3 | 222 + .../share/man/man3/SSL_CTX_set_timeout.3 | 199 + .../SSL_CTX_set_tlsext_servername_callback.3 | 285 + .../man/man3/SSL_CTX_set_tlsext_status_cb.3 | 245 + .../man3/SSL_CTX_set_tlsext_ticket_key_cb.3 | 323 + .../man/man3/SSL_CTX_set_tlsext_use_srtp.3 | 231 + .../man/man3/SSL_CTX_set_tmp_dh_callback.3 | 269 + .../share/man/man3/SSL_CTX_set_verify.3 | 472 ++ .../share/man/man3/SSL_CTX_use_certificate.3 | 324 + .../man/man3/SSL_CTX_use_psk_identity_hint.3 | 269 + .../share/man/man3/SSL_CTX_use_serverinfo.3 | 215 + .../mingw64/share/man/man3/SSL_SESSION_free.3 | 214 + .../share/man/man3/SSL_SESSION_get0_cipher.3 | 187 + .../man/man3/SSL_SESSION_get0_hostname.3 | 204 + .../man/man3/SSL_SESSION_get0_id_context.3 | 185 + .../share/man/man3/SSL_SESSION_get0_peer.3 | 169 + .../man/man3/SSL_SESSION_get_compress_id.3 | 170 + .../share/man/man3/SSL_SESSION_get_ex_data.3 | 177 + .../man3/SSL_SESSION_get_protocol_version.3 | 185 + .../share/man/man3/SSL_SESSION_get_time.3 | 204 + .../share/man/man3/SSL_SESSION_has_ticket.3 | 188 + .../share/man/man3/SSL_SESSION_is_resumable.3 | 174 + .../share/man/man3/SSL_SESSION_print.3 | 176 + .../share/man/man3/SSL_SESSION_set1_id.3 | 179 + .../mingw64/share/man/man3/SSL_accept.3 | 205 + .../share/man/man3/SSL_alert_type_string.3 | 369 ++ .../share/man/man3/SSL_alloc_buffers.3 | 193 + .../mingw64/share/man/man3/SSL_check_chain.3 | 225 + .../mingw64/share/man/man3/SSL_clear.3 | 208 + .../mingw64/share/man/man3/SSL_connect.3 | 220 + .../mingw64/share/man/man3/SSL_do_handshake.3 | 204 + .../man/man3/SSL_export_keying_material.3 | 217 + .../share/man/man3/SSL_extension_supported.3 | 399 ++ .../openssl/mingw64/share/man/man3/SSL_free.3 | 186 + .../share/man/man3/SSL_get0_peer_scts.3 | 176 + .../mingw64/share/man/man3/SSL_get_SSL_CTX.3 | 167 + .../share/man/man3/SSL_get_all_async_fds.3 | 213 + .../mingw64/share/man/man3/SSL_get_ciphers.3 | 241 + .../share/man/man3/SSL_get_client_random.3 | 229 + .../share/man/man3/SSL_get_current_cipher.3 | 200 + .../share/man/man3/SSL_get_default_timeout.3 | 181 + .../mingw64/share/man/man3/SSL_get_error.3 | 304 + .../share/man/man3/SSL_get_extms_support.3 | 172 + .../mingw64/share/man/man3/SSL_get_fd.3 | 179 + .../share/man/man3/SSL_get_peer_cert_chain.3 | 201 + .../share/man/man3/SSL_get_peer_certificate.3 | 189 + .../man/man3/SSL_get_peer_signature_nid.3 | 183 + .../share/man/man3/SSL_get_peer_tmp_key.3 | 183 + .../share/man/man3/SSL_get_psk_identity.3 | 173 + .../mingw64/share/man/man3/SSL_get_rbio.3 | 175 + .../mingw64/share/man/man3/SSL_get_session.3 | 235 + .../share/man/man3/SSL_get_shared_sigalgs.3 | 219 + .../share/man/man3/SSL_get_verify_result.3 | 190 + .../mingw64/share/man/man3/SSL_get_version.3 | 221 + .../mingw64/share/man/man3/SSL_in_init.3 | 227 + .../mingw64/share/man/man3/SSL_key_update.3 | 236 + .../mingw64/share/man/man3/SSL_library_init.3 | 185 + .../share/man/man3/SSL_load_client_CA_file.3 | 209 + deps/openssl/mingw64/share/man/man3/SSL_new.3 | 195 + .../mingw64/share/man/man3/SSL_pending.3 | 199 + .../openssl/mingw64/share/man/man3/SSL_read.3 | 275 + .../share/man/man3/SSL_read_early_data.3 | 480 ++ .../share/man/man3/SSL_rstate_string.3 | 195 + .../share/man/man3/SSL_session_reused.3 | 178 + .../mingw64/share/man/man3/SSL_set1_host.3 | 249 + .../mingw64/share/man/man3/SSL_set_bio.3 | 227 + .../share/man/man3/SSL_set_connect_state.3 | 207 + .../mingw64/share/man/man3/SSL_set_fd.3 | 188 + .../mingw64/share/man/man3/SSL_set_session.3 | 194 + .../mingw64/share/man/man3/SSL_set_shutdown.3 | 204 + .../share/man/man3/SSL_set_verify_result.3 | 178 + .../mingw64/share/man/man3/SSL_shutdown.3 | 287 + .../mingw64/share/man/man3/SSL_state_string.3 | 185 + .../openssl/mingw64/share/man/man3/SSL_want.3 | 233 + .../mingw64/share/man/man3/SSL_write.3 | 251 + .../mingw64/share/man/man3/UI_STRING.3 | 274 + .../mingw64/share/man/man3/UI_UTIL_read_pw.3 | 202 + .../mingw64/share/man/man3/UI_create_method.3 | 319 + deps/openssl/mingw64/share/man/man3/UI_new.3 | 376 ++ .../mingw64/share/man/man3/X509V3_get_d2i.3 | 375 ++ .../mingw64/share/man/man3/X509_ALGOR_dup.3 | 193 + .../share/man/man3/X509_CRL_get0_by_serial.3 | 242 + .../man/man3/X509_EXTENSION_set_object.3 | 223 + .../mingw64/share/man/man3/X509_LOOKUP.3 | 310 + .../share/man/man3/X509_LOOKUP_hash_dir.3 | 264 + .../share/man/man3/X509_LOOKUP_meth_new.3 | 310 + .../man/man3/X509_NAME_ENTRY_get_object.3 | 224 + .../man/man3/X509_NAME_add_entry_by_txt.3 | 257 + .../share/man/man3/X509_NAME_get0_der.3 | 171 + .../man/man3/X509_NAME_get_index_by_NID.3 | 254 + .../share/man/man3/X509_NAME_print_ex.3 | 252 + .../mingw64/share/man/man3/X509_PUBKEY_new.3 | 248 + .../mingw64/share/man/man3/X509_SIG_get0.3 | 172 + .../share/man/man3/X509_STORE_CTX_get_error.3 | 416 ++ .../share/man/man3/X509_STORE_CTX_new.3 | 295 + .../man/man3/X509_STORE_CTX_set_verify_cb.3 | 334 ++ .../share/man/man3/X509_STORE_add_cert.3 | 243 + .../share/man/man3/X509_STORE_get0_param.3 | 186 + .../mingw64/share/man/man3/X509_STORE_new.3 | 188 + .../man/man3/X509_STORE_set_verify_cb_func.3 | 364 ++ .../man/man3/X509_VERIFY_PARAM_set_flags.3 | 500 ++ .../mingw64/share/man/man3/X509_check_ca.3 | 177 + .../mingw64/share/man/man3/X509_check_host.3 | 288 + .../share/man/man3/X509_check_issued.3 | 175 + .../share/man/man3/X509_check_private_key.3 | 183 + .../share/man/man3/X509_check_purpose.3 | 204 + .../openssl/mingw64/share/man/man3/X509_cmp.3 | 209 + .../mingw64/share/man/man3/X509_cmp_time.3 | 192 + .../mingw64/share/man/man3/X509_digest.3 | 194 + .../openssl/mingw64/share/man/man3/X509_dup.3 | 202 + .../share/man/man3/X509_get0_notBefore.3 | 231 + .../share/man/man3/X509_get0_signature.3 | 257 + .../mingw64/share/man/man3/X509_get0_uids.3 | 188 + .../share/man/man3/X509_get_extension_flags.3 | 308 + .../mingw64/share/man/man3/X509_get_pubkey.3 | 215 + .../share/man/man3/X509_get_serialNumber.3 | 200 + .../share/man/man3/X509_get_subject_name.3 | 214 + .../mingw64/share/man/man3/X509_get_version.3 | 211 + .../openssl/mingw64/share/man/man3/X509_new.3 | 213 + .../mingw64/share/man/man3/X509_sign.3 | 227 + .../mingw64/share/man/man3/X509_verify_cert.3 | 190 + .../share/man/man3/X509v3_get_ext_by_NID.3 | 264 + .../mingw64/share/man/man3/d2i_DHparams.3 | 174 + .../share/man/man3/d2i_PKCS8PrivateKey_bio.3 | 203 + .../mingw64/share/man/man3/d2i_PrivateKey.3 | 209 + .../mingw64/share/man/man3/d2i_SSL_SESSION.3 | 182 + .../openssl/mingw64/share/man/man3/d2i_X509.3 | 385 ++ .../share/man/man3/i2d_CMS_bio_stream.3 | 182 + .../share/man/man3/i2d_PKCS7_bio_stream.3 | 182 + .../mingw64/share/man/man3/i2d_re_X509_tbs.3 | 218 + .../mingw64/share/man/man3/o2i_SCT_LIST.3 | 179 + deps/openssl/mingw64/share/man/man5/config.5 | 600 ++ .../mingw64/share/man/man5/x509v3_config.5 | 704 +++ deps/openssl/mingw64/share/man/man7/Ed25519.7 | 221 + deps/openssl/mingw64/share/man/man7/RAND.7 | 210 + .../mingw64/share/man/man7/RAND_DRBG.7 | 396 ++ deps/openssl/mingw64/share/man/man7/RSA-PSS.7 | 189 + deps/openssl/mingw64/share/man/man7/SM2.7 | 217 + deps/openssl/mingw64/share/man/man7/X25519.7 | 208 + deps/openssl/mingw64/share/man/man7/bio.7 | 217 + deps/openssl/mingw64/share/man/man7/crypto.7 | 191 + deps/openssl/mingw64/share/man/man7/ct.7 | 185 + .../mingw64/share/man/man7/des_modes.7 | 295 + deps/openssl/mingw64/share/man/man7/evp.7 | 236 + .../mingw64/share/man/man7/ossl_store-file.7 | 191 + .../mingw64/share/man/man7/ossl_store.7 | 215 + .../share/man/man7/passphrase-encoding.7 | 287 + .../share/man/man7/proxy-certificates.7 | 478 ++ deps/openssl/mingw64/share/man/man7/scrypt.7 | 248 + deps/openssl/mingw64/share/man/man7/ssl.7 | 914 +++ deps/openssl/mingw64/share/man/man7/x509.7 | 206 + src/tls.c | 1102 ---- 2374 files changed, 477787 insertions(+), 1109 deletions(-) create mode 100755 deps/openssl/android/arm64-v8a/usr/local/bin/c_rehash create mode 100755 deps/openssl/android/arm64-v8a/usr/local/bin/openssl create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/aes.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/asn1.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/asn1_mac.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/asn1err.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/asn1t.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/async.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/asyncerr.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/bio.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/bioerr.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/blowfish.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/bn.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/bnerr.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/buffer.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/buffererr.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/camellia.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/cast.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/cmac.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/cms.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/cmserr.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/comp.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/comperr.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/conf.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/conf_api.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/conferr.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/crypto.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/cryptoerr.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/ct.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/cterr.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/des.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/dh.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/dherr.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/dsa.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/dsaerr.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/dtls1.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/e_os2.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/ebcdic.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/ec.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/ecdh.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/ecdsa.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/ecerr.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/engine.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/engineerr.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/err.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/evp.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/evperr.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/hmac.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/idea.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/kdf.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/kdferr.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/lhash.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/md2.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/md4.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/md5.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/mdc2.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/modes.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/obj_mac.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/objects.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/objectserr.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/ocsp.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/ocsperr.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/opensslconf.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/opensslv.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/ossl_typ.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/pem.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/pem2.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/pemerr.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/pkcs12.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/pkcs12err.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/pkcs7.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/pkcs7err.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/rand.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/rand_drbg.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/randerr.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/rc2.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/rc4.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/rc5.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/ripemd.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/rsa.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/rsaerr.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/safestack.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/seed.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/sha.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/srp.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/srtp.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/ssl.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/ssl2.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/ssl3.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/sslerr.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/stack.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/store.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/storeerr.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/symhacks.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/tls1.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/ts.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/tserr.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/txt_db.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/ui.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/uierr.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/whrlpool.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509_vfy.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509err.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509v3.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509v3err.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/lib/pkgconfig/libcrypto.pc create mode 100644 deps/openssl/android/arm64-v8a/usr/local/lib/pkgconfig/libssl.pc create mode 100644 deps/openssl/android/arm64-v8a/usr/local/lib/pkgconfig/openssl.pc create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/CA.pl.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/asn1parse.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/ca.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/ciphers.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/cms.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/crl.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/crl2pkcs7.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/dgst.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/dhparam.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/dsa.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/dsaparam.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/ec.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/ecparam.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/enc.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/engine.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/errstr.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/gendsa.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/genpkey.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/genrsa.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/list.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/nseq.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/ocsp.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/openssl.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/passwd.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/pkcs12.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/pkcs7.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/pkcs8.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/pkey.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/pkeyparam.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/pkeyutl.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/prime.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/rand.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/rehash.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/req.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/rsa.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/rsautl.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/s_client.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/s_server.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/s_time.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/sess_id.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/smime.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/speed.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/spkac.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/srp.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/storeutl.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/ts.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/tsget.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/verify.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/version.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/x509.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ADMISSIONS.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ASN1_INTEGER_get_int64.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ASN1_ITEM_lookup.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ASN1_OBJECT_new.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ASN1_STRING_TABLE_add.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ASN1_STRING_length.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ASN1_STRING_new.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ASN1_STRING_print_ex.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ASN1_TIME_set.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ASN1_TYPE_get.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ASN1_generate_nconf.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ASYNC_WAIT_CTX_new.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ASYNC_start_job.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BF_encrypt.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_ADDR.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_ADDRINFO.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_connect.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_ctrl.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_f_base64.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_f_buffer.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_f_cipher.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_f_md.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_f_null.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_f_ssl.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_find_type.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_get_data.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_get_ex_new_index.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_meth_new.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_new.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_new_CMS.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_parse_hostserv.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_printf.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_push.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_read.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_s_accept.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_s_bio.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_s_connect.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_s_fd.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_s_file.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_s_mem.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_s_null.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_s_socket.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_set_callback.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_should_retry.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_BLINDING_new.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_CTX_new.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_CTX_start.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_add.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_add_word.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_bn2bin.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_cmp.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_copy.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_generate_prime.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_mod_inverse.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_mod_mul_montgomery.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_mod_mul_reciprocal.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_new.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_num_bytes.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_rand.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_security_bits.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_set_bit.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_swap.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_zero.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BUF_MEM_new.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CMS_add0_cert.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CMS_add1_recipient_cert.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CMS_add1_signer.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CMS_compress.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CMS_decrypt.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CMS_encrypt.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CMS_final.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CMS_get0_RecipientInfos.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CMS_get0_SignerInfos.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CMS_get0_type.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CMS_get1_ReceiptRequest.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CMS_sign.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CMS_sign_receipt.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CMS_uncompress.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CMS_verify.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CMS_verify_receipt.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CONF_modules_free.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CONF_modules_load_file.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CRYPTO_THREAD_run_once.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CRYPTO_get_ex_new_index.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CRYPTO_memcmp.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CTLOG_STORE_get0_log_by_id.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CTLOG_STORE_new.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CTLOG_new.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CT_POLICY_EVAL_CTX_new.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DEFINE_STACK_OF.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DES_random_key.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DH_generate_key.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DH_generate_parameters.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DH_get0_pqg.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DH_get_1024_160.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DH_meth_new.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DH_new.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DH_new_by_nid.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DH_set_method.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DH_size.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DSA_SIG_new.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DSA_do_sign.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DSA_dup_DH.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DSA_generate_key.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DSA_generate_parameters.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DSA_get0_pqg.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DSA_meth_new.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DSA_new.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DSA_set_method.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DSA_sign.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DSA_size.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DTLS_get_data_mtu.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DTLS_set_timer_cb.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DTLSv1_listen.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ECDSA_SIG_new.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ECPKParameters_print.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EC_GFp_simple_method.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EC_GROUP_copy.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EC_GROUP_new.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EC_KEY_get_enc_flags.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EC_KEY_new.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EC_POINT_add.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EC_POINT_new.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ENGINE_add.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ERR_GET_LIB.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ERR_clear_error.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ERR_error_string.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ERR_get_error.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ERR_load_crypto_strings.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ERR_load_strings.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ERR_print_errors.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ERR_put_error.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ERR_remove_state.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ERR_set_mark.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_BytesToKey.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_CIPHER_CTX_get_cipher_data.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_CIPHER_meth_new.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_DigestInit.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_DigestSignInit.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_DigestVerifyInit.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_EncodeInit.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_EncryptInit.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_MD_meth_new.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_OpenInit.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_ASN1_METHOD.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_CTX_ctrl.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_CTX_new.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_CTX_set1_pbe_pass.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_CTX_set_hkdf_md.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_CTX_set_rsa_pss_keygen_md.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_CTX_set_scrypt_N.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_CTX_set_tls1_prf_md.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_asn1_get_count.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_cmp.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_decrypt.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_derive.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_encrypt.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_get_default_digest_nid.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_keygen.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_meth_get_count.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_meth_new.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_new.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_print_private.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_set1_RSA.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_sign.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_size.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_verify.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_verify_recover.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_SealInit.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_SignInit.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_VerifyInit.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_aes.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_aria.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_bf_cbc.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_blake2b512.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_camellia.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_cast5_cbc.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_chacha20.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_des.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_desx_cbc.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_idea_cbc.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_md2.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_md4.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_md5.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_mdc2.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_rc2_cbc.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_rc4.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_rc5_32_12_16_cbc.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_ripemd160.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_seed_cbc.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_sha1.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_sha224.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_sha3_224.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_sm3.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_sm4_cbc.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_whirlpool.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/HMAC.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/MD5.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/MDC2_Init.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OBJ_nid2obj.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OCSP_REQUEST_new.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OCSP_cert_to_id.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OCSP_request_add1_nonce.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OCSP_resp_find_status.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OCSP_response_status.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OCSP_sendreq_new.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OPENSSL_Applink.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OPENSSL_LH_COMPFUNC.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OPENSSL_LH_stats.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OPENSSL_VERSION_NUMBER.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OPENSSL_config.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OPENSSL_fork_prepare.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OPENSSL_ia32cap.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OPENSSL_init_crypto.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OPENSSL_init_ssl.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OPENSSL_instrument_bus.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OPENSSL_load_builtin_modules.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OPENSSL_malloc.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OPENSSL_secure_malloc.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OSSL_STORE_INFO.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OSSL_STORE_LOADER.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OSSL_STORE_SEARCH.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OSSL_STORE_expect.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OSSL_STORE_open.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OpenSSL_add_all_algorithms.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/PEM_bytes_read_bio.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/PEM_read.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/PEM_read_CMS.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/PEM_read_bio_PrivateKey.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/PEM_read_bio_ex.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/PEM_write_bio_CMS_stream.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/PEM_write_bio_PKCS7_stream.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/PKCS12_create.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/PKCS12_newpass.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/PKCS12_parse.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/PKCS5_PBKDF2_HMAC.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/PKCS7_decrypt.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/PKCS7_encrypt.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/PKCS7_sign.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/PKCS7_sign_add_signer.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/PKCS7_verify.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RAND_DRBG_generate.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RAND_DRBG_get0_master.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RAND_DRBG_new.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RAND_DRBG_reseed.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RAND_DRBG_set_callbacks.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RAND_DRBG_set_ex_data.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RAND_add.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RAND_bytes.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RAND_cleanup.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RAND_egd.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RAND_load_file.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RAND_set_rand_method.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RC4_set_key.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RIPEMD160_Init.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RSA_blinding_on.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RSA_check_key.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RSA_generate_key.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RSA_get0_key.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RSA_meth_new.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RSA_new.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RSA_padding_add_PKCS1_type_1.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RSA_print.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RSA_private_encrypt.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RSA_public_encrypt.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RSA_set_method.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RSA_sign.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RSA_sign_ASN1_OCTET_STRING.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RSA_size.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SCT_new.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SCT_print.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SCT_validate.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SHA256_Init.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SMIME_read_CMS.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SMIME_read_PKCS7.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SMIME_write_CMS.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SMIME_write_PKCS7.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CIPHER_get_name.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_COMP_add_compression_method.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CONF_CTX_new.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CONF_CTX_set1_prefix.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CONF_CTX_set_flags.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CONF_CTX_set_ssl_ctx.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CONF_cmd.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CONF_cmd_argv.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_add1_chain_cert.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_add_extra_chain_cert.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_add_session.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_config.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_ctrl.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_dane_enable.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_flush_sessions.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_free.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_get0_param.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_get_verify_mode.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_has_client_custom_ext.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_load_verify_locations.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_new.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_sess_number.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_sess_set_cache_size.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_sess_set_get_cb.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_sessions.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set0_CA_list.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set1_curves.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set1_sigalgs.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set1_verify_cert_store.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_alpn_select_cb.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_cert_cb.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_cert_store.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_cert_verify_callback.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_cipher_list.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_client_cert_cb.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_client_hello_cb.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_ct_validation_callback.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_ctlog_list_file.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_default_passwd_cb.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_ex_data.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_generate_session_id.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_info_callback.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_keylog_callback.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_max_cert_list.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_min_proto_version.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_mode.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_msg_callback.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_num_tickets.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_options.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_psk_client_callback.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_quiet_shutdown.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_read_ahead.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_record_padding_callback.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_security_level.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_session_cache_mode.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_session_id_context.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_session_ticket_cb.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_split_send_fragment.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_ssl_version.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_stateless_cookie_generate_cb.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_timeout.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_tlsext_servername_callback.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_tlsext_status_cb.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_tlsext_ticket_key_cb.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_tlsext_use_srtp.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_tmp_dh_callback.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_verify.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_use_certificate.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_use_psk_identity_hint.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_use_serverinfo.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_SESSION_free.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_SESSION_get0_cipher.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_SESSION_get0_hostname.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_SESSION_get0_id_context.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_SESSION_get0_peer.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_SESSION_get_compress_id.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_SESSION_get_ex_data.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_SESSION_get_protocol_version.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_SESSION_get_time.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_SESSION_has_ticket.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_SESSION_is_resumable.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_SESSION_print.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_SESSION_set1_id.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_accept.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_alert_type_string.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_alloc_buffers.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_check_chain.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_clear.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_connect.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_do_handshake.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_export_keying_material.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_extension_supported.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_free.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get0_peer_scts.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_SSL_CTX.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_all_async_fds.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_ciphers.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_client_random.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_current_cipher.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_default_timeout.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_error.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_extms_support.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_fd.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_peer_cert_chain.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_peer_certificate.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_peer_signature_nid.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_peer_tmp_key.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_psk_identity.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_rbio.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_session.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_shared_sigalgs.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_verify_result.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_version.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_in_init.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_key_update.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_library_init.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_load_client_CA_file.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_new.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_pending.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_read.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_read_early_data.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_rstate_string.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_session_reused.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_set1_host.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_set_bio.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_set_connect_state.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_set_fd.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_set_session.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_set_shutdown.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_set_verify_result.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_shutdown.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_state_string.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_want.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_write.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/UI_STRING.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/UI_UTIL_read_pw.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/UI_create_method.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/UI_new.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509V3_get_d2i.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_ALGOR_dup.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_CRL_get0_by_serial.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_EXTENSION_set_object.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_LOOKUP.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_LOOKUP_hash_dir.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_LOOKUP_meth_new.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_NAME_ENTRY_get_object.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_NAME_add_entry_by_txt.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_NAME_get0_der.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_NAME_get_index_by_NID.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_NAME_print_ex.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_PUBKEY_new.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_SIG_get0.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_STORE_CTX_get_error.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_STORE_CTX_new.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_STORE_CTX_set_verify_cb.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_STORE_add_cert.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_STORE_get0_param.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_STORE_new.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_STORE_set_verify_cb_func.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_VERIFY_PARAM_set_flags.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_check_ca.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_check_host.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_check_issued.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_check_private_key.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_check_purpose.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_cmp.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_cmp_time.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_digest.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_dup.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_get0_notBefore.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_get0_signature.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_get0_uids.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_get_extension_flags.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_get_pubkey.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_get_serialNumber.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_get_subject_name.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_get_version.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_new.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_sign.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_verify_cert.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509v3_get_ext_by_NID.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/d2i_DHparams.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/d2i_PKCS8PrivateKey_bio.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/d2i_PrivateKey.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/d2i_SSL_SESSION.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/d2i_X509.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/i2d_CMS_bio_stream.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/i2d_PKCS7_bio_stream.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/i2d_re_X509_tbs.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/o2i_SCT_LIST.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man5/config.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man5/x509v3_config.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/Ed25519.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/RAND.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/RAND_DRBG.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/RSA-PSS.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/SM2.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/X25519.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/bio.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/crypto.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/ct.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/des_modes.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/evp.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/ossl_store-file.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/ossl_store.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/passphrase-encoding.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/proxy-certificates.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/scrypt.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/ssl.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/x509.html create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man1/CA.pl.1 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man1/asn1parse.1 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man1/ca.1 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man1/ciphers.1 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man1/cms.1 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man1/crl.1 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man1/crl2pkcs7.1 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man1/dgst.1 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man1/dhparam.1 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man1/dsa.1 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man1/dsaparam.1 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man1/ec.1 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man1/ecparam.1 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man1/enc.1 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man1/engine.1 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man1/errstr.1 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man1/gendsa.1 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man1/genpkey.1 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man1/genrsa.1 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man1/list.1 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man1/nseq.1 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man1/ocsp.1 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man1/openssl.1 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man1/passwd.1 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man1/pkcs12.1 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man1/pkcs7.1 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man1/pkcs8.1 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man1/pkey.1 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man1/pkeyparam.1 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man1/pkeyutl.1 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man1/prime.1 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man1/rand.1 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man1/rehash.1 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man1/req.1 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man1/rsa.1 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man1/rsautl.1 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man1/s_client.1 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man1/s_server.1 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man1/s_time.1 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man1/sess_id.1 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man1/smime.1 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man1/speed.1 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man1/spkac.1 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man1/srp.1 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man1/storeutl.1 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man1/ts.1 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man1/tsget.1 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man1/verify.1 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man1/version.1 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man1/x509.1 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ADMISSIONS.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ASN1_INTEGER_get_int64.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ASN1_ITEM_lookup.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ASN1_OBJECT_new.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ASN1_STRING_TABLE_add.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ASN1_STRING_length.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ASN1_STRING_new.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ASN1_STRING_print_ex.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ASN1_TIME_set.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ASN1_TYPE_get.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ASN1_generate_nconf.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ASYNC_WAIT_CTX_new.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ASYNC_start_job.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BF_encrypt.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_ADDR.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_ADDRINFO.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_connect.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_ctrl.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_f_base64.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_f_buffer.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_f_cipher.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_f_md.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_f_null.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_f_ssl.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_find_type.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_get_data.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_get_ex_new_index.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_meth_new.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_new.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_new_CMS.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_parse_hostserv.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_printf.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_push.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_read.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_s_accept.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_s_bio.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_s_connect.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_s_fd.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_s_file.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_s_mem.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_s_null.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_s_socket.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_set_callback.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_should_retry.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_BLINDING_new.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_CTX_new.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_CTX_start.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_add.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_add_word.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_bn2bin.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_cmp.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_copy.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_generate_prime.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_mod_inverse.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_mod_mul_montgomery.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_mod_mul_reciprocal.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_new.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_num_bytes.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_rand.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_security_bits.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_set_bit.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_swap.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_zero.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BUF_MEM_new.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CMS_add0_cert.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CMS_add1_recipient_cert.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CMS_add1_signer.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CMS_compress.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CMS_decrypt.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CMS_encrypt.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CMS_final.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CMS_get0_RecipientInfos.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CMS_get0_SignerInfos.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CMS_get0_type.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CMS_get1_ReceiptRequest.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CMS_sign.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CMS_sign_receipt.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CMS_uncompress.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CMS_verify.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CMS_verify_receipt.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CONF_modules_free.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CONF_modules_load_file.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CRYPTO_THREAD_run_once.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CRYPTO_get_ex_new_index.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CRYPTO_memcmp.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CTLOG_STORE_get0_log_by_id.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CTLOG_STORE_new.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CTLOG_new.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CT_POLICY_EVAL_CTX_new.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DEFINE_STACK_OF.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DES_random_key.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DH_generate_key.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DH_generate_parameters.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DH_get0_pqg.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DH_get_1024_160.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DH_meth_new.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DH_new.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DH_new_by_nid.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DH_set_method.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DH_size.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DSA_SIG_new.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DSA_do_sign.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DSA_dup_DH.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DSA_generate_key.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DSA_generate_parameters.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DSA_get0_pqg.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DSA_meth_new.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DSA_new.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DSA_set_method.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DSA_sign.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DSA_size.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DTLS_get_data_mtu.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DTLS_set_timer_cb.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DTLSv1_listen.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ECDSA_SIG_new.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ECPKParameters_print.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EC_GFp_simple_method.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EC_GROUP_copy.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EC_GROUP_new.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EC_KEY_get_enc_flags.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EC_KEY_new.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EC_POINT_add.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EC_POINT_new.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ENGINE_add.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ERR_GET_LIB.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ERR_clear_error.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ERR_error_string.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ERR_get_error.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ERR_load_crypto_strings.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ERR_load_strings.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ERR_print_errors.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ERR_put_error.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ERR_remove_state.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ERR_set_mark.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_BytesToKey.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_CIPHER_CTX_get_cipher_data.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_CIPHER_meth_new.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_DigestInit.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_DigestSignInit.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_DigestVerifyInit.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_EncodeInit.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_EncryptInit.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_MD_meth_new.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_OpenInit.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_ASN1_METHOD.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_CTX_ctrl.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_CTX_new.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_CTX_set1_pbe_pass.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_CTX_set_hkdf_md.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_CTX_set_rsa_pss_keygen_md.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_CTX_set_scrypt_N.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_CTX_set_tls1_prf_md.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_asn1_get_count.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_cmp.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_decrypt.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_derive.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_encrypt.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_get_default_digest_nid.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_keygen.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_meth_get_count.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_meth_new.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_new.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_print_private.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_set1_RSA.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_sign.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_size.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_verify.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_verify_recover.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_SealInit.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_SignInit.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_VerifyInit.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_aes.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_aria.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_bf_cbc.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_blake2b512.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_camellia.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_cast5_cbc.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_chacha20.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_des.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_desx_cbc.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_idea_cbc.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_md2.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_md4.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_md5.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_mdc2.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_rc2_cbc.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_rc4.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_rc5_32_12_16_cbc.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_ripemd160.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_seed_cbc.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_sha1.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_sha224.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_sha3_224.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_sm3.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_sm4_cbc.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_whirlpool.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/HMAC.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/MD5.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/MDC2_Init.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OBJ_nid2obj.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OCSP_REQUEST_new.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OCSP_cert_to_id.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OCSP_request_add1_nonce.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OCSP_resp_find_status.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OCSP_response_status.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OCSP_sendreq_new.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OPENSSL_Applink.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OPENSSL_LH_COMPFUNC.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OPENSSL_LH_stats.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OPENSSL_VERSION_NUMBER.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OPENSSL_config.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OPENSSL_fork_prepare.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OPENSSL_ia32cap.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OPENSSL_init_crypto.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OPENSSL_init_ssl.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OPENSSL_instrument_bus.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OPENSSL_load_builtin_modules.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OPENSSL_malloc.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OPENSSL_secure_malloc.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OSSL_STORE_INFO.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OSSL_STORE_LOADER.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OSSL_STORE_SEARCH.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OSSL_STORE_expect.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OSSL_STORE_open.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OpenSSL_add_all_algorithms.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/PEM_bytes_read_bio.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/PEM_read.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/PEM_read_CMS.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/PEM_read_bio_PrivateKey.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/PEM_read_bio_ex.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/PEM_write_bio_CMS_stream.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/PEM_write_bio_PKCS7_stream.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/PKCS12_create.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/PKCS12_newpass.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/PKCS12_parse.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/PKCS5_PBKDF2_HMAC.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/PKCS7_decrypt.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/PKCS7_encrypt.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/PKCS7_sign.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/PKCS7_sign_add_signer.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/PKCS7_verify.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RAND_DRBG_generate.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RAND_DRBG_get0_master.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RAND_DRBG_new.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RAND_DRBG_reseed.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RAND_DRBG_set_callbacks.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RAND_DRBG_set_ex_data.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RAND_add.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RAND_bytes.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RAND_cleanup.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RAND_egd.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RAND_load_file.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RAND_set_rand_method.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RC4_set_key.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RIPEMD160_Init.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RSA_blinding_on.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RSA_check_key.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RSA_generate_key.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RSA_get0_key.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RSA_meth_new.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RSA_new.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RSA_padding_add_PKCS1_type_1.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RSA_print.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RSA_private_encrypt.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RSA_public_encrypt.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RSA_set_method.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RSA_sign.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RSA_sign_ASN1_OCTET_STRING.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RSA_size.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SCT_new.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SCT_print.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SCT_validate.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SHA256_Init.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SMIME_read_CMS.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SMIME_read_PKCS7.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SMIME_write_CMS.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SMIME_write_PKCS7.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CIPHER_get_name.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_COMP_add_compression_method.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CONF_CTX_new.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CONF_CTX_set1_prefix.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CONF_CTX_set_flags.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CONF_CTX_set_ssl_ctx.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CONF_cmd.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CONF_cmd_argv.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_add1_chain_cert.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_add_extra_chain_cert.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_add_session.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_config.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_ctrl.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_dane_enable.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_flush_sessions.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_free.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_get0_param.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_get_verify_mode.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_has_client_custom_ext.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_load_verify_locations.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_new.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_sess_number.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_sess_set_cache_size.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_sess_set_get_cb.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_sessions.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set0_CA_list.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set1_curves.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set1_sigalgs.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set1_verify_cert_store.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_alpn_select_cb.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_cert_cb.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_cert_store.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_cert_verify_callback.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_cipher_list.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_client_cert_cb.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_client_hello_cb.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_ct_validation_callback.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_ctlog_list_file.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_default_passwd_cb.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_ex_data.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_generate_session_id.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_info_callback.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_keylog_callback.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_max_cert_list.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_min_proto_version.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_mode.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_msg_callback.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_num_tickets.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_options.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_psk_client_callback.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_quiet_shutdown.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_read_ahead.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_record_padding_callback.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_security_level.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_session_cache_mode.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_session_id_context.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_session_ticket_cb.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_split_send_fragment.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_ssl_version.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_stateless_cookie_generate_cb.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_timeout.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_tlsext_servername_callback.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_tlsext_status_cb.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_tlsext_ticket_key_cb.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_tlsext_use_srtp.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_tmp_dh_callback.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_verify.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_use_certificate.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_use_psk_identity_hint.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_use_serverinfo.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_SESSION_free.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_SESSION_get0_cipher.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_SESSION_get0_hostname.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_SESSION_get0_id_context.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_SESSION_get0_peer.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_SESSION_get_compress_id.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_SESSION_get_ex_data.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_SESSION_get_protocol_version.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_SESSION_get_time.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_SESSION_has_ticket.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_SESSION_is_resumable.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_SESSION_print.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_SESSION_set1_id.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_accept.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_alert_type_string.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_alloc_buffers.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_check_chain.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_clear.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_connect.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_do_handshake.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_export_keying_material.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_extension_supported.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_free.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get0_peer_scts.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_SSL_CTX.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_all_async_fds.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_ciphers.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_client_random.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_current_cipher.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_default_timeout.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_error.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_extms_support.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_fd.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_peer_cert_chain.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_peer_certificate.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_peer_signature_nid.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_peer_tmp_key.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_psk_identity.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_rbio.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_session.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_shared_sigalgs.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_verify_result.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_version.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_in_init.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_key_update.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_library_init.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_load_client_CA_file.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_new.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_pending.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_read.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_read_early_data.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_rstate_string.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_session_reused.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_set1_host.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_set_bio.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_set_connect_state.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_set_fd.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_set_session.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_set_shutdown.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_set_verify_result.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_shutdown.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_state_string.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_want.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_write.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/UI_STRING.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/UI_UTIL_read_pw.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/UI_create_method.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/UI_new.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509V3_get_d2i.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_ALGOR_dup.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_CRL_get0_by_serial.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_EXTENSION_set_object.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_LOOKUP.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_LOOKUP_hash_dir.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_LOOKUP_meth_new.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_NAME_ENTRY_get_object.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_NAME_add_entry_by_txt.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_NAME_get0_der.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_NAME_get_index_by_NID.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_NAME_print_ex.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_PUBKEY_new.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_SIG_get0.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_STORE_CTX_get_error.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_STORE_CTX_new.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_STORE_CTX_set_verify_cb.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_STORE_add_cert.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_STORE_get0_param.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_STORE_new.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_STORE_set_verify_cb_func.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_VERIFY_PARAM_set_flags.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_check_ca.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_check_host.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_check_issued.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_check_private_key.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_check_purpose.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_cmp.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_cmp_time.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_digest.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_dup.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_get0_notBefore.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_get0_signature.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_get0_uids.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_get_extension_flags.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_get_pubkey.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_get_serialNumber.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_get_subject_name.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_get_version.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_new.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_sign.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_verify_cert.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509v3_get_ext_by_NID.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/d2i_DHparams.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/d2i_PKCS8PrivateKey_bio.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/d2i_PrivateKey.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/d2i_SSL_SESSION.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/d2i_X509.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/i2d_CMS_bio_stream.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/i2d_PKCS7_bio_stream.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/i2d_re_X509_tbs.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man3/o2i_SCT_LIST.3 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man5/config.5 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man5/x509v3_config.5 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man7/Ed25519.7 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man7/RAND.7 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man7/RAND_DRBG.7 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man7/RSA-PSS.7 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man7/SM2.7 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man7/X25519.7 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man7/bio.7 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man7/crypto.7 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man7/ct.7 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man7/des_modes.7 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man7/evp.7 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man7/ossl_store-file.7 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man7/ossl_store.7 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man7/passphrase-encoding.7 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man7/proxy-certificates.7 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man7/scrypt.7 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man7/ssl.7 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/share/man/man7/x509.7 create mode 100644 deps/openssl/android/arm64-v8a/usr/local/ssl/ct_log_list.cnf create mode 100644 deps/openssl/android/arm64-v8a/usr/local/ssl/ct_log_list.cnf.dist create mode 100755 deps/openssl/android/arm64-v8a/usr/local/ssl/misc/CA.pl create mode 100755 deps/openssl/android/arm64-v8a/usr/local/ssl/misc/tsget.pl create mode 100644 deps/openssl/android/arm64-v8a/usr/local/ssl/openssl.cnf create mode 100644 deps/openssl/android/arm64-v8a/usr/local/ssl/openssl.cnf.dist create mode 100755 deps/openssl/mingw64/bin/c_rehash create mode 100755 deps/openssl/mingw64/bin/openssl.exe create mode 100644 deps/openssl/mingw64/include/openssl/aes.h create mode 100644 deps/openssl/mingw64/include/openssl/asn1.h create mode 100644 deps/openssl/mingw64/include/openssl/asn1_mac.h create mode 100644 deps/openssl/mingw64/include/openssl/asn1err.h create mode 100644 deps/openssl/mingw64/include/openssl/asn1t.h create mode 100644 deps/openssl/mingw64/include/openssl/async.h create mode 100644 deps/openssl/mingw64/include/openssl/asyncerr.h create mode 100644 deps/openssl/mingw64/include/openssl/bio.h create mode 100644 deps/openssl/mingw64/include/openssl/bioerr.h create mode 100644 deps/openssl/mingw64/include/openssl/blowfish.h create mode 100644 deps/openssl/mingw64/include/openssl/bn.h create mode 100644 deps/openssl/mingw64/include/openssl/bnerr.h create mode 100644 deps/openssl/mingw64/include/openssl/buffer.h create mode 100644 deps/openssl/mingw64/include/openssl/buffererr.h create mode 100644 deps/openssl/mingw64/include/openssl/camellia.h create mode 100644 deps/openssl/mingw64/include/openssl/cast.h create mode 100644 deps/openssl/mingw64/include/openssl/cmac.h create mode 100644 deps/openssl/mingw64/include/openssl/cms.h create mode 100644 deps/openssl/mingw64/include/openssl/cmserr.h create mode 100644 deps/openssl/mingw64/include/openssl/comp.h create mode 100644 deps/openssl/mingw64/include/openssl/comperr.h create mode 100644 deps/openssl/mingw64/include/openssl/conf.h create mode 100644 deps/openssl/mingw64/include/openssl/conf_api.h create mode 100644 deps/openssl/mingw64/include/openssl/conferr.h create mode 100644 deps/openssl/mingw64/include/openssl/crypto.h create mode 100644 deps/openssl/mingw64/include/openssl/cryptoerr.h create mode 100644 deps/openssl/mingw64/include/openssl/ct.h create mode 100644 deps/openssl/mingw64/include/openssl/cterr.h create mode 100644 deps/openssl/mingw64/include/openssl/des.h create mode 100644 deps/openssl/mingw64/include/openssl/dh.h create mode 100644 deps/openssl/mingw64/include/openssl/dherr.h create mode 100644 deps/openssl/mingw64/include/openssl/dsa.h create mode 100644 deps/openssl/mingw64/include/openssl/dsaerr.h create mode 100644 deps/openssl/mingw64/include/openssl/dtls1.h create mode 100644 deps/openssl/mingw64/include/openssl/e_os2.h create mode 100644 deps/openssl/mingw64/include/openssl/ebcdic.h create mode 100644 deps/openssl/mingw64/include/openssl/ec.h create mode 100644 deps/openssl/mingw64/include/openssl/ecdh.h create mode 100644 deps/openssl/mingw64/include/openssl/ecdsa.h create mode 100644 deps/openssl/mingw64/include/openssl/ecerr.h create mode 100644 deps/openssl/mingw64/include/openssl/engine.h create mode 100644 deps/openssl/mingw64/include/openssl/engineerr.h create mode 100644 deps/openssl/mingw64/include/openssl/err.h create mode 100644 deps/openssl/mingw64/include/openssl/evp.h create mode 100644 deps/openssl/mingw64/include/openssl/evperr.h create mode 100644 deps/openssl/mingw64/include/openssl/hmac.h create mode 100644 deps/openssl/mingw64/include/openssl/idea.h create mode 100644 deps/openssl/mingw64/include/openssl/kdf.h create mode 100644 deps/openssl/mingw64/include/openssl/kdferr.h create mode 100644 deps/openssl/mingw64/include/openssl/lhash.h create mode 100644 deps/openssl/mingw64/include/openssl/md2.h create mode 100644 deps/openssl/mingw64/include/openssl/md4.h create mode 100644 deps/openssl/mingw64/include/openssl/md5.h create mode 100644 deps/openssl/mingw64/include/openssl/mdc2.h create mode 100644 deps/openssl/mingw64/include/openssl/modes.h create mode 100644 deps/openssl/mingw64/include/openssl/obj_mac.h create mode 100644 deps/openssl/mingw64/include/openssl/objects.h create mode 100644 deps/openssl/mingw64/include/openssl/objectserr.h create mode 100644 deps/openssl/mingw64/include/openssl/ocsp.h create mode 100644 deps/openssl/mingw64/include/openssl/ocsperr.h create mode 100644 deps/openssl/mingw64/include/openssl/opensslconf.h create mode 100644 deps/openssl/mingw64/include/openssl/opensslv.h create mode 100644 deps/openssl/mingw64/include/openssl/ossl_typ.h create mode 100644 deps/openssl/mingw64/include/openssl/pem.h create mode 100644 deps/openssl/mingw64/include/openssl/pem2.h create mode 100644 deps/openssl/mingw64/include/openssl/pemerr.h create mode 100644 deps/openssl/mingw64/include/openssl/pkcs12.h create mode 100644 deps/openssl/mingw64/include/openssl/pkcs12err.h create mode 100644 deps/openssl/mingw64/include/openssl/pkcs7.h create mode 100644 deps/openssl/mingw64/include/openssl/pkcs7err.h create mode 100644 deps/openssl/mingw64/include/openssl/rand.h create mode 100644 deps/openssl/mingw64/include/openssl/rand_drbg.h create mode 100644 deps/openssl/mingw64/include/openssl/randerr.h create mode 100644 deps/openssl/mingw64/include/openssl/rc2.h create mode 100644 deps/openssl/mingw64/include/openssl/rc4.h create mode 100644 deps/openssl/mingw64/include/openssl/rc5.h create mode 100644 deps/openssl/mingw64/include/openssl/ripemd.h create mode 100644 deps/openssl/mingw64/include/openssl/rsa.h create mode 100644 deps/openssl/mingw64/include/openssl/rsaerr.h create mode 100644 deps/openssl/mingw64/include/openssl/safestack.h create mode 100644 deps/openssl/mingw64/include/openssl/seed.h create mode 100644 deps/openssl/mingw64/include/openssl/sha.h create mode 100644 deps/openssl/mingw64/include/openssl/srp.h create mode 100644 deps/openssl/mingw64/include/openssl/srtp.h create mode 100644 deps/openssl/mingw64/include/openssl/ssl.h create mode 100644 deps/openssl/mingw64/include/openssl/ssl2.h create mode 100644 deps/openssl/mingw64/include/openssl/ssl3.h create mode 100644 deps/openssl/mingw64/include/openssl/sslerr.h create mode 100644 deps/openssl/mingw64/include/openssl/stack.h create mode 100644 deps/openssl/mingw64/include/openssl/store.h create mode 100644 deps/openssl/mingw64/include/openssl/storeerr.h create mode 100644 deps/openssl/mingw64/include/openssl/symhacks.h create mode 100644 deps/openssl/mingw64/include/openssl/tls1.h create mode 100644 deps/openssl/mingw64/include/openssl/ts.h create mode 100644 deps/openssl/mingw64/include/openssl/tserr.h create mode 100644 deps/openssl/mingw64/include/openssl/txt_db.h create mode 100644 deps/openssl/mingw64/include/openssl/ui.h create mode 100644 deps/openssl/mingw64/include/openssl/uierr.h create mode 100644 deps/openssl/mingw64/include/openssl/whrlpool.h create mode 100644 deps/openssl/mingw64/include/openssl/x509.h create mode 100644 deps/openssl/mingw64/include/openssl/x509_vfy.h create mode 100644 deps/openssl/mingw64/include/openssl/x509err.h create mode 100644 deps/openssl/mingw64/include/openssl/x509v3.h create mode 100644 deps/openssl/mingw64/include/openssl/x509v3err.h create mode 100644 deps/openssl/mingw64/lib/pkgconfig/libcrypto.pc create mode 100644 deps/openssl/mingw64/lib/pkgconfig/libssl.pc create mode 100644 deps/openssl/mingw64/lib/pkgconfig/openssl.pc create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man1/CA.pl.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man1/asn1parse.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man1/ca.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man1/ciphers.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man1/cms.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man1/crl.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man1/crl2pkcs7.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man1/dgst.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man1/dhparam.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man1/dsa.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man1/dsaparam.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man1/ec.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man1/ecparam.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man1/enc.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man1/engine.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man1/errstr.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man1/gendsa.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man1/genpkey.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man1/genrsa.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man1/list.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man1/nseq.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man1/ocsp.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man1/openssl.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man1/passwd.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man1/pkcs12.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man1/pkcs7.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man1/pkcs8.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man1/pkey.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man1/pkeyparam.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man1/pkeyutl.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man1/prime.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man1/rand.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man1/rehash.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man1/req.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man1/rsa.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man1/rsautl.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man1/s_client.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man1/s_server.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man1/s_time.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man1/sess_id.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man1/smime.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man1/speed.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man1/spkac.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man1/srp.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man1/storeutl.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man1/ts.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man1/tsget.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man1/verify.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man1/version.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man1/x509.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/ADMISSIONS.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/ASN1_INTEGER_get_int64.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/ASN1_ITEM_lookup.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/ASN1_OBJECT_new.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/ASN1_STRING_TABLE_add.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/ASN1_STRING_length.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/ASN1_STRING_new.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/ASN1_STRING_print_ex.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/ASN1_TIME_set.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/ASN1_TYPE_get.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/ASN1_generate_nconf.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/ASYNC_WAIT_CTX_new.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/ASYNC_start_job.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/BF_encrypt.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/BIO_ADDR.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/BIO_ADDRINFO.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/BIO_connect.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/BIO_ctrl.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/BIO_f_base64.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/BIO_f_buffer.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/BIO_f_cipher.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/BIO_f_md.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/BIO_f_null.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/BIO_f_ssl.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/BIO_find_type.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/BIO_get_data.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/BIO_get_ex_new_index.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/BIO_meth_new.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/BIO_new.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/BIO_new_CMS.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/BIO_parse_hostserv.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/BIO_printf.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/BIO_push.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/BIO_read.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/BIO_s_accept.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/BIO_s_bio.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/BIO_s_connect.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/BIO_s_fd.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/BIO_s_file.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/BIO_s_mem.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/BIO_s_null.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/BIO_s_socket.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/BIO_set_callback.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/BIO_should_retry.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/BN_BLINDING_new.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/BN_CTX_new.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/BN_CTX_start.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/BN_add.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/BN_add_word.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/BN_bn2bin.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/BN_cmp.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/BN_copy.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/BN_generate_prime.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/BN_mod_inverse.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/BN_mod_mul_montgomery.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/BN_mod_mul_reciprocal.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/BN_new.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/BN_num_bytes.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/BN_rand.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/BN_security_bits.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/BN_set_bit.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/BN_swap.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/BN_zero.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/BUF_MEM_new.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/CMS_add0_cert.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/CMS_add1_recipient_cert.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/CMS_add1_signer.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/CMS_compress.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/CMS_decrypt.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/CMS_encrypt.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/CMS_final.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/CMS_get0_RecipientInfos.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/CMS_get0_SignerInfos.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/CMS_get0_type.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/CMS_get1_ReceiptRequest.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/CMS_sign.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/CMS_sign_receipt.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/CMS_uncompress.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/CMS_verify.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/CMS_verify_receipt.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/CONF_modules_free.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/CONF_modules_load_file.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/CRYPTO_THREAD_run_once.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/CRYPTO_get_ex_new_index.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/CRYPTO_memcmp.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/CTLOG_STORE_get0_log_by_id.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/CTLOG_STORE_new.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/CTLOG_new.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/CT_POLICY_EVAL_CTX_new.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/DEFINE_STACK_OF.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/DES_random_key.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/DH_generate_key.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/DH_generate_parameters.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/DH_get0_pqg.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/DH_get_1024_160.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/DH_meth_new.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/DH_new.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/DH_new_by_nid.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/DH_set_method.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/DH_size.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/DSA_SIG_new.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/DSA_do_sign.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/DSA_dup_DH.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/DSA_generate_key.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/DSA_generate_parameters.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/DSA_get0_pqg.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/DSA_meth_new.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/DSA_new.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/DSA_set_method.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/DSA_sign.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/DSA_size.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/DTLS_get_data_mtu.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/DTLS_set_timer_cb.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/DTLSv1_listen.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/ECDSA_SIG_new.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/ECPKParameters_print.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EC_GFp_simple_method.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EC_GROUP_copy.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EC_GROUP_new.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EC_KEY_get_enc_flags.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EC_KEY_new.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EC_POINT_add.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EC_POINT_new.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/ENGINE_add.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/ERR_GET_LIB.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/ERR_clear_error.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/ERR_error_string.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/ERR_get_error.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/ERR_load_crypto_strings.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/ERR_load_strings.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/ERR_print_errors.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/ERR_put_error.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/ERR_remove_state.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/ERR_set_mark.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EVP_BytesToKey.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EVP_CIPHER_CTX_get_cipher_data.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EVP_CIPHER_meth_new.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EVP_DigestInit.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EVP_DigestSignInit.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EVP_DigestVerifyInit.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EVP_EncodeInit.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EVP_EncryptInit.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EVP_MD_meth_new.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EVP_OpenInit.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EVP_PKEY_ASN1_METHOD.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EVP_PKEY_CTX_ctrl.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EVP_PKEY_CTX_new.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EVP_PKEY_CTX_set1_pbe_pass.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EVP_PKEY_CTX_set_hkdf_md.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EVP_PKEY_CTX_set_rsa_pss_keygen_md.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EVP_PKEY_CTX_set_scrypt_N.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EVP_PKEY_CTX_set_tls1_prf_md.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EVP_PKEY_asn1_get_count.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EVP_PKEY_cmp.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EVP_PKEY_decrypt.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EVP_PKEY_derive.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EVP_PKEY_encrypt.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EVP_PKEY_get_default_digest_nid.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EVP_PKEY_keygen.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EVP_PKEY_meth_get_count.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EVP_PKEY_meth_new.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EVP_PKEY_new.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EVP_PKEY_print_private.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EVP_PKEY_set1_RSA.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EVP_PKEY_sign.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EVP_PKEY_size.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EVP_PKEY_verify.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EVP_PKEY_verify_recover.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EVP_SealInit.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EVP_SignInit.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EVP_VerifyInit.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EVP_aes.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EVP_aria.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EVP_bf_cbc.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EVP_blake2b512.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EVP_camellia.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EVP_cast5_cbc.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EVP_chacha20.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EVP_des.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EVP_desx_cbc.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EVP_idea_cbc.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EVP_md2.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EVP_md4.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EVP_md5.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EVP_mdc2.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EVP_rc2_cbc.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EVP_rc4.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EVP_rc5_32_12_16_cbc.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EVP_ripemd160.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EVP_seed_cbc.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EVP_sha1.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EVP_sha224.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EVP_sha3_224.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EVP_sm3.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EVP_sm4_cbc.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/EVP_whirlpool.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/HMAC.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/MD5.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/MDC2_Init.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/OBJ_nid2obj.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/OCSP_REQUEST_new.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/OCSP_cert_to_id.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/OCSP_request_add1_nonce.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/OCSP_resp_find_status.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/OCSP_response_status.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/OCSP_sendreq_new.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/OPENSSL_Applink.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/OPENSSL_LH_COMPFUNC.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/OPENSSL_LH_stats.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/OPENSSL_VERSION_NUMBER.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/OPENSSL_config.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/OPENSSL_fork_prepare.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/OPENSSL_ia32cap.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/OPENSSL_init_crypto.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/OPENSSL_init_ssl.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/OPENSSL_instrument_bus.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/OPENSSL_load_builtin_modules.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/OPENSSL_malloc.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/OPENSSL_secure_malloc.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/OSSL_STORE_INFO.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/OSSL_STORE_LOADER.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/OSSL_STORE_SEARCH.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/OSSL_STORE_expect.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/OSSL_STORE_open.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/OpenSSL_add_all_algorithms.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/PEM_bytes_read_bio.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/PEM_read.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/PEM_read_CMS.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/PEM_read_bio_PrivateKey.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/PEM_read_bio_ex.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/PEM_write_bio_CMS_stream.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/PEM_write_bio_PKCS7_stream.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/PKCS12_create.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/PKCS12_newpass.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/PKCS12_parse.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/PKCS5_PBKDF2_HMAC.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/PKCS7_decrypt.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/PKCS7_encrypt.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/PKCS7_sign.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/PKCS7_sign_add_signer.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/PKCS7_verify.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/RAND_DRBG_generate.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/RAND_DRBG_get0_master.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/RAND_DRBG_new.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/RAND_DRBG_reseed.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/RAND_DRBG_set_callbacks.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/RAND_DRBG_set_ex_data.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/RAND_add.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/RAND_bytes.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/RAND_cleanup.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/RAND_egd.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/RAND_load_file.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/RAND_set_rand_method.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/RC4_set_key.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/RIPEMD160_Init.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/RSA_blinding_on.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/RSA_check_key.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/RSA_generate_key.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/RSA_get0_key.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/RSA_meth_new.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/RSA_new.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/RSA_padding_add_PKCS1_type_1.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/RSA_print.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/RSA_private_encrypt.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/RSA_public_encrypt.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/RSA_set_method.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/RSA_sign.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/RSA_sign_ASN1_OCTET_STRING.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/RSA_size.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SCT_new.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SCT_print.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SCT_validate.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SHA256_Init.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SMIME_read_CMS.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SMIME_read_PKCS7.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SMIME_write_CMS.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SMIME_write_PKCS7.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CIPHER_get_name.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_COMP_add_compression_method.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CONF_CTX_new.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CONF_CTX_set1_prefix.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CONF_CTX_set_flags.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CONF_CTX_set_ssl_ctx.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CONF_cmd.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CONF_cmd_argv.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CTX_add1_chain_cert.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CTX_add_extra_chain_cert.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CTX_add_session.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CTX_config.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CTX_ctrl.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CTX_dane_enable.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CTX_flush_sessions.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CTX_free.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CTX_get0_param.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CTX_get_verify_mode.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CTX_has_client_custom_ext.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CTX_load_verify_locations.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CTX_new.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CTX_sess_number.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CTX_sess_set_cache_size.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CTX_sess_set_get_cb.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CTX_sessions.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CTX_set0_CA_list.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CTX_set1_curves.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CTX_set1_sigalgs.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CTX_set1_verify_cert_store.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CTX_set_alpn_select_cb.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CTX_set_cert_cb.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CTX_set_cert_store.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CTX_set_cert_verify_callback.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CTX_set_cipher_list.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CTX_set_client_cert_cb.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CTX_set_client_hello_cb.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CTX_set_ct_validation_callback.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CTX_set_ctlog_list_file.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CTX_set_default_passwd_cb.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CTX_set_ex_data.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CTX_set_generate_session_id.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CTX_set_info_callback.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CTX_set_keylog_callback.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CTX_set_max_cert_list.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CTX_set_min_proto_version.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CTX_set_mode.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CTX_set_msg_callback.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CTX_set_num_tickets.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CTX_set_options.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CTX_set_psk_client_callback.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CTX_set_quiet_shutdown.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CTX_set_read_ahead.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CTX_set_record_padding_callback.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CTX_set_security_level.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CTX_set_session_cache_mode.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CTX_set_session_id_context.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CTX_set_session_ticket_cb.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CTX_set_split_send_fragment.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CTX_set_ssl_version.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CTX_set_stateless_cookie_generate_cb.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CTX_set_timeout.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CTX_set_tlsext_servername_callback.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CTX_set_tlsext_status_cb.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CTX_set_tlsext_ticket_key_cb.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CTX_set_tlsext_use_srtp.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CTX_set_tmp_dh_callback.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CTX_set_verify.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CTX_use_certificate.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CTX_use_psk_identity_hint.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_CTX_use_serverinfo.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_SESSION_free.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_SESSION_get0_cipher.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_SESSION_get0_hostname.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_SESSION_get0_id_context.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_SESSION_get0_peer.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_SESSION_get_compress_id.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_SESSION_get_ex_data.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_SESSION_get_protocol_version.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_SESSION_get_time.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_SESSION_has_ticket.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_SESSION_is_resumable.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_SESSION_print.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_SESSION_set1_id.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_accept.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_alert_type_string.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_alloc_buffers.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_check_chain.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_clear.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_connect.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_do_handshake.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_export_keying_material.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_extension_supported.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_free.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_get0_peer_scts.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_get_SSL_CTX.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_get_all_async_fds.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_get_ciphers.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_get_client_random.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_get_current_cipher.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_get_default_timeout.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_get_error.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_get_extms_support.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_get_fd.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_get_peer_cert_chain.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_get_peer_certificate.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_get_peer_signature_nid.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_get_peer_tmp_key.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_get_psk_identity.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_get_rbio.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_get_session.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_get_shared_sigalgs.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_get_verify_result.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_get_version.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_in_init.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_key_update.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_library_init.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_load_client_CA_file.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_new.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_pending.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_read.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_read_early_data.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_rstate_string.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_session_reused.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_set1_host.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_set_bio.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_set_connect_state.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_set_fd.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_set_session.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_set_shutdown.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_set_verify_result.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_shutdown.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_state_string.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_want.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/SSL_write.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/UI_STRING.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/UI_UTIL_read_pw.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/UI_create_method.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/UI_new.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/X509V3_get_d2i.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/X509_ALGOR_dup.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/X509_CRL_get0_by_serial.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/X509_EXTENSION_set_object.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/X509_LOOKUP.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/X509_LOOKUP_hash_dir.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/X509_LOOKUP_meth_new.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/X509_NAME_ENTRY_get_object.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/X509_NAME_add_entry_by_txt.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/X509_NAME_get0_der.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/X509_NAME_get_index_by_NID.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/X509_NAME_print_ex.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/X509_PUBKEY_new.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/X509_SIG_get0.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/X509_STORE_CTX_get_error.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/X509_STORE_CTX_new.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/X509_STORE_CTX_set_verify_cb.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/X509_STORE_add_cert.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/X509_STORE_get0_param.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/X509_STORE_new.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/X509_STORE_set_verify_cb_func.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/X509_VERIFY_PARAM_set_flags.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/X509_check_ca.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/X509_check_host.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/X509_check_issued.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/X509_check_private_key.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/X509_check_purpose.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/X509_cmp.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/X509_cmp_time.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/X509_digest.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/X509_dup.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/X509_get0_notBefore.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/X509_get0_signature.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/X509_get0_uids.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/X509_get_extension_flags.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/X509_get_pubkey.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/X509_get_serialNumber.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/X509_get_subject_name.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/X509_get_version.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/X509_new.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/X509_sign.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/X509_verify_cert.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/X509v3_get_ext_by_NID.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/d2i_DHparams.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/d2i_PKCS8PrivateKey_bio.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/d2i_PrivateKey.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/d2i_SSL_SESSION.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/d2i_X509.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/i2d_CMS_bio_stream.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/i2d_PKCS7_bio_stream.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/i2d_re_X509_tbs.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man3/o2i_SCT_LIST.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man5/config.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man5/x509v3_config.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man7/Ed25519.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man7/RAND.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man7/RAND_DRBG.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man7/RSA-PSS.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man7/SM2.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man7/X25519.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man7/bio.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man7/crypto.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man7/ct.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man7/des_modes.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man7/evp.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man7/ossl_store-file.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man7/ossl_store.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man7/passphrase-encoding.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man7/proxy-certificates.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man7/scrypt.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man7/ssl.html create mode 100644 deps/openssl/mingw64/share/doc/openssl/html/man7/x509.html create mode 100644 deps/openssl/mingw64/share/man/man1/CA.pl.1 create mode 100644 deps/openssl/mingw64/share/man/man1/asn1parse.1 create mode 100644 deps/openssl/mingw64/share/man/man1/ca.1 create mode 100644 deps/openssl/mingw64/share/man/man1/ciphers.1 create mode 100644 deps/openssl/mingw64/share/man/man1/cms.1 create mode 100644 deps/openssl/mingw64/share/man/man1/crl.1 create mode 100644 deps/openssl/mingw64/share/man/man1/crl2pkcs7.1 create mode 100644 deps/openssl/mingw64/share/man/man1/dgst.1 create mode 100644 deps/openssl/mingw64/share/man/man1/dhparam.1 create mode 100644 deps/openssl/mingw64/share/man/man1/dsa.1 create mode 100644 deps/openssl/mingw64/share/man/man1/dsaparam.1 create mode 100644 deps/openssl/mingw64/share/man/man1/ec.1 create mode 100644 deps/openssl/mingw64/share/man/man1/ecparam.1 create mode 100644 deps/openssl/mingw64/share/man/man1/enc.1 create mode 100644 deps/openssl/mingw64/share/man/man1/engine.1 create mode 100644 deps/openssl/mingw64/share/man/man1/errstr.1 create mode 100644 deps/openssl/mingw64/share/man/man1/gendsa.1 create mode 100644 deps/openssl/mingw64/share/man/man1/genpkey.1 create mode 100644 deps/openssl/mingw64/share/man/man1/genrsa.1 create mode 100644 deps/openssl/mingw64/share/man/man1/list.1 create mode 100644 deps/openssl/mingw64/share/man/man1/nseq.1 create mode 100644 deps/openssl/mingw64/share/man/man1/ocsp.1 create mode 100644 deps/openssl/mingw64/share/man/man1/openssl.1 create mode 100644 deps/openssl/mingw64/share/man/man1/passwd.1 create mode 100644 deps/openssl/mingw64/share/man/man1/pkcs12.1 create mode 100644 deps/openssl/mingw64/share/man/man1/pkcs7.1 create mode 100644 deps/openssl/mingw64/share/man/man1/pkcs8.1 create mode 100644 deps/openssl/mingw64/share/man/man1/pkey.1 create mode 100644 deps/openssl/mingw64/share/man/man1/pkeyparam.1 create mode 100644 deps/openssl/mingw64/share/man/man1/pkeyutl.1 create mode 100644 deps/openssl/mingw64/share/man/man1/prime.1 create mode 100644 deps/openssl/mingw64/share/man/man1/rand.1 create mode 100644 deps/openssl/mingw64/share/man/man1/rehash.1 create mode 100644 deps/openssl/mingw64/share/man/man1/req.1 create mode 100644 deps/openssl/mingw64/share/man/man1/rsa.1 create mode 100644 deps/openssl/mingw64/share/man/man1/rsautl.1 create mode 100644 deps/openssl/mingw64/share/man/man1/s_client.1 create mode 100644 deps/openssl/mingw64/share/man/man1/s_server.1 create mode 100644 deps/openssl/mingw64/share/man/man1/s_time.1 create mode 100644 deps/openssl/mingw64/share/man/man1/sess_id.1 create mode 100644 deps/openssl/mingw64/share/man/man1/smime.1 create mode 100644 deps/openssl/mingw64/share/man/man1/speed.1 create mode 100644 deps/openssl/mingw64/share/man/man1/spkac.1 create mode 100644 deps/openssl/mingw64/share/man/man1/srp.1 create mode 100644 deps/openssl/mingw64/share/man/man1/storeutl.1 create mode 100644 deps/openssl/mingw64/share/man/man1/ts.1 create mode 100644 deps/openssl/mingw64/share/man/man1/tsget.1 create mode 100644 deps/openssl/mingw64/share/man/man1/verify.1 create mode 100644 deps/openssl/mingw64/share/man/man1/version.1 create mode 100644 deps/openssl/mingw64/share/man/man1/x509.1 create mode 100644 deps/openssl/mingw64/share/man/man3/ADMISSIONS.3 create mode 100644 deps/openssl/mingw64/share/man/man3/ASN1_INTEGER_get_int64.3 create mode 100644 deps/openssl/mingw64/share/man/man3/ASN1_ITEM_lookup.3 create mode 100644 deps/openssl/mingw64/share/man/man3/ASN1_OBJECT_new.3 create mode 100644 deps/openssl/mingw64/share/man/man3/ASN1_STRING_TABLE_add.3 create mode 100644 deps/openssl/mingw64/share/man/man3/ASN1_STRING_length.3 create mode 100644 deps/openssl/mingw64/share/man/man3/ASN1_STRING_new.3 create mode 100644 deps/openssl/mingw64/share/man/man3/ASN1_STRING_print_ex.3 create mode 100644 deps/openssl/mingw64/share/man/man3/ASN1_TIME_set.3 create mode 100644 deps/openssl/mingw64/share/man/man3/ASN1_TYPE_get.3 create mode 100644 deps/openssl/mingw64/share/man/man3/ASN1_generate_nconf.3 create mode 100644 deps/openssl/mingw64/share/man/man3/ASYNC_WAIT_CTX_new.3 create mode 100644 deps/openssl/mingw64/share/man/man3/ASYNC_start_job.3 create mode 100644 deps/openssl/mingw64/share/man/man3/BF_encrypt.3 create mode 100644 deps/openssl/mingw64/share/man/man3/BIO_ADDR.3 create mode 100644 deps/openssl/mingw64/share/man/man3/BIO_ADDRINFO.3 create mode 100644 deps/openssl/mingw64/share/man/man3/BIO_connect.3 create mode 100644 deps/openssl/mingw64/share/man/man3/BIO_ctrl.3 create mode 100644 deps/openssl/mingw64/share/man/man3/BIO_f_base64.3 create mode 100644 deps/openssl/mingw64/share/man/man3/BIO_f_buffer.3 create mode 100644 deps/openssl/mingw64/share/man/man3/BIO_f_cipher.3 create mode 100644 deps/openssl/mingw64/share/man/man3/BIO_f_md.3 create mode 100644 deps/openssl/mingw64/share/man/man3/BIO_f_null.3 create mode 100644 deps/openssl/mingw64/share/man/man3/BIO_f_ssl.3 create mode 100644 deps/openssl/mingw64/share/man/man3/BIO_find_type.3 create mode 100644 deps/openssl/mingw64/share/man/man3/BIO_get_data.3 create mode 100644 deps/openssl/mingw64/share/man/man3/BIO_get_ex_new_index.3 create mode 100644 deps/openssl/mingw64/share/man/man3/BIO_meth_new.3 create mode 100644 deps/openssl/mingw64/share/man/man3/BIO_new.3 create mode 100644 deps/openssl/mingw64/share/man/man3/BIO_new_CMS.3 create mode 100644 deps/openssl/mingw64/share/man/man3/BIO_parse_hostserv.3 create mode 100644 deps/openssl/mingw64/share/man/man3/BIO_printf.3 create mode 100644 deps/openssl/mingw64/share/man/man3/BIO_push.3 create mode 100644 deps/openssl/mingw64/share/man/man3/BIO_read.3 create mode 100644 deps/openssl/mingw64/share/man/man3/BIO_s_accept.3 create mode 100644 deps/openssl/mingw64/share/man/man3/BIO_s_bio.3 create mode 100644 deps/openssl/mingw64/share/man/man3/BIO_s_connect.3 create mode 100644 deps/openssl/mingw64/share/man/man3/BIO_s_fd.3 create mode 100644 deps/openssl/mingw64/share/man/man3/BIO_s_file.3 create mode 100644 deps/openssl/mingw64/share/man/man3/BIO_s_mem.3 create mode 100644 deps/openssl/mingw64/share/man/man3/BIO_s_null.3 create mode 100644 deps/openssl/mingw64/share/man/man3/BIO_s_socket.3 create mode 100644 deps/openssl/mingw64/share/man/man3/BIO_set_callback.3 create mode 100644 deps/openssl/mingw64/share/man/man3/BIO_should_retry.3 create mode 100644 deps/openssl/mingw64/share/man/man3/BN_BLINDING_new.3 create mode 100644 deps/openssl/mingw64/share/man/man3/BN_CTX_new.3 create mode 100644 deps/openssl/mingw64/share/man/man3/BN_CTX_start.3 create mode 100644 deps/openssl/mingw64/share/man/man3/BN_add.3 create mode 100644 deps/openssl/mingw64/share/man/man3/BN_add_word.3 create mode 100644 deps/openssl/mingw64/share/man/man3/BN_bn2bin.3 create mode 100644 deps/openssl/mingw64/share/man/man3/BN_cmp.3 create mode 100644 deps/openssl/mingw64/share/man/man3/BN_copy.3 create mode 100644 deps/openssl/mingw64/share/man/man3/BN_generate_prime.3 create mode 100644 deps/openssl/mingw64/share/man/man3/BN_mod_inverse.3 create mode 100644 deps/openssl/mingw64/share/man/man3/BN_mod_mul_montgomery.3 create mode 100644 deps/openssl/mingw64/share/man/man3/BN_mod_mul_reciprocal.3 create mode 100644 deps/openssl/mingw64/share/man/man3/BN_new.3 create mode 100644 deps/openssl/mingw64/share/man/man3/BN_num_bytes.3 create mode 100644 deps/openssl/mingw64/share/man/man3/BN_rand.3 create mode 100644 deps/openssl/mingw64/share/man/man3/BN_security_bits.3 create mode 100644 deps/openssl/mingw64/share/man/man3/BN_set_bit.3 create mode 100644 deps/openssl/mingw64/share/man/man3/BN_swap.3 create mode 100644 deps/openssl/mingw64/share/man/man3/BN_zero.3 create mode 100644 deps/openssl/mingw64/share/man/man3/BUF_MEM_new.3 create mode 100644 deps/openssl/mingw64/share/man/man3/CMS_add0_cert.3 create mode 100644 deps/openssl/mingw64/share/man/man3/CMS_add1_recipient_cert.3 create mode 100644 deps/openssl/mingw64/share/man/man3/CMS_add1_signer.3 create mode 100644 deps/openssl/mingw64/share/man/man3/CMS_compress.3 create mode 100644 deps/openssl/mingw64/share/man/man3/CMS_decrypt.3 create mode 100644 deps/openssl/mingw64/share/man/man3/CMS_encrypt.3 create mode 100644 deps/openssl/mingw64/share/man/man3/CMS_final.3 create mode 100644 deps/openssl/mingw64/share/man/man3/CMS_get0_RecipientInfos.3 create mode 100644 deps/openssl/mingw64/share/man/man3/CMS_get0_SignerInfos.3 create mode 100644 deps/openssl/mingw64/share/man/man3/CMS_get0_type.3 create mode 100644 deps/openssl/mingw64/share/man/man3/CMS_get1_ReceiptRequest.3 create mode 100644 deps/openssl/mingw64/share/man/man3/CMS_sign.3 create mode 100644 deps/openssl/mingw64/share/man/man3/CMS_sign_receipt.3 create mode 100644 deps/openssl/mingw64/share/man/man3/CMS_uncompress.3 create mode 100644 deps/openssl/mingw64/share/man/man3/CMS_verify.3 create mode 100644 deps/openssl/mingw64/share/man/man3/CMS_verify_receipt.3 create mode 100644 deps/openssl/mingw64/share/man/man3/CONF_modules_free.3 create mode 100644 deps/openssl/mingw64/share/man/man3/CONF_modules_load_file.3 create mode 100644 deps/openssl/mingw64/share/man/man3/CRYPTO_THREAD_run_once.3 create mode 100644 deps/openssl/mingw64/share/man/man3/CRYPTO_get_ex_new_index.3 create mode 100644 deps/openssl/mingw64/share/man/man3/CRYPTO_memcmp.3 create mode 100644 deps/openssl/mingw64/share/man/man3/CTLOG_STORE_get0_log_by_id.3 create mode 100644 deps/openssl/mingw64/share/man/man3/CTLOG_STORE_new.3 create mode 100644 deps/openssl/mingw64/share/man/man3/CTLOG_new.3 create mode 100644 deps/openssl/mingw64/share/man/man3/CT_POLICY_EVAL_CTX_new.3 create mode 100644 deps/openssl/mingw64/share/man/man3/DEFINE_STACK_OF.3 create mode 100644 deps/openssl/mingw64/share/man/man3/DES_random_key.3 create mode 100644 deps/openssl/mingw64/share/man/man3/DH_generate_key.3 create mode 100644 deps/openssl/mingw64/share/man/man3/DH_generate_parameters.3 create mode 100644 deps/openssl/mingw64/share/man/man3/DH_get0_pqg.3 create mode 100644 deps/openssl/mingw64/share/man/man3/DH_get_1024_160.3 create mode 100644 deps/openssl/mingw64/share/man/man3/DH_meth_new.3 create mode 100644 deps/openssl/mingw64/share/man/man3/DH_new.3 create mode 100644 deps/openssl/mingw64/share/man/man3/DH_new_by_nid.3 create mode 100644 deps/openssl/mingw64/share/man/man3/DH_set_method.3 create mode 100644 deps/openssl/mingw64/share/man/man3/DH_size.3 create mode 100644 deps/openssl/mingw64/share/man/man3/DSA_SIG_new.3 create mode 100644 deps/openssl/mingw64/share/man/man3/DSA_do_sign.3 create mode 100644 deps/openssl/mingw64/share/man/man3/DSA_dup_DH.3 create mode 100644 deps/openssl/mingw64/share/man/man3/DSA_generate_key.3 create mode 100644 deps/openssl/mingw64/share/man/man3/DSA_generate_parameters.3 create mode 100644 deps/openssl/mingw64/share/man/man3/DSA_get0_pqg.3 create mode 100644 deps/openssl/mingw64/share/man/man3/DSA_meth_new.3 create mode 100644 deps/openssl/mingw64/share/man/man3/DSA_new.3 create mode 100644 deps/openssl/mingw64/share/man/man3/DSA_set_method.3 create mode 100644 deps/openssl/mingw64/share/man/man3/DSA_sign.3 create mode 100644 deps/openssl/mingw64/share/man/man3/DSA_size.3 create mode 100644 deps/openssl/mingw64/share/man/man3/DTLS_get_data_mtu.3 create mode 100644 deps/openssl/mingw64/share/man/man3/DTLS_set_timer_cb.3 create mode 100644 deps/openssl/mingw64/share/man/man3/DTLSv1_listen.3 create mode 100644 deps/openssl/mingw64/share/man/man3/ECDSA_SIG_new.3 create mode 100644 deps/openssl/mingw64/share/man/man3/ECPKParameters_print.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EC_GFp_simple_method.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EC_GROUP_copy.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EC_GROUP_new.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EC_KEY_get_enc_flags.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EC_KEY_new.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EC_POINT_add.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EC_POINT_new.3 create mode 100644 deps/openssl/mingw64/share/man/man3/ENGINE_add.3 create mode 100644 deps/openssl/mingw64/share/man/man3/ERR_GET_LIB.3 create mode 100644 deps/openssl/mingw64/share/man/man3/ERR_clear_error.3 create mode 100644 deps/openssl/mingw64/share/man/man3/ERR_error_string.3 create mode 100644 deps/openssl/mingw64/share/man/man3/ERR_get_error.3 create mode 100644 deps/openssl/mingw64/share/man/man3/ERR_load_crypto_strings.3 create mode 100644 deps/openssl/mingw64/share/man/man3/ERR_load_strings.3 create mode 100644 deps/openssl/mingw64/share/man/man3/ERR_print_errors.3 create mode 100644 deps/openssl/mingw64/share/man/man3/ERR_put_error.3 create mode 100644 deps/openssl/mingw64/share/man/man3/ERR_remove_state.3 create mode 100644 deps/openssl/mingw64/share/man/man3/ERR_set_mark.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EVP_BytesToKey.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EVP_CIPHER_CTX_get_cipher_data.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EVP_CIPHER_meth_new.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EVP_DigestInit.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EVP_DigestSignInit.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EVP_DigestVerifyInit.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EVP_EncodeInit.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EVP_EncryptInit.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EVP_MD_meth_new.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EVP_OpenInit.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EVP_PKEY_ASN1_METHOD.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EVP_PKEY_CTX_ctrl.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EVP_PKEY_CTX_new.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EVP_PKEY_CTX_set1_pbe_pass.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EVP_PKEY_CTX_set_hkdf_md.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EVP_PKEY_CTX_set_rsa_pss_keygen_md.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EVP_PKEY_CTX_set_scrypt_N.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EVP_PKEY_CTX_set_tls1_prf_md.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EVP_PKEY_asn1_get_count.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EVP_PKEY_cmp.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EVP_PKEY_decrypt.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EVP_PKEY_derive.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EVP_PKEY_encrypt.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EVP_PKEY_get_default_digest_nid.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EVP_PKEY_keygen.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EVP_PKEY_meth_get_count.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EVP_PKEY_meth_new.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EVP_PKEY_new.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EVP_PKEY_print_private.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EVP_PKEY_set1_RSA.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EVP_PKEY_sign.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EVP_PKEY_size.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EVP_PKEY_verify.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EVP_PKEY_verify_recover.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EVP_SealInit.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EVP_SignInit.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EVP_VerifyInit.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EVP_aes.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EVP_aria.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EVP_bf_cbc.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EVP_blake2b512.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EVP_camellia.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EVP_cast5_cbc.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EVP_chacha20.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EVP_des.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EVP_desx_cbc.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EVP_idea_cbc.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EVP_md2.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EVP_md4.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EVP_md5.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EVP_mdc2.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EVP_rc2_cbc.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EVP_rc4.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EVP_rc5_32_12_16_cbc.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EVP_ripemd160.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EVP_seed_cbc.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EVP_sha1.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EVP_sha224.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EVP_sha3_224.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EVP_sm3.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EVP_sm4_cbc.3 create mode 100644 deps/openssl/mingw64/share/man/man3/EVP_whirlpool.3 create mode 100644 deps/openssl/mingw64/share/man/man3/HMAC.3 create mode 100644 deps/openssl/mingw64/share/man/man3/MD5.3 create mode 100644 deps/openssl/mingw64/share/man/man3/MDC2_Init.3 create mode 100644 deps/openssl/mingw64/share/man/man3/OBJ_nid2obj.3 create mode 100644 deps/openssl/mingw64/share/man/man3/OCSP_REQUEST_new.3 create mode 100644 deps/openssl/mingw64/share/man/man3/OCSP_cert_to_id.3 create mode 100644 deps/openssl/mingw64/share/man/man3/OCSP_request_add1_nonce.3 create mode 100644 deps/openssl/mingw64/share/man/man3/OCSP_resp_find_status.3 create mode 100644 deps/openssl/mingw64/share/man/man3/OCSP_response_status.3 create mode 100644 deps/openssl/mingw64/share/man/man3/OCSP_sendreq_new.3 create mode 100644 deps/openssl/mingw64/share/man/man3/OPENSSL_Applink.3 create mode 100644 deps/openssl/mingw64/share/man/man3/OPENSSL_LH_COMPFUNC.3 create mode 100644 deps/openssl/mingw64/share/man/man3/OPENSSL_LH_stats.3 create mode 100644 deps/openssl/mingw64/share/man/man3/OPENSSL_VERSION_NUMBER.3 create mode 100644 deps/openssl/mingw64/share/man/man3/OPENSSL_config.3 create mode 100644 deps/openssl/mingw64/share/man/man3/OPENSSL_fork_prepare.3 create mode 100644 deps/openssl/mingw64/share/man/man3/OPENSSL_ia32cap.3 create mode 100644 deps/openssl/mingw64/share/man/man3/OPENSSL_init_crypto.3 create mode 100644 deps/openssl/mingw64/share/man/man3/OPENSSL_init_ssl.3 create mode 100644 deps/openssl/mingw64/share/man/man3/OPENSSL_instrument_bus.3 create mode 100644 deps/openssl/mingw64/share/man/man3/OPENSSL_load_builtin_modules.3 create mode 100644 deps/openssl/mingw64/share/man/man3/OPENSSL_malloc.3 create mode 100644 deps/openssl/mingw64/share/man/man3/OPENSSL_secure_malloc.3 create mode 100644 deps/openssl/mingw64/share/man/man3/OSSL_STORE_INFO.3 create mode 100644 deps/openssl/mingw64/share/man/man3/OSSL_STORE_LOADER.3 create mode 100644 deps/openssl/mingw64/share/man/man3/OSSL_STORE_SEARCH.3 create mode 100644 deps/openssl/mingw64/share/man/man3/OSSL_STORE_expect.3 create mode 100644 deps/openssl/mingw64/share/man/man3/OSSL_STORE_open.3 create mode 100644 deps/openssl/mingw64/share/man/man3/OpenSSL_add_all_algorithms.3 create mode 100644 deps/openssl/mingw64/share/man/man3/PEM_bytes_read_bio.3 create mode 100644 deps/openssl/mingw64/share/man/man3/PEM_read.3 create mode 100644 deps/openssl/mingw64/share/man/man3/PEM_read_CMS.3 create mode 100644 deps/openssl/mingw64/share/man/man3/PEM_read_bio_PrivateKey.3 create mode 100644 deps/openssl/mingw64/share/man/man3/PEM_read_bio_ex.3 create mode 100644 deps/openssl/mingw64/share/man/man3/PEM_write_bio_CMS_stream.3 create mode 100644 deps/openssl/mingw64/share/man/man3/PEM_write_bio_PKCS7_stream.3 create mode 100644 deps/openssl/mingw64/share/man/man3/PKCS12_create.3 create mode 100644 deps/openssl/mingw64/share/man/man3/PKCS12_newpass.3 create mode 100644 deps/openssl/mingw64/share/man/man3/PKCS12_parse.3 create mode 100644 deps/openssl/mingw64/share/man/man3/PKCS5_PBKDF2_HMAC.3 create mode 100644 deps/openssl/mingw64/share/man/man3/PKCS7_decrypt.3 create mode 100644 deps/openssl/mingw64/share/man/man3/PKCS7_encrypt.3 create mode 100644 deps/openssl/mingw64/share/man/man3/PKCS7_sign.3 create mode 100644 deps/openssl/mingw64/share/man/man3/PKCS7_sign_add_signer.3 create mode 100644 deps/openssl/mingw64/share/man/man3/PKCS7_verify.3 create mode 100644 deps/openssl/mingw64/share/man/man3/RAND_DRBG_generate.3 create mode 100644 deps/openssl/mingw64/share/man/man3/RAND_DRBG_get0_master.3 create mode 100644 deps/openssl/mingw64/share/man/man3/RAND_DRBG_new.3 create mode 100644 deps/openssl/mingw64/share/man/man3/RAND_DRBG_reseed.3 create mode 100644 deps/openssl/mingw64/share/man/man3/RAND_DRBG_set_callbacks.3 create mode 100644 deps/openssl/mingw64/share/man/man3/RAND_DRBG_set_ex_data.3 create mode 100644 deps/openssl/mingw64/share/man/man3/RAND_add.3 create mode 100644 deps/openssl/mingw64/share/man/man3/RAND_bytes.3 create mode 100644 deps/openssl/mingw64/share/man/man3/RAND_cleanup.3 create mode 100644 deps/openssl/mingw64/share/man/man3/RAND_egd.3 create mode 100644 deps/openssl/mingw64/share/man/man3/RAND_load_file.3 create mode 100644 deps/openssl/mingw64/share/man/man3/RAND_set_rand_method.3 create mode 100644 deps/openssl/mingw64/share/man/man3/RC4_set_key.3 create mode 100644 deps/openssl/mingw64/share/man/man3/RIPEMD160_Init.3 create mode 100644 deps/openssl/mingw64/share/man/man3/RSA_blinding_on.3 create mode 100644 deps/openssl/mingw64/share/man/man3/RSA_check_key.3 create mode 100644 deps/openssl/mingw64/share/man/man3/RSA_generate_key.3 create mode 100644 deps/openssl/mingw64/share/man/man3/RSA_get0_key.3 create mode 100644 deps/openssl/mingw64/share/man/man3/RSA_meth_new.3 create mode 100644 deps/openssl/mingw64/share/man/man3/RSA_new.3 create mode 100644 deps/openssl/mingw64/share/man/man3/RSA_padding_add_PKCS1_type_1.3 create mode 100644 deps/openssl/mingw64/share/man/man3/RSA_print.3 create mode 100644 deps/openssl/mingw64/share/man/man3/RSA_private_encrypt.3 create mode 100644 deps/openssl/mingw64/share/man/man3/RSA_public_encrypt.3 create mode 100644 deps/openssl/mingw64/share/man/man3/RSA_set_method.3 create mode 100644 deps/openssl/mingw64/share/man/man3/RSA_sign.3 create mode 100644 deps/openssl/mingw64/share/man/man3/RSA_sign_ASN1_OCTET_STRING.3 create mode 100644 deps/openssl/mingw64/share/man/man3/RSA_size.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SCT_new.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SCT_print.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SCT_validate.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SHA256_Init.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SMIME_read_CMS.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SMIME_read_PKCS7.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SMIME_write_CMS.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SMIME_write_PKCS7.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CIPHER_get_name.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_COMP_add_compression_method.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CONF_CTX_new.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CONF_CTX_set1_prefix.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CONF_CTX_set_flags.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CONF_CTX_set_ssl_ctx.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CONF_cmd.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CONF_cmd_argv.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CTX_add1_chain_cert.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CTX_add_extra_chain_cert.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CTX_add_session.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CTX_config.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CTX_ctrl.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CTX_dane_enable.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CTX_flush_sessions.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CTX_free.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CTX_get0_param.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CTX_get_verify_mode.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CTX_has_client_custom_ext.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CTX_load_verify_locations.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CTX_new.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CTX_sess_number.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CTX_sess_set_cache_size.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CTX_sess_set_get_cb.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CTX_sessions.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CTX_set0_CA_list.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CTX_set1_curves.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CTX_set1_sigalgs.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CTX_set1_verify_cert_store.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CTX_set_alpn_select_cb.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CTX_set_cert_cb.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CTX_set_cert_store.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CTX_set_cert_verify_callback.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CTX_set_cipher_list.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CTX_set_client_cert_cb.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CTX_set_client_hello_cb.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CTX_set_ct_validation_callback.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CTX_set_ctlog_list_file.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CTX_set_default_passwd_cb.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CTX_set_ex_data.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CTX_set_generate_session_id.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CTX_set_info_callback.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CTX_set_keylog_callback.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CTX_set_max_cert_list.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CTX_set_min_proto_version.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CTX_set_mode.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CTX_set_msg_callback.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CTX_set_num_tickets.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CTX_set_options.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CTX_set_psk_client_callback.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CTX_set_quiet_shutdown.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CTX_set_read_ahead.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CTX_set_record_padding_callback.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CTX_set_security_level.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CTX_set_session_cache_mode.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CTX_set_session_id_context.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CTX_set_session_ticket_cb.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CTX_set_split_send_fragment.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CTX_set_ssl_version.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CTX_set_stateless_cookie_generate_cb.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CTX_set_timeout.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CTX_set_tlsext_servername_callback.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CTX_set_tlsext_status_cb.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CTX_set_tlsext_ticket_key_cb.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CTX_set_tlsext_use_srtp.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CTX_set_tmp_dh_callback.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CTX_set_verify.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CTX_use_certificate.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CTX_use_psk_identity_hint.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_CTX_use_serverinfo.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_SESSION_free.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_SESSION_get0_cipher.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_SESSION_get0_hostname.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_SESSION_get0_id_context.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_SESSION_get0_peer.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_SESSION_get_compress_id.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_SESSION_get_ex_data.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_SESSION_get_protocol_version.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_SESSION_get_time.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_SESSION_has_ticket.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_SESSION_is_resumable.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_SESSION_print.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_SESSION_set1_id.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_accept.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_alert_type_string.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_alloc_buffers.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_check_chain.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_clear.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_connect.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_do_handshake.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_export_keying_material.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_extension_supported.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_free.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_get0_peer_scts.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_get_SSL_CTX.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_get_all_async_fds.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_get_ciphers.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_get_client_random.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_get_current_cipher.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_get_default_timeout.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_get_error.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_get_extms_support.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_get_fd.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_get_peer_cert_chain.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_get_peer_certificate.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_get_peer_signature_nid.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_get_peer_tmp_key.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_get_psk_identity.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_get_rbio.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_get_session.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_get_shared_sigalgs.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_get_verify_result.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_get_version.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_in_init.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_key_update.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_library_init.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_load_client_CA_file.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_new.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_pending.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_read.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_read_early_data.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_rstate_string.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_session_reused.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_set1_host.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_set_bio.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_set_connect_state.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_set_fd.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_set_session.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_set_shutdown.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_set_verify_result.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_shutdown.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_state_string.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_want.3 create mode 100644 deps/openssl/mingw64/share/man/man3/SSL_write.3 create mode 100644 deps/openssl/mingw64/share/man/man3/UI_STRING.3 create mode 100644 deps/openssl/mingw64/share/man/man3/UI_UTIL_read_pw.3 create mode 100644 deps/openssl/mingw64/share/man/man3/UI_create_method.3 create mode 100644 deps/openssl/mingw64/share/man/man3/UI_new.3 create mode 100644 deps/openssl/mingw64/share/man/man3/X509V3_get_d2i.3 create mode 100644 deps/openssl/mingw64/share/man/man3/X509_ALGOR_dup.3 create mode 100644 deps/openssl/mingw64/share/man/man3/X509_CRL_get0_by_serial.3 create mode 100644 deps/openssl/mingw64/share/man/man3/X509_EXTENSION_set_object.3 create mode 100644 deps/openssl/mingw64/share/man/man3/X509_LOOKUP.3 create mode 100644 deps/openssl/mingw64/share/man/man3/X509_LOOKUP_hash_dir.3 create mode 100644 deps/openssl/mingw64/share/man/man3/X509_LOOKUP_meth_new.3 create mode 100644 deps/openssl/mingw64/share/man/man3/X509_NAME_ENTRY_get_object.3 create mode 100644 deps/openssl/mingw64/share/man/man3/X509_NAME_add_entry_by_txt.3 create mode 100644 deps/openssl/mingw64/share/man/man3/X509_NAME_get0_der.3 create mode 100644 deps/openssl/mingw64/share/man/man3/X509_NAME_get_index_by_NID.3 create mode 100644 deps/openssl/mingw64/share/man/man3/X509_NAME_print_ex.3 create mode 100644 deps/openssl/mingw64/share/man/man3/X509_PUBKEY_new.3 create mode 100644 deps/openssl/mingw64/share/man/man3/X509_SIG_get0.3 create mode 100644 deps/openssl/mingw64/share/man/man3/X509_STORE_CTX_get_error.3 create mode 100644 deps/openssl/mingw64/share/man/man3/X509_STORE_CTX_new.3 create mode 100644 deps/openssl/mingw64/share/man/man3/X509_STORE_CTX_set_verify_cb.3 create mode 100644 deps/openssl/mingw64/share/man/man3/X509_STORE_add_cert.3 create mode 100644 deps/openssl/mingw64/share/man/man3/X509_STORE_get0_param.3 create mode 100644 deps/openssl/mingw64/share/man/man3/X509_STORE_new.3 create mode 100644 deps/openssl/mingw64/share/man/man3/X509_STORE_set_verify_cb_func.3 create mode 100644 deps/openssl/mingw64/share/man/man3/X509_VERIFY_PARAM_set_flags.3 create mode 100644 deps/openssl/mingw64/share/man/man3/X509_check_ca.3 create mode 100644 deps/openssl/mingw64/share/man/man3/X509_check_host.3 create mode 100644 deps/openssl/mingw64/share/man/man3/X509_check_issued.3 create mode 100644 deps/openssl/mingw64/share/man/man3/X509_check_private_key.3 create mode 100644 deps/openssl/mingw64/share/man/man3/X509_check_purpose.3 create mode 100644 deps/openssl/mingw64/share/man/man3/X509_cmp.3 create mode 100644 deps/openssl/mingw64/share/man/man3/X509_cmp_time.3 create mode 100644 deps/openssl/mingw64/share/man/man3/X509_digest.3 create mode 100644 deps/openssl/mingw64/share/man/man3/X509_dup.3 create mode 100644 deps/openssl/mingw64/share/man/man3/X509_get0_notBefore.3 create mode 100644 deps/openssl/mingw64/share/man/man3/X509_get0_signature.3 create mode 100644 deps/openssl/mingw64/share/man/man3/X509_get0_uids.3 create mode 100644 deps/openssl/mingw64/share/man/man3/X509_get_extension_flags.3 create mode 100644 deps/openssl/mingw64/share/man/man3/X509_get_pubkey.3 create mode 100644 deps/openssl/mingw64/share/man/man3/X509_get_serialNumber.3 create mode 100644 deps/openssl/mingw64/share/man/man3/X509_get_subject_name.3 create mode 100644 deps/openssl/mingw64/share/man/man3/X509_get_version.3 create mode 100644 deps/openssl/mingw64/share/man/man3/X509_new.3 create mode 100644 deps/openssl/mingw64/share/man/man3/X509_sign.3 create mode 100644 deps/openssl/mingw64/share/man/man3/X509_verify_cert.3 create mode 100644 deps/openssl/mingw64/share/man/man3/X509v3_get_ext_by_NID.3 create mode 100644 deps/openssl/mingw64/share/man/man3/d2i_DHparams.3 create mode 100644 deps/openssl/mingw64/share/man/man3/d2i_PKCS8PrivateKey_bio.3 create mode 100644 deps/openssl/mingw64/share/man/man3/d2i_PrivateKey.3 create mode 100644 deps/openssl/mingw64/share/man/man3/d2i_SSL_SESSION.3 create mode 100644 deps/openssl/mingw64/share/man/man3/d2i_X509.3 create mode 100644 deps/openssl/mingw64/share/man/man3/i2d_CMS_bio_stream.3 create mode 100644 deps/openssl/mingw64/share/man/man3/i2d_PKCS7_bio_stream.3 create mode 100644 deps/openssl/mingw64/share/man/man3/i2d_re_X509_tbs.3 create mode 100644 deps/openssl/mingw64/share/man/man3/o2i_SCT_LIST.3 create mode 100644 deps/openssl/mingw64/share/man/man5/config.5 create mode 100644 deps/openssl/mingw64/share/man/man5/x509v3_config.5 create mode 100644 deps/openssl/mingw64/share/man/man7/Ed25519.7 create mode 100644 deps/openssl/mingw64/share/man/man7/RAND.7 create mode 100644 deps/openssl/mingw64/share/man/man7/RAND_DRBG.7 create mode 100644 deps/openssl/mingw64/share/man/man7/RSA-PSS.7 create mode 100644 deps/openssl/mingw64/share/man/man7/SM2.7 create mode 100644 deps/openssl/mingw64/share/man/man7/X25519.7 create mode 100644 deps/openssl/mingw64/share/man/man7/bio.7 create mode 100644 deps/openssl/mingw64/share/man/man7/crypto.7 create mode 100644 deps/openssl/mingw64/share/man/man7/ct.7 create mode 100644 deps/openssl/mingw64/share/man/man7/des_modes.7 create mode 100644 deps/openssl/mingw64/share/man/man7/evp.7 create mode 100644 deps/openssl/mingw64/share/man/man7/ossl_store-file.7 create mode 100644 deps/openssl/mingw64/share/man/man7/ossl_store.7 create mode 100644 deps/openssl/mingw64/share/man/man7/passphrase-encoding.7 create mode 100644 deps/openssl/mingw64/share/man/man7/proxy-certificates.7 create mode 100644 deps/openssl/mingw64/share/man/man7/scrypt.7 create mode 100644 deps/openssl/mingw64/share/man/man7/ssl.7 create mode 100644 deps/openssl/mingw64/share/man/man7/x509.7 diff --git a/Makefile b/Makefile index d49f4201..48747e87 100644 --- a/Makefile +++ b/Makefile @@ -21,26 +21,32 @@ CFLAGS += \ LDFLAGS += -Wl,-gc-sections NDK_PATH := /usr/lib/android-sdk/ndk-bundle -NDK_SSL_PATH := deps/openssl_android NDK_API_VERSION := 30 NDK_TARGET_TRIPLE := aarch64-linux-android debug windebug androiddebug: CFLAGS += -Og debug release androidrelease: LDFLAGS += -rdynamic release winrelease: CFLAGS += -DNDEBUG -O3 -windebug winrelease: CC = i686-w64-mingw32-gcc-win32 +windebug winrelease: CC = x86_64-w64-mingw32-gcc-win32 windebug winrelease: AS = $(CC) -windebug winrelease: CFLAGS += -D_WIN32_WINNT=0x0A00 -DWINVER=0x0A00 -DNTDDI_VERSION=NTDDI_WIN10 -windebug winrelease: LDFLAGS += -static +windebug winrelease: CFLAGS += \ + -D_WIN32_WINNT=0x0A00 \ + -DWINVER=0x0A00 \ + -DNTDDI_VERSION=NTDDI_WIN10 \ + -Ideps/openssl/mingw64/include +windebug winrelease: LDFLAGS += \ + -static \ + -lm \ + -Ldeps/openssl/mingw64/lib androiddebug androidrelease: CC = $(NDK_PATH)/toolchains/llvm/prebuilt/linux-x86_64/bin/clang androiddebug androidrelease: AS = $(CC) androiddebug androidrelease: CFLAGS += \ -target $(NDK_TARGET_TRIPLE)$(NDK_API_VERSION) \ - -I$(NDK_SSL_PATH)/arm64-v8a/usr/local/include \ + -Ideps/openssl/android/arm64-v8a/usr/local/include \ -Wno-unknown-warning-option androiddebug androidrelease: LDFLAGS += \ -target $(NDK_TARGET_TRIPLE)$(NDK_API_VERSION) \ - -L$(NDK_SSL_PATH)/arm64-v8a/usr/local/lib + -Ldeps/openssl/android/arm64-v8a/usr/local/lib ifeq ($(UNAME_M),x86_64) debug: CFLAGS += -fsanitize=address -fsanitize=undefined -fno-common @@ -300,7 +306,11 @@ windebug winrelease: LDFLAGS += \ -lws2_32 \ -lkernel32 \ -liphlpapi \ - -luserenv + -luserenv \ + -lssl \ + -lcrypto \ + -lws2_32 \ + -lcrypt32 androiddebug androidrelease: LDFLAGS += \ -ldl \ -lssl \ diff --git a/deps/openssl/android/arm64-v8a/usr/local/bin/c_rehash b/deps/openssl/android/arm64-v8a/usr/local/bin/c_rehash new file mode 100755 index 00000000..f226d613 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/bin/c_rehash @@ -0,0 +1,232 @@ +#!/usr/bin/env perl + +# WARNING: do not edit! +# Generated by Makefile from tools/c_rehash.in +# Copyright 1999-2018 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 +# in the file LICENSE in the source distribution or at +# https://www.openssl.org/source/license.html + +# Perl c_rehash script, scan all files in a directory +# and add symbolic links to their hash values. + +my $dir = ""; +my $prefix = ""; + +my $errorcount = 0; +my $openssl = $ENV{OPENSSL} || "openssl"; +my $pwd; +my $x509hash = "-subject_hash"; +my $crlhash = "-hash"; +my $verbose = 0; +my $symlink_exists=eval {symlink("",""); 1}; +my $removelinks = 1; + +## Parse flags. +while ( $ARGV[0] =~ /^-/ ) { + my $flag = shift @ARGV; + last if ( $flag eq '--'); + if ( $flag eq '-old') { + $x509hash = "-subject_hash_old"; + $crlhash = "-hash_old"; + } elsif ( $flag eq '-h' || $flag eq '-help' ) { + help(); + } elsif ( $flag eq '-n' ) { + $removelinks = 0; + } elsif ( $flag eq '-v' ) { + $verbose++; + } + else { + print STDERR "Usage error; try -h.\n"; + exit 1; + } +} + +sub help { + print "Usage: c_rehash [-old] [-h] [-help] [-v] [dirs...]\n"; + print " -old use old-style digest\n"; + print " -h or -help print this help text\n"; + print " -v print files removed and linked\n"; + exit 0; +} + +eval "require Cwd"; +if (defined(&Cwd::getcwd)) { + $pwd=Cwd::getcwd(); +} else { + $pwd=`pwd`; + chomp($pwd); +} + +# DOS/Win32 or Unix delimiter? Prefix our installdir, then search. +my $path_delim = ($pwd =~ /^[a-z]\:/i) ? ';' : ':'; +$ENV{PATH} = "$prefix/bin" . ($ENV{PATH} ? $path_delim . $ENV{PATH} : ""); + +if (! -x $openssl) { + my $found = 0; + foreach (split /$path_delim/, $ENV{PATH}) { + if (-x "$_/$openssl") { + $found = 1; + $openssl = "$_/$openssl"; + last; + } + } + if ($found == 0) { + print STDERR "c_rehash: rehashing skipped ('openssl' program not available)\n"; + exit 0; + } +} + +if (@ARGV) { + @dirlist = @ARGV; +} elsif ($ENV{SSL_CERT_DIR}) { + @dirlist = split /$path_delim/, $ENV{SSL_CERT_DIR}; +} else { + $dirlist[0] = "$dir/certs"; +} + +if (-d $dirlist[0]) { + chdir $dirlist[0]; + $openssl="$pwd/$openssl" if (!-x $openssl); + chdir $pwd; +} + +foreach (@dirlist) { + if (-d $_ ) { + if ( -w $_) { + hash_dir($_); + } else { + print "Skipping $_, can't write\n"; + $errorcount++; + } + } +} +exit($errorcount); + +sub hash_dir { + my %hashlist; + print "Doing $_[0]\n"; + chdir $_[0]; + opendir(DIR, "."); + my @flist = sort readdir(DIR); + closedir DIR; + if ( $removelinks ) { + # Delete any existing symbolic links + foreach (grep {/^[\da-f]+\.r{0,1}\d+$/} @flist) { + if (-l $_) { + print "unlink $_" if $verbose; + unlink $_ || warn "Can't unlink $_, $!\n"; + } + } + } + FILE: foreach $fname (grep {/\.(pem)|(crt)|(cer)|(crl)$/} @flist) { + # Check to see if certificates and/or CRLs present. + my ($cert, $crl) = check_file($fname); + if (!$cert && !$crl) { + print STDERR "WARNING: $fname does not contain a certificate or CRL: skipping\n"; + next; + } + link_hash_cert($fname) if ($cert); + link_hash_crl($fname) if ($crl); + } +} + +sub check_file { + my ($is_cert, $is_crl) = (0,0); + my $fname = $_[0]; + open IN, $fname; + while() { + if (/^-----BEGIN (.*)-----/) { + my $hdr = $1; + if ($hdr =~ /^(X509 |TRUSTED |)CERTIFICATE$/) { + $is_cert = 1; + last if ($is_crl); + } elsif ($hdr eq "X509 CRL") { + $is_crl = 1; + last if ($is_cert); + } + } + } + close IN; + return ($is_cert, $is_crl); +} + + +# Link a certificate to its subject name hash value, each hash is of +# the form . where n is an integer. If the hash value already exists +# then we need to up the value of n, unless its a duplicate in which +# case we skip the link. We check for duplicates by comparing the +# certificate fingerprints + +sub link_hash_cert { + my $fname = $_[0]; + $fname =~ s/'/'\\''/g; + my ($hash, $fprint) = `"$openssl" x509 $x509hash -fingerprint -noout -in "$fname"`; + chomp $hash; + chomp $fprint; + $fprint =~ s/^.*=//; + $fprint =~ tr/://d; + my $suffix = 0; + # Search for an unused hash filename + while(exists $hashlist{"$hash.$suffix"}) { + # Hash matches: if fingerprint matches its a duplicate cert + if ($hashlist{"$hash.$suffix"} eq $fprint) { + print STDERR "WARNING: Skipping duplicate certificate $fname\n"; + return; + } + $suffix++; + } + $hash .= ".$suffix"; + if ($symlink_exists) { + print "link $fname -> $hash\n" if $verbose; + symlink $fname, $hash || warn "Can't symlink, $!"; + } else { + print "copy $fname -> $hash\n" if $verbose; + if (open($in, "<", $fname)) { + if (open($out,">", $hash)) { + print $out $_ while (<$in>); + close $out; + } else { + warn "can't open $hash for write, $!"; + } + close $in; + } else { + warn "can't open $fname for read, $!"; + } + } + $hashlist{$hash} = $fprint; +} + +# Same as above except for a CRL. CRL links are of the form .r + +sub link_hash_crl { + my $fname = $_[0]; + $fname =~ s/'/'\\''/g; + my ($hash, $fprint) = `"$openssl" crl $crlhash -fingerprint -noout -in '$fname'`; + chomp $hash; + chomp $fprint; + $fprint =~ s/^.*=//; + $fprint =~ tr/://d; + my $suffix = 0; + # Search for an unused hash filename + while(exists $hashlist{"$hash.r$suffix"}) { + # Hash matches: if fingerprint matches its a duplicate cert + if ($hashlist{"$hash.r$suffix"} eq $fprint) { + print STDERR "WARNING: Skipping duplicate CRL $fname\n"; + return; + } + $suffix++; + } + $hash .= ".r$suffix"; + if ($symlink_exists) { + print "link $fname -> $hash\n" if $verbose; + symlink $fname, $hash || warn "Can't symlink, $!"; + } else { + print "cp $fname -> $hash\n" if $verbose; + system ("cp", $fname, $hash); + warn "Can't copy, $!" if ($? >> 8) != 0; + } + $hashlist{$hash} = $fprint; +} diff --git a/deps/openssl/android/arm64-v8a/usr/local/bin/openssl b/deps/openssl/android/arm64-v8a/usr/local/bin/openssl new file mode 100755 index 0000000000000000000000000000000000000000..caf3541a3465adbc74f48ac071f66c01ef7de76f GIT binary patch literal 793560 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

^-zc)<)yyzWKmja`-LX#Y#zG%U2%Ud~?>-Voro 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

E`be3&pR>V3k*IfT|G+rqardOVKxv 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�y|M!1Yt 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 CY{AU{ literal 0 HcmV?d00001 diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/aes.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/aes.h new file mode 100644 index 00000000..245c552a --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/aes.h @@ -0,0 +1,92 @@ +/* + * Copyright 2002-2016 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_AES_H +# define HEADER_AES_H + +# include + +# include +# ifdef __cplusplus +extern "C" { +# endif + +# define AES_ENCRYPT 1 +# define AES_DECRYPT 0 + +/* + * Because array size can't be a const in C, the following two are macros. + * Both sizes are in bytes. + */ +# define AES_MAXNR 14 +# define AES_BLOCK_SIZE 16 + +/* This should be a hidden type, but EVP requires that the size be known */ +struct aes_key_st { +# ifdef AES_LONG + unsigned long rd_key[4 * (AES_MAXNR + 1)]; +# else + unsigned int rd_key[4 * (AES_MAXNR + 1)]; +# endif + int rounds; +}; +typedef struct aes_key_st AES_KEY; + +const char *AES_options(void); + +int AES_set_encrypt_key(const unsigned char *userKey, const int bits, + AES_KEY *key); +int AES_set_decrypt_key(const unsigned char *userKey, const int bits, + AES_KEY *key); + +void AES_encrypt(const unsigned char *in, unsigned char *out, + const AES_KEY *key); +void AES_decrypt(const unsigned char *in, unsigned char *out, + const AES_KEY *key); + +void AES_ecb_encrypt(const unsigned char *in, unsigned char *out, + const AES_KEY *key, const int enc); +void AES_cbc_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const AES_KEY *key, + unsigned char *ivec, const int enc); +void AES_cfb128_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const AES_KEY *key, + unsigned char *ivec, int *num, const int enc); +void AES_cfb1_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const AES_KEY *key, + unsigned char *ivec, int *num, const int enc); +void AES_cfb8_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const AES_KEY *key, + unsigned char *ivec, int *num, const int enc); +void AES_ofb128_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const AES_KEY *key, + unsigned char *ivec, int *num); +/* NB: the IV is _two_ blocks long */ +void AES_ige_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const AES_KEY *key, + unsigned char *ivec, const int enc); +/* NB: the IV is _four_ blocks long */ +void AES_bi_ige_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const AES_KEY *key, + const AES_KEY *key2, const unsigned char *ivec, + const int enc); + +int AES_wrap_key(AES_KEY *key, const unsigned char *iv, + unsigned char *out, + const unsigned char *in, unsigned int inlen); +int AES_unwrap_key(AES_KEY *key, const unsigned char *iv, + unsigned char *out, + const unsigned char *in, unsigned int inlen); + + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/asn1.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/asn1.h new file mode 100644 index 00000000..9522eec1 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/asn1.h @@ -0,0 +1,886 @@ +/* + * Copyright 1995-2017 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_ASN1_H +# define HEADER_ASN1_H + +# include +# include +# include +# include +# include +# include +# include + +# include +# if OPENSSL_API_COMPAT < 0x10100000L +# include +# endif + +# ifdef OPENSSL_BUILD_SHLIBCRYPTO +# undef OPENSSL_EXTERN +# define OPENSSL_EXTERN OPENSSL_EXPORT +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +# define V_ASN1_UNIVERSAL 0x00 +# define V_ASN1_APPLICATION 0x40 +# define V_ASN1_CONTEXT_SPECIFIC 0x80 +# define V_ASN1_PRIVATE 0xc0 + +# define V_ASN1_CONSTRUCTED 0x20 +# define V_ASN1_PRIMITIVE_TAG 0x1f +# define V_ASN1_PRIMATIVE_TAG /*compat*/ V_ASN1_PRIMITIVE_TAG + +# define V_ASN1_APP_CHOOSE -2/* let the recipient choose */ +# define V_ASN1_OTHER -3/* used in ASN1_TYPE */ +# define V_ASN1_ANY -4/* used in ASN1 template code */ + +# define V_ASN1_UNDEF -1 +/* ASN.1 tag values */ +# define V_ASN1_EOC 0 +# define V_ASN1_BOOLEAN 1 /**/ +# define V_ASN1_INTEGER 2 +# define V_ASN1_BIT_STRING 3 +# define V_ASN1_OCTET_STRING 4 +# define V_ASN1_NULL 5 +# define V_ASN1_OBJECT 6 +# define V_ASN1_OBJECT_DESCRIPTOR 7 +# define V_ASN1_EXTERNAL 8 +# define V_ASN1_REAL 9 +# define V_ASN1_ENUMERATED 10 +# define V_ASN1_UTF8STRING 12 +# define V_ASN1_SEQUENCE 16 +# define V_ASN1_SET 17 +# define V_ASN1_NUMERICSTRING 18 /**/ +# define V_ASN1_PRINTABLESTRING 19 +# define V_ASN1_T61STRING 20 +# define V_ASN1_TELETEXSTRING 20/* alias */ +# define V_ASN1_VIDEOTEXSTRING 21 /**/ +# define V_ASN1_IA5STRING 22 +# define V_ASN1_UTCTIME 23 +# define V_ASN1_GENERALIZEDTIME 24 /**/ +# define V_ASN1_GRAPHICSTRING 25 /**/ +# define V_ASN1_ISO64STRING 26 /**/ +# define V_ASN1_VISIBLESTRING 26/* alias */ +# define V_ASN1_GENERALSTRING 27 /**/ +# define V_ASN1_UNIVERSALSTRING 28 /**/ +# define V_ASN1_BMPSTRING 30 + +/* + * NB the constants below are used internally by ASN1_INTEGER + * and ASN1_ENUMERATED to indicate the sign. They are *not* on + * the wire tag values. + */ + +# define V_ASN1_NEG 0x100 +# define V_ASN1_NEG_INTEGER (2 | V_ASN1_NEG) +# define V_ASN1_NEG_ENUMERATED (10 | V_ASN1_NEG) + +/* For use with d2i_ASN1_type_bytes() */ +# define B_ASN1_NUMERICSTRING 0x0001 +# define B_ASN1_PRINTABLESTRING 0x0002 +# define B_ASN1_T61STRING 0x0004 +# define B_ASN1_TELETEXSTRING 0x0004 +# define B_ASN1_VIDEOTEXSTRING 0x0008 +# define B_ASN1_IA5STRING 0x0010 +# define B_ASN1_GRAPHICSTRING 0x0020 +# define B_ASN1_ISO64STRING 0x0040 +# define B_ASN1_VISIBLESTRING 0x0040 +# define B_ASN1_GENERALSTRING 0x0080 +# define B_ASN1_UNIVERSALSTRING 0x0100 +# define B_ASN1_OCTET_STRING 0x0200 +# define B_ASN1_BIT_STRING 0x0400 +# define B_ASN1_BMPSTRING 0x0800 +# define B_ASN1_UNKNOWN 0x1000 +# define B_ASN1_UTF8STRING 0x2000 +# define B_ASN1_UTCTIME 0x4000 +# define B_ASN1_GENERALIZEDTIME 0x8000 +# define B_ASN1_SEQUENCE 0x10000 +/* For use with ASN1_mbstring_copy() */ +# define MBSTRING_FLAG 0x1000 +# define MBSTRING_UTF8 (MBSTRING_FLAG) +# define MBSTRING_ASC (MBSTRING_FLAG|1) +# define MBSTRING_BMP (MBSTRING_FLAG|2) +# define MBSTRING_UNIV (MBSTRING_FLAG|4) +# define SMIME_OLDMIME 0x400 +# define SMIME_CRLFEOL 0x800 +# define SMIME_STREAM 0x1000 + struct X509_algor_st; +DEFINE_STACK_OF(X509_ALGOR) + +# define ASN1_STRING_FLAG_BITS_LEFT 0x08/* Set if 0x07 has bits left value */ +/* + * This indicates that the ASN1_STRING is not a real value but just a place + * holder for the location where indefinite length constructed data should be + * inserted in the memory buffer + */ +# define ASN1_STRING_FLAG_NDEF 0x010 + +/* + * This flag is used by the CMS code to indicate that a string is not + * complete and is a place holder for content when it had all been accessed. + * The flag will be reset when content has been written to it. + */ + +# define ASN1_STRING_FLAG_CONT 0x020 +/* + * This flag is used by ASN1 code to indicate an ASN1_STRING is an MSTRING + * type. + */ +# define ASN1_STRING_FLAG_MSTRING 0x040 +/* String is embedded and only content should be freed */ +# define ASN1_STRING_FLAG_EMBED 0x080 +/* String should be parsed in RFC 5280's time format */ +# define ASN1_STRING_FLAG_X509_TIME 0x100 +/* This is the base type that holds just about everything :-) */ +struct asn1_string_st { + int length; + int type; + unsigned char *data; + /* + * The value of the following field depends on the type being held. It + * is mostly being used for BIT_STRING so if the input data has a + * non-zero 'unused bits' value, it will be handled correctly + */ + long flags; +}; + +/* + * ASN1_ENCODING structure: this is used to save the received encoding of an + * ASN1 type. This is useful to get round problems with invalid encodings + * which can break signatures. + */ + +typedef struct ASN1_ENCODING_st { + unsigned char *enc; /* DER encoding */ + long len; /* Length of encoding */ + int modified; /* set to 1 if 'enc' is invalid */ +} ASN1_ENCODING; + +/* Used with ASN1 LONG type: if a long is set to this it is omitted */ +# define ASN1_LONG_UNDEF 0x7fffffffL + +# define STABLE_FLAGS_MALLOC 0x01 +/* + * A zero passed to ASN1_STRING_TABLE_new_add for the flags is interpreted + * as "don't change" and STABLE_FLAGS_MALLOC is always set. By setting + * STABLE_FLAGS_MALLOC only we can clear the existing value. Use the alias + * STABLE_FLAGS_CLEAR to reflect this. + */ +# define STABLE_FLAGS_CLEAR STABLE_FLAGS_MALLOC +# define STABLE_NO_MASK 0x02 +# define DIRSTRING_TYPE \ + (B_ASN1_PRINTABLESTRING|B_ASN1_T61STRING|B_ASN1_BMPSTRING|B_ASN1_UTF8STRING) +# define PKCS9STRING_TYPE (DIRSTRING_TYPE|B_ASN1_IA5STRING) + +typedef struct asn1_string_table_st { + int nid; + long minsize; + long maxsize; + unsigned long mask; + unsigned long flags; +} ASN1_STRING_TABLE; + +DEFINE_STACK_OF(ASN1_STRING_TABLE) + +/* size limits: this stuff is taken straight from RFC2459 */ + +# define ub_name 32768 +# define ub_common_name 64 +# define ub_locality_name 128 +# define ub_state_name 128 +# define ub_organization_name 64 +# define ub_organization_unit_name 64 +# define ub_title 64 +# define ub_email_address 128 + +/* + * Declarations for template structures: for full definitions see asn1t.h + */ +typedef struct ASN1_TEMPLATE_st ASN1_TEMPLATE; +typedef struct ASN1_TLC_st ASN1_TLC; +/* This is just an opaque pointer */ +typedef struct ASN1_VALUE_st ASN1_VALUE; + +/* Declare ASN1 functions: the implement macro in in asn1t.h */ + +# define DECLARE_ASN1_FUNCTIONS(type) DECLARE_ASN1_FUNCTIONS_name(type, type) + +# define DECLARE_ASN1_ALLOC_FUNCTIONS(type) \ + DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, type) + +# define DECLARE_ASN1_FUNCTIONS_name(type, name) \ + DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS(type, name, name) + +# define DECLARE_ASN1_FUNCTIONS_fname(type, itname, name) \ + DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) + +# define DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) \ + type *d2i_##name(type **a, const unsigned char **in, long len); \ + int i2d_##name(type *a, unsigned char **out); \ + DECLARE_ASN1_ITEM(itname) + +# define DECLARE_ASN1_ENCODE_FUNCTIONS_const(type, name) \ + type *d2i_##name(type **a, const unsigned char **in, long len); \ + int i2d_##name(const type *a, unsigned char **out); \ + DECLARE_ASN1_ITEM(name) + +# define DECLARE_ASN1_NDEF_FUNCTION(name) \ + int i2d_##name##_NDEF(name *a, unsigned char **out); + +# define DECLARE_ASN1_FUNCTIONS_const(name) \ + DECLARE_ASN1_ALLOC_FUNCTIONS(name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS_const(name, name) + +# define DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \ + type *name##_new(void); \ + void name##_free(type *a); + +# define DECLARE_ASN1_PRINT_FUNCTION(stname) \ + DECLARE_ASN1_PRINT_FUNCTION_fname(stname, stname) + +# define DECLARE_ASN1_PRINT_FUNCTION_fname(stname, fname) \ + int fname##_print_ctx(BIO *out, stname *x, int indent, \ + const ASN1_PCTX *pctx); + +# define D2I_OF(type) type *(*)(type **,const unsigned char **,long) +# define I2D_OF(type) int (*)(type *,unsigned char **) +# define I2D_OF_const(type) int (*)(const type *,unsigned char **) + +# define CHECKED_D2I_OF(type, d2i) \ + ((d2i_of_void*) (1 ? d2i : ((D2I_OF(type))0))) +# define CHECKED_I2D_OF(type, i2d) \ + ((i2d_of_void*) (1 ? i2d : ((I2D_OF(type))0))) +# define CHECKED_NEW_OF(type, xnew) \ + ((void *(*)(void)) (1 ? xnew : ((type *(*)(void))0))) +# define CHECKED_PTR_OF(type, p) \ + ((void*) (1 ? p : (type*)0)) +# define CHECKED_PPTR_OF(type, p) \ + ((void**) (1 ? p : (type**)0)) + +# define TYPEDEF_D2I_OF(type) typedef type *d2i_of_##type(type **,const unsigned char **,long) +# define TYPEDEF_I2D_OF(type) typedef int i2d_of_##type(type *,unsigned char **) +# define TYPEDEF_D2I2D_OF(type) TYPEDEF_D2I_OF(type); TYPEDEF_I2D_OF(type) + +TYPEDEF_D2I2D_OF(void); + +/*- + * The following macros and typedefs allow an ASN1_ITEM + * to be embedded in a structure and referenced. Since + * the ASN1_ITEM pointers need to be globally accessible + * (possibly from shared libraries) they may exist in + * different forms. On platforms that support it the + * ASN1_ITEM structure itself will be globally exported. + * Other platforms will export a function that returns + * an ASN1_ITEM pointer. + * + * To handle both cases transparently the macros below + * should be used instead of hard coding an ASN1_ITEM + * pointer in a structure. + * + * The structure will look like this: + * + * typedef struct SOMETHING_st { + * ... + * ASN1_ITEM_EXP *iptr; + * ... + * } SOMETHING; + * + * It would be initialised as e.g.: + * + * SOMETHING somevar = {...,ASN1_ITEM_ref(X509),...}; + * + * and the actual pointer extracted with: + * + * const ASN1_ITEM *it = ASN1_ITEM_ptr(somevar.iptr); + * + * Finally an ASN1_ITEM pointer can be extracted from an + * appropriate reference with: ASN1_ITEM_rptr(X509). This + * would be used when a function takes an ASN1_ITEM * argument. + * + */ + +# ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION + +/* ASN1_ITEM pointer exported type */ +typedef const ASN1_ITEM ASN1_ITEM_EXP; + +/* Macro to obtain ASN1_ITEM pointer from exported type */ +# define ASN1_ITEM_ptr(iptr) (iptr) + +/* Macro to include ASN1_ITEM pointer from base type */ +# define ASN1_ITEM_ref(iptr) (&(iptr##_it)) + +# define ASN1_ITEM_rptr(ref) (&(ref##_it)) + +# define DECLARE_ASN1_ITEM(name) \ + OPENSSL_EXTERN const ASN1_ITEM name##_it; + +# else + +/* + * Platforms that can't easily handle shared global variables are declared as + * functions returning ASN1_ITEM pointers. + */ + +/* ASN1_ITEM pointer exported type */ +typedef const ASN1_ITEM *ASN1_ITEM_EXP (void); + +/* Macro to obtain ASN1_ITEM pointer from exported type */ +# define ASN1_ITEM_ptr(iptr) (iptr()) + +/* Macro to include ASN1_ITEM pointer from base type */ +# define ASN1_ITEM_ref(iptr) (iptr##_it) + +# define ASN1_ITEM_rptr(ref) (ref##_it()) + +# define DECLARE_ASN1_ITEM(name) \ + const ASN1_ITEM * name##_it(void); + +# endif + +/* Parameters used by ASN1_STRING_print_ex() */ + +/* + * These determine which characters to escape: RFC2253 special characters, + * control characters and MSB set characters + */ + +# define ASN1_STRFLGS_ESC_2253 1 +# define ASN1_STRFLGS_ESC_CTRL 2 +# define ASN1_STRFLGS_ESC_MSB 4 + +/* + * This flag determines how we do escaping: normally RC2253 backslash only, + * set this to use backslash and quote. + */ + +# define ASN1_STRFLGS_ESC_QUOTE 8 + +/* These three flags are internal use only. */ + +/* Character is a valid PrintableString character */ +# define CHARTYPE_PRINTABLESTRING 0x10 +/* Character needs escaping if it is the first character */ +# define CHARTYPE_FIRST_ESC_2253 0x20 +/* Character needs escaping if it is the last character */ +# define CHARTYPE_LAST_ESC_2253 0x40 + +/* + * NB the internal flags are safely reused below by flags handled at the top + * level. + */ + +/* + * If this is set we convert all character strings to UTF8 first + */ + +# define ASN1_STRFLGS_UTF8_CONVERT 0x10 + +/* + * If this is set we don't attempt to interpret content: just assume all + * strings are 1 byte per character. This will produce some pretty odd + * looking output! + */ + +# define ASN1_STRFLGS_IGNORE_TYPE 0x20 + +/* If this is set we include the string type in the output */ +# define ASN1_STRFLGS_SHOW_TYPE 0x40 + +/* + * This determines which strings to display and which to 'dump' (hex dump of + * content octets or DER encoding). We can only dump non character strings or + * everything. If we don't dump 'unknown' they are interpreted as character + * strings with 1 octet per character and are subject to the usual escaping + * options. + */ + +# define ASN1_STRFLGS_DUMP_ALL 0x80 +# define ASN1_STRFLGS_DUMP_UNKNOWN 0x100 + +/* + * These determine what 'dumping' does, we can dump the content octets or the + * DER encoding: both use the RFC2253 #XXXXX notation. + */ + +# define ASN1_STRFLGS_DUMP_DER 0x200 + +/* + * This flag specifies that RC2254 escaping shall be performed. + */ +#define ASN1_STRFLGS_ESC_2254 0x400 + +/* + * All the string flags consistent with RFC2253, escaping control characters + * isn't essential in RFC2253 but it is advisable anyway. + */ + +# define ASN1_STRFLGS_RFC2253 (ASN1_STRFLGS_ESC_2253 | \ + ASN1_STRFLGS_ESC_CTRL | \ + ASN1_STRFLGS_ESC_MSB | \ + ASN1_STRFLGS_UTF8_CONVERT | \ + ASN1_STRFLGS_DUMP_UNKNOWN | \ + ASN1_STRFLGS_DUMP_DER) + +DEFINE_STACK_OF(ASN1_INTEGER) + +DEFINE_STACK_OF(ASN1_GENERALSTRING) + +DEFINE_STACK_OF(ASN1_UTF8STRING) + +typedef struct asn1_type_st { + int type; + union { + char *ptr; + ASN1_BOOLEAN boolean; + ASN1_STRING *asn1_string; + ASN1_OBJECT *object; + ASN1_INTEGER *integer; + ASN1_ENUMERATED *enumerated; + ASN1_BIT_STRING *bit_string; + ASN1_OCTET_STRING *octet_string; + ASN1_PRINTABLESTRING *printablestring; + ASN1_T61STRING *t61string; + ASN1_IA5STRING *ia5string; + ASN1_GENERALSTRING *generalstring; + ASN1_BMPSTRING *bmpstring; + ASN1_UNIVERSALSTRING *universalstring; + ASN1_UTCTIME *utctime; + ASN1_GENERALIZEDTIME *generalizedtime; + ASN1_VISIBLESTRING *visiblestring; + ASN1_UTF8STRING *utf8string; + /* + * set and sequence are left complete and still contain the set or + * sequence bytes + */ + ASN1_STRING *set; + ASN1_STRING *sequence; + ASN1_VALUE *asn1_value; + } value; +} ASN1_TYPE; + +DEFINE_STACK_OF(ASN1_TYPE) + +typedef STACK_OF(ASN1_TYPE) ASN1_SEQUENCE_ANY; + +DECLARE_ASN1_ENCODE_FUNCTIONS_const(ASN1_SEQUENCE_ANY, ASN1_SEQUENCE_ANY) +DECLARE_ASN1_ENCODE_FUNCTIONS_const(ASN1_SEQUENCE_ANY, ASN1_SET_ANY) + +/* This is used to contain a list of bit names */ +typedef struct BIT_STRING_BITNAME_st { + int bitnum; + const char *lname; + const char *sname; +} BIT_STRING_BITNAME; + +# define B_ASN1_TIME \ + B_ASN1_UTCTIME | \ + B_ASN1_GENERALIZEDTIME + +# define B_ASN1_PRINTABLE \ + B_ASN1_NUMERICSTRING| \ + B_ASN1_PRINTABLESTRING| \ + B_ASN1_T61STRING| \ + B_ASN1_IA5STRING| \ + B_ASN1_BIT_STRING| \ + B_ASN1_UNIVERSALSTRING|\ + B_ASN1_BMPSTRING|\ + B_ASN1_UTF8STRING|\ + B_ASN1_SEQUENCE|\ + B_ASN1_UNKNOWN + +# define B_ASN1_DIRECTORYSTRING \ + B_ASN1_PRINTABLESTRING| \ + B_ASN1_TELETEXSTRING|\ + B_ASN1_BMPSTRING|\ + B_ASN1_UNIVERSALSTRING|\ + B_ASN1_UTF8STRING + +# define B_ASN1_DISPLAYTEXT \ + B_ASN1_IA5STRING| \ + B_ASN1_VISIBLESTRING| \ + B_ASN1_BMPSTRING|\ + B_ASN1_UTF8STRING + +DECLARE_ASN1_FUNCTIONS_fname(ASN1_TYPE, ASN1_ANY, ASN1_TYPE) + +int ASN1_TYPE_get(const ASN1_TYPE *a); +void ASN1_TYPE_set(ASN1_TYPE *a, int type, void *value); +int ASN1_TYPE_set1(ASN1_TYPE *a, int type, const void *value); +int ASN1_TYPE_cmp(const ASN1_TYPE *a, const ASN1_TYPE *b); + +ASN1_TYPE *ASN1_TYPE_pack_sequence(const ASN1_ITEM *it, void *s, ASN1_TYPE **t); +void *ASN1_TYPE_unpack_sequence(const ASN1_ITEM *it, const ASN1_TYPE *t); + +ASN1_OBJECT *ASN1_OBJECT_new(void); +void ASN1_OBJECT_free(ASN1_OBJECT *a); +int i2d_ASN1_OBJECT(const ASN1_OBJECT *a, unsigned char **pp); +ASN1_OBJECT *d2i_ASN1_OBJECT(ASN1_OBJECT **a, const unsigned char **pp, + long length); + +DECLARE_ASN1_ITEM(ASN1_OBJECT) + +DEFINE_STACK_OF(ASN1_OBJECT) + +ASN1_STRING *ASN1_STRING_new(void); +void ASN1_STRING_free(ASN1_STRING *a); +void ASN1_STRING_clear_free(ASN1_STRING *a); +int ASN1_STRING_copy(ASN1_STRING *dst, const ASN1_STRING *str); +ASN1_STRING *ASN1_STRING_dup(const ASN1_STRING *a); +ASN1_STRING *ASN1_STRING_type_new(int type); +int ASN1_STRING_cmp(const ASN1_STRING *a, const ASN1_STRING *b); + /* + * Since this is used to store all sorts of things, via macros, for now, + * make its data void * + */ +int ASN1_STRING_set(ASN1_STRING *str, const void *data, int len); +void ASN1_STRING_set0(ASN1_STRING *str, void *data, int len); +int ASN1_STRING_length(const ASN1_STRING *x); +void ASN1_STRING_length_set(ASN1_STRING *x, int n); +int ASN1_STRING_type(const ASN1_STRING *x); +DEPRECATEDIN_1_1_0(unsigned char *ASN1_STRING_data(ASN1_STRING *x)) +const unsigned char *ASN1_STRING_get0_data(const ASN1_STRING *x); + +DECLARE_ASN1_FUNCTIONS(ASN1_BIT_STRING) +int ASN1_BIT_STRING_set(ASN1_BIT_STRING *a, unsigned char *d, int length); +int ASN1_BIT_STRING_set_bit(ASN1_BIT_STRING *a, int n, int value); +int ASN1_BIT_STRING_get_bit(const ASN1_BIT_STRING *a, int n); +int ASN1_BIT_STRING_check(const ASN1_BIT_STRING *a, + const unsigned char *flags, int flags_len); + +int ASN1_BIT_STRING_name_print(BIO *out, ASN1_BIT_STRING *bs, + BIT_STRING_BITNAME *tbl, int indent); +int ASN1_BIT_STRING_num_asc(const char *name, BIT_STRING_BITNAME *tbl); +int ASN1_BIT_STRING_set_asc(ASN1_BIT_STRING *bs, const char *name, int value, + BIT_STRING_BITNAME *tbl); + +DECLARE_ASN1_FUNCTIONS(ASN1_INTEGER) +ASN1_INTEGER *d2i_ASN1_UINTEGER(ASN1_INTEGER **a, const unsigned char **pp, + long length); +ASN1_INTEGER *ASN1_INTEGER_dup(const ASN1_INTEGER *x); +int ASN1_INTEGER_cmp(const ASN1_INTEGER *x, const ASN1_INTEGER *y); + +DECLARE_ASN1_FUNCTIONS(ASN1_ENUMERATED) + +int ASN1_UTCTIME_check(const ASN1_UTCTIME *a); +ASN1_UTCTIME *ASN1_UTCTIME_set(ASN1_UTCTIME *s, time_t t); +ASN1_UTCTIME *ASN1_UTCTIME_adj(ASN1_UTCTIME *s, time_t t, + int offset_day, long offset_sec); +int ASN1_UTCTIME_set_string(ASN1_UTCTIME *s, const char *str); +int ASN1_UTCTIME_cmp_time_t(const ASN1_UTCTIME *s, time_t t); + +int ASN1_GENERALIZEDTIME_check(const ASN1_GENERALIZEDTIME *a); +ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_set(ASN1_GENERALIZEDTIME *s, + time_t t); +ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_adj(ASN1_GENERALIZEDTIME *s, + time_t t, int offset_day, + long offset_sec); +int ASN1_GENERALIZEDTIME_set_string(ASN1_GENERALIZEDTIME *s, const char *str); + +int ASN1_TIME_diff(int *pday, int *psec, + const ASN1_TIME *from, const ASN1_TIME *to); + +DECLARE_ASN1_FUNCTIONS(ASN1_OCTET_STRING) +ASN1_OCTET_STRING *ASN1_OCTET_STRING_dup(const ASN1_OCTET_STRING *a); +int ASN1_OCTET_STRING_cmp(const ASN1_OCTET_STRING *a, + const ASN1_OCTET_STRING *b); +int ASN1_OCTET_STRING_set(ASN1_OCTET_STRING *str, const unsigned char *data, + int len); + +DECLARE_ASN1_FUNCTIONS(ASN1_VISIBLESTRING) +DECLARE_ASN1_FUNCTIONS(ASN1_UNIVERSALSTRING) +DECLARE_ASN1_FUNCTIONS(ASN1_UTF8STRING) +DECLARE_ASN1_FUNCTIONS(ASN1_NULL) +DECLARE_ASN1_FUNCTIONS(ASN1_BMPSTRING) + +int UTF8_getc(const unsigned char *str, int len, unsigned long *val); +int UTF8_putc(unsigned char *str, int len, unsigned long value); + +DECLARE_ASN1_FUNCTIONS_name(ASN1_STRING, ASN1_PRINTABLE) + +DECLARE_ASN1_FUNCTIONS_name(ASN1_STRING, DIRECTORYSTRING) +DECLARE_ASN1_FUNCTIONS_name(ASN1_STRING, DISPLAYTEXT) +DECLARE_ASN1_FUNCTIONS(ASN1_PRINTABLESTRING) +DECLARE_ASN1_FUNCTIONS(ASN1_T61STRING) +DECLARE_ASN1_FUNCTIONS(ASN1_IA5STRING) +DECLARE_ASN1_FUNCTIONS(ASN1_GENERALSTRING) +DECLARE_ASN1_FUNCTIONS(ASN1_UTCTIME) +DECLARE_ASN1_FUNCTIONS(ASN1_GENERALIZEDTIME) +DECLARE_ASN1_FUNCTIONS(ASN1_TIME) + +DECLARE_ASN1_ITEM(ASN1_OCTET_STRING_NDEF) + +ASN1_TIME *ASN1_TIME_set(ASN1_TIME *s, time_t t); +ASN1_TIME *ASN1_TIME_adj(ASN1_TIME *s, time_t t, + int offset_day, long offset_sec); +int ASN1_TIME_check(const ASN1_TIME *t); +ASN1_GENERALIZEDTIME *ASN1_TIME_to_generalizedtime(const ASN1_TIME *t, + ASN1_GENERALIZEDTIME **out); +int ASN1_TIME_set_string(ASN1_TIME *s, const char *str); +int ASN1_TIME_set_string_X509(ASN1_TIME *s, const char *str); +int ASN1_TIME_to_tm(const ASN1_TIME *s, struct tm *tm); +int ASN1_TIME_normalize(ASN1_TIME *s); +int ASN1_TIME_cmp_time_t(const ASN1_TIME *s, time_t t); +int ASN1_TIME_compare(const ASN1_TIME *a, const ASN1_TIME *b); + +int i2a_ASN1_INTEGER(BIO *bp, const ASN1_INTEGER *a); +int a2i_ASN1_INTEGER(BIO *bp, ASN1_INTEGER *bs, char *buf, int size); +int i2a_ASN1_ENUMERATED(BIO *bp, const ASN1_ENUMERATED *a); +int a2i_ASN1_ENUMERATED(BIO *bp, ASN1_ENUMERATED *bs, char *buf, int size); +int i2a_ASN1_OBJECT(BIO *bp, const ASN1_OBJECT *a); +int a2i_ASN1_STRING(BIO *bp, ASN1_STRING *bs, char *buf, int size); +int i2a_ASN1_STRING(BIO *bp, const ASN1_STRING *a, int type); +int i2t_ASN1_OBJECT(char *buf, int buf_len, const ASN1_OBJECT *a); + +int a2d_ASN1_OBJECT(unsigned char *out, int olen, const char *buf, int num); +ASN1_OBJECT *ASN1_OBJECT_create(int nid, unsigned char *data, int len, + const char *sn, const char *ln); + +int ASN1_INTEGER_get_int64(int64_t *pr, const ASN1_INTEGER *a); +int ASN1_INTEGER_set_int64(ASN1_INTEGER *a, int64_t r); +int ASN1_INTEGER_get_uint64(uint64_t *pr, const ASN1_INTEGER *a); +int ASN1_INTEGER_set_uint64(ASN1_INTEGER *a, uint64_t r); + +int ASN1_INTEGER_set(ASN1_INTEGER *a, long v); +long ASN1_INTEGER_get(const ASN1_INTEGER *a); +ASN1_INTEGER *BN_to_ASN1_INTEGER(const BIGNUM *bn, ASN1_INTEGER *ai); +BIGNUM *ASN1_INTEGER_to_BN(const ASN1_INTEGER *ai, BIGNUM *bn); + +int ASN1_ENUMERATED_get_int64(int64_t *pr, const ASN1_ENUMERATED *a); +int ASN1_ENUMERATED_set_int64(ASN1_ENUMERATED *a, int64_t r); + + +int ASN1_ENUMERATED_set(ASN1_ENUMERATED *a, long v); +long ASN1_ENUMERATED_get(const ASN1_ENUMERATED *a); +ASN1_ENUMERATED *BN_to_ASN1_ENUMERATED(const BIGNUM *bn, ASN1_ENUMERATED *ai); +BIGNUM *ASN1_ENUMERATED_to_BN(const ASN1_ENUMERATED *ai, BIGNUM *bn); + +/* General */ +/* given a string, return the correct type, max is the maximum length */ +int ASN1_PRINTABLE_type(const unsigned char *s, int max); + +unsigned long ASN1_tag2bit(int tag); + +/* SPECIALS */ +int ASN1_get_object(const unsigned char **pp, long *plength, int *ptag, + int *pclass, long omax); +int ASN1_check_infinite_end(unsigned char **p, long len); +int ASN1_const_check_infinite_end(const unsigned char **p, long len); +void ASN1_put_object(unsigned char **pp, int constructed, int length, + int tag, int xclass); +int ASN1_put_eoc(unsigned char **pp); +int ASN1_object_size(int constructed, int length, int tag); + +/* Used to implement other functions */ +void *ASN1_dup(i2d_of_void *i2d, d2i_of_void *d2i, void *x); + +# define ASN1_dup_of(type,i2d,d2i,x) \ + ((type*)ASN1_dup(CHECKED_I2D_OF(type, i2d), \ + CHECKED_D2I_OF(type, d2i), \ + CHECKED_PTR_OF(type, x))) + +# define ASN1_dup_of_const(type,i2d,d2i,x) \ + ((type*)ASN1_dup(CHECKED_I2D_OF(const type, i2d), \ + CHECKED_D2I_OF(type, d2i), \ + CHECKED_PTR_OF(const type, x))) + +void *ASN1_item_dup(const ASN1_ITEM *it, void *x); + +/* ASN1 alloc/free macros for when a type is only used internally */ + +# define M_ASN1_new_of(type) (type *)ASN1_item_new(ASN1_ITEM_rptr(type)) +# define M_ASN1_free_of(x, type) \ + ASN1_item_free(CHECKED_PTR_OF(type, x), ASN1_ITEM_rptr(type)) + +# ifndef OPENSSL_NO_STDIO +void *ASN1_d2i_fp(void *(*xnew) (void), d2i_of_void *d2i, FILE *in, void **x); + +# define ASN1_d2i_fp_of(type,xnew,d2i,in,x) \ + ((type*)ASN1_d2i_fp(CHECKED_NEW_OF(type, xnew), \ + CHECKED_D2I_OF(type, d2i), \ + in, \ + CHECKED_PPTR_OF(type, x))) + +void *ASN1_item_d2i_fp(const ASN1_ITEM *it, FILE *in, void *x); +int ASN1_i2d_fp(i2d_of_void *i2d, FILE *out, void *x); + +# define ASN1_i2d_fp_of(type,i2d,out,x) \ + (ASN1_i2d_fp(CHECKED_I2D_OF(type, i2d), \ + out, \ + CHECKED_PTR_OF(type, x))) + +# define ASN1_i2d_fp_of_const(type,i2d,out,x) \ + (ASN1_i2d_fp(CHECKED_I2D_OF(const type, i2d), \ + out, \ + CHECKED_PTR_OF(const type, x))) + +int ASN1_item_i2d_fp(const ASN1_ITEM *it, FILE *out, void *x); +int ASN1_STRING_print_ex_fp(FILE *fp, const ASN1_STRING *str, unsigned long flags); +# endif + +int ASN1_STRING_to_UTF8(unsigned char **out, const ASN1_STRING *in); + +void *ASN1_d2i_bio(void *(*xnew) (void), d2i_of_void *d2i, BIO *in, void **x); + +# define ASN1_d2i_bio_of(type,xnew,d2i,in,x) \ + ((type*)ASN1_d2i_bio( CHECKED_NEW_OF(type, xnew), \ + CHECKED_D2I_OF(type, d2i), \ + in, \ + CHECKED_PPTR_OF(type, x))) + +void *ASN1_item_d2i_bio(const ASN1_ITEM *it, BIO *in, void *x); +int ASN1_i2d_bio(i2d_of_void *i2d, BIO *out, unsigned char *x); + +# define ASN1_i2d_bio_of(type,i2d,out,x) \ + (ASN1_i2d_bio(CHECKED_I2D_OF(type, i2d), \ + out, \ + CHECKED_PTR_OF(type, x))) + +# define ASN1_i2d_bio_of_const(type,i2d,out,x) \ + (ASN1_i2d_bio(CHECKED_I2D_OF(const type, i2d), \ + out, \ + CHECKED_PTR_OF(const type, x))) + +int ASN1_item_i2d_bio(const ASN1_ITEM *it, BIO *out, void *x); +int ASN1_UTCTIME_print(BIO *fp, const ASN1_UTCTIME *a); +int ASN1_GENERALIZEDTIME_print(BIO *fp, const ASN1_GENERALIZEDTIME *a); +int ASN1_TIME_print(BIO *fp, const ASN1_TIME *a); +int ASN1_STRING_print(BIO *bp, const ASN1_STRING *v); +int ASN1_STRING_print_ex(BIO *out, const ASN1_STRING *str, unsigned long flags); +int ASN1_buf_print(BIO *bp, const unsigned char *buf, size_t buflen, int off); +int ASN1_bn_print(BIO *bp, const char *number, const BIGNUM *num, + unsigned char *buf, int off); +int ASN1_parse(BIO *bp, const unsigned char *pp, long len, int indent); +int ASN1_parse_dump(BIO *bp, const unsigned char *pp, long len, int indent, + int dump); +const char *ASN1_tag2str(int tag); + +/* Used to load and write Netscape format cert */ + +int ASN1_UNIVERSALSTRING_to_string(ASN1_UNIVERSALSTRING *s); + +int ASN1_TYPE_set_octetstring(ASN1_TYPE *a, unsigned char *data, int len); +int ASN1_TYPE_get_octetstring(const ASN1_TYPE *a, unsigned char *data, int max_len); +int ASN1_TYPE_set_int_octetstring(ASN1_TYPE *a, long num, + unsigned char *data, int len); +int ASN1_TYPE_get_int_octetstring(const ASN1_TYPE *a, long *num, + unsigned char *data, int max_len); + +void *ASN1_item_unpack(const ASN1_STRING *oct, const ASN1_ITEM *it); + +ASN1_STRING *ASN1_item_pack(void *obj, const ASN1_ITEM *it, + ASN1_OCTET_STRING **oct); + +void ASN1_STRING_set_default_mask(unsigned long mask); +int ASN1_STRING_set_default_mask_asc(const char *p); +unsigned long ASN1_STRING_get_default_mask(void); +int ASN1_mbstring_copy(ASN1_STRING **out, const unsigned char *in, int len, + int inform, unsigned long mask); +int ASN1_mbstring_ncopy(ASN1_STRING **out, const unsigned char *in, int len, + int inform, unsigned long mask, + long minsize, long maxsize); + +ASN1_STRING *ASN1_STRING_set_by_NID(ASN1_STRING **out, + const unsigned char *in, int inlen, + int inform, int nid); +ASN1_STRING_TABLE *ASN1_STRING_TABLE_get(int nid); +int ASN1_STRING_TABLE_add(int, long, long, unsigned long, unsigned long); +void ASN1_STRING_TABLE_cleanup(void); + +/* ASN1 template functions */ + +/* Old API compatible functions */ +ASN1_VALUE *ASN1_item_new(const ASN1_ITEM *it); +void ASN1_item_free(ASN1_VALUE *val, const ASN1_ITEM *it); +ASN1_VALUE *ASN1_item_d2i(ASN1_VALUE **val, const unsigned char **in, + long len, const ASN1_ITEM *it); +int ASN1_item_i2d(ASN1_VALUE *val, unsigned char **out, const ASN1_ITEM *it); +int ASN1_item_ndef_i2d(ASN1_VALUE *val, unsigned char **out, + const ASN1_ITEM *it); + +void ASN1_add_oid_module(void); +void ASN1_add_stable_module(void); + +ASN1_TYPE *ASN1_generate_nconf(const char *str, CONF *nconf); +ASN1_TYPE *ASN1_generate_v3(const char *str, X509V3_CTX *cnf); +int ASN1_str2mask(const char *str, unsigned long *pmask); + +/* ASN1 Print flags */ + +/* Indicate missing OPTIONAL fields */ +# define ASN1_PCTX_FLAGS_SHOW_ABSENT 0x001 +/* Mark start and end of SEQUENCE */ +# define ASN1_PCTX_FLAGS_SHOW_SEQUENCE 0x002 +/* Mark start and end of SEQUENCE/SET OF */ +# define ASN1_PCTX_FLAGS_SHOW_SSOF 0x004 +/* Show the ASN1 type of primitives */ +# define ASN1_PCTX_FLAGS_SHOW_TYPE 0x008 +/* Don't show ASN1 type of ANY */ +# define ASN1_PCTX_FLAGS_NO_ANY_TYPE 0x010 +/* Don't show ASN1 type of MSTRINGs */ +# define ASN1_PCTX_FLAGS_NO_MSTRING_TYPE 0x020 +/* Don't show field names in SEQUENCE */ +# define ASN1_PCTX_FLAGS_NO_FIELD_NAME 0x040 +/* Show structure names of each SEQUENCE field */ +# define ASN1_PCTX_FLAGS_SHOW_FIELD_STRUCT_NAME 0x080 +/* Don't show structure name even at top level */ +# define ASN1_PCTX_FLAGS_NO_STRUCT_NAME 0x100 + +int ASN1_item_print(BIO *out, ASN1_VALUE *ifld, int indent, + const ASN1_ITEM *it, const ASN1_PCTX *pctx); +ASN1_PCTX *ASN1_PCTX_new(void); +void ASN1_PCTX_free(ASN1_PCTX *p); +unsigned long ASN1_PCTX_get_flags(const ASN1_PCTX *p); +void ASN1_PCTX_set_flags(ASN1_PCTX *p, unsigned long flags); +unsigned long ASN1_PCTX_get_nm_flags(const ASN1_PCTX *p); +void ASN1_PCTX_set_nm_flags(ASN1_PCTX *p, unsigned long flags); +unsigned long ASN1_PCTX_get_cert_flags(const ASN1_PCTX *p); +void ASN1_PCTX_set_cert_flags(ASN1_PCTX *p, unsigned long flags); +unsigned long ASN1_PCTX_get_oid_flags(const ASN1_PCTX *p); +void ASN1_PCTX_set_oid_flags(ASN1_PCTX *p, unsigned long flags); +unsigned long ASN1_PCTX_get_str_flags(const ASN1_PCTX *p); +void ASN1_PCTX_set_str_flags(ASN1_PCTX *p, unsigned long flags); + +ASN1_SCTX *ASN1_SCTX_new(int (*scan_cb) (ASN1_SCTX *ctx)); +void ASN1_SCTX_free(ASN1_SCTX *p); +const ASN1_ITEM *ASN1_SCTX_get_item(ASN1_SCTX *p); +const ASN1_TEMPLATE *ASN1_SCTX_get_template(ASN1_SCTX *p); +unsigned long ASN1_SCTX_get_flags(ASN1_SCTX *p); +void ASN1_SCTX_set_app_data(ASN1_SCTX *p, void *data); +void *ASN1_SCTX_get_app_data(ASN1_SCTX *p); + +const BIO_METHOD *BIO_f_asn1(void); + +BIO *BIO_new_NDEF(BIO *out, ASN1_VALUE *val, const ASN1_ITEM *it); + +int i2d_ASN1_bio_stream(BIO *out, ASN1_VALUE *val, BIO *in, int flags, + const ASN1_ITEM *it); +int PEM_write_bio_ASN1_stream(BIO *out, ASN1_VALUE *val, BIO *in, int flags, + const char *hdr, const ASN1_ITEM *it); +int SMIME_write_ASN1(BIO *bio, ASN1_VALUE *val, BIO *data, int flags, + int ctype_nid, int econt_nid, + STACK_OF(X509_ALGOR) *mdalgs, const ASN1_ITEM *it); +ASN1_VALUE *SMIME_read_ASN1(BIO *bio, BIO **bcont, const ASN1_ITEM *it); +int SMIME_crlf_copy(BIO *in, BIO *out, int flags); +int SMIME_text(BIO *in, BIO *out); + +const ASN1_ITEM *ASN1_ITEM_lookup(const char *name); +const ASN1_ITEM *ASN1_ITEM_get(size_t i); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/asn1_mac.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/asn1_mac.h new file mode 100644 index 00000000..7ac1782a --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/asn1_mac.h @@ -0,0 +1,10 @@ +/* + * Copyright 2015-2016 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#error "This file is obsolete; please update your software." diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/asn1err.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/asn1err.h new file mode 100644 index 00000000..faed5a55 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/asn1err.h @@ -0,0 +1,256 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2019 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_ASN1ERR_H +# define HEADER_ASN1ERR_H + +# ifndef HEADER_SYMHACKS_H +# include +# endif + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_ASN1_strings(void); + +/* + * ASN1 function codes. + */ +# define ASN1_F_A2D_ASN1_OBJECT 100 +# define ASN1_F_A2I_ASN1_INTEGER 102 +# define ASN1_F_A2I_ASN1_STRING 103 +# define ASN1_F_APPEND_EXP 176 +# define ASN1_F_ASN1_BIO_INIT 113 +# define ASN1_F_ASN1_BIT_STRING_SET_BIT 183 +# define ASN1_F_ASN1_CB 177 +# define ASN1_F_ASN1_CHECK_TLEN 104 +# define ASN1_F_ASN1_COLLECT 106 +# define ASN1_F_ASN1_D2I_EX_PRIMITIVE 108 +# define ASN1_F_ASN1_D2I_FP 109 +# define ASN1_F_ASN1_D2I_READ_BIO 107 +# define ASN1_F_ASN1_DIGEST 184 +# define ASN1_F_ASN1_DO_ADB 110 +# define ASN1_F_ASN1_DO_LOCK 233 +# define ASN1_F_ASN1_DUP 111 +# define ASN1_F_ASN1_ENC_SAVE 115 +# define ASN1_F_ASN1_EX_C2I 204 +# define ASN1_F_ASN1_FIND_END 190 +# define ASN1_F_ASN1_GENERALIZEDTIME_ADJ 216 +# define ASN1_F_ASN1_GENERATE_V3 178 +# define ASN1_F_ASN1_GET_INT64 224 +# define ASN1_F_ASN1_GET_OBJECT 114 +# define ASN1_F_ASN1_GET_UINT64 225 +# define ASN1_F_ASN1_I2D_BIO 116 +# define ASN1_F_ASN1_I2D_FP 117 +# define ASN1_F_ASN1_ITEM_D2I_FP 206 +# define ASN1_F_ASN1_ITEM_DUP 191 +# define ASN1_F_ASN1_ITEM_EMBED_D2I 120 +# define ASN1_F_ASN1_ITEM_EMBED_NEW 121 +# define ASN1_F_ASN1_ITEM_FLAGS_I2D 118 +# define ASN1_F_ASN1_ITEM_I2D_BIO 192 +# define ASN1_F_ASN1_ITEM_I2D_FP 193 +# define ASN1_F_ASN1_ITEM_PACK 198 +# define ASN1_F_ASN1_ITEM_SIGN 195 +# define ASN1_F_ASN1_ITEM_SIGN_CTX 220 +# define ASN1_F_ASN1_ITEM_UNPACK 199 +# define ASN1_F_ASN1_ITEM_VERIFY 197 +# define ASN1_F_ASN1_MBSTRING_NCOPY 122 +# define ASN1_F_ASN1_OBJECT_NEW 123 +# define ASN1_F_ASN1_OUTPUT_DATA 214 +# define ASN1_F_ASN1_PCTX_NEW 205 +# define ASN1_F_ASN1_PRIMITIVE_NEW 119 +# define ASN1_F_ASN1_SCTX_NEW 221 +# define ASN1_F_ASN1_SIGN 128 +# define ASN1_F_ASN1_STR2TYPE 179 +# define ASN1_F_ASN1_STRING_GET_INT64 227 +# define ASN1_F_ASN1_STRING_GET_UINT64 230 +# define ASN1_F_ASN1_STRING_SET 186 +# define ASN1_F_ASN1_STRING_TABLE_ADD 129 +# define ASN1_F_ASN1_STRING_TO_BN 228 +# define ASN1_F_ASN1_STRING_TYPE_NEW 130 +# define ASN1_F_ASN1_TEMPLATE_EX_D2I 132 +# define ASN1_F_ASN1_TEMPLATE_NEW 133 +# define ASN1_F_ASN1_TEMPLATE_NOEXP_D2I 131 +# define ASN1_F_ASN1_TIME_ADJ 217 +# define ASN1_F_ASN1_TYPE_GET_INT_OCTETSTRING 134 +# define ASN1_F_ASN1_TYPE_GET_OCTETSTRING 135 +# define ASN1_F_ASN1_UTCTIME_ADJ 218 +# define ASN1_F_ASN1_VERIFY 137 +# define ASN1_F_B64_READ_ASN1 209 +# define ASN1_F_B64_WRITE_ASN1 210 +# define ASN1_F_BIO_NEW_NDEF 208 +# define ASN1_F_BITSTR_CB 180 +# define ASN1_F_BN_TO_ASN1_STRING 229 +# define ASN1_F_C2I_ASN1_BIT_STRING 189 +# define ASN1_F_C2I_ASN1_INTEGER 194 +# define ASN1_F_C2I_ASN1_OBJECT 196 +# define ASN1_F_C2I_IBUF 226 +# define ASN1_F_C2I_UINT64_INT 101 +# define ASN1_F_COLLECT_DATA 140 +# define ASN1_F_D2I_ASN1_OBJECT 147 +# define ASN1_F_D2I_ASN1_UINTEGER 150 +# define ASN1_F_D2I_AUTOPRIVATEKEY 207 +# define ASN1_F_D2I_PRIVATEKEY 154 +# define ASN1_F_D2I_PUBLICKEY 155 +# define ASN1_F_DO_BUF 142 +# define ASN1_F_DO_CREATE 124 +# define ASN1_F_DO_DUMP 125 +# define ASN1_F_DO_TCREATE 222 +# define ASN1_F_I2A_ASN1_OBJECT 126 +# define ASN1_F_I2D_ASN1_BIO_STREAM 211 +# define ASN1_F_I2D_ASN1_OBJECT 143 +# define ASN1_F_I2D_DSA_PUBKEY 161 +# define ASN1_F_I2D_EC_PUBKEY 181 +# define ASN1_F_I2D_PRIVATEKEY 163 +# define ASN1_F_I2D_PUBLICKEY 164 +# define ASN1_F_I2D_RSA_PUBKEY 165 +# define ASN1_F_LONG_C2I 166 +# define ASN1_F_NDEF_PREFIX 127 +# define ASN1_F_NDEF_SUFFIX 136 +# define ASN1_F_OID_MODULE_INIT 174 +# define ASN1_F_PARSE_TAGGING 182 +# define ASN1_F_PKCS5_PBE2_SET_IV 167 +# define ASN1_F_PKCS5_PBE2_SET_SCRYPT 231 +# define ASN1_F_PKCS5_PBE_SET 202 +# define ASN1_F_PKCS5_PBE_SET0_ALGOR 215 +# define ASN1_F_PKCS5_PBKDF2_SET 219 +# define ASN1_F_PKCS5_SCRYPT_SET 232 +# define ASN1_F_SMIME_READ_ASN1 212 +# define ASN1_F_SMIME_TEXT 213 +# define ASN1_F_STABLE_GET 138 +# define ASN1_F_STBL_MODULE_INIT 223 +# define ASN1_F_UINT32_C2I 105 +# define ASN1_F_UINT32_NEW 139 +# define ASN1_F_UINT64_C2I 112 +# define ASN1_F_UINT64_NEW 141 +# define ASN1_F_X509_CRL_ADD0_REVOKED 169 +# define ASN1_F_X509_INFO_NEW 170 +# define ASN1_F_X509_NAME_ENCODE 203 +# define ASN1_F_X509_NAME_EX_D2I 158 +# define ASN1_F_X509_NAME_EX_NEW 171 +# define ASN1_F_X509_PKEY_NEW 173 + +/* + * ASN1 reason codes. + */ +# define ASN1_R_ADDING_OBJECT 171 +# define ASN1_R_ASN1_PARSE_ERROR 203 +# define ASN1_R_ASN1_SIG_PARSE_ERROR 204 +# define ASN1_R_AUX_ERROR 100 +# define ASN1_R_BAD_OBJECT_HEADER 102 +# define ASN1_R_BMPSTRING_IS_WRONG_LENGTH 214 +# define ASN1_R_BN_LIB 105 +# define ASN1_R_BOOLEAN_IS_WRONG_LENGTH 106 +# define ASN1_R_BUFFER_TOO_SMALL 107 +# define ASN1_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER 108 +# define ASN1_R_CONTEXT_NOT_INITIALISED 217 +# define ASN1_R_DATA_IS_WRONG 109 +# define ASN1_R_DECODE_ERROR 110 +# define ASN1_R_DEPTH_EXCEEDED 174 +# define ASN1_R_DIGEST_AND_KEY_TYPE_NOT_SUPPORTED 198 +# define ASN1_R_ENCODE_ERROR 112 +# define ASN1_R_ERROR_GETTING_TIME 173 +# define ASN1_R_ERROR_LOADING_SECTION 172 +# define ASN1_R_ERROR_SETTING_CIPHER_PARAMS 114 +# define ASN1_R_EXPECTING_AN_INTEGER 115 +# define ASN1_R_EXPECTING_AN_OBJECT 116 +# define ASN1_R_EXPLICIT_LENGTH_MISMATCH 119 +# define ASN1_R_EXPLICIT_TAG_NOT_CONSTRUCTED 120 +# define ASN1_R_FIELD_MISSING 121 +# define ASN1_R_FIRST_NUM_TOO_LARGE 122 +# define ASN1_R_HEADER_TOO_LONG 123 +# define ASN1_R_ILLEGAL_BITSTRING_FORMAT 175 +# define ASN1_R_ILLEGAL_BOOLEAN 176 +# define ASN1_R_ILLEGAL_CHARACTERS 124 +# define ASN1_R_ILLEGAL_FORMAT 177 +# define ASN1_R_ILLEGAL_HEX 178 +# define ASN1_R_ILLEGAL_IMPLICIT_TAG 179 +# define ASN1_R_ILLEGAL_INTEGER 180 +# define ASN1_R_ILLEGAL_NEGATIVE_VALUE 226 +# define ASN1_R_ILLEGAL_NESTED_TAGGING 181 +# define ASN1_R_ILLEGAL_NULL 125 +# define ASN1_R_ILLEGAL_NULL_VALUE 182 +# define ASN1_R_ILLEGAL_OBJECT 183 +# define ASN1_R_ILLEGAL_OPTIONAL_ANY 126 +# define ASN1_R_ILLEGAL_OPTIONS_ON_ITEM_TEMPLATE 170 +# define ASN1_R_ILLEGAL_PADDING 221 +# define ASN1_R_ILLEGAL_TAGGED_ANY 127 +# define ASN1_R_ILLEGAL_TIME_VALUE 184 +# define ASN1_R_ILLEGAL_ZERO_CONTENT 222 +# define ASN1_R_INTEGER_NOT_ASCII_FORMAT 185 +# define ASN1_R_INTEGER_TOO_LARGE_FOR_LONG 128 +# define ASN1_R_INVALID_BIT_STRING_BITS_LEFT 220 +# define ASN1_R_INVALID_BMPSTRING_LENGTH 129 +# define ASN1_R_INVALID_DIGIT 130 +# define ASN1_R_INVALID_MIME_TYPE 205 +# define ASN1_R_INVALID_MODIFIER 186 +# define ASN1_R_INVALID_NUMBER 187 +# define ASN1_R_INVALID_OBJECT_ENCODING 216 +# define ASN1_R_INVALID_SCRYPT_PARAMETERS 227 +# define ASN1_R_INVALID_SEPARATOR 131 +# define ASN1_R_INVALID_STRING_TABLE_VALUE 218 +# define ASN1_R_INVALID_UNIVERSALSTRING_LENGTH 133 +# define ASN1_R_INVALID_UTF8STRING 134 +# define ASN1_R_INVALID_VALUE 219 +# define ASN1_R_LIST_ERROR 188 +# define ASN1_R_MIME_NO_CONTENT_TYPE 206 +# define ASN1_R_MIME_PARSE_ERROR 207 +# define ASN1_R_MIME_SIG_PARSE_ERROR 208 +# define ASN1_R_MISSING_EOC 137 +# define ASN1_R_MISSING_SECOND_NUMBER 138 +# define ASN1_R_MISSING_VALUE 189 +# define ASN1_R_MSTRING_NOT_UNIVERSAL 139 +# define ASN1_R_MSTRING_WRONG_TAG 140 +# define ASN1_R_NESTED_ASN1_STRING 197 +# define ASN1_R_NESTED_TOO_DEEP 201 +# define ASN1_R_NON_HEX_CHARACTERS 141 +# define ASN1_R_NOT_ASCII_FORMAT 190 +# define ASN1_R_NOT_ENOUGH_DATA 142 +# define ASN1_R_NO_CONTENT_TYPE 209 +# define ASN1_R_NO_MATCHING_CHOICE_TYPE 143 +# define ASN1_R_NO_MULTIPART_BODY_FAILURE 210 +# define ASN1_R_NO_MULTIPART_BOUNDARY 211 +# define ASN1_R_NO_SIG_CONTENT_TYPE 212 +# define ASN1_R_NULL_IS_WRONG_LENGTH 144 +# define ASN1_R_OBJECT_NOT_ASCII_FORMAT 191 +# define ASN1_R_ODD_NUMBER_OF_CHARS 145 +# define ASN1_R_SECOND_NUMBER_TOO_LARGE 147 +# define ASN1_R_SEQUENCE_LENGTH_MISMATCH 148 +# define ASN1_R_SEQUENCE_NOT_CONSTRUCTED 149 +# define ASN1_R_SEQUENCE_OR_SET_NEEDS_CONFIG 192 +# define ASN1_R_SHORT_LINE 150 +# define ASN1_R_SIG_INVALID_MIME_TYPE 213 +# define ASN1_R_STREAMING_NOT_SUPPORTED 202 +# define ASN1_R_STRING_TOO_LONG 151 +# define ASN1_R_STRING_TOO_SHORT 152 +# define ASN1_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD 154 +# define ASN1_R_TIME_NOT_ASCII_FORMAT 193 +# define ASN1_R_TOO_LARGE 223 +# define ASN1_R_TOO_LONG 155 +# define ASN1_R_TOO_SMALL 224 +# define ASN1_R_TYPE_NOT_CONSTRUCTED 156 +# define ASN1_R_TYPE_NOT_PRIMITIVE 195 +# define ASN1_R_UNEXPECTED_EOC 159 +# define ASN1_R_UNIVERSALSTRING_IS_WRONG_LENGTH 215 +# define ASN1_R_UNKNOWN_FORMAT 160 +# define ASN1_R_UNKNOWN_MESSAGE_DIGEST_ALGORITHM 161 +# define ASN1_R_UNKNOWN_OBJECT_TYPE 162 +# define ASN1_R_UNKNOWN_PUBLIC_KEY_TYPE 163 +# define ASN1_R_UNKNOWN_SIGNATURE_ALGORITHM 199 +# define ASN1_R_UNKNOWN_TAG 194 +# define ASN1_R_UNSUPPORTED_ANY_DEFINED_BY_TYPE 164 +# define ASN1_R_UNSUPPORTED_CIPHER 228 +# define ASN1_R_UNSUPPORTED_PUBLIC_KEY_TYPE 167 +# define ASN1_R_UNSUPPORTED_TYPE 196 +# define ASN1_R_WRONG_INTEGER_TYPE 225 +# define ASN1_R_WRONG_PUBLIC_KEY_TYPE 200 +# define ASN1_R_WRONG_TAG 168 + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/asn1t.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/asn1t.h new file mode 100644 index 00000000..a450ba0d --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/asn1t.h @@ -0,0 +1,945 @@ +/* + * Copyright 2000-2016 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_ASN1T_H +# define HEADER_ASN1T_H + +# include +# include +# include + +# ifdef OPENSSL_BUILD_SHLIBCRYPTO +# undef OPENSSL_EXTERN +# define OPENSSL_EXTERN OPENSSL_EXPORT +# endif + +/* ASN1 template defines, structures and functions */ + +#ifdef __cplusplus +extern "C" { +#endif + +# ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION + +/* Macro to obtain ASN1_ADB pointer from a type (only used internally) */ +# define ASN1_ADB_ptr(iptr) ((const ASN1_ADB *)(iptr)) + +/* Macros for start and end of ASN1_ITEM definition */ + +# define ASN1_ITEM_start(itname) \ + const ASN1_ITEM itname##_it = { + +# define static_ASN1_ITEM_start(itname) \ + static const ASN1_ITEM itname##_it = { + +# define ASN1_ITEM_end(itname) \ + }; + +# else + +/* Macro to obtain ASN1_ADB pointer from a type (only used internally) */ +# define ASN1_ADB_ptr(iptr) ((const ASN1_ADB *)((iptr)())) + +/* Macros for start and end of ASN1_ITEM definition */ + +# define ASN1_ITEM_start(itname) \ + const ASN1_ITEM * itname##_it(void) \ + { \ + static const ASN1_ITEM local_it = { + +# define static_ASN1_ITEM_start(itname) \ + static ASN1_ITEM_start(itname) + +# define ASN1_ITEM_end(itname) \ + }; \ + return &local_it; \ + } + +# endif + +/* Macros to aid ASN1 template writing */ + +# define ASN1_ITEM_TEMPLATE(tname) \ + static const ASN1_TEMPLATE tname##_item_tt + +# define ASN1_ITEM_TEMPLATE_END(tname) \ + ;\ + ASN1_ITEM_start(tname) \ + ASN1_ITYPE_PRIMITIVE,\ + -1,\ + &tname##_item_tt,\ + 0,\ + NULL,\ + 0,\ + #tname \ + ASN1_ITEM_end(tname) +# define static_ASN1_ITEM_TEMPLATE_END(tname) \ + ;\ + static_ASN1_ITEM_start(tname) \ + ASN1_ITYPE_PRIMITIVE,\ + -1,\ + &tname##_item_tt,\ + 0,\ + NULL,\ + 0,\ + #tname \ + ASN1_ITEM_end(tname) + +/* This is a ASN1 type which just embeds a template */ + +/*- + * This pair helps declare a SEQUENCE. We can do: + * + * ASN1_SEQUENCE(stname) = { + * ... SEQUENCE components ... + * } ASN1_SEQUENCE_END(stname) + * + * This will produce an ASN1_ITEM called stname_it + * for a structure called stname. + * + * If you want the same structure but a different + * name then use: + * + * ASN1_SEQUENCE(itname) = { + * ... SEQUENCE components ... + * } ASN1_SEQUENCE_END_name(stname, itname) + * + * This will create an item called itname_it using + * a structure called stname. + */ + +# define ASN1_SEQUENCE(tname) \ + static const ASN1_TEMPLATE tname##_seq_tt[] + +# define ASN1_SEQUENCE_END(stname) ASN1_SEQUENCE_END_name(stname, stname) + +# define static_ASN1_SEQUENCE_END(stname) static_ASN1_SEQUENCE_END_name(stname, stname) + +# define ASN1_SEQUENCE_END_name(stname, tname) \ + ;\ + ASN1_ITEM_start(tname) \ + ASN1_ITYPE_SEQUENCE,\ + V_ASN1_SEQUENCE,\ + tname##_seq_tt,\ + sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ + NULL,\ + sizeof(stname),\ + #tname \ + ASN1_ITEM_end(tname) + +# define static_ASN1_SEQUENCE_END_name(stname, tname) \ + ;\ + static_ASN1_ITEM_start(tname) \ + ASN1_ITYPE_SEQUENCE,\ + V_ASN1_SEQUENCE,\ + tname##_seq_tt,\ + sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ + NULL,\ + sizeof(stname),\ + #stname \ + ASN1_ITEM_end(tname) + +# define ASN1_NDEF_SEQUENCE(tname) \ + ASN1_SEQUENCE(tname) + +# define ASN1_NDEF_SEQUENCE_cb(tname, cb) \ + ASN1_SEQUENCE_cb(tname, cb) + +# define ASN1_SEQUENCE_cb(tname, cb) \ + static const ASN1_AUX tname##_aux = {NULL, 0, 0, 0, cb, 0}; \ + ASN1_SEQUENCE(tname) + +# define ASN1_BROKEN_SEQUENCE(tname) \ + static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_BROKEN, 0, 0, 0, 0}; \ + ASN1_SEQUENCE(tname) + +# define ASN1_SEQUENCE_ref(tname, cb) \ + static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_REFCOUNT, offsetof(tname, references), offsetof(tname, lock), cb, 0}; \ + ASN1_SEQUENCE(tname) + +# define ASN1_SEQUENCE_enc(tname, enc, cb) \ + static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_ENCODING, 0, 0, cb, offsetof(tname, enc)}; \ + ASN1_SEQUENCE(tname) + +# define ASN1_NDEF_SEQUENCE_END(tname) \ + ;\ + ASN1_ITEM_start(tname) \ + ASN1_ITYPE_NDEF_SEQUENCE,\ + V_ASN1_SEQUENCE,\ + tname##_seq_tt,\ + sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ + NULL,\ + sizeof(tname),\ + #tname \ + ASN1_ITEM_end(tname) +# define static_ASN1_NDEF_SEQUENCE_END(tname) \ + ;\ + static_ASN1_ITEM_start(tname) \ + ASN1_ITYPE_NDEF_SEQUENCE,\ + V_ASN1_SEQUENCE,\ + tname##_seq_tt,\ + sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ + NULL,\ + sizeof(tname),\ + #tname \ + ASN1_ITEM_end(tname) + +# define ASN1_BROKEN_SEQUENCE_END(stname) ASN1_SEQUENCE_END_ref(stname, stname) +# define static_ASN1_BROKEN_SEQUENCE_END(stname) \ + static_ASN1_SEQUENCE_END_ref(stname, stname) + +# define ASN1_SEQUENCE_END_enc(stname, tname) ASN1_SEQUENCE_END_ref(stname, tname) + +# define ASN1_SEQUENCE_END_cb(stname, tname) ASN1_SEQUENCE_END_ref(stname, tname) +# define static_ASN1_SEQUENCE_END_cb(stname, tname) static_ASN1_SEQUENCE_END_ref(stname, tname) + +# define ASN1_SEQUENCE_END_ref(stname, tname) \ + ;\ + ASN1_ITEM_start(tname) \ + ASN1_ITYPE_SEQUENCE,\ + V_ASN1_SEQUENCE,\ + tname##_seq_tt,\ + sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ + &tname##_aux,\ + sizeof(stname),\ + #tname \ + ASN1_ITEM_end(tname) +# define static_ASN1_SEQUENCE_END_ref(stname, tname) \ + ;\ + static_ASN1_ITEM_start(tname) \ + ASN1_ITYPE_SEQUENCE,\ + V_ASN1_SEQUENCE,\ + tname##_seq_tt,\ + sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ + &tname##_aux,\ + sizeof(stname),\ + #stname \ + ASN1_ITEM_end(tname) + +# define ASN1_NDEF_SEQUENCE_END_cb(stname, tname) \ + ;\ + ASN1_ITEM_start(tname) \ + ASN1_ITYPE_NDEF_SEQUENCE,\ + V_ASN1_SEQUENCE,\ + tname##_seq_tt,\ + sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ + &tname##_aux,\ + sizeof(stname),\ + #stname \ + ASN1_ITEM_end(tname) + +/*- + * This pair helps declare a CHOICE type. We can do: + * + * ASN1_CHOICE(chname) = { + * ... CHOICE options ... + * ASN1_CHOICE_END(chname) + * + * This will produce an ASN1_ITEM called chname_it + * for a structure called chname. The structure + * definition must look like this: + * typedef struct { + * int type; + * union { + * ASN1_SOMETHING *opt1; + * ASN1_SOMEOTHER *opt2; + * } value; + * } chname; + * + * the name of the selector must be 'type'. + * to use an alternative selector name use the + * ASN1_CHOICE_END_selector() version. + */ + +# define ASN1_CHOICE(tname) \ + static const ASN1_TEMPLATE tname##_ch_tt[] + +# define ASN1_CHOICE_cb(tname, cb) \ + static const ASN1_AUX tname##_aux = {NULL, 0, 0, 0, cb, 0}; \ + ASN1_CHOICE(tname) + +# define ASN1_CHOICE_END(stname) ASN1_CHOICE_END_name(stname, stname) + +# define static_ASN1_CHOICE_END(stname) static_ASN1_CHOICE_END_name(stname, stname) + +# define ASN1_CHOICE_END_name(stname, tname) ASN1_CHOICE_END_selector(stname, tname, type) + +# define static_ASN1_CHOICE_END_name(stname, tname) static_ASN1_CHOICE_END_selector(stname, tname, type) + +# define ASN1_CHOICE_END_selector(stname, tname, selname) \ + ;\ + ASN1_ITEM_start(tname) \ + ASN1_ITYPE_CHOICE,\ + offsetof(stname,selname) ,\ + tname##_ch_tt,\ + sizeof(tname##_ch_tt) / sizeof(ASN1_TEMPLATE),\ + NULL,\ + sizeof(stname),\ + #stname \ + ASN1_ITEM_end(tname) + +# define static_ASN1_CHOICE_END_selector(stname, tname, selname) \ + ;\ + static_ASN1_ITEM_start(tname) \ + ASN1_ITYPE_CHOICE,\ + offsetof(stname,selname) ,\ + tname##_ch_tt,\ + sizeof(tname##_ch_tt) / sizeof(ASN1_TEMPLATE),\ + NULL,\ + sizeof(stname),\ + #stname \ + ASN1_ITEM_end(tname) + +# define ASN1_CHOICE_END_cb(stname, tname, selname) \ + ;\ + ASN1_ITEM_start(tname) \ + ASN1_ITYPE_CHOICE,\ + offsetof(stname,selname) ,\ + tname##_ch_tt,\ + sizeof(tname##_ch_tt) / sizeof(ASN1_TEMPLATE),\ + &tname##_aux,\ + sizeof(stname),\ + #stname \ + ASN1_ITEM_end(tname) + +/* This helps with the template wrapper form of ASN1_ITEM */ + +# define ASN1_EX_TEMPLATE_TYPE(flags, tag, name, type) { \ + (flags), (tag), 0,\ + #name, ASN1_ITEM_ref(type) } + +/* These help with SEQUENCE or CHOICE components */ + +/* used to declare other types */ + +# define ASN1_EX_TYPE(flags, tag, stname, field, type) { \ + (flags), (tag), offsetof(stname, field),\ + #field, ASN1_ITEM_ref(type) } + +/* implicit and explicit helper macros */ + +# define ASN1_IMP_EX(stname, field, type, tag, ex) \ + ASN1_EX_TYPE(ASN1_TFLG_IMPLICIT | (ex), tag, stname, field, type) + +# define ASN1_EXP_EX(stname, field, type, tag, ex) \ + ASN1_EX_TYPE(ASN1_TFLG_EXPLICIT | (ex), tag, stname, field, type) + +/* Any defined by macros: the field used is in the table itself */ + +# ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION +# define ASN1_ADB_OBJECT(tblname) { ASN1_TFLG_ADB_OID, -1, 0, #tblname, (const ASN1_ITEM *)&(tblname##_adb) } +# define ASN1_ADB_INTEGER(tblname) { ASN1_TFLG_ADB_INT, -1, 0, #tblname, (const ASN1_ITEM *)&(tblname##_adb) } +# else +# define ASN1_ADB_OBJECT(tblname) { ASN1_TFLG_ADB_OID, -1, 0, #tblname, tblname##_adb } +# define ASN1_ADB_INTEGER(tblname) { ASN1_TFLG_ADB_INT, -1, 0, #tblname, tblname##_adb } +# endif +/* Plain simple type */ +# define ASN1_SIMPLE(stname, field, type) ASN1_EX_TYPE(0,0, stname, field, type) +/* Embedded simple type */ +# define ASN1_EMBED(stname, field, type) ASN1_EX_TYPE(ASN1_TFLG_EMBED,0, stname, field, type) + +/* OPTIONAL simple type */ +# define ASN1_OPT(stname, field, type) ASN1_EX_TYPE(ASN1_TFLG_OPTIONAL, 0, stname, field, type) +# define ASN1_OPT_EMBED(stname, field, type) ASN1_EX_TYPE(ASN1_TFLG_OPTIONAL|ASN1_TFLG_EMBED, 0, stname, field, type) + +/* IMPLICIT tagged simple type */ +# define ASN1_IMP(stname, field, type, tag) ASN1_IMP_EX(stname, field, type, tag, 0) +# define ASN1_IMP_EMBED(stname, field, type, tag) ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_EMBED) + +/* IMPLICIT tagged OPTIONAL simple type */ +# define ASN1_IMP_OPT(stname, field, type, tag) ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL) +# define ASN1_IMP_OPT_EMBED(stname, field, type, tag) ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL|ASN1_TFLG_EMBED) + +/* Same as above but EXPLICIT */ + +# define ASN1_EXP(stname, field, type, tag) ASN1_EXP_EX(stname, field, type, tag, 0) +# define ASN1_EXP_EMBED(stname, field, type, tag) ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_EMBED) +# define ASN1_EXP_OPT(stname, field, type, tag) ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL) +# define ASN1_EXP_OPT_EMBED(stname, field, type, tag) ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL|ASN1_TFLG_EMBED) + +/* SEQUENCE OF type */ +# define ASN1_SEQUENCE_OF(stname, field, type) \ + ASN1_EX_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, stname, field, type) + +/* OPTIONAL SEQUENCE OF */ +# define ASN1_SEQUENCE_OF_OPT(stname, field, type) \ + ASN1_EX_TYPE(ASN1_TFLG_SEQUENCE_OF|ASN1_TFLG_OPTIONAL, 0, stname, field, type) + +/* Same as above but for SET OF */ + +# define ASN1_SET_OF(stname, field, type) \ + ASN1_EX_TYPE(ASN1_TFLG_SET_OF, 0, stname, field, type) + +# define ASN1_SET_OF_OPT(stname, field, type) \ + ASN1_EX_TYPE(ASN1_TFLG_SET_OF|ASN1_TFLG_OPTIONAL, 0, stname, field, type) + +/* Finally compound types of SEQUENCE, SET, IMPLICIT, EXPLICIT and OPTIONAL */ + +# define ASN1_IMP_SET_OF(stname, field, type, tag) \ + ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF) + +# define ASN1_EXP_SET_OF(stname, field, type, tag) \ + ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF) + +# define ASN1_IMP_SET_OF_OPT(stname, field, type, tag) \ + ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF|ASN1_TFLG_OPTIONAL) + +# define ASN1_EXP_SET_OF_OPT(stname, field, type, tag) \ + ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF|ASN1_TFLG_OPTIONAL) + +# define ASN1_IMP_SEQUENCE_OF(stname, field, type, tag) \ + ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF) + +# define ASN1_IMP_SEQUENCE_OF_OPT(stname, field, type, tag) \ + ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF|ASN1_TFLG_OPTIONAL) + +# define ASN1_EXP_SEQUENCE_OF(stname, field, type, tag) \ + ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF) + +# define ASN1_EXP_SEQUENCE_OF_OPT(stname, field, type, tag) \ + ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF|ASN1_TFLG_OPTIONAL) + +/* EXPLICIT using indefinite length constructed form */ +# define ASN1_NDEF_EXP(stname, field, type, tag) \ + ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_NDEF) + +/* EXPLICIT OPTIONAL using indefinite length constructed form */ +# define ASN1_NDEF_EXP_OPT(stname, field, type, tag) \ + ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL|ASN1_TFLG_NDEF) + +/* Macros for the ASN1_ADB structure */ + +# define ASN1_ADB(name) \ + static const ASN1_ADB_TABLE name##_adbtbl[] + +# ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION + +# define ASN1_ADB_END(name, flags, field, adb_cb, def, none) \ + ;\ + static const ASN1_ADB name##_adb = {\ + flags,\ + offsetof(name, field),\ + adb_cb,\ + name##_adbtbl,\ + sizeof(name##_adbtbl) / sizeof(ASN1_ADB_TABLE),\ + def,\ + none\ + } + +# else + +# define ASN1_ADB_END(name, flags, field, adb_cb, def, none) \ + ;\ + static const ASN1_ITEM *name##_adb(void) \ + { \ + static const ASN1_ADB internal_adb = \ + {\ + flags,\ + offsetof(name, field),\ + adb_cb,\ + name##_adbtbl,\ + sizeof(name##_adbtbl) / sizeof(ASN1_ADB_TABLE),\ + def,\ + none\ + }; \ + return (const ASN1_ITEM *) &internal_adb; \ + } \ + void dummy_function(void) + +# endif + +# define ADB_ENTRY(val, template) {val, template} + +# define ASN1_ADB_TEMPLATE(name) \ + static const ASN1_TEMPLATE name##_tt + +/* + * This is the ASN1 template structure that defines a wrapper round the + * actual type. It determines the actual position of the field in the value + * structure, various flags such as OPTIONAL and the field name. + */ + +struct ASN1_TEMPLATE_st { + unsigned long flags; /* Various flags */ + long tag; /* tag, not used if no tagging */ + unsigned long offset; /* Offset of this field in structure */ + const char *field_name; /* Field name */ + ASN1_ITEM_EXP *item; /* Relevant ASN1_ITEM or ASN1_ADB */ +}; + +/* Macro to extract ASN1_ITEM and ASN1_ADB pointer from ASN1_TEMPLATE */ + +# define ASN1_TEMPLATE_item(t) (t->item_ptr) +# define ASN1_TEMPLATE_adb(t) (t->item_ptr) + +typedef struct ASN1_ADB_TABLE_st ASN1_ADB_TABLE; +typedef struct ASN1_ADB_st ASN1_ADB; + +struct ASN1_ADB_st { + unsigned long flags; /* Various flags */ + unsigned long offset; /* Offset of selector field */ + int (*adb_cb)(long *psel); /* Application callback */ + const ASN1_ADB_TABLE *tbl; /* Table of possible types */ + long tblcount; /* Number of entries in tbl */ + const ASN1_TEMPLATE *default_tt; /* Type to use if no match */ + const ASN1_TEMPLATE *null_tt; /* Type to use if selector is NULL */ +}; + +struct ASN1_ADB_TABLE_st { + long value; /* NID for an object or value for an int */ + const ASN1_TEMPLATE tt; /* item for this value */ +}; + +/* template flags */ + +/* Field is optional */ +# define ASN1_TFLG_OPTIONAL (0x1) + +/* Field is a SET OF */ +# define ASN1_TFLG_SET_OF (0x1 << 1) + +/* Field is a SEQUENCE OF */ +# define ASN1_TFLG_SEQUENCE_OF (0x2 << 1) + +/* + * Special case: this refers to a SET OF that will be sorted into DER order + * when encoded *and* the corresponding STACK will be modified to match the + * new order. + */ +# define ASN1_TFLG_SET_ORDER (0x3 << 1) + +/* Mask for SET OF or SEQUENCE OF */ +# define ASN1_TFLG_SK_MASK (0x3 << 1) + +/* + * These flags mean the tag should be taken from the tag field. If EXPLICIT + * then the underlying type is used for the inner tag. + */ + +/* IMPLICIT tagging */ +# define ASN1_TFLG_IMPTAG (0x1 << 3) + +/* EXPLICIT tagging, inner tag from underlying type */ +# define ASN1_TFLG_EXPTAG (0x2 << 3) + +# define ASN1_TFLG_TAG_MASK (0x3 << 3) + +/* context specific IMPLICIT */ +# define ASN1_TFLG_IMPLICIT (ASN1_TFLG_IMPTAG|ASN1_TFLG_CONTEXT) + +/* context specific EXPLICIT */ +# define ASN1_TFLG_EXPLICIT (ASN1_TFLG_EXPTAG|ASN1_TFLG_CONTEXT) + +/* + * If tagging is in force these determine the type of tag to use. Otherwise + * the tag is determined by the underlying type. These values reflect the + * actual octet format. + */ + +/* Universal tag */ +# define ASN1_TFLG_UNIVERSAL (0x0<<6) +/* Application tag */ +# define ASN1_TFLG_APPLICATION (0x1<<6) +/* Context specific tag */ +# define ASN1_TFLG_CONTEXT (0x2<<6) +/* Private tag */ +# define ASN1_TFLG_PRIVATE (0x3<<6) + +# define ASN1_TFLG_TAG_CLASS (0x3<<6) + +/* + * These are for ANY DEFINED BY type. In this case the 'item' field points to + * an ASN1_ADB structure which contains a table of values to decode the + * relevant type + */ + +# define ASN1_TFLG_ADB_MASK (0x3<<8) + +# define ASN1_TFLG_ADB_OID (0x1<<8) + +# define ASN1_TFLG_ADB_INT (0x1<<9) + +/* + * This flag when present in a SEQUENCE OF, SET OF or EXPLICIT causes + * indefinite length constructed encoding to be used if required. + */ + +# define ASN1_TFLG_NDEF (0x1<<11) + +/* Field is embedded and not a pointer */ +# define ASN1_TFLG_EMBED (0x1 << 12) + +/* This is the actual ASN1 item itself */ + +struct ASN1_ITEM_st { + char itype; /* The item type, primitive, SEQUENCE, CHOICE + * or extern */ + long utype; /* underlying type */ + const ASN1_TEMPLATE *templates; /* If SEQUENCE or CHOICE this contains + * the contents */ + long tcount; /* Number of templates if SEQUENCE or CHOICE */ + const void *funcs; /* functions that handle this type */ + long size; /* Structure size (usually) */ + const char *sname; /* Structure name */ +}; + +/*- + * These are values for the itype field and + * determine how the type is interpreted. + * + * For PRIMITIVE types the underlying type + * determines the behaviour if items is NULL. + * + * Otherwise templates must contain a single + * template and the type is treated in the + * same way as the type specified in the template. + * + * For SEQUENCE types the templates field points + * to the members, the size field is the + * structure size. + * + * For CHOICE types the templates field points + * to each possible member (typically a union) + * and the 'size' field is the offset of the + * selector. + * + * The 'funcs' field is used for application + * specific functions. + * + * The EXTERN type uses a new style d2i/i2d. + * The new style should be used where possible + * because it avoids things like the d2i IMPLICIT + * hack. + * + * MSTRING is a multiple string type, it is used + * for a CHOICE of character strings where the + * actual strings all occupy an ASN1_STRING + * structure. In this case the 'utype' field + * has a special meaning, it is used as a mask + * of acceptable types using the B_ASN1 constants. + * + * NDEF_SEQUENCE is the same as SEQUENCE except + * that it will use indefinite length constructed + * encoding if requested. + * + */ + +# define ASN1_ITYPE_PRIMITIVE 0x0 + +# define ASN1_ITYPE_SEQUENCE 0x1 + +# define ASN1_ITYPE_CHOICE 0x2 + +# define ASN1_ITYPE_EXTERN 0x4 + +# define ASN1_ITYPE_MSTRING 0x5 + +# define ASN1_ITYPE_NDEF_SEQUENCE 0x6 + +/* + * Cache for ASN1 tag and length, so we don't keep re-reading it for things + * like CHOICE + */ + +struct ASN1_TLC_st { + char valid; /* Values below are valid */ + int ret; /* return value */ + long plen; /* length */ + int ptag; /* class value */ + int pclass; /* class value */ + int hdrlen; /* header length */ +}; + +/* Typedefs for ASN1 function pointers */ +typedef int ASN1_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, + const ASN1_ITEM *it, int tag, int aclass, char opt, + ASN1_TLC *ctx); + +typedef int ASN1_ex_i2d(ASN1_VALUE **pval, unsigned char **out, + const ASN1_ITEM *it, int tag, int aclass); +typedef int ASN1_ex_new_func(ASN1_VALUE **pval, const ASN1_ITEM *it); +typedef void ASN1_ex_free_func(ASN1_VALUE **pval, const ASN1_ITEM *it); + +typedef int ASN1_ex_print_func(BIO *out, ASN1_VALUE **pval, + int indent, const char *fname, + const ASN1_PCTX *pctx); + +typedef int ASN1_primitive_i2c(ASN1_VALUE **pval, unsigned char *cont, + int *putype, const ASN1_ITEM *it); +typedef int ASN1_primitive_c2i(ASN1_VALUE **pval, const unsigned char *cont, + int len, int utype, char *free_cont, + const ASN1_ITEM *it); +typedef int ASN1_primitive_print(BIO *out, ASN1_VALUE **pval, + const ASN1_ITEM *it, int indent, + const ASN1_PCTX *pctx); + +typedef struct ASN1_EXTERN_FUNCS_st { + void *app_data; + ASN1_ex_new_func *asn1_ex_new; + ASN1_ex_free_func *asn1_ex_free; + ASN1_ex_free_func *asn1_ex_clear; + ASN1_ex_d2i *asn1_ex_d2i; + ASN1_ex_i2d *asn1_ex_i2d; + ASN1_ex_print_func *asn1_ex_print; +} ASN1_EXTERN_FUNCS; + +typedef struct ASN1_PRIMITIVE_FUNCS_st { + void *app_data; + unsigned long flags; + ASN1_ex_new_func *prim_new; + ASN1_ex_free_func *prim_free; + ASN1_ex_free_func *prim_clear; + ASN1_primitive_c2i *prim_c2i; + ASN1_primitive_i2c *prim_i2c; + ASN1_primitive_print *prim_print; +} ASN1_PRIMITIVE_FUNCS; + +/* + * This is the ASN1_AUX structure: it handles various miscellaneous + * requirements. For example the use of reference counts and an informational + * callback. The "informational callback" is called at various points during + * the ASN1 encoding and decoding. It can be used to provide minor + * customisation of the structures used. This is most useful where the + * supplied routines *almost* do the right thing but need some extra help at + * a few points. If the callback returns zero then it is assumed a fatal + * error has occurred and the main operation should be abandoned. If major + * changes in the default behaviour are required then an external type is + * more appropriate. + */ + +typedef int ASN1_aux_cb(int operation, ASN1_VALUE **in, const ASN1_ITEM *it, + void *exarg); + +typedef struct ASN1_AUX_st { + void *app_data; + int flags; + int ref_offset; /* Offset of reference value */ + int ref_lock; /* Lock type to use */ + ASN1_aux_cb *asn1_cb; + int enc_offset; /* Offset of ASN1_ENCODING structure */ +} ASN1_AUX; + +/* For print related callbacks exarg points to this structure */ +typedef struct ASN1_PRINT_ARG_st { + BIO *out; + int indent; + const ASN1_PCTX *pctx; +} ASN1_PRINT_ARG; + +/* For streaming related callbacks exarg points to this structure */ +typedef struct ASN1_STREAM_ARG_st { + /* BIO to stream through */ + BIO *out; + /* BIO with filters appended */ + BIO *ndef_bio; + /* Streaming I/O boundary */ + unsigned char **boundary; +} ASN1_STREAM_ARG; + +/* Flags in ASN1_AUX */ + +/* Use a reference count */ +# define ASN1_AFLG_REFCOUNT 1 +/* Save the encoding of structure (useful for signatures) */ +# define ASN1_AFLG_ENCODING 2 +/* The Sequence length is invalid */ +# define ASN1_AFLG_BROKEN 4 + +/* operation values for asn1_cb */ + +# define ASN1_OP_NEW_PRE 0 +# define ASN1_OP_NEW_POST 1 +# define ASN1_OP_FREE_PRE 2 +# define ASN1_OP_FREE_POST 3 +# define ASN1_OP_D2I_PRE 4 +# define ASN1_OP_D2I_POST 5 +# define ASN1_OP_I2D_PRE 6 +# define ASN1_OP_I2D_POST 7 +# define ASN1_OP_PRINT_PRE 8 +# define ASN1_OP_PRINT_POST 9 +# define ASN1_OP_STREAM_PRE 10 +# define ASN1_OP_STREAM_POST 11 +# define ASN1_OP_DETACHED_PRE 12 +# define ASN1_OP_DETACHED_POST 13 + +/* Macro to implement a primitive type */ +# define IMPLEMENT_ASN1_TYPE(stname) IMPLEMENT_ASN1_TYPE_ex(stname, stname, 0) +# define IMPLEMENT_ASN1_TYPE_ex(itname, vname, ex) \ + ASN1_ITEM_start(itname) \ + ASN1_ITYPE_PRIMITIVE, V_##vname, NULL, 0, NULL, ex, #itname \ + ASN1_ITEM_end(itname) + +/* Macro to implement a multi string type */ +# define IMPLEMENT_ASN1_MSTRING(itname, mask) \ + ASN1_ITEM_start(itname) \ + ASN1_ITYPE_MSTRING, mask, NULL, 0, NULL, sizeof(ASN1_STRING), #itname \ + ASN1_ITEM_end(itname) + +# define IMPLEMENT_EXTERN_ASN1(sname, tag, fptrs) \ + ASN1_ITEM_start(sname) \ + ASN1_ITYPE_EXTERN, \ + tag, \ + NULL, \ + 0, \ + &fptrs, \ + 0, \ + #sname \ + ASN1_ITEM_end(sname) + +/* Macro to implement standard functions in terms of ASN1_ITEM structures */ + +# define IMPLEMENT_ASN1_FUNCTIONS(stname) IMPLEMENT_ASN1_FUNCTIONS_fname(stname, stname, stname) + +# define IMPLEMENT_ASN1_FUNCTIONS_name(stname, itname) IMPLEMENT_ASN1_FUNCTIONS_fname(stname, itname, itname) + +# define IMPLEMENT_ASN1_FUNCTIONS_ENCODE_name(stname, itname) \ + IMPLEMENT_ASN1_FUNCTIONS_ENCODE_fname(stname, itname, itname) + +# define IMPLEMENT_STATIC_ASN1_ALLOC_FUNCTIONS(stname) \ + IMPLEMENT_ASN1_ALLOC_FUNCTIONS_pfname(static, stname, stname, stname) + +# define IMPLEMENT_ASN1_ALLOC_FUNCTIONS(stname) \ + IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, stname, stname) + +# define IMPLEMENT_ASN1_ALLOC_FUNCTIONS_pfname(pre, stname, itname, fname) \ + pre stname *fname##_new(void) \ + { \ + return (stname *)ASN1_item_new(ASN1_ITEM_rptr(itname)); \ + } \ + pre void fname##_free(stname *a) \ + { \ + ASN1_item_free((ASN1_VALUE *)a, ASN1_ITEM_rptr(itname)); \ + } + +# define IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, itname, fname) \ + stname *fname##_new(void) \ + { \ + return (stname *)ASN1_item_new(ASN1_ITEM_rptr(itname)); \ + } \ + void fname##_free(stname *a) \ + { \ + ASN1_item_free((ASN1_VALUE *)a, ASN1_ITEM_rptr(itname)); \ + } + +# define IMPLEMENT_ASN1_FUNCTIONS_fname(stname, itname, fname) \ + IMPLEMENT_ASN1_ENCODE_FUNCTIONS_fname(stname, itname, fname) \ + IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, itname, fname) + +# define IMPLEMENT_ASN1_ENCODE_FUNCTIONS_fname(stname, itname, fname) \ + stname *d2i_##fname(stname **a, const unsigned char **in, long len) \ + { \ + return (stname *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, ASN1_ITEM_rptr(itname));\ + } \ + int i2d_##fname(stname *a, unsigned char **out) \ + { \ + return ASN1_item_i2d((ASN1_VALUE *)a, out, ASN1_ITEM_rptr(itname));\ + } + +# define IMPLEMENT_ASN1_NDEF_FUNCTION(stname) \ + int i2d_##stname##_NDEF(stname *a, unsigned char **out) \ + { \ + return ASN1_item_ndef_i2d((ASN1_VALUE *)a, out, ASN1_ITEM_rptr(stname));\ + } + +# define IMPLEMENT_STATIC_ASN1_ENCODE_FUNCTIONS(stname) \ + static stname *d2i_##stname(stname **a, \ + const unsigned char **in, long len) \ + { \ + return (stname *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, \ + ASN1_ITEM_rptr(stname)); \ + } \ + static int i2d_##stname(stname *a, unsigned char **out) \ + { \ + return ASN1_item_i2d((ASN1_VALUE *)a, out, \ + ASN1_ITEM_rptr(stname)); \ + } + +/* + * This includes evil casts to remove const: they will go away when full ASN1 + * constification is done. + */ +# define IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(stname, itname, fname) \ + stname *d2i_##fname(stname **a, const unsigned char **in, long len) \ + { \ + return (stname *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, ASN1_ITEM_rptr(itname));\ + } \ + int i2d_##fname(const stname *a, unsigned char **out) \ + { \ + return ASN1_item_i2d((ASN1_VALUE *)a, out, ASN1_ITEM_rptr(itname));\ + } + +# define IMPLEMENT_ASN1_DUP_FUNCTION(stname) \ + stname * stname##_dup(stname *x) \ + { \ + return ASN1_item_dup(ASN1_ITEM_rptr(stname), x); \ + } + +# define IMPLEMENT_ASN1_PRINT_FUNCTION(stname) \ + IMPLEMENT_ASN1_PRINT_FUNCTION_fname(stname, stname, stname) + +# define IMPLEMENT_ASN1_PRINT_FUNCTION_fname(stname, itname, fname) \ + int fname##_print_ctx(BIO *out, stname *x, int indent, \ + const ASN1_PCTX *pctx) \ + { \ + return ASN1_item_print(out, (ASN1_VALUE *)x, indent, \ + ASN1_ITEM_rptr(itname), pctx); \ + } + +# define IMPLEMENT_ASN1_FUNCTIONS_const(name) \ + IMPLEMENT_ASN1_FUNCTIONS_const_fname(name, name, name) + +# define IMPLEMENT_ASN1_FUNCTIONS_const_fname(stname, itname, fname) \ + IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(stname, itname, fname) \ + IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, itname, fname) + +/* external definitions for primitive types */ + +DECLARE_ASN1_ITEM(ASN1_BOOLEAN) +DECLARE_ASN1_ITEM(ASN1_TBOOLEAN) +DECLARE_ASN1_ITEM(ASN1_FBOOLEAN) +DECLARE_ASN1_ITEM(ASN1_SEQUENCE) +DECLARE_ASN1_ITEM(CBIGNUM) +DECLARE_ASN1_ITEM(BIGNUM) +DECLARE_ASN1_ITEM(INT32) +DECLARE_ASN1_ITEM(ZINT32) +DECLARE_ASN1_ITEM(UINT32) +DECLARE_ASN1_ITEM(ZUINT32) +DECLARE_ASN1_ITEM(INT64) +DECLARE_ASN1_ITEM(ZINT64) +DECLARE_ASN1_ITEM(UINT64) +DECLARE_ASN1_ITEM(ZUINT64) + +# if OPENSSL_API_COMPAT < 0x10200000L +/* + * LONG and ZLONG are strongly discouraged for use as stored data, as the + * underlying C type (long) differs in size depending on the architecture. + * They are designed with 32-bit longs in mind. + */ +DECLARE_ASN1_ITEM(LONG) +DECLARE_ASN1_ITEM(ZLONG) +# endif + +DEFINE_STACK_OF(ASN1_VALUE) + +/* Functions used internally by the ASN1 code */ + +int ASN1_item_ex_new(ASN1_VALUE **pval, const ASN1_ITEM *it); +void ASN1_item_ex_free(ASN1_VALUE **pval, const ASN1_ITEM *it); + +int ASN1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, + const ASN1_ITEM *it, int tag, int aclass, char opt, + ASN1_TLC *ctx); + +int ASN1_item_ex_i2d(ASN1_VALUE **pval, unsigned char **out, + const ASN1_ITEM *it, int tag, int aclass); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/async.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/async.h new file mode 100644 index 00000000..7052b890 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/async.h @@ -0,0 +1,76 @@ +/* + * Copyright 2015-2018 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#include + +#ifndef HEADER_ASYNC_H +# define HEADER_ASYNC_H + +#if defined(_WIN32) +# if defined(BASETYPES) || defined(_WINDEF_H) +/* application has to include to use this */ +#define OSSL_ASYNC_FD HANDLE +#define OSSL_BAD_ASYNC_FD INVALID_HANDLE_VALUE +# endif +#else +#define OSSL_ASYNC_FD int +#define OSSL_BAD_ASYNC_FD -1 +#endif +# include + + +# ifdef __cplusplus +extern "C" { +# endif + +typedef struct async_job_st ASYNC_JOB; +typedef struct async_wait_ctx_st ASYNC_WAIT_CTX; + +#define ASYNC_ERR 0 +#define ASYNC_NO_JOBS 1 +#define ASYNC_PAUSE 2 +#define ASYNC_FINISH 3 + +int ASYNC_init_thread(size_t max_size, size_t init_size); +void ASYNC_cleanup_thread(void); + +#ifdef OSSL_ASYNC_FD +ASYNC_WAIT_CTX *ASYNC_WAIT_CTX_new(void); +void ASYNC_WAIT_CTX_free(ASYNC_WAIT_CTX *ctx); +int ASYNC_WAIT_CTX_set_wait_fd(ASYNC_WAIT_CTX *ctx, const void *key, + OSSL_ASYNC_FD fd, + void *custom_data, + void (*cleanup)(ASYNC_WAIT_CTX *, const void *, + OSSL_ASYNC_FD, void *)); +int ASYNC_WAIT_CTX_get_fd(ASYNC_WAIT_CTX *ctx, const void *key, + OSSL_ASYNC_FD *fd, void **custom_data); +int ASYNC_WAIT_CTX_get_all_fds(ASYNC_WAIT_CTX *ctx, OSSL_ASYNC_FD *fd, + size_t *numfds); +int ASYNC_WAIT_CTX_get_changed_fds(ASYNC_WAIT_CTX *ctx, OSSL_ASYNC_FD *addfd, + size_t *numaddfds, OSSL_ASYNC_FD *delfd, + size_t *numdelfds); +int ASYNC_WAIT_CTX_clear_fd(ASYNC_WAIT_CTX *ctx, const void *key); +#endif + +int ASYNC_is_capable(void); + +int ASYNC_start_job(ASYNC_JOB **job, ASYNC_WAIT_CTX *ctx, int *ret, + int (*func)(void *), void *args, size_t size); +int ASYNC_pause_job(void); + +ASYNC_JOB *ASYNC_get_current_job(void); +ASYNC_WAIT_CTX *ASYNC_get_wait_ctx(ASYNC_JOB *job); +void ASYNC_block_pause(void); +void ASYNC_unblock_pause(void); + + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/asyncerr.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/asyncerr.h new file mode 100644 index 00000000..91afbbb2 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/asyncerr.h @@ -0,0 +1,42 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2019 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_ASYNCERR_H +# define HEADER_ASYNCERR_H + +# ifndef HEADER_SYMHACKS_H +# include +# endif + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_ASYNC_strings(void); + +/* + * ASYNC function codes. + */ +# define ASYNC_F_ASYNC_CTX_NEW 100 +# define ASYNC_F_ASYNC_INIT_THREAD 101 +# define ASYNC_F_ASYNC_JOB_NEW 102 +# define ASYNC_F_ASYNC_PAUSE_JOB 103 +# define ASYNC_F_ASYNC_START_FUNC 104 +# define ASYNC_F_ASYNC_START_JOB 105 +# define ASYNC_F_ASYNC_WAIT_CTX_SET_WAIT_FD 106 + +/* + * ASYNC reason codes. + */ +# define ASYNC_R_FAILED_TO_SET_POOL 101 +# define ASYNC_R_FAILED_TO_SWAP_CONTEXT 102 +# define ASYNC_R_INIT_FAILED 105 +# define ASYNC_R_INVALID_POOL_SIZE 103 + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/bio.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/bio.h new file mode 100644 index 00000000..ae559a51 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/bio.h @@ -0,0 +1,801 @@ +/* + * 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_BIO_H +# define HEADER_BIO_H + +# include + +# ifndef OPENSSL_NO_STDIO +# include +# endif +# include + +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +/* There are the classes of BIOs */ +# define BIO_TYPE_DESCRIPTOR 0x0100 /* socket, fd, connect or accept */ +# define BIO_TYPE_FILTER 0x0200 +# define BIO_TYPE_SOURCE_SINK 0x0400 + +/* These are the 'types' of BIOs */ +# define BIO_TYPE_NONE 0 +# define BIO_TYPE_MEM ( 1|BIO_TYPE_SOURCE_SINK) +# define BIO_TYPE_FILE ( 2|BIO_TYPE_SOURCE_SINK) + +# define BIO_TYPE_FD ( 4|BIO_TYPE_SOURCE_SINK|BIO_TYPE_DESCRIPTOR) +# define BIO_TYPE_SOCKET ( 5|BIO_TYPE_SOURCE_SINK|BIO_TYPE_DESCRIPTOR) +# define BIO_TYPE_NULL ( 6|BIO_TYPE_SOURCE_SINK) +# define BIO_TYPE_SSL ( 7|BIO_TYPE_FILTER) +# define BIO_TYPE_MD ( 8|BIO_TYPE_FILTER) +# define BIO_TYPE_BUFFER ( 9|BIO_TYPE_FILTER) +# define BIO_TYPE_CIPHER (10|BIO_TYPE_FILTER) +# define BIO_TYPE_BASE64 (11|BIO_TYPE_FILTER) +# define BIO_TYPE_CONNECT (12|BIO_TYPE_SOURCE_SINK|BIO_TYPE_DESCRIPTOR) +# define BIO_TYPE_ACCEPT (13|BIO_TYPE_SOURCE_SINK|BIO_TYPE_DESCRIPTOR) + +# define BIO_TYPE_NBIO_TEST (16|BIO_TYPE_FILTER)/* server proxy BIO */ +# define BIO_TYPE_NULL_FILTER (17|BIO_TYPE_FILTER) +# define BIO_TYPE_BIO (19|BIO_TYPE_SOURCE_SINK)/* half a BIO pair */ +# define BIO_TYPE_LINEBUFFER (20|BIO_TYPE_FILTER) +# define BIO_TYPE_DGRAM (21|BIO_TYPE_SOURCE_SINK|BIO_TYPE_DESCRIPTOR) +# define BIO_TYPE_ASN1 (22|BIO_TYPE_FILTER) +# define BIO_TYPE_COMP (23|BIO_TYPE_FILTER) +# ifndef OPENSSL_NO_SCTP +# define BIO_TYPE_DGRAM_SCTP (24|BIO_TYPE_SOURCE_SINK|BIO_TYPE_DESCRIPTOR) +# endif + +#define BIO_TYPE_START 128 + +/* + * BIO_FILENAME_READ|BIO_CLOSE to open or close on free. + * BIO_set_fp(in,stdin,BIO_NOCLOSE); + */ +# define BIO_NOCLOSE 0x00 +# define BIO_CLOSE 0x01 + +/* + * These are used in the following macros and are passed to BIO_ctrl() + */ +# define BIO_CTRL_RESET 1/* opt - rewind/zero etc */ +# define BIO_CTRL_EOF 2/* opt - are we at the eof */ +# define BIO_CTRL_INFO 3/* opt - extra tit-bits */ +# define BIO_CTRL_SET 4/* man - set the 'IO' type */ +# define BIO_CTRL_GET 5/* man - get the 'IO' type */ +# define BIO_CTRL_PUSH 6/* opt - internal, used to signify change */ +# define BIO_CTRL_POP 7/* opt - internal, used to signify change */ +# define BIO_CTRL_GET_CLOSE 8/* man - set the 'close' on free */ +# define BIO_CTRL_SET_CLOSE 9/* man - set the 'close' on free */ +# define BIO_CTRL_PENDING 10/* opt - is their more data buffered */ +# define BIO_CTRL_FLUSH 11/* opt - 'flush' buffered output */ +# define BIO_CTRL_DUP 12/* man - extra stuff for 'duped' BIO */ +# define BIO_CTRL_WPENDING 13/* opt - number of bytes still to write */ +# define BIO_CTRL_SET_CALLBACK 14/* opt - set callback function */ +# define BIO_CTRL_GET_CALLBACK 15/* opt - set callback function */ + +# define BIO_CTRL_PEEK 29/* BIO_f_buffer special */ +# define BIO_CTRL_SET_FILENAME 30/* BIO_s_file special */ + +/* dgram BIO stuff */ +# define BIO_CTRL_DGRAM_CONNECT 31/* BIO dgram special */ +# define BIO_CTRL_DGRAM_SET_CONNECTED 32/* allow for an externally connected + * socket to be passed in */ +# define BIO_CTRL_DGRAM_SET_RECV_TIMEOUT 33/* setsockopt, essentially */ +# define BIO_CTRL_DGRAM_GET_RECV_TIMEOUT 34/* getsockopt, essentially */ +# define BIO_CTRL_DGRAM_SET_SEND_TIMEOUT 35/* setsockopt, essentially */ +# define BIO_CTRL_DGRAM_GET_SEND_TIMEOUT 36/* getsockopt, essentially */ + +# define BIO_CTRL_DGRAM_GET_RECV_TIMER_EXP 37/* flag whether the last */ +# define BIO_CTRL_DGRAM_GET_SEND_TIMER_EXP 38/* I/O operation tiemd out */ + +/* #ifdef IP_MTU_DISCOVER */ +# define BIO_CTRL_DGRAM_MTU_DISCOVER 39/* set DF bit on egress packets */ +/* #endif */ + +# define BIO_CTRL_DGRAM_QUERY_MTU 40/* as kernel for current MTU */ +# define BIO_CTRL_DGRAM_GET_FALLBACK_MTU 47 +# define BIO_CTRL_DGRAM_GET_MTU 41/* get cached value for MTU */ +# define BIO_CTRL_DGRAM_SET_MTU 42/* set cached value for MTU. + * want to use this if asking + * the kernel fails */ + +# define BIO_CTRL_DGRAM_MTU_EXCEEDED 43/* check whether the MTU was + * exceed in the previous write + * operation */ + +# define BIO_CTRL_DGRAM_GET_PEER 46 +# define BIO_CTRL_DGRAM_SET_PEER 44/* Destination for the data */ + +# define BIO_CTRL_DGRAM_SET_NEXT_TIMEOUT 45/* Next DTLS handshake timeout + * to adjust socket timeouts */ +# define BIO_CTRL_DGRAM_SET_DONT_FRAG 48 + +# define BIO_CTRL_DGRAM_GET_MTU_OVERHEAD 49 + +/* Deliberately outside of OPENSSL_NO_SCTP - used in bss_dgram.c */ +# define BIO_CTRL_DGRAM_SCTP_SET_IN_HANDSHAKE 50 +# ifndef OPENSSL_NO_SCTP +/* SCTP stuff */ +# define BIO_CTRL_DGRAM_SCTP_ADD_AUTH_KEY 51 +# define BIO_CTRL_DGRAM_SCTP_NEXT_AUTH_KEY 52 +# define BIO_CTRL_DGRAM_SCTP_AUTH_CCS_RCVD 53 +# define BIO_CTRL_DGRAM_SCTP_GET_SNDINFO 60 +# define BIO_CTRL_DGRAM_SCTP_SET_SNDINFO 61 +# define BIO_CTRL_DGRAM_SCTP_GET_RCVINFO 62 +# define BIO_CTRL_DGRAM_SCTP_SET_RCVINFO 63 +# define BIO_CTRL_DGRAM_SCTP_GET_PRINFO 64 +# define BIO_CTRL_DGRAM_SCTP_SET_PRINFO 65 +# define BIO_CTRL_DGRAM_SCTP_SAVE_SHUTDOWN 70 +# endif + +# define BIO_CTRL_DGRAM_SET_PEEK_MODE 71 + +/* modifiers */ +# define BIO_FP_READ 0x02 +# define BIO_FP_WRITE 0x04 +# define BIO_FP_APPEND 0x08 +# define BIO_FP_TEXT 0x10 + +# define BIO_FLAGS_READ 0x01 +# define BIO_FLAGS_WRITE 0x02 +# define BIO_FLAGS_IO_SPECIAL 0x04 +# define BIO_FLAGS_RWS (BIO_FLAGS_READ|BIO_FLAGS_WRITE|BIO_FLAGS_IO_SPECIAL) +# define BIO_FLAGS_SHOULD_RETRY 0x08 +# ifndef BIO_FLAGS_UPLINK +/* + * "UPLINK" flag denotes file descriptors provided by application. It + * defaults to 0, as most platforms don't require UPLINK interface. + */ +# define BIO_FLAGS_UPLINK 0 +# endif + +# define BIO_FLAGS_BASE64_NO_NL 0x100 + +/* + * This is used with memory BIOs: + * BIO_FLAGS_MEM_RDONLY means we shouldn't free up or change the data in any way; + * BIO_FLAGS_NONCLEAR_RST means we shouldn't clear data on reset. + */ +# define BIO_FLAGS_MEM_RDONLY 0x200 +# define BIO_FLAGS_NONCLEAR_RST 0x400 +# define BIO_FLAGS_IN_EOF 0x800 + +typedef union bio_addr_st BIO_ADDR; +typedef struct bio_addrinfo_st BIO_ADDRINFO; + +int BIO_get_new_index(void); +void BIO_set_flags(BIO *b, int flags); +int BIO_test_flags(const BIO *b, int flags); +void BIO_clear_flags(BIO *b, int flags); + +# define BIO_get_flags(b) BIO_test_flags(b, ~(0x0)) +# define BIO_set_retry_special(b) \ + BIO_set_flags(b, (BIO_FLAGS_IO_SPECIAL|BIO_FLAGS_SHOULD_RETRY)) +# define BIO_set_retry_read(b) \ + BIO_set_flags(b, (BIO_FLAGS_READ|BIO_FLAGS_SHOULD_RETRY)) +# define BIO_set_retry_write(b) \ + BIO_set_flags(b, (BIO_FLAGS_WRITE|BIO_FLAGS_SHOULD_RETRY)) + +/* These are normally used internally in BIOs */ +# define BIO_clear_retry_flags(b) \ + BIO_clear_flags(b, (BIO_FLAGS_RWS|BIO_FLAGS_SHOULD_RETRY)) +# define BIO_get_retry_flags(b) \ + BIO_test_flags(b, (BIO_FLAGS_RWS|BIO_FLAGS_SHOULD_RETRY)) + +/* These should be used by the application to tell why we should retry */ +# define BIO_should_read(a) BIO_test_flags(a, BIO_FLAGS_READ) +# define BIO_should_write(a) BIO_test_flags(a, BIO_FLAGS_WRITE) +# define BIO_should_io_special(a) BIO_test_flags(a, BIO_FLAGS_IO_SPECIAL) +# define BIO_retry_type(a) BIO_test_flags(a, BIO_FLAGS_RWS) +# define BIO_should_retry(a) BIO_test_flags(a, BIO_FLAGS_SHOULD_RETRY) + +/* + * The next three are used in conjunction with the BIO_should_io_special() + * condition. After this returns true, BIO *BIO_get_retry_BIO(BIO *bio, int + * *reason); will walk the BIO stack and return the 'reason' for the special + * and the offending BIO. Given a BIO, BIO_get_retry_reason(bio) will return + * the code. + */ +/* + * Returned from the SSL bio when the certificate retrieval code had an error + */ +# define BIO_RR_SSL_X509_LOOKUP 0x01 +/* Returned from the connect BIO when a connect would have blocked */ +# define BIO_RR_CONNECT 0x02 +/* Returned from the accept BIO when an accept would have blocked */ +# define BIO_RR_ACCEPT 0x03 + +/* These are passed by the BIO callback */ +# define BIO_CB_FREE 0x01 +# define BIO_CB_READ 0x02 +# define BIO_CB_WRITE 0x03 +# define BIO_CB_PUTS 0x04 +# define BIO_CB_GETS 0x05 +# define BIO_CB_CTRL 0x06 + +/* + * The callback is called before and after the underling operation, The + * BIO_CB_RETURN flag indicates if it is after the call + */ +# define BIO_CB_RETURN 0x80 +# define BIO_CB_return(a) ((a)|BIO_CB_RETURN) +# define BIO_cb_pre(a) (!((a)&BIO_CB_RETURN)) +# define BIO_cb_post(a) ((a)&BIO_CB_RETURN) + +typedef long (*BIO_callback_fn)(BIO *b, int oper, const char *argp, int argi, + long argl, long ret); +typedef long (*BIO_callback_fn_ex)(BIO *b, int oper, const char *argp, + size_t len, int argi, + long argl, int ret, size_t *processed); +BIO_callback_fn BIO_get_callback(const BIO *b); +void BIO_set_callback(BIO *b, BIO_callback_fn callback); + +BIO_callback_fn_ex BIO_get_callback_ex(const BIO *b); +void BIO_set_callback_ex(BIO *b, BIO_callback_fn_ex callback); + +char *BIO_get_callback_arg(const BIO *b); +void BIO_set_callback_arg(BIO *b, char *arg); + +typedef struct bio_method_st BIO_METHOD; + +const char *BIO_method_name(const BIO *b); +int BIO_method_type(const BIO *b); + +typedef int BIO_info_cb(BIO *, int, int); +typedef BIO_info_cb bio_info_cb; /* backward compatibility */ + +DEFINE_STACK_OF(BIO) + +/* Prefix and suffix callback in ASN1 BIO */ +typedef int asn1_ps_func (BIO *b, unsigned char **pbuf, int *plen, + void *parg); + +# ifndef OPENSSL_NO_SCTP +/* SCTP parameter structs */ +struct bio_dgram_sctp_sndinfo { + uint16_t snd_sid; + uint16_t snd_flags; + uint32_t snd_ppid; + uint32_t snd_context; +}; + +struct bio_dgram_sctp_rcvinfo { + uint16_t rcv_sid; + uint16_t rcv_ssn; + uint16_t rcv_flags; + uint32_t rcv_ppid; + uint32_t rcv_tsn; + uint32_t rcv_cumtsn; + uint32_t rcv_context; +}; + +struct bio_dgram_sctp_prinfo { + uint16_t pr_policy; + uint32_t pr_value; +}; +# endif + +/* + * #define BIO_CONN_get_param_hostname BIO_ctrl + */ + +# define BIO_C_SET_CONNECT 100 +# define BIO_C_DO_STATE_MACHINE 101 +# define BIO_C_SET_NBIO 102 +/* # define BIO_C_SET_PROXY_PARAM 103 */ +# define BIO_C_SET_FD 104 +# define BIO_C_GET_FD 105 +# define BIO_C_SET_FILE_PTR 106 +# define BIO_C_GET_FILE_PTR 107 +# define BIO_C_SET_FILENAME 108 +# define BIO_C_SET_SSL 109 +# define BIO_C_GET_SSL 110 +# define BIO_C_SET_MD 111 +# define BIO_C_GET_MD 112 +# define BIO_C_GET_CIPHER_STATUS 113 +# define BIO_C_SET_BUF_MEM 114 +# define BIO_C_GET_BUF_MEM_PTR 115 +# define BIO_C_GET_BUFF_NUM_LINES 116 +# define BIO_C_SET_BUFF_SIZE 117 +# define BIO_C_SET_ACCEPT 118 +# define BIO_C_SSL_MODE 119 +# define BIO_C_GET_MD_CTX 120 +/* # define BIO_C_GET_PROXY_PARAM 121 */ +# define BIO_C_SET_BUFF_READ_DATA 122/* data to read first */ +# define BIO_C_GET_CONNECT 123 +# define BIO_C_GET_ACCEPT 124 +# define BIO_C_SET_SSL_RENEGOTIATE_BYTES 125 +# define BIO_C_GET_SSL_NUM_RENEGOTIATES 126 +# define BIO_C_SET_SSL_RENEGOTIATE_TIMEOUT 127 +# define BIO_C_FILE_SEEK 128 +# define BIO_C_GET_CIPHER_CTX 129 +# define BIO_C_SET_BUF_MEM_EOF_RETURN 130/* return end of input + * value */ +# define BIO_C_SET_BIND_MODE 131 +# define BIO_C_GET_BIND_MODE 132 +# define BIO_C_FILE_TELL 133 +# define BIO_C_GET_SOCKS 134 +# define BIO_C_SET_SOCKS 135 + +# define BIO_C_SET_WRITE_BUF_SIZE 136/* for BIO_s_bio */ +# define BIO_C_GET_WRITE_BUF_SIZE 137 +# define BIO_C_MAKE_BIO_PAIR 138 +# define BIO_C_DESTROY_BIO_PAIR 139 +# define BIO_C_GET_WRITE_GUARANTEE 140 +# define BIO_C_GET_READ_REQUEST 141 +# define BIO_C_SHUTDOWN_WR 142 +# define BIO_C_NREAD0 143 +# define BIO_C_NREAD 144 +# define BIO_C_NWRITE0 145 +# define BIO_C_NWRITE 146 +# define BIO_C_RESET_READ_REQUEST 147 +# define BIO_C_SET_MD_CTX 148 + +# define BIO_C_SET_PREFIX 149 +# define BIO_C_GET_PREFIX 150 +# define BIO_C_SET_SUFFIX 151 +# define BIO_C_GET_SUFFIX 152 + +# define BIO_C_SET_EX_ARG 153 +# define BIO_C_GET_EX_ARG 154 + +# define BIO_C_SET_CONNECT_MODE 155 + +# define BIO_set_app_data(s,arg) BIO_set_ex_data(s,0,arg) +# define BIO_get_app_data(s) BIO_get_ex_data(s,0) + +# define BIO_set_nbio(b,n) BIO_ctrl(b,BIO_C_SET_NBIO,(n),NULL) + +# ifndef OPENSSL_NO_SOCK +/* IP families we support, for BIO_s_connect() and BIO_s_accept() */ +/* Note: the underlying operating system may not support some of them */ +# define BIO_FAMILY_IPV4 4 +# define BIO_FAMILY_IPV6 6 +# define BIO_FAMILY_IPANY 256 + +/* BIO_s_connect() */ +# define BIO_set_conn_hostname(b,name) BIO_ctrl(b,BIO_C_SET_CONNECT,0, \ + (char *)(name)) +# define BIO_set_conn_port(b,port) BIO_ctrl(b,BIO_C_SET_CONNECT,1, \ + (char *)(port)) +# define BIO_set_conn_address(b,addr) BIO_ctrl(b,BIO_C_SET_CONNECT,2, \ + (char *)(addr)) +# define BIO_set_conn_ip_family(b,f) BIO_int_ctrl(b,BIO_C_SET_CONNECT,3,f) +# define BIO_get_conn_hostname(b) ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,0)) +# define BIO_get_conn_port(b) ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,1)) +# define BIO_get_conn_address(b) ((const BIO_ADDR *)BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,2)) +# define BIO_get_conn_ip_family(b) BIO_ctrl(b,BIO_C_GET_CONNECT,3,NULL) +# define BIO_set_conn_mode(b,n) BIO_ctrl(b,BIO_C_SET_CONNECT_MODE,(n),NULL) + +/* BIO_s_accept() */ +# define BIO_set_accept_name(b,name) BIO_ctrl(b,BIO_C_SET_ACCEPT,0, \ + (char *)(name)) +# define BIO_set_accept_port(b,port) BIO_ctrl(b,BIO_C_SET_ACCEPT,1, \ + (char *)(port)) +# define BIO_get_accept_name(b) ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_ACCEPT,0)) +# define BIO_get_accept_port(b) ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_ACCEPT,1)) +# define BIO_get_peer_name(b) ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_ACCEPT,2)) +# define BIO_get_peer_port(b) ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_ACCEPT,3)) +/* #define BIO_set_nbio(b,n) BIO_ctrl(b,BIO_C_SET_NBIO,(n),NULL) */ +# define BIO_set_nbio_accept(b,n) BIO_ctrl(b,BIO_C_SET_ACCEPT,2,(n)?(void *)"a":NULL) +# define BIO_set_accept_bios(b,bio) BIO_ctrl(b,BIO_C_SET_ACCEPT,3, \ + (char *)(bio)) +# define BIO_set_accept_ip_family(b,f) BIO_int_ctrl(b,BIO_C_SET_ACCEPT,4,f) +# define BIO_get_accept_ip_family(b) BIO_ctrl(b,BIO_C_GET_ACCEPT,4,NULL) + +/* Aliases kept for backward compatibility */ +# define BIO_BIND_NORMAL 0 +# define BIO_BIND_REUSEADDR BIO_SOCK_REUSEADDR +# define BIO_BIND_REUSEADDR_IF_UNUSED BIO_SOCK_REUSEADDR +# define BIO_set_bind_mode(b,mode) BIO_ctrl(b,BIO_C_SET_BIND_MODE,mode,NULL) +# define BIO_get_bind_mode(b) BIO_ctrl(b,BIO_C_GET_BIND_MODE,0,NULL) + +/* BIO_s_accept() and BIO_s_connect() */ +# define BIO_do_connect(b) BIO_do_handshake(b) +# define BIO_do_accept(b) BIO_do_handshake(b) +# endif /* OPENSSL_NO_SOCK */ + +# define BIO_do_handshake(b) BIO_ctrl(b,BIO_C_DO_STATE_MACHINE,0,NULL) + +/* BIO_s_datagram(), BIO_s_fd(), BIO_s_socket(), BIO_s_accept() and BIO_s_connect() */ +# define BIO_set_fd(b,fd,c) BIO_int_ctrl(b,BIO_C_SET_FD,c,fd) +# define BIO_get_fd(b,c) BIO_ctrl(b,BIO_C_GET_FD,0,(char *)(c)) + +/* BIO_s_file() */ +# define BIO_set_fp(b,fp,c) BIO_ctrl(b,BIO_C_SET_FILE_PTR,c,(char *)(fp)) +# define BIO_get_fp(b,fpp) BIO_ctrl(b,BIO_C_GET_FILE_PTR,0,(char *)(fpp)) + +/* BIO_s_fd() and BIO_s_file() */ +# define BIO_seek(b,ofs) (int)BIO_ctrl(b,BIO_C_FILE_SEEK,ofs,NULL) +# define BIO_tell(b) (int)BIO_ctrl(b,BIO_C_FILE_TELL,0,NULL) + +/* + * name is cast to lose const, but might be better to route through a + * function so we can do it safely + */ +# ifdef CONST_STRICT +/* + * If you are wondering why this isn't defined, its because CONST_STRICT is + * purely a compile-time kludge to allow const to be checked. + */ +int BIO_read_filename(BIO *b, const char *name); +# else +# define BIO_read_filename(b,name) (int)BIO_ctrl(b,BIO_C_SET_FILENAME, \ + BIO_CLOSE|BIO_FP_READ,(char *)(name)) +# endif +# define BIO_write_filename(b,name) (int)BIO_ctrl(b,BIO_C_SET_FILENAME, \ + BIO_CLOSE|BIO_FP_WRITE,name) +# define BIO_append_filename(b,name) (int)BIO_ctrl(b,BIO_C_SET_FILENAME, \ + BIO_CLOSE|BIO_FP_APPEND,name) +# define BIO_rw_filename(b,name) (int)BIO_ctrl(b,BIO_C_SET_FILENAME, \ + BIO_CLOSE|BIO_FP_READ|BIO_FP_WRITE,name) + +/* + * WARNING WARNING, this ups the reference count on the read bio of the SSL + * structure. This is because the ssl read BIO is now pointed to by the + * next_bio field in the bio. So when you free the BIO, make sure you are + * doing a BIO_free_all() to catch the underlying BIO. + */ +# define BIO_set_ssl(b,ssl,c) BIO_ctrl(b,BIO_C_SET_SSL,c,(char *)(ssl)) +# define BIO_get_ssl(b,sslp) BIO_ctrl(b,BIO_C_GET_SSL,0,(char *)(sslp)) +# define BIO_set_ssl_mode(b,client) BIO_ctrl(b,BIO_C_SSL_MODE,client,NULL) +# define BIO_set_ssl_renegotiate_bytes(b,num) \ + BIO_ctrl(b,BIO_C_SET_SSL_RENEGOTIATE_BYTES,num,NULL) +# define BIO_get_num_renegotiates(b) \ + BIO_ctrl(b,BIO_C_GET_SSL_NUM_RENEGOTIATES,0,NULL) +# define BIO_set_ssl_renegotiate_timeout(b,seconds) \ + BIO_ctrl(b,BIO_C_SET_SSL_RENEGOTIATE_TIMEOUT,seconds,NULL) + +/* defined in evp.h */ +/* #define BIO_set_md(b,md) BIO_ctrl(b,BIO_C_SET_MD,1,(char *)(md)) */ + +# define BIO_get_mem_data(b,pp) BIO_ctrl(b,BIO_CTRL_INFO,0,(char *)(pp)) +# define BIO_set_mem_buf(b,bm,c) BIO_ctrl(b,BIO_C_SET_BUF_MEM,c,(char *)(bm)) +# define BIO_get_mem_ptr(b,pp) BIO_ctrl(b,BIO_C_GET_BUF_MEM_PTR,0, \ + (char *)(pp)) +# define BIO_set_mem_eof_return(b,v) \ + BIO_ctrl(b,BIO_C_SET_BUF_MEM_EOF_RETURN,v,NULL) + +/* For the BIO_f_buffer() type */ +# define BIO_get_buffer_num_lines(b) BIO_ctrl(b,BIO_C_GET_BUFF_NUM_LINES,0,NULL) +# define BIO_set_buffer_size(b,size) BIO_ctrl(b,BIO_C_SET_BUFF_SIZE,size,NULL) +# define BIO_set_read_buffer_size(b,size) BIO_int_ctrl(b,BIO_C_SET_BUFF_SIZE,size,0) +# define BIO_set_write_buffer_size(b,size) BIO_int_ctrl(b,BIO_C_SET_BUFF_SIZE,size,1) +# define BIO_set_buffer_read_data(b,buf,num) BIO_ctrl(b,BIO_C_SET_BUFF_READ_DATA,num,buf) + +/* Don't use the next one unless you know what you are doing :-) */ +# define BIO_dup_state(b,ret) BIO_ctrl(b,BIO_CTRL_DUP,0,(char *)(ret)) + +# define BIO_reset(b) (int)BIO_ctrl(b,BIO_CTRL_RESET,0,NULL) +# define BIO_eof(b) (int)BIO_ctrl(b,BIO_CTRL_EOF,0,NULL) +# define BIO_set_close(b,c) (int)BIO_ctrl(b,BIO_CTRL_SET_CLOSE,(c),NULL) +# define BIO_get_close(b) (int)BIO_ctrl(b,BIO_CTRL_GET_CLOSE,0,NULL) +# define BIO_pending(b) (int)BIO_ctrl(b,BIO_CTRL_PENDING,0,NULL) +# define BIO_wpending(b) (int)BIO_ctrl(b,BIO_CTRL_WPENDING,0,NULL) +/* ...pending macros have inappropriate return type */ +size_t BIO_ctrl_pending(BIO *b); +size_t BIO_ctrl_wpending(BIO *b); +# define BIO_flush(b) (int)BIO_ctrl(b,BIO_CTRL_FLUSH,0,NULL) +# define BIO_get_info_callback(b,cbp) (int)BIO_ctrl(b,BIO_CTRL_GET_CALLBACK,0, \ + cbp) +# define BIO_set_info_callback(b,cb) (int)BIO_callback_ctrl(b,BIO_CTRL_SET_CALLBACK,cb) + +/* For the BIO_f_buffer() type */ +# define BIO_buffer_get_num_lines(b) BIO_ctrl(b,BIO_CTRL_GET,0,NULL) +# define BIO_buffer_peek(b,s,l) BIO_ctrl(b,BIO_CTRL_PEEK,(l),(s)) + +/* For BIO_s_bio() */ +# define BIO_set_write_buf_size(b,size) (int)BIO_ctrl(b,BIO_C_SET_WRITE_BUF_SIZE,size,NULL) +# define BIO_get_write_buf_size(b,size) (size_t)BIO_ctrl(b,BIO_C_GET_WRITE_BUF_SIZE,size,NULL) +# define BIO_make_bio_pair(b1,b2) (int)BIO_ctrl(b1,BIO_C_MAKE_BIO_PAIR,0,b2) +# define BIO_destroy_bio_pair(b) (int)BIO_ctrl(b,BIO_C_DESTROY_BIO_PAIR,0,NULL) +# define BIO_shutdown_wr(b) (int)BIO_ctrl(b, BIO_C_SHUTDOWN_WR, 0, NULL) +/* macros with inappropriate type -- but ...pending macros use int too: */ +# define BIO_get_write_guarantee(b) (int)BIO_ctrl(b,BIO_C_GET_WRITE_GUARANTEE,0,NULL) +# define BIO_get_read_request(b) (int)BIO_ctrl(b,BIO_C_GET_READ_REQUEST,0,NULL) +size_t BIO_ctrl_get_write_guarantee(BIO *b); +size_t BIO_ctrl_get_read_request(BIO *b); +int BIO_ctrl_reset_read_request(BIO *b); + +/* ctrl macros for dgram */ +# define BIO_ctrl_dgram_connect(b,peer) \ + (int)BIO_ctrl(b,BIO_CTRL_DGRAM_CONNECT,0, (char *)(peer)) +# define BIO_ctrl_set_connected(b,peer) \ + (int)BIO_ctrl(b, BIO_CTRL_DGRAM_SET_CONNECTED, 0, (char *)(peer)) +# define BIO_dgram_recv_timedout(b) \ + (int)BIO_ctrl(b, BIO_CTRL_DGRAM_GET_RECV_TIMER_EXP, 0, NULL) +# define BIO_dgram_send_timedout(b) \ + (int)BIO_ctrl(b, BIO_CTRL_DGRAM_GET_SEND_TIMER_EXP, 0, NULL) +# define BIO_dgram_get_peer(b,peer) \ + (int)BIO_ctrl(b, BIO_CTRL_DGRAM_GET_PEER, 0, (char *)(peer)) +# define BIO_dgram_set_peer(b,peer) \ + (int)BIO_ctrl(b, BIO_CTRL_DGRAM_SET_PEER, 0, (char *)(peer)) +# define BIO_dgram_get_mtu_overhead(b) \ + (unsigned int)BIO_ctrl((b), BIO_CTRL_DGRAM_GET_MTU_OVERHEAD, 0, NULL) + +#define BIO_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_BIO, l, p, newf, dupf, freef) +int BIO_set_ex_data(BIO *bio, int idx, void *data); +void *BIO_get_ex_data(BIO *bio, int idx); +uint64_t BIO_number_read(BIO *bio); +uint64_t BIO_number_written(BIO *bio); + +/* For BIO_f_asn1() */ +int BIO_asn1_set_prefix(BIO *b, asn1_ps_func *prefix, + asn1_ps_func *prefix_free); +int BIO_asn1_get_prefix(BIO *b, asn1_ps_func **pprefix, + asn1_ps_func **pprefix_free); +int BIO_asn1_set_suffix(BIO *b, asn1_ps_func *suffix, + asn1_ps_func *suffix_free); +int BIO_asn1_get_suffix(BIO *b, asn1_ps_func **psuffix, + asn1_ps_func **psuffix_free); + +const BIO_METHOD *BIO_s_file(void); +BIO *BIO_new_file(const char *filename, const char *mode); +# ifndef OPENSSL_NO_STDIO +BIO *BIO_new_fp(FILE *stream, int close_flag); +# endif +BIO *BIO_new(const BIO_METHOD *type); +int BIO_free(BIO *a); +void BIO_set_data(BIO *a, void *ptr); +void *BIO_get_data(BIO *a); +void BIO_set_init(BIO *a, int init); +int BIO_get_init(BIO *a); +void BIO_set_shutdown(BIO *a, int shut); +int BIO_get_shutdown(BIO *a); +void BIO_vfree(BIO *a); +int BIO_up_ref(BIO *a); +int BIO_read(BIO *b, void *data, int dlen); +int BIO_read_ex(BIO *b, void *data, size_t dlen, size_t *readbytes); +int BIO_gets(BIO *bp, char *buf, int size); +int BIO_write(BIO *b, const void *data, int dlen); +int BIO_write_ex(BIO *b, const void *data, size_t dlen, size_t *written); +int BIO_puts(BIO *bp, const char *buf); +int BIO_indent(BIO *b, int indent, int max); +long BIO_ctrl(BIO *bp, int cmd, long larg, void *parg); +long BIO_callback_ctrl(BIO *b, int cmd, BIO_info_cb *fp); +void *BIO_ptr_ctrl(BIO *bp, int cmd, long larg); +long BIO_int_ctrl(BIO *bp, int cmd, long larg, int iarg); +BIO *BIO_push(BIO *b, BIO *append); +BIO *BIO_pop(BIO *b); +void BIO_free_all(BIO *a); +BIO *BIO_find_type(BIO *b, int bio_type); +BIO *BIO_next(BIO *b); +void BIO_set_next(BIO *b, BIO *next); +BIO *BIO_get_retry_BIO(BIO *bio, int *reason); +int BIO_get_retry_reason(BIO *bio); +void BIO_set_retry_reason(BIO *bio, int reason); +BIO *BIO_dup_chain(BIO *in); + +int BIO_nread0(BIO *bio, char **buf); +int BIO_nread(BIO *bio, char **buf, int num); +int BIO_nwrite0(BIO *bio, char **buf); +int BIO_nwrite(BIO *bio, char **buf, int num); + +long BIO_debug_callback(BIO *bio, int cmd, const char *argp, int argi, + long argl, long ret); + +const BIO_METHOD *BIO_s_mem(void); +const BIO_METHOD *BIO_s_secmem(void); +BIO *BIO_new_mem_buf(const void *buf, int len); +# ifndef OPENSSL_NO_SOCK +const BIO_METHOD *BIO_s_socket(void); +const BIO_METHOD *BIO_s_connect(void); +const BIO_METHOD *BIO_s_accept(void); +# endif +const BIO_METHOD *BIO_s_fd(void); +const BIO_METHOD *BIO_s_log(void); +const BIO_METHOD *BIO_s_bio(void); +const BIO_METHOD *BIO_s_null(void); +const BIO_METHOD *BIO_f_null(void); +const BIO_METHOD *BIO_f_buffer(void); +const BIO_METHOD *BIO_f_linebuffer(void); +const BIO_METHOD *BIO_f_nbio_test(void); +# ifndef OPENSSL_NO_DGRAM +const BIO_METHOD *BIO_s_datagram(void); +int BIO_dgram_non_fatal_error(int error); +BIO *BIO_new_dgram(int fd, int close_flag); +# ifndef OPENSSL_NO_SCTP +const BIO_METHOD *BIO_s_datagram_sctp(void); +BIO *BIO_new_dgram_sctp(int fd, int close_flag); +int BIO_dgram_is_sctp(BIO *bio); +int BIO_dgram_sctp_notification_cb(BIO *b, + void (*handle_notifications) (BIO *bio, + void *context, + void *buf), + void *context); +int BIO_dgram_sctp_wait_for_dry(BIO *b); +int BIO_dgram_sctp_msg_waiting(BIO *b); +# endif +# endif + +# ifndef OPENSSL_NO_SOCK +int BIO_sock_should_retry(int i); +int BIO_sock_non_fatal_error(int error); +# endif + +int BIO_fd_should_retry(int i); +int BIO_fd_non_fatal_error(int error); +int BIO_dump_cb(int (*cb) (const void *data, size_t len, void *u), + void *u, const char *s, int len); +int BIO_dump_indent_cb(int (*cb) (const void *data, size_t len, void *u), + void *u, const char *s, int len, int indent); +int BIO_dump(BIO *b, const char *bytes, int len); +int BIO_dump_indent(BIO *b, const char *bytes, int len, int indent); +# ifndef OPENSSL_NO_STDIO +int BIO_dump_fp(FILE *fp, const char *s, int len); +int BIO_dump_indent_fp(FILE *fp, const char *s, int len, int indent); +# endif +int BIO_hex_string(BIO *out, int indent, int width, unsigned char *data, + int datalen); + +# ifndef OPENSSL_NO_SOCK +BIO_ADDR *BIO_ADDR_new(void); +int BIO_ADDR_rawmake(BIO_ADDR *ap, int family, + const void *where, size_t wherelen, unsigned short port); +void BIO_ADDR_free(BIO_ADDR *); +void BIO_ADDR_clear(BIO_ADDR *ap); +int BIO_ADDR_family(const BIO_ADDR *ap); +int BIO_ADDR_rawaddress(const BIO_ADDR *ap, void *p, size_t *l); +unsigned short BIO_ADDR_rawport(const BIO_ADDR *ap); +char *BIO_ADDR_hostname_string(const BIO_ADDR *ap, int numeric); +char *BIO_ADDR_service_string(const BIO_ADDR *ap, int numeric); +char *BIO_ADDR_path_string(const BIO_ADDR *ap); + +const BIO_ADDRINFO *BIO_ADDRINFO_next(const BIO_ADDRINFO *bai); +int BIO_ADDRINFO_family(const BIO_ADDRINFO *bai); +int BIO_ADDRINFO_socktype(const BIO_ADDRINFO *bai); +int BIO_ADDRINFO_protocol(const BIO_ADDRINFO *bai); +const BIO_ADDR *BIO_ADDRINFO_address(const BIO_ADDRINFO *bai); +void BIO_ADDRINFO_free(BIO_ADDRINFO *bai); + +enum BIO_hostserv_priorities { + BIO_PARSE_PRIO_HOST, BIO_PARSE_PRIO_SERV +}; +int BIO_parse_hostserv(const char *hostserv, char **host, char **service, + enum BIO_hostserv_priorities hostserv_prio); +enum BIO_lookup_type { + BIO_LOOKUP_CLIENT, BIO_LOOKUP_SERVER +}; +int BIO_lookup(const char *host, const char *service, + enum BIO_lookup_type lookup_type, + int family, int socktype, BIO_ADDRINFO **res); +int BIO_lookup_ex(const char *host, const char *service, + int lookup_type, int family, int socktype, int protocol, + BIO_ADDRINFO **res); +int BIO_sock_error(int sock); +int BIO_socket_ioctl(int fd, long type, void *arg); +int BIO_socket_nbio(int fd, int mode); +int BIO_sock_init(void); +# if OPENSSL_API_COMPAT < 0x10100000L +# define BIO_sock_cleanup() while(0) continue +# endif +int BIO_set_tcp_ndelay(int sock, int turn_on); + +DEPRECATEDIN_1_1_0(struct hostent *BIO_gethostbyname(const char *name)) +DEPRECATEDIN_1_1_0(int BIO_get_port(const char *str, unsigned short *port_ptr)) +DEPRECATEDIN_1_1_0(int BIO_get_host_ip(const char *str, unsigned char *ip)) +DEPRECATEDIN_1_1_0(int BIO_get_accept_socket(char *host_port, int mode)) +DEPRECATEDIN_1_1_0(int BIO_accept(int sock, char **ip_port)) + +union BIO_sock_info_u { + BIO_ADDR *addr; +}; +enum BIO_sock_info_type { + BIO_SOCK_INFO_ADDRESS +}; +int BIO_sock_info(int sock, + enum BIO_sock_info_type type, union BIO_sock_info_u *info); + +# define BIO_SOCK_REUSEADDR 0x01 +# define BIO_SOCK_V6_ONLY 0x02 +# define BIO_SOCK_KEEPALIVE 0x04 +# define BIO_SOCK_NONBLOCK 0x08 +# define BIO_SOCK_NODELAY 0x10 + +int BIO_socket(int domain, int socktype, int protocol, int options); +int BIO_connect(int sock, const BIO_ADDR *addr, int options); +int BIO_bind(int sock, const BIO_ADDR *addr, int options); +int BIO_listen(int sock, const BIO_ADDR *addr, int options); +int BIO_accept_ex(int accept_sock, BIO_ADDR *addr, int options); +int BIO_closesocket(int sock); + +BIO *BIO_new_socket(int sock, int close_flag); +BIO *BIO_new_connect(const char *host_port); +BIO *BIO_new_accept(const char *host_port); +# endif /* OPENSSL_NO_SOCK*/ + +BIO *BIO_new_fd(int fd, int close_flag); + +int BIO_new_bio_pair(BIO **bio1, size_t writebuf1, + BIO **bio2, size_t writebuf2); +/* + * If successful, returns 1 and in *bio1, *bio2 two BIO pair endpoints. + * Otherwise returns 0 and sets *bio1 and *bio2 to NULL. Size 0 uses default + * value. + */ + +void BIO_copy_next_retry(BIO *b); + +/* + * long BIO_ghbn_ctrl(int cmd,int iarg,char *parg); + */ + +# define ossl_bio__attr__(x) +# if defined(__GNUC__) && defined(__STDC_VERSION__) \ + && !defined(__APPLE__) + /* + * Because we support the 'z' modifier, which made its appearance in C99, + * we can't use __attribute__ with pre C99 dialects. + */ +# if __STDC_VERSION__ >= 199901L +# undef ossl_bio__attr__ +# define ossl_bio__attr__ __attribute__ +# if __GNUC__*10 + __GNUC_MINOR__ >= 44 +# define ossl_bio__printf__ __gnu_printf__ +# else +# define ossl_bio__printf__ __printf__ +# endif +# endif +# endif +int BIO_printf(BIO *bio, const char *format, ...) +ossl_bio__attr__((__format__(ossl_bio__printf__, 2, 3))); +int BIO_vprintf(BIO *bio, const char *format, va_list args) +ossl_bio__attr__((__format__(ossl_bio__printf__, 2, 0))); +int BIO_snprintf(char *buf, size_t n, const char *format, ...) +ossl_bio__attr__((__format__(ossl_bio__printf__, 3, 4))); +int BIO_vsnprintf(char *buf, size_t n, const char *format, va_list args) +ossl_bio__attr__((__format__(ossl_bio__printf__, 3, 0))); +# undef ossl_bio__attr__ +# undef ossl_bio__printf__ + + +BIO_METHOD *BIO_meth_new(int type, const char *name); +void BIO_meth_free(BIO_METHOD *biom); +int (*BIO_meth_get_write(const BIO_METHOD *biom)) (BIO *, const char *, int); +int (*BIO_meth_get_write_ex(const BIO_METHOD *biom)) (BIO *, const char *, size_t, + size_t *); +int BIO_meth_set_write(BIO_METHOD *biom, + int (*write) (BIO *, const char *, int)); +int BIO_meth_set_write_ex(BIO_METHOD *biom, + int (*bwrite) (BIO *, const char *, size_t, size_t *)); +int (*BIO_meth_get_read(const BIO_METHOD *biom)) (BIO *, char *, int); +int (*BIO_meth_get_read_ex(const BIO_METHOD *biom)) (BIO *, char *, size_t, size_t *); +int BIO_meth_set_read(BIO_METHOD *biom, + int (*read) (BIO *, char *, int)); +int BIO_meth_set_read_ex(BIO_METHOD *biom, + int (*bread) (BIO *, char *, size_t, size_t *)); +int (*BIO_meth_get_puts(const BIO_METHOD *biom)) (BIO *, const char *); +int BIO_meth_set_puts(BIO_METHOD *biom, + int (*puts) (BIO *, const char *)); +int (*BIO_meth_get_gets(const BIO_METHOD *biom)) (BIO *, char *, int); +int BIO_meth_set_gets(BIO_METHOD *biom, + int (*gets) (BIO *, char *, int)); +long (*BIO_meth_get_ctrl(const BIO_METHOD *biom)) (BIO *, int, long, void *); +int BIO_meth_set_ctrl(BIO_METHOD *biom, + long (*ctrl) (BIO *, int, long, void *)); +int (*BIO_meth_get_create(const BIO_METHOD *bion)) (BIO *); +int BIO_meth_set_create(BIO_METHOD *biom, int (*create) (BIO *)); +int (*BIO_meth_get_destroy(const BIO_METHOD *biom)) (BIO *); +int BIO_meth_set_destroy(BIO_METHOD *biom, int (*destroy) (BIO *)); +long (*BIO_meth_get_callback_ctrl(const BIO_METHOD *biom)) + (BIO *, int, BIO_info_cb *); +int BIO_meth_set_callback_ctrl(BIO_METHOD *biom, + long (*callback_ctrl) (BIO *, int, + BIO_info_cb *)); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/bioerr.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/bioerr.h new file mode 100644 index 00000000..46e2c96e --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/bioerr.h @@ -0,0 +1,124 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2019 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_BIOERR_H +# define HEADER_BIOERR_H + +# ifndef HEADER_SYMHACKS_H +# include +# endif + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_BIO_strings(void); + +/* + * BIO function codes. + */ +# define BIO_F_ACPT_STATE 100 +# define BIO_F_ADDRINFO_WRAP 148 +# define BIO_F_ADDR_STRINGS 134 +# define BIO_F_BIO_ACCEPT 101 +# define BIO_F_BIO_ACCEPT_EX 137 +# define BIO_F_BIO_ACCEPT_NEW 152 +# define BIO_F_BIO_ADDR_NEW 144 +# define BIO_F_BIO_BIND 147 +# define BIO_F_BIO_CALLBACK_CTRL 131 +# define BIO_F_BIO_CONNECT 138 +# define BIO_F_BIO_CONNECT_NEW 153 +# define BIO_F_BIO_CTRL 103 +# define BIO_F_BIO_GETS 104 +# define BIO_F_BIO_GET_HOST_IP 106 +# define BIO_F_BIO_GET_NEW_INDEX 102 +# define BIO_F_BIO_GET_PORT 107 +# define BIO_F_BIO_LISTEN 139 +# define BIO_F_BIO_LOOKUP 135 +# define BIO_F_BIO_LOOKUP_EX 143 +# define BIO_F_BIO_MAKE_PAIR 121 +# define BIO_F_BIO_METH_NEW 146 +# define BIO_F_BIO_NEW 108 +# define BIO_F_BIO_NEW_DGRAM_SCTP 145 +# define BIO_F_BIO_NEW_FILE 109 +# define BIO_F_BIO_NEW_MEM_BUF 126 +# define BIO_F_BIO_NREAD 123 +# define BIO_F_BIO_NREAD0 124 +# define BIO_F_BIO_NWRITE 125 +# define BIO_F_BIO_NWRITE0 122 +# define BIO_F_BIO_PARSE_HOSTSERV 136 +# define BIO_F_BIO_PUTS 110 +# define BIO_F_BIO_READ 111 +# define BIO_F_BIO_READ_EX 105 +# define BIO_F_BIO_READ_INTERN 120 +# define BIO_F_BIO_SOCKET 140 +# define BIO_F_BIO_SOCKET_NBIO 142 +# define BIO_F_BIO_SOCK_INFO 141 +# define BIO_F_BIO_SOCK_INIT 112 +# define BIO_F_BIO_WRITE 113 +# define BIO_F_BIO_WRITE_EX 119 +# define BIO_F_BIO_WRITE_INTERN 128 +# define BIO_F_BUFFER_CTRL 114 +# define BIO_F_CONN_CTRL 127 +# define BIO_F_CONN_STATE 115 +# define BIO_F_DGRAM_SCTP_NEW 149 +# define BIO_F_DGRAM_SCTP_READ 132 +# define BIO_F_DGRAM_SCTP_WRITE 133 +# define BIO_F_DOAPR_OUTCH 150 +# define BIO_F_FILE_CTRL 116 +# define BIO_F_FILE_READ 130 +# define BIO_F_LINEBUFFER_CTRL 129 +# define BIO_F_LINEBUFFER_NEW 151 +# define BIO_F_MEM_WRITE 117 +# define BIO_F_NBIOF_NEW 154 +# define BIO_F_SLG_WRITE 155 +# define BIO_F_SSL_NEW 118 + +/* + * BIO reason codes. + */ +# define BIO_R_ACCEPT_ERROR 100 +# define BIO_R_ADDRINFO_ADDR_IS_NOT_AF_INET 141 +# define BIO_R_AMBIGUOUS_HOST_OR_SERVICE 129 +# define BIO_R_BAD_FOPEN_MODE 101 +# define BIO_R_BROKEN_PIPE 124 +# define BIO_R_CONNECT_ERROR 103 +# define BIO_R_GETHOSTBYNAME_ADDR_IS_NOT_AF_INET 107 +# define BIO_R_GETSOCKNAME_ERROR 132 +# define BIO_R_GETSOCKNAME_TRUNCATED_ADDRESS 133 +# define BIO_R_GETTING_SOCKTYPE 134 +# define BIO_R_INVALID_ARGUMENT 125 +# define BIO_R_INVALID_SOCKET 135 +# define BIO_R_IN_USE 123 +# define BIO_R_LENGTH_TOO_LONG 102 +# define BIO_R_LISTEN_V6_ONLY 136 +# define BIO_R_LOOKUP_RETURNED_NOTHING 142 +# define BIO_R_MALFORMED_HOST_OR_SERVICE 130 +# define BIO_R_NBIO_CONNECT_ERROR 110 +# define BIO_R_NO_ACCEPT_ADDR_OR_SERVICE_SPECIFIED 143 +# define BIO_R_NO_HOSTNAME_OR_SERVICE_SPECIFIED 144 +# define BIO_R_NO_PORT_DEFINED 113 +# define BIO_R_NO_SUCH_FILE 128 +# define BIO_R_NULL_PARAMETER 115 +# define BIO_R_UNABLE_TO_BIND_SOCKET 117 +# define BIO_R_UNABLE_TO_CREATE_SOCKET 118 +# define BIO_R_UNABLE_TO_KEEPALIVE 137 +# define BIO_R_UNABLE_TO_LISTEN_SOCKET 119 +# define BIO_R_UNABLE_TO_NODELAY 138 +# define BIO_R_UNABLE_TO_REUSEADDR 139 +# define BIO_R_UNAVAILABLE_IP_FAMILY 145 +# define BIO_R_UNINITIALIZED 120 +# define BIO_R_UNKNOWN_INFO_TYPE 140 +# define BIO_R_UNSUPPORTED_IP_FAMILY 146 +# define BIO_R_UNSUPPORTED_METHOD 121 +# define BIO_R_UNSUPPORTED_PROTOCOL_FAMILY 131 +# define BIO_R_WRITE_TO_READ_ONLY_BIO 126 +# define BIO_R_WSASTARTUP 122 + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/blowfish.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/blowfish.h new file mode 100644 index 00000000..cd3e460e --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/blowfish.h @@ -0,0 +1,61 @@ +/* + * Copyright 1995-2016 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_BLOWFISH_H +# define HEADER_BLOWFISH_H + +# include + +# ifndef OPENSSL_NO_BF +# include +# ifdef __cplusplus +extern "C" { +# endif + +# define BF_ENCRYPT 1 +# define BF_DECRYPT 0 + +/*- + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + * ! BF_LONG has to be at least 32 bits wide. ! + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + */ +# define BF_LONG unsigned int + +# define BF_ROUNDS 16 +# define BF_BLOCK 8 + +typedef struct bf_key_st { + BF_LONG P[BF_ROUNDS + 2]; + BF_LONG S[4 * 256]; +} BF_KEY; + +void BF_set_key(BF_KEY *key, int len, const unsigned char *data); + +void BF_encrypt(BF_LONG *data, const BF_KEY *key); +void BF_decrypt(BF_LONG *data, const BF_KEY *key); + +void BF_ecb_encrypt(const unsigned char *in, unsigned char *out, + const BF_KEY *key, int enc); +void BF_cbc_encrypt(const unsigned char *in, unsigned char *out, long length, + const BF_KEY *schedule, unsigned char *ivec, int enc); +void BF_cfb64_encrypt(const unsigned char *in, unsigned char *out, + long length, const BF_KEY *schedule, + unsigned char *ivec, int *num, int enc); +void BF_ofb64_encrypt(const unsigned char *in, unsigned char *out, + long length, const BF_KEY *schedule, + unsigned char *ivec, int *num); +const char *BF_options(void); + +# ifdef __cplusplus +} +# endif +# endif + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/bn.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/bn.h new file mode 100644 index 00000000..8af05d00 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/bn.h @@ -0,0 +1,539 @@ +/* + * Copyright 1995-2018 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 + * 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 + */ + +#ifndef HEADER_BN_H +# define HEADER_BN_H + +# include +# ifndef OPENSSL_NO_STDIO +# include +# endif +# include +# include +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * 64-bit processor with LP64 ABI + */ +# ifdef SIXTY_FOUR_BIT_LONG +# define BN_ULONG unsigned long +# define BN_BYTES 8 +# endif + +/* + * 64-bit processor other than LP64 ABI + */ +# ifdef SIXTY_FOUR_BIT +# define BN_ULONG unsigned long long +# define BN_BYTES 8 +# endif + +# ifdef THIRTY_TWO_BIT +# define BN_ULONG unsigned int +# define BN_BYTES 4 +# endif + +# define BN_BITS2 (BN_BYTES * 8) +# define BN_BITS (BN_BITS2 * 2) +# define BN_TBIT ((BN_ULONG)1 << (BN_BITS2 - 1)) + +# define BN_FLG_MALLOCED 0x01 +# define BN_FLG_STATIC_DATA 0x02 + +/* + * avoid leaking exponent information through timing, + * BN_mod_exp_mont() will call BN_mod_exp_mont_consttime, + * BN_div() will call BN_div_no_branch, + * BN_mod_inverse() will call BN_mod_inverse_no_branch. + */ +# define BN_FLG_CONSTTIME 0x04 +# define BN_FLG_SECURE 0x08 + +# if OPENSSL_API_COMPAT < 0x00908000L +/* deprecated name for the flag */ +# define BN_FLG_EXP_CONSTTIME BN_FLG_CONSTTIME +# define BN_FLG_FREE 0x8000 /* used for debugging */ +# endif + +void BN_set_flags(BIGNUM *b, int n); +int BN_get_flags(const BIGNUM *b, int n); + +/* Values for |top| in BN_rand() */ +#define BN_RAND_TOP_ANY -1 +#define BN_RAND_TOP_ONE 0 +#define BN_RAND_TOP_TWO 1 + +/* Values for |bottom| in BN_rand() */ +#define BN_RAND_BOTTOM_ANY 0 +#define BN_RAND_BOTTOM_ODD 1 + +/* + * get a clone of a BIGNUM with changed flags, for *temporary* use only (the + * two BIGNUMs cannot be used in parallel!). Also only for *read only* use. The + * value |dest| should be a newly allocated BIGNUM obtained via BN_new() that + * has not been otherwise initialised or used. + */ +void BN_with_flags(BIGNUM *dest, const BIGNUM *b, int flags); + +/* Wrapper function to make using BN_GENCB easier */ +int BN_GENCB_call(BN_GENCB *cb, int a, int b); + +BN_GENCB *BN_GENCB_new(void); +void BN_GENCB_free(BN_GENCB *cb); + +/* Populate a BN_GENCB structure with an "old"-style callback */ +void BN_GENCB_set_old(BN_GENCB *gencb, void (*callback) (int, int, void *), + void *cb_arg); + +/* Populate a BN_GENCB structure with a "new"-style callback */ +void BN_GENCB_set(BN_GENCB *gencb, int (*callback) (int, int, BN_GENCB *), + void *cb_arg); + +void *BN_GENCB_get_arg(BN_GENCB *cb); + +# define BN_prime_checks 0 /* default: select number of iterations based + * on the size of the number */ + +/* + * BN_prime_checks_for_size() returns the number of Miller-Rabin iterations + * that will be done for checking that a random number is probably prime. The + * error rate for accepting a composite number as prime depends on the size of + * the prime |b|. The error rates used are for calculating an RSA key with 2 primes, + * and so the level is what you would expect for a key of double the size of the + * prime. + * + * This table is generated using the algorithm of FIPS PUB 186-4 + * Digital Signature Standard (DSS), section F.1, page 117. + * (https://dx.doi.org/10.6028/NIST.FIPS.186-4) + * + * The following magma script was used to generate the output: + * securitybits:=125; + * k:=1024; + * for t:=1 to 65 do + * for M:=3 to Floor(2*Sqrt(k-1)-1) do + * S:=0; + * // Sum over m + * for m:=3 to M do + * s:=0; + * // Sum over j + * for j:=2 to m do + * s+:=(RealField(32)!2)^-(j+(k-1)/j); + * end for; + * S+:=2^(m-(m-1)*t)*s; + * end for; + * A:=2^(k-2-M*t); + * B:=8*(Pi(RealField(32))^2-6)/3*2^(k-2)*S; + * pkt:=2.00743*Log(2)*k*2^-k*(A+B); + * seclevel:=Floor(-Log(2,pkt)); + * if seclevel ge securitybits then + * printf "k: %5o, security: %o bits (t: %o, M: %o)\n",k,seclevel,t,M; + * break; + * end if; + * end for; + * if seclevel ge securitybits then break; end if; + * end for; + * + * It can be run online at: + * http://magma.maths.usyd.edu.au/calc + * + * And will output: + * k: 1024, security: 129 bits (t: 6, M: 23) + * + * k is the number of bits of the prime, securitybits is the level we want to + * reach. + * + * prime length | RSA key size | # MR tests | security level + * -------------+--------------|------------+--------------- + * (b) >= 6394 | >= 12788 | 3 | 256 bit + * (b) >= 3747 | >= 7494 | 3 | 192 bit + * (b) >= 1345 | >= 2690 | 4 | 128 bit + * (b) >= 1080 | >= 2160 | 5 | 128 bit + * (b) >= 852 | >= 1704 | 5 | 112 bit + * (b) >= 476 | >= 952 | 5 | 80 bit + * (b) >= 400 | >= 800 | 6 | 80 bit + * (b) >= 347 | >= 694 | 7 | 80 bit + * (b) >= 308 | >= 616 | 8 | 80 bit + * (b) >= 55 | >= 110 | 27 | 64 bit + * (b) >= 6 | >= 12 | 34 | 64 bit + */ + +# define BN_prime_checks_for_size(b) ((b) >= 3747 ? 3 : \ + (b) >= 1345 ? 4 : \ + (b) >= 476 ? 5 : \ + (b) >= 400 ? 6 : \ + (b) >= 347 ? 7 : \ + (b) >= 308 ? 8 : \ + (b) >= 55 ? 27 : \ + /* b >= 6 */ 34) + +# define BN_num_bytes(a) ((BN_num_bits(a)+7)/8) + +int BN_abs_is_word(const BIGNUM *a, const BN_ULONG w); +int BN_is_zero(const BIGNUM *a); +int BN_is_one(const BIGNUM *a); +int BN_is_word(const BIGNUM *a, const BN_ULONG w); +int BN_is_odd(const BIGNUM *a); + +# define BN_one(a) (BN_set_word((a),1)) + +void BN_zero_ex(BIGNUM *a); + +# if OPENSSL_API_COMPAT >= 0x00908000L +# define BN_zero(a) BN_zero_ex(a) +# else +# define BN_zero(a) (BN_set_word((a),0)) +# endif + +const BIGNUM *BN_value_one(void); +char *BN_options(void); +BN_CTX *BN_CTX_new(void); +BN_CTX *BN_CTX_secure_new(void); +void BN_CTX_free(BN_CTX *c); +void BN_CTX_start(BN_CTX *ctx); +BIGNUM *BN_CTX_get(BN_CTX *ctx); +void BN_CTX_end(BN_CTX *ctx); +int BN_rand(BIGNUM *rnd, int bits, int top, int bottom); +int BN_priv_rand(BIGNUM *rnd, int bits, int top, int bottom); +int BN_rand_range(BIGNUM *rnd, const BIGNUM *range); +int BN_priv_rand_range(BIGNUM *rnd, const BIGNUM *range); +int BN_pseudo_rand(BIGNUM *rnd, int bits, int top, int bottom); +int BN_pseudo_rand_range(BIGNUM *rnd, const BIGNUM *range); +int BN_num_bits(const BIGNUM *a); +int BN_num_bits_word(BN_ULONG l); +int BN_security_bits(int L, int N); +BIGNUM *BN_new(void); +BIGNUM *BN_secure_new(void); +void BN_clear_free(BIGNUM *a); +BIGNUM *BN_copy(BIGNUM *a, const BIGNUM *b); +void BN_swap(BIGNUM *a, BIGNUM *b); +BIGNUM *BN_bin2bn(const unsigned char *s, int len, BIGNUM *ret); +int BN_bn2bin(const BIGNUM *a, unsigned char *to); +int BN_bn2binpad(const BIGNUM *a, unsigned char *to, int tolen); +BIGNUM *BN_lebin2bn(const unsigned char *s, int len, BIGNUM *ret); +int BN_bn2lebinpad(const BIGNUM *a, unsigned char *to, int tolen); +BIGNUM *BN_mpi2bn(const unsigned char *s, int len, BIGNUM *ret); +int BN_bn2mpi(const BIGNUM *a, unsigned char *to); +int BN_sub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); +int BN_usub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); +int BN_uadd(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); +int BN_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); +int BN_mul(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); +int BN_sqr(BIGNUM *r, const BIGNUM *a, BN_CTX *ctx); +/** BN_set_negative sets sign of a BIGNUM + * \param b pointer to the BIGNUM object + * \param n 0 if the BIGNUM b should be positive and a value != 0 otherwise + */ +void BN_set_negative(BIGNUM *b, int n); +/** BN_is_negative returns 1 if the BIGNUM is negative + * \param b pointer to the BIGNUM object + * \return 1 if a < 0 and 0 otherwise + */ +int BN_is_negative(const BIGNUM *b); + +int BN_div(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m, const BIGNUM *d, + BN_CTX *ctx); +# define BN_mod(rem,m,d,ctx) BN_div(NULL,(rem),(m),(d),(ctx)) +int BN_nnmod(BIGNUM *r, const BIGNUM *m, const BIGNUM *d, BN_CTX *ctx); +int BN_mod_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m, + BN_CTX *ctx); +int BN_mod_add_quick(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, + const BIGNUM *m); +int BN_mod_sub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m, + BN_CTX *ctx); +int BN_mod_sub_quick(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, + const BIGNUM *m); +int BN_mod_mul(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m, + BN_CTX *ctx); +int BN_mod_sqr(BIGNUM *r, const BIGNUM *a, const BIGNUM *m, BN_CTX *ctx); +int BN_mod_lshift1(BIGNUM *r, const BIGNUM *a, const BIGNUM *m, BN_CTX *ctx); +int BN_mod_lshift1_quick(BIGNUM *r, const BIGNUM *a, const BIGNUM *m); +int BN_mod_lshift(BIGNUM *r, const BIGNUM *a, int n, const BIGNUM *m, + BN_CTX *ctx); +int BN_mod_lshift_quick(BIGNUM *r, const BIGNUM *a, int n, const BIGNUM *m); + +BN_ULONG BN_mod_word(const BIGNUM *a, BN_ULONG w); +BN_ULONG BN_div_word(BIGNUM *a, BN_ULONG w); +int BN_mul_word(BIGNUM *a, BN_ULONG w); +int BN_add_word(BIGNUM *a, BN_ULONG w); +int BN_sub_word(BIGNUM *a, BN_ULONG w); +int BN_set_word(BIGNUM *a, BN_ULONG w); +BN_ULONG BN_get_word(const BIGNUM *a); + +int BN_cmp(const BIGNUM *a, const BIGNUM *b); +void BN_free(BIGNUM *a); +int BN_is_bit_set(const BIGNUM *a, int n); +int BN_lshift(BIGNUM *r, const BIGNUM *a, int n); +int BN_lshift1(BIGNUM *r, const BIGNUM *a); +int BN_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); + +int BN_mod_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, + const BIGNUM *m, BN_CTX *ctx); +int BN_mod_exp_mont(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, + const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx); +int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p, + const BIGNUM *m, BN_CTX *ctx, + BN_MONT_CTX *in_mont); +int BN_mod_exp_mont_word(BIGNUM *r, BN_ULONG a, const BIGNUM *p, + const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx); +int BN_mod_exp2_mont(BIGNUM *r, const BIGNUM *a1, const BIGNUM *p1, + const BIGNUM *a2, const BIGNUM *p2, const BIGNUM *m, + BN_CTX *ctx, BN_MONT_CTX *m_ctx); +int BN_mod_exp_simple(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, + const BIGNUM *m, BN_CTX *ctx); + +int BN_mask_bits(BIGNUM *a, int n); +# ifndef OPENSSL_NO_STDIO +int BN_print_fp(FILE *fp, const BIGNUM *a); +# endif +int BN_print(BIO *bio, const BIGNUM *a); +int BN_reciprocal(BIGNUM *r, const BIGNUM *m, int len, BN_CTX *ctx); +int BN_rshift(BIGNUM *r, const BIGNUM *a, int n); +int BN_rshift1(BIGNUM *r, const BIGNUM *a); +void BN_clear(BIGNUM *a); +BIGNUM *BN_dup(const BIGNUM *a); +int BN_ucmp(const BIGNUM *a, const BIGNUM *b); +int BN_set_bit(BIGNUM *a, int n); +int BN_clear_bit(BIGNUM *a, int n); +char *BN_bn2hex(const BIGNUM *a); +char *BN_bn2dec(const BIGNUM *a); +int BN_hex2bn(BIGNUM **a, const char *str); +int BN_dec2bn(BIGNUM **a, const char *str); +int BN_asc2bn(BIGNUM **a, const char *str); +int BN_gcd(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); +int BN_kronecker(const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); /* returns + * -2 for + * error */ +BIGNUM *BN_mod_inverse(BIGNUM *ret, + const BIGNUM *a, const BIGNUM *n, BN_CTX *ctx); +BIGNUM *BN_mod_sqrt(BIGNUM *ret, + const BIGNUM *a, const BIGNUM *n, BN_CTX *ctx); + +void BN_consttime_swap(BN_ULONG swap, BIGNUM *a, BIGNUM *b, int nwords); + +/* Deprecated versions */ +DEPRECATEDIN_0_9_8(BIGNUM *BN_generate_prime(BIGNUM *ret, int bits, int safe, + const BIGNUM *add, + const BIGNUM *rem, + void (*callback) (int, int, + void *), + void *cb_arg)) +DEPRECATEDIN_0_9_8(int + BN_is_prime(const BIGNUM *p, int nchecks, + void (*callback) (int, int, void *), + BN_CTX *ctx, void *cb_arg)) +DEPRECATEDIN_0_9_8(int + BN_is_prime_fasttest(const BIGNUM *p, int nchecks, + void (*callback) (int, int, void *), + BN_CTX *ctx, void *cb_arg, + int do_trial_division)) + +/* Newer versions */ +int BN_generate_prime_ex(BIGNUM *ret, int bits, int safe, const BIGNUM *add, + const BIGNUM *rem, BN_GENCB *cb); +int BN_is_prime_ex(const BIGNUM *p, int nchecks, BN_CTX *ctx, BN_GENCB *cb); +int BN_is_prime_fasttest_ex(const BIGNUM *p, int nchecks, BN_CTX *ctx, + int do_trial_division, BN_GENCB *cb); + +int BN_X931_generate_Xpq(BIGNUM *Xp, BIGNUM *Xq, int nbits, BN_CTX *ctx); + +int BN_X931_derive_prime_ex(BIGNUM *p, BIGNUM *p1, BIGNUM *p2, + const BIGNUM *Xp, const BIGNUM *Xp1, + const BIGNUM *Xp2, const BIGNUM *e, BN_CTX *ctx, + BN_GENCB *cb); +int BN_X931_generate_prime_ex(BIGNUM *p, BIGNUM *p1, BIGNUM *p2, BIGNUM *Xp1, + BIGNUM *Xp2, const BIGNUM *Xp, const BIGNUM *e, + BN_CTX *ctx, BN_GENCB *cb); + +BN_MONT_CTX *BN_MONT_CTX_new(void); +int BN_mod_mul_montgomery(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, + BN_MONT_CTX *mont, BN_CTX *ctx); +int BN_to_montgomery(BIGNUM *r, const BIGNUM *a, BN_MONT_CTX *mont, + BN_CTX *ctx); +int BN_from_montgomery(BIGNUM *r, const BIGNUM *a, BN_MONT_CTX *mont, + BN_CTX *ctx); +void BN_MONT_CTX_free(BN_MONT_CTX *mont); +int BN_MONT_CTX_set(BN_MONT_CTX *mont, const BIGNUM *mod, BN_CTX *ctx); +BN_MONT_CTX *BN_MONT_CTX_copy(BN_MONT_CTX *to, BN_MONT_CTX *from); +BN_MONT_CTX *BN_MONT_CTX_set_locked(BN_MONT_CTX **pmont, CRYPTO_RWLOCK *lock, + const BIGNUM *mod, BN_CTX *ctx); + +/* BN_BLINDING flags */ +# define BN_BLINDING_NO_UPDATE 0x00000001 +# define BN_BLINDING_NO_RECREATE 0x00000002 + +BN_BLINDING *BN_BLINDING_new(const BIGNUM *A, const BIGNUM *Ai, BIGNUM *mod); +void BN_BLINDING_free(BN_BLINDING *b); +int BN_BLINDING_update(BN_BLINDING *b, BN_CTX *ctx); +int BN_BLINDING_convert(BIGNUM *n, BN_BLINDING *b, BN_CTX *ctx); +int BN_BLINDING_invert(BIGNUM *n, BN_BLINDING *b, BN_CTX *ctx); +int BN_BLINDING_convert_ex(BIGNUM *n, BIGNUM *r, BN_BLINDING *b, BN_CTX *); +int BN_BLINDING_invert_ex(BIGNUM *n, const BIGNUM *r, BN_BLINDING *b, + BN_CTX *); + +int BN_BLINDING_is_current_thread(BN_BLINDING *b); +void BN_BLINDING_set_current_thread(BN_BLINDING *b); +int BN_BLINDING_lock(BN_BLINDING *b); +int BN_BLINDING_unlock(BN_BLINDING *b); + +unsigned long BN_BLINDING_get_flags(const BN_BLINDING *); +void BN_BLINDING_set_flags(BN_BLINDING *, unsigned long); +BN_BLINDING *BN_BLINDING_create_param(BN_BLINDING *b, + const BIGNUM *e, BIGNUM *m, BN_CTX *ctx, + int (*bn_mod_exp) (BIGNUM *r, + const BIGNUM *a, + const BIGNUM *p, + const BIGNUM *m, + BN_CTX *ctx, + BN_MONT_CTX *m_ctx), + BN_MONT_CTX *m_ctx); + +DEPRECATEDIN_0_9_8(void BN_set_params(int mul, int high, int low, int mont)) +DEPRECATEDIN_0_9_8(int BN_get_params(int which)) /* 0, mul, 1 high, 2 low, 3 + * mont */ + +BN_RECP_CTX *BN_RECP_CTX_new(void); +void BN_RECP_CTX_free(BN_RECP_CTX *recp); +int BN_RECP_CTX_set(BN_RECP_CTX *recp, const BIGNUM *rdiv, BN_CTX *ctx); +int BN_mod_mul_reciprocal(BIGNUM *r, const BIGNUM *x, const BIGNUM *y, + BN_RECP_CTX *recp, BN_CTX *ctx); +int BN_mod_exp_recp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, + const BIGNUM *m, BN_CTX *ctx); +int BN_div_recp(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m, + BN_RECP_CTX *recp, BN_CTX *ctx); + +# ifndef OPENSSL_NO_EC2M + +/* + * Functions for arithmetic over binary polynomials represented by BIGNUMs. + * The BIGNUM::neg property of BIGNUMs representing binary polynomials is + * ignored. Note that input arguments are not const so that their bit arrays + * can be expanded to the appropriate size if needed. + */ + +/* + * r = a + b + */ +int BN_GF2m_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); +# define BN_GF2m_sub(r, a, b) BN_GF2m_add(r, a, b) +/* + * r=a mod p + */ +int BN_GF2m_mod(BIGNUM *r, const BIGNUM *a, const BIGNUM *p); +/* r = (a * b) mod p */ +int BN_GF2m_mod_mul(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, + const BIGNUM *p, BN_CTX *ctx); +/* r = (a * a) mod p */ +int BN_GF2m_mod_sqr(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); +/* r = (1 / b) mod p */ +int BN_GF2m_mod_inv(BIGNUM *r, const BIGNUM *b, const BIGNUM *p, BN_CTX *ctx); +/* r = (a / b) mod p */ +int BN_GF2m_mod_div(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, + const BIGNUM *p, BN_CTX *ctx); +/* r = (a ^ b) mod p */ +int BN_GF2m_mod_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, + const BIGNUM *p, BN_CTX *ctx); +/* r = sqrt(a) mod p */ +int BN_GF2m_mod_sqrt(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, + BN_CTX *ctx); +/* r^2 + r = a mod p */ +int BN_GF2m_mod_solve_quad(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, + BN_CTX *ctx); +# define BN_GF2m_cmp(a, b) BN_ucmp((a), (b)) +/*- + * Some functions allow for representation of the irreducible polynomials + * as an unsigned int[], say p. The irreducible f(t) is then of the form: + * t^p[0] + t^p[1] + ... + t^p[k] + * where m = p[0] > p[1] > ... > p[k] = 0. + */ +/* r = a mod p */ +int BN_GF2m_mod_arr(BIGNUM *r, const BIGNUM *a, const int p[]); +/* r = (a * b) mod p */ +int BN_GF2m_mod_mul_arr(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, + const int p[], BN_CTX *ctx); +/* r = (a * a) mod p */ +int BN_GF2m_mod_sqr_arr(BIGNUM *r, const BIGNUM *a, const int p[], + BN_CTX *ctx); +/* r = (1 / b) mod p */ +int BN_GF2m_mod_inv_arr(BIGNUM *r, const BIGNUM *b, const int p[], + BN_CTX *ctx); +/* r = (a / b) mod p */ +int BN_GF2m_mod_div_arr(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, + const int p[], BN_CTX *ctx); +/* r = (a ^ b) mod p */ +int BN_GF2m_mod_exp_arr(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, + const int p[], BN_CTX *ctx); +/* r = sqrt(a) mod p */ +int BN_GF2m_mod_sqrt_arr(BIGNUM *r, const BIGNUM *a, + const int p[], BN_CTX *ctx); +/* r^2 + r = a mod p */ +int BN_GF2m_mod_solve_quad_arr(BIGNUM *r, const BIGNUM *a, + const int p[], BN_CTX *ctx); +int BN_GF2m_poly2arr(const BIGNUM *a, int p[], int max); +int BN_GF2m_arr2poly(const int p[], BIGNUM *a); + +# endif + +/* + * faster mod functions for the 'NIST primes' 0 <= a < p^2 + */ +int BN_nist_mod_192(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); +int BN_nist_mod_224(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); +int BN_nist_mod_256(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); +int BN_nist_mod_384(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); +int BN_nist_mod_521(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); + +const BIGNUM *BN_get0_nist_prime_192(void); +const BIGNUM *BN_get0_nist_prime_224(void); +const BIGNUM *BN_get0_nist_prime_256(void); +const BIGNUM *BN_get0_nist_prime_384(void); +const BIGNUM *BN_get0_nist_prime_521(void); + +int (*BN_nist_mod_func(const BIGNUM *p)) (BIGNUM *r, const BIGNUM *a, + const BIGNUM *field, BN_CTX *ctx); + +int BN_generate_dsa_nonce(BIGNUM *out, const BIGNUM *range, + const BIGNUM *priv, const unsigned char *message, + size_t message_len, BN_CTX *ctx); + +/* Primes from RFC 2409 */ +BIGNUM *BN_get_rfc2409_prime_768(BIGNUM *bn); +BIGNUM *BN_get_rfc2409_prime_1024(BIGNUM *bn); + +/* Primes from RFC 3526 */ +BIGNUM *BN_get_rfc3526_prime_1536(BIGNUM *bn); +BIGNUM *BN_get_rfc3526_prime_2048(BIGNUM *bn); +BIGNUM *BN_get_rfc3526_prime_3072(BIGNUM *bn); +BIGNUM *BN_get_rfc3526_prime_4096(BIGNUM *bn); +BIGNUM *BN_get_rfc3526_prime_6144(BIGNUM *bn); +BIGNUM *BN_get_rfc3526_prime_8192(BIGNUM *bn); + +# if OPENSSL_API_COMPAT < 0x10100000L +# define get_rfc2409_prime_768 BN_get_rfc2409_prime_768 +# define get_rfc2409_prime_1024 BN_get_rfc2409_prime_1024 +# define get_rfc3526_prime_1536 BN_get_rfc3526_prime_1536 +# define get_rfc3526_prime_2048 BN_get_rfc3526_prime_2048 +# define get_rfc3526_prime_3072 BN_get_rfc3526_prime_3072 +# define get_rfc3526_prime_4096 BN_get_rfc3526_prime_4096 +# define get_rfc3526_prime_6144 BN_get_rfc3526_prime_6144 +# define get_rfc3526_prime_8192 BN_get_rfc3526_prime_8192 +# endif + +int BN_bntest_rand(BIGNUM *rnd, int bits, int top, int bottom); + + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/bnerr.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/bnerr.h new file mode 100644 index 00000000..9f3c7cfa --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/bnerr.h @@ -0,0 +1,100 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2019 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_BNERR_H +# define HEADER_BNERR_H + +# ifndef HEADER_SYMHACKS_H +# include +# endif + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_BN_strings(void); + +/* + * BN function codes. + */ +# define BN_F_BNRAND 127 +# define BN_F_BNRAND_RANGE 138 +# define BN_F_BN_BLINDING_CONVERT_EX 100 +# define BN_F_BN_BLINDING_CREATE_PARAM 128 +# define BN_F_BN_BLINDING_INVERT_EX 101 +# define BN_F_BN_BLINDING_NEW 102 +# define BN_F_BN_BLINDING_UPDATE 103 +# define BN_F_BN_BN2DEC 104 +# define BN_F_BN_BN2HEX 105 +# define BN_F_BN_COMPUTE_WNAF 142 +# define BN_F_BN_CTX_GET 116 +# define BN_F_BN_CTX_NEW 106 +# define BN_F_BN_CTX_START 129 +# define BN_F_BN_DIV 107 +# define BN_F_BN_DIV_RECP 130 +# define BN_F_BN_EXP 123 +# define BN_F_BN_EXPAND_INTERNAL 120 +# define BN_F_BN_GENCB_NEW 143 +# define BN_F_BN_GENERATE_DSA_NONCE 140 +# define BN_F_BN_GENERATE_PRIME_EX 141 +# define BN_F_BN_GF2M_MOD 131 +# define BN_F_BN_GF2M_MOD_EXP 132 +# define BN_F_BN_GF2M_MOD_MUL 133 +# define BN_F_BN_GF2M_MOD_SOLVE_QUAD 134 +# define BN_F_BN_GF2M_MOD_SOLVE_QUAD_ARR 135 +# define BN_F_BN_GF2M_MOD_SQR 136 +# define BN_F_BN_GF2M_MOD_SQRT 137 +# define BN_F_BN_LSHIFT 145 +# define BN_F_BN_MOD_EXP2_MONT 118 +# define BN_F_BN_MOD_EXP_MONT 109 +# define BN_F_BN_MOD_EXP_MONT_CONSTTIME 124 +# define BN_F_BN_MOD_EXP_MONT_WORD 117 +# define BN_F_BN_MOD_EXP_RECP 125 +# define BN_F_BN_MOD_EXP_SIMPLE 126 +# define BN_F_BN_MOD_INVERSE 110 +# define BN_F_BN_MOD_INVERSE_NO_BRANCH 139 +# define BN_F_BN_MOD_LSHIFT_QUICK 119 +# define BN_F_BN_MOD_SQRT 121 +# define BN_F_BN_MONT_CTX_NEW 149 +# define BN_F_BN_MPI2BN 112 +# define BN_F_BN_NEW 113 +# define BN_F_BN_POOL_GET 147 +# define BN_F_BN_RAND 114 +# define BN_F_BN_RAND_RANGE 122 +# define BN_F_BN_RECP_CTX_NEW 150 +# define BN_F_BN_RSHIFT 146 +# define BN_F_BN_SET_WORDS 144 +# define BN_F_BN_STACK_PUSH 148 +# define BN_F_BN_USUB 115 + +/* + * BN reason codes. + */ +# define BN_R_ARG2_LT_ARG3 100 +# define BN_R_BAD_RECIPROCAL 101 +# define BN_R_BIGNUM_TOO_LONG 114 +# define BN_R_BITS_TOO_SMALL 118 +# define BN_R_CALLED_WITH_EVEN_MODULUS 102 +# define BN_R_DIV_BY_ZERO 103 +# define BN_R_ENCODING_ERROR 104 +# define BN_R_EXPAND_ON_STATIC_BIGNUM_DATA 105 +# define BN_R_INPUT_NOT_REDUCED 110 +# define BN_R_INVALID_LENGTH 106 +# define BN_R_INVALID_RANGE 115 +# define BN_R_INVALID_SHIFT 119 +# define BN_R_NOT_A_SQUARE 111 +# define BN_R_NOT_INITIALIZED 107 +# define BN_R_NO_INVERSE 108 +# define BN_R_NO_SOLUTION 116 +# define BN_R_PRIVATE_KEY_TOO_LARGE 117 +# define BN_R_P_IS_NOT_PRIME 112 +# define BN_R_TOO_MANY_ITERATIONS 113 +# define BN_R_TOO_MANY_TEMPORARY_VARIABLES 109 + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/buffer.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/buffer.h new file mode 100644 index 00000000..d2765766 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/buffer.h @@ -0,0 +1,58 @@ +/* + * Copyright 1995-2018 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_BUFFER_H +# define HEADER_BUFFER_H + +# include +# ifndef HEADER_CRYPTO_H +# include +# endif +# include + + +#ifdef __cplusplus +extern "C" { +#endif + +# include +# include + +/* + * These names are outdated as of OpenSSL 1.1; a future release + * will move them to be deprecated. + */ +# define BUF_strdup(s) OPENSSL_strdup(s) +# define BUF_strndup(s, size) OPENSSL_strndup(s, size) +# define BUF_memdup(data, size) OPENSSL_memdup(data, size) +# define BUF_strlcpy(dst, src, size) OPENSSL_strlcpy(dst, src, size) +# define BUF_strlcat(dst, src, size) OPENSSL_strlcat(dst, src, size) +# define BUF_strnlen(str, maxlen) OPENSSL_strnlen(str, maxlen) + +struct buf_mem_st { + size_t length; /* current number of bytes */ + char *data; + size_t max; /* size of buffer */ + unsigned long flags; +}; + +# define BUF_MEM_FLAG_SECURE 0x01 + +BUF_MEM *BUF_MEM_new(void); +BUF_MEM *BUF_MEM_new_ex(unsigned long flags); +void BUF_MEM_free(BUF_MEM *a); +size_t BUF_MEM_grow(BUF_MEM *str, size_t len); +size_t BUF_MEM_grow_clean(BUF_MEM *str, size_t len); +void BUF_reverse(unsigned char *out, const unsigned char *in, size_t siz); + + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/buffererr.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/buffererr.h new file mode 100644 index 00000000..04f6ff7a --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/buffererr.h @@ -0,0 +1,34 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2019 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_BUFERR_H +# define HEADER_BUFERR_H + +# ifndef HEADER_SYMHACKS_H +# include +# endif + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_BUF_strings(void); + +/* + * BUF function codes. + */ +# define BUF_F_BUF_MEM_GROW 100 +# define BUF_F_BUF_MEM_GROW_CLEAN 105 +# define BUF_F_BUF_MEM_NEW 101 + +/* + * BUF reason codes. + */ + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/camellia.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/camellia.h new file mode 100644 index 00000000..151f3c13 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/camellia.h @@ -0,0 +1,83 @@ +/* + * Copyright 2006-2016 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_CAMELLIA_H +# define HEADER_CAMELLIA_H + +# include + +# ifndef OPENSSL_NO_CAMELLIA +# include +#ifdef __cplusplus +extern "C" { +#endif + +# define CAMELLIA_ENCRYPT 1 +# define CAMELLIA_DECRYPT 0 + +/* + * Because array size can't be a const in C, the following two are macros. + * Both sizes are in bytes. + */ + +/* This should be a hidden type, but EVP requires that the size be known */ + +# define CAMELLIA_BLOCK_SIZE 16 +# define CAMELLIA_TABLE_BYTE_LEN 272 +# define CAMELLIA_TABLE_WORD_LEN (CAMELLIA_TABLE_BYTE_LEN / 4) + +typedef unsigned int KEY_TABLE_TYPE[CAMELLIA_TABLE_WORD_LEN]; /* to match + * with WORD */ + +struct camellia_key_st { + union { + double d; /* ensures 64-bit align */ + KEY_TABLE_TYPE rd_key; + } u; + int grand_rounds; +}; +typedef struct camellia_key_st CAMELLIA_KEY; + +int Camellia_set_key(const unsigned char *userKey, const int bits, + CAMELLIA_KEY *key); + +void Camellia_encrypt(const unsigned char *in, unsigned char *out, + const CAMELLIA_KEY *key); +void Camellia_decrypt(const unsigned char *in, unsigned char *out, + const CAMELLIA_KEY *key); + +void Camellia_ecb_encrypt(const unsigned char *in, unsigned char *out, + const CAMELLIA_KEY *key, const int enc); +void Camellia_cbc_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const CAMELLIA_KEY *key, + unsigned char *ivec, const int enc); +void Camellia_cfb128_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const CAMELLIA_KEY *key, + unsigned char *ivec, int *num, const int enc); +void Camellia_cfb1_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const CAMELLIA_KEY *key, + unsigned char *ivec, int *num, const int enc); +void Camellia_cfb8_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const CAMELLIA_KEY *key, + unsigned char *ivec, int *num, const int enc); +void Camellia_ofb128_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const CAMELLIA_KEY *key, + unsigned char *ivec, int *num); +void Camellia_ctr128_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const CAMELLIA_KEY *key, + unsigned char ivec[CAMELLIA_BLOCK_SIZE], + unsigned char ecount_buf[CAMELLIA_BLOCK_SIZE], + unsigned int *num); + +# ifdef __cplusplus +} +# endif +# endif + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cast.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cast.h new file mode 100644 index 00000000..2cc89ae0 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cast.h @@ -0,0 +1,53 @@ +/* + * Copyright 1995-2016 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_CAST_H +# define HEADER_CAST_H + +# include + +# ifndef OPENSSL_NO_CAST +# ifdef __cplusplus +extern "C" { +# endif + +# define CAST_ENCRYPT 1 +# define CAST_DECRYPT 0 + +# define CAST_LONG unsigned int + +# define CAST_BLOCK 8 +# define CAST_KEY_LENGTH 16 + +typedef struct cast_key_st { + CAST_LONG data[32]; + int short_key; /* Use reduced rounds for short key */ +} CAST_KEY; + +void CAST_set_key(CAST_KEY *key, int len, const unsigned char *data); +void CAST_ecb_encrypt(const unsigned char *in, unsigned char *out, + const CAST_KEY *key, int enc); +void CAST_encrypt(CAST_LONG *data, const CAST_KEY *key); +void CAST_decrypt(CAST_LONG *data, const CAST_KEY *key); +void CAST_cbc_encrypt(const unsigned char *in, unsigned char *out, + long length, const CAST_KEY *ks, unsigned char *iv, + int enc); +void CAST_cfb64_encrypt(const unsigned char *in, unsigned char *out, + long length, const CAST_KEY *schedule, + unsigned char *ivec, int *num, int enc); +void CAST_ofb64_encrypt(const unsigned char *in, unsigned char *out, + long length, const CAST_KEY *schedule, + unsigned char *ivec, int *num); + +# ifdef __cplusplus +} +# endif +# endif + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cmac.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cmac.h new file mode 100644 index 00000000..3535a9ab --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cmac.h @@ -0,0 +1,41 @@ +/* + * Copyright 2010-2016 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_CMAC_H +# define HEADER_CMAC_H + +# ifndef OPENSSL_NO_CMAC + +#ifdef __cplusplus +extern "C" { +#endif + +# include + +/* Opaque */ +typedef struct CMAC_CTX_st CMAC_CTX; + +CMAC_CTX *CMAC_CTX_new(void); +void CMAC_CTX_cleanup(CMAC_CTX *ctx); +void CMAC_CTX_free(CMAC_CTX *ctx); +EVP_CIPHER_CTX *CMAC_CTX_get0_cipher_ctx(CMAC_CTX *ctx); +int CMAC_CTX_copy(CMAC_CTX *out, const CMAC_CTX *in); + +int CMAC_Init(CMAC_CTX *ctx, const void *key, size_t keylen, + const EVP_CIPHER *cipher, ENGINE *impl); +int CMAC_Update(CMAC_CTX *ctx, const void *data, size_t dlen); +int CMAC_Final(CMAC_CTX *ctx, unsigned char *out, size_t *poutlen); +int CMAC_resume(CMAC_CTX *ctx); + +#ifdef __cplusplus +} +#endif + +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cms.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cms.h new file mode 100644 index 00000000..c7627968 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cms.h @@ -0,0 +1,339 @@ +/* + * Copyright 2008-2019 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_CMS_H +# define HEADER_CMS_H + +# include + +# ifndef OPENSSL_NO_CMS +# include +# include +# include +# ifdef __cplusplus +extern "C" { +# endif + +typedef struct CMS_ContentInfo_st CMS_ContentInfo; +typedef struct CMS_SignerInfo_st CMS_SignerInfo; +typedef struct CMS_CertificateChoices CMS_CertificateChoices; +typedef struct CMS_RevocationInfoChoice_st CMS_RevocationInfoChoice; +typedef struct CMS_RecipientInfo_st CMS_RecipientInfo; +typedef struct CMS_ReceiptRequest_st CMS_ReceiptRequest; +typedef struct CMS_Receipt_st CMS_Receipt; +typedef struct CMS_RecipientEncryptedKey_st CMS_RecipientEncryptedKey; +typedef struct CMS_OtherKeyAttribute_st CMS_OtherKeyAttribute; + +DEFINE_STACK_OF(CMS_SignerInfo) +DEFINE_STACK_OF(CMS_RecipientEncryptedKey) +DEFINE_STACK_OF(CMS_RecipientInfo) +DEFINE_STACK_OF(CMS_RevocationInfoChoice) +DECLARE_ASN1_FUNCTIONS(CMS_ContentInfo) +DECLARE_ASN1_FUNCTIONS(CMS_ReceiptRequest) +DECLARE_ASN1_PRINT_FUNCTION(CMS_ContentInfo) + +# define CMS_SIGNERINFO_ISSUER_SERIAL 0 +# define CMS_SIGNERINFO_KEYIDENTIFIER 1 + +# define CMS_RECIPINFO_NONE -1 +# define CMS_RECIPINFO_TRANS 0 +# define CMS_RECIPINFO_AGREE 1 +# define CMS_RECIPINFO_KEK 2 +# define CMS_RECIPINFO_PASS 3 +# define CMS_RECIPINFO_OTHER 4 + +/* S/MIME related flags */ + +# define CMS_TEXT 0x1 +# define CMS_NOCERTS 0x2 +# define CMS_NO_CONTENT_VERIFY 0x4 +# define CMS_NO_ATTR_VERIFY 0x8 +# define CMS_NOSIGS \ + (CMS_NO_CONTENT_VERIFY|CMS_NO_ATTR_VERIFY) +# define CMS_NOINTERN 0x10 +# define CMS_NO_SIGNER_CERT_VERIFY 0x20 +# define CMS_NOVERIFY 0x20 +# define CMS_DETACHED 0x40 +# define CMS_BINARY 0x80 +# define CMS_NOATTR 0x100 +# define CMS_NOSMIMECAP 0x200 +# define CMS_NOOLDMIMETYPE 0x400 +# define CMS_CRLFEOL 0x800 +# define CMS_STREAM 0x1000 +# define CMS_NOCRL 0x2000 +# define CMS_PARTIAL 0x4000 +# define CMS_REUSE_DIGEST 0x8000 +# define CMS_USE_KEYID 0x10000 +# define CMS_DEBUG_DECRYPT 0x20000 +# define CMS_KEY_PARAM 0x40000 +# define CMS_ASCIICRLF 0x80000 + +const ASN1_OBJECT *CMS_get0_type(const CMS_ContentInfo *cms); + +BIO *CMS_dataInit(CMS_ContentInfo *cms, BIO *icont); +int CMS_dataFinal(CMS_ContentInfo *cms, BIO *bio); + +ASN1_OCTET_STRING **CMS_get0_content(CMS_ContentInfo *cms); +int CMS_is_detached(CMS_ContentInfo *cms); +int CMS_set_detached(CMS_ContentInfo *cms, int detached); + +# ifdef HEADER_PEM_H +DECLARE_PEM_rw_const(CMS, CMS_ContentInfo) +# endif +int CMS_stream(unsigned char ***boundary, CMS_ContentInfo *cms); +CMS_ContentInfo *d2i_CMS_bio(BIO *bp, CMS_ContentInfo **cms); +int i2d_CMS_bio(BIO *bp, CMS_ContentInfo *cms); + +BIO *BIO_new_CMS(BIO *out, CMS_ContentInfo *cms); +int i2d_CMS_bio_stream(BIO *out, CMS_ContentInfo *cms, BIO *in, int flags); +int PEM_write_bio_CMS_stream(BIO *out, CMS_ContentInfo *cms, BIO *in, + int flags); +CMS_ContentInfo *SMIME_read_CMS(BIO *bio, BIO **bcont); +int SMIME_write_CMS(BIO *bio, CMS_ContentInfo *cms, BIO *data, int flags); + +int CMS_final(CMS_ContentInfo *cms, BIO *data, BIO *dcont, + unsigned int flags); + +CMS_ContentInfo *CMS_sign(X509 *signcert, EVP_PKEY *pkey, + STACK_OF(X509) *certs, BIO *data, + unsigned int flags); + +CMS_ContentInfo *CMS_sign_receipt(CMS_SignerInfo *si, + X509 *signcert, EVP_PKEY *pkey, + STACK_OF(X509) *certs, unsigned int flags); + +int CMS_data(CMS_ContentInfo *cms, BIO *out, unsigned int flags); +CMS_ContentInfo *CMS_data_create(BIO *in, unsigned int flags); + +int CMS_digest_verify(CMS_ContentInfo *cms, BIO *dcont, BIO *out, + unsigned int flags); +CMS_ContentInfo *CMS_digest_create(BIO *in, const EVP_MD *md, + unsigned int flags); + +int CMS_EncryptedData_decrypt(CMS_ContentInfo *cms, + const unsigned char *key, size_t keylen, + BIO *dcont, BIO *out, unsigned int flags); + +CMS_ContentInfo *CMS_EncryptedData_encrypt(BIO *in, const EVP_CIPHER *cipher, + const unsigned char *key, + size_t keylen, unsigned int flags); + +int CMS_EncryptedData_set1_key(CMS_ContentInfo *cms, const EVP_CIPHER *ciph, + const unsigned char *key, size_t keylen); + +int CMS_verify(CMS_ContentInfo *cms, STACK_OF(X509) *certs, + X509_STORE *store, BIO *dcont, BIO *out, unsigned int flags); + +int CMS_verify_receipt(CMS_ContentInfo *rcms, CMS_ContentInfo *ocms, + STACK_OF(X509) *certs, + X509_STORE *store, unsigned int flags); + +STACK_OF(X509) *CMS_get0_signers(CMS_ContentInfo *cms); + +CMS_ContentInfo *CMS_encrypt(STACK_OF(X509) *certs, BIO *in, + const EVP_CIPHER *cipher, unsigned int flags); + +int CMS_decrypt(CMS_ContentInfo *cms, EVP_PKEY *pkey, X509 *cert, + BIO *dcont, BIO *out, unsigned int flags); + +int CMS_decrypt_set1_pkey(CMS_ContentInfo *cms, EVP_PKEY *pk, X509 *cert); +int CMS_decrypt_set1_key(CMS_ContentInfo *cms, + unsigned char *key, size_t keylen, + const unsigned char *id, size_t idlen); +int CMS_decrypt_set1_password(CMS_ContentInfo *cms, + unsigned char *pass, ossl_ssize_t passlen); + +STACK_OF(CMS_RecipientInfo) *CMS_get0_RecipientInfos(CMS_ContentInfo *cms); +int CMS_RecipientInfo_type(CMS_RecipientInfo *ri); +EVP_PKEY_CTX *CMS_RecipientInfo_get0_pkey_ctx(CMS_RecipientInfo *ri); +CMS_ContentInfo *CMS_EnvelopedData_create(const EVP_CIPHER *cipher); +CMS_RecipientInfo *CMS_add1_recipient_cert(CMS_ContentInfo *cms, + X509 *recip, unsigned int flags); +int CMS_RecipientInfo_set0_pkey(CMS_RecipientInfo *ri, EVP_PKEY *pkey); +int CMS_RecipientInfo_ktri_cert_cmp(CMS_RecipientInfo *ri, X509 *cert); +int CMS_RecipientInfo_ktri_get0_algs(CMS_RecipientInfo *ri, + EVP_PKEY **pk, X509 **recip, + X509_ALGOR **palg); +int CMS_RecipientInfo_ktri_get0_signer_id(CMS_RecipientInfo *ri, + ASN1_OCTET_STRING **keyid, + X509_NAME **issuer, + ASN1_INTEGER **sno); + +CMS_RecipientInfo *CMS_add0_recipient_key(CMS_ContentInfo *cms, int nid, + unsigned char *key, size_t keylen, + unsigned char *id, size_t idlen, + ASN1_GENERALIZEDTIME *date, + ASN1_OBJECT *otherTypeId, + ASN1_TYPE *otherType); + +int CMS_RecipientInfo_kekri_get0_id(CMS_RecipientInfo *ri, + X509_ALGOR **palg, + ASN1_OCTET_STRING **pid, + ASN1_GENERALIZEDTIME **pdate, + ASN1_OBJECT **potherid, + ASN1_TYPE **pothertype); + +int CMS_RecipientInfo_set0_key(CMS_RecipientInfo *ri, + unsigned char *key, size_t keylen); + +int CMS_RecipientInfo_kekri_id_cmp(CMS_RecipientInfo *ri, + const unsigned char *id, size_t idlen); + +int CMS_RecipientInfo_set0_password(CMS_RecipientInfo *ri, + unsigned char *pass, + ossl_ssize_t passlen); + +CMS_RecipientInfo *CMS_add0_recipient_password(CMS_ContentInfo *cms, + int iter, int wrap_nid, + int pbe_nid, + unsigned char *pass, + ossl_ssize_t passlen, + const EVP_CIPHER *kekciph); + +int CMS_RecipientInfo_decrypt(CMS_ContentInfo *cms, CMS_RecipientInfo *ri); +int CMS_RecipientInfo_encrypt(CMS_ContentInfo *cms, CMS_RecipientInfo *ri); + +int CMS_uncompress(CMS_ContentInfo *cms, BIO *dcont, BIO *out, + unsigned int flags); +CMS_ContentInfo *CMS_compress(BIO *in, int comp_nid, unsigned int flags); + +int CMS_set1_eContentType(CMS_ContentInfo *cms, const ASN1_OBJECT *oid); +const ASN1_OBJECT *CMS_get0_eContentType(CMS_ContentInfo *cms); + +CMS_CertificateChoices *CMS_add0_CertificateChoices(CMS_ContentInfo *cms); +int CMS_add0_cert(CMS_ContentInfo *cms, X509 *cert); +int CMS_add1_cert(CMS_ContentInfo *cms, X509 *cert); +STACK_OF(X509) *CMS_get1_certs(CMS_ContentInfo *cms); + +CMS_RevocationInfoChoice *CMS_add0_RevocationInfoChoice(CMS_ContentInfo *cms); +int CMS_add0_crl(CMS_ContentInfo *cms, X509_CRL *crl); +int CMS_add1_crl(CMS_ContentInfo *cms, X509_CRL *crl); +STACK_OF(X509_CRL) *CMS_get1_crls(CMS_ContentInfo *cms); + +int CMS_SignedData_init(CMS_ContentInfo *cms); +CMS_SignerInfo *CMS_add1_signer(CMS_ContentInfo *cms, + X509 *signer, EVP_PKEY *pk, const EVP_MD *md, + unsigned int flags); +EVP_PKEY_CTX *CMS_SignerInfo_get0_pkey_ctx(CMS_SignerInfo *si); +EVP_MD_CTX *CMS_SignerInfo_get0_md_ctx(CMS_SignerInfo *si); +STACK_OF(CMS_SignerInfo) *CMS_get0_SignerInfos(CMS_ContentInfo *cms); + +void CMS_SignerInfo_set1_signer_cert(CMS_SignerInfo *si, X509 *signer); +int CMS_SignerInfo_get0_signer_id(CMS_SignerInfo *si, + ASN1_OCTET_STRING **keyid, + X509_NAME **issuer, ASN1_INTEGER **sno); +int CMS_SignerInfo_cert_cmp(CMS_SignerInfo *si, X509 *cert); +int CMS_set1_signers_certs(CMS_ContentInfo *cms, STACK_OF(X509) *certs, + unsigned int flags); +void CMS_SignerInfo_get0_algs(CMS_SignerInfo *si, EVP_PKEY **pk, + X509 **signer, X509_ALGOR **pdig, + X509_ALGOR **psig); +ASN1_OCTET_STRING *CMS_SignerInfo_get0_signature(CMS_SignerInfo *si); +int CMS_SignerInfo_sign(CMS_SignerInfo *si); +int CMS_SignerInfo_verify(CMS_SignerInfo *si); +int CMS_SignerInfo_verify_content(CMS_SignerInfo *si, BIO *chain); + +int CMS_add_smimecap(CMS_SignerInfo *si, STACK_OF(X509_ALGOR) *algs); +int CMS_add_simple_smimecap(STACK_OF(X509_ALGOR) **algs, + int algnid, int keysize); +int CMS_add_standard_smimecap(STACK_OF(X509_ALGOR) **smcap); + +int CMS_signed_get_attr_count(const CMS_SignerInfo *si); +int CMS_signed_get_attr_by_NID(const CMS_SignerInfo *si, int nid, + int lastpos); +int CMS_signed_get_attr_by_OBJ(const CMS_SignerInfo *si, const ASN1_OBJECT *obj, + int lastpos); +X509_ATTRIBUTE *CMS_signed_get_attr(const CMS_SignerInfo *si, int loc); +X509_ATTRIBUTE *CMS_signed_delete_attr(CMS_SignerInfo *si, int loc); +int CMS_signed_add1_attr(CMS_SignerInfo *si, X509_ATTRIBUTE *attr); +int CMS_signed_add1_attr_by_OBJ(CMS_SignerInfo *si, + const ASN1_OBJECT *obj, int type, + const void *bytes, int len); +int CMS_signed_add1_attr_by_NID(CMS_SignerInfo *si, + int nid, int type, + const void *bytes, int len); +int CMS_signed_add1_attr_by_txt(CMS_SignerInfo *si, + const char *attrname, int type, + const void *bytes, int len); +void *CMS_signed_get0_data_by_OBJ(CMS_SignerInfo *si, const ASN1_OBJECT *oid, + int lastpos, int type); + +int CMS_unsigned_get_attr_count(const CMS_SignerInfo *si); +int CMS_unsigned_get_attr_by_NID(const CMS_SignerInfo *si, int nid, + int lastpos); +int CMS_unsigned_get_attr_by_OBJ(const CMS_SignerInfo *si, + const ASN1_OBJECT *obj, int lastpos); +X509_ATTRIBUTE *CMS_unsigned_get_attr(const CMS_SignerInfo *si, int loc); +X509_ATTRIBUTE *CMS_unsigned_delete_attr(CMS_SignerInfo *si, int loc); +int CMS_unsigned_add1_attr(CMS_SignerInfo *si, X509_ATTRIBUTE *attr); +int CMS_unsigned_add1_attr_by_OBJ(CMS_SignerInfo *si, + const ASN1_OBJECT *obj, int type, + const void *bytes, int len); +int CMS_unsigned_add1_attr_by_NID(CMS_SignerInfo *si, + int nid, int type, + const void *bytes, int len); +int CMS_unsigned_add1_attr_by_txt(CMS_SignerInfo *si, + const char *attrname, int type, + const void *bytes, int len); +void *CMS_unsigned_get0_data_by_OBJ(CMS_SignerInfo *si, ASN1_OBJECT *oid, + int lastpos, int type); + +int CMS_get1_ReceiptRequest(CMS_SignerInfo *si, CMS_ReceiptRequest **prr); +CMS_ReceiptRequest *CMS_ReceiptRequest_create0(unsigned char *id, int idlen, + int allorfirst, + STACK_OF(GENERAL_NAMES) + *receiptList, STACK_OF(GENERAL_NAMES) + *receiptsTo); +int CMS_add1_ReceiptRequest(CMS_SignerInfo *si, CMS_ReceiptRequest *rr); +void CMS_ReceiptRequest_get0_values(CMS_ReceiptRequest *rr, + ASN1_STRING **pcid, + int *pallorfirst, + STACK_OF(GENERAL_NAMES) **plist, + STACK_OF(GENERAL_NAMES) **prto); +int CMS_RecipientInfo_kari_get0_alg(CMS_RecipientInfo *ri, + X509_ALGOR **palg, + ASN1_OCTET_STRING **pukm); +STACK_OF(CMS_RecipientEncryptedKey) +*CMS_RecipientInfo_kari_get0_reks(CMS_RecipientInfo *ri); + +int CMS_RecipientInfo_kari_get0_orig_id(CMS_RecipientInfo *ri, + X509_ALGOR **pubalg, + ASN1_BIT_STRING **pubkey, + ASN1_OCTET_STRING **keyid, + X509_NAME **issuer, + ASN1_INTEGER **sno); + +int CMS_RecipientInfo_kari_orig_id_cmp(CMS_RecipientInfo *ri, X509 *cert); + +int CMS_RecipientEncryptedKey_get0_id(CMS_RecipientEncryptedKey *rek, + ASN1_OCTET_STRING **keyid, + ASN1_GENERALIZEDTIME **tm, + CMS_OtherKeyAttribute **other, + X509_NAME **issuer, ASN1_INTEGER **sno); +int CMS_RecipientEncryptedKey_cert_cmp(CMS_RecipientEncryptedKey *rek, + X509 *cert); +int CMS_RecipientInfo_kari_set0_pkey(CMS_RecipientInfo *ri, EVP_PKEY *pk); +EVP_CIPHER_CTX *CMS_RecipientInfo_kari_get0_ctx(CMS_RecipientInfo *ri); +int CMS_RecipientInfo_kari_decrypt(CMS_ContentInfo *cms, + CMS_RecipientInfo *ri, + CMS_RecipientEncryptedKey *rek); + +int CMS_SharedInfo_encode(unsigned char **pder, X509_ALGOR *kekalg, + ASN1_OCTET_STRING *ukm, int keylen); + +/* Backward compatibility for spelling errors. */ +# define CMS_R_UNKNOWN_DIGEST_ALGORITM CMS_R_UNKNOWN_DIGEST_ALGORITHM +# define CMS_R_UNSUPPORTED_RECPIENTINFO_TYPE \ + CMS_R_UNSUPPORTED_RECIPIENTINFO_TYPE + +# ifdef __cplusplus +} +# endif +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cmserr.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cmserr.h new file mode 100644 index 00000000..7dbc13dc --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cmserr.h @@ -0,0 +1,202 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2019 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_CMSERR_H +# define HEADER_CMSERR_H + +# ifndef HEADER_SYMHACKS_H +# include +# endif + +# include + +# ifndef OPENSSL_NO_CMS + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_CMS_strings(void); + +/* + * CMS function codes. + */ +# define CMS_F_CHECK_CONTENT 99 +# define CMS_F_CMS_ADD0_CERT 164 +# define CMS_F_CMS_ADD0_RECIPIENT_KEY 100 +# define CMS_F_CMS_ADD0_RECIPIENT_PASSWORD 165 +# define CMS_F_CMS_ADD1_RECEIPTREQUEST 158 +# define CMS_F_CMS_ADD1_RECIPIENT_CERT 101 +# define CMS_F_CMS_ADD1_SIGNER 102 +# define CMS_F_CMS_ADD1_SIGNINGTIME 103 +# define CMS_F_CMS_COMPRESS 104 +# define CMS_F_CMS_COMPRESSEDDATA_CREATE 105 +# define CMS_F_CMS_COMPRESSEDDATA_INIT_BIO 106 +# define CMS_F_CMS_COPY_CONTENT 107 +# define CMS_F_CMS_COPY_MESSAGEDIGEST 108 +# define CMS_F_CMS_DATA 109 +# define CMS_F_CMS_DATAFINAL 110 +# define CMS_F_CMS_DATAINIT 111 +# define CMS_F_CMS_DECRYPT 112 +# define CMS_F_CMS_DECRYPT_SET1_KEY 113 +# define CMS_F_CMS_DECRYPT_SET1_PASSWORD 166 +# define CMS_F_CMS_DECRYPT_SET1_PKEY 114 +# define CMS_F_CMS_DIGESTALGORITHM_FIND_CTX 115 +# define CMS_F_CMS_DIGESTALGORITHM_INIT_BIO 116 +# define CMS_F_CMS_DIGESTEDDATA_DO_FINAL 117 +# define CMS_F_CMS_DIGEST_VERIFY 118 +# define CMS_F_CMS_ENCODE_RECEIPT 161 +# define CMS_F_CMS_ENCRYPT 119 +# define CMS_F_CMS_ENCRYPTEDCONTENT_INIT 179 +# define CMS_F_CMS_ENCRYPTEDCONTENT_INIT_BIO 120 +# define CMS_F_CMS_ENCRYPTEDDATA_DECRYPT 121 +# define CMS_F_CMS_ENCRYPTEDDATA_ENCRYPT 122 +# define CMS_F_CMS_ENCRYPTEDDATA_SET1_KEY 123 +# define CMS_F_CMS_ENVELOPEDDATA_CREATE 124 +# define CMS_F_CMS_ENVELOPEDDATA_INIT_BIO 125 +# define CMS_F_CMS_ENVELOPED_DATA_INIT 126 +# define CMS_F_CMS_ENV_ASN1_CTRL 171 +# define CMS_F_CMS_FINAL 127 +# define CMS_F_CMS_GET0_CERTIFICATE_CHOICES 128 +# define CMS_F_CMS_GET0_CONTENT 129 +# define CMS_F_CMS_GET0_ECONTENT_TYPE 130 +# define CMS_F_CMS_GET0_ENVELOPED 131 +# define CMS_F_CMS_GET0_REVOCATION_CHOICES 132 +# define CMS_F_CMS_GET0_SIGNED 133 +# define CMS_F_CMS_MSGSIGDIGEST_ADD1 162 +# define CMS_F_CMS_RECEIPTREQUEST_CREATE0 159 +# define CMS_F_CMS_RECEIPT_VERIFY 160 +# define CMS_F_CMS_RECIPIENTINFO_DECRYPT 134 +# define CMS_F_CMS_RECIPIENTINFO_ENCRYPT 169 +# define CMS_F_CMS_RECIPIENTINFO_KARI_ENCRYPT 178 +# define CMS_F_CMS_RECIPIENTINFO_KARI_GET0_ALG 175 +# define CMS_F_CMS_RECIPIENTINFO_KARI_GET0_ORIG_ID 173 +# define CMS_F_CMS_RECIPIENTINFO_KARI_GET0_REKS 172 +# define CMS_F_CMS_RECIPIENTINFO_KARI_ORIG_ID_CMP 174 +# define CMS_F_CMS_RECIPIENTINFO_KEKRI_DECRYPT 135 +# define CMS_F_CMS_RECIPIENTINFO_KEKRI_ENCRYPT 136 +# define CMS_F_CMS_RECIPIENTINFO_KEKRI_GET0_ID 137 +# define CMS_F_CMS_RECIPIENTINFO_KEKRI_ID_CMP 138 +# define CMS_F_CMS_RECIPIENTINFO_KTRI_CERT_CMP 139 +# define CMS_F_CMS_RECIPIENTINFO_KTRI_DECRYPT 140 +# define CMS_F_CMS_RECIPIENTINFO_KTRI_ENCRYPT 141 +# define CMS_F_CMS_RECIPIENTINFO_KTRI_GET0_ALGS 142 +# define CMS_F_CMS_RECIPIENTINFO_KTRI_GET0_SIGNER_ID 143 +# define CMS_F_CMS_RECIPIENTINFO_PWRI_CRYPT 167 +# define CMS_F_CMS_RECIPIENTINFO_SET0_KEY 144 +# define CMS_F_CMS_RECIPIENTINFO_SET0_PASSWORD 168 +# define CMS_F_CMS_RECIPIENTINFO_SET0_PKEY 145 +# define CMS_F_CMS_SD_ASN1_CTRL 170 +# define CMS_F_CMS_SET1_IAS 176 +# define CMS_F_CMS_SET1_KEYID 177 +# define CMS_F_CMS_SET1_SIGNERIDENTIFIER 146 +# define CMS_F_CMS_SET_DETACHED 147 +# define CMS_F_CMS_SIGN 148 +# define CMS_F_CMS_SIGNED_DATA_INIT 149 +# define CMS_F_CMS_SIGNERINFO_CONTENT_SIGN 150 +# define CMS_F_CMS_SIGNERINFO_SIGN 151 +# define CMS_F_CMS_SIGNERINFO_VERIFY 152 +# define CMS_F_CMS_SIGNERINFO_VERIFY_CERT 153 +# define CMS_F_CMS_SIGNERINFO_VERIFY_CONTENT 154 +# define CMS_F_CMS_SIGN_RECEIPT 163 +# define CMS_F_CMS_SI_CHECK_ATTRIBUTES 183 +# define CMS_F_CMS_STREAM 155 +# define CMS_F_CMS_UNCOMPRESS 156 +# define CMS_F_CMS_VERIFY 157 +# define CMS_F_KEK_UNWRAP_KEY 180 + +/* + * CMS reason codes. + */ +# define CMS_R_ADD_SIGNER_ERROR 99 +# define CMS_R_ATTRIBUTE_ERROR 161 +# define CMS_R_CERTIFICATE_ALREADY_PRESENT 175 +# define CMS_R_CERTIFICATE_HAS_NO_KEYID 160 +# define CMS_R_CERTIFICATE_VERIFY_ERROR 100 +# define CMS_R_CIPHER_INITIALISATION_ERROR 101 +# define CMS_R_CIPHER_PARAMETER_INITIALISATION_ERROR 102 +# define CMS_R_CMS_DATAFINAL_ERROR 103 +# define CMS_R_CMS_LIB 104 +# define CMS_R_CONTENTIDENTIFIER_MISMATCH 170 +# define CMS_R_CONTENT_NOT_FOUND 105 +# define CMS_R_CONTENT_TYPE_MISMATCH 171 +# define CMS_R_CONTENT_TYPE_NOT_COMPRESSED_DATA 106 +# define CMS_R_CONTENT_TYPE_NOT_ENVELOPED_DATA 107 +# define CMS_R_CONTENT_TYPE_NOT_SIGNED_DATA 108 +# define CMS_R_CONTENT_VERIFY_ERROR 109 +# define CMS_R_CTRL_ERROR 110 +# define CMS_R_CTRL_FAILURE 111 +# define CMS_R_DECRYPT_ERROR 112 +# define CMS_R_ERROR_GETTING_PUBLIC_KEY 113 +# define CMS_R_ERROR_READING_MESSAGEDIGEST_ATTRIBUTE 114 +# define CMS_R_ERROR_SETTING_KEY 115 +# define CMS_R_ERROR_SETTING_RECIPIENTINFO 116 +# define CMS_R_INVALID_ENCRYPTED_KEY_LENGTH 117 +# define CMS_R_INVALID_KEY_ENCRYPTION_PARAMETER 176 +# define CMS_R_INVALID_KEY_LENGTH 118 +# define CMS_R_MD_BIO_INIT_ERROR 119 +# define CMS_R_MESSAGEDIGEST_ATTRIBUTE_WRONG_LENGTH 120 +# define CMS_R_MESSAGEDIGEST_WRONG_LENGTH 121 +# define CMS_R_MSGSIGDIGEST_ERROR 172 +# define CMS_R_MSGSIGDIGEST_VERIFICATION_FAILURE 162 +# define CMS_R_MSGSIGDIGEST_WRONG_LENGTH 163 +# define CMS_R_NEED_ONE_SIGNER 164 +# define CMS_R_NOT_A_SIGNED_RECEIPT 165 +# define CMS_R_NOT_ENCRYPTED_DATA 122 +# define CMS_R_NOT_KEK 123 +# define CMS_R_NOT_KEY_AGREEMENT 181 +# define CMS_R_NOT_KEY_TRANSPORT 124 +# define CMS_R_NOT_PWRI 177 +# define CMS_R_NOT_SUPPORTED_FOR_THIS_KEY_TYPE 125 +# define CMS_R_NO_CIPHER 126 +# define CMS_R_NO_CONTENT 127 +# define CMS_R_NO_CONTENT_TYPE 173 +# define CMS_R_NO_DEFAULT_DIGEST 128 +# define CMS_R_NO_DIGEST_SET 129 +# define CMS_R_NO_KEY 130 +# define CMS_R_NO_KEY_OR_CERT 174 +# define CMS_R_NO_MATCHING_DIGEST 131 +# define CMS_R_NO_MATCHING_RECIPIENT 132 +# define CMS_R_NO_MATCHING_SIGNATURE 166 +# define CMS_R_NO_MSGSIGDIGEST 167 +# define CMS_R_NO_PASSWORD 178 +# define CMS_R_NO_PRIVATE_KEY 133 +# define CMS_R_NO_PUBLIC_KEY 134 +# define CMS_R_NO_RECEIPT_REQUEST 168 +# define CMS_R_NO_SIGNERS 135 +# define CMS_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE 136 +# define CMS_R_RECEIPT_DECODE_ERROR 169 +# define CMS_R_RECIPIENT_ERROR 137 +# define CMS_R_SIGNER_CERTIFICATE_NOT_FOUND 138 +# define CMS_R_SIGNFINAL_ERROR 139 +# define CMS_R_SMIME_TEXT_ERROR 140 +# define CMS_R_STORE_INIT_ERROR 141 +# define CMS_R_TYPE_NOT_COMPRESSED_DATA 142 +# define CMS_R_TYPE_NOT_DATA 143 +# define CMS_R_TYPE_NOT_DIGESTED_DATA 144 +# define CMS_R_TYPE_NOT_ENCRYPTED_DATA 145 +# define CMS_R_TYPE_NOT_ENVELOPED_DATA 146 +# define CMS_R_UNABLE_TO_FINALIZE_CONTEXT 147 +# define CMS_R_UNKNOWN_CIPHER 148 +# define CMS_R_UNKNOWN_DIGEST_ALGORITHM 149 +# define CMS_R_UNKNOWN_ID 150 +# define CMS_R_UNSUPPORTED_COMPRESSION_ALGORITHM 151 +# define CMS_R_UNSUPPORTED_CONTENT_TYPE 152 +# define CMS_R_UNSUPPORTED_KEK_ALGORITHM 153 +# define CMS_R_UNSUPPORTED_KEY_ENCRYPTION_ALGORITHM 179 +# define CMS_R_UNSUPPORTED_RECIPIENTINFO_TYPE 155 +# define CMS_R_UNSUPPORTED_RECIPIENT_TYPE 154 +# define CMS_R_UNSUPPORTED_TYPE 156 +# define CMS_R_UNWRAP_ERROR 157 +# define CMS_R_UNWRAP_FAILURE 180 +# define CMS_R_VERIFICATION_FAILURE 158 +# define CMS_R_WRAP_ERROR 159 + +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/comp.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/comp.h new file mode 100644 index 00000000..d814d3cf --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/comp.h @@ -0,0 +1,53 @@ +/* + * Copyright 2015-2018 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_COMP_H +# define HEADER_COMP_H + +# include + +# ifndef OPENSSL_NO_COMP +# include +# include +# ifdef __cplusplus +extern "C" { +# endif + + + +COMP_CTX *COMP_CTX_new(COMP_METHOD *meth); +const COMP_METHOD *COMP_CTX_get_method(const COMP_CTX *ctx); +int COMP_CTX_get_type(const COMP_CTX* comp); +int COMP_get_type(const COMP_METHOD *meth); +const char *COMP_get_name(const COMP_METHOD *meth); +void COMP_CTX_free(COMP_CTX *ctx); + +int COMP_compress_block(COMP_CTX *ctx, unsigned char *out, int olen, + unsigned char *in, int ilen); +int COMP_expand_block(COMP_CTX *ctx, unsigned char *out, int olen, + unsigned char *in, int ilen); + +COMP_METHOD *COMP_zlib(void); + +#if OPENSSL_API_COMPAT < 0x10100000L +#define COMP_zlib_cleanup() while(0) continue +#endif + +# ifdef HEADER_BIO_H +# ifdef ZLIB +const BIO_METHOD *BIO_f_zlib(void); +# endif +# endif + + +# ifdef __cplusplus +} +# endif +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/comperr.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/comperr.h new file mode 100644 index 00000000..90231e9a --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/comperr.h @@ -0,0 +1,44 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2019 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_COMPERR_H +# define HEADER_COMPERR_H + +# ifndef HEADER_SYMHACKS_H +# include +# endif + +# include + +# ifndef OPENSSL_NO_COMP + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_COMP_strings(void); + +/* + * COMP function codes. + */ +# define COMP_F_BIO_ZLIB_FLUSH 99 +# define COMP_F_BIO_ZLIB_NEW 100 +# define COMP_F_BIO_ZLIB_READ 101 +# define COMP_F_BIO_ZLIB_WRITE 102 +# define COMP_F_COMP_CTX_NEW 103 + +/* + * COMP reason codes. + */ +# define COMP_R_ZLIB_DEFLATE_ERROR 99 +# define COMP_R_ZLIB_INFLATE_ERROR 100 +# define COMP_R_ZLIB_NOT_SUPPORTED 101 + +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/conf.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/conf.h new file mode 100644 index 00000000..7336cd2f --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/conf.h @@ -0,0 +1,168 @@ +/* + * Copyright 1995-2018 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_CONF_H +# define HEADER_CONF_H + +# include +# include +# include +# include +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct { + char *section; + char *name; + char *value; +} CONF_VALUE; + +DEFINE_STACK_OF(CONF_VALUE) +DEFINE_LHASH_OF(CONF_VALUE); + +struct conf_st; +struct conf_method_st; +typedef struct conf_method_st CONF_METHOD; + +struct conf_method_st { + const char *name; + CONF *(*create) (CONF_METHOD *meth); + int (*init) (CONF *conf); + int (*destroy) (CONF *conf); + int (*destroy_data) (CONF *conf); + int (*load_bio) (CONF *conf, BIO *bp, long *eline); + int (*dump) (const CONF *conf, BIO *bp); + int (*is_number) (const CONF *conf, char c); + int (*to_int) (const CONF *conf, char c); + int (*load) (CONF *conf, const char *name, long *eline); +}; + +/* Module definitions */ + +typedef struct conf_imodule_st CONF_IMODULE; +typedef struct conf_module_st CONF_MODULE; + +DEFINE_STACK_OF(CONF_MODULE) +DEFINE_STACK_OF(CONF_IMODULE) + +/* DSO module function typedefs */ +typedef int conf_init_func (CONF_IMODULE *md, const CONF *cnf); +typedef void conf_finish_func (CONF_IMODULE *md); + +# define CONF_MFLAGS_IGNORE_ERRORS 0x1 +# define CONF_MFLAGS_IGNORE_RETURN_CODES 0x2 +# define CONF_MFLAGS_SILENT 0x4 +# define CONF_MFLAGS_NO_DSO 0x8 +# define CONF_MFLAGS_IGNORE_MISSING_FILE 0x10 +# define CONF_MFLAGS_DEFAULT_SECTION 0x20 + +int CONF_set_default_method(CONF_METHOD *meth); +void CONF_set_nconf(CONF *conf, LHASH_OF(CONF_VALUE) *hash); +LHASH_OF(CONF_VALUE) *CONF_load(LHASH_OF(CONF_VALUE) *conf, const char *file, + long *eline); +# ifndef OPENSSL_NO_STDIO +LHASH_OF(CONF_VALUE) *CONF_load_fp(LHASH_OF(CONF_VALUE) *conf, FILE *fp, + long *eline); +# endif +LHASH_OF(CONF_VALUE) *CONF_load_bio(LHASH_OF(CONF_VALUE) *conf, BIO *bp, + long *eline); +STACK_OF(CONF_VALUE) *CONF_get_section(LHASH_OF(CONF_VALUE) *conf, + const char *section); +char *CONF_get_string(LHASH_OF(CONF_VALUE) *conf, const char *group, + const char *name); +long CONF_get_number(LHASH_OF(CONF_VALUE) *conf, const char *group, + const char *name); +void CONF_free(LHASH_OF(CONF_VALUE) *conf); +#ifndef OPENSSL_NO_STDIO +int CONF_dump_fp(LHASH_OF(CONF_VALUE) *conf, FILE *out); +#endif +int CONF_dump_bio(LHASH_OF(CONF_VALUE) *conf, BIO *out); + +DEPRECATEDIN_1_1_0(void OPENSSL_config(const char *config_name)) + +#if OPENSSL_API_COMPAT < 0x10100000L +# define OPENSSL_no_config() \ + OPENSSL_init_crypto(OPENSSL_INIT_NO_LOAD_CONFIG, NULL) +#endif + +/* + * New conf code. The semantics are different from the functions above. If + * that wasn't the case, the above functions would have been replaced + */ + +struct conf_st { + CONF_METHOD *meth; + void *meth_data; + LHASH_OF(CONF_VALUE) *data; +}; + +CONF *NCONF_new(CONF_METHOD *meth); +CONF_METHOD *NCONF_default(void); +CONF_METHOD *NCONF_WIN32(void); +void NCONF_free(CONF *conf); +void NCONF_free_data(CONF *conf); + +int NCONF_load(CONF *conf, const char *file, long *eline); +# ifndef OPENSSL_NO_STDIO +int NCONF_load_fp(CONF *conf, FILE *fp, long *eline); +# endif +int NCONF_load_bio(CONF *conf, BIO *bp, long *eline); +STACK_OF(CONF_VALUE) *NCONF_get_section(const CONF *conf, + const char *section); +char *NCONF_get_string(const CONF *conf, const char *group, const char *name); +int NCONF_get_number_e(const CONF *conf, const char *group, const char *name, + long *result); +#ifndef OPENSSL_NO_STDIO +int NCONF_dump_fp(const CONF *conf, FILE *out); +#endif +int NCONF_dump_bio(const CONF *conf, BIO *out); + +#define NCONF_get_number(c,g,n,r) NCONF_get_number_e(c,g,n,r) + +/* Module functions */ + +int CONF_modules_load(const CONF *cnf, const char *appname, + unsigned long flags); +int CONF_modules_load_file(const char *filename, const char *appname, + unsigned long flags); +void CONF_modules_unload(int all); +void CONF_modules_finish(void); +#if OPENSSL_API_COMPAT < 0x10100000L +# define CONF_modules_free() while(0) continue +#endif +int CONF_module_add(const char *name, conf_init_func *ifunc, + conf_finish_func *ffunc); + +const char *CONF_imodule_get_name(const CONF_IMODULE *md); +const char *CONF_imodule_get_value(const CONF_IMODULE *md); +void *CONF_imodule_get_usr_data(const CONF_IMODULE *md); +void CONF_imodule_set_usr_data(CONF_IMODULE *md, void *usr_data); +CONF_MODULE *CONF_imodule_get_module(const CONF_IMODULE *md); +unsigned long CONF_imodule_get_flags(const CONF_IMODULE *md); +void CONF_imodule_set_flags(CONF_IMODULE *md, unsigned long flags); +void *CONF_module_get_usr_data(CONF_MODULE *pmod); +void CONF_module_set_usr_data(CONF_MODULE *pmod, void *usr_data); + +char *CONF_get1_default_config_file(void); + +int CONF_parse_list(const char *list, int sep, int nospc, + int (*list_cb) (const char *elem, int len, void *usr), + void *arg); + +void OPENSSL_load_builtin_modules(void); + + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/conf_api.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/conf_api.h new file mode 100644 index 00000000..a0275ad7 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/conf_api.h @@ -0,0 +1,40 @@ +/* + * Copyright 1995-2016 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_CONF_API_H +# define HEADER_CONF_API_H + +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Up until OpenSSL 0.9.5a, this was new_section */ +CONF_VALUE *_CONF_new_section(CONF *conf, const char *section); +/* Up until OpenSSL 0.9.5a, this was get_section */ +CONF_VALUE *_CONF_get_section(const CONF *conf, const char *section); +/* Up until OpenSSL 0.9.5a, this was CONF_get_section */ +STACK_OF(CONF_VALUE) *_CONF_get_section_values(const CONF *conf, + const char *section); + +int _CONF_add_string(CONF *conf, CONF_VALUE *section, CONF_VALUE *value); +char *_CONF_get_string(const CONF *conf, const char *section, + const char *name); +long _CONF_get_number(const CONF *conf, const char *section, + const char *name); + +int _CONF_new_data(CONF *conf); +void _CONF_free_data(CONF *conf); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/conferr.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/conferr.h new file mode 100644 index 00000000..32b92291 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/conferr.h @@ -0,0 +1,76 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2019 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_CONFERR_H +# define HEADER_CONFERR_H + +# ifndef HEADER_SYMHACKS_H +# include +# endif + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_CONF_strings(void); + +/* + * CONF function codes. + */ +# define CONF_F_CONF_DUMP_FP 104 +# define CONF_F_CONF_LOAD 100 +# define CONF_F_CONF_LOAD_FP 103 +# define CONF_F_CONF_PARSE_LIST 119 +# define CONF_F_DEF_LOAD 120 +# define CONF_F_DEF_LOAD_BIO 121 +# define CONF_F_GET_NEXT_FILE 107 +# define CONF_F_MODULE_ADD 122 +# define CONF_F_MODULE_INIT 115 +# define CONF_F_MODULE_LOAD_DSO 117 +# define CONF_F_MODULE_RUN 118 +# define CONF_F_NCONF_DUMP_BIO 105 +# define CONF_F_NCONF_DUMP_FP 106 +# define CONF_F_NCONF_GET_NUMBER_E 112 +# define CONF_F_NCONF_GET_SECTION 108 +# define CONF_F_NCONF_GET_STRING 109 +# define CONF_F_NCONF_LOAD 113 +# define CONF_F_NCONF_LOAD_BIO 110 +# define CONF_F_NCONF_LOAD_FP 114 +# define CONF_F_NCONF_NEW 111 +# define CONF_F_PROCESS_INCLUDE 116 +# define CONF_F_SSL_MODULE_INIT 123 +# define CONF_F_STR_COPY 101 + +/* + * CONF reason codes. + */ +# define CONF_R_ERROR_LOADING_DSO 110 +# define CONF_R_LIST_CANNOT_BE_NULL 115 +# define CONF_R_MISSING_CLOSE_SQUARE_BRACKET 100 +# define CONF_R_MISSING_EQUAL_SIGN 101 +# define CONF_R_MISSING_INIT_FUNCTION 112 +# define CONF_R_MODULE_INITIALIZATION_ERROR 109 +# define CONF_R_NO_CLOSE_BRACE 102 +# define CONF_R_NO_CONF 105 +# define CONF_R_NO_CONF_OR_ENVIRONMENT_VARIABLE 106 +# define CONF_R_NO_SECTION 107 +# define CONF_R_NO_SUCH_FILE 114 +# define CONF_R_NO_VALUE 108 +# define CONF_R_NUMBER_TOO_LARGE 121 +# define CONF_R_RECURSIVE_DIRECTORY_INCLUDE 111 +# define CONF_R_SSL_COMMAND_SECTION_EMPTY 117 +# define CONF_R_SSL_COMMAND_SECTION_NOT_FOUND 118 +# define CONF_R_SSL_SECTION_EMPTY 119 +# define CONF_R_SSL_SECTION_NOT_FOUND 120 +# define CONF_R_UNABLE_TO_CREATE_NEW_SECTION 103 +# define CONF_R_UNKNOWN_MODULE_NAME 113 +# define CONF_R_VARIABLE_EXPANSION_TOO_LONG 116 +# define CONF_R_VARIABLE_HAS_NO_VALUE 104 + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/crypto.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/crypto.h new file mode 100644 index 00000000..7d0b5262 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/crypto.h @@ -0,0 +1,445 @@ +/* + * Copyright 1995-2019 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 + * 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 + */ + +#ifndef HEADER_CRYPTO_H +# define HEADER_CRYPTO_H + +# include +# include + +# include + +# ifndef OPENSSL_NO_STDIO +# include +# endif + +# include +# include +# include +# include +# include + +# ifdef CHARSET_EBCDIC +# include +# endif + +/* + * Resolve problems on some operating systems with symbol names that clash + * one way or another + */ +# include + +# if OPENSSL_API_COMPAT < 0x10100000L +# include +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +# if OPENSSL_API_COMPAT < 0x10100000L +# define SSLeay OpenSSL_version_num +# define SSLeay_version OpenSSL_version +# define SSLEAY_VERSION_NUMBER OPENSSL_VERSION_NUMBER +# define SSLEAY_VERSION OPENSSL_VERSION +# define SSLEAY_CFLAGS OPENSSL_CFLAGS +# define SSLEAY_BUILT_ON OPENSSL_BUILT_ON +# define SSLEAY_PLATFORM OPENSSL_PLATFORM +# define SSLEAY_DIR OPENSSL_DIR + +/* + * Old type for allocating dynamic locks. No longer used. Use the new thread + * API instead. + */ +typedef struct { + int dummy; +} CRYPTO_dynlock; + +# endif /* OPENSSL_API_COMPAT */ + +typedef void CRYPTO_RWLOCK; + +CRYPTO_RWLOCK *CRYPTO_THREAD_lock_new(void); +int CRYPTO_THREAD_read_lock(CRYPTO_RWLOCK *lock); +int CRYPTO_THREAD_write_lock(CRYPTO_RWLOCK *lock); +int CRYPTO_THREAD_unlock(CRYPTO_RWLOCK *lock); +void CRYPTO_THREAD_lock_free(CRYPTO_RWLOCK *lock); + +int CRYPTO_atomic_add(int *val, int amount, int *ret, CRYPTO_RWLOCK *lock); + +/* + * The following can be used to detect memory leaks in the library. If + * used, it turns on malloc checking + */ +# define CRYPTO_MEM_CHECK_OFF 0x0 /* Control only */ +# define CRYPTO_MEM_CHECK_ON 0x1 /* Control and mode bit */ +# define CRYPTO_MEM_CHECK_ENABLE 0x2 /* Control and mode bit */ +# define CRYPTO_MEM_CHECK_DISABLE 0x3 /* Control only */ + +struct crypto_ex_data_st { + STACK_OF(void) *sk; +}; +DEFINE_STACK_OF(void) + +/* + * Per class, we have a STACK of function pointers. + */ +# define CRYPTO_EX_INDEX_SSL 0 +# define CRYPTO_EX_INDEX_SSL_CTX 1 +# define CRYPTO_EX_INDEX_SSL_SESSION 2 +# define CRYPTO_EX_INDEX_X509 3 +# define CRYPTO_EX_INDEX_X509_STORE 4 +# define CRYPTO_EX_INDEX_X509_STORE_CTX 5 +# define CRYPTO_EX_INDEX_DH 6 +# define CRYPTO_EX_INDEX_DSA 7 +# define CRYPTO_EX_INDEX_EC_KEY 8 +# define CRYPTO_EX_INDEX_RSA 9 +# define CRYPTO_EX_INDEX_ENGINE 10 +# define CRYPTO_EX_INDEX_UI 11 +# define CRYPTO_EX_INDEX_BIO 12 +# define CRYPTO_EX_INDEX_APP 13 +# define CRYPTO_EX_INDEX_UI_METHOD 14 +# define CRYPTO_EX_INDEX_DRBG 15 +# define CRYPTO_EX_INDEX__COUNT 16 + +/* No longer needed, so this is a no-op */ +#define OPENSSL_malloc_init() while(0) continue + +int CRYPTO_mem_ctrl(int mode); + +# define OPENSSL_malloc(num) \ + CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_zalloc(num) \ + CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_realloc(addr, num) \ + CRYPTO_realloc(addr, num, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_clear_realloc(addr, old_num, num) \ + CRYPTO_clear_realloc(addr, old_num, num, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_clear_free(addr, num) \ + CRYPTO_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_free(addr) \ + CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_memdup(str, s) \ + CRYPTO_memdup((str), s, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_strdup(str) \ + CRYPTO_strdup(str, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_strndup(str, n) \ + CRYPTO_strndup(str, n, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_secure_malloc(num) \ + CRYPTO_secure_malloc(num, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_secure_zalloc(num) \ + CRYPTO_secure_zalloc(num, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_secure_free(addr) \ + CRYPTO_secure_free(addr, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_secure_clear_free(addr, num) \ + CRYPTO_secure_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_secure_actual_size(ptr) \ + CRYPTO_secure_actual_size(ptr) + +size_t OPENSSL_strlcpy(char *dst, const char *src, size_t siz); +size_t OPENSSL_strlcat(char *dst, const char *src, size_t siz); +size_t OPENSSL_strnlen(const char *str, size_t maxlen); +char *OPENSSL_buf2hexstr(const unsigned char *buffer, long len); +unsigned char *OPENSSL_hexstr2buf(const char *str, long *len); +int OPENSSL_hexchar2int(unsigned char c); + +# define OPENSSL_MALLOC_MAX_NELEMS(type) (((1U<<(sizeof(int)*8-1))-1)/sizeof(type)) + +unsigned long OpenSSL_version_num(void); +const char *OpenSSL_version(int type); +# define OPENSSL_VERSION 0 +# define OPENSSL_CFLAGS 1 +# define OPENSSL_BUILT_ON 2 +# define OPENSSL_PLATFORM 3 +# define OPENSSL_DIR 4 +# define OPENSSL_ENGINES_DIR 5 + +int OPENSSL_issetugid(void); + +typedef void CRYPTO_EX_new (void *parent, void *ptr, CRYPTO_EX_DATA *ad, + int idx, long argl, void *argp); +typedef void CRYPTO_EX_free (void *parent, void *ptr, CRYPTO_EX_DATA *ad, + int idx, long argl, void *argp); +typedef int CRYPTO_EX_dup (CRYPTO_EX_DATA *to, const CRYPTO_EX_DATA *from, + void *from_d, int idx, long argl, void *argp); +__owur int CRYPTO_get_ex_new_index(int class_index, long argl, void *argp, + CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, + CRYPTO_EX_free *free_func); +/* No longer use an index. */ +int CRYPTO_free_ex_index(int class_index, int idx); + +/* + * Initialise/duplicate/free CRYPTO_EX_DATA variables corresponding to a + * given class (invokes whatever per-class callbacks are applicable) + */ +int CRYPTO_new_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad); +int CRYPTO_dup_ex_data(int class_index, CRYPTO_EX_DATA *to, + const CRYPTO_EX_DATA *from); + +void CRYPTO_free_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad); + +/* + * Get/set data in a CRYPTO_EX_DATA variable corresponding to a particular + * index (relative to the class type involved) + */ +int CRYPTO_set_ex_data(CRYPTO_EX_DATA *ad, int idx, void *val); +void *CRYPTO_get_ex_data(const CRYPTO_EX_DATA *ad, int idx); + +# if OPENSSL_API_COMPAT < 0x10100000L +/* + * This function cleans up all "ex_data" state. It mustn't be called under + * potential race-conditions. + */ +# define CRYPTO_cleanup_all_ex_data() while(0) continue + +/* + * The old locking functions have been removed completely without compatibility + * macros. This is because the old functions either could not properly report + * errors, or the returned error values were not clearly documented. + * Replacing the locking functions with no-ops would cause race condition + * issues in the affected applications. It is far better for them to fail at + * compile time. + * On the other hand, the locking callbacks are no longer used. Consequently, + * the callback management functions can be safely replaced with no-op macros. + */ +# define CRYPTO_num_locks() (1) +# define CRYPTO_set_locking_callback(func) +# define CRYPTO_get_locking_callback() (NULL) +# define CRYPTO_set_add_lock_callback(func) +# define CRYPTO_get_add_lock_callback() (NULL) + +/* + * These defines where used in combination with the old locking callbacks, + * they are not called anymore, but old code that's not called might still + * use them. + */ +# define CRYPTO_LOCK 1 +# define CRYPTO_UNLOCK 2 +# define CRYPTO_READ 4 +# define CRYPTO_WRITE 8 + +/* This structure is no longer used */ +typedef struct crypto_threadid_st { + int dummy; +} CRYPTO_THREADID; +/* Only use CRYPTO_THREADID_set_[numeric|pointer]() within callbacks */ +# define CRYPTO_THREADID_set_numeric(id, val) +# define CRYPTO_THREADID_set_pointer(id, ptr) +# define CRYPTO_THREADID_set_callback(threadid_func) (0) +# define CRYPTO_THREADID_get_callback() (NULL) +# define CRYPTO_THREADID_current(id) +# define CRYPTO_THREADID_cmp(a, b) (-1) +# define CRYPTO_THREADID_cpy(dest, src) +# define CRYPTO_THREADID_hash(id) (0UL) + +# if OPENSSL_API_COMPAT < 0x10000000L +# define CRYPTO_set_id_callback(func) +# define CRYPTO_get_id_callback() (NULL) +# define CRYPTO_thread_id() (0UL) +# endif /* OPENSSL_API_COMPAT < 0x10000000L */ + +# define CRYPTO_set_dynlock_create_callback(dyn_create_function) +# define CRYPTO_set_dynlock_lock_callback(dyn_lock_function) +# define CRYPTO_set_dynlock_destroy_callback(dyn_destroy_function) +# define CRYPTO_get_dynlock_create_callback() (NULL) +# define CRYPTO_get_dynlock_lock_callback() (NULL) +# define CRYPTO_get_dynlock_destroy_callback() (NULL) +# endif /* OPENSSL_API_COMPAT < 0x10100000L */ + +int CRYPTO_set_mem_functions( + void *(*m) (size_t, const char *, int), + void *(*r) (void *, size_t, const char *, int), + void (*f) (void *, const char *, int)); +int CRYPTO_set_mem_debug(int flag); +void CRYPTO_get_mem_functions( + void *(**m) (size_t, const char *, int), + void *(**r) (void *, size_t, const char *, int), + void (**f) (void *, const char *, int)); + +void *CRYPTO_malloc(size_t num, const char *file, int line); +void *CRYPTO_zalloc(size_t num, const char *file, int line); +void *CRYPTO_memdup(const void *str, size_t siz, const char *file, int line); +char *CRYPTO_strdup(const char *str, const char *file, int line); +char *CRYPTO_strndup(const char *str, size_t s, const char *file, int line); +void CRYPTO_free(void *ptr, const char *file, int line); +void CRYPTO_clear_free(void *ptr, size_t num, const char *file, int line); +void *CRYPTO_realloc(void *addr, size_t num, const char *file, int line); +void *CRYPTO_clear_realloc(void *addr, size_t old_num, size_t num, + const char *file, int line); + +int CRYPTO_secure_malloc_init(size_t sz, int minsize); +int CRYPTO_secure_malloc_done(void); +void *CRYPTO_secure_malloc(size_t num, const char *file, int line); +void *CRYPTO_secure_zalloc(size_t num, const char *file, int line); +void CRYPTO_secure_free(void *ptr, const char *file, int line); +void CRYPTO_secure_clear_free(void *ptr, size_t num, + const char *file, int line); +int CRYPTO_secure_allocated(const void *ptr); +int CRYPTO_secure_malloc_initialized(void); +size_t CRYPTO_secure_actual_size(void *ptr); +size_t CRYPTO_secure_used(void); + +void OPENSSL_cleanse(void *ptr, size_t len); + +# ifndef OPENSSL_NO_CRYPTO_MDEBUG +# define OPENSSL_mem_debug_push(info) \ + CRYPTO_mem_debug_push(info, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_mem_debug_pop() \ + CRYPTO_mem_debug_pop() +int CRYPTO_mem_debug_push(const char *info, const char *file, int line); +int CRYPTO_mem_debug_pop(void); +void CRYPTO_get_alloc_counts(int *mcount, int *rcount, int *fcount); + +/*- + * Debugging functions (enabled by CRYPTO_set_mem_debug(1)) + * The flag argument has the following significance: + * 0: called before the actual memory allocation has taken place + * 1: called after the actual memory allocation has taken place + */ +void CRYPTO_mem_debug_malloc(void *addr, size_t num, int flag, + const char *file, int line); +void CRYPTO_mem_debug_realloc(void *addr1, void *addr2, size_t num, int flag, + const char *file, int line); +void CRYPTO_mem_debug_free(void *addr, int flag, + const char *file, int line); + +int CRYPTO_mem_leaks_cb(int (*cb) (const char *str, size_t len, void *u), + void *u); +# ifndef OPENSSL_NO_STDIO +int CRYPTO_mem_leaks_fp(FILE *); +# endif +int CRYPTO_mem_leaks(BIO *bio); +# endif + +/* die if we have to */ +ossl_noreturn void OPENSSL_die(const char *assertion, const char *file, int line); +# if OPENSSL_API_COMPAT < 0x10100000L +# define OpenSSLDie(f,l,a) OPENSSL_die((a),(f),(l)) +# endif +# define OPENSSL_assert(e) \ + (void)((e) ? 0 : (OPENSSL_die("assertion failed: " #e, OPENSSL_FILE, OPENSSL_LINE), 1)) + +int OPENSSL_isservice(void); + +int FIPS_mode(void); +int FIPS_mode_set(int r); + +void OPENSSL_init(void); +# ifdef OPENSSL_SYS_UNIX +void OPENSSL_fork_prepare(void); +void OPENSSL_fork_parent(void); +void OPENSSL_fork_child(void); +# endif + +struct tm *OPENSSL_gmtime(const time_t *timer, struct tm *result); +int OPENSSL_gmtime_adj(struct tm *tm, int offset_day, long offset_sec); +int OPENSSL_gmtime_diff(int *pday, int *psec, + const struct tm *from, const struct tm *to); + +/* + * CRYPTO_memcmp returns zero iff the |len| bytes at |a| and |b| are equal. + * It takes an amount of time dependent on |len|, but independent of the + * contents of |a| and |b|. Unlike memcmp, it cannot be used to put elements + * into a defined order as the return value when a != b is undefined, other + * than to be non-zero. + */ +int CRYPTO_memcmp(const void * in_a, const void * in_b, size_t len); + +/* Standard initialisation options */ +# define OPENSSL_INIT_NO_LOAD_CRYPTO_STRINGS 0x00000001L +# define OPENSSL_INIT_LOAD_CRYPTO_STRINGS 0x00000002L +# define OPENSSL_INIT_ADD_ALL_CIPHERS 0x00000004L +# define OPENSSL_INIT_ADD_ALL_DIGESTS 0x00000008L +# define OPENSSL_INIT_NO_ADD_ALL_CIPHERS 0x00000010L +# define OPENSSL_INIT_NO_ADD_ALL_DIGESTS 0x00000020L +# define OPENSSL_INIT_LOAD_CONFIG 0x00000040L +# define OPENSSL_INIT_NO_LOAD_CONFIG 0x00000080L +# define OPENSSL_INIT_ASYNC 0x00000100L +# define OPENSSL_INIT_ENGINE_RDRAND 0x00000200L +# define OPENSSL_INIT_ENGINE_DYNAMIC 0x00000400L +# define OPENSSL_INIT_ENGINE_OPENSSL 0x00000800L +# define OPENSSL_INIT_ENGINE_CRYPTODEV 0x00001000L +# define OPENSSL_INIT_ENGINE_CAPI 0x00002000L +# define OPENSSL_INIT_ENGINE_PADLOCK 0x00004000L +# define OPENSSL_INIT_ENGINE_AFALG 0x00008000L +/* OPENSSL_INIT_ZLIB 0x00010000L */ +# define OPENSSL_INIT_ATFORK 0x00020000L +/* OPENSSL_INIT_BASE_ONLY 0x00040000L */ +# define OPENSSL_INIT_NO_ATEXIT 0x00080000L +/* OPENSSL_INIT flag range 0xfff00000 reserved for OPENSSL_init_ssl() */ +/* Max OPENSSL_INIT flag value is 0x80000000 */ + +/* openssl and dasync not counted as builtin */ +# define OPENSSL_INIT_ENGINE_ALL_BUILTIN \ + (OPENSSL_INIT_ENGINE_RDRAND | OPENSSL_INIT_ENGINE_DYNAMIC \ + | OPENSSL_INIT_ENGINE_CRYPTODEV | OPENSSL_INIT_ENGINE_CAPI | \ + OPENSSL_INIT_ENGINE_PADLOCK) + + +/* Library initialisation functions */ +void OPENSSL_cleanup(void); +int OPENSSL_init_crypto(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings); +int OPENSSL_atexit(void (*handler)(void)); +void OPENSSL_thread_stop(void); + +/* Low-level control of initialization */ +OPENSSL_INIT_SETTINGS *OPENSSL_INIT_new(void); +# ifndef OPENSSL_NO_STDIO +int OPENSSL_INIT_set_config_filename(OPENSSL_INIT_SETTINGS *settings, + const char *config_filename); +void OPENSSL_INIT_set_config_file_flags(OPENSSL_INIT_SETTINGS *settings, + unsigned long flags); +int OPENSSL_INIT_set_config_appname(OPENSSL_INIT_SETTINGS *settings, + const char *config_appname); +# endif +void OPENSSL_INIT_free(OPENSSL_INIT_SETTINGS *settings); + +# if defined(OPENSSL_THREADS) && !defined(CRYPTO_TDEBUG) +# if defined(_WIN32) +# if defined(BASETYPES) || defined(_WINDEF_H) +/* application has to include in order to use this */ +typedef DWORD CRYPTO_THREAD_LOCAL; +typedef DWORD CRYPTO_THREAD_ID; + +typedef LONG CRYPTO_ONCE; +# define CRYPTO_ONCE_STATIC_INIT 0 +# endif +# else +# include +typedef pthread_once_t CRYPTO_ONCE; +typedef pthread_key_t CRYPTO_THREAD_LOCAL; +typedef pthread_t CRYPTO_THREAD_ID; + +# define CRYPTO_ONCE_STATIC_INIT PTHREAD_ONCE_INIT +# endif +# endif + +# if !defined(CRYPTO_ONCE_STATIC_INIT) +typedef unsigned int CRYPTO_ONCE; +typedef unsigned int CRYPTO_THREAD_LOCAL; +typedef unsigned int CRYPTO_THREAD_ID; +# define CRYPTO_ONCE_STATIC_INIT 0 +# endif + +int CRYPTO_THREAD_run_once(CRYPTO_ONCE *once, void (*init)(void)); + +int CRYPTO_THREAD_init_local(CRYPTO_THREAD_LOCAL *key, void (*cleanup)(void *)); +void *CRYPTO_THREAD_get_local(CRYPTO_THREAD_LOCAL *key); +int CRYPTO_THREAD_set_local(CRYPTO_THREAD_LOCAL *key, void *val); +int CRYPTO_THREAD_cleanup_local(CRYPTO_THREAD_LOCAL *key); + +CRYPTO_THREAD_ID CRYPTO_THREAD_get_current_id(void); +int CRYPTO_THREAD_compare_id(CRYPTO_THREAD_ID a, CRYPTO_THREAD_ID b); + + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cryptoerr.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cryptoerr.h new file mode 100644 index 00000000..3db5a4ee --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cryptoerr.h @@ -0,0 +1,57 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2019 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_CRYPTOERR_H +# define HEADER_CRYPTOERR_H + +# ifndef HEADER_SYMHACKS_H +# include +# endif + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_CRYPTO_strings(void); + +/* + * CRYPTO function codes. + */ +# define CRYPTO_F_CMAC_CTX_NEW 120 +# define CRYPTO_F_CRYPTO_DUP_EX_DATA 110 +# define CRYPTO_F_CRYPTO_FREE_EX_DATA 111 +# define CRYPTO_F_CRYPTO_GET_EX_NEW_INDEX 100 +# define CRYPTO_F_CRYPTO_MEMDUP 115 +# define CRYPTO_F_CRYPTO_NEW_EX_DATA 112 +# define CRYPTO_F_CRYPTO_OCB128_COPY_CTX 121 +# define CRYPTO_F_CRYPTO_OCB128_INIT 122 +# define CRYPTO_F_CRYPTO_SET_EX_DATA 102 +# define CRYPTO_F_FIPS_MODE_SET 109 +# define CRYPTO_F_GET_AND_LOCK 113 +# define CRYPTO_F_OPENSSL_ATEXIT 114 +# define CRYPTO_F_OPENSSL_BUF2HEXSTR 117 +# define CRYPTO_F_OPENSSL_FOPEN 119 +# define CRYPTO_F_OPENSSL_HEXSTR2BUF 118 +# define CRYPTO_F_OPENSSL_INIT_CRYPTO 116 +# define CRYPTO_F_OPENSSL_LH_NEW 126 +# define CRYPTO_F_OPENSSL_SK_DEEP_COPY 127 +# define CRYPTO_F_OPENSSL_SK_DUP 128 +# define CRYPTO_F_PKEY_HMAC_INIT 123 +# define CRYPTO_F_PKEY_POLY1305_INIT 124 +# define CRYPTO_F_PKEY_SIPHASH_INIT 125 +# define CRYPTO_F_SK_RESERVE 129 + +/* + * CRYPTO reason codes. + */ +# define CRYPTO_R_FIPS_MODE_NOT_SUPPORTED 101 +# define CRYPTO_R_ILLEGAL_HEX_DIGIT 102 +# define CRYPTO_R_ODD_NUMBER_OF_DIGITS 103 + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ct.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ct.h new file mode 100644 index 00000000..ebdba34d --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ct.h @@ -0,0 +1,474 @@ +/* + * Copyright 2016-2018 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_CT_H +# define HEADER_CT_H + +# include + +# ifndef OPENSSL_NO_CT +# include +# include +# include +# include +# ifdef __cplusplus +extern "C" { +# endif + + +/* Minimum RSA key size, from RFC6962 */ +# define SCT_MIN_RSA_BITS 2048 + +/* All hashes are SHA256 in v1 of Certificate Transparency */ +# define CT_V1_HASHLEN SHA256_DIGEST_LENGTH + +typedef enum { + CT_LOG_ENTRY_TYPE_NOT_SET = -1, + CT_LOG_ENTRY_TYPE_X509 = 0, + CT_LOG_ENTRY_TYPE_PRECERT = 1 +} ct_log_entry_type_t; + +typedef enum { + SCT_VERSION_NOT_SET = -1, + SCT_VERSION_V1 = 0 +} sct_version_t; + +typedef enum { + SCT_SOURCE_UNKNOWN, + SCT_SOURCE_TLS_EXTENSION, + SCT_SOURCE_X509V3_EXTENSION, + SCT_SOURCE_OCSP_STAPLED_RESPONSE +} sct_source_t; + +typedef enum { + SCT_VALIDATION_STATUS_NOT_SET, + SCT_VALIDATION_STATUS_UNKNOWN_LOG, + SCT_VALIDATION_STATUS_VALID, + SCT_VALIDATION_STATUS_INVALID, + SCT_VALIDATION_STATUS_UNVERIFIED, + SCT_VALIDATION_STATUS_UNKNOWN_VERSION +} sct_validation_status_t; + +DEFINE_STACK_OF(SCT) +DEFINE_STACK_OF(CTLOG) + +/****************************************** + * CT policy evaluation context functions * + ******************************************/ + +/* + * Creates a new, empty policy evaluation context. + * The caller is responsible for calling CT_POLICY_EVAL_CTX_free when finished + * with the CT_POLICY_EVAL_CTX. + */ +CT_POLICY_EVAL_CTX *CT_POLICY_EVAL_CTX_new(void); + +/* Deletes a policy evaluation context and anything it owns. */ +void CT_POLICY_EVAL_CTX_free(CT_POLICY_EVAL_CTX *ctx); + +/* Gets the peer certificate that the SCTs are for */ +X509* CT_POLICY_EVAL_CTX_get0_cert(const CT_POLICY_EVAL_CTX *ctx); + +/* + * Sets the certificate associated with the received SCTs. + * Increments the reference count of cert. + * Returns 1 on success, 0 otherwise. + */ +int CT_POLICY_EVAL_CTX_set1_cert(CT_POLICY_EVAL_CTX *ctx, X509 *cert); + +/* Gets the issuer of the aforementioned certificate */ +X509* CT_POLICY_EVAL_CTX_get0_issuer(const CT_POLICY_EVAL_CTX *ctx); + +/* + * Sets the issuer of the certificate associated with the received SCTs. + * Increments the reference count of issuer. + * Returns 1 on success, 0 otherwise. + */ +int CT_POLICY_EVAL_CTX_set1_issuer(CT_POLICY_EVAL_CTX *ctx, X509 *issuer); + +/* Gets the CT logs that are trusted sources of SCTs */ +const CTLOG_STORE *CT_POLICY_EVAL_CTX_get0_log_store(const CT_POLICY_EVAL_CTX *ctx); + +/* Sets the log store that is in use. It must outlive the CT_POLICY_EVAL_CTX. */ +void CT_POLICY_EVAL_CTX_set_shared_CTLOG_STORE(CT_POLICY_EVAL_CTX *ctx, + CTLOG_STORE *log_store); + +/* + * Gets the time, in milliseconds since the Unix epoch, that will be used as the + * current time when checking whether an SCT was issued in the future. + * Such SCTs will fail validation, as required by RFC6962. + */ +uint64_t CT_POLICY_EVAL_CTX_get_time(const CT_POLICY_EVAL_CTX *ctx); + +/* + * Sets the time to evaluate SCTs against, in milliseconds since the Unix epoch. + * If an SCT's timestamp is after this time, it will be interpreted as having + * been issued in the future. RFC6962 states that "TLS clients MUST reject SCTs + * whose timestamp is in the future", so an SCT will not validate in this case. + */ +void CT_POLICY_EVAL_CTX_set_time(CT_POLICY_EVAL_CTX *ctx, uint64_t time_in_ms); + +/***************** + * SCT functions * + *****************/ + +/* + * Creates a new, blank SCT. + * The caller is responsible for calling SCT_free when finished with the SCT. + */ +SCT *SCT_new(void); + +/* + * Creates a new SCT from some base64-encoded strings. + * The caller is responsible for calling SCT_free when finished with the SCT. + */ +SCT *SCT_new_from_base64(unsigned char version, + const char *logid_base64, + ct_log_entry_type_t entry_type, + uint64_t timestamp, + const char *extensions_base64, + const char *signature_base64); + +/* + * Frees the SCT and the underlying data structures. + */ +void SCT_free(SCT *sct); + +/* + * Free a stack of SCTs, and the underlying SCTs themselves. + * Intended to be compatible with X509V3_EXT_FREE. + */ +void SCT_LIST_free(STACK_OF(SCT) *a); + +/* + * Returns the version of the SCT. + */ +sct_version_t SCT_get_version(const SCT *sct); + +/* + * Set the version of an SCT. + * Returns 1 on success, 0 if the version is unrecognized. + */ +__owur int SCT_set_version(SCT *sct, sct_version_t version); + +/* + * Returns the log entry type of the SCT. + */ +ct_log_entry_type_t SCT_get_log_entry_type(const SCT *sct); + +/* + * Set the log entry type of an SCT. + * Returns 1 on success, 0 otherwise. + */ +__owur int SCT_set_log_entry_type(SCT *sct, ct_log_entry_type_t entry_type); + +/* + * Gets the ID of the log that an SCT came from. + * Ownership of the log ID remains with the SCT. + * Returns the length of the log ID. + */ +size_t SCT_get0_log_id(const SCT *sct, unsigned char **log_id); + +/* + * Set the log ID of an SCT to point directly to the *log_id specified. + * The SCT takes ownership of the specified pointer. + * Returns 1 on success, 0 otherwise. + */ +__owur int SCT_set0_log_id(SCT *sct, unsigned char *log_id, size_t log_id_len); + +/* + * Set the log ID of an SCT. + * This makes a copy of the log_id. + * Returns 1 on success, 0 otherwise. + */ +__owur int SCT_set1_log_id(SCT *sct, const unsigned char *log_id, + size_t log_id_len); + +/* + * Returns the timestamp for the SCT (epoch time in milliseconds). + */ +uint64_t SCT_get_timestamp(const SCT *sct); + +/* + * Set the timestamp of an SCT (epoch time in milliseconds). + */ +void SCT_set_timestamp(SCT *sct, uint64_t timestamp); + +/* + * Return the NID for the signature used by the SCT. + * For CT v1, this will be either NID_sha256WithRSAEncryption or + * NID_ecdsa_with_SHA256 (or NID_undef if incorrect/unset). + */ +int SCT_get_signature_nid(const SCT *sct); + +/* + * Set the signature type of an SCT + * For CT v1, this should be either NID_sha256WithRSAEncryption or + * NID_ecdsa_with_SHA256. + * Returns 1 on success, 0 otherwise. + */ +__owur int SCT_set_signature_nid(SCT *sct, int nid); + +/* + * Set *ext to point to the extension data for the SCT. ext must not be NULL. + * The SCT retains ownership of this pointer. + * Returns length of the data pointed to. + */ +size_t SCT_get0_extensions(const SCT *sct, unsigned char **ext); + +/* + * Set the extensions of an SCT to point directly to the *ext specified. + * The SCT takes ownership of the specified pointer. + */ +void SCT_set0_extensions(SCT *sct, unsigned char *ext, size_t ext_len); + +/* + * Set the extensions of an SCT. + * This takes a copy of the ext. + * Returns 1 on success, 0 otherwise. + */ +__owur int SCT_set1_extensions(SCT *sct, const unsigned char *ext, + size_t ext_len); + +/* + * Set *sig to point to the signature for the SCT. sig must not be NULL. + * The SCT retains ownership of this pointer. + * Returns length of the data pointed to. + */ +size_t SCT_get0_signature(const SCT *sct, unsigned char **sig); + +/* + * Set the signature of an SCT to point directly to the *sig specified. + * The SCT takes ownership of the specified pointer. + */ +void SCT_set0_signature(SCT *sct, unsigned char *sig, size_t sig_len); + +/* + * Set the signature of an SCT to be a copy of the *sig specified. + * Returns 1 on success, 0 otherwise. + */ +__owur int SCT_set1_signature(SCT *sct, const unsigned char *sig, + size_t sig_len); + +/* + * The origin of this SCT, e.g. TLS extension, OCSP response, etc. + */ +sct_source_t SCT_get_source(const SCT *sct); + +/* + * Set the origin of this SCT, e.g. TLS extension, OCSP response, etc. + * Returns 1 on success, 0 otherwise. + */ +__owur int SCT_set_source(SCT *sct, sct_source_t source); + +/* + * Returns a text string describing the validation status of |sct|. + */ +const char *SCT_validation_status_string(const SCT *sct); + +/* + * Pretty-prints an |sct| to |out|. + * It will be indented by the number of spaces specified by |indent|. + * If |logs| is not NULL, it will be used to lookup the CT log that the SCT came + * from, so that the log name can be printed. + */ +void SCT_print(const SCT *sct, BIO *out, int indent, const CTLOG_STORE *logs); + +/* + * Pretty-prints an |sct_list| to |out|. + * It will be indented by the number of spaces specified by |indent|. + * SCTs will be delimited by |separator|. + * If |logs| is not NULL, it will be used to lookup the CT log that each SCT + * came from, so that the log names can be printed. + */ +void SCT_LIST_print(const STACK_OF(SCT) *sct_list, BIO *out, int indent, + const char *separator, const CTLOG_STORE *logs); + +/* + * Gets the last result of validating this SCT. + * If it has not been validated yet, returns SCT_VALIDATION_STATUS_NOT_SET. + */ +sct_validation_status_t SCT_get_validation_status(const SCT *sct); + +/* + * Validates the given SCT with the provided context. + * Sets the "validation_status" field of the SCT. + * Returns 1 if the SCT is valid and the signature verifies. + * Returns 0 if the SCT is invalid or could not be verified. + * Returns -1 if an error occurs. + */ +__owur int SCT_validate(SCT *sct, const CT_POLICY_EVAL_CTX *ctx); + +/* + * Validates the given list of SCTs with the provided context. + * Sets the "validation_status" field of each SCT. + * Returns 1 if there are no invalid SCTs and all signatures verify. + * Returns 0 if at least one SCT is invalid or could not be verified. + * Returns a negative integer if an error occurs. + */ +__owur int SCT_LIST_validate(const STACK_OF(SCT) *scts, + CT_POLICY_EVAL_CTX *ctx); + + +/********************************* + * SCT parsing and serialisation * + *********************************/ + +/* + * Serialize (to TLS format) a stack of SCTs and return the length. + * "a" must not be NULL. + * If "pp" is NULL, just return the length of what would have been serialized. + * If "pp" is not NULL and "*pp" is null, function will allocate a new pointer + * for data that caller is responsible for freeing (only if function returns + * successfully). + * If "pp" is NULL and "*pp" is not NULL, caller is responsible for ensuring + * that "*pp" is large enough to accept all of the serialized data. + * Returns < 0 on error, >= 0 indicating bytes written (or would have been) + * on success. + */ +__owur int i2o_SCT_LIST(const STACK_OF(SCT) *a, unsigned char **pp); + +/* + * Convert TLS format SCT list to a stack of SCTs. + * If "a" or "*a" is NULL, a new stack will be created that the caller is + * responsible for freeing (by calling SCT_LIST_free). + * "**pp" and "*pp" must not be NULL. + * Upon success, "*pp" will point to after the last bytes read, and a stack + * will be returned. + * Upon failure, a NULL pointer will be returned, and the position of "*pp" is + * not defined. + */ +STACK_OF(SCT) *o2i_SCT_LIST(STACK_OF(SCT) **a, const unsigned char **pp, + size_t len); + +/* + * Serialize (to DER format) a stack of SCTs and return the length. + * "a" must not be NULL. + * If "pp" is NULL, just returns the length of what would have been serialized. + * If "pp" is not NULL and "*pp" is null, function will allocate a new pointer + * for data that caller is responsible for freeing (only if function returns + * successfully). + * If "pp" is NULL and "*pp" is not NULL, caller is responsible for ensuring + * that "*pp" is large enough to accept all of the serialized data. + * Returns < 0 on error, >= 0 indicating bytes written (or would have been) + * on success. + */ +__owur int i2d_SCT_LIST(const STACK_OF(SCT) *a, unsigned char **pp); + +/* + * Parses an SCT list in DER format and returns it. + * If "a" or "*a" is NULL, a new stack will be created that the caller is + * responsible for freeing (by calling SCT_LIST_free). + * "**pp" and "*pp" must not be NULL. + * Upon success, "*pp" will point to after the last bytes read, and a stack + * will be returned. + * Upon failure, a NULL pointer will be returned, and the position of "*pp" is + * not defined. + */ +STACK_OF(SCT) *d2i_SCT_LIST(STACK_OF(SCT) **a, const unsigned char **pp, + long len); + +/* + * Serialize (to TLS format) an |sct| and write it to |out|. + * If |out| is null, no SCT will be output but the length will still be returned. + * If |out| points to a null pointer, a string will be allocated to hold the + * TLS-format SCT. It is the responsibility of the caller to free it. + * If |out| points to an allocated string, the TLS-format SCT will be written + * to it. + * The length of the SCT in TLS format will be returned. + */ +__owur int i2o_SCT(const SCT *sct, unsigned char **out); + +/* + * Parses an SCT in TLS format and returns it. + * If |psct| is not null, it will end up pointing to the parsed SCT. If it + * already points to a non-null pointer, the pointer will be free'd. + * |in| should be a pointer to a string containing the TLS-format SCT. + * |in| will be advanced to the end of the SCT if parsing succeeds. + * |len| should be the length of the SCT in |in|. + * Returns NULL if an error occurs. + * If the SCT is an unsupported version, only the SCT's 'sct' and 'sct_len' + * fields will be populated (with |in| and |len| respectively). + */ +SCT *o2i_SCT(SCT **psct, const unsigned char **in, size_t len); + +/******************** + * CT log functions * + ********************/ + +/* + * Creates a new CT log instance with the given |public_key| and |name|. + * Takes ownership of |public_key| but copies |name|. + * Returns NULL if malloc fails or if |public_key| cannot be converted to DER. + * Should be deleted by the caller using CTLOG_free when no longer needed. + */ +CTLOG *CTLOG_new(EVP_PKEY *public_key, const char *name); + +/* + * Creates a new CTLOG instance with the base64-encoded SubjectPublicKeyInfo DER + * in |pkey_base64|. The |name| is a string to help users identify this log. + * Returns 1 on success, 0 on failure. + * Should be deleted by the caller using CTLOG_free when no longer needed. + */ +int CTLOG_new_from_base64(CTLOG ** ct_log, + const char *pkey_base64, const char *name); + +/* + * Deletes a CT log instance and its fields. + */ +void CTLOG_free(CTLOG *log); + +/* Gets the name of the CT log */ +const char *CTLOG_get0_name(const CTLOG *log); +/* Gets the ID of the CT log */ +void CTLOG_get0_log_id(const CTLOG *log, const uint8_t **log_id, + size_t *log_id_len); +/* Gets the public key of the CT log */ +EVP_PKEY *CTLOG_get0_public_key(const CTLOG *log); + +/************************** + * CT log store functions * + **************************/ + +/* + * Creates a new CT log store. + * Should be deleted by the caller using CTLOG_STORE_free when no longer needed. + */ +CTLOG_STORE *CTLOG_STORE_new(void); + +/* + * Deletes a CT log store and all of the CT log instances held within. + */ +void CTLOG_STORE_free(CTLOG_STORE *store); + +/* + * Finds a CT log in the store based on its log ID. + * Returns the CT log, or NULL if no match is found. + */ +const CTLOG *CTLOG_STORE_get0_log_by_id(const CTLOG_STORE *store, + const uint8_t *log_id, + size_t log_id_len); + +/* + * Loads a CT log list into a |store| from a |file|. + * Returns 1 if loading is successful, or 0 otherwise. + */ +__owur int CTLOG_STORE_load_file(CTLOG_STORE *store, const char *file); + +/* + * Loads the default CT log list into a |store|. + * Returns 1 if loading is successful, or 0 otherwise. + */ +__owur int CTLOG_STORE_load_default_file(CTLOG_STORE *store); + +# ifdef __cplusplus +} +# endif +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cterr.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cterr.h new file mode 100644 index 00000000..feb7bc56 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cterr.h @@ -0,0 +1,80 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2019 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_CTERR_H +# define HEADER_CTERR_H + +# ifndef HEADER_SYMHACKS_H +# include +# endif + +# include + +# ifndef OPENSSL_NO_CT + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_CT_strings(void); + +/* + * CT function codes. + */ +# define CT_F_CTLOG_NEW 117 +# define CT_F_CTLOG_NEW_FROM_BASE64 118 +# define CT_F_CTLOG_NEW_FROM_CONF 119 +# define CT_F_CTLOG_STORE_LOAD_CTX_NEW 122 +# define CT_F_CTLOG_STORE_LOAD_FILE 123 +# define CT_F_CTLOG_STORE_LOAD_LOG 130 +# define CT_F_CTLOG_STORE_NEW 131 +# define CT_F_CT_BASE64_DECODE 124 +# define CT_F_CT_POLICY_EVAL_CTX_NEW 133 +# define CT_F_CT_V1_LOG_ID_FROM_PKEY 125 +# define CT_F_I2O_SCT 107 +# define CT_F_I2O_SCT_LIST 108 +# define CT_F_I2O_SCT_SIGNATURE 109 +# define CT_F_O2I_SCT 110 +# define CT_F_O2I_SCT_LIST 111 +# define CT_F_O2I_SCT_SIGNATURE 112 +# define CT_F_SCT_CTX_NEW 126 +# define CT_F_SCT_CTX_VERIFY 128 +# define CT_F_SCT_NEW 100 +# define CT_F_SCT_NEW_FROM_BASE64 127 +# define CT_F_SCT_SET0_LOG_ID 101 +# define CT_F_SCT_SET1_EXTENSIONS 114 +# define CT_F_SCT_SET1_LOG_ID 115 +# define CT_F_SCT_SET1_SIGNATURE 116 +# define CT_F_SCT_SET_LOG_ENTRY_TYPE 102 +# define CT_F_SCT_SET_SIGNATURE_NID 103 +# define CT_F_SCT_SET_VERSION 104 + +/* + * CT reason codes. + */ +# define CT_R_BASE64_DECODE_ERROR 108 +# define CT_R_INVALID_LOG_ID_LENGTH 100 +# define CT_R_LOG_CONF_INVALID 109 +# define CT_R_LOG_CONF_INVALID_KEY 110 +# define CT_R_LOG_CONF_MISSING_DESCRIPTION 111 +# define CT_R_LOG_CONF_MISSING_KEY 112 +# define CT_R_LOG_KEY_INVALID 113 +# define CT_R_SCT_FUTURE_TIMESTAMP 116 +# define CT_R_SCT_INVALID 104 +# define CT_R_SCT_INVALID_SIGNATURE 107 +# define CT_R_SCT_LIST_INVALID 105 +# define CT_R_SCT_LOG_ID_MISMATCH 114 +# define CT_R_SCT_NOT_SET 106 +# define CT_R_SCT_UNSUPPORTED_VERSION 115 +# define CT_R_UNRECOGNIZED_SIGNATURE_NID 101 +# define CT_R_UNSUPPORTED_ENTRY_TYPE 102 +# define CT_R_UNSUPPORTED_VERSION 103 + +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/des.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/des.h new file mode 100644 index 00000000..be4abbdf --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/des.h @@ -0,0 +1,174 @@ +/* + * Copyright 1995-2016 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_DES_H +# define HEADER_DES_H + +# include + +# ifndef OPENSSL_NO_DES +# ifdef __cplusplus +extern "C" { +# endif +# include + +typedef unsigned int DES_LONG; + +# ifdef OPENSSL_BUILD_SHLIBCRYPTO +# undef OPENSSL_EXTERN +# define OPENSSL_EXTERN OPENSSL_EXPORT +# endif + +typedef unsigned char DES_cblock[8]; +typedef /* const */ unsigned char const_DES_cblock[8]; +/* + * With "const", gcc 2.8.1 on Solaris thinks that DES_cblock * and + * const_DES_cblock * are incompatible pointer types. + */ + +typedef struct DES_ks { + union { + DES_cblock cblock; + /* + * make sure things are correct size on machines with 8 byte longs + */ + DES_LONG deslong[2]; + } ks[16]; +} DES_key_schedule; + +# define DES_KEY_SZ (sizeof(DES_cblock)) +# define DES_SCHEDULE_SZ (sizeof(DES_key_schedule)) + +# define DES_ENCRYPT 1 +# define DES_DECRYPT 0 + +# define DES_CBC_MODE 0 +# define DES_PCBC_MODE 1 + +# define DES_ecb2_encrypt(i,o,k1,k2,e) \ + DES_ecb3_encrypt((i),(o),(k1),(k2),(k1),(e)) + +# define DES_ede2_cbc_encrypt(i,o,l,k1,k2,iv,e) \ + DES_ede3_cbc_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(e)) + +# define DES_ede2_cfb64_encrypt(i,o,l,k1,k2,iv,n,e) \ + DES_ede3_cfb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n),(e)) + +# define DES_ede2_ofb64_encrypt(i,o,l,k1,k2,iv,n) \ + DES_ede3_ofb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n)) + +OPENSSL_DECLARE_GLOBAL(int, DES_check_key); /* defaults to false */ +# define DES_check_key OPENSSL_GLOBAL_REF(DES_check_key) + +const char *DES_options(void); +void DES_ecb3_encrypt(const_DES_cblock *input, DES_cblock *output, + DES_key_schedule *ks1, DES_key_schedule *ks2, + DES_key_schedule *ks3, int enc); +DES_LONG DES_cbc_cksum(const unsigned char *input, DES_cblock *output, + long length, DES_key_schedule *schedule, + const_DES_cblock *ivec); +/* DES_cbc_encrypt does not update the IV! Use DES_ncbc_encrypt instead. */ +void DES_cbc_encrypt(const unsigned char *input, unsigned char *output, + long length, DES_key_schedule *schedule, + DES_cblock *ivec, int enc); +void DES_ncbc_encrypt(const unsigned char *input, unsigned char *output, + long length, DES_key_schedule *schedule, + DES_cblock *ivec, int enc); +void DES_xcbc_encrypt(const unsigned char *input, unsigned char *output, + long length, DES_key_schedule *schedule, + DES_cblock *ivec, const_DES_cblock *inw, + const_DES_cblock *outw, int enc); +void DES_cfb_encrypt(const unsigned char *in, unsigned char *out, int numbits, + long length, DES_key_schedule *schedule, + DES_cblock *ivec, int enc); +void DES_ecb_encrypt(const_DES_cblock *input, DES_cblock *output, + DES_key_schedule *ks, int enc); + +/* + * This is the DES encryption function that gets called by just about every + * other DES routine in the library. You should not use this function except + * to implement 'modes' of DES. I say this because the functions that call + * this routine do the conversion from 'char *' to long, and this needs to be + * done to make sure 'non-aligned' memory access do not occur. The + * characters are loaded 'little endian'. Data is a pointer to 2 unsigned + * long's and ks is the DES_key_schedule to use. enc, is non zero specifies + * encryption, zero if decryption. + */ +void DES_encrypt1(DES_LONG *data, DES_key_schedule *ks, int enc); + +/* + * This functions is the same as DES_encrypt1() except that the DES initial + * permutation (IP) and final permutation (FP) have been left out. As for + * DES_encrypt1(), you should not use this function. It is used by the + * routines in the library that implement triple DES. IP() DES_encrypt2() + * DES_encrypt2() DES_encrypt2() FP() is the same as DES_encrypt1() + * DES_encrypt1() DES_encrypt1() except faster :-). + */ +void DES_encrypt2(DES_LONG *data, DES_key_schedule *ks, int enc); + +void DES_encrypt3(DES_LONG *data, DES_key_schedule *ks1, + DES_key_schedule *ks2, DES_key_schedule *ks3); +void DES_decrypt3(DES_LONG *data, DES_key_schedule *ks1, + DES_key_schedule *ks2, DES_key_schedule *ks3); +void DES_ede3_cbc_encrypt(const unsigned char *input, unsigned char *output, + long length, + DES_key_schedule *ks1, DES_key_schedule *ks2, + DES_key_schedule *ks3, DES_cblock *ivec, int enc); +void DES_ede3_cfb64_encrypt(const unsigned char *in, unsigned char *out, + long length, DES_key_schedule *ks1, + DES_key_schedule *ks2, DES_key_schedule *ks3, + DES_cblock *ivec, int *num, int enc); +void DES_ede3_cfb_encrypt(const unsigned char *in, unsigned char *out, + int numbits, long length, DES_key_schedule *ks1, + DES_key_schedule *ks2, DES_key_schedule *ks3, + DES_cblock *ivec, int enc); +void DES_ede3_ofb64_encrypt(const unsigned char *in, unsigned char *out, + long length, DES_key_schedule *ks1, + DES_key_schedule *ks2, DES_key_schedule *ks3, + DES_cblock *ivec, int *num); +char *DES_fcrypt(const char *buf, const char *salt, char *ret); +char *DES_crypt(const char *buf, const char *salt); +void DES_ofb_encrypt(const unsigned char *in, unsigned char *out, int numbits, + long length, DES_key_schedule *schedule, + DES_cblock *ivec); +void DES_pcbc_encrypt(const unsigned char *input, unsigned char *output, + long length, DES_key_schedule *schedule, + DES_cblock *ivec, int enc); +DES_LONG DES_quad_cksum(const unsigned char *input, DES_cblock output[], + long length, int out_count, DES_cblock *seed); +int DES_random_key(DES_cblock *ret); +void DES_set_odd_parity(DES_cblock *key); +int DES_check_key_parity(const_DES_cblock *key); +int DES_is_weak_key(const_DES_cblock *key); +/* + * DES_set_key (= set_key = DES_key_sched = key_sched) calls + * DES_set_key_checked if global variable DES_check_key is set, + * DES_set_key_unchecked otherwise. + */ +int DES_set_key(const_DES_cblock *key, DES_key_schedule *schedule); +int DES_key_sched(const_DES_cblock *key, DES_key_schedule *schedule); +int DES_set_key_checked(const_DES_cblock *key, DES_key_schedule *schedule); +void DES_set_key_unchecked(const_DES_cblock *key, DES_key_schedule *schedule); +void DES_string_to_key(const char *str, DES_cblock *key); +void DES_string_to_2keys(const char *str, DES_cblock *key1, DES_cblock *key2); +void DES_cfb64_encrypt(const unsigned char *in, unsigned char *out, + long length, DES_key_schedule *schedule, + DES_cblock *ivec, int *num, int enc); +void DES_ofb64_encrypt(const unsigned char *in, unsigned char *out, + long length, DES_key_schedule *schedule, + DES_cblock *ivec, int *num); + +# define DES_fixup_key_parity DES_set_odd_parity + +# ifdef __cplusplus +} +# endif +# endif + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/dh.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/dh.h new file mode 100644 index 00000000..3527540c --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/dh.h @@ -0,0 +1,340 @@ +/* + * Copyright 1995-2018 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_DH_H +# define HEADER_DH_H + +# include + +# ifndef OPENSSL_NO_DH +# include +# include +# include +# include +# if OPENSSL_API_COMPAT < 0x10100000L +# include +# endif +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_DH_MAX_MODULUS_BITS +# define OPENSSL_DH_MAX_MODULUS_BITS 10000 +# endif + +# define OPENSSL_DH_FIPS_MIN_MODULUS_BITS 1024 + +# define DH_FLAG_CACHE_MONT_P 0x01 + +# if OPENSSL_API_COMPAT < 0x10100000L +/* + * Does nothing. Previously this switched off constant time behaviour. + */ +# define DH_FLAG_NO_EXP_CONSTTIME 0x00 +# endif + +/* + * If this flag is set the DH method is FIPS compliant and can be used in + * FIPS mode. This is set in the validated module method. If an application + * sets this flag in its own methods it is its responsibility to ensure the + * result is compliant. + */ + +# define DH_FLAG_FIPS_METHOD 0x0400 + +/* + * If this flag is set the operations normally disabled in FIPS mode are + * permitted it is then the applications responsibility to ensure that the + * usage is compliant. + */ + +# define DH_FLAG_NON_FIPS_ALLOW 0x0400 + +/* Already defined in ossl_typ.h */ +/* typedef struct dh_st DH; */ +/* typedef struct dh_method DH_METHOD; */ + +DECLARE_ASN1_ITEM(DHparams) + +# define DH_GENERATOR_2 2 +/* #define DH_GENERATOR_3 3 */ +# define DH_GENERATOR_5 5 + +/* DH_check error codes */ +# define DH_CHECK_P_NOT_PRIME 0x01 +# define DH_CHECK_P_NOT_SAFE_PRIME 0x02 +# define DH_UNABLE_TO_CHECK_GENERATOR 0x04 +# define DH_NOT_SUITABLE_GENERATOR 0x08 +# define DH_CHECK_Q_NOT_PRIME 0x10 +# define DH_CHECK_INVALID_Q_VALUE 0x20 +# define DH_CHECK_INVALID_J_VALUE 0x40 + +/* DH_check_pub_key error codes */ +# define DH_CHECK_PUBKEY_TOO_SMALL 0x01 +# define DH_CHECK_PUBKEY_TOO_LARGE 0x02 +# define DH_CHECK_PUBKEY_INVALID 0x04 + +/* + * primes p where (p-1)/2 is prime too are called "safe"; we define this for + * backward compatibility: + */ +# define DH_CHECK_P_NOT_STRONG_PRIME DH_CHECK_P_NOT_SAFE_PRIME + +# define d2i_DHparams_fp(fp,x) \ + (DH *)ASN1_d2i_fp((char *(*)())DH_new, \ + (char *(*)())d2i_DHparams, \ + (fp), \ + (unsigned char **)(x)) +# define i2d_DHparams_fp(fp,x) \ + ASN1_i2d_fp(i2d_DHparams,(fp), (unsigned char *)(x)) +# define d2i_DHparams_bio(bp,x) \ + ASN1_d2i_bio_of(DH, DH_new, d2i_DHparams, bp, x) +# define i2d_DHparams_bio(bp,x) \ + ASN1_i2d_bio_of_const(DH,i2d_DHparams,bp,x) + +# define d2i_DHxparams_fp(fp,x) \ + (DH *)ASN1_d2i_fp((char *(*)())DH_new, \ + (char *(*)())d2i_DHxparams, \ + (fp), \ + (unsigned char **)(x)) +# define i2d_DHxparams_fp(fp,x) \ + ASN1_i2d_fp(i2d_DHxparams,(fp), (unsigned char *)(x)) +# define d2i_DHxparams_bio(bp,x) \ + ASN1_d2i_bio_of(DH, DH_new, d2i_DHxparams, bp, x) +# define i2d_DHxparams_bio(bp,x) \ + ASN1_i2d_bio_of_const(DH, i2d_DHxparams, bp, x) + +DH *DHparams_dup(DH *); + +const DH_METHOD *DH_OpenSSL(void); + +void DH_set_default_method(const DH_METHOD *meth); +const DH_METHOD *DH_get_default_method(void); +int DH_set_method(DH *dh, const DH_METHOD *meth); +DH *DH_new_method(ENGINE *engine); + +DH *DH_new(void); +void DH_free(DH *dh); +int DH_up_ref(DH *dh); +int DH_bits(const DH *dh); +int DH_size(const DH *dh); +int DH_security_bits(const DH *dh); +#define DH_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_DH, l, p, newf, dupf, freef) +int DH_set_ex_data(DH *d, int idx, void *arg); +void *DH_get_ex_data(DH *d, int idx); + +/* Deprecated version */ +DEPRECATEDIN_0_9_8(DH *DH_generate_parameters(int prime_len, int generator, + void (*callback) (int, int, + void *), + void *cb_arg)) + +/* New version */ +int DH_generate_parameters_ex(DH *dh, int prime_len, int generator, + BN_GENCB *cb); + +int DH_check_params_ex(const DH *dh); +int DH_check_ex(const DH *dh); +int DH_check_pub_key_ex(const DH *dh, const BIGNUM *pub_key); +int DH_check_params(const DH *dh, int *ret); +int DH_check(const DH *dh, int *codes); +int DH_check_pub_key(const DH *dh, const BIGNUM *pub_key, int *codes); +int DH_generate_key(DH *dh); +int DH_compute_key(unsigned char *key, const BIGNUM *pub_key, DH *dh); +int DH_compute_key_padded(unsigned char *key, const BIGNUM *pub_key, DH *dh); +DH *d2i_DHparams(DH **a, const unsigned char **pp, long length); +int i2d_DHparams(const DH *a, unsigned char **pp); +DH *d2i_DHxparams(DH **a, const unsigned char **pp, long length); +int i2d_DHxparams(const DH *a, unsigned char **pp); +# ifndef OPENSSL_NO_STDIO +int DHparams_print_fp(FILE *fp, const DH *x); +# endif +int DHparams_print(BIO *bp, const DH *x); + +/* RFC 5114 parameters */ +DH *DH_get_1024_160(void); +DH *DH_get_2048_224(void); +DH *DH_get_2048_256(void); + +/* Named parameters, currently RFC7919 */ +DH *DH_new_by_nid(int nid); +int DH_get_nid(const DH *dh); + +# ifndef OPENSSL_NO_CMS +/* RFC2631 KDF */ +int DH_KDF_X9_42(unsigned char *out, size_t outlen, + const unsigned char *Z, size_t Zlen, + ASN1_OBJECT *key_oid, + const unsigned char *ukm, size_t ukmlen, const EVP_MD *md); +# endif + +void DH_get0_pqg(const DH *dh, + const BIGNUM **p, const BIGNUM **q, const BIGNUM **g); +int DH_set0_pqg(DH *dh, BIGNUM *p, BIGNUM *q, BIGNUM *g); +void DH_get0_key(const DH *dh, + const BIGNUM **pub_key, const BIGNUM **priv_key); +int DH_set0_key(DH *dh, BIGNUM *pub_key, BIGNUM *priv_key); +const BIGNUM *DH_get0_p(const DH *dh); +const BIGNUM *DH_get0_q(const DH *dh); +const BIGNUM *DH_get0_g(const DH *dh); +const BIGNUM *DH_get0_priv_key(const DH *dh); +const BIGNUM *DH_get0_pub_key(const DH *dh); +void DH_clear_flags(DH *dh, int flags); +int DH_test_flags(const DH *dh, int flags); +void DH_set_flags(DH *dh, int flags); +ENGINE *DH_get0_engine(DH *d); +long DH_get_length(const DH *dh); +int DH_set_length(DH *dh, long length); + +DH_METHOD *DH_meth_new(const char *name, int flags); +void DH_meth_free(DH_METHOD *dhm); +DH_METHOD *DH_meth_dup(const DH_METHOD *dhm); +const char *DH_meth_get0_name(const DH_METHOD *dhm); +int DH_meth_set1_name(DH_METHOD *dhm, const char *name); +int DH_meth_get_flags(const DH_METHOD *dhm); +int DH_meth_set_flags(DH_METHOD *dhm, int flags); +void *DH_meth_get0_app_data(const DH_METHOD *dhm); +int DH_meth_set0_app_data(DH_METHOD *dhm, void *app_data); +int (*DH_meth_get_generate_key(const DH_METHOD *dhm)) (DH *); +int DH_meth_set_generate_key(DH_METHOD *dhm, int (*generate_key) (DH *)); +int (*DH_meth_get_compute_key(const DH_METHOD *dhm)) + (unsigned char *key, const BIGNUM *pub_key, DH *dh); +int DH_meth_set_compute_key(DH_METHOD *dhm, + int (*compute_key) (unsigned char *key, const BIGNUM *pub_key, DH *dh)); +int (*DH_meth_get_bn_mod_exp(const DH_METHOD *dhm)) + (const DH *, BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, + BN_CTX *, BN_MONT_CTX *); +int DH_meth_set_bn_mod_exp(DH_METHOD *dhm, + int (*bn_mod_exp) (const DH *, BIGNUM *, const BIGNUM *, const BIGNUM *, + const BIGNUM *, BN_CTX *, BN_MONT_CTX *)); +int (*DH_meth_get_init(const DH_METHOD *dhm))(DH *); +int DH_meth_set_init(DH_METHOD *dhm, int (*init)(DH *)); +int (*DH_meth_get_finish(const DH_METHOD *dhm)) (DH *); +int DH_meth_set_finish(DH_METHOD *dhm, int (*finish) (DH *)); +int (*DH_meth_get_generate_params(const DH_METHOD *dhm)) + (DH *, int, int, BN_GENCB *); +int DH_meth_set_generate_params(DH_METHOD *dhm, + int (*generate_params) (DH *, int, int, BN_GENCB *)); + + +# define EVP_PKEY_CTX_set_dh_paramgen_prime_len(ctx, len) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_PARAMGEN, \ + EVP_PKEY_CTRL_DH_PARAMGEN_PRIME_LEN, len, NULL) + +# define EVP_PKEY_CTX_set_dh_paramgen_subprime_len(ctx, len) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_PARAMGEN, \ + EVP_PKEY_CTRL_DH_PARAMGEN_SUBPRIME_LEN, len, NULL) + +# define EVP_PKEY_CTX_set_dh_paramgen_type(ctx, typ) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_PARAMGEN, \ + EVP_PKEY_CTRL_DH_PARAMGEN_TYPE, typ, NULL) + +# define EVP_PKEY_CTX_set_dh_paramgen_generator(ctx, gen) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_PARAMGEN, \ + EVP_PKEY_CTRL_DH_PARAMGEN_GENERATOR, gen, NULL) + +# define EVP_PKEY_CTX_set_dh_rfc5114(ctx, gen) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, EVP_PKEY_OP_PARAMGEN, \ + EVP_PKEY_CTRL_DH_RFC5114, gen, NULL) + +# define EVP_PKEY_CTX_set_dhx_rfc5114(ctx, gen) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, EVP_PKEY_OP_PARAMGEN, \ + EVP_PKEY_CTRL_DH_RFC5114, gen, NULL) + +# define EVP_PKEY_CTX_set_dh_nid(ctx, nid) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, \ + EVP_PKEY_OP_PARAMGEN | EVP_PKEY_OP_KEYGEN, \ + EVP_PKEY_CTRL_DH_NID, nid, NULL) + +# define EVP_PKEY_CTX_set_dh_pad(ctx, pad) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_DH_PAD, pad, NULL) + +# define EVP_PKEY_CTX_set_dh_kdf_type(ctx, kdf) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_DH_KDF_TYPE, kdf, NULL) + +# define EVP_PKEY_CTX_get_dh_kdf_type(ctx) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_DH_KDF_TYPE, -2, NULL) + +# define EVP_PKEY_CTX_set0_dh_kdf_oid(ctx, oid) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_DH_KDF_OID, 0, (void *)(oid)) + +# define EVP_PKEY_CTX_get0_dh_kdf_oid(ctx, poid) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_GET_DH_KDF_OID, 0, (void *)(poid)) + +# define EVP_PKEY_CTX_set_dh_kdf_md(ctx, md) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_DH_KDF_MD, 0, (void *)(md)) + +# define EVP_PKEY_CTX_get_dh_kdf_md(ctx, pmd) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_GET_DH_KDF_MD, 0, (void *)(pmd)) + +# define EVP_PKEY_CTX_set_dh_kdf_outlen(ctx, len) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_DH_KDF_OUTLEN, len, NULL) + +# define EVP_PKEY_CTX_get_dh_kdf_outlen(ctx, plen) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_GET_DH_KDF_OUTLEN, 0, (void *)(plen)) + +# define EVP_PKEY_CTX_set0_dh_kdf_ukm(ctx, p, plen) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_DH_KDF_UKM, plen, (void *)(p)) + +# define EVP_PKEY_CTX_get0_dh_kdf_ukm(ctx, p) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_GET_DH_KDF_UKM, 0, (void *)(p)) + +# define EVP_PKEY_CTRL_DH_PARAMGEN_PRIME_LEN (EVP_PKEY_ALG_CTRL + 1) +# define EVP_PKEY_CTRL_DH_PARAMGEN_GENERATOR (EVP_PKEY_ALG_CTRL + 2) +# define EVP_PKEY_CTRL_DH_RFC5114 (EVP_PKEY_ALG_CTRL + 3) +# define EVP_PKEY_CTRL_DH_PARAMGEN_SUBPRIME_LEN (EVP_PKEY_ALG_CTRL + 4) +# define EVP_PKEY_CTRL_DH_PARAMGEN_TYPE (EVP_PKEY_ALG_CTRL + 5) +# define EVP_PKEY_CTRL_DH_KDF_TYPE (EVP_PKEY_ALG_CTRL + 6) +# define EVP_PKEY_CTRL_DH_KDF_MD (EVP_PKEY_ALG_CTRL + 7) +# define EVP_PKEY_CTRL_GET_DH_KDF_MD (EVP_PKEY_ALG_CTRL + 8) +# define EVP_PKEY_CTRL_DH_KDF_OUTLEN (EVP_PKEY_ALG_CTRL + 9) +# define EVP_PKEY_CTRL_GET_DH_KDF_OUTLEN (EVP_PKEY_ALG_CTRL + 10) +# define EVP_PKEY_CTRL_DH_KDF_UKM (EVP_PKEY_ALG_CTRL + 11) +# define EVP_PKEY_CTRL_GET_DH_KDF_UKM (EVP_PKEY_ALG_CTRL + 12) +# define EVP_PKEY_CTRL_DH_KDF_OID (EVP_PKEY_ALG_CTRL + 13) +# define EVP_PKEY_CTRL_GET_DH_KDF_OID (EVP_PKEY_ALG_CTRL + 14) +# define EVP_PKEY_CTRL_DH_NID (EVP_PKEY_ALG_CTRL + 15) +# define EVP_PKEY_CTRL_DH_PAD (EVP_PKEY_ALG_CTRL + 16) + +/* KDF types */ +# define EVP_PKEY_DH_KDF_NONE 1 +# ifndef OPENSSL_NO_CMS +# define EVP_PKEY_DH_KDF_X9_42 2 +# endif + + +# ifdef __cplusplus +} +# endif +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/dherr.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/dherr.h new file mode 100644 index 00000000..916b3bed --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/dherr.h @@ -0,0 +1,88 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2019 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_DHERR_H +# define HEADER_DHERR_H + +# ifndef HEADER_SYMHACKS_H +# include +# endif + +# include + +# ifndef OPENSSL_NO_DH + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_DH_strings(void); + +/* + * DH function codes. + */ +# define DH_F_COMPUTE_KEY 102 +# define DH_F_DHPARAMS_PRINT_FP 101 +# define DH_F_DH_BUILTIN_GENPARAMS 106 +# define DH_F_DH_CHECK_EX 121 +# define DH_F_DH_CHECK_PARAMS_EX 122 +# define DH_F_DH_CHECK_PUB_KEY_EX 123 +# define DH_F_DH_CMS_DECRYPT 114 +# define DH_F_DH_CMS_SET_PEERKEY 115 +# define DH_F_DH_CMS_SET_SHARED_INFO 116 +# define DH_F_DH_METH_DUP 117 +# define DH_F_DH_METH_NEW 118 +# define DH_F_DH_METH_SET1_NAME 119 +# define DH_F_DH_NEW_BY_NID 104 +# define DH_F_DH_NEW_METHOD 105 +# define DH_F_DH_PARAM_DECODE 107 +# define DH_F_DH_PKEY_PUBLIC_CHECK 124 +# define DH_F_DH_PRIV_DECODE 110 +# define DH_F_DH_PRIV_ENCODE 111 +# define DH_F_DH_PUB_DECODE 108 +# define DH_F_DH_PUB_ENCODE 109 +# define DH_F_DO_DH_PRINT 100 +# define DH_F_GENERATE_KEY 103 +# define DH_F_PKEY_DH_CTRL_STR 120 +# define DH_F_PKEY_DH_DERIVE 112 +# define DH_F_PKEY_DH_INIT 125 +# define DH_F_PKEY_DH_KEYGEN 113 + +/* + * DH reason codes. + */ +# define DH_R_BAD_GENERATOR 101 +# define DH_R_BN_DECODE_ERROR 109 +# define DH_R_BN_ERROR 106 +# define DH_R_CHECK_INVALID_J_VALUE 115 +# define DH_R_CHECK_INVALID_Q_VALUE 116 +# define DH_R_CHECK_PUBKEY_INVALID 122 +# define DH_R_CHECK_PUBKEY_TOO_LARGE 123 +# define DH_R_CHECK_PUBKEY_TOO_SMALL 124 +# define DH_R_CHECK_P_NOT_PRIME 117 +# define DH_R_CHECK_P_NOT_SAFE_PRIME 118 +# define DH_R_CHECK_Q_NOT_PRIME 119 +# define DH_R_DECODE_ERROR 104 +# define DH_R_INVALID_PARAMETER_NAME 110 +# define DH_R_INVALID_PARAMETER_NID 114 +# define DH_R_INVALID_PUBKEY 102 +# define DH_R_KDF_PARAMETER_ERROR 112 +# define DH_R_KEYS_NOT_SET 108 +# define DH_R_MISSING_PUBKEY 125 +# define DH_R_MODULUS_TOO_LARGE 103 +# define DH_R_NOT_SUITABLE_GENERATOR 120 +# define DH_R_NO_PARAMETERS_SET 107 +# define DH_R_NO_PRIVATE_VALUE 100 +# define DH_R_PARAMETER_ENCODING_ERROR 105 +# define DH_R_PEER_KEY_ERROR 111 +# define DH_R_SHARED_INFO_ERROR 113 +# define DH_R_UNABLE_TO_CHECK_GENERATOR 121 + +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/dsa.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/dsa.h new file mode 100644 index 00000000..6d8a18a4 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/dsa.h @@ -0,0 +1,244 @@ +/* + * Copyright 1995-2018 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_DSA_H +# define HEADER_DSA_H + +# include + +# ifndef OPENSSL_NO_DSA +# ifdef __cplusplus +extern "C" { +# endif +# include +# include +# include +# include +# include +# if OPENSSL_API_COMPAT < 0x10100000L +# include +# endif +# include + +# ifndef OPENSSL_DSA_MAX_MODULUS_BITS +# define OPENSSL_DSA_MAX_MODULUS_BITS 10000 +# endif + +# define OPENSSL_DSA_FIPS_MIN_MODULUS_BITS 1024 + +# define DSA_FLAG_CACHE_MONT_P 0x01 +# if OPENSSL_API_COMPAT < 0x10100000L +/* + * Does nothing. Previously this switched off constant time behaviour. + */ +# define DSA_FLAG_NO_EXP_CONSTTIME 0x00 +# endif + +/* + * If this flag is set the DSA method is FIPS compliant and can be used in + * FIPS mode. This is set in the validated module method. If an application + * sets this flag in its own methods it is its responsibility to ensure the + * result is compliant. + */ + +# define DSA_FLAG_FIPS_METHOD 0x0400 + +/* + * If this flag is set the operations normally disabled in FIPS mode are + * permitted it is then the applications responsibility to ensure that the + * usage is compliant. + */ + +# define DSA_FLAG_NON_FIPS_ALLOW 0x0400 +# define DSA_FLAG_FIPS_CHECKED 0x0800 + +/* Already defined in ossl_typ.h */ +/* typedef struct dsa_st DSA; */ +/* typedef struct dsa_method DSA_METHOD; */ + +typedef struct DSA_SIG_st DSA_SIG; + +# define d2i_DSAparams_fp(fp,x) (DSA *)ASN1_d2i_fp((char *(*)())DSA_new, \ + (char *(*)())d2i_DSAparams,(fp),(unsigned char **)(x)) +# define i2d_DSAparams_fp(fp,x) ASN1_i2d_fp(i2d_DSAparams,(fp), \ + (unsigned char *)(x)) +# define d2i_DSAparams_bio(bp,x) ASN1_d2i_bio_of(DSA,DSA_new,d2i_DSAparams,bp,x) +# define i2d_DSAparams_bio(bp,x) ASN1_i2d_bio_of_const(DSA,i2d_DSAparams,bp,x) + +DSA *DSAparams_dup(DSA *x); +DSA_SIG *DSA_SIG_new(void); +void DSA_SIG_free(DSA_SIG *a); +int i2d_DSA_SIG(const DSA_SIG *a, unsigned char **pp); +DSA_SIG *d2i_DSA_SIG(DSA_SIG **v, const unsigned char **pp, long length); +void DSA_SIG_get0(const DSA_SIG *sig, const BIGNUM **pr, const BIGNUM **ps); +int DSA_SIG_set0(DSA_SIG *sig, BIGNUM *r, BIGNUM *s); + +DSA_SIG *DSA_do_sign(const unsigned char *dgst, int dlen, DSA *dsa); +int DSA_do_verify(const unsigned char *dgst, int dgst_len, + DSA_SIG *sig, DSA *dsa); + +const DSA_METHOD *DSA_OpenSSL(void); + +void DSA_set_default_method(const DSA_METHOD *); +const DSA_METHOD *DSA_get_default_method(void); +int DSA_set_method(DSA *dsa, const DSA_METHOD *); +const DSA_METHOD *DSA_get_method(DSA *d); + +DSA *DSA_new(void); +DSA *DSA_new_method(ENGINE *engine); +void DSA_free(DSA *r); +/* "up" the DSA object's reference count */ +int DSA_up_ref(DSA *r); +int DSA_size(const DSA *); +int DSA_bits(const DSA *d); +int DSA_security_bits(const DSA *d); + /* next 4 return -1 on error */ +DEPRECATEDIN_1_2_0(int DSA_sign_setup(DSA *dsa, BN_CTX *ctx_in, BIGNUM **kinvp, BIGNUM **rp)) +int DSA_sign(int type, const unsigned char *dgst, int dlen, + unsigned char *sig, unsigned int *siglen, DSA *dsa); +int DSA_verify(int type, const unsigned char *dgst, int dgst_len, + const unsigned char *sigbuf, int siglen, DSA *dsa); +#define DSA_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_DSA, l, p, newf, dupf, freef) +int DSA_set_ex_data(DSA *d, int idx, void *arg); +void *DSA_get_ex_data(DSA *d, int idx); + +DSA *d2i_DSAPublicKey(DSA **a, const unsigned char **pp, long length); +DSA *d2i_DSAPrivateKey(DSA **a, const unsigned char **pp, long length); +DSA *d2i_DSAparams(DSA **a, const unsigned char **pp, long length); + +/* Deprecated version */ +DEPRECATEDIN_0_9_8(DSA *DSA_generate_parameters(int bits, + unsigned char *seed, + int seed_len, + int *counter_ret, + unsigned long *h_ret, void + (*callback) (int, int, + void *), + void *cb_arg)) + +/* New version */ +int DSA_generate_parameters_ex(DSA *dsa, int bits, + const unsigned char *seed, int seed_len, + int *counter_ret, unsigned long *h_ret, + BN_GENCB *cb); + +int DSA_generate_key(DSA *a); +int i2d_DSAPublicKey(const DSA *a, unsigned char **pp); +int i2d_DSAPrivateKey(const DSA *a, unsigned char **pp); +int i2d_DSAparams(const DSA *a, unsigned char **pp); + +int DSAparams_print(BIO *bp, const DSA *x); +int DSA_print(BIO *bp, const DSA *x, int off); +# ifndef OPENSSL_NO_STDIO +int DSAparams_print_fp(FILE *fp, const DSA *x); +int DSA_print_fp(FILE *bp, const DSA *x, int off); +# endif + +# define DSS_prime_checks 64 +/* + * Primality test according to FIPS PUB 186-4, Appendix C.3. Since we only + * have one value here we set the number of checks to 64 which is the 128 bit + * security level that is the highest level and valid for creating a 3072 bit + * DSA key. + */ +# define DSA_is_prime(n, callback, cb_arg) \ + BN_is_prime(n, DSS_prime_checks, callback, NULL, cb_arg) + +# ifndef OPENSSL_NO_DH +/* + * Convert DSA structure (key or just parameters) into DH structure (be + * careful to avoid small subgroup attacks when using this!) + */ +DH *DSA_dup_DH(const DSA *r); +# endif + +# define EVP_PKEY_CTX_set_dsa_paramgen_bits(ctx, nbits) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DSA, EVP_PKEY_OP_PARAMGEN, \ + EVP_PKEY_CTRL_DSA_PARAMGEN_BITS, nbits, NULL) +# define EVP_PKEY_CTX_set_dsa_paramgen_q_bits(ctx, qbits) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DSA, EVP_PKEY_OP_PARAMGEN, \ + EVP_PKEY_CTRL_DSA_PARAMGEN_Q_BITS, qbits, NULL) +# define EVP_PKEY_CTX_set_dsa_paramgen_md(ctx, md) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DSA, EVP_PKEY_OP_PARAMGEN, \ + EVP_PKEY_CTRL_DSA_PARAMGEN_MD, 0, (void *)(md)) + +# define EVP_PKEY_CTRL_DSA_PARAMGEN_BITS (EVP_PKEY_ALG_CTRL + 1) +# define EVP_PKEY_CTRL_DSA_PARAMGEN_Q_BITS (EVP_PKEY_ALG_CTRL + 2) +# define EVP_PKEY_CTRL_DSA_PARAMGEN_MD (EVP_PKEY_ALG_CTRL + 3) + +void DSA_get0_pqg(const DSA *d, + const BIGNUM **p, const BIGNUM **q, const BIGNUM **g); +int DSA_set0_pqg(DSA *d, BIGNUM *p, BIGNUM *q, BIGNUM *g); +void DSA_get0_key(const DSA *d, + const BIGNUM **pub_key, const BIGNUM **priv_key); +int DSA_set0_key(DSA *d, BIGNUM *pub_key, BIGNUM *priv_key); +const BIGNUM *DSA_get0_p(const DSA *d); +const BIGNUM *DSA_get0_q(const DSA *d); +const BIGNUM *DSA_get0_g(const DSA *d); +const BIGNUM *DSA_get0_pub_key(const DSA *d); +const BIGNUM *DSA_get0_priv_key(const DSA *d); +void DSA_clear_flags(DSA *d, int flags); +int DSA_test_flags(const DSA *d, int flags); +void DSA_set_flags(DSA *d, int flags); +ENGINE *DSA_get0_engine(DSA *d); + +DSA_METHOD *DSA_meth_new(const char *name, int flags); +void DSA_meth_free(DSA_METHOD *dsam); +DSA_METHOD *DSA_meth_dup(const DSA_METHOD *dsam); +const char *DSA_meth_get0_name(const DSA_METHOD *dsam); +int DSA_meth_set1_name(DSA_METHOD *dsam, const char *name); +int DSA_meth_get_flags(const DSA_METHOD *dsam); +int DSA_meth_set_flags(DSA_METHOD *dsam, int flags); +void *DSA_meth_get0_app_data(const DSA_METHOD *dsam); +int DSA_meth_set0_app_data(DSA_METHOD *dsam, void *app_data); +DSA_SIG *(*DSA_meth_get_sign(const DSA_METHOD *dsam)) + (const unsigned char *, int, DSA *); +int DSA_meth_set_sign(DSA_METHOD *dsam, + DSA_SIG *(*sign) (const unsigned char *, int, DSA *)); +int (*DSA_meth_get_sign_setup(const DSA_METHOD *dsam)) + (DSA *, BN_CTX *, BIGNUM **, BIGNUM **); +int DSA_meth_set_sign_setup(DSA_METHOD *dsam, + int (*sign_setup) (DSA *, BN_CTX *, BIGNUM **, BIGNUM **)); +int (*DSA_meth_get_verify(const DSA_METHOD *dsam)) + (const unsigned char *, int, DSA_SIG *, DSA *); +int DSA_meth_set_verify(DSA_METHOD *dsam, + int (*verify) (const unsigned char *, int, DSA_SIG *, DSA *)); +int (*DSA_meth_get_mod_exp(const DSA_METHOD *dsam)) + (DSA *, BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, + const BIGNUM *, const BIGNUM *, BN_CTX *, BN_MONT_CTX *); +int DSA_meth_set_mod_exp(DSA_METHOD *dsam, + int (*mod_exp) (DSA *, BIGNUM *, const BIGNUM *, const BIGNUM *, + const BIGNUM *, const BIGNUM *, const BIGNUM *, BN_CTX *, + BN_MONT_CTX *)); +int (*DSA_meth_get_bn_mod_exp(const DSA_METHOD *dsam)) + (DSA *, BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, + BN_CTX *, BN_MONT_CTX *); +int DSA_meth_set_bn_mod_exp(DSA_METHOD *dsam, + int (*bn_mod_exp) (DSA *, BIGNUM *, const BIGNUM *, const BIGNUM *, + const BIGNUM *, BN_CTX *, BN_MONT_CTX *)); +int (*DSA_meth_get_init(const DSA_METHOD *dsam))(DSA *); +int DSA_meth_set_init(DSA_METHOD *dsam, int (*init)(DSA *)); +int (*DSA_meth_get_finish(const DSA_METHOD *dsam)) (DSA *); +int DSA_meth_set_finish(DSA_METHOD *dsam, int (*finish) (DSA *)); +int (*DSA_meth_get_paramgen(const DSA_METHOD *dsam)) + (DSA *, int, const unsigned char *, int, int *, unsigned long *, + BN_GENCB *); +int DSA_meth_set_paramgen(DSA_METHOD *dsam, + int (*paramgen) (DSA *, int, const unsigned char *, int, int *, + unsigned long *, BN_GENCB *)); +int (*DSA_meth_get_keygen(const DSA_METHOD *dsam)) (DSA *); +int DSA_meth_set_keygen(DSA_METHOD *dsam, int (*keygen) (DSA *)); + + +# ifdef __cplusplus +} +# endif +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/dsaerr.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/dsaerr.h new file mode 100644 index 00000000..495a1ac8 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/dsaerr.h @@ -0,0 +1,72 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2019 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_DSAERR_H +# define HEADER_DSAERR_H + +# ifndef HEADER_SYMHACKS_H +# include +# endif + +# include + +# ifndef OPENSSL_NO_DSA + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_DSA_strings(void); + +/* + * DSA function codes. + */ +# define DSA_F_DSAPARAMS_PRINT 100 +# define DSA_F_DSAPARAMS_PRINT_FP 101 +# define DSA_F_DSA_BUILTIN_PARAMGEN 125 +# define DSA_F_DSA_BUILTIN_PARAMGEN2 126 +# define DSA_F_DSA_DO_SIGN 112 +# define DSA_F_DSA_DO_VERIFY 113 +# define DSA_F_DSA_METH_DUP 127 +# define DSA_F_DSA_METH_NEW 128 +# define DSA_F_DSA_METH_SET1_NAME 129 +# define DSA_F_DSA_NEW_METHOD 103 +# define DSA_F_DSA_PARAM_DECODE 119 +# define DSA_F_DSA_PRINT_FP 105 +# define DSA_F_DSA_PRIV_DECODE 115 +# define DSA_F_DSA_PRIV_ENCODE 116 +# define DSA_F_DSA_PUB_DECODE 117 +# define DSA_F_DSA_PUB_ENCODE 118 +# define DSA_F_DSA_SIGN 106 +# define DSA_F_DSA_SIGN_SETUP 107 +# define DSA_F_DSA_SIG_NEW 102 +# define DSA_F_OLD_DSA_PRIV_DECODE 122 +# define DSA_F_PKEY_DSA_CTRL 120 +# define DSA_F_PKEY_DSA_CTRL_STR 104 +# define DSA_F_PKEY_DSA_KEYGEN 121 + +/* + * DSA reason codes. + */ +# define DSA_R_BAD_Q_VALUE 102 +# define DSA_R_BN_DECODE_ERROR 108 +# define DSA_R_BN_ERROR 109 +# define DSA_R_DECODE_ERROR 104 +# define DSA_R_INVALID_DIGEST_TYPE 106 +# define DSA_R_INVALID_PARAMETERS 112 +# define DSA_R_MISSING_PARAMETERS 101 +# define DSA_R_MISSING_PRIVATE_KEY 111 +# define DSA_R_MODULUS_TOO_LARGE 103 +# define DSA_R_NO_PARAMETERS_SET 107 +# define DSA_R_PARAMETER_ENCODING_ERROR 105 +# define DSA_R_Q_NOT_PRIME 113 +# define DSA_R_SEED_LEN_SMALL 110 + +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/dtls1.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/dtls1.h new file mode 100644 index 00000000..d55ca9c3 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/dtls1.h @@ -0,0 +1,55 @@ +/* + * Copyright 2005-2018 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_DTLS1_H +# define HEADER_DTLS1_H + +#ifdef __cplusplus +extern "C" { +#endif + +# define DTLS1_VERSION 0xFEFF +# define DTLS1_2_VERSION 0xFEFD +# define DTLS_MIN_VERSION DTLS1_VERSION +# define DTLS_MAX_VERSION DTLS1_2_VERSION +# define DTLS1_VERSION_MAJOR 0xFE + +# define DTLS1_BAD_VER 0x0100 + +/* Special value for method supporting multiple versions */ +# define DTLS_ANY_VERSION 0x1FFFF + +/* lengths of messages */ +/* + * Actually the max cookie length in DTLS is 255. But we can't change this now + * due to compatibility concerns. + */ +# define DTLS1_COOKIE_LENGTH 256 + +# define DTLS1_RT_HEADER_LENGTH 13 + +# define DTLS1_HM_HEADER_LENGTH 12 + +# define DTLS1_HM_BAD_FRAGMENT -2 +# define DTLS1_HM_FRAGMENT_RETRY -3 + +# define DTLS1_CCS_HEADER_LENGTH 1 + +# define DTLS1_AL_HEADER_LENGTH 2 + +/* Timeout multipliers */ +# define DTLS1_TMO_READ_COUNT 2 +# define DTLS1_TMO_WRITE_COUNT 2 + +# define DTLS1_TMO_ALERT_COUNT 12 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/e_os2.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/e_os2.h new file mode 100644 index 00000000..97a776cd --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/e_os2.h @@ -0,0 +1,300 @@ +/* + * Copyright 1995-2019 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_E_OS2_H +# define HEADER_E_OS2_H + +# include + +#ifdef __cplusplus +extern "C" { +#endif + +/****************************************************************************** + * Detect operating systems. This probably needs completing. + * The result is that at least one OPENSSL_SYS_os macro should be defined. + * However, if none is defined, Unix is assumed. + **/ + +# define OPENSSL_SYS_UNIX + +/* --------------------- Microsoft operating systems ---------------------- */ + +/* + * Note that MSDOS actually denotes 32-bit environments running on top of + * MS-DOS, such as DJGPP one. + */ +# if defined(OPENSSL_SYS_MSDOS) +# undef OPENSSL_SYS_UNIX +# endif + +/* + * For 32 bit environment, there seems to be the CygWin environment and then + * all the others that try to do the same thing Microsoft does... + */ +/* + * UEFI lives here because it might be built with a Microsoft toolchain and + * we need to avoid the false positive match on Windows. + */ +# if defined(OPENSSL_SYS_UEFI) +# undef OPENSSL_SYS_UNIX +# elif defined(OPENSSL_SYS_UWIN) +# undef OPENSSL_SYS_UNIX +# define OPENSSL_SYS_WIN32_UWIN +# else +# if defined(__CYGWIN__) || defined(OPENSSL_SYS_CYGWIN) +# define OPENSSL_SYS_WIN32_CYGWIN +# else +# if defined(_WIN32) || defined(OPENSSL_SYS_WIN32) +# undef OPENSSL_SYS_UNIX +# if !defined(OPENSSL_SYS_WIN32) +# define OPENSSL_SYS_WIN32 +# endif +# endif +# if defined(_WIN64) || defined(OPENSSL_SYS_WIN64) +# undef OPENSSL_SYS_UNIX +# if !defined(OPENSSL_SYS_WIN64) +# define OPENSSL_SYS_WIN64 +# endif +# endif +# if defined(OPENSSL_SYS_WINNT) +# undef OPENSSL_SYS_UNIX +# endif +# if defined(OPENSSL_SYS_WINCE) +# undef OPENSSL_SYS_UNIX +# endif +# endif +# endif + +/* Anything that tries to look like Microsoft is "Windows" */ +# if defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_WIN64) || defined(OPENSSL_SYS_WINNT) || defined(OPENSSL_SYS_WINCE) +# undef OPENSSL_SYS_UNIX +# define OPENSSL_SYS_WINDOWS +# ifndef OPENSSL_SYS_MSDOS +# define OPENSSL_SYS_MSDOS +# endif +# endif + +/* + * DLL settings. This part is a bit tough, because it's up to the + * application implementor how he or she will link the application, so it + * requires some macro to be used. + */ +# ifdef OPENSSL_SYS_WINDOWS +# ifndef OPENSSL_OPT_WINDLL +# if defined(_WINDLL) /* This is used when building OpenSSL to + * indicate that DLL linkage should be used */ +# define OPENSSL_OPT_WINDLL +# endif +# endif +# endif + +/* ------------------------------- OpenVMS -------------------------------- */ +# if defined(__VMS) || defined(VMS) || defined(OPENSSL_SYS_VMS) +# if !defined(OPENSSL_SYS_VMS) +# undef OPENSSL_SYS_UNIX +# endif +# define OPENSSL_SYS_VMS +# if defined(__DECC) +# define OPENSSL_SYS_VMS_DECC +# elif defined(__DECCXX) +# define OPENSSL_SYS_VMS_DECC +# define OPENSSL_SYS_VMS_DECCXX +# else +# define OPENSSL_SYS_VMS_NODECC +# endif +# endif + +/* -------------------------------- Unix ---------------------------------- */ +# ifdef OPENSSL_SYS_UNIX +# if defined(linux) || defined(__linux__) && !defined(OPENSSL_SYS_LINUX) +# define OPENSSL_SYS_LINUX +# endif +# if defined(_AIX) && !defined(OPENSSL_SYS_AIX) +# define OPENSSL_SYS_AIX +# endif +# endif + +/* -------------------------------- VOS ----------------------------------- */ +# if defined(__VOS__) && !defined(OPENSSL_SYS_VOS) +# define OPENSSL_SYS_VOS +# ifdef __HPPA__ +# define OPENSSL_SYS_VOS_HPPA +# endif +# ifdef __IA32__ +# define OPENSSL_SYS_VOS_IA32 +# endif +# endif + +/** + * That's it for OS-specific stuff + *****************************************************************************/ + +/* Specials for I/O an exit */ +# ifdef OPENSSL_SYS_MSDOS +# define OPENSSL_UNISTD_IO +# define OPENSSL_DECLARE_EXIT extern void exit(int); +# else +# define OPENSSL_UNISTD_IO OPENSSL_UNISTD +# define OPENSSL_DECLARE_EXIT /* declared in unistd.h */ +# endif + +/*- + * OPENSSL_EXTERN is normally used to declare a symbol with possible extra + * attributes to handle its presence in a shared library. + * OPENSSL_EXPORT is used to define a symbol with extra possible attributes + * to make it visible in a shared library. + * Care needs to be taken when a header file is used both to declare and + * define symbols. Basically, for any library that exports some global + * variables, the following code must be present in the header file that + * declares them, before OPENSSL_EXTERN is used: + * + * #ifdef SOME_BUILD_FLAG_MACRO + * # undef OPENSSL_EXTERN + * # define OPENSSL_EXTERN OPENSSL_EXPORT + * #endif + * + * The default is to have OPENSSL_EXPORT and OPENSSL_EXTERN + * have some generally sensible values. + */ + +# if defined(OPENSSL_SYS_WINDOWS) && defined(OPENSSL_OPT_WINDLL) +# define OPENSSL_EXPORT extern __declspec(dllexport) +# define OPENSSL_EXTERN extern __declspec(dllimport) +# else +# define OPENSSL_EXPORT extern +# define OPENSSL_EXTERN extern +# endif + +/*- + * Macros to allow global variables to be reached through function calls when + * required (if a shared library version requires it, for example. + * The way it's done allows definitions like this: + * + * // in foobar.c + * OPENSSL_IMPLEMENT_GLOBAL(int,foobar,0) + * // in foobar.h + * OPENSSL_DECLARE_GLOBAL(int,foobar); + * #define foobar OPENSSL_GLOBAL_REF(foobar) + */ +# ifdef OPENSSL_EXPORT_VAR_AS_FUNCTION +# define OPENSSL_IMPLEMENT_GLOBAL(type,name,value) \ + type *_shadow_##name(void) \ + { static type _hide_##name=value; return &_hide_##name; } +# define OPENSSL_DECLARE_GLOBAL(type,name) type *_shadow_##name(void) +# define OPENSSL_GLOBAL_REF(name) (*(_shadow_##name())) +# else +# define OPENSSL_IMPLEMENT_GLOBAL(type,name,value) type _shadow_##name=value; +# define OPENSSL_DECLARE_GLOBAL(type,name) OPENSSL_EXPORT type _shadow_##name +# define OPENSSL_GLOBAL_REF(name) _shadow_##name +# endif + +# ifdef _WIN32 +# ifdef _WIN64 +# define ossl_ssize_t __int64 +# define OSSL_SSIZE_MAX _I64_MAX +# else +# define ossl_ssize_t int +# define OSSL_SSIZE_MAX INT_MAX +# endif +# endif + +# if defined(OPENSSL_SYS_UEFI) && !defined(ossl_ssize_t) +# define ossl_ssize_t INTN +# define OSSL_SSIZE_MAX MAX_INTN +# endif + +# ifndef ossl_ssize_t +# define ossl_ssize_t ssize_t +# if defined(SSIZE_MAX) +# define OSSL_SSIZE_MAX SSIZE_MAX +# elif defined(_POSIX_SSIZE_MAX) +# define OSSL_SSIZE_MAX _POSIX_SSIZE_MAX +# else +# define OSSL_SSIZE_MAX ((ssize_t)(SIZE_MAX>>1)) +# endif +# endif + +# ifdef DEBUG_UNUSED +# define __owur __attribute__((__warn_unused_result__)) +# else +# define __owur +# endif + +/* Standard integer types */ +# if defined(OPENSSL_SYS_UEFI) +typedef INT8 int8_t; +typedef UINT8 uint8_t; +typedef INT16 int16_t; +typedef UINT16 uint16_t; +typedef INT32 int32_t; +typedef UINT32 uint32_t; +typedef INT64 int64_t; +typedef UINT64 uint64_t; +# elif (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || \ + defined(__osf__) || defined(__sgi) || defined(__hpux) || \ + defined(OPENSSL_SYS_VMS) || defined (__OpenBSD__) +# include +# elif defined(_MSC_VER) && _MSC_VER<=1500 +/* + * minimally required typdefs for systems not supporting inttypes.h or + * stdint.h: currently just older VC++ + */ +typedef signed char int8_t; +typedef unsigned char uint8_t; +typedef short int16_t; +typedef unsigned short uint16_t; +typedef int int32_t; +typedef unsigned int uint32_t; +typedef __int64 int64_t; +typedef unsigned __int64 uint64_t; +# else +# include +# endif + +/* ossl_inline: portable inline definition usable in public headers */ +# if !defined(inline) && !defined(__cplusplus) +# if defined(__STDC_VERSION__) && __STDC_VERSION__>=199901L + /* just use inline */ +# define ossl_inline inline +# elif defined(__GNUC__) && __GNUC__>=2 +# define ossl_inline __inline__ +# elif defined(_MSC_VER) + /* + * Visual Studio: inline is available in C++ only, however + * __inline is available for C, see + * http://msdn.microsoft.com/en-us/library/z8y1yy88.aspx + */ +# define ossl_inline __inline +# else +# define ossl_inline +# endif +# else +# define ossl_inline inline +# endif + +# if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L +# define ossl_noreturn _Noreturn +# elif defined(__GNUC__) && __GNUC__ >= 2 +# define ossl_noreturn __attribute__((noreturn)) +# else +# define ossl_noreturn +# endif + +/* ossl_unused: portable unused attribute for use in public headers */ +# if defined(__GNUC__) +# define ossl_unused __attribute__((unused)) +# else +# define ossl_unused +# endif + +#ifdef __cplusplus +} +#endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ebcdic.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ebcdic.h new file mode 100644 index 00000000..aa012855 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ebcdic.h @@ -0,0 +1,33 @@ +/* + * Copyright 1999-2016 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_EBCDIC_H +# define HEADER_EBCDIC_H + +# include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Avoid name clashes with other applications */ +# define os_toascii _openssl_os_toascii +# define os_toebcdic _openssl_os_toebcdic +# define ebcdic2ascii _openssl_ebcdic2ascii +# define ascii2ebcdic _openssl_ascii2ebcdic + +extern const unsigned char os_toascii[256]; +extern const unsigned char os_toebcdic[256]; +void *ebcdic2ascii(void *dest, const void *srce, size_t count); +void *ascii2ebcdic(void *dest, const void *srce, size_t count); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ec.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ec.h new file mode 100644 index 00000000..5af9ebdc --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ec.h @@ -0,0 +1,1479 @@ +/* + * Copyright 2002-2019 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 + * 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 + */ + +#ifndef HEADER_EC_H +# define HEADER_EC_H + +# include + +# ifndef OPENSSL_NO_EC +# include +# include +# if OPENSSL_API_COMPAT < 0x10100000L +# include +# endif +# include +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_ECC_MAX_FIELD_BITS +# define OPENSSL_ECC_MAX_FIELD_BITS 661 +# endif + +/** Enum for the point conversion form as defined in X9.62 (ECDSA) + * for the encoding of a elliptic curve point (x,y) */ +typedef enum { + /** the point is encoded as z||x, where the octet z specifies + * which solution of the quadratic equation y is */ + POINT_CONVERSION_COMPRESSED = 2, + /** the point is encoded as z||x||y, where z is the octet 0x04 */ + POINT_CONVERSION_UNCOMPRESSED = 4, + /** the point is encoded as z||x||y, where the octet z specifies + * which solution of the quadratic equation y is */ + POINT_CONVERSION_HYBRID = 6 +} point_conversion_form_t; + +typedef struct ec_method_st EC_METHOD; +typedef struct ec_group_st EC_GROUP; +typedef struct ec_point_st EC_POINT; +typedef struct ecpk_parameters_st ECPKPARAMETERS; +typedef struct ec_parameters_st ECPARAMETERS; + +/********************************************************************/ +/* EC_METHODs for curves over GF(p) */ +/********************************************************************/ + +/** Returns the basic GFp ec methods which provides the basis for the + * optimized methods. + * \return EC_METHOD object + */ +const EC_METHOD *EC_GFp_simple_method(void); + +/** Returns GFp methods using montgomery multiplication. + * \return EC_METHOD object + */ +const EC_METHOD *EC_GFp_mont_method(void); + +/** Returns GFp methods using optimized methods for NIST recommended curves + * \return EC_METHOD object + */ +const EC_METHOD *EC_GFp_nist_method(void); + +# ifndef OPENSSL_NO_EC_NISTP_64_GCC_128 +/** Returns 64-bit optimized methods for nistp224 + * \return EC_METHOD object + */ +const EC_METHOD *EC_GFp_nistp224_method(void); + +/** Returns 64-bit optimized methods for nistp256 + * \return EC_METHOD object + */ +const EC_METHOD *EC_GFp_nistp256_method(void); + +/** Returns 64-bit optimized methods for nistp521 + * \return EC_METHOD object + */ +const EC_METHOD *EC_GFp_nistp521_method(void); +# endif + +# ifndef OPENSSL_NO_EC2M +/********************************************************************/ +/* EC_METHOD for curves over GF(2^m) */ +/********************************************************************/ + +/** Returns the basic GF2m ec method + * \return EC_METHOD object + */ +const EC_METHOD *EC_GF2m_simple_method(void); + +# endif + +/********************************************************************/ +/* EC_GROUP functions */ +/********************************************************************/ + +/** Creates a new EC_GROUP object + * \param meth EC_METHOD to use + * \return newly created EC_GROUP object or NULL in case of an error. + */ +EC_GROUP *EC_GROUP_new(const EC_METHOD *meth); + +/** Frees a EC_GROUP object + * \param group EC_GROUP object to be freed. + */ +void EC_GROUP_free(EC_GROUP *group); + +/** Clears and frees a EC_GROUP object + * \param group EC_GROUP object to be cleared and freed. + */ +void EC_GROUP_clear_free(EC_GROUP *group); + +/** Copies EC_GROUP objects. Note: both EC_GROUPs must use the same EC_METHOD. + * \param dst destination EC_GROUP object + * \param src source EC_GROUP object + * \return 1 on success and 0 if an error occurred. + */ +int EC_GROUP_copy(EC_GROUP *dst, const EC_GROUP *src); + +/** Creates a new EC_GROUP object and copies the copies the content + * form src to the newly created EC_KEY object + * \param src source EC_GROUP object + * \return newly created EC_GROUP object or NULL in case of an error. + */ +EC_GROUP *EC_GROUP_dup(const EC_GROUP *src); + +/** Returns the EC_METHOD of the EC_GROUP object. + * \param group EC_GROUP object + * \return EC_METHOD used in this EC_GROUP object. + */ +const EC_METHOD *EC_GROUP_method_of(const EC_GROUP *group); + +/** Returns the field type of the EC_METHOD. + * \param meth EC_METHOD object + * \return NID of the underlying field type OID. + */ +int EC_METHOD_get_field_type(const EC_METHOD *meth); + +/** Sets the generator and its order/cofactor of a EC_GROUP object. + * \param group EC_GROUP object + * \param generator EC_POINT object with the generator. + * \param order the order of the group generated by the generator. + * \param cofactor the index of the sub-group generated by the generator + * in the group of all points on the elliptic curve. + * \return 1 on success and 0 if an error occurred + */ +int EC_GROUP_set_generator(EC_GROUP *group, const EC_POINT *generator, + const BIGNUM *order, const BIGNUM *cofactor); + +/** Returns the generator of a EC_GROUP object. + * \param group EC_GROUP object + * \return the currently used generator (possibly NULL). + */ +const EC_POINT *EC_GROUP_get0_generator(const EC_GROUP *group); + +/** Returns the montgomery data for order(Generator) + * \param group EC_GROUP object + * \return the currently used montgomery data (possibly NULL). +*/ +BN_MONT_CTX *EC_GROUP_get_mont_data(const EC_GROUP *group); + +/** Gets the order of a EC_GROUP + * \param group EC_GROUP object + * \param order BIGNUM to which the order is copied + * \param ctx unused + * \return 1 on success and 0 if an error occurred + */ +int EC_GROUP_get_order(const EC_GROUP *group, BIGNUM *order, BN_CTX *ctx); + +/** Gets the order of an EC_GROUP + * \param group EC_GROUP object + * \return the group order + */ +const BIGNUM *EC_GROUP_get0_order(const EC_GROUP *group); + +/** Gets the number of bits of the order of an EC_GROUP + * \param group EC_GROUP object + * \return number of bits of group order. + */ +int EC_GROUP_order_bits(const EC_GROUP *group); + +/** Gets the cofactor of a EC_GROUP + * \param group EC_GROUP object + * \param cofactor BIGNUM to which the cofactor is copied + * \param ctx unused + * \return 1 on success and 0 if an error occurred + */ +int EC_GROUP_get_cofactor(const EC_GROUP *group, BIGNUM *cofactor, + BN_CTX *ctx); + +/** Gets the cofactor of an EC_GROUP + * \param group EC_GROUP object + * \return the group cofactor + */ +const BIGNUM *EC_GROUP_get0_cofactor(const EC_GROUP *group); + +/** Sets the name of a EC_GROUP object + * \param group EC_GROUP object + * \param nid NID of the curve name OID + */ +void EC_GROUP_set_curve_name(EC_GROUP *group, int nid); + +/** Returns the curve name of a EC_GROUP object + * \param group EC_GROUP object + * \return NID of the curve name OID or 0 if not set. + */ +int EC_GROUP_get_curve_name(const EC_GROUP *group); + +void EC_GROUP_set_asn1_flag(EC_GROUP *group, int flag); +int EC_GROUP_get_asn1_flag(const EC_GROUP *group); + +void EC_GROUP_set_point_conversion_form(EC_GROUP *group, + point_conversion_form_t form); +point_conversion_form_t EC_GROUP_get_point_conversion_form(const EC_GROUP *); + +unsigned char *EC_GROUP_get0_seed(const EC_GROUP *x); +size_t EC_GROUP_get_seed_len(const EC_GROUP *); +size_t EC_GROUP_set_seed(EC_GROUP *, const unsigned char *, size_t len); + +/** Sets the parameters of a ec curve defined by y^2 = x^3 + a*x + b (for GFp) + * or y^2 + x*y = x^3 + a*x^2 + b (for GF2m) + * \param group EC_GROUP object + * \param p BIGNUM with the prime number (GFp) or the polynomial + * defining the underlying field (GF2m) + * \param a BIGNUM with parameter a of the equation + * \param b BIGNUM with parameter b of the equation + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occurred + */ +int EC_GROUP_set_curve(EC_GROUP *group, const BIGNUM *p, const BIGNUM *a, + const BIGNUM *b, BN_CTX *ctx); + +/** Gets the parameters of the ec curve defined by y^2 = x^3 + a*x + b (for GFp) + * or y^2 + x*y = x^3 + a*x^2 + b (for GF2m) + * \param group EC_GROUP object + * \param p BIGNUM with the prime number (GFp) or the polynomial + * defining the underlying field (GF2m) + * \param a BIGNUM for parameter a of the equation + * \param b BIGNUM for parameter b of the equation + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occurred + */ +int EC_GROUP_get_curve(const EC_GROUP *group, BIGNUM *p, BIGNUM *a, BIGNUM *b, + BN_CTX *ctx); + +/** Sets the parameters of an ec curve. Synonym for EC_GROUP_set_curve + * \param group EC_GROUP object + * \param p BIGNUM with the prime number (GFp) or the polynomial + * defining the underlying field (GF2m) + * \param a BIGNUM with parameter a of the equation + * \param b BIGNUM with parameter b of the equation + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occurred + */ +DEPRECATEDIN_1_2_0(int EC_GROUP_set_curve_GFp(EC_GROUP *group, const BIGNUM *p, + const BIGNUM *a, const BIGNUM *b, + BN_CTX *ctx)) + +/** Gets the parameters of an ec curve. Synonym for EC_GROUP_get_curve + * \param group EC_GROUP object + * \param p BIGNUM with the prime number (GFp) or the polynomial + * defining the underlying field (GF2m) + * \param a BIGNUM for parameter a of the equation + * \param b BIGNUM for parameter b of the equation + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occurred + */ +DEPRECATEDIN_1_2_0(int EC_GROUP_get_curve_GFp(const EC_GROUP *group, BIGNUM *p, + BIGNUM *a, BIGNUM *b, + BN_CTX *ctx)) + +# ifndef OPENSSL_NO_EC2M +/** Sets the parameter of an ec curve. Synonym for EC_GROUP_set_curve + * \param group EC_GROUP object + * \param p BIGNUM with the prime number (GFp) or the polynomial + * defining the underlying field (GF2m) + * \param a BIGNUM with parameter a of the equation + * \param b BIGNUM with parameter b of the equation + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occurred + */ +DEPRECATEDIN_1_2_0(int EC_GROUP_set_curve_GF2m(EC_GROUP *group, const BIGNUM *p, + const BIGNUM *a, const BIGNUM *b, + BN_CTX *ctx)) + +/** Gets the parameters of an ec curve. Synonym for EC_GROUP_get_curve + * \param group EC_GROUP object + * \param p BIGNUM with the prime number (GFp) or the polynomial + * defining the underlying field (GF2m) + * \param a BIGNUM for parameter a of the equation + * \param b BIGNUM for parameter b of the equation + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occurred + */ +DEPRECATEDIN_1_2_0(int EC_GROUP_get_curve_GF2m(const EC_GROUP *group, BIGNUM *p, + BIGNUM *a, BIGNUM *b, + BN_CTX *ctx)) +# endif +/** Returns the number of bits needed to represent a field element + * \param group EC_GROUP object + * \return number of bits needed to represent a field element + */ +int EC_GROUP_get_degree(const EC_GROUP *group); + +/** Checks whether the parameter in the EC_GROUP define a valid ec group + * \param group EC_GROUP object + * \param ctx BN_CTX object (optional) + * \return 1 if group is a valid ec group and 0 otherwise + */ +int EC_GROUP_check(const EC_GROUP *group, BN_CTX *ctx); + +/** Checks whether the discriminant of the elliptic curve is zero or not + * \param group EC_GROUP object + * \param ctx BN_CTX object (optional) + * \return 1 if the discriminant is not zero and 0 otherwise + */ +int EC_GROUP_check_discriminant(const EC_GROUP *group, BN_CTX *ctx); + +/** Compares two EC_GROUP objects + * \param a first EC_GROUP object + * \param b second EC_GROUP object + * \param ctx BN_CTX object (optional) + * \return 0 if the groups are equal, 1 if not, or -1 on error + */ +int EC_GROUP_cmp(const EC_GROUP *a, const EC_GROUP *b, BN_CTX *ctx); + +/* + * EC_GROUP_new_GF*() calls EC_GROUP_new() and EC_GROUP_set_GF*() after + * choosing an appropriate EC_METHOD + */ + +/** Creates a new EC_GROUP object with the specified parameters defined + * over GFp (defined by the equation y^2 = x^3 + a*x + b) + * \param p BIGNUM with the prime number + * \param a BIGNUM with the parameter a of the equation + * \param b BIGNUM with the parameter b of the equation + * \param ctx BN_CTX object (optional) + * \return newly created EC_GROUP object with the specified parameters + */ +EC_GROUP *EC_GROUP_new_curve_GFp(const BIGNUM *p, const BIGNUM *a, + const BIGNUM *b, BN_CTX *ctx); +# ifndef OPENSSL_NO_EC2M +/** Creates a new EC_GROUP object with the specified parameters defined + * over GF2m (defined by the equation y^2 + x*y = x^3 + a*x^2 + b) + * \param p BIGNUM with the polynomial defining the underlying field + * \param a BIGNUM with the parameter a of the equation + * \param b BIGNUM with the parameter b of the equation + * \param ctx BN_CTX object (optional) + * \return newly created EC_GROUP object with the specified parameters + */ +EC_GROUP *EC_GROUP_new_curve_GF2m(const BIGNUM *p, const BIGNUM *a, + const BIGNUM *b, BN_CTX *ctx); +# endif + +/** Creates a EC_GROUP object with a curve specified by a NID + * \param nid NID of the OID of the curve name + * \return newly created EC_GROUP object with specified curve or NULL + * if an error occurred + */ +EC_GROUP *EC_GROUP_new_by_curve_name(int nid); + +/** Creates a new EC_GROUP object from an ECPARAMETERS object + * \param params pointer to the ECPARAMETERS object + * \return newly created EC_GROUP object with specified curve or NULL + * if an error occurred + */ +EC_GROUP *EC_GROUP_new_from_ecparameters(const ECPARAMETERS *params); + +/** Creates an ECPARAMETERS object for the given EC_GROUP object. + * \param group pointer to the EC_GROUP object + * \param params pointer to an existing ECPARAMETERS object or NULL + * \return pointer to the new ECPARAMETERS object or NULL + * if an error occurred. + */ +ECPARAMETERS *EC_GROUP_get_ecparameters(const EC_GROUP *group, + ECPARAMETERS *params); + +/** Creates a new EC_GROUP object from an ECPKPARAMETERS object + * \param params pointer to an existing ECPKPARAMETERS object, or NULL + * \return newly created EC_GROUP object with specified curve, or NULL + * if an error occurred + */ +EC_GROUP *EC_GROUP_new_from_ecpkparameters(const ECPKPARAMETERS *params); + +/** Creates an ECPKPARAMETERS object for the given EC_GROUP object. + * \param group pointer to the EC_GROUP object + * \param params pointer to an existing ECPKPARAMETERS object or NULL + * \return pointer to the new ECPKPARAMETERS object or NULL + * if an error occurred. + */ +ECPKPARAMETERS *EC_GROUP_get_ecpkparameters(const EC_GROUP *group, + ECPKPARAMETERS *params); + +/********************************************************************/ +/* handling of internal curves */ +/********************************************************************/ + +typedef struct { + int nid; + const char *comment; +} EC_builtin_curve; + +/* + * EC_builtin_curves(EC_builtin_curve *r, size_t size) returns number of all + * available curves or zero if a error occurred. In case r is not zero, + * nitems EC_builtin_curve structures are filled with the data of the first + * nitems internal groups + */ +size_t EC_get_builtin_curves(EC_builtin_curve *r, size_t nitems); + +const char *EC_curve_nid2nist(int nid); +int EC_curve_nist2nid(const char *name); + +/********************************************************************/ +/* EC_POINT functions */ +/********************************************************************/ + +/** Creates a new EC_POINT object for the specified EC_GROUP + * \param group EC_GROUP the underlying EC_GROUP object + * \return newly created EC_POINT object or NULL if an error occurred + */ +EC_POINT *EC_POINT_new(const EC_GROUP *group); + +/** Frees a EC_POINT object + * \param point EC_POINT object to be freed + */ +void EC_POINT_free(EC_POINT *point); + +/** Clears and frees a EC_POINT object + * \param point EC_POINT object to be cleared and freed + */ +void EC_POINT_clear_free(EC_POINT *point); + +/** Copies EC_POINT object + * \param dst destination EC_POINT object + * \param src source EC_POINT object + * \return 1 on success and 0 if an error occurred + */ +int EC_POINT_copy(EC_POINT *dst, const EC_POINT *src); + +/** Creates a new EC_POINT object and copies the content of the supplied + * EC_POINT + * \param src source EC_POINT object + * \param group underlying the EC_GROUP object + * \return newly created EC_POINT object or NULL if an error occurred + */ +EC_POINT *EC_POINT_dup(const EC_POINT *src, const EC_GROUP *group); + +/** Returns the EC_METHOD used in EC_POINT object + * \param point EC_POINT object + * \return the EC_METHOD used + */ +const EC_METHOD *EC_POINT_method_of(const EC_POINT *point); + +/** Sets a point to infinity (neutral element) + * \param group underlying EC_GROUP object + * \param point EC_POINT to set to infinity + * \return 1 on success and 0 if an error occurred + */ +int EC_POINT_set_to_infinity(const EC_GROUP *group, EC_POINT *point); + +/** Sets the jacobian projective coordinates of a EC_POINT over GFp + * \param group underlying EC_GROUP object + * \param p EC_POINT object + * \param x BIGNUM with the x-coordinate + * \param y BIGNUM with the y-coordinate + * \param z BIGNUM with the z-coordinate + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occurred + */ +int EC_POINT_set_Jprojective_coordinates_GFp(const EC_GROUP *group, + EC_POINT *p, const BIGNUM *x, + const BIGNUM *y, const BIGNUM *z, + BN_CTX *ctx); + +/** Gets the jacobian projective coordinates of a EC_POINT over GFp + * \param group underlying EC_GROUP object + * \param p EC_POINT object + * \param x BIGNUM for the x-coordinate + * \param y BIGNUM for the y-coordinate + * \param z BIGNUM for the z-coordinate + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occurred + */ +int EC_POINT_get_Jprojective_coordinates_GFp(const EC_GROUP *group, + const EC_POINT *p, BIGNUM *x, + BIGNUM *y, BIGNUM *z, + BN_CTX *ctx); + +/** Sets the affine coordinates of an EC_POINT + * \param group underlying EC_GROUP object + * \param p EC_POINT object + * \param x BIGNUM with the x-coordinate + * \param y BIGNUM with the y-coordinate + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occurred + */ +int EC_POINT_set_affine_coordinates(const EC_GROUP *group, EC_POINT *p, + const BIGNUM *x, const BIGNUM *y, + BN_CTX *ctx); + +/** Gets the affine coordinates of an EC_POINT. + * \param group underlying EC_GROUP object + * \param p EC_POINT object + * \param x BIGNUM for the x-coordinate + * \param y BIGNUM for the y-coordinate + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occurred + */ +int EC_POINT_get_affine_coordinates(const EC_GROUP *group, const EC_POINT *p, + BIGNUM *x, BIGNUM *y, BN_CTX *ctx); + +/** Sets the affine coordinates of an EC_POINT. A synonym of + * EC_POINT_set_affine_coordinates + * \param group underlying EC_GROUP object + * \param p EC_POINT object + * \param x BIGNUM with the x-coordinate + * \param y BIGNUM with the y-coordinate + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occurred + */ +DEPRECATEDIN_1_2_0(int EC_POINT_set_affine_coordinates_GFp(const EC_GROUP *group, + EC_POINT *p, + const BIGNUM *x, + const BIGNUM *y, + BN_CTX *ctx)) + +/** Gets the affine coordinates of an EC_POINT. A synonym of + * EC_POINT_get_affine_coordinates + * \param group underlying EC_GROUP object + * \param p EC_POINT object + * \param x BIGNUM for the x-coordinate + * \param y BIGNUM for the y-coordinate + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occurred + */ +DEPRECATEDIN_1_2_0(int EC_POINT_get_affine_coordinates_GFp(const EC_GROUP *group, + const EC_POINT *p, + BIGNUM *x, + BIGNUM *y, + BN_CTX *ctx)) + +/** Sets the x9.62 compressed coordinates of a EC_POINT + * \param group underlying EC_GROUP object + * \param p EC_POINT object + * \param x BIGNUM with x-coordinate + * \param y_bit integer with the y-Bit (either 0 or 1) + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occurred + */ +int EC_POINT_set_compressed_coordinates(const EC_GROUP *group, EC_POINT *p, + const BIGNUM *x, int y_bit, + BN_CTX *ctx); + +/** Sets the x9.62 compressed coordinates of a EC_POINT. A synonym of + * EC_POINT_set_compressed_coordinates + * \param group underlying EC_GROUP object + * \param p EC_POINT object + * \param x BIGNUM with x-coordinate + * \param y_bit integer with the y-Bit (either 0 or 1) + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occurred + */ +DEPRECATEDIN_1_2_0(int EC_POINT_set_compressed_coordinates_GFp(const EC_GROUP *group, + EC_POINT *p, + const BIGNUM *x, + int y_bit, + BN_CTX *ctx)) +# ifndef OPENSSL_NO_EC2M +/** Sets the affine coordinates of an EC_POINT. A synonym of + * EC_POINT_set_affine_coordinates + * \param group underlying EC_GROUP object + * \param p EC_POINT object + * \param x BIGNUM with the x-coordinate + * \param y BIGNUM with the y-coordinate + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occurred + */ +DEPRECATEDIN_1_2_0(int EC_POINT_set_affine_coordinates_GF2m(const EC_GROUP *group, + EC_POINT *p, + const BIGNUM *x, + const BIGNUM *y, + BN_CTX *ctx)) + +/** Gets the affine coordinates of an EC_POINT. A synonym of + * EC_POINT_get_affine_coordinates + * \param group underlying EC_GROUP object + * \param p EC_POINT object + * \param x BIGNUM for the x-coordinate + * \param y BIGNUM for the y-coordinate + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occurred + */ +DEPRECATEDIN_1_2_0(int EC_POINT_get_affine_coordinates_GF2m(const EC_GROUP *group, + const EC_POINT *p, + BIGNUM *x, + BIGNUM *y, + BN_CTX *ctx)) + +/** Sets the x9.62 compressed coordinates of a EC_POINT. A synonym of + * EC_POINT_set_compressed_coordinates + * \param group underlying EC_GROUP object + * \param p EC_POINT object + * \param x BIGNUM with x-coordinate + * \param y_bit integer with the y-Bit (either 0 or 1) + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occurred + */ +DEPRECATEDIN_1_2_0(int EC_POINT_set_compressed_coordinates_GF2m(const EC_GROUP *group, + EC_POINT *p, + const BIGNUM *x, + int y_bit, + BN_CTX *ctx)) +# endif +/** Encodes a EC_POINT object to a octet string + * \param group underlying EC_GROUP object + * \param p EC_POINT object + * \param form point conversion form + * \param buf memory buffer for the result. If NULL the function returns + * required buffer size. + * \param len length of the memory buffer + * \param ctx BN_CTX object (optional) + * \return the length of the encoded octet string or 0 if an error occurred + */ +size_t EC_POINT_point2oct(const EC_GROUP *group, const EC_POINT *p, + point_conversion_form_t form, + unsigned char *buf, size_t len, BN_CTX *ctx); + +/** Decodes a EC_POINT from a octet string + * \param group underlying EC_GROUP object + * \param p EC_POINT object + * \param buf memory buffer with the encoded ec point + * \param len length of the encoded ec point + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occurred + */ +int EC_POINT_oct2point(const EC_GROUP *group, EC_POINT *p, + const unsigned char *buf, size_t len, BN_CTX *ctx); + +/** Encodes an EC_POINT object to an allocated octet string + * \param group underlying EC_GROUP object + * \param point EC_POINT object + * \param form point conversion form + * \param pbuf returns pointer to allocated buffer + * \param ctx BN_CTX object (optional) + * \return the length of the encoded octet string or 0 if an error occurred + */ +size_t EC_POINT_point2buf(const EC_GROUP *group, const EC_POINT *point, + point_conversion_form_t form, + unsigned char **pbuf, BN_CTX *ctx); + +/* other interfaces to point2oct/oct2point: */ +BIGNUM *EC_POINT_point2bn(const EC_GROUP *, const EC_POINT *, + point_conversion_form_t form, BIGNUM *, BN_CTX *); +EC_POINT *EC_POINT_bn2point(const EC_GROUP *, const BIGNUM *, + EC_POINT *, BN_CTX *); +char *EC_POINT_point2hex(const EC_GROUP *, const EC_POINT *, + point_conversion_form_t form, BN_CTX *); +EC_POINT *EC_POINT_hex2point(const EC_GROUP *, const char *, + EC_POINT *, BN_CTX *); + +/********************************************************************/ +/* functions for doing EC_POINT arithmetic */ +/********************************************************************/ + +/** Computes the sum of two EC_POINT + * \param group underlying EC_GROUP object + * \param r EC_POINT object for the result (r = a + b) + * \param a EC_POINT object with the first summand + * \param b EC_POINT object with the second summand + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occurred + */ +int EC_POINT_add(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a, + const EC_POINT *b, BN_CTX *ctx); + +/** Computes the double of a EC_POINT + * \param group underlying EC_GROUP object + * \param r EC_POINT object for the result (r = 2 * a) + * \param a EC_POINT object + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occurred + */ +int EC_POINT_dbl(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a, + BN_CTX *ctx); + +/** Computes the inverse of a EC_POINT + * \param group underlying EC_GROUP object + * \param a EC_POINT object to be inverted (it's used for the result as well) + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occurred + */ +int EC_POINT_invert(const EC_GROUP *group, EC_POINT *a, BN_CTX *ctx); + +/** Checks whether the point is the neutral element of the group + * \param group the underlying EC_GROUP object + * \param p EC_POINT object + * \return 1 if the point is the neutral element and 0 otherwise + */ +int EC_POINT_is_at_infinity(const EC_GROUP *group, const EC_POINT *p); + +/** Checks whether the point is on the curve + * \param group underlying EC_GROUP object + * \param point EC_POINT object to check + * \param ctx BN_CTX object (optional) + * \return 1 if the point is on the curve, 0 if not, or -1 on error + */ +int EC_POINT_is_on_curve(const EC_GROUP *group, const EC_POINT *point, + BN_CTX *ctx); + +/** Compares two EC_POINTs + * \param group underlying EC_GROUP object + * \param a first EC_POINT object + * \param b second EC_POINT object + * \param ctx BN_CTX object (optional) + * \return 1 if the points are not equal, 0 if they are, or -1 on error + */ +int EC_POINT_cmp(const EC_GROUP *group, const EC_POINT *a, const EC_POINT *b, + BN_CTX *ctx); + +int EC_POINT_make_affine(const EC_GROUP *group, EC_POINT *point, BN_CTX *ctx); +int EC_POINTs_make_affine(const EC_GROUP *group, size_t num, + EC_POINT *points[], BN_CTX *ctx); + +/** Computes r = generator * n + sum_{i=0}^{num-1} p[i] * m[i] + * \param group underlying EC_GROUP object + * \param r EC_POINT object for the result + * \param n BIGNUM with the multiplier for the group generator (optional) + * \param num number further summands + * \param p array of size num of EC_POINT objects + * \param m array of size num of BIGNUM objects + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occurred + */ +int EC_POINTs_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, + size_t num, const EC_POINT *p[], const BIGNUM *m[], + BN_CTX *ctx); + +/** Computes r = generator * n + q * m + * \param group underlying EC_GROUP object + * \param r EC_POINT object for the result + * \param n BIGNUM with the multiplier for the group generator (optional) + * \param q EC_POINT object with the first factor of the second summand + * \param m BIGNUM with the second factor of the second summand + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occurred + */ +int EC_POINT_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, + const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx); + +/** Stores multiples of generator for faster point multiplication + * \param group EC_GROUP object + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occurred + */ +int EC_GROUP_precompute_mult(EC_GROUP *group, BN_CTX *ctx); + +/** Reports whether a precomputation has been done + * \param group EC_GROUP object + * \return 1 if a pre-computation has been done and 0 otherwise + */ +int EC_GROUP_have_precompute_mult(const EC_GROUP *group); + +/********************************************************************/ +/* ASN1 stuff */ +/********************************************************************/ + +DECLARE_ASN1_ITEM(ECPKPARAMETERS) +DECLARE_ASN1_ALLOC_FUNCTIONS(ECPKPARAMETERS) +DECLARE_ASN1_ITEM(ECPARAMETERS) +DECLARE_ASN1_ALLOC_FUNCTIONS(ECPARAMETERS) + +/* + * EC_GROUP_get_basis_type() returns the NID of the basis type used to + * represent the field elements + */ +int EC_GROUP_get_basis_type(const EC_GROUP *); +# ifndef OPENSSL_NO_EC2M +int EC_GROUP_get_trinomial_basis(const EC_GROUP *, unsigned int *k); +int EC_GROUP_get_pentanomial_basis(const EC_GROUP *, unsigned int *k1, + unsigned int *k2, unsigned int *k3); +# endif + +# define OPENSSL_EC_EXPLICIT_CURVE 0x000 +# define OPENSSL_EC_NAMED_CURVE 0x001 + +EC_GROUP *d2i_ECPKParameters(EC_GROUP **, const unsigned char **in, long len); +int i2d_ECPKParameters(const EC_GROUP *, unsigned char **out); + +# define d2i_ECPKParameters_bio(bp,x) ASN1_d2i_bio_of(EC_GROUP,NULL,d2i_ECPKParameters,bp,x) +# define i2d_ECPKParameters_bio(bp,x) ASN1_i2d_bio_of_const(EC_GROUP,i2d_ECPKParameters,bp,x) +# define d2i_ECPKParameters_fp(fp,x) (EC_GROUP *)ASN1_d2i_fp(NULL, \ + (char *(*)())d2i_ECPKParameters,(fp),(unsigned char **)(x)) +# define i2d_ECPKParameters_fp(fp,x) ASN1_i2d_fp(i2d_ECPKParameters,(fp), \ + (unsigned char *)(x)) + +int ECPKParameters_print(BIO *bp, const EC_GROUP *x, int off); +# ifndef OPENSSL_NO_STDIO +int ECPKParameters_print_fp(FILE *fp, const EC_GROUP *x, int off); +# endif + +/********************************************************************/ +/* EC_KEY functions */ +/********************************************************************/ + +/* some values for the encoding_flag */ +# define EC_PKEY_NO_PARAMETERS 0x001 +# define EC_PKEY_NO_PUBKEY 0x002 + +/* some values for the flags field */ +# define EC_FLAG_NON_FIPS_ALLOW 0x1 +# define EC_FLAG_FIPS_CHECKED 0x2 +# define EC_FLAG_COFACTOR_ECDH 0x1000 + +/** Creates a new EC_KEY object. + * \return EC_KEY object or NULL if an error occurred. + */ +EC_KEY *EC_KEY_new(void); + +int EC_KEY_get_flags(const EC_KEY *key); + +void EC_KEY_set_flags(EC_KEY *key, int flags); + +void EC_KEY_clear_flags(EC_KEY *key, int flags); + +/** Creates a new EC_KEY object using a named curve as underlying + * EC_GROUP object. + * \param nid NID of the named curve. + * \return EC_KEY object or NULL if an error occurred. + */ +EC_KEY *EC_KEY_new_by_curve_name(int nid); + +/** Frees a EC_KEY object. + * \param key EC_KEY object to be freed. + */ +void EC_KEY_free(EC_KEY *key); + +/** Copies a EC_KEY object. + * \param dst destination EC_KEY object + * \param src src EC_KEY object + * \return dst or NULL if an error occurred. + */ +EC_KEY *EC_KEY_copy(EC_KEY *dst, const EC_KEY *src); + +/** Creates a new EC_KEY object and copies the content from src to it. + * \param src the source EC_KEY object + * \return newly created EC_KEY object or NULL if an error occurred. + */ +EC_KEY *EC_KEY_dup(const EC_KEY *src); + +/** Increases the internal reference count of a EC_KEY object. + * \param key EC_KEY object + * \return 1 on success and 0 if an error occurred. + */ +int EC_KEY_up_ref(EC_KEY *key); + +/** Returns the ENGINE object of a EC_KEY object + * \param eckey EC_KEY object + * \return the ENGINE object (possibly NULL). + */ +ENGINE *EC_KEY_get0_engine(const EC_KEY *eckey); + +/** Returns the EC_GROUP object of a EC_KEY object + * \param key EC_KEY object + * \return the EC_GROUP object (possibly NULL). + */ +const EC_GROUP *EC_KEY_get0_group(const EC_KEY *key); + +/** Sets the EC_GROUP of a EC_KEY object. + * \param key EC_KEY object + * \param group EC_GROUP to use in the EC_KEY object (note: the EC_KEY + * object will use an own copy of the EC_GROUP). + * \return 1 on success and 0 if an error occurred. + */ +int EC_KEY_set_group(EC_KEY *key, const EC_GROUP *group); + +/** Returns the private key of a EC_KEY object. + * \param key EC_KEY object + * \return a BIGNUM with the private key (possibly NULL). + */ +const BIGNUM *EC_KEY_get0_private_key(const EC_KEY *key); + +/** Sets the private key of a EC_KEY object. + * \param key EC_KEY object + * \param prv BIGNUM with the private key (note: the EC_KEY object + * will use an own copy of the BIGNUM). + * \return 1 on success and 0 if an error occurred. + */ +int EC_KEY_set_private_key(EC_KEY *key, const BIGNUM *prv); + +/** Returns the public key of a EC_KEY object. + * \param key the EC_KEY object + * \return a EC_POINT object with the public key (possibly NULL) + */ +const EC_POINT *EC_KEY_get0_public_key(const EC_KEY *key); + +/** Sets the public key of a EC_KEY object. + * \param key EC_KEY object + * \param pub EC_POINT object with the public key (note: the EC_KEY object + * will use an own copy of the EC_POINT object). + * \return 1 on success and 0 if an error occurred. + */ +int EC_KEY_set_public_key(EC_KEY *key, const EC_POINT *pub); + +unsigned EC_KEY_get_enc_flags(const EC_KEY *key); +void EC_KEY_set_enc_flags(EC_KEY *eckey, unsigned int flags); +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); + +#define EC_KEY_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_EC_KEY, l, p, newf, dupf, freef) +int EC_KEY_set_ex_data(EC_KEY *key, int idx, void *arg); +void *EC_KEY_get_ex_data(const EC_KEY *key, int idx); + +/* wrapper functions for the underlying EC_GROUP object */ +void EC_KEY_set_asn1_flag(EC_KEY *eckey, int asn1_flag); + +/** Creates a table of pre-computed multiples of the generator to + * accelerate further EC_KEY operations. + * \param key EC_KEY object + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occurred. + */ +int EC_KEY_precompute_mult(EC_KEY *key, BN_CTX *ctx); + +/** Creates a new ec private (and optional a new public) key. + * \param key EC_KEY object + * \return 1 on success and 0 if an error occurred. + */ +int EC_KEY_generate_key(EC_KEY *key); + +/** Verifies that a private and/or public key is valid. + * \param key the EC_KEY object + * \return 1 on success and 0 otherwise. + */ +int EC_KEY_check_key(const EC_KEY *key); + +/** Indicates if an EC_KEY can be used for signing. + * \param eckey the EC_KEY object + * \return 1 if can can sign and 0 otherwise. + */ +int EC_KEY_can_sign(const EC_KEY *eckey); + +/** Sets a public key from affine coordinates performing + * necessary NIST PKV tests. + * \param key the EC_KEY object + * \param x public key x coordinate + * \param y public key y coordinate + * \return 1 on success and 0 otherwise. + */ +int EC_KEY_set_public_key_affine_coordinates(EC_KEY *key, BIGNUM *x, + BIGNUM *y); + +/** Encodes an EC_KEY public key to an allocated octet string + * \param key key to encode + * \param form point conversion form + * \param pbuf returns pointer to allocated buffer + * \param ctx BN_CTX object (optional) + * \return the length of the encoded octet string or 0 if an error occurred + */ +size_t EC_KEY_key2buf(const EC_KEY *key, point_conversion_form_t form, + unsigned char **pbuf, BN_CTX *ctx); + +/** Decodes a EC_KEY public key from a octet string + * \param key key to decode + * \param buf memory buffer with the encoded ec point + * \param len length of the encoded ec point + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occurred + */ + +int EC_KEY_oct2key(EC_KEY *key, const unsigned char *buf, size_t len, + BN_CTX *ctx); + +/** Decodes an EC_KEY private key from an octet string + * \param key key to decode + * \param buf memory buffer with the encoded private key + * \param len length of the encoded key + * \return 1 on success and 0 if an error occurred + */ + +int EC_KEY_oct2priv(EC_KEY *key, const unsigned char *buf, size_t len); + +/** Encodes a EC_KEY private key to an octet string + * \param key key to encode + * \param buf memory buffer for the result. If NULL the function returns + * required buffer size. + * \param len length of the memory buffer + * \return the length of the encoded octet string or 0 if an error occurred + */ + +size_t EC_KEY_priv2oct(const EC_KEY *key, unsigned char *buf, size_t len); + +/** Encodes an EC_KEY private key to an allocated octet string + * \param eckey key to encode + * \param pbuf returns pointer to allocated buffer + * \return the length of the encoded octet string or 0 if an error occurred + */ +size_t EC_KEY_priv2buf(const EC_KEY *eckey, unsigned char **pbuf); + +/********************************************************************/ +/* de- and encoding functions for SEC1 ECPrivateKey */ +/********************************************************************/ + +/** Decodes a private key from a memory buffer. + * \param key a pointer to a EC_KEY object which should be used (or NULL) + * \param in pointer to memory with the DER encoded private key + * \param len length of the DER encoded private key + * \return the decoded private key or NULL if an error occurred. + */ +EC_KEY *d2i_ECPrivateKey(EC_KEY **key, const unsigned char **in, long len); + +/** Encodes a private key object and stores the result in a buffer. + * \param key the EC_KEY object to encode + * \param out the buffer for the result (if NULL the function returns number + * of bytes needed). + * \return 1 on success and 0 if an error occurred. + */ +int i2d_ECPrivateKey(EC_KEY *key, unsigned char **out); + +/********************************************************************/ +/* de- and encoding functions for EC parameters */ +/********************************************************************/ + +/** Decodes ec parameter from a memory buffer. + * \param key a pointer to a EC_KEY object which should be used (or NULL) + * \param in pointer to memory with the DER encoded ec parameters + * \param len length of the DER encoded ec parameters + * \return a EC_KEY object with the decoded parameters or NULL if an error + * occurred. + */ +EC_KEY *d2i_ECParameters(EC_KEY **key, const unsigned char **in, long len); + +/** Encodes ec parameter and stores the result in a buffer. + * \param key the EC_KEY object with ec parameters to encode + * \param out the buffer for the result (if NULL the function returns number + * of bytes needed). + * \return 1 on success and 0 if an error occurred. + */ +int i2d_ECParameters(EC_KEY *key, unsigned char **out); + +/********************************************************************/ +/* de- and encoding functions for EC public key */ +/* (octet string, not DER -- hence 'o2i' and 'i2o') */ +/********************************************************************/ + +/** Decodes a ec public key from a octet string. + * \param key a pointer to a EC_KEY object which should be used + * \param in memory buffer with the encoded public key + * \param len length of the encoded public key + * \return EC_KEY object with decoded public key or NULL if an error + * occurred. + */ +EC_KEY *o2i_ECPublicKey(EC_KEY **key, const unsigned char **in, long len); + +/** Encodes a ec public key in an octet string. + * \param key the EC_KEY object with the public key + * \param out the buffer for the result (if NULL the function returns number + * of bytes needed). + * \return 1 on success and 0 if an error occurred + */ +int i2o_ECPublicKey(const EC_KEY *key, unsigned char **out); + +/** Prints out the ec parameters on human readable form. + * \param bp BIO object to which the information is printed + * \param key EC_KEY object + * \return 1 on success and 0 if an error occurred + */ +int ECParameters_print(BIO *bp, const EC_KEY *key); + +/** Prints out the contents of a EC_KEY object + * \param bp BIO object to which the information is printed + * \param key EC_KEY object + * \param off line offset + * \return 1 on success and 0 if an error occurred + */ +int EC_KEY_print(BIO *bp, const EC_KEY *key, int off); + +# ifndef OPENSSL_NO_STDIO +/** Prints out the ec parameters on human readable form. + * \param fp file descriptor to which the information is printed + * \param key EC_KEY object + * \return 1 on success and 0 if an error occurred + */ +int ECParameters_print_fp(FILE *fp, const EC_KEY *key); + +/** Prints out the contents of a EC_KEY object + * \param fp file descriptor to which the information is printed + * \param key EC_KEY object + * \param off line offset + * \return 1 on success and 0 if an error occurred + */ +int EC_KEY_print_fp(FILE *fp, const EC_KEY *key, int off); + +# endif + +const EC_KEY_METHOD *EC_KEY_OpenSSL(void); +const EC_KEY_METHOD *EC_KEY_get_default_method(void); +void EC_KEY_set_default_method(const EC_KEY_METHOD *meth); +const EC_KEY_METHOD *EC_KEY_get_method(const EC_KEY *key); +int EC_KEY_set_method(EC_KEY *key, const EC_KEY_METHOD *meth); +EC_KEY *EC_KEY_new_method(ENGINE *engine); + +/** The old name for ecdh_KDF_X9_63 + * The ECDH KDF specification has been mistakingly attributed to ANSI X9.62, + * it is actually specified in ANSI X9.63. + * This identifier is retained for backwards compatibility + */ +int ECDH_KDF_X9_62(unsigned char *out, size_t outlen, + const unsigned char *Z, size_t Zlen, + const unsigned char *sinfo, size_t sinfolen, + const EVP_MD *md); + +int ECDH_compute_key(void *out, size_t outlen, const EC_POINT *pub_key, + const EC_KEY *ecdh, + void *(*KDF) (const void *in, size_t inlen, + void *out, size_t *outlen)); + +typedef struct ECDSA_SIG_st ECDSA_SIG; + +/** Allocates and initialize a ECDSA_SIG structure + * \return pointer to a ECDSA_SIG structure or NULL if an error occurred + */ +ECDSA_SIG *ECDSA_SIG_new(void); + +/** frees a ECDSA_SIG structure + * \param sig pointer to the ECDSA_SIG structure + */ +void ECDSA_SIG_free(ECDSA_SIG *sig); + +/** DER encode content of ECDSA_SIG object (note: this function modifies *pp + * (*pp += length of the DER encoded signature)). + * \param sig pointer to the ECDSA_SIG object + * \param pp pointer to a unsigned char pointer for the output or NULL + * \return the length of the DER encoded ECDSA_SIG object or a negative value + * on error + */ +int i2d_ECDSA_SIG(const ECDSA_SIG *sig, unsigned char **pp); + +/** Decodes a DER encoded ECDSA signature (note: this function changes *pp + * (*pp += len)). + * \param sig pointer to ECDSA_SIG pointer (may be NULL) + * \param pp memory buffer with the DER encoded signature + * \param len length of the buffer + * \return pointer to the decoded ECDSA_SIG structure (or NULL) + */ +ECDSA_SIG *d2i_ECDSA_SIG(ECDSA_SIG **sig, const unsigned char **pp, long len); + +/** Accessor for r and s fields of ECDSA_SIG + * \param sig pointer to ECDSA_SIG structure + * \param pr pointer to BIGNUM pointer for r (may be NULL) + * \param ps pointer to BIGNUM pointer for s (may be NULL) + */ +void ECDSA_SIG_get0(const ECDSA_SIG *sig, const BIGNUM **pr, const BIGNUM **ps); + +/** Accessor for r field of ECDSA_SIG + * \param sig pointer to ECDSA_SIG structure + */ +const BIGNUM *ECDSA_SIG_get0_r(const ECDSA_SIG *sig); + +/** Accessor for s field of ECDSA_SIG + * \param sig pointer to ECDSA_SIG structure + */ +const BIGNUM *ECDSA_SIG_get0_s(const ECDSA_SIG *sig); + +/** Setter for r and s fields of ECDSA_SIG + * \param sig pointer to ECDSA_SIG structure + * \param r pointer to BIGNUM for r (may be NULL) + * \param s pointer to BIGNUM for s (may be NULL) + */ +int ECDSA_SIG_set0(ECDSA_SIG *sig, BIGNUM *r, BIGNUM *s); + +/** Computes the ECDSA signature of the given hash value using + * the supplied private key and returns the created signature. + * \param dgst pointer to the hash value + * \param dgst_len length of the hash value + * \param eckey EC_KEY object containing a private EC key + * \return pointer to a ECDSA_SIG structure or NULL if an error occurred + */ +ECDSA_SIG *ECDSA_do_sign(const unsigned char *dgst, int dgst_len, + EC_KEY *eckey); + +/** Computes ECDSA signature of a given hash value using the supplied + * private key (note: sig must point to ECDSA_size(eckey) bytes of memory). + * \param dgst pointer to the hash value to sign + * \param dgstlen length of the hash value + * \param kinv BIGNUM with a pre-computed inverse k (optional) + * \param rp BIGNUM with a pre-computed rp value (optional), + * see ECDSA_sign_setup + * \param eckey EC_KEY object containing a private EC key + * \return pointer to a ECDSA_SIG structure or NULL if an error occurred + */ +ECDSA_SIG *ECDSA_do_sign_ex(const unsigned char *dgst, int dgstlen, + const BIGNUM *kinv, const BIGNUM *rp, + EC_KEY *eckey); + +/** Verifies that the supplied signature is a valid ECDSA + * signature of the supplied hash value using the supplied public key. + * \param dgst pointer to the hash value + * \param dgst_len length of the hash value + * \param sig ECDSA_SIG structure + * \param eckey EC_KEY object containing a public EC key + * \return 1 if the signature is valid, 0 if the signature is invalid + * and -1 on error + */ +int ECDSA_do_verify(const unsigned char *dgst, int dgst_len, + const ECDSA_SIG *sig, EC_KEY *eckey); + +/** Precompute parts of the signing operation + * \param eckey EC_KEY object containing a private EC key + * \param ctx BN_CTX object (optional) + * \param kinv BIGNUM pointer for the inverse of k + * \param rp BIGNUM pointer for x coordinate of k * generator + * \return 1 on success and 0 otherwise + */ +int ECDSA_sign_setup(EC_KEY *eckey, BN_CTX *ctx, BIGNUM **kinv, BIGNUM **rp); + +/** Computes ECDSA signature of a given hash value using the supplied + * private key (note: sig must point to ECDSA_size(eckey) bytes of memory). + * \param type this parameter is ignored + * \param dgst pointer to the hash value to sign + * \param dgstlen length of the hash value + * \param sig memory for the DER encoded created signature + * \param siglen pointer to the length of the returned signature + * \param eckey EC_KEY object containing a private EC key + * \return 1 on success and 0 otherwise + */ +int ECDSA_sign(int type, const unsigned char *dgst, int dgstlen, + unsigned char *sig, unsigned int *siglen, EC_KEY *eckey); + +/** Computes ECDSA signature of a given hash value using the supplied + * private key (note: sig must point to ECDSA_size(eckey) bytes of memory). + * \param type this parameter is ignored + * \param dgst pointer to the hash value to sign + * \param dgstlen length of the hash value + * \param sig buffer to hold the DER encoded signature + * \param siglen pointer to the length of the returned signature + * \param kinv BIGNUM with a pre-computed inverse k (optional) + * \param rp BIGNUM with a pre-computed rp value (optional), + * see ECDSA_sign_setup + * \param eckey EC_KEY object containing a private EC key + * \return 1 on success and 0 otherwise + */ +int ECDSA_sign_ex(int type, const unsigned char *dgst, int dgstlen, + unsigned char *sig, unsigned int *siglen, + const BIGNUM *kinv, const BIGNUM *rp, EC_KEY *eckey); + +/** Verifies that the given signature is valid ECDSA signature + * of the supplied hash value using the specified public key. + * \param type this parameter is ignored + * \param dgst pointer to the hash value + * \param dgstlen length of the hash value + * \param sig pointer to the DER encoded signature + * \param siglen length of the DER encoded signature + * \param eckey EC_KEY object containing a public EC key + * \return 1 if the signature is valid, 0 if the signature is invalid + * and -1 on error + */ +int ECDSA_verify(int type, const unsigned char *dgst, int dgstlen, + const unsigned char *sig, int siglen, EC_KEY *eckey); + +/** Returns the maximum length of the DER encoded signature + * \param eckey EC_KEY object + * \return numbers of bytes required for the DER encoded signature + */ +int ECDSA_size(const EC_KEY *eckey); + +/********************************************************************/ +/* EC_KEY_METHOD constructors, destructors, writers and accessors */ +/********************************************************************/ + +EC_KEY_METHOD *EC_KEY_METHOD_new(const EC_KEY_METHOD *meth); +void EC_KEY_METHOD_free(EC_KEY_METHOD *meth); +void EC_KEY_METHOD_set_init(EC_KEY_METHOD *meth, + int (*init)(EC_KEY *key), + void (*finish)(EC_KEY *key), + int (*copy)(EC_KEY *dest, const EC_KEY *src), + int (*set_group)(EC_KEY *key, const EC_GROUP *grp), + int (*set_private)(EC_KEY *key, + const BIGNUM *priv_key), + int (*set_public)(EC_KEY *key, + const EC_POINT *pub_key)); + +void EC_KEY_METHOD_set_keygen(EC_KEY_METHOD *meth, + int (*keygen)(EC_KEY *key)); + +void EC_KEY_METHOD_set_compute_key(EC_KEY_METHOD *meth, + int (*ckey)(unsigned char **psec, + size_t *pseclen, + const EC_POINT *pub_key, + const EC_KEY *ecdh)); + +void EC_KEY_METHOD_set_sign(EC_KEY_METHOD *meth, + int (*sign)(int type, const unsigned char *dgst, + int dlen, unsigned char *sig, + unsigned int *siglen, + const BIGNUM *kinv, const BIGNUM *r, + EC_KEY *eckey), + int (*sign_setup)(EC_KEY *eckey, BN_CTX *ctx_in, + BIGNUM **kinvp, BIGNUM **rp), + ECDSA_SIG *(*sign_sig)(const unsigned char *dgst, + int dgst_len, + const BIGNUM *in_kinv, + const BIGNUM *in_r, + EC_KEY *eckey)); + +void EC_KEY_METHOD_set_verify(EC_KEY_METHOD *meth, + int (*verify)(int type, const unsigned + char *dgst, int dgst_len, + const unsigned char *sigbuf, + int sig_len, EC_KEY *eckey), + int (*verify_sig)(const unsigned char *dgst, + int dgst_len, + const ECDSA_SIG *sig, + EC_KEY *eckey)); + +void EC_KEY_METHOD_get_init(const EC_KEY_METHOD *meth, + int (**pinit)(EC_KEY *key), + void (**pfinish)(EC_KEY *key), + int (**pcopy)(EC_KEY *dest, const EC_KEY *src), + int (**pset_group)(EC_KEY *key, + const EC_GROUP *grp), + int (**pset_private)(EC_KEY *key, + const BIGNUM *priv_key), + int (**pset_public)(EC_KEY *key, + const EC_POINT *pub_key)); + +void EC_KEY_METHOD_get_keygen(const EC_KEY_METHOD *meth, + int (**pkeygen)(EC_KEY *key)); + +void EC_KEY_METHOD_get_compute_key(const EC_KEY_METHOD *meth, + int (**pck)(unsigned char **psec, + size_t *pseclen, + const EC_POINT *pub_key, + const EC_KEY *ecdh)); + +void EC_KEY_METHOD_get_sign(const EC_KEY_METHOD *meth, + int (**psign)(int type, const unsigned char *dgst, + int dlen, unsigned char *sig, + unsigned int *siglen, + const BIGNUM *kinv, const BIGNUM *r, + EC_KEY *eckey), + int (**psign_setup)(EC_KEY *eckey, BN_CTX *ctx_in, + BIGNUM **kinvp, BIGNUM **rp), + ECDSA_SIG *(**psign_sig)(const unsigned char *dgst, + int dgst_len, + const BIGNUM *in_kinv, + const BIGNUM *in_r, + EC_KEY *eckey)); + +void EC_KEY_METHOD_get_verify(const EC_KEY_METHOD *meth, + int (**pverify)(int type, const unsigned + char *dgst, int dgst_len, + const unsigned char *sigbuf, + int sig_len, EC_KEY *eckey), + int (**pverify_sig)(const unsigned char *dgst, + int dgst_len, + const ECDSA_SIG *sig, + EC_KEY *eckey)); + +# define ECParameters_dup(x) ASN1_dup_of(EC_KEY,i2d_ECParameters,d2i_ECParameters,x) + +# ifndef __cplusplus +# if defined(__SUNPRO_C) +# if __SUNPRO_C >= 0x520 +# pragma error_messages (default,E_ARRAY_OF_INCOMPLETE_NONAME,E_ARRAY_OF_INCOMPLETE) +# endif +# endif +# endif + +# define EVP_PKEY_CTX_set_ec_paramgen_curve_nid(ctx, nid) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ + EVP_PKEY_OP_PARAMGEN|EVP_PKEY_OP_KEYGEN, \ + EVP_PKEY_CTRL_EC_PARAMGEN_CURVE_NID, nid, NULL) + +# define EVP_PKEY_CTX_set_ec_param_enc(ctx, flag) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ + EVP_PKEY_OP_PARAMGEN|EVP_PKEY_OP_KEYGEN, \ + EVP_PKEY_CTRL_EC_PARAM_ENC, flag, NULL) + +# define EVP_PKEY_CTX_set_ecdh_cofactor_mode(ctx, flag) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_EC_ECDH_COFACTOR, flag, NULL) + +# define EVP_PKEY_CTX_get_ecdh_cofactor_mode(ctx) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_EC_ECDH_COFACTOR, -2, NULL) + +# define EVP_PKEY_CTX_set_ecdh_kdf_type(ctx, kdf) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_EC_KDF_TYPE, kdf, NULL) + +# define EVP_PKEY_CTX_get_ecdh_kdf_type(ctx) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_EC_KDF_TYPE, -2, NULL) + +# define EVP_PKEY_CTX_set_ecdh_kdf_md(ctx, md) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_EC_KDF_MD, 0, (void *)(md)) + +# define EVP_PKEY_CTX_get_ecdh_kdf_md(ctx, pmd) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_GET_EC_KDF_MD, 0, (void *)(pmd)) + +# define EVP_PKEY_CTX_set_ecdh_kdf_outlen(ctx, len) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_EC_KDF_OUTLEN, len, NULL) + +# define EVP_PKEY_CTX_get_ecdh_kdf_outlen(ctx, plen) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_GET_EC_KDF_OUTLEN, 0, \ + (void *)(plen)) + +# define EVP_PKEY_CTX_set0_ecdh_kdf_ukm(ctx, p, plen) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_EC_KDF_UKM, plen, (void *)(p)) + +# define EVP_PKEY_CTX_get0_ecdh_kdf_ukm(ctx, p) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_GET_EC_KDF_UKM, 0, (void *)(p)) + +/* SM2 will skip the operation check so no need to pass operation here */ +# define EVP_PKEY_CTX_set1_id(ctx, id, id_len) \ + EVP_PKEY_CTX_ctrl(ctx, -1, -1, \ + EVP_PKEY_CTRL_SET1_ID, (int)id_len, (void*)(id)) + +# define EVP_PKEY_CTX_get1_id(ctx, id) \ + EVP_PKEY_CTX_ctrl(ctx, -1, -1, \ + EVP_PKEY_CTRL_GET1_ID, 0, (void*)(id)) + +# define EVP_PKEY_CTX_get1_id_len(ctx, id_len) \ + EVP_PKEY_CTX_ctrl(ctx, -1, -1, \ + EVP_PKEY_CTRL_GET1_ID_LEN, 0, (void*)(id_len)) + +# define EVP_PKEY_CTRL_EC_PARAMGEN_CURVE_NID (EVP_PKEY_ALG_CTRL + 1) +# define EVP_PKEY_CTRL_EC_PARAM_ENC (EVP_PKEY_ALG_CTRL + 2) +# define EVP_PKEY_CTRL_EC_ECDH_COFACTOR (EVP_PKEY_ALG_CTRL + 3) +# define EVP_PKEY_CTRL_EC_KDF_TYPE (EVP_PKEY_ALG_CTRL + 4) +# define EVP_PKEY_CTRL_EC_KDF_MD (EVP_PKEY_ALG_CTRL + 5) +# define EVP_PKEY_CTRL_GET_EC_KDF_MD (EVP_PKEY_ALG_CTRL + 6) +# define EVP_PKEY_CTRL_EC_KDF_OUTLEN (EVP_PKEY_ALG_CTRL + 7) +# define EVP_PKEY_CTRL_GET_EC_KDF_OUTLEN (EVP_PKEY_ALG_CTRL + 8) +# define EVP_PKEY_CTRL_EC_KDF_UKM (EVP_PKEY_ALG_CTRL + 9) +# define EVP_PKEY_CTRL_GET_EC_KDF_UKM (EVP_PKEY_ALG_CTRL + 10) +# define EVP_PKEY_CTRL_SET1_ID (EVP_PKEY_ALG_CTRL + 11) +# define EVP_PKEY_CTRL_GET1_ID (EVP_PKEY_ALG_CTRL + 12) +# define EVP_PKEY_CTRL_GET1_ID_LEN (EVP_PKEY_ALG_CTRL + 13) +/* KDF types */ +# define EVP_PKEY_ECDH_KDF_NONE 1 +# define EVP_PKEY_ECDH_KDF_X9_63 2 +/** The old name for EVP_PKEY_ECDH_KDF_X9_63 + * The ECDH KDF specification has been mistakingly attributed to ANSI X9.62, + * it is actually specified in ANSI X9.63. + * This identifier is retained for backwards compatibility + */ +# define EVP_PKEY_ECDH_KDF_X9_62 EVP_PKEY_ECDH_KDF_X9_63 + + +# ifdef __cplusplus +} +# endif +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ecdh.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ecdh.h new file mode 100644 index 00000000..681f3d5e --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ecdh.h @@ -0,0 +1,10 @@ +/* + * Copyright 2002-2016 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#include diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ecdsa.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ecdsa.h new file mode 100644 index 00000000..681f3d5e --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ecdsa.h @@ -0,0 +1,10 @@ +/* + * Copyright 2002-2016 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#include diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ecerr.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ecerr.h new file mode 100644 index 00000000..f7b91834 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ecerr.h @@ -0,0 +1,275 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2019 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_ECERR_H +# define HEADER_ECERR_H + +# ifndef HEADER_SYMHACKS_H +# include +# endif + +# include + +# ifndef OPENSSL_NO_EC + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_EC_strings(void); + +/* + * EC function codes. + */ +# define EC_F_BN_TO_FELEM 224 +# define EC_F_D2I_ECPARAMETERS 144 +# define EC_F_D2I_ECPKPARAMETERS 145 +# define EC_F_D2I_ECPRIVATEKEY 146 +# define EC_F_DO_EC_KEY_PRINT 221 +# define EC_F_ECDH_CMS_DECRYPT 238 +# define EC_F_ECDH_CMS_SET_SHARED_INFO 239 +# define EC_F_ECDH_COMPUTE_KEY 246 +# define EC_F_ECDH_SIMPLE_COMPUTE_KEY 257 +# define EC_F_ECDSA_DO_SIGN_EX 251 +# define EC_F_ECDSA_DO_VERIFY 252 +# define EC_F_ECDSA_SIGN_EX 254 +# define EC_F_ECDSA_SIGN_SETUP 248 +# define EC_F_ECDSA_SIG_NEW 265 +# define EC_F_ECDSA_VERIFY 253 +# define EC_F_ECD_ITEM_VERIFY 270 +# define EC_F_ECKEY_PARAM2TYPE 223 +# define EC_F_ECKEY_PARAM_DECODE 212 +# define EC_F_ECKEY_PRIV_DECODE 213 +# define EC_F_ECKEY_PRIV_ENCODE 214 +# define EC_F_ECKEY_PUB_DECODE 215 +# define EC_F_ECKEY_PUB_ENCODE 216 +# define EC_F_ECKEY_TYPE2PARAM 220 +# define EC_F_ECPARAMETERS_PRINT 147 +# define EC_F_ECPARAMETERS_PRINT_FP 148 +# define EC_F_ECPKPARAMETERS_PRINT 149 +# define EC_F_ECPKPARAMETERS_PRINT_FP 150 +# define EC_F_ECP_NISTZ256_GET_AFFINE 240 +# define EC_F_ECP_NISTZ256_INV_MOD_ORD 275 +# define EC_F_ECP_NISTZ256_MULT_PRECOMPUTE 243 +# define EC_F_ECP_NISTZ256_POINTS_MUL 241 +# define EC_F_ECP_NISTZ256_PRE_COMP_NEW 244 +# define EC_F_ECP_NISTZ256_WINDOWED_MUL 242 +# define EC_F_ECX_KEY_OP 266 +# define EC_F_ECX_PRIV_ENCODE 267 +# define EC_F_ECX_PUB_ENCODE 268 +# define EC_F_EC_ASN1_GROUP2CURVE 153 +# define EC_F_EC_ASN1_GROUP2FIELDID 154 +# define EC_F_EC_GF2M_MONTGOMERY_POINT_MULTIPLY 208 +# define EC_F_EC_GF2M_SIMPLE_FIELD_INV 296 +# define EC_F_EC_GF2M_SIMPLE_GROUP_CHECK_DISCRIMINANT 159 +# define EC_F_EC_GF2M_SIMPLE_GROUP_SET_CURVE 195 +# define EC_F_EC_GF2M_SIMPLE_LADDER_POST 285 +# define EC_F_EC_GF2M_SIMPLE_LADDER_PRE 288 +# define EC_F_EC_GF2M_SIMPLE_OCT2POINT 160 +# define EC_F_EC_GF2M_SIMPLE_POINT2OCT 161 +# define EC_F_EC_GF2M_SIMPLE_POINTS_MUL 289 +# define EC_F_EC_GF2M_SIMPLE_POINT_GET_AFFINE_COORDINATES 162 +# define EC_F_EC_GF2M_SIMPLE_POINT_SET_AFFINE_COORDINATES 163 +# define EC_F_EC_GF2M_SIMPLE_SET_COMPRESSED_COORDINATES 164 +# define EC_F_EC_GFP_MONT_FIELD_DECODE 133 +# define EC_F_EC_GFP_MONT_FIELD_ENCODE 134 +# define EC_F_EC_GFP_MONT_FIELD_INV 297 +# define EC_F_EC_GFP_MONT_FIELD_MUL 131 +# define EC_F_EC_GFP_MONT_FIELD_SET_TO_ONE 209 +# define EC_F_EC_GFP_MONT_FIELD_SQR 132 +# define EC_F_EC_GFP_MONT_GROUP_SET_CURVE 189 +# define EC_F_EC_GFP_NISTP224_GROUP_SET_CURVE 225 +# define EC_F_EC_GFP_NISTP224_POINTS_MUL 228 +# define EC_F_EC_GFP_NISTP224_POINT_GET_AFFINE_COORDINATES 226 +# define EC_F_EC_GFP_NISTP256_GROUP_SET_CURVE 230 +# define EC_F_EC_GFP_NISTP256_POINTS_MUL 231 +# define EC_F_EC_GFP_NISTP256_POINT_GET_AFFINE_COORDINATES 232 +# define EC_F_EC_GFP_NISTP521_GROUP_SET_CURVE 233 +# define EC_F_EC_GFP_NISTP521_POINTS_MUL 234 +# define EC_F_EC_GFP_NISTP521_POINT_GET_AFFINE_COORDINATES 235 +# define EC_F_EC_GFP_NIST_FIELD_MUL 200 +# define EC_F_EC_GFP_NIST_FIELD_SQR 201 +# define EC_F_EC_GFP_NIST_GROUP_SET_CURVE 202 +# define EC_F_EC_GFP_SIMPLE_BLIND_COORDINATES 287 +# define EC_F_EC_GFP_SIMPLE_FIELD_INV 298 +# define EC_F_EC_GFP_SIMPLE_GROUP_CHECK_DISCRIMINANT 165 +# define EC_F_EC_GFP_SIMPLE_GROUP_SET_CURVE 166 +# define EC_F_EC_GFP_SIMPLE_MAKE_AFFINE 102 +# define EC_F_EC_GFP_SIMPLE_OCT2POINT 103 +# define EC_F_EC_GFP_SIMPLE_POINT2OCT 104 +# define EC_F_EC_GFP_SIMPLE_POINTS_MAKE_AFFINE 137 +# define EC_F_EC_GFP_SIMPLE_POINT_GET_AFFINE_COORDINATES 167 +# define EC_F_EC_GFP_SIMPLE_POINT_SET_AFFINE_COORDINATES 168 +# define EC_F_EC_GFP_SIMPLE_SET_COMPRESSED_COORDINATES 169 +# define EC_F_EC_GROUP_CHECK 170 +# define EC_F_EC_GROUP_CHECK_DISCRIMINANT 171 +# define EC_F_EC_GROUP_COPY 106 +# define EC_F_EC_GROUP_GET_CURVE 291 +# define EC_F_EC_GROUP_GET_CURVE_GF2M 172 +# define EC_F_EC_GROUP_GET_CURVE_GFP 130 +# define EC_F_EC_GROUP_GET_DEGREE 173 +# define EC_F_EC_GROUP_GET_ECPARAMETERS 261 +# define EC_F_EC_GROUP_GET_ECPKPARAMETERS 262 +# define EC_F_EC_GROUP_GET_PENTANOMIAL_BASIS 193 +# define EC_F_EC_GROUP_GET_TRINOMIAL_BASIS 194 +# define EC_F_EC_GROUP_NEW 108 +# define EC_F_EC_GROUP_NEW_BY_CURVE_NAME 174 +# define EC_F_EC_GROUP_NEW_FROM_DATA 175 +# define EC_F_EC_GROUP_NEW_FROM_ECPARAMETERS 263 +# define EC_F_EC_GROUP_NEW_FROM_ECPKPARAMETERS 264 +# define EC_F_EC_GROUP_SET_CURVE 292 +# define EC_F_EC_GROUP_SET_CURVE_GF2M 176 +# define EC_F_EC_GROUP_SET_CURVE_GFP 109 +# define EC_F_EC_GROUP_SET_GENERATOR 111 +# define EC_F_EC_GROUP_SET_SEED 286 +# define EC_F_EC_KEY_CHECK_KEY 177 +# define EC_F_EC_KEY_COPY 178 +# define EC_F_EC_KEY_GENERATE_KEY 179 +# define EC_F_EC_KEY_NEW 182 +# define EC_F_EC_KEY_NEW_METHOD 245 +# define EC_F_EC_KEY_OCT2PRIV 255 +# define EC_F_EC_KEY_PRINT 180 +# define EC_F_EC_KEY_PRINT_FP 181 +# define EC_F_EC_KEY_PRIV2BUF 279 +# define EC_F_EC_KEY_PRIV2OCT 256 +# define EC_F_EC_KEY_SET_PUBLIC_KEY_AFFINE_COORDINATES 229 +# define EC_F_EC_KEY_SIMPLE_CHECK_KEY 258 +# define EC_F_EC_KEY_SIMPLE_OCT2PRIV 259 +# define EC_F_EC_KEY_SIMPLE_PRIV2OCT 260 +# define EC_F_EC_PKEY_CHECK 273 +# define EC_F_EC_PKEY_PARAM_CHECK 274 +# define EC_F_EC_POINTS_MAKE_AFFINE 136 +# define EC_F_EC_POINTS_MUL 290 +# define EC_F_EC_POINT_ADD 112 +# define EC_F_EC_POINT_BN2POINT 280 +# define EC_F_EC_POINT_CMP 113 +# define EC_F_EC_POINT_COPY 114 +# define EC_F_EC_POINT_DBL 115 +# define EC_F_EC_POINT_GET_AFFINE_COORDINATES 293 +# define EC_F_EC_POINT_GET_AFFINE_COORDINATES_GF2M 183 +# define EC_F_EC_POINT_GET_AFFINE_COORDINATES_GFP 116 +# define EC_F_EC_POINT_GET_JPROJECTIVE_COORDINATES_GFP 117 +# define EC_F_EC_POINT_INVERT 210 +# define EC_F_EC_POINT_IS_AT_INFINITY 118 +# define EC_F_EC_POINT_IS_ON_CURVE 119 +# define EC_F_EC_POINT_MAKE_AFFINE 120 +# define EC_F_EC_POINT_NEW 121 +# define EC_F_EC_POINT_OCT2POINT 122 +# define EC_F_EC_POINT_POINT2BUF 281 +# define EC_F_EC_POINT_POINT2OCT 123 +# define EC_F_EC_POINT_SET_AFFINE_COORDINATES 294 +# define EC_F_EC_POINT_SET_AFFINE_COORDINATES_GF2M 185 +# define EC_F_EC_POINT_SET_AFFINE_COORDINATES_GFP 124 +# define EC_F_EC_POINT_SET_COMPRESSED_COORDINATES 295 +# define EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GF2M 186 +# define EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GFP 125 +# define EC_F_EC_POINT_SET_JPROJECTIVE_COORDINATES_GFP 126 +# define EC_F_EC_POINT_SET_TO_INFINITY 127 +# define EC_F_EC_PRE_COMP_NEW 196 +# define EC_F_EC_SCALAR_MUL_LADDER 284 +# define EC_F_EC_WNAF_MUL 187 +# define EC_F_EC_WNAF_PRECOMPUTE_MULT 188 +# define EC_F_I2D_ECPARAMETERS 190 +# define EC_F_I2D_ECPKPARAMETERS 191 +# define EC_F_I2D_ECPRIVATEKEY 192 +# define EC_F_I2O_ECPUBLICKEY 151 +# define EC_F_NISTP224_PRE_COMP_NEW 227 +# define EC_F_NISTP256_PRE_COMP_NEW 236 +# define EC_F_NISTP521_PRE_COMP_NEW 237 +# define EC_F_O2I_ECPUBLICKEY 152 +# define EC_F_OLD_EC_PRIV_DECODE 222 +# define EC_F_OSSL_ECDH_COMPUTE_KEY 247 +# define EC_F_OSSL_ECDSA_SIGN_SIG 249 +# define EC_F_OSSL_ECDSA_VERIFY_SIG 250 +# define EC_F_PKEY_ECD_CTRL 271 +# define EC_F_PKEY_ECD_DIGESTSIGN 272 +# define EC_F_PKEY_ECD_DIGESTSIGN25519 276 +# define EC_F_PKEY_ECD_DIGESTSIGN448 277 +# define EC_F_PKEY_ECX_DERIVE 269 +# define EC_F_PKEY_EC_CTRL 197 +# define EC_F_PKEY_EC_CTRL_STR 198 +# define EC_F_PKEY_EC_DERIVE 217 +# define EC_F_PKEY_EC_INIT 282 +# define EC_F_PKEY_EC_KDF_DERIVE 283 +# define EC_F_PKEY_EC_KEYGEN 199 +# define EC_F_PKEY_EC_PARAMGEN 219 +# define EC_F_PKEY_EC_SIGN 218 +# define EC_F_VALIDATE_ECX_DERIVE 278 + +/* + * EC reason codes. + */ +# define EC_R_ASN1_ERROR 115 +# define EC_R_BAD_SIGNATURE 156 +# define EC_R_BIGNUM_OUT_OF_RANGE 144 +# define EC_R_BUFFER_TOO_SMALL 100 +# define EC_R_CANNOT_INVERT 165 +# define EC_R_COORDINATES_OUT_OF_RANGE 146 +# define EC_R_CURVE_DOES_NOT_SUPPORT_ECDH 160 +# define EC_R_CURVE_DOES_NOT_SUPPORT_SIGNING 159 +# define EC_R_D2I_ECPKPARAMETERS_FAILURE 117 +# define EC_R_DECODE_ERROR 142 +# define EC_R_DISCRIMINANT_IS_ZERO 118 +# define EC_R_EC_GROUP_NEW_BY_NAME_FAILURE 119 +# define EC_R_FIELD_TOO_LARGE 143 +# define EC_R_GF2M_NOT_SUPPORTED 147 +# define EC_R_GROUP2PKPARAMETERS_FAILURE 120 +# define EC_R_I2D_ECPKPARAMETERS_FAILURE 121 +# define EC_R_INCOMPATIBLE_OBJECTS 101 +# define EC_R_INVALID_ARGUMENT 112 +# define EC_R_INVALID_COMPRESSED_POINT 110 +# define EC_R_INVALID_COMPRESSION_BIT 109 +# define EC_R_INVALID_CURVE 141 +# define EC_R_INVALID_DIGEST 151 +# define EC_R_INVALID_DIGEST_TYPE 138 +# define EC_R_INVALID_ENCODING 102 +# define EC_R_INVALID_FIELD 103 +# define EC_R_INVALID_FORM 104 +# define EC_R_INVALID_GROUP_ORDER 122 +# define EC_R_INVALID_KEY 116 +# define EC_R_INVALID_OUTPUT_LENGTH 161 +# define EC_R_INVALID_PEER_KEY 133 +# define EC_R_INVALID_PENTANOMIAL_BASIS 132 +# define EC_R_INVALID_PRIVATE_KEY 123 +# define EC_R_INVALID_TRINOMIAL_BASIS 137 +# define EC_R_KDF_PARAMETER_ERROR 148 +# define EC_R_KEYS_NOT_SET 140 +# define EC_R_LADDER_POST_FAILURE 136 +# define EC_R_LADDER_PRE_FAILURE 153 +# define EC_R_LADDER_STEP_FAILURE 162 +# define EC_R_MISSING_PARAMETERS 124 +# define EC_R_MISSING_PRIVATE_KEY 125 +# define EC_R_NEED_NEW_SETUP_VALUES 157 +# define EC_R_NOT_A_NIST_PRIME 135 +# define EC_R_NOT_IMPLEMENTED 126 +# define EC_R_NOT_INITIALIZED 111 +# define EC_R_NO_PARAMETERS_SET 139 +# define EC_R_NO_PRIVATE_VALUE 154 +# define EC_R_OPERATION_NOT_SUPPORTED 152 +# define EC_R_PASSED_NULL_PARAMETER 134 +# define EC_R_PEER_KEY_ERROR 149 +# define EC_R_PKPARAMETERS2GROUP_FAILURE 127 +# define EC_R_POINT_ARITHMETIC_FAILURE 155 +# define EC_R_POINT_AT_INFINITY 106 +# define EC_R_POINT_COORDINATES_BLIND_FAILURE 163 +# define EC_R_POINT_IS_NOT_ON_CURVE 107 +# define EC_R_RANDOM_NUMBER_GENERATION_FAILED 158 +# define EC_R_SHARED_INFO_ERROR 150 +# define EC_R_SLOT_FULL 108 +# define EC_R_UNDEFINED_GENERATOR 113 +# define EC_R_UNDEFINED_ORDER 128 +# define EC_R_UNKNOWN_COFACTOR 164 +# define EC_R_UNKNOWN_GROUP 129 +# define EC_R_UNKNOWN_ORDER 114 +# define EC_R_UNSUPPORTED_FIELD 131 +# define EC_R_WRONG_CURVE_PARAMETERS 145 +# define EC_R_WRONG_ORDER 130 + +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/engine.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/engine.h new file mode 100644 index 00000000..0780f0fb --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/engine.h @@ -0,0 +1,751 @@ +/* + * Copyright 2000-2018 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 + * 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 + */ + +#ifndef HEADER_ENGINE_H +# define HEADER_ENGINE_H + +# include + +# ifndef OPENSSL_NO_ENGINE +# if OPENSSL_API_COMPAT < 0x10100000L +# include +# include +# include +# include +# include +# include +# include +# include +# endif +# include +# include +# include +# include +# ifdef __cplusplus +extern "C" { +# endif + +/* + * These flags are used to control combinations of algorithm (methods) by + * bitwise "OR"ing. + */ +# define ENGINE_METHOD_RSA (unsigned int)0x0001 +# define ENGINE_METHOD_DSA (unsigned int)0x0002 +# define ENGINE_METHOD_DH (unsigned int)0x0004 +# define ENGINE_METHOD_RAND (unsigned int)0x0008 +# define ENGINE_METHOD_CIPHERS (unsigned int)0x0040 +# define ENGINE_METHOD_DIGESTS (unsigned int)0x0080 +# define ENGINE_METHOD_PKEY_METHS (unsigned int)0x0200 +# define ENGINE_METHOD_PKEY_ASN1_METHS (unsigned int)0x0400 +# define ENGINE_METHOD_EC (unsigned int)0x0800 +/* Obvious all-or-nothing cases. */ +# define ENGINE_METHOD_ALL (unsigned int)0xFFFF +# define ENGINE_METHOD_NONE (unsigned int)0x0000 + +/* + * This(ese) flag(s) controls behaviour of the ENGINE_TABLE mechanism used + * internally to control registration of ENGINE implementations, and can be + * set by ENGINE_set_table_flags(). The "NOINIT" flag prevents attempts to + * initialise registered ENGINEs if they are not already initialised. + */ +# define ENGINE_TABLE_FLAG_NOINIT (unsigned int)0x0001 + +/* ENGINE flags that can be set by ENGINE_set_flags(). */ +/* Not used */ +/* #define ENGINE_FLAGS_MALLOCED 0x0001 */ + +/* + * This flag is for ENGINEs that wish to handle the various 'CMD'-related + * control commands on their own. Without this flag, ENGINE_ctrl() handles + * these control commands on behalf of the ENGINE using their "cmd_defns" + * data. + */ +# define ENGINE_FLAGS_MANUAL_CMD_CTRL (int)0x0002 + +/* + * This flag is for ENGINEs who return new duplicate structures when found + * via "ENGINE_by_id()". When an ENGINE must store state (eg. if + * ENGINE_ctrl() commands are called in sequence as part of some stateful + * process like key-generation setup and execution), it can set this flag - + * then each attempt to obtain the ENGINE will result in it being copied into + * a new structure. Normally, ENGINEs don't declare this flag so + * ENGINE_by_id() just increments the existing ENGINE's structural reference + * count. + */ +# define ENGINE_FLAGS_BY_ID_COPY (int)0x0004 + +/* + * This flag if for an ENGINE that does not want its methods registered as + * part of ENGINE_register_all_complete() for example if the methods are not + * usable as default methods. + */ + +# define ENGINE_FLAGS_NO_REGISTER_ALL (int)0x0008 + +/* + * ENGINEs can support their own command types, and these flags are used in + * ENGINE_CTRL_GET_CMD_FLAGS to indicate to the caller what kind of input + * each command expects. Currently only numeric and string input is + * supported. If a control command supports none of the _NUMERIC, _STRING, or + * _NO_INPUT options, then it is regarded as an "internal" control command - + * and not for use in config setting situations. As such, they're not + * available to the ENGINE_ctrl_cmd_string() function, only raw ENGINE_ctrl() + * access. Changes to this list of 'command types' should be reflected + * carefully in ENGINE_cmd_is_executable() and ENGINE_ctrl_cmd_string(). + */ + +/* accepts a 'long' input value (3rd parameter to ENGINE_ctrl) */ +# define ENGINE_CMD_FLAG_NUMERIC (unsigned int)0x0001 +/* + * accepts string input (cast from 'void*' to 'const char *', 4th parameter + * to ENGINE_ctrl) + */ +# define ENGINE_CMD_FLAG_STRING (unsigned int)0x0002 +/* + * Indicates that the control command takes *no* input. Ie. the control + * command is unparameterised. + */ +# define ENGINE_CMD_FLAG_NO_INPUT (unsigned int)0x0004 +/* + * Indicates that the control command is internal. This control command won't + * be shown in any output, and is only usable through the ENGINE_ctrl_cmd() + * function. + */ +# define ENGINE_CMD_FLAG_INTERNAL (unsigned int)0x0008 + +/* + * NB: These 3 control commands are deprecated and should not be used. + * ENGINEs relying on these commands should compile conditional support for + * compatibility (eg. if these symbols are defined) but should also migrate + * the same functionality to their own ENGINE-specific control functions that + * can be "discovered" by calling applications. The fact these control + * commands wouldn't be "executable" (ie. usable by text-based config) + * doesn't change the fact that application code can find and use them + * without requiring per-ENGINE hacking. + */ + +/* + * These flags are used to tell the ctrl function what should be done. All + * command numbers are shared between all engines, even if some don't make + * sense to some engines. In such a case, they do nothing but return the + * error ENGINE_R_CTRL_COMMAND_NOT_IMPLEMENTED. + */ +# define ENGINE_CTRL_SET_LOGSTREAM 1 +# define ENGINE_CTRL_SET_PASSWORD_CALLBACK 2 +# define ENGINE_CTRL_HUP 3/* Close and reinitialise + * any handles/connections + * etc. */ +# define ENGINE_CTRL_SET_USER_INTERFACE 4/* Alternative to callback */ +# define ENGINE_CTRL_SET_CALLBACK_DATA 5/* User-specific data, used + * when calling the password + * callback and the user + * interface */ +# define ENGINE_CTRL_LOAD_CONFIGURATION 6/* Load a configuration, + * given a string that + * represents a file name + * or so */ +# define ENGINE_CTRL_LOAD_SECTION 7/* Load data from a given + * section in the already + * loaded configuration */ + +/* + * These control commands allow an application to deal with an arbitrary + * engine in a dynamic way. Warn: Negative return values indicate errors FOR + * THESE COMMANDS because zero is used to indicate 'end-of-list'. Other + * commands, including ENGINE-specific command types, return zero for an + * error. An ENGINE can choose to implement these ctrl functions, and can + * internally manage things however it chooses - it does so by setting the + * ENGINE_FLAGS_MANUAL_CMD_CTRL flag (using ENGINE_set_flags()). Otherwise + * the ENGINE_ctrl() code handles this on the ENGINE's behalf using the + * cmd_defns data (set using ENGINE_set_cmd_defns()). This means an ENGINE's + * ctrl() handler need only implement its own commands - the above "meta" + * commands will be taken care of. + */ + +/* + * Returns non-zero if the supplied ENGINE has a ctrl() handler. If "not", + * then all the remaining control commands will return failure, so it is + * worth checking this first if the caller is trying to "discover" the + * engine's capabilities and doesn't want errors generated unnecessarily. + */ +# define ENGINE_CTRL_HAS_CTRL_FUNCTION 10 +/* + * Returns a positive command number for the first command supported by the + * engine. Returns zero if no ctrl commands are supported. + */ +# define ENGINE_CTRL_GET_FIRST_CMD_TYPE 11 +/* + * The 'long' argument specifies a command implemented by the engine, and the + * return value is the next command supported, or zero if there are no more. + */ +# define ENGINE_CTRL_GET_NEXT_CMD_TYPE 12 +/* + * The 'void*' argument is a command name (cast from 'const char *'), and the + * return value is the command that corresponds to it. + */ +# define ENGINE_CTRL_GET_CMD_FROM_NAME 13 +/* + * The next two allow a command to be converted into its corresponding string + * form. In each case, the 'long' argument supplies the command. In the + * NAME_LEN case, the return value is the length of the command name (not + * counting a trailing EOL). In the NAME case, the 'void*' argument must be a + * string buffer large enough, and it will be populated with the name of the + * command (WITH a trailing EOL). + */ +# define ENGINE_CTRL_GET_NAME_LEN_FROM_CMD 14 +# define ENGINE_CTRL_GET_NAME_FROM_CMD 15 +/* The next two are similar but give a "short description" of a command. */ +# define ENGINE_CTRL_GET_DESC_LEN_FROM_CMD 16 +# define ENGINE_CTRL_GET_DESC_FROM_CMD 17 +/* + * With this command, the return value is the OR'd combination of + * ENGINE_CMD_FLAG_*** values that indicate what kind of input a given + * engine-specific ctrl command expects. + */ +# define ENGINE_CTRL_GET_CMD_FLAGS 18 + +/* + * ENGINE implementations should start the numbering of their own control + * commands from this value. (ie. ENGINE_CMD_BASE, ENGINE_CMD_BASE + 1, etc). + */ +# define ENGINE_CMD_BASE 200 + +/* + * NB: These 2 nCipher "chil" control commands are deprecated, and their + * functionality is now available through ENGINE-specific control commands + * (exposed through the above-mentioned 'CMD'-handling). Code using these 2 + * commands should be migrated to the more general command handling before + * these are removed. + */ + +/* Flags specific to the nCipher "chil" engine */ +# define ENGINE_CTRL_CHIL_SET_FORKCHECK 100 + /* + * Depending on the value of the (long)i argument, this sets or + * unsets the SimpleForkCheck flag in the CHIL API to enable or + * disable checking and workarounds for applications that fork(). + */ +# define ENGINE_CTRL_CHIL_NO_LOCKING 101 + /* + * This prevents the initialisation function from providing mutex + * callbacks to the nCipher library. + */ + +/* + * If an ENGINE supports its own specific control commands and wishes the + * framework to handle the above 'ENGINE_CMD_***'-manipulation commands on + * its behalf, it should supply a null-terminated array of ENGINE_CMD_DEFN + * entries to ENGINE_set_cmd_defns(). It should also implement a ctrl() + * handler that supports the stated commands (ie. the "cmd_num" entries as + * described by the array). NB: The array must be ordered in increasing order + * of cmd_num. "null-terminated" means that the last ENGINE_CMD_DEFN element + * has cmd_num set to zero and/or cmd_name set to NULL. + */ +typedef struct ENGINE_CMD_DEFN_st { + unsigned int cmd_num; /* The command number */ + const char *cmd_name; /* The command name itself */ + const char *cmd_desc; /* A short description of the command */ + unsigned int cmd_flags; /* The input the command expects */ +} ENGINE_CMD_DEFN; + +/* Generic function pointer */ +typedef int (*ENGINE_GEN_FUNC_PTR) (void); +/* Generic function pointer taking no arguments */ +typedef int (*ENGINE_GEN_INT_FUNC_PTR) (ENGINE *); +/* Specific control function pointer */ +typedef int (*ENGINE_CTRL_FUNC_PTR) (ENGINE *, int, long, void *, + void (*f) (void)); +/* Generic load_key function pointer */ +typedef EVP_PKEY *(*ENGINE_LOAD_KEY_PTR)(ENGINE *, const char *, + UI_METHOD *ui_method, + void *callback_data); +typedef int (*ENGINE_SSL_CLIENT_CERT_PTR) (ENGINE *, SSL *ssl, + STACK_OF(X509_NAME) *ca_dn, + X509 **pcert, EVP_PKEY **pkey, + STACK_OF(X509) **pother, + UI_METHOD *ui_method, + void *callback_data); +/*- + * These callback types are for an ENGINE's handler for cipher and digest logic. + * These handlers have these prototypes; + * int foo(ENGINE *e, const EVP_CIPHER **cipher, const int **nids, int nid); + * int foo(ENGINE *e, const EVP_MD **digest, const int **nids, int nid); + * Looking at how to implement these handlers in the case of cipher support, if + * the framework wants the EVP_CIPHER for 'nid', it will call; + * foo(e, &p_evp_cipher, NULL, nid); (return zero for failure) + * If the framework wants a list of supported 'nid's, it will call; + * foo(e, NULL, &p_nids, 0); (returns number of 'nids' or -1 for error) + */ +/* + * Returns to a pointer to the array of supported cipher 'nid's. If the + * second parameter is non-NULL it is set to the size of the returned array. + */ +typedef int (*ENGINE_CIPHERS_PTR) (ENGINE *, const EVP_CIPHER **, + const int **, int); +typedef int (*ENGINE_DIGESTS_PTR) (ENGINE *, const EVP_MD **, const int **, + int); +typedef int (*ENGINE_PKEY_METHS_PTR) (ENGINE *, EVP_PKEY_METHOD **, + const int **, int); +typedef int (*ENGINE_PKEY_ASN1_METHS_PTR) (ENGINE *, EVP_PKEY_ASN1_METHOD **, + const int **, int); +/* + * STRUCTURE functions ... all of these functions deal with pointers to + * ENGINE structures where the pointers have a "structural reference". This + * means that their reference is to allowed access to the structure but it + * does not imply that the structure is functional. To simply increment or + * decrement the structural reference count, use ENGINE_by_id and + * ENGINE_free. NB: This is not required when iterating using ENGINE_get_next + * as it will automatically decrement the structural reference count of the + * "current" ENGINE and increment the structural reference count of the + * ENGINE it returns (unless it is NULL). + */ + +/* Get the first/last "ENGINE" type available. */ +ENGINE *ENGINE_get_first(void); +ENGINE *ENGINE_get_last(void); +/* Iterate to the next/previous "ENGINE" type (NULL = end of the list). */ +ENGINE *ENGINE_get_next(ENGINE *e); +ENGINE *ENGINE_get_prev(ENGINE *e); +/* Add another "ENGINE" type into the array. */ +int ENGINE_add(ENGINE *e); +/* Remove an existing "ENGINE" type from the array. */ +int ENGINE_remove(ENGINE *e); +/* Retrieve an engine from the list by its unique "id" value. */ +ENGINE *ENGINE_by_id(const char *id); + +#if OPENSSL_API_COMPAT < 0x10100000L +# define ENGINE_load_openssl() \ + OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_OPENSSL, NULL) +# define ENGINE_load_dynamic() \ + OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_DYNAMIC, NULL) +# ifndef OPENSSL_NO_STATIC_ENGINE +# define ENGINE_load_padlock() \ + OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_PADLOCK, NULL) +# define ENGINE_load_capi() \ + OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_CAPI, NULL) +# define ENGINE_load_afalg() \ + OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_AFALG, NULL) +# endif +# define ENGINE_load_cryptodev() \ + OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_CRYPTODEV, NULL) +# define ENGINE_load_rdrand() \ + OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_RDRAND, NULL) +#endif +void ENGINE_load_builtin_engines(void); + +/* + * Get and set global flags (ENGINE_TABLE_FLAG_***) for the implementation + * "registry" handling. + */ +unsigned int ENGINE_get_table_flags(void); +void ENGINE_set_table_flags(unsigned int flags); + +/*- Manage registration of ENGINEs per "table". For each type, there are 3 + * functions; + * ENGINE_register_***(e) - registers the implementation from 'e' (if it has one) + * ENGINE_unregister_***(e) - unregister the implementation from 'e' + * ENGINE_register_all_***() - call ENGINE_register_***() for each 'e' in the list + * Cleanup is automatically registered from each table when required. + */ + +int ENGINE_register_RSA(ENGINE *e); +void ENGINE_unregister_RSA(ENGINE *e); +void ENGINE_register_all_RSA(void); + +int ENGINE_register_DSA(ENGINE *e); +void ENGINE_unregister_DSA(ENGINE *e); +void ENGINE_register_all_DSA(void); + +int ENGINE_register_EC(ENGINE *e); +void ENGINE_unregister_EC(ENGINE *e); +void ENGINE_register_all_EC(void); + +int ENGINE_register_DH(ENGINE *e); +void ENGINE_unregister_DH(ENGINE *e); +void ENGINE_register_all_DH(void); + +int ENGINE_register_RAND(ENGINE *e); +void ENGINE_unregister_RAND(ENGINE *e); +void ENGINE_register_all_RAND(void); + +int ENGINE_register_ciphers(ENGINE *e); +void ENGINE_unregister_ciphers(ENGINE *e); +void ENGINE_register_all_ciphers(void); + +int ENGINE_register_digests(ENGINE *e); +void ENGINE_unregister_digests(ENGINE *e); +void ENGINE_register_all_digests(void); + +int ENGINE_register_pkey_meths(ENGINE *e); +void ENGINE_unregister_pkey_meths(ENGINE *e); +void ENGINE_register_all_pkey_meths(void); + +int ENGINE_register_pkey_asn1_meths(ENGINE *e); +void ENGINE_unregister_pkey_asn1_meths(ENGINE *e); +void ENGINE_register_all_pkey_asn1_meths(void); + +/* + * These functions register all support from the above categories. Note, use + * of these functions can result in static linkage of code your application + * may not need. If you only need a subset of functionality, consider using + * more selective initialisation. + */ +int ENGINE_register_complete(ENGINE *e); +int ENGINE_register_all_complete(void); + +/* + * Send parameterised control commands to the engine. The possibilities to + * send down an integer, a pointer to data or a function pointer are + * provided. Any of the parameters may or may not be NULL, depending on the + * command number. In actuality, this function only requires a structural + * (rather than functional) reference to an engine, but many control commands + * may require the engine be functional. The caller should be aware of trying + * commands that require an operational ENGINE, and only use functional + * references in such situations. + */ +int ENGINE_ctrl(ENGINE *e, int cmd, long i, void *p, void (*f) (void)); + +/* + * This function tests if an ENGINE-specific command is usable as a + * "setting". Eg. in an application's config file that gets processed through + * ENGINE_ctrl_cmd_string(). If this returns zero, it is not available to + * ENGINE_ctrl_cmd_string(), only ENGINE_ctrl(). + */ +int ENGINE_cmd_is_executable(ENGINE *e, int cmd); + +/* + * This function works like ENGINE_ctrl() with the exception of taking a + * command name instead of a command number, and can handle optional + * commands. See the comment on ENGINE_ctrl_cmd_string() for an explanation + * on how to use the cmd_name and cmd_optional. + */ +int ENGINE_ctrl_cmd(ENGINE *e, const char *cmd_name, + long i, void *p, void (*f) (void), int cmd_optional); + +/* + * This function passes a command-name and argument to an ENGINE. The + * cmd_name is converted to a command number and the control command is + * called using 'arg' as an argument (unless the ENGINE doesn't support such + * a command, in which case no control command is called). The command is + * checked for input flags, and if necessary the argument will be converted + * to a numeric value. If cmd_optional is non-zero, then if the ENGINE + * doesn't support the given cmd_name the return value will be success + * anyway. This function is intended for applications to use so that users + * (or config files) can supply engine-specific config data to the ENGINE at + * run-time to control behaviour of specific engines. As such, it shouldn't + * be used for calling ENGINE_ctrl() functions that return data, deal with + * binary data, or that are otherwise supposed to be used directly through + * ENGINE_ctrl() in application code. Any "return" data from an ENGINE_ctrl() + * operation in this function will be lost - the return value is interpreted + * as failure if the return value is zero, success otherwise, and this + * function returns a boolean value as a result. In other words, vendors of + * 'ENGINE'-enabled devices should write ENGINE implementations with + * parameterisations that work in this scheme, so that compliant ENGINE-based + * applications can work consistently with the same configuration for the + * same ENGINE-enabled devices, across applications. + */ +int ENGINE_ctrl_cmd_string(ENGINE *e, const char *cmd_name, const char *arg, + int cmd_optional); + +/* + * These functions are useful for manufacturing new ENGINE structures. They + * don't address reference counting at all - one uses them to populate an + * ENGINE structure with personalised implementations of things prior to + * using it directly or adding it to the builtin ENGINE list in OpenSSL. + * These are also here so that the ENGINE structure doesn't have to be + * exposed and break binary compatibility! + */ +ENGINE *ENGINE_new(void); +int ENGINE_free(ENGINE *e); +int ENGINE_up_ref(ENGINE *e); +int ENGINE_set_id(ENGINE *e, const char *id); +int ENGINE_set_name(ENGINE *e, const char *name); +int ENGINE_set_RSA(ENGINE *e, const RSA_METHOD *rsa_meth); +int ENGINE_set_DSA(ENGINE *e, const DSA_METHOD *dsa_meth); +int ENGINE_set_EC(ENGINE *e, const EC_KEY_METHOD *ecdsa_meth); +int ENGINE_set_DH(ENGINE *e, const DH_METHOD *dh_meth); +int ENGINE_set_RAND(ENGINE *e, const RAND_METHOD *rand_meth); +int ENGINE_set_destroy_function(ENGINE *e, ENGINE_GEN_INT_FUNC_PTR destroy_f); +int ENGINE_set_init_function(ENGINE *e, ENGINE_GEN_INT_FUNC_PTR init_f); +int ENGINE_set_finish_function(ENGINE *e, ENGINE_GEN_INT_FUNC_PTR finish_f); +int ENGINE_set_ctrl_function(ENGINE *e, ENGINE_CTRL_FUNC_PTR ctrl_f); +int ENGINE_set_load_privkey_function(ENGINE *e, + ENGINE_LOAD_KEY_PTR loadpriv_f); +int ENGINE_set_load_pubkey_function(ENGINE *e, ENGINE_LOAD_KEY_PTR loadpub_f); +int ENGINE_set_load_ssl_client_cert_function(ENGINE *e, + ENGINE_SSL_CLIENT_CERT_PTR + loadssl_f); +int ENGINE_set_ciphers(ENGINE *e, ENGINE_CIPHERS_PTR f); +int ENGINE_set_digests(ENGINE *e, ENGINE_DIGESTS_PTR f); +int ENGINE_set_pkey_meths(ENGINE *e, ENGINE_PKEY_METHS_PTR f); +int ENGINE_set_pkey_asn1_meths(ENGINE *e, ENGINE_PKEY_ASN1_METHS_PTR f); +int ENGINE_set_flags(ENGINE *e, int flags); +int ENGINE_set_cmd_defns(ENGINE *e, const ENGINE_CMD_DEFN *defns); +/* These functions allow control over any per-structure ENGINE data. */ +#define ENGINE_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_ENGINE, l, p, newf, dupf, freef) +int ENGINE_set_ex_data(ENGINE *e, int idx, void *arg); +void *ENGINE_get_ex_data(const ENGINE *e, int idx); + +#if OPENSSL_API_COMPAT < 0x10100000L +/* + * This function previously cleaned up anything that needs it. Auto-deinit will + * now take care of it so it is no longer required to call this function. + */ +# define ENGINE_cleanup() while(0) continue +#endif + +/* + * These return values from within the ENGINE structure. These can be useful + * with functional references as well as structural references - it depends + * which you obtained. Using the result for functional purposes if you only + * obtained a structural reference may be problematic! + */ +const char *ENGINE_get_id(const ENGINE *e); +const char *ENGINE_get_name(const ENGINE *e); +const RSA_METHOD *ENGINE_get_RSA(const ENGINE *e); +const DSA_METHOD *ENGINE_get_DSA(const ENGINE *e); +const EC_KEY_METHOD *ENGINE_get_EC(const ENGINE *e); +const DH_METHOD *ENGINE_get_DH(const ENGINE *e); +const RAND_METHOD *ENGINE_get_RAND(const ENGINE *e); +ENGINE_GEN_INT_FUNC_PTR ENGINE_get_destroy_function(const ENGINE *e); +ENGINE_GEN_INT_FUNC_PTR ENGINE_get_init_function(const ENGINE *e); +ENGINE_GEN_INT_FUNC_PTR ENGINE_get_finish_function(const ENGINE *e); +ENGINE_CTRL_FUNC_PTR ENGINE_get_ctrl_function(const ENGINE *e); +ENGINE_LOAD_KEY_PTR ENGINE_get_load_privkey_function(const ENGINE *e); +ENGINE_LOAD_KEY_PTR ENGINE_get_load_pubkey_function(const ENGINE *e); +ENGINE_SSL_CLIENT_CERT_PTR ENGINE_get_ssl_client_cert_function(const ENGINE + *e); +ENGINE_CIPHERS_PTR ENGINE_get_ciphers(const ENGINE *e); +ENGINE_DIGESTS_PTR ENGINE_get_digests(const ENGINE *e); +ENGINE_PKEY_METHS_PTR ENGINE_get_pkey_meths(const ENGINE *e); +ENGINE_PKEY_ASN1_METHS_PTR ENGINE_get_pkey_asn1_meths(const ENGINE *e); +const EVP_CIPHER *ENGINE_get_cipher(ENGINE *e, int nid); +const EVP_MD *ENGINE_get_digest(ENGINE *e, int nid); +const EVP_PKEY_METHOD *ENGINE_get_pkey_meth(ENGINE *e, int nid); +const EVP_PKEY_ASN1_METHOD *ENGINE_get_pkey_asn1_meth(ENGINE *e, int nid); +const EVP_PKEY_ASN1_METHOD *ENGINE_get_pkey_asn1_meth_str(ENGINE *e, + const char *str, + int len); +const EVP_PKEY_ASN1_METHOD *ENGINE_pkey_asn1_find_str(ENGINE **pe, + const char *str, + int len); +const ENGINE_CMD_DEFN *ENGINE_get_cmd_defns(const ENGINE *e); +int ENGINE_get_flags(const ENGINE *e); + +/* + * FUNCTIONAL functions. These functions deal with ENGINE structures that + * have (or will) be initialised for use. Broadly speaking, the structural + * functions are useful for iterating the list of available engine types, + * creating new engine types, and other "list" operations. These functions + * actually deal with ENGINEs that are to be used. As such these functions + * can fail (if applicable) when particular engines are unavailable - eg. if + * a hardware accelerator is not attached or not functioning correctly. Each + * ENGINE has 2 reference counts; structural and functional. Every time a + * functional reference is obtained or released, a corresponding structural + * reference is automatically obtained or released too. + */ + +/* + * Initialise a engine type for use (or up its reference count if it's + * already in use). This will fail if the engine is not currently operational + * and cannot initialise. + */ +int ENGINE_init(ENGINE *e); +/* + * Free a functional reference to a engine type. This does not require a + * corresponding call to ENGINE_free as it also releases a structural + * reference. + */ +int ENGINE_finish(ENGINE *e); + +/* + * The following functions handle keys that are stored in some secondary + * location, handled by the engine. The storage may be on a card or + * whatever. + */ +EVP_PKEY *ENGINE_load_private_key(ENGINE *e, const char *key_id, + UI_METHOD *ui_method, void *callback_data); +EVP_PKEY *ENGINE_load_public_key(ENGINE *e, const char *key_id, + UI_METHOD *ui_method, void *callback_data); +int ENGINE_load_ssl_client_cert(ENGINE *e, SSL *s, + STACK_OF(X509_NAME) *ca_dn, X509 **pcert, + EVP_PKEY **ppkey, STACK_OF(X509) **pother, + UI_METHOD *ui_method, void *callback_data); + +/* + * This returns a pointer for the current ENGINE structure that is (by + * default) performing any RSA operations. The value returned is an + * incremented reference, so it should be free'd (ENGINE_finish) before it is + * discarded. + */ +ENGINE *ENGINE_get_default_RSA(void); +/* Same for the other "methods" */ +ENGINE *ENGINE_get_default_DSA(void); +ENGINE *ENGINE_get_default_EC(void); +ENGINE *ENGINE_get_default_DH(void); +ENGINE *ENGINE_get_default_RAND(void); +/* + * These functions can be used to get a functional reference to perform + * ciphering or digesting corresponding to "nid". + */ +ENGINE *ENGINE_get_cipher_engine(int nid); +ENGINE *ENGINE_get_digest_engine(int nid); +ENGINE *ENGINE_get_pkey_meth_engine(int nid); +ENGINE *ENGINE_get_pkey_asn1_meth_engine(int nid); + +/* + * This sets a new default ENGINE structure for performing RSA operations. If + * the result is non-zero (success) then the ENGINE structure will have had + * its reference count up'd so the caller should still free their own + * reference 'e'. + */ +int ENGINE_set_default_RSA(ENGINE *e); +int ENGINE_set_default_string(ENGINE *e, const char *def_list); +/* Same for the other "methods" */ +int ENGINE_set_default_DSA(ENGINE *e); +int ENGINE_set_default_EC(ENGINE *e); +int ENGINE_set_default_DH(ENGINE *e); +int ENGINE_set_default_RAND(ENGINE *e); +int ENGINE_set_default_ciphers(ENGINE *e); +int ENGINE_set_default_digests(ENGINE *e); +int ENGINE_set_default_pkey_meths(ENGINE *e); +int ENGINE_set_default_pkey_asn1_meths(ENGINE *e); + +/* + * The combination "set" - the flags are bitwise "OR"d from the + * ENGINE_METHOD_*** defines above. As with the "ENGINE_register_complete()" + * function, this function can result in unnecessary static linkage. If your + * application requires only specific functionality, consider using more + * selective functions. + */ +int ENGINE_set_default(ENGINE *e, unsigned int flags); + +void ENGINE_add_conf_module(void); + +/* Deprecated functions ... */ +/* int ENGINE_clear_defaults(void); */ + +/**************************/ +/* DYNAMIC ENGINE SUPPORT */ +/**************************/ + +/* Binary/behaviour compatibility levels */ +# define OSSL_DYNAMIC_VERSION (unsigned long)0x00030000 +/* + * Binary versions older than this are too old for us (whether we're a loader + * or a loadee) + */ +# define OSSL_DYNAMIC_OLDEST (unsigned long)0x00030000 + +/* + * When compiling an ENGINE entirely as an external shared library, loadable + * by the "dynamic" ENGINE, these types are needed. The 'dynamic_fns' + * structure type provides the calling application's (or library's) error + * functionality and memory management function pointers to the loaded + * library. These should be used/set in the loaded library code so that the + * loading application's 'state' will be used/changed in all operations. The + * 'static_state' pointer allows the loaded library to know if it shares the + * same static data as the calling application (or library), and thus whether + * these callbacks need to be set or not. + */ +typedef void *(*dyn_MEM_malloc_fn) (size_t, const char *, int); +typedef void *(*dyn_MEM_realloc_fn) (void *, size_t, const char *, int); +typedef void (*dyn_MEM_free_fn) (void *, const char *, int); +typedef struct st_dynamic_MEM_fns { + dyn_MEM_malloc_fn malloc_fn; + dyn_MEM_realloc_fn realloc_fn; + dyn_MEM_free_fn free_fn; +} dynamic_MEM_fns; +/* + * FIXME: Perhaps the memory and locking code (crypto.h) should declare and + * use these types so we (and any other dependent code) can simplify a bit?? + */ +/* The top-level structure */ +typedef struct st_dynamic_fns { + void *static_state; + dynamic_MEM_fns mem_fns; +} dynamic_fns; + +/* + * The version checking function should be of this prototype. NB: The + * ossl_version value passed in is the OSSL_DYNAMIC_VERSION of the loading + * code. If this function returns zero, it indicates a (potential) version + * incompatibility and the loaded library doesn't believe it can proceed. + * Otherwise, the returned value is the (latest) version supported by the + * loading library. The loader may still decide that the loaded code's + * version is unsatisfactory and could veto the load. The function is + * expected to be implemented with the symbol name "v_check", and a default + * implementation can be fully instantiated with + * IMPLEMENT_DYNAMIC_CHECK_FN(). + */ +typedef unsigned long (*dynamic_v_check_fn) (unsigned long ossl_version); +# define IMPLEMENT_DYNAMIC_CHECK_FN() \ + OPENSSL_EXPORT unsigned long v_check(unsigned long v); \ + OPENSSL_EXPORT unsigned long v_check(unsigned long v) { \ + if (v >= OSSL_DYNAMIC_OLDEST) return OSSL_DYNAMIC_VERSION; \ + return 0; } + +/* + * This function is passed the ENGINE structure to initialise with its own + * function and command settings. It should not adjust the structural or + * functional reference counts. If this function returns zero, (a) the load + * will be aborted, (b) the previous ENGINE state will be memcpy'd back onto + * the structure, and (c) the shared library will be unloaded. So + * implementations should do their own internal cleanup in failure + * circumstances otherwise they could leak. The 'id' parameter, if non-NULL, + * represents the ENGINE id that the loader is looking for. If this is NULL, + * the shared library can choose to return failure or to initialise a + * 'default' ENGINE. If non-NULL, the shared library must initialise only an + * ENGINE matching the passed 'id'. The function is expected to be + * implemented with the symbol name "bind_engine". A standard implementation + * can be instantiated with IMPLEMENT_DYNAMIC_BIND_FN(fn) where the parameter + * 'fn' is a callback function that populates the ENGINE structure and + * returns an int value (zero for failure). 'fn' should have prototype; + * [static] int fn(ENGINE *e, const char *id); + */ +typedef int (*dynamic_bind_engine) (ENGINE *e, const char *id, + const dynamic_fns *fns); +# define IMPLEMENT_DYNAMIC_BIND_FN(fn) \ + OPENSSL_EXPORT \ + int bind_engine(ENGINE *e, const char *id, const dynamic_fns *fns); \ + OPENSSL_EXPORT \ + int bind_engine(ENGINE *e, const char *id, const dynamic_fns *fns) { \ + if (ENGINE_get_static_state() == fns->static_state) goto skip_cbs; \ + CRYPTO_set_mem_functions(fns->mem_fns.malloc_fn, \ + fns->mem_fns.realloc_fn, \ + fns->mem_fns.free_fn); \ + skip_cbs: \ + if (!fn(e, id)) return 0; \ + return 1; } + +/* + * If the loading application (or library) and the loaded ENGINE library + * share the same static data (eg. they're both dynamically linked to the + * same libcrypto.so) we need a way to avoid trying to set system callbacks - + * this would fail, and for the same reason that it's unnecessary to try. If + * the loaded ENGINE has (or gets from through the loader) its own copy of + * the libcrypto static data, we will need to set the callbacks. The easiest + * way to detect this is to have a function that returns a pointer to some + * static data and let the loading application and loaded ENGINE compare + * their respective values. + */ +void *ENGINE_get_static_state(void); + +# if defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__DragonFly__) +DEPRECATEDIN_1_1_0(void ENGINE_setup_bsd_cryptodev(void)) +# endif + + +# ifdef __cplusplus +} +# endif +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/engineerr.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/engineerr.h new file mode 100644 index 00000000..05e84bd2 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/engineerr.h @@ -0,0 +1,111 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2019 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_ENGINEERR_H +# define HEADER_ENGINEERR_H + +# ifndef HEADER_SYMHACKS_H +# include +# endif + +# include + +# ifndef OPENSSL_NO_ENGINE + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_ENGINE_strings(void); + +/* + * ENGINE function codes. + */ +# define ENGINE_F_DIGEST_UPDATE 198 +# define ENGINE_F_DYNAMIC_CTRL 180 +# define ENGINE_F_DYNAMIC_GET_DATA_CTX 181 +# define ENGINE_F_DYNAMIC_LOAD 182 +# define ENGINE_F_DYNAMIC_SET_DATA_CTX 183 +# define ENGINE_F_ENGINE_ADD 105 +# define ENGINE_F_ENGINE_BY_ID 106 +# define ENGINE_F_ENGINE_CMD_IS_EXECUTABLE 170 +# define ENGINE_F_ENGINE_CTRL 142 +# define ENGINE_F_ENGINE_CTRL_CMD 178 +# define ENGINE_F_ENGINE_CTRL_CMD_STRING 171 +# define ENGINE_F_ENGINE_FINISH 107 +# define ENGINE_F_ENGINE_GET_CIPHER 185 +# define ENGINE_F_ENGINE_GET_DIGEST 186 +# define ENGINE_F_ENGINE_GET_FIRST 195 +# define ENGINE_F_ENGINE_GET_LAST 196 +# define ENGINE_F_ENGINE_GET_NEXT 115 +# define ENGINE_F_ENGINE_GET_PKEY_ASN1_METH 193 +# define ENGINE_F_ENGINE_GET_PKEY_METH 192 +# define ENGINE_F_ENGINE_GET_PREV 116 +# define ENGINE_F_ENGINE_INIT 119 +# define ENGINE_F_ENGINE_LIST_ADD 120 +# define ENGINE_F_ENGINE_LIST_REMOVE 121 +# define ENGINE_F_ENGINE_LOAD_PRIVATE_KEY 150 +# define ENGINE_F_ENGINE_LOAD_PUBLIC_KEY 151 +# define ENGINE_F_ENGINE_LOAD_SSL_CLIENT_CERT 194 +# define ENGINE_F_ENGINE_NEW 122 +# define ENGINE_F_ENGINE_PKEY_ASN1_FIND_STR 197 +# define ENGINE_F_ENGINE_REMOVE 123 +# define ENGINE_F_ENGINE_SET_DEFAULT_STRING 189 +# define ENGINE_F_ENGINE_SET_ID 129 +# define ENGINE_F_ENGINE_SET_NAME 130 +# define ENGINE_F_ENGINE_TABLE_REGISTER 184 +# define ENGINE_F_ENGINE_UNLOCKED_FINISH 191 +# define ENGINE_F_ENGINE_UP_REF 190 +# define ENGINE_F_INT_CLEANUP_ITEM 199 +# define ENGINE_F_INT_CTRL_HELPER 172 +# define ENGINE_F_INT_ENGINE_CONFIGURE 188 +# define ENGINE_F_INT_ENGINE_MODULE_INIT 187 +# define ENGINE_F_OSSL_HMAC_INIT 200 + +/* + * ENGINE reason codes. + */ +# define ENGINE_R_ALREADY_LOADED 100 +# define ENGINE_R_ARGUMENT_IS_NOT_A_NUMBER 133 +# define ENGINE_R_CMD_NOT_EXECUTABLE 134 +# define ENGINE_R_COMMAND_TAKES_INPUT 135 +# define ENGINE_R_COMMAND_TAKES_NO_INPUT 136 +# define ENGINE_R_CONFLICTING_ENGINE_ID 103 +# define ENGINE_R_CTRL_COMMAND_NOT_IMPLEMENTED 119 +# define ENGINE_R_DSO_FAILURE 104 +# define ENGINE_R_DSO_NOT_FOUND 132 +# define ENGINE_R_ENGINES_SECTION_ERROR 148 +# define ENGINE_R_ENGINE_CONFIGURATION_ERROR 102 +# define ENGINE_R_ENGINE_IS_NOT_IN_LIST 105 +# define ENGINE_R_ENGINE_SECTION_ERROR 149 +# define ENGINE_R_FAILED_LOADING_PRIVATE_KEY 128 +# define ENGINE_R_FAILED_LOADING_PUBLIC_KEY 129 +# define ENGINE_R_FINISH_FAILED 106 +# define ENGINE_R_ID_OR_NAME_MISSING 108 +# define ENGINE_R_INIT_FAILED 109 +# define ENGINE_R_INTERNAL_LIST_ERROR 110 +# define ENGINE_R_INVALID_ARGUMENT 143 +# define ENGINE_R_INVALID_CMD_NAME 137 +# define ENGINE_R_INVALID_CMD_NUMBER 138 +# define ENGINE_R_INVALID_INIT_VALUE 151 +# define ENGINE_R_INVALID_STRING 150 +# define ENGINE_R_NOT_INITIALISED 117 +# define ENGINE_R_NOT_LOADED 112 +# define ENGINE_R_NO_CONTROL_FUNCTION 120 +# define ENGINE_R_NO_INDEX 144 +# define ENGINE_R_NO_LOAD_FUNCTION 125 +# define ENGINE_R_NO_REFERENCE 130 +# define ENGINE_R_NO_SUCH_ENGINE 116 +# define ENGINE_R_UNIMPLEMENTED_CIPHER 146 +# define ENGINE_R_UNIMPLEMENTED_DIGEST 147 +# define ENGINE_R_UNIMPLEMENTED_PUBLIC_KEY_METHOD 101 +# define ENGINE_R_VERSION_INCOMPATIBILITY 145 + +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/err.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/err.h new file mode 100644 index 00000000..b49f8812 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/err.h @@ -0,0 +1,274 @@ +/* + * Copyright 1995-2019 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_ERR_H +# define HEADER_ERR_H + +# include + +# ifndef OPENSSL_NO_STDIO +# include +# include +# endif + +# include +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +# ifndef OPENSSL_NO_ERR +# define ERR_PUT_error(a,b,c,d,e) ERR_put_error(a,b,c,d,e) +# else +# define ERR_PUT_error(a,b,c,d,e) ERR_put_error(a,b,c,NULL,0) +# endif + +# include + +# define ERR_TXT_MALLOCED 0x01 +# define ERR_TXT_STRING 0x02 + +# define ERR_FLAG_MARK 0x01 +# define ERR_FLAG_CLEAR 0x02 + +# define ERR_NUM_ERRORS 16 +typedef struct err_state_st { + int err_flags[ERR_NUM_ERRORS]; + unsigned long err_buffer[ERR_NUM_ERRORS]; + char *err_data[ERR_NUM_ERRORS]; + int err_data_flags[ERR_NUM_ERRORS]; + const char *err_file[ERR_NUM_ERRORS]; + int err_line[ERR_NUM_ERRORS]; + int top, bottom; +} ERR_STATE; + +/* library */ +# define ERR_LIB_NONE 1 +# define ERR_LIB_SYS 2 +# define ERR_LIB_BN 3 +# define ERR_LIB_RSA 4 +# define ERR_LIB_DH 5 +# define ERR_LIB_EVP 6 +# define ERR_LIB_BUF 7 +# define ERR_LIB_OBJ 8 +# define ERR_LIB_PEM 9 +# define ERR_LIB_DSA 10 +# define ERR_LIB_X509 11 +/* #define ERR_LIB_METH 12 */ +# define ERR_LIB_ASN1 13 +# define ERR_LIB_CONF 14 +# define ERR_LIB_CRYPTO 15 +# define ERR_LIB_EC 16 +# define ERR_LIB_SSL 20 +/* #define ERR_LIB_SSL23 21 */ +/* #define ERR_LIB_SSL2 22 */ +/* #define ERR_LIB_SSL3 23 */ +/* #define ERR_LIB_RSAREF 30 */ +/* #define ERR_LIB_PROXY 31 */ +# define ERR_LIB_BIO 32 +# define ERR_LIB_PKCS7 33 +# define ERR_LIB_X509V3 34 +# define ERR_LIB_PKCS12 35 +# define ERR_LIB_RAND 36 +# define ERR_LIB_DSO 37 +# define ERR_LIB_ENGINE 38 +# define ERR_LIB_OCSP 39 +# define ERR_LIB_UI 40 +# define ERR_LIB_COMP 41 +# define ERR_LIB_ECDSA 42 +# define ERR_LIB_ECDH 43 +# define ERR_LIB_OSSL_STORE 44 +# define ERR_LIB_FIPS 45 +# define ERR_LIB_CMS 46 +# define ERR_LIB_TS 47 +# define ERR_LIB_HMAC 48 +/* # define ERR_LIB_JPAKE 49 */ +# define ERR_LIB_CT 50 +# define ERR_LIB_ASYNC 51 +# define ERR_LIB_KDF 52 +# define ERR_LIB_SM2 53 + +# define ERR_LIB_USER 128 + +# define SYSerr(f,r) ERR_PUT_error(ERR_LIB_SYS,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define BNerr(f,r) ERR_PUT_error(ERR_LIB_BN,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define RSAerr(f,r) ERR_PUT_error(ERR_LIB_RSA,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define DHerr(f,r) ERR_PUT_error(ERR_LIB_DH,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define EVPerr(f,r) ERR_PUT_error(ERR_LIB_EVP,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define BUFerr(f,r) ERR_PUT_error(ERR_LIB_BUF,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define OBJerr(f,r) ERR_PUT_error(ERR_LIB_OBJ,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define PEMerr(f,r) ERR_PUT_error(ERR_LIB_PEM,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define DSAerr(f,r) ERR_PUT_error(ERR_LIB_DSA,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define X509err(f,r) ERR_PUT_error(ERR_LIB_X509,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define ASN1err(f,r) ERR_PUT_error(ERR_LIB_ASN1,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define CONFerr(f,r) ERR_PUT_error(ERR_LIB_CONF,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define CRYPTOerr(f,r) ERR_PUT_error(ERR_LIB_CRYPTO,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define ECerr(f,r) ERR_PUT_error(ERR_LIB_EC,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define SSLerr(f,r) ERR_PUT_error(ERR_LIB_SSL,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define BIOerr(f,r) ERR_PUT_error(ERR_LIB_BIO,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define PKCS7err(f,r) ERR_PUT_error(ERR_LIB_PKCS7,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define X509V3err(f,r) ERR_PUT_error(ERR_LIB_X509V3,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define PKCS12err(f,r) ERR_PUT_error(ERR_LIB_PKCS12,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define RANDerr(f,r) ERR_PUT_error(ERR_LIB_RAND,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define DSOerr(f,r) ERR_PUT_error(ERR_LIB_DSO,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define ENGINEerr(f,r) ERR_PUT_error(ERR_LIB_ENGINE,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define OCSPerr(f,r) ERR_PUT_error(ERR_LIB_OCSP,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define UIerr(f,r) ERR_PUT_error(ERR_LIB_UI,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define COMPerr(f,r) ERR_PUT_error(ERR_LIB_COMP,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define ECDSAerr(f,r) ERR_PUT_error(ERR_LIB_ECDSA,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define ECDHerr(f,r) ERR_PUT_error(ERR_LIB_ECDH,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define OSSL_STOREerr(f,r) ERR_PUT_error(ERR_LIB_OSSL_STORE,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define FIPSerr(f,r) ERR_PUT_error(ERR_LIB_FIPS,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define CMSerr(f,r) ERR_PUT_error(ERR_LIB_CMS,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define TSerr(f,r) ERR_PUT_error(ERR_LIB_TS,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define HMACerr(f,r) ERR_PUT_error(ERR_LIB_HMAC,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define CTerr(f,r) ERR_PUT_error(ERR_LIB_CT,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define ASYNCerr(f,r) ERR_PUT_error(ERR_LIB_ASYNC,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define KDFerr(f,r) ERR_PUT_error(ERR_LIB_KDF,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define SM2err(f,r) ERR_PUT_error(ERR_LIB_SM2,(f),(r),OPENSSL_FILE,OPENSSL_LINE) + +# define ERR_PACK(l,f,r) ( \ + (((unsigned int)(l) & 0x0FF) << 24L) | \ + (((unsigned int)(f) & 0xFFF) << 12L) | \ + (((unsigned int)(r) & 0xFFF) ) ) +# define ERR_GET_LIB(l) (int)(((l) >> 24L) & 0x0FFL) +# define ERR_GET_FUNC(l) (int)(((l) >> 12L) & 0xFFFL) +# define ERR_GET_REASON(l) (int)( (l) & 0xFFFL) +# define ERR_FATAL_ERROR(l) (int)( (l) & ERR_R_FATAL) + +/* OS functions */ +# define SYS_F_FOPEN 1 +# define SYS_F_CONNECT 2 +# define SYS_F_GETSERVBYNAME 3 +# define SYS_F_SOCKET 4 +# define SYS_F_IOCTLSOCKET 5 +# define SYS_F_BIND 6 +# define SYS_F_LISTEN 7 +# define SYS_F_ACCEPT 8 +# define SYS_F_WSASTARTUP 9/* Winsock stuff */ +# define SYS_F_OPENDIR 10 +# define SYS_F_FREAD 11 +# define SYS_F_GETADDRINFO 12 +# define SYS_F_GETNAMEINFO 13 +# define SYS_F_SETSOCKOPT 14 +# define SYS_F_GETSOCKOPT 15 +# define SYS_F_GETSOCKNAME 16 +# define SYS_F_GETHOSTBYNAME 17 +# define SYS_F_FFLUSH 18 +# define SYS_F_OPEN 19 +# define SYS_F_CLOSE 20 +# define SYS_F_IOCTL 21 +# define SYS_F_STAT 22 +# define SYS_F_FCNTL 23 +# define SYS_F_FSTAT 24 + +/* reasons */ +# define ERR_R_SYS_LIB ERR_LIB_SYS/* 2 */ +# define ERR_R_BN_LIB ERR_LIB_BN/* 3 */ +# define ERR_R_RSA_LIB ERR_LIB_RSA/* 4 */ +# define ERR_R_DH_LIB ERR_LIB_DH/* 5 */ +# define ERR_R_EVP_LIB ERR_LIB_EVP/* 6 */ +# define ERR_R_BUF_LIB ERR_LIB_BUF/* 7 */ +# define ERR_R_OBJ_LIB ERR_LIB_OBJ/* 8 */ +# define ERR_R_PEM_LIB ERR_LIB_PEM/* 9 */ +# define ERR_R_DSA_LIB ERR_LIB_DSA/* 10 */ +# define ERR_R_X509_LIB ERR_LIB_X509/* 11 */ +# define ERR_R_ASN1_LIB ERR_LIB_ASN1/* 13 */ +# define ERR_R_EC_LIB ERR_LIB_EC/* 16 */ +# define ERR_R_BIO_LIB ERR_LIB_BIO/* 32 */ +# define ERR_R_PKCS7_LIB ERR_LIB_PKCS7/* 33 */ +# define ERR_R_X509V3_LIB ERR_LIB_X509V3/* 34 */ +# define ERR_R_ENGINE_LIB ERR_LIB_ENGINE/* 38 */ +# define ERR_R_UI_LIB ERR_LIB_UI/* 40 */ +# define ERR_R_ECDSA_LIB ERR_LIB_ECDSA/* 42 */ +# define ERR_R_OSSL_STORE_LIB ERR_LIB_OSSL_STORE/* 44 */ + +# define ERR_R_NESTED_ASN1_ERROR 58 +# define ERR_R_MISSING_ASN1_EOS 63 + +/* fatal error */ +# define ERR_R_FATAL 64 +# define ERR_R_MALLOC_FAILURE (1|ERR_R_FATAL) +# define ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED (2|ERR_R_FATAL) +# define ERR_R_PASSED_NULL_PARAMETER (3|ERR_R_FATAL) +# define ERR_R_INTERNAL_ERROR (4|ERR_R_FATAL) +# define ERR_R_DISABLED (5|ERR_R_FATAL) +# define ERR_R_INIT_FAIL (6|ERR_R_FATAL) +# define ERR_R_PASSED_INVALID_ARGUMENT (7) +# define ERR_R_OPERATION_FAIL (8|ERR_R_FATAL) + +/* + * 99 is the maximum possible ERR_R_... code, higher values are reserved for + * the individual libraries + */ + +typedef struct ERR_string_data_st { + unsigned long error; + const char *string; +} ERR_STRING_DATA; + +DEFINE_LHASH_OF(ERR_STRING_DATA); + +void ERR_put_error(int lib, int func, int reason, const char *file, int line); +void ERR_set_error_data(char *data, int flags); + +unsigned long ERR_get_error(void); +unsigned long ERR_get_error_line(const char **file, int *line); +unsigned long ERR_get_error_line_data(const char **file, int *line, + const char **data, int *flags); +unsigned long ERR_peek_error(void); +unsigned long ERR_peek_error_line(const char **file, int *line); +unsigned long ERR_peek_error_line_data(const char **file, int *line, + const char **data, int *flags); +unsigned long ERR_peek_last_error(void); +unsigned long ERR_peek_last_error_line(const char **file, int *line); +unsigned long ERR_peek_last_error_line_data(const char **file, int *line, + const char **data, int *flags); +void ERR_clear_error(void); +char *ERR_error_string(unsigned long e, char *buf); +void ERR_error_string_n(unsigned long e, char *buf, size_t len); +const char *ERR_lib_error_string(unsigned long e); +const char *ERR_func_error_string(unsigned long e); +const char *ERR_reason_error_string(unsigned long e); +void ERR_print_errors_cb(int (*cb) (const char *str, size_t len, void *u), + void *u); +# ifndef OPENSSL_NO_STDIO +void ERR_print_errors_fp(FILE *fp); +# endif +void ERR_print_errors(BIO *bp); +void ERR_add_error_data(int num, ...); +void ERR_add_error_vdata(int num, va_list args); +int ERR_load_strings(int lib, ERR_STRING_DATA *str); +int ERR_load_strings_const(const ERR_STRING_DATA *str); +int ERR_unload_strings(int lib, ERR_STRING_DATA *str); +int ERR_load_ERR_strings(void); + +#if OPENSSL_API_COMPAT < 0x10100000L +# define ERR_load_crypto_strings() \ + OPENSSL_init_crypto(OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL) +# define ERR_free_strings() while(0) continue +#endif + +DEPRECATEDIN_1_1_0(void ERR_remove_thread_state(void *)) +DEPRECATEDIN_1_0_0(void ERR_remove_state(unsigned long pid)) +ERR_STATE *ERR_get_state(void); + +int ERR_get_next_error_library(void); + +int ERR_set_mark(void); +int ERR_pop_to_mark(void); +int ERR_clear_last_mark(void); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/evp.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/evp.h new file mode 100644 index 00000000..a411f3f2 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/evp.h @@ -0,0 +1,1666 @@ +/* + * Copyright 1995-2019 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_ENVELOPE_H +# define HEADER_ENVELOPE_H + +# include +# include +# include +# include +# include + +# define EVP_MAX_MD_SIZE 64/* longest known is SHA512 */ +# define EVP_MAX_KEY_LENGTH 64 +# define EVP_MAX_IV_LENGTH 16 +# define EVP_MAX_BLOCK_LENGTH 32 + +# define PKCS5_SALT_LEN 8 +/* Default PKCS#5 iteration count */ +# define PKCS5_DEFAULT_ITER 2048 + +# include + +# define EVP_PK_RSA 0x0001 +# define EVP_PK_DSA 0x0002 +# define EVP_PK_DH 0x0004 +# define EVP_PK_EC 0x0008 +# define EVP_PKT_SIGN 0x0010 +# define EVP_PKT_ENC 0x0020 +# define EVP_PKT_EXCH 0x0040 +# define EVP_PKS_RSA 0x0100 +# define EVP_PKS_DSA 0x0200 +# define EVP_PKS_EC 0x0400 + +# define EVP_PKEY_NONE NID_undef +# define EVP_PKEY_RSA NID_rsaEncryption +# define EVP_PKEY_RSA2 NID_rsa +# define EVP_PKEY_RSA_PSS NID_rsassaPss +# define EVP_PKEY_DSA NID_dsa +# define EVP_PKEY_DSA1 NID_dsa_2 +# define EVP_PKEY_DSA2 NID_dsaWithSHA +# define EVP_PKEY_DSA3 NID_dsaWithSHA1 +# define EVP_PKEY_DSA4 NID_dsaWithSHA1_2 +# define EVP_PKEY_DH NID_dhKeyAgreement +# define EVP_PKEY_DHX NID_dhpublicnumber +# define EVP_PKEY_EC NID_X9_62_id_ecPublicKey +# define EVP_PKEY_SM2 NID_sm2 +# define EVP_PKEY_HMAC NID_hmac +# define EVP_PKEY_CMAC NID_cmac +# define EVP_PKEY_SCRYPT NID_id_scrypt +# define EVP_PKEY_TLS1_PRF NID_tls1_prf +# define EVP_PKEY_HKDF NID_hkdf +# define EVP_PKEY_POLY1305 NID_poly1305 +# define EVP_PKEY_SIPHASH NID_siphash +# define EVP_PKEY_X25519 NID_X25519 +# define EVP_PKEY_ED25519 NID_ED25519 +# define EVP_PKEY_X448 NID_X448 +# define EVP_PKEY_ED448 NID_ED448 + +#ifdef __cplusplus +extern "C" { +#endif + +# define EVP_PKEY_MO_SIGN 0x0001 +# define EVP_PKEY_MO_VERIFY 0x0002 +# define EVP_PKEY_MO_ENCRYPT 0x0004 +# define EVP_PKEY_MO_DECRYPT 0x0008 + +# ifndef EVP_MD +EVP_MD *EVP_MD_meth_new(int md_type, int pkey_type); +EVP_MD *EVP_MD_meth_dup(const EVP_MD *md); +void EVP_MD_meth_free(EVP_MD *md); + +int EVP_MD_meth_set_input_blocksize(EVP_MD *md, int blocksize); +int EVP_MD_meth_set_result_size(EVP_MD *md, int resultsize); +int EVP_MD_meth_set_app_datasize(EVP_MD *md, int datasize); +int EVP_MD_meth_set_flags(EVP_MD *md, unsigned long flags); +int EVP_MD_meth_set_init(EVP_MD *md, int (*init)(EVP_MD_CTX *ctx)); +int EVP_MD_meth_set_update(EVP_MD *md, int (*update)(EVP_MD_CTX *ctx, + const void *data, + size_t count)); +int EVP_MD_meth_set_final(EVP_MD *md, int (*final)(EVP_MD_CTX *ctx, + unsigned char *md)); +int EVP_MD_meth_set_copy(EVP_MD *md, int (*copy)(EVP_MD_CTX *to, + const EVP_MD_CTX *from)); +int EVP_MD_meth_set_cleanup(EVP_MD *md, int (*cleanup)(EVP_MD_CTX *ctx)); +int EVP_MD_meth_set_ctrl(EVP_MD *md, int (*ctrl)(EVP_MD_CTX *ctx, int cmd, + int p1, void *p2)); + +int EVP_MD_meth_get_input_blocksize(const EVP_MD *md); +int EVP_MD_meth_get_result_size(const EVP_MD *md); +int EVP_MD_meth_get_app_datasize(const EVP_MD *md); +unsigned long EVP_MD_meth_get_flags(const EVP_MD *md); +int (*EVP_MD_meth_get_init(const EVP_MD *md))(EVP_MD_CTX *ctx); +int (*EVP_MD_meth_get_update(const EVP_MD *md))(EVP_MD_CTX *ctx, + const void *data, + size_t count); +int (*EVP_MD_meth_get_final(const EVP_MD *md))(EVP_MD_CTX *ctx, + unsigned char *md); +int (*EVP_MD_meth_get_copy(const EVP_MD *md))(EVP_MD_CTX *to, + const EVP_MD_CTX *from); +int (*EVP_MD_meth_get_cleanup(const EVP_MD *md))(EVP_MD_CTX *ctx); +int (*EVP_MD_meth_get_ctrl(const EVP_MD *md))(EVP_MD_CTX *ctx, int cmd, + int p1, void *p2); + +/* digest can only handle a single block */ +# define EVP_MD_FLAG_ONESHOT 0x0001 + +/* digest is extensible-output function, XOF */ +# define EVP_MD_FLAG_XOF 0x0002 + +/* DigestAlgorithmIdentifier flags... */ + +# define EVP_MD_FLAG_DIGALGID_MASK 0x0018 + +/* NULL or absent parameter accepted. Use NULL */ + +# define EVP_MD_FLAG_DIGALGID_NULL 0x0000 + +/* NULL or absent parameter accepted. Use NULL for PKCS#1 otherwise absent */ + +# define EVP_MD_FLAG_DIGALGID_ABSENT 0x0008 + +/* Custom handling via ctrl */ + +# define EVP_MD_FLAG_DIGALGID_CUSTOM 0x0018 + +/* Note if suitable for use in FIPS mode */ +# define EVP_MD_FLAG_FIPS 0x0400 + +/* Digest ctrls */ + +# define EVP_MD_CTRL_DIGALGID 0x1 +# define EVP_MD_CTRL_MICALG 0x2 +# define EVP_MD_CTRL_XOF_LEN 0x3 + +/* Minimum Algorithm specific ctrl value */ + +# define EVP_MD_CTRL_ALG_CTRL 0x1000 + +# endif /* !EVP_MD */ + +/* values for EVP_MD_CTX flags */ + +# define EVP_MD_CTX_FLAG_ONESHOT 0x0001/* digest update will be + * called once only */ +# define EVP_MD_CTX_FLAG_CLEANED 0x0002/* context has already been + * cleaned */ +# define EVP_MD_CTX_FLAG_REUSE 0x0004/* Don't free up ctx->md_data + * in EVP_MD_CTX_reset */ +/* + * FIPS and pad options are ignored in 1.0.0, definitions are here so we + * don't accidentally reuse the values for other purposes. + */ + +# define EVP_MD_CTX_FLAG_NON_FIPS_ALLOW 0x0008/* Allow use of non FIPS + * digest in FIPS mode */ + +/* + * The following PAD options are also currently ignored in 1.0.0, digest + * parameters are handled through EVP_DigestSign*() and EVP_DigestVerify*() + * instead. + */ +# define EVP_MD_CTX_FLAG_PAD_MASK 0xF0/* RSA mode to use */ +# define EVP_MD_CTX_FLAG_PAD_PKCS1 0x00/* PKCS#1 v1.5 mode */ +# define EVP_MD_CTX_FLAG_PAD_X931 0x10/* X9.31 mode */ +# define EVP_MD_CTX_FLAG_PAD_PSS 0x20/* PSS mode */ + +# define EVP_MD_CTX_FLAG_NO_INIT 0x0100/* Don't initialize md_data */ +/* + * Some functions such as EVP_DigestSign only finalise copies of internal + * contexts so additional data can be included after the finalisation call. + * This is inefficient if this functionality is not required: it is disabled + * if the following flag is set. + */ +# define EVP_MD_CTX_FLAG_FINALISE 0x0200 +/* NOTE: 0x0400 is reserved for internal usage */ + +EVP_CIPHER *EVP_CIPHER_meth_new(int cipher_type, int block_size, int key_len); +EVP_CIPHER *EVP_CIPHER_meth_dup(const EVP_CIPHER *cipher); +void EVP_CIPHER_meth_free(EVP_CIPHER *cipher); + +int EVP_CIPHER_meth_set_iv_length(EVP_CIPHER *cipher, int iv_len); +int EVP_CIPHER_meth_set_flags(EVP_CIPHER *cipher, unsigned long flags); +int EVP_CIPHER_meth_set_impl_ctx_size(EVP_CIPHER *cipher, int ctx_size); +int EVP_CIPHER_meth_set_init(EVP_CIPHER *cipher, + int (*init) (EVP_CIPHER_CTX *ctx, + const unsigned char *key, + const unsigned char *iv, + int enc)); +int EVP_CIPHER_meth_set_do_cipher(EVP_CIPHER *cipher, + int (*do_cipher) (EVP_CIPHER_CTX *ctx, + unsigned char *out, + const unsigned char *in, + size_t inl)); +int EVP_CIPHER_meth_set_cleanup(EVP_CIPHER *cipher, + int (*cleanup) (EVP_CIPHER_CTX *)); +int EVP_CIPHER_meth_set_set_asn1_params(EVP_CIPHER *cipher, + int (*set_asn1_parameters) (EVP_CIPHER_CTX *, + ASN1_TYPE *)); +int EVP_CIPHER_meth_set_get_asn1_params(EVP_CIPHER *cipher, + int (*get_asn1_parameters) (EVP_CIPHER_CTX *, + ASN1_TYPE *)); +int EVP_CIPHER_meth_set_ctrl(EVP_CIPHER *cipher, + int (*ctrl) (EVP_CIPHER_CTX *, int type, + int arg, void *ptr)); + +int (*EVP_CIPHER_meth_get_init(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *ctx, + const unsigned char *key, + const unsigned char *iv, + int enc); +int (*EVP_CIPHER_meth_get_do_cipher(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *ctx, + unsigned char *out, + const unsigned char *in, + size_t inl); +int (*EVP_CIPHER_meth_get_cleanup(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *); +int (*EVP_CIPHER_meth_get_set_asn1_params(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *, + ASN1_TYPE *); +int (*EVP_CIPHER_meth_get_get_asn1_params(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *, + ASN1_TYPE *); +int (*EVP_CIPHER_meth_get_ctrl(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *, + int type, int arg, + void *ptr); + +/* Values for cipher flags */ + +/* Modes for ciphers */ + +# define EVP_CIPH_STREAM_CIPHER 0x0 +# define EVP_CIPH_ECB_MODE 0x1 +# define EVP_CIPH_CBC_MODE 0x2 +# define EVP_CIPH_CFB_MODE 0x3 +# define EVP_CIPH_OFB_MODE 0x4 +# define EVP_CIPH_CTR_MODE 0x5 +# define EVP_CIPH_GCM_MODE 0x6 +# define EVP_CIPH_CCM_MODE 0x7 +# define EVP_CIPH_XTS_MODE 0x10001 +# define EVP_CIPH_WRAP_MODE 0x10002 +# define EVP_CIPH_OCB_MODE 0x10003 +# define EVP_CIPH_MODE 0xF0007 +/* Set if variable length cipher */ +# define EVP_CIPH_VARIABLE_LENGTH 0x8 +/* Set if the iv handling should be done by the cipher itself */ +# define EVP_CIPH_CUSTOM_IV 0x10 +/* Set if the cipher's init() function should be called if key is NULL */ +# define EVP_CIPH_ALWAYS_CALL_INIT 0x20 +/* Call ctrl() to init cipher parameters */ +# define EVP_CIPH_CTRL_INIT 0x40 +/* Don't use standard key length function */ +# define EVP_CIPH_CUSTOM_KEY_LENGTH 0x80 +/* Don't use standard block padding */ +# define EVP_CIPH_NO_PADDING 0x100 +/* cipher handles random key generation */ +# define EVP_CIPH_RAND_KEY 0x200 +/* cipher has its own additional copying logic */ +# define EVP_CIPH_CUSTOM_COPY 0x400 +/* Don't use standard iv length function */ +# define EVP_CIPH_CUSTOM_IV_LENGTH 0x800 +/* Allow use default ASN1 get/set iv */ +# define EVP_CIPH_FLAG_DEFAULT_ASN1 0x1000 +/* Buffer length in bits not bytes: CFB1 mode only */ +# define EVP_CIPH_FLAG_LENGTH_BITS 0x2000 +/* Note if suitable for use in FIPS mode */ +# define EVP_CIPH_FLAG_FIPS 0x4000 +/* Allow non FIPS cipher in FIPS mode */ +# define EVP_CIPH_FLAG_NON_FIPS_ALLOW 0x8000 +/* + * Cipher handles any and all padding logic as well as finalisation. + */ +# define EVP_CIPH_FLAG_CUSTOM_CIPHER 0x100000 +# define EVP_CIPH_FLAG_AEAD_CIPHER 0x200000 +# define EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK 0x400000 +/* Cipher can handle pipeline operations */ +# define EVP_CIPH_FLAG_PIPELINE 0X800000 + +/* + * Cipher context flag to indicate we can handle wrap mode: if allowed in + * older applications it could overflow buffers. + */ + +# define EVP_CIPHER_CTX_FLAG_WRAP_ALLOW 0x1 + +/* ctrl() values */ + +# define EVP_CTRL_INIT 0x0 +# define EVP_CTRL_SET_KEY_LENGTH 0x1 +# define EVP_CTRL_GET_RC2_KEY_BITS 0x2 +# define EVP_CTRL_SET_RC2_KEY_BITS 0x3 +# define EVP_CTRL_GET_RC5_ROUNDS 0x4 +# define EVP_CTRL_SET_RC5_ROUNDS 0x5 +# define EVP_CTRL_RAND_KEY 0x6 +# define EVP_CTRL_PBE_PRF_NID 0x7 +# define EVP_CTRL_COPY 0x8 +# define EVP_CTRL_AEAD_SET_IVLEN 0x9 +# define EVP_CTRL_AEAD_GET_TAG 0x10 +# define EVP_CTRL_AEAD_SET_TAG 0x11 +# define EVP_CTRL_AEAD_SET_IV_FIXED 0x12 +# define EVP_CTRL_GCM_SET_IVLEN EVP_CTRL_AEAD_SET_IVLEN +# define EVP_CTRL_GCM_GET_TAG EVP_CTRL_AEAD_GET_TAG +# define EVP_CTRL_GCM_SET_TAG EVP_CTRL_AEAD_SET_TAG +# define EVP_CTRL_GCM_SET_IV_FIXED EVP_CTRL_AEAD_SET_IV_FIXED +# define EVP_CTRL_GCM_IV_GEN 0x13 +# define EVP_CTRL_CCM_SET_IVLEN EVP_CTRL_AEAD_SET_IVLEN +# define EVP_CTRL_CCM_GET_TAG EVP_CTRL_AEAD_GET_TAG +# define EVP_CTRL_CCM_SET_TAG EVP_CTRL_AEAD_SET_TAG +# define EVP_CTRL_CCM_SET_IV_FIXED EVP_CTRL_AEAD_SET_IV_FIXED +# define EVP_CTRL_CCM_SET_L 0x14 +# define EVP_CTRL_CCM_SET_MSGLEN 0x15 +/* + * AEAD cipher deduces payload length and returns number of bytes required to + * store MAC and eventual padding. Subsequent call to EVP_Cipher even + * appends/verifies MAC. + */ +# define EVP_CTRL_AEAD_TLS1_AAD 0x16 +/* Used by composite AEAD ciphers, no-op in GCM, CCM... */ +# define EVP_CTRL_AEAD_SET_MAC_KEY 0x17 +/* Set the GCM invocation field, decrypt only */ +# define EVP_CTRL_GCM_SET_IV_INV 0x18 + +# define EVP_CTRL_TLS1_1_MULTIBLOCK_AAD 0x19 +# define EVP_CTRL_TLS1_1_MULTIBLOCK_ENCRYPT 0x1a +# define EVP_CTRL_TLS1_1_MULTIBLOCK_DECRYPT 0x1b +# define EVP_CTRL_TLS1_1_MULTIBLOCK_MAX_BUFSIZE 0x1c + +# define EVP_CTRL_SSL3_MASTER_SECRET 0x1d + +/* EVP_CTRL_SET_SBOX takes the char * specifying S-boxes */ +# define EVP_CTRL_SET_SBOX 0x1e +/* + * EVP_CTRL_SBOX_USED takes a 'size_t' and 'char *', pointing at a + * pre-allocated buffer with specified size + */ +# define EVP_CTRL_SBOX_USED 0x1f +/* EVP_CTRL_KEY_MESH takes 'size_t' number of bytes to mesh the key after, + * 0 switches meshing off + */ +# define EVP_CTRL_KEY_MESH 0x20 +/* EVP_CTRL_BLOCK_PADDING_MODE takes the padding mode */ +# define EVP_CTRL_BLOCK_PADDING_MODE 0x21 + +/* Set the output buffers to use for a pipelined operation */ +# define EVP_CTRL_SET_PIPELINE_OUTPUT_BUFS 0x22 +/* Set the input buffers to use for a pipelined operation */ +# define EVP_CTRL_SET_PIPELINE_INPUT_BUFS 0x23 +/* Set the input buffer lengths to use for a pipelined operation */ +# define EVP_CTRL_SET_PIPELINE_INPUT_LENS 0x24 + +# define EVP_CTRL_GET_IVLEN 0x25 + +/* Padding modes */ +#define EVP_PADDING_PKCS7 1 +#define EVP_PADDING_ISO7816_4 2 +#define EVP_PADDING_ANSI923 3 +#define EVP_PADDING_ISO10126 4 +#define EVP_PADDING_ZERO 5 + +/* RFC 5246 defines additional data to be 13 bytes in length */ +# define EVP_AEAD_TLS1_AAD_LEN 13 + +typedef struct { + unsigned char *out; + const unsigned char *inp; + size_t len; + unsigned int interleave; +} EVP_CTRL_TLS1_1_MULTIBLOCK_PARAM; + +/* GCM TLS constants */ +/* Length of fixed part of IV derived from PRF */ +# define EVP_GCM_TLS_FIXED_IV_LEN 4 +/* Length of explicit part of IV part of TLS records */ +# define EVP_GCM_TLS_EXPLICIT_IV_LEN 8 +/* Length of tag for TLS */ +# define EVP_GCM_TLS_TAG_LEN 16 + +/* CCM TLS constants */ +/* Length of fixed part of IV derived from PRF */ +# define EVP_CCM_TLS_FIXED_IV_LEN 4 +/* Length of explicit part of IV part of TLS records */ +# define EVP_CCM_TLS_EXPLICIT_IV_LEN 8 +/* Total length of CCM IV length for TLS */ +# define EVP_CCM_TLS_IV_LEN 12 +/* Length of tag for TLS */ +# define EVP_CCM_TLS_TAG_LEN 16 +/* Length of CCM8 tag for TLS */ +# define EVP_CCM8_TLS_TAG_LEN 8 + +/* Length of tag for TLS */ +# define EVP_CHACHAPOLY_TLS_TAG_LEN 16 + +typedef struct evp_cipher_info_st { + const EVP_CIPHER *cipher; + unsigned char iv[EVP_MAX_IV_LENGTH]; +} EVP_CIPHER_INFO; + + +/* Password based encryption function */ +typedef int (EVP_PBE_KEYGEN) (EVP_CIPHER_CTX *ctx, const char *pass, + int passlen, ASN1_TYPE *param, + const EVP_CIPHER *cipher, const EVP_MD *md, + int en_de); + +# ifndef OPENSSL_NO_RSA +# define EVP_PKEY_assign_RSA(pkey,rsa) EVP_PKEY_assign((pkey),EVP_PKEY_RSA,\ + (char *)(rsa)) +# endif + +# ifndef OPENSSL_NO_DSA +# define EVP_PKEY_assign_DSA(pkey,dsa) EVP_PKEY_assign((pkey),EVP_PKEY_DSA,\ + (char *)(dsa)) +# endif + +# ifndef OPENSSL_NO_DH +# define EVP_PKEY_assign_DH(pkey,dh) EVP_PKEY_assign((pkey),EVP_PKEY_DH,\ + (char *)(dh)) +# endif + +# ifndef OPENSSL_NO_EC +# define EVP_PKEY_assign_EC_KEY(pkey,eckey) EVP_PKEY_assign((pkey),EVP_PKEY_EC,\ + (char *)(eckey)) +# endif +# ifndef OPENSSL_NO_SIPHASH +# define EVP_PKEY_assign_SIPHASH(pkey,shkey) EVP_PKEY_assign((pkey),EVP_PKEY_SIPHASH,\ + (char *)(shkey)) +# endif + +# ifndef OPENSSL_NO_POLY1305 +# define EVP_PKEY_assign_POLY1305(pkey,polykey) EVP_PKEY_assign((pkey),EVP_PKEY_POLY1305,\ + (char *)(polykey)) +# endif + +/* Add some extra combinations */ +# define EVP_get_digestbynid(a) EVP_get_digestbyname(OBJ_nid2sn(a)) +# define EVP_get_digestbyobj(a) EVP_get_digestbynid(OBJ_obj2nid(a)) +# define EVP_get_cipherbynid(a) EVP_get_cipherbyname(OBJ_nid2sn(a)) +# define EVP_get_cipherbyobj(a) EVP_get_cipherbynid(OBJ_obj2nid(a)) + +int EVP_MD_type(const EVP_MD *md); +# define EVP_MD_nid(e) EVP_MD_type(e) +# define EVP_MD_name(e) OBJ_nid2sn(EVP_MD_nid(e)) +int EVP_MD_pkey_type(const EVP_MD *md); +int EVP_MD_size(const EVP_MD *md); +int EVP_MD_block_size(const EVP_MD *md); +unsigned long EVP_MD_flags(const EVP_MD *md); + +const EVP_MD *EVP_MD_CTX_md(const EVP_MD_CTX *ctx); +int (*EVP_MD_CTX_update_fn(EVP_MD_CTX *ctx))(EVP_MD_CTX *ctx, + const void *data, size_t count); +void EVP_MD_CTX_set_update_fn(EVP_MD_CTX *ctx, + int (*update) (EVP_MD_CTX *ctx, + const void *data, size_t count)); +# define EVP_MD_CTX_size(e) EVP_MD_size(EVP_MD_CTX_md(e)) +# define EVP_MD_CTX_block_size(e) EVP_MD_block_size(EVP_MD_CTX_md(e)) +# define EVP_MD_CTX_type(e) EVP_MD_type(EVP_MD_CTX_md(e)) +EVP_PKEY_CTX *EVP_MD_CTX_pkey_ctx(const EVP_MD_CTX *ctx); +void EVP_MD_CTX_set_pkey_ctx(EVP_MD_CTX *ctx, EVP_PKEY_CTX *pctx); +void *EVP_MD_CTX_md_data(const EVP_MD_CTX *ctx); + +int EVP_CIPHER_nid(const EVP_CIPHER *cipher); +# define EVP_CIPHER_name(e) OBJ_nid2sn(EVP_CIPHER_nid(e)) +int EVP_CIPHER_block_size(const EVP_CIPHER *cipher); +int EVP_CIPHER_impl_ctx_size(const EVP_CIPHER *cipher); +int EVP_CIPHER_key_length(const EVP_CIPHER *cipher); +int EVP_CIPHER_iv_length(const EVP_CIPHER *cipher); +unsigned long EVP_CIPHER_flags(const EVP_CIPHER *cipher); +# define EVP_CIPHER_mode(e) (EVP_CIPHER_flags(e) & EVP_CIPH_MODE) + +const EVP_CIPHER *EVP_CIPHER_CTX_cipher(const EVP_CIPHER_CTX *ctx); +int EVP_CIPHER_CTX_encrypting(const EVP_CIPHER_CTX *ctx); +int EVP_CIPHER_CTX_nid(const EVP_CIPHER_CTX *ctx); +int EVP_CIPHER_CTX_block_size(const EVP_CIPHER_CTX *ctx); +int EVP_CIPHER_CTX_key_length(const EVP_CIPHER_CTX *ctx); +int EVP_CIPHER_CTX_iv_length(const EVP_CIPHER_CTX *ctx); +const unsigned char *EVP_CIPHER_CTX_iv(const EVP_CIPHER_CTX *ctx); +const unsigned char *EVP_CIPHER_CTX_original_iv(const EVP_CIPHER_CTX *ctx); +unsigned char *EVP_CIPHER_CTX_iv_noconst(EVP_CIPHER_CTX *ctx); +unsigned char *EVP_CIPHER_CTX_buf_noconst(EVP_CIPHER_CTX *ctx); +int EVP_CIPHER_CTX_num(const EVP_CIPHER_CTX *ctx); +void EVP_CIPHER_CTX_set_num(EVP_CIPHER_CTX *ctx, int num); +int EVP_CIPHER_CTX_copy(EVP_CIPHER_CTX *out, const EVP_CIPHER_CTX *in); +void *EVP_CIPHER_CTX_get_app_data(const EVP_CIPHER_CTX *ctx); +void EVP_CIPHER_CTX_set_app_data(EVP_CIPHER_CTX *ctx, void *data); +void *EVP_CIPHER_CTX_get_cipher_data(const EVP_CIPHER_CTX *ctx); +void *EVP_CIPHER_CTX_set_cipher_data(EVP_CIPHER_CTX *ctx, void *cipher_data); +# define EVP_CIPHER_CTX_type(c) EVP_CIPHER_type(EVP_CIPHER_CTX_cipher(c)) +# if OPENSSL_API_COMPAT < 0x10100000L +# define EVP_CIPHER_CTX_flags(c) EVP_CIPHER_flags(EVP_CIPHER_CTX_cipher(c)) +# endif +# define EVP_CIPHER_CTX_mode(c) EVP_CIPHER_mode(EVP_CIPHER_CTX_cipher(c)) + +# define EVP_ENCODE_LENGTH(l) ((((l)+2)/3*4)+((l)/48+1)*2+80) +# define EVP_DECODE_LENGTH(l) (((l)+3)/4*3+80) + +# define EVP_SignInit_ex(a,b,c) EVP_DigestInit_ex(a,b,c) +# define EVP_SignInit(a,b) EVP_DigestInit(a,b) +# define EVP_SignUpdate(a,b,c) EVP_DigestUpdate(a,b,c) +# define EVP_VerifyInit_ex(a,b,c) EVP_DigestInit_ex(a,b,c) +# define EVP_VerifyInit(a,b) EVP_DigestInit(a,b) +# define EVP_VerifyUpdate(a,b,c) EVP_DigestUpdate(a,b,c) +# define EVP_OpenUpdate(a,b,c,d,e) EVP_DecryptUpdate(a,b,c,d,e) +# define EVP_SealUpdate(a,b,c,d,e) EVP_EncryptUpdate(a,b,c,d,e) +# define EVP_DigestSignUpdate(a,b,c) EVP_DigestUpdate(a,b,c) +# define EVP_DigestVerifyUpdate(a,b,c) EVP_DigestUpdate(a,b,c) + +# ifdef CONST_STRICT +void BIO_set_md(BIO *, const EVP_MD *md); +# else +# define BIO_set_md(b,md) BIO_ctrl(b,BIO_C_SET_MD,0,(char *)(md)) +# endif +# define BIO_get_md(b,mdp) BIO_ctrl(b,BIO_C_GET_MD,0,(char *)(mdp)) +# define BIO_get_md_ctx(b,mdcp) BIO_ctrl(b,BIO_C_GET_MD_CTX,0, \ + (char *)(mdcp)) +# define BIO_set_md_ctx(b,mdcp) BIO_ctrl(b,BIO_C_SET_MD_CTX,0, \ + (char *)(mdcp)) +# define BIO_get_cipher_status(b) BIO_ctrl(b,BIO_C_GET_CIPHER_STATUS,0,NULL) +# define BIO_get_cipher_ctx(b,c_pp) BIO_ctrl(b,BIO_C_GET_CIPHER_CTX,0, \ + (char *)(c_pp)) + +/*__owur*/ int EVP_Cipher(EVP_CIPHER_CTX *c, + unsigned char *out, + const unsigned char *in, unsigned int inl); + +# define EVP_add_cipher_alias(n,alias) \ + OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n)) +# define EVP_add_digest_alias(n,alias) \ + OBJ_NAME_add((alias),OBJ_NAME_TYPE_MD_METH|OBJ_NAME_ALIAS,(n)) +# define EVP_delete_cipher_alias(alias) \ + OBJ_NAME_remove(alias,OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS); +# define EVP_delete_digest_alias(alias) \ + OBJ_NAME_remove(alias,OBJ_NAME_TYPE_MD_METH|OBJ_NAME_ALIAS); + +int EVP_MD_CTX_ctrl(EVP_MD_CTX *ctx, int cmd, int p1, void *p2); +EVP_MD_CTX *EVP_MD_CTX_new(void); +int EVP_MD_CTX_reset(EVP_MD_CTX *ctx); +void EVP_MD_CTX_free(EVP_MD_CTX *ctx); +# define EVP_MD_CTX_create() EVP_MD_CTX_new() +# define EVP_MD_CTX_init(ctx) EVP_MD_CTX_reset((ctx)) +# define EVP_MD_CTX_destroy(ctx) EVP_MD_CTX_free((ctx)) +__owur int EVP_MD_CTX_copy_ex(EVP_MD_CTX *out, const EVP_MD_CTX *in); +void EVP_MD_CTX_set_flags(EVP_MD_CTX *ctx, int flags); +void EVP_MD_CTX_clear_flags(EVP_MD_CTX *ctx, int flags); +int EVP_MD_CTX_test_flags(const EVP_MD_CTX *ctx, int flags); +__owur int EVP_DigestInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type, + ENGINE *impl); +__owur int EVP_DigestUpdate(EVP_MD_CTX *ctx, const void *d, + size_t cnt); +__owur int EVP_DigestFinal_ex(EVP_MD_CTX *ctx, unsigned char *md, + unsigned int *s); +__owur int EVP_Digest(const void *data, size_t count, + unsigned char *md, unsigned int *size, + const EVP_MD *type, ENGINE *impl); + +__owur int EVP_MD_CTX_copy(EVP_MD_CTX *out, const EVP_MD_CTX *in); +__owur int EVP_DigestInit(EVP_MD_CTX *ctx, const EVP_MD *type); +__owur int EVP_DigestFinal(EVP_MD_CTX *ctx, unsigned char *md, + unsigned int *s); +__owur int EVP_DigestFinalXOF(EVP_MD_CTX *ctx, unsigned char *md, + size_t len); + +int EVP_read_pw_string(char *buf, int length, const char *prompt, int verify); +int EVP_read_pw_string_min(char *buf, int minlen, int maxlen, + const char *prompt, int verify); +void EVP_set_pw_prompt(const char *prompt); +char *EVP_get_pw_prompt(void); + +__owur int EVP_BytesToKey(const EVP_CIPHER *type, const EVP_MD *md, + const unsigned char *salt, + const unsigned char *data, int datal, int count, + unsigned char *key, unsigned char *iv); + +void EVP_CIPHER_CTX_set_flags(EVP_CIPHER_CTX *ctx, int flags); +void EVP_CIPHER_CTX_clear_flags(EVP_CIPHER_CTX *ctx, int flags); +int EVP_CIPHER_CTX_test_flags(const EVP_CIPHER_CTX *ctx, int flags); + +__owur int EVP_EncryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, + const unsigned char *key, const unsigned char *iv); +/*__owur*/ int EVP_EncryptInit_ex(EVP_CIPHER_CTX *ctx, + const EVP_CIPHER *cipher, ENGINE *impl, + const unsigned char *key, + const unsigned char *iv); +/*__owur*/ int EVP_EncryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, + int *outl, const unsigned char *in, int inl); +/*__owur*/ int EVP_EncryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out, + int *outl); +/*__owur*/ int EVP_EncryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, + int *outl); + +__owur int EVP_DecryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, + const unsigned char *key, const unsigned char *iv); +/*__owur*/ int EVP_DecryptInit_ex(EVP_CIPHER_CTX *ctx, + const EVP_CIPHER *cipher, ENGINE *impl, + const unsigned char *key, + const unsigned char *iv); +/*__owur*/ int EVP_DecryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, + int *outl, const unsigned char *in, int inl); +__owur int EVP_DecryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm, + int *outl); +/*__owur*/ int EVP_DecryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm, + int *outl); + +__owur int EVP_CipherInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, + const unsigned char *key, const unsigned char *iv, + int enc); +/*__owur*/ int EVP_CipherInit_ex(EVP_CIPHER_CTX *ctx, + const EVP_CIPHER *cipher, ENGINE *impl, + const unsigned char *key, + const unsigned char *iv, int enc); +__owur int EVP_CipherUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, + int *outl, const unsigned char *in, int inl); +__owur int EVP_CipherFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm, + int *outl); +__owur int EVP_CipherFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm, + int *outl); + +__owur int EVP_SignFinal(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *s, + EVP_PKEY *pkey); + +__owur int EVP_DigestSign(EVP_MD_CTX *ctx, unsigned char *sigret, + size_t *siglen, const unsigned char *tbs, + size_t tbslen); + +__owur int EVP_VerifyFinal(EVP_MD_CTX *ctx, const unsigned char *sigbuf, + unsigned int siglen, EVP_PKEY *pkey); + +__owur int EVP_DigestVerify(EVP_MD_CTX *ctx, const unsigned char *sigret, + size_t siglen, const unsigned char *tbs, + size_t tbslen); + +/*__owur*/ int EVP_DigestSignInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, + const EVP_MD *type, ENGINE *e, + EVP_PKEY *pkey); +__owur int EVP_DigestSignFinal(EVP_MD_CTX *ctx, unsigned char *sigret, + size_t *siglen); + +__owur int EVP_DigestVerifyInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, + const EVP_MD *type, ENGINE *e, + EVP_PKEY *pkey); +__owur int EVP_DigestVerifyFinal(EVP_MD_CTX *ctx, const unsigned char *sig, + size_t siglen); + +# ifndef OPENSSL_NO_RSA +__owur int EVP_OpenInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, + const unsigned char *ek, int ekl, + const unsigned char *iv, EVP_PKEY *priv); +__owur int EVP_OpenFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl); + +__owur int EVP_SealInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, + unsigned char **ek, int *ekl, unsigned char *iv, + EVP_PKEY **pubk, int npubk); +__owur int EVP_SealFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl); +# endif + +EVP_ENCODE_CTX *EVP_ENCODE_CTX_new(void); +void EVP_ENCODE_CTX_free(EVP_ENCODE_CTX *ctx); +int EVP_ENCODE_CTX_copy(EVP_ENCODE_CTX *dctx, EVP_ENCODE_CTX *sctx); +int EVP_ENCODE_CTX_num(EVP_ENCODE_CTX *ctx); +void EVP_EncodeInit(EVP_ENCODE_CTX *ctx); +int EVP_EncodeUpdate(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl, + const unsigned char *in, int inl); +void EVP_EncodeFinal(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl); +int EVP_EncodeBlock(unsigned char *t, const unsigned char *f, int n); + +void EVP_DecodeInit(EVP_ENCODE_CTX *ctx); +int EVP_DecodeUpdate(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl, + const unsigned char *in, int inl); +int EVP_DecodeFinal(EVP_ENCODE_CTX *ctx, unsigned + char *out, int *outl); +int EVP_DecodeBlock(unsigned char *t, const unsigned char *f, int n); + +# if OPENSSL_API_COMPAT < 0x10100000L +# define EVP_CIPHER_CTX_init(c) EVP_CIPHER_CTX_reset(c) +# define EVP_CIPHER_CTX_cleanup(c) EVP_CIPHER_CTX_reset(c) +# endif +EVP_CIPHER_CTX *EVP_CIPHER_CTX_new(void); +int EVP_CIPHER_CTX_reset(EVP_CIPHER_CTX *c); +void EVP_CIPHER_CTX_free(EVP_CIPHER_CTX *c); +int EVP_CIPHER_CTX_set_key_length(EVP_CIPHER_CTX *x, int keylen); +int EVP_CIPHER_CTX_set_padding(EVP_CIPHER_CTX *c, int pad); +int EVP_CIPHER_CTX_ctrl(EVP_CIPHER_CTX *ctx, int type, int arg, void *ptr); +int EVP_CIPHER_CTX_rand_key(EVP_CIPHER_CTX *ctx, unsigned char *key); + +const BIO_METHOD *BIO_f_md(void); +const BIO_METHOD *BIO_f_base64(void); +const BIO_METHOD *BIO_f_cipher(void); +const BIO_METHOD *BIO_f_reliable(void); +__owur int BIO_set_cipher(BIO *b, const EVP_CIPHER *c, const unsigned char *k, + const unsigned char *i, int enc); + +const EVP_MD *EVP_md_null(void); +# ifndef OPENSSL_NO_MD2 +const EVP_MD *EVP_md2(void); +# endif +# ifndef OPENSSL_NO_MD4 +const EVP_MD *EVP_md4(void); +# endif +# ifndef OPENSSL_NO_MD5 +const EVP_MD *EVP_md5(void); +const EVP_MD *EVP_md5_sha1(void); +# endif +# ifndef OPENSSL_NO_BLAKE2 +const EVP_MD *EVP_blake2b512(void); +const EVP_MD *EVP_blake2s256(void); +# endif +const EVP_MD *EVP_sha1(void); +const EVP_MD *EVP_sha224(void); +const EVP_MD *EVP_sha256(void); +const EVP_MD *EVP_sha384(void); +const EVP_MD *EVP_sha512(void); +const EVP_MD *EVP_sha512_224(void); +const EVP_MD *EVP_sha512_256(void); +const EVP_MD *EVP_sha3_224(void); +const EVP_MD *EVP_sha3_256(void); +const EVP_MD *EVP_sha3_384(void); +const EVP_MD *EVP_sha3_512(void); +const EVP_MD *EVP_shake128(void); +const EVP_MD *EVP_shake256(void); +# ifndef OPENSSL_NO_MDC2 +const EVP_MD *EVP_mdc2(void); +# endif +# ifndef OPENSSL_NO_RMD160 +const EVP_MD *EVP_ripemd160(void); +# endif +# ifndef OPENSSL_NO_WHIRLPOOL +const EVP_MD *EVP_whirlpool(void); +# endif +# ifndef OPENSSL_NO_SM3 +const EVP_MD *EVP_sm3(void); +# endif +const EVP_CIPHER *EVP_enc_null(void); /* does nothing :-) */ +# ifndef OPENSSL_NO_DES +const EVP_CIPHER *EVP_des_ecb(void); +const EVP_CIPHER *EVP_des_ede(void); +const EVP_CIPHER *EVP_des_ede3(void); +const EVP_CIPHER *EVP_des_ede_ecb(void); +const EVP_CIPHER *EVP_des_ede3_ecb(void); +const EVP_CIPHER *EVP_des_cfb64(void); +# define EVP_des_cfb EVP_des_cfb64 +const EVP_CIPHER *EVP_des_cfb1(void); +const EVP_CIPHER *EVP_des_cfb8(void); +const EVP_CIPHER *EVP_des_ede_cfb64(void); +# define EVP_des_ede_cfb EVP_des_ede_cfb64 +const EVP_CIPHER *EVP_des_ede3_cfb64(void); +# define EVP_des_ede3_cfb EVP_des_ede3_cfb64 +const EVP_CIPHER *EVP_des_ede3_cfb1(void); +const EVP_CIPHER *EVP_des_ede3_cfb8(void); +const EVP_CIPHER *EVP_des_ofb(void); +const EVP_CIPHER *EVP_des_ede_ofb(void); +const EVP_CIPHER *EVP_des_ede3_ofb(void); +const EVP_CIPHER *EVP_des_cbc(void); +const EVP_CIPHER *EVP_des_ede_cbc(void); +const EVP_CIPHER *EVP_des_ede3_cbc(void); +const EVP_CIPHER *EVP_desx_cbc(void); +const EVP_CIPHER *EVP_des_ede3_wrap(void); +/* + * This should now be supported through the dev_crypto ENGINE. But also, why + * are rc4 and md5 declarations made here inside a "NO_DES" precompiler + * branch? + */ +# endif +# ifndef OPENSSL_NO_RC4 +const EVP_CIPHER *EVP_rc4(void); +const EVP_CIPHER *EVP_rc4_40(void); +# ifndef OPENSSL_NO_MD5 +const EVP_CIPHER *EVP_rc4_hmac_md5(void); +# endif +# endif +# ifndef OPENSSL_NO_IDEA +const EVP_CIPHER *EVP_idea_ecb(void); +const EVP_CIPHER *EVP_idea_cfb64(void); +# define EVP_idea_cfb EVP_idea_cfb64 +const EVP_CIPHER *EVP_idea_ofb(void); +const EVP_CIPHER *EVP_idea_cbc(void); +# endif +# ifndef OPENSSL_NO_RC2 +const EVP_CIPHER *EVP_rc2_ecb(void); +const EVP_CIPHER *EVP_rc2_cbc(void); +const EVP_CIPHER *EVP_rc2_40_cbc(void); +const EVP_CIPHER *EVP_rc2_64_cbc(void); +const EVP_CIPHER *EVP_rc2_cfb64(void); +# define EVP_rc2_cfb EVP_rc2_cfb64 +const EVP_CIPHER *EVP_rc2_ofb(void); +# endif +# ifndef OPENSSL_NO_BF +const EVP_CIPHER *EVP_bf_ecb(void); +const EVP_CIPHER *EVP_bf_cbc(void); +const EVP_CIPHER *EVP_bf_cfb64(void); +# define EVP_bf_cfb EVP_bf_cfb64 +const EVP_CIPHER *EVP_bf_ofb(void); +# endif +# ifndef OPENSSL_NO_CAST +const EVP_CIPHER *EVP_cast5_ecb(void); +const EVP_CIPHER *EVP_cast5_cbc(void); +const EVP_CIPHER *EVP_cast5_cfb64(void); +# define EVP_cast5_cfb EVP_cast5_cfb64 +const EVP_CIPHER *EVP_cast5_ofb(void); +# endif +# ifndef OPENSSL_NO_RC5 +const EVP_CIPHER *EVP_rc5_32_12_16_cbc(void); +const EVP_CIPHER *EVP_rc5_32_12_16_ecb(void); +const EVP_CIPHER *EVP_rc5_32_12_16_cfb64(void); +# define EVP_rc5_32_12_16_cfb EVP_rc5_32_12_16_cfb64 +const EVP_CIPHER *EVP_rc5_32_12_16_ofb(void); +# endif +const EVP_CIPHER *EVP_aes_128_ecb(void); +const EVP_CIPHER *EVP_aes_128_cbc(void); +const EVP_CIPHER *EVP_aes_128_cfb1(void); +const EVP_CIPHER *EVP_aes_128_cfb8(void); +const EVP_CIPHER *EVP_aes_128_cfb128(void); +# define EVP_aes_128_cfb EVP_aes_128_cfb128 +const EVP_CIPHER *EVP_aes_128_ofb(void); +const EVP_CIPHER *EVP_aes_128_ctr(void); +const EVP_CIPHER *EVP_aes_128_ccm(void); +const EVP_CIPHER *EVP_aes_128_gcm(void); +const EVP_CIPHER *EVP_aes_128_xts(void); +const EVP_CIPHER *EVP_aes_128_wrap(void); +const EVP_CIPHER *EVP_aes_128_wrap_pad(void); +# ifndef OPENSSL_NO_OCB +const EVP_CIPHER *EVP_aes_128_ocb(void); +# endif +const EVP_CIPHER *EVP_aes_192_ecb(void); +const EVP_CIPHER *EVP_aes_192_cbc(void); +const EVP_CIPHER *EVP_aes_192_cfb1(void); +const EVP_CIPHER *EVP_aes_192_cfb8(void); +const EVP_CIPHER *EVP_aes_192_cfb128(void); +# define EVP_aes_192_cfb EVP_aes_192_cfb128 +const EVP_CIPHER *EVP_aes_192_ofb(void); +const EVP_CIPHER *EVP_aes_192_ctr(void); +const EVP_CIPHER *EVP_aes_192_ccm(void); +const EVP_CIPHER *EVP_aes_192_gcm(void); +const EVP_CIPHER *EVP_aes_192_wrap(void); +const EVP_CIPHER *EVP_aes_192_wrap_pad(void); +# ifndef OPENSSL_NO_OCB +const EVP_CIPHER *EVP_aes_192_ocb(void); +# endif +const EVP_CIPHER *EVP_aes_256_ecb(void); +const EVP_CIPHER *EVP_aes_256_cbc(void); +const EVP_CIPHER *EVP_aes_256_cfb1(void); +const EVP_CIPHER *EVP_aes_256_cfb8(void); +const EVP_CIPHER *EVP_aes_256_cfb128(void); +# define EVP_aes_256_cfb EVP_aes_256_cfb128 +const EVP_CIPHER *EVP_aes_256_ofb(void); +const EVP_CIPHER *EVP_aes_256_ctr(void); +const EVP_CIPHER *EVP_aes_256_ccm(void); +const EVP_CIPHER *EVP_aes_256_gcm(void); +const EVP_CIPHER *EVP_aes_256_xts(void); +const EVP_CIPHER *EVP_aes_256_wrap(void); +const EVP_CIPHER *EVP_aes_256_wrap_pad(void); +# ifndef OPENSSL_NO_OCB +const EVP_CIPHER *EVP_aes_256_ocb(void); +# endif +const EVP_CIPHER *EVP_aes_128_cbc_hmac_sha1(void); +const EVP_CIPHER *EVP_aes_256_cbc_hmac_sha1(void); +const EVP_CIPHER *EVP_aes_128_cbc_hmac_sha256(void); +const EVP_CIPHER *EVP_aes_256_cbc_hmac_sha256(void); +# ifndef OPENSSL_NO_ARIA +const EVP_CIPHER *EVP_aria_128_ecb(void); +const EVP_CIPHER *EVP_aria_128_cbc(void); +const EVP_CIPHER *EVP_aria_128_cfb1(void); +const EVP_CIPHER *EVP_aria_128_cfb8(void); +const EVP_CIPHER *EVP_aria_128_cfb128(void); +# define EVP_aria_128_cfb EVP_aria_128_cfb128 +const EVP_CIPHER *EVP_aria_128_ctr(void); +const EVP_CIPHER *EVP_aria_128_ofb(void); +const EVP_CIPHER *EVP_aria_128_gcm(void); +const EVP_CIPHER *EVP_aria_128_ccm(void); +const EVP_CIPHER *EVP_aria_192_ecb(void); +const EVP_CIPHER *EVP_aria_192_cbc(void); +const EVP_CIPHER *EVP_aria_192_cfb1(void); +const EVP_CIPHER *EVP_aria_192_cfb8(void); +const EVP_CIPHER *EVP_aria_192_cfb128(void); +# define EVP_aria_192_cfb EVP_aria_192_cfb128 +const EVP_CIPHER *EVP_aria_192_ctr(void); +const EVP_CIPHER *EVP_aria_192_ofb(void); +const EVP_CIPHER *EVP_aria_192_gcm(void); +const EVP_CIPHER *EVP_aria_192_ccm(void); +const EVP_CIPHER *EVP_aria_256_ecb(void); +const EVP_CIPHER *EVP_aria_256_cbc(void); +const EVP_CIPHER *EVP_aria_256_cfb1(void); +const EVP_CIPHER *EVP_aria_256_cfb8(void); +const EVP_CIPHER *EVP_aria_256_cfb128(void); +# define EVP_aria_256_cfb EVP_aria_256_cfb128 +const EVP_CIPHER *EVP_aria_256_ctr(void); +const EVP_CIPHER *EVP_aria_256_ofb(void); +const EVP_CIPHER *EVP_aria_256_gcm(void); +const EVP_CIPHER *EVP_aria_256_ccm(void); +# endif +# ifndef OPENSSL_NO_CAMELLIA +const EVP_CIPHER *EVP_camellia_128_ecb(void); +const EVP_CIPHER *EVP_camellia_128_cbc(void); +const EVP_CIPHER *EVP_camellia_128_cfb1(void); +const EVP_CIPHER *EVP_camellia_128_cfb8(void); +const EVP_CIPHER *EVP_camellia_128_cfb128(void); +# define EVP_camellia_128_cfb EVP_camellia_128_cfb128 +const EVP_CIPHER *EVP_camellia_128_ofb(void); +const EVP_CIPHER *EVP_camellia_128_ctr(void); +const EVP_CIPHER *EVP_camellia_192_ecb(void); +const EVP_CIPHER *EVP_camellia_192_cbc(void); +const EVP_CIPHER *EVP_camellia_192_cfb1(void); +const EVP_CIPHER *EVP_camellia_192_cfb8(void); +const EVP_CIPHER *EVP_camellia_192_cfb128(void); +# define EVP_camellia_192_cfb EVP_camellia_192_cfb128 +const EVP_CIPHER *EVP_camellia_192_ofb(void); +const EVP_CIPHER *EVP_camellia_192_ctr(void); +const EVP_CIPHER *EVP_camellia_256_ecb(void); +const EVP_CIPHER *EVP_camellia_256_cbc(void); +const EVP_CIPHER *EVP_camellia_256_cfb1(void); +const EVP_CIPHER *EVP_camellia_256_cfb8(void); +const EVP_CIPHER *EVP_camellia_256_cfb128(void); +# define EVP_camellia_256_cfb EVP_camellia_256_cfb128 +const EVP_CIPHER *EVP_camellia_256_ofb(void); +const EVP_CIPHER *EVP_camellia_256_ctr(void); +# endif +# ifndef OPENSSL_NO_CHACHA +const EVP_CIPHER *EVP_chacha20(void); +# ifndef OPENSSL_NO_POLY1305 +const EVP_CIPHER *EVP_chacha20_poly1305(void); +# endif +# endif + +# ifndef OPENSSL_NO_SEED +const EVP_CIPHER *EVP_seed_ecb(void); +const EVP_CIPHER *EVP_seed_cbc(void); +const EVP_CIPHER *EVP_seed_cfb128(void); +# define EVP_seed_cfb EVP_seed_cfb128 +const EVP_CIPHER *EVP_seed_ofb(void); +# endif + +# ifndef OPENSSL_NO_SM4 +const EVP_CIPHER *EVP_sm4_ecb(void); +const EVP_CIPHER *EVP_sm4_cbc(void); +const EVP_CIPHER *EVP_sm4_cfb128(void); +# define EVP_sm4_cfb EVP_sm4_cfb128 +const EVP_CIPHER *EVP_sm4_ofb(void); +const EVP_CIPHER *EVP_sm4_ctr(void); +# endif + +# if OPENSSL_API_COMPAT < 0x10100000L +# define OPENSSL_add_all_algorithms_conf() \ + OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS \ + | OPENSSL_INIT_ADD_ALL_DIGESTS \ + | OPENSSL_INIT_LOAD_CONFIG, NULL) +# define OPENSSL_add_all_algorithms_noconf() \ + OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS \ + | OPENSSL_INIT_ADD_ALL_DIGESTS, NULL) + +# ifdef OPENSSL_LOAD_CONF +# define OpenSSL_add_all_algorithms() OPENSSL_add_all_algorithms_conf() +# else +# define OpenSSL_add_all_algorithms() OPENSSL_add_all_algorithms_noconf() +# endif + +# define OpenSSL_add_all_ciphers() \ + OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS, NULL) +# define OpenSSL_add_all_digests() \ + OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_DIGESTS, NULL) + +# define EVP_cleanup() while(0) continue +# endif + +int EVP_add_cipher(const EVP_CIPHER *cipher); +int EVP_add_digest(const EVP_MD *digest); + +const EVP_CIPHER *EVP_get_cipherbyname(const char *name); +const EVP_MD *EVP_get_digestbyname(const char *name); + +void EVP_CIPHER_do_all(void (*fn) (const EVP_CIPHER *ciph, + const char *from, const char *to, void *x), + void *arg); +void EVP_CIPHER_do_all_sorted(void (*fn) + (const EVP_CIPHER *ciph, const char *from, + const char *to, void *x), void *arg); + +void EVP_MD_do_all(void (*fn) (const EVP_MD *ciph, + const char *from, const char *to, void *x), + void *arg); +void EVP_MD_do_all_sorted(void (*fn) + (const EVP_MD *ciph, const char *from, + const char *to, void *x), void *arg); + +int EVP_PKEY_decrypt_old(unsigned char *dec_key, + const unsigned char *enc_key, int enc_key_len, + EVP_PKEY *private_key); +int EVP_PKEY_encrypt_old(unsigned char *enc_key, + const unsigned char *key, int key_len, + EVP_PKEY *pub_key); +int EVP_PKEY_type(int type); +int EVP_PKEY_id(const EVP_PKEY *pkey); +int EVP_PKEY_base_id(const EVP_PKEY *pkey); +int EVP_PKEY_bits(const EVP_PKEY *pkey); +int EVP_PKEY_security_bits(const EVP_PKEY *pkey); +int EVP_PKEY_size(const EVP_PKEY *pkey); +int EVP_PKEY_set_type(EVP_PKEY *pkey, int type); +int EVP_PKEY_set_type_str(EVP_PKEY *pkey, const char *str, int len); +int EVP_PKEY_set_alias_type(EVP_PKEY *pkey, int type); +# ifndef OPENSSL_NO_ENGINE +int EVP_PKEY_set1_engine(EVP_PKEY *pkey, ENGINE *e); +ENGINE *EVP_PKEY_get0_engine(const EVP_PKEY *pkey); +# endif +int EVP_PKEY_assign(EVP_PKEY *pkey, int type, void *key); +void *EVP_PKEY_get0(const EVP_PKEY *pkey); +const unsigned char *EVP_PKEY_get0_hmac(const EVP_PKEY *pkey, size_t *len); +# ifndef OPENSSL_NO_POLY1305 +const unsigned char *EVP_PKEY_get0_poly1305(const EVP_PKEY *pkey, size_t *len); +# endif +# ifndef OPENSSL_NO_SIPHASH +const unsigned char *EVP_PKEY_get0_siphash(const EVP_PKEY *pkey, size_t *len); +# endif + +# ifndef OPENSSL_NO_RSA +struct rsa_st; +int EVP_PKEY_set1_RSA(EVP_PKEY *pkey, struct rsa_st *key); +struct rsa_st *EVP_PKEY_get0_RSA(EVP_PKEY *pkey); +struct rsa_st *EVP_PKEY_get1_RSA(EVP_PKEY *pkey); +# endif +# ifndef OPENSSL_NO_DSA +struct dsa_st; +int EVP_PKEY_set1_DSA(EVP_PKEY *pkey, struct dsa_st *key); +struct dsa_st *EVP_PKEY_get0_DSA(EVP_PKEY *pkey); +struct dsa_st *EVP_PKEY_get1_DSA(EVP_PKEY *pkey); +# endif +# ifndef OPENSSL_NO_DH +struct dh_st; +int EVP_PKEY_set1_DH(EVP_PKEY *pkey, struct dh_st *key); +struct dh_st *EVP_PKEY_get0_DH(EVP_PKEY *pkey); +struct dh_st *EVP_PKEY_get1_DH(EVP_PKEY *pkey); +# endif +# ifndef OPENSSL_NO_EC +struct ec_key_st; +int EVP_PKEY_set1_EC_KEY(EVP_PKEY *pkey, struct ec_key_st *key); +struct ec_key_st *EVP_PKEY_get0_EC_KEY(EVP_PKEY *pkey); +struct ec_key_st *EVP_PKEY_get1_EC_KEY(EVP_PKEY *pkey); +# endif + +EVP_PKEY *EVP_PKEY_new(void); +int EVP_PKEY_up_ref(EVP_PKEY *pkey); +void EVP_PKEY_free(EVP_PKEY *pkey); + +EVP_PKEY *d2i_PublicKey(int type, EVP_PKEY **a, const unsigned char **pp, + long length); +int i2d_PublicKey(EVP_PKEY *a, unsigned char **pp); + +EVP_PKEY *d2i_PrivateKey(int type, EVP_PKEY **a, const unsigned char **pp, + long length); +EVP_PKEY *d2i_AutoPrivateKey(EVP_PKEY **a, const unsigned char **pp, + long length); +int i2d_PrivateKey(EVP_PKEY *a, unsigned char **pp); + +int EVP_PKEY_copy_parameters(EVP_PKEY *to, const EVP_PKEY *from); +int EVP_PKEY_missing_parameters(const EVP_PKEY *pkey); +int EVP_PKEY_save_parameters(EVP_PKEY *pkey, int mode); +int EVP_PKEY_cmp_parameters(const EVP_PKEY *a, const EVP_PKEY *b); + +int EVP_PKEY_cmp(const EVP_PKEY *a, const EVP_PKEY *b); + +int EVP_PKEY_print_public(BIO *out, const EVP_PKEY *pkey, + int indent, ASN1_PCTX *pctx); +int EVP_PKEY_print_private(BIO *out, const EVP_PKEY *pkey, + int indent, ASN1_PCTX *pctx); +int EVP_PKEY_print_params(BIO *out, const EVP_PKEY *pkey, + int indent, ASN1_PCTX *pctx); + +int EVP_PKEY_get_default_digest_nid(EVP_PKEY *pkey, int *pnid); + +int EVP_PKEY_set1_tls_encodedpoint(EVP_PKEY *pkey, + const unsigned char *pt, size_t ptlen); +size_t EVP_PKEY_get1_tls_encodedpoint(EVP_PKEY *pkey, unsigned char **ppt); + +int EVP_CIPHER_type(const EVP_CIPHER *ctx); + +/* calls methods */ +int EVP_CIPHER_param_to_asn1(EVP_CIPHER_CTX *c, ASN1_TYPE *type); +int EVP_CIPHER_asn1_to_param(EVP_CIPHER_CTX *c, ASN1_TYPE *type); + +/* These are used by EVP_CIPHER methods */ +int EVP_CIPHER_set_asn1_iv(EVP_CIPHER_CTX *c, ASN1_TYPE *type); +int EVP_CIPHER_get_asn1_iv(EVP_CIPHER_CTX *c, ASN1_TYPE *type); + +/* PKCS5 password based encryption */ +int PKCS5_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, + ASN1_TYPE *param, const EVP_CIPHER *cipher, + const EVP_MD *md, int en_de); +int PKCS5_PBKDF2_HMAC_SHA1(const char *pass, int passlen, + const unsigned char *salt, int saltlen, int iter, + int keylen, unsigned char *out); +int PKCS5_PBKDF2_HMAC(const char *pass, int passlen, + const unsigned char *salt, int saltlen, int iter, + const EVP_MD *digest, int keylen, unsigned char *out); +int PKCS5_v2_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, + ASN1_TYPE *param, const EVP_CIPHER *cipher, + const EVP_MD *md, int en_de); + +#ifndef OPENSSL_NO_SCRYPT +int EVP_PBE_scrypt(const char *pass, size_t passlen, + const unsigned char *salt, size_t saltlen, + uint64_t N, uint64_t r, uint64_t p, uint64_t maxmem, + unsigned char *key, size_t keylen); + +int PKCS5_v2_scrypt_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, + int passlen, ASN1_TYPE *param, + const EVP_CIPHER *c, const EVP_MD *md, int en_de); +#endif + +void PKCS5_PBE_add(void); + +int EVP_PBE_CipherInit(ASN1_OBJECT *pbe_obj, const char *pass, int passlen, + ASN1_TYPE *param, EVP_CIPHER_CTX *ctx, int en_de); + +/* PBE type */ + +/* Can appear as the outermost AlgorithmIdentifier */ +# define EVP_PBE_TYPE_OUTER 0x0 +/* Is an PRF type OID */ +# define EVP_PBE_TYPE_PRF 0x1 +/* Is a PKCS#5 v2.0 KDF */ +# define EVP_PBE_TYPE_KDF 0x2 + +int EVP_PBE_alg_add_type(int pbe_type, int pbe_nid, int cipher_nid, + int md_nid, EVP_PBE_KEYGEN *keygen); +int EVP_PBE_alg_add(int nid, const EVP_CIPHER *cipher, const EVP_MD *md, + EVP_PBE_KEYGEN *keygen); +int EVP_PBE_find(int type, int pbe_nid, int *pcnid, int *pmnid, + EVP_PBE_KEYGEN **pkeygen); +void EVP_PBE_cleanup(void); +int EVP_PBE_get(int *ptype, int *ppbe_nid, size_t num); + +# define ASN1_PKEY_ALIAS 0x1 +# define ASN1_PKEY_DYNAMIC 0x2 +# define ASN1_PKEY_SIGPARAM_NULL 0x4 + +# define ASN1_PKEY_CTRL_PKCS7_SIGN 0x1 +# define ASN1_PKEY_CTRL_PKCS7_ENCRYPT 0x2 +# define ASN1_PKEY_CTRL_DEFAULT_MD_NID 0x3 +# define ASN1_PKEY_CTRL_CMS_SIGN 0x5 +# define ASN1_PKEY_CTRL_CMS_ENVELOPE 0x7 +# define ASN1_PKEY_CTRL_CMS_RI_TYPE 0x8 + +# define ASN1_PKEY_CTRL_SET1_TLS_ENCPT 0x9 +# define ASN1_PKEY_CTRL_GET1_TLS_ENCPT 0xa + +int EVP_PKEY_asn1_get_count(void); +const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_get0(int idx); +const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_find(ENGINE **pe, int type); +const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_find_str(ENGINE **pe, + const char *str, int len); +int EVP_PKEY_asn1_add0(const EVP_PKEY_ASN1_METHOD *ameth); +int EVP_PKEY_asn1_add_alias(int to, int from); +int EVP_PKEY_asn1_get0_info(int *ppkey_id, int *pkey_base_id, + int *ppkey_flags, const char **pinfo, + const char **ppem_str, + const EVP_PKEY_ASN1_METHOD *ameth); + +const EVP_PKEY_ASN1_METHOD *EVP_PKEY_get0_asn1(const EVP_PKEY *pkey); +EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_new(int id, int flags, + const char *pem_str, + const char *info); +void EVP_PKEY_asn1_copy(EVP_PKEY_ASN1_METHOD *dst, + const EVP_PKEY_ASN1_METHOD *src); +void EVP_PKEY_asn1_free(EVP_PKEY_ASN1_METHOD *ameth); +void EVP_PKEY_asn1_set_public(EVP_PKEY_ASN1_METHOD *ameth, + int (*pub_decode) (EVP_PKEY *pk, + X509_PUBKEY *pub), + int (*pub_encode) (X509_PUBKEY *pub, + const EVP_PKEY *pk), + int (*pub_cmp) (const EVP_PKEY *a, + const EVP_PKEY *b), + int (*pub_print) (BIO *out, + const EVP_PKEY *pkey, + int indent, ASN1_PCTX *pctx), + int (*pkey_size) (const EVP_PKEY *pk), + int (*pkey_bits) (const EVP_PKEY *pk)); +void EVP_PKEY_asn1_set_private(EVP_PKEY_ASN1_METHOD *ameth, + int (*priv_decode) (EVP_PKEY *pk, + const PKCS8_PRIV_KEY_INFO + *p8inf), + int (*priv_encode) (PKCS8_PRIV_KEY_INFO *p8, + const EVP_PKEY *pk), + int (*priv_print) (BIO *out, + const EVP_PKEY *pkey, + int indent, + ASN1_PCTX *pctx)); +void EVP_PKEY_asn1_set_param(EVP_PKEY_ASN1_METHOD *ameth, + int (*param_decode) (EVP_PKEY *pkey, + const unsigned char **pder, + int derlen), + int (*param_encode) (const EVP_PKEY *pkey, + unsigned char **pder), + int (*param_missing) (const EVP_PKEY *pk), + int (*param_copy) (EVP_PKEY *to, + const EVP_PKEY *from), + int (*param_cmp) (const EVP_PKEY *a, + const EVP_PKEY *b), + int (*param_print) (BIO *out, + const EVP_PKEY *pkey, + int indent, + ASN1_PCTX *pctx)); + +void EVP_PKEY_asn1_set_free(EVP_PKEY_ASN1_METHOD *ameth, + void (*pkey_free) (EVP_PKEY *pkey)); +void EVP_PKEY_asn1_set_ctrl(EVP_PKEY_ASN1_METHOD *ameth, + int (*pkey_ctrl) (EVP_PKEY *pkey, int op, + long arg1, void *arg2)); +void EVP_PKEY_asn1_set_item(EVP_PKEY_ASN1_METHOD *ameth, + int (*item_verify) (EVP_MD_CTX *ctx, + const ASN1_ITEM *it, + void *asn, + X509_ALGOR *a, + ASN1_BIT_STRING *sig, + EVP_PKEY *pkey), + int (*item_sign) (EVP_MD_CTX *ctx, + const ASN1_ITEM *it, + void *asn, + X509_ALGOR *alg1, + X509_ALGOR *alg2, + ASN1_BIT_STRING *sig)); + +void EVP_PKEY_asn1_set_siginf(EVP_PKEY_ASN1_METHOD *ameth, + int (*siginf_set) (X509_SIG_INFO *siginf, + const X509_ALGOR *alg, + const ASN1_STRING *sig)); + +void EVP_PKEY_asn1_set_check(EVP_PKEY_ASN1_METHOD *ameth, + int (*pkey_check) (const EVP_PKEY *pk)); + +void EVP_PKEY_asn1_set_public_check(EVP_PKEY_ASN1_METHOD *ameth, + int (*pkey_pub_check) (const EVP_PKEY *pk)); + +void EVP_PKEY_asn1_set_param_check(EVP_PKEY_ASN1_METHOD *ameth, + int (*pkey_param_check) (const EVP_PKEY *pk)); + +void EVP_PKEY_asn1_set_set_priv_key(EVP_PKEY_ASN1_METHOD *ameth, + int (*set_priv_key) (EVP_PKEY *pk, + const unsigned char + *priv, + size_t len)); +void EVP_PKEY_asn1_set_set_pub_key(EVP_PKEY_ASN1_METHOD *ameth, + int (*set_pub_key) (EVP_PKEY *pk, + const unsigned char *pub, + size_t len)); +void EVP_PKEY_asn1_set_get_priv_key(EVP_PKEY_ASN1_METHOD *ameth, + int (*get_priv_key) (const EVP_PKEY *pk, + unsigned char *priv, + size_t *len)); +void EVP_PKEY_asn1_set_get_pub_key(EVP_PKEY_ASN1_METHOD *ameth, + int (*get_pub_key) (const EVP_PKEY *pk, + unsigned char *pub, + size_t *len)); + +void EVP_PKEY_asn1_set_security_bits(EVP_PKEY_ASN1_METHOD *ameth, + int (*pkey_security_bits) (const EVP_PKEY + *pk)); + +# define EVP_PKEY_OP_UNDEFINED 0 +# define EVP_PKEY_OP_PARAMGEN (1<<1) +# define EVP_PKEY_OP_KEYGEN (1<<2) +# define EVP_PKEY_OP_SIGN (1<<3) +# define EVP_PKEY_OP_VERIFY (1<<4) +# define EVP_PKEY_OP_VERIFYRECOVER (1<<5) +# define EVP_PKEY_OP_SIGNCTX (1<<6) +# define EVP_PKEY_OP_VERIFYCTX (1<<7) +# define EVP_PKEY_OP_ENCRYPT (1<<8) +# define EVP_PKEY_OP_DECRYPT (1<<9) +# define EVP_PKEY_OP_DERIVE (1<<10) + +# define EVP_PKEY_OP_TYPE_SIG \ + (EVP_PKEY_OP_SIGN | EVP_PKEY_OP_VERIFY | EVP_PKEY_OP_VERIFYRECOVER \ + | EVP_PKEY_OP_SIGNCTX | EVP_PKEY_OP_VERIFYCTX) + +# define EVP_PKEY_OP_TYPE_CRYPT \ + (EVP_PKEY_OP_ENCRYPT | EVP_PKEY_OP_DECRYPT) + +# define EVP_PKEY_OP_TYPE_NOGEN \ + (EVP_PKEY_OP_TYPE_SIG | EVP_PKEY_OP_TYPE_CRYPT | EVP_PKEY_OP_DERIVE) + +# define EVP_PKEY_OP_TYPE_GEN \ + (EVP_PKEY_OP_PARAMGEN | EVP_PKEY_OP_KEYGEN) + +# define EVP_PKEY_CTX_set_signature_md(ctx, md) \ + EVP_PKEY_CTX_ctrl(ctx, -1, EVP_PKEY_OP_TYPE_SIG, \ + EVP_PKEY_CTRL_MD, 0, (void *)(md)) + +# define EVP_PKEY_CTX_get_signature_md(ctx, pmd) \ + EVP_PKEY_CTX_ctrl(ctx, -1, EVP_PKEY_OP_TYPE_SIG, \ + EVP_PKEY_CTRL_GET_MD, 0, (void *)(pmd)) + +# define EVP_PKEY_CTX_set_mac_key(ctx, key, len) \ + EVP_PKEY_CTX_ctrl(ctx, -1, EVP_PKEY_OP_KEYGEN, \ + EVP_PKEY_CTRL_SET_MAC_KEY, len, (void *)(key)) + +# define EVP_PKEY_CTRL_MD 1 +# define EVP_PKEY_CTRL_PEER_KEY 2 + +# define EVP_PKEY_CTRL_PKCS7_ENCRYPT 3 +# define EVP_PKEY_CTRL_PKCS7_DECRYPT 4 + +# define EVP_PKEY_CTRL_PKCS7_SIGN 5 + +# define EVP_PKEY_CTRL_SET_MAC_KEY 6 + +# define EVP_PKEY_CTRL_DIGESTINIT 7 + +/* Used by GOST key encryption in TLS */ +# define EVP_PKEY_CTRL_SET_IV 8 + +# define EVP_PKEY_CTRL_CMS_ENCRYPT 9 +# define EVP_PKEY_CTRL_CMS_DECRYPT 10 +# define EVP_PKEY_CTRL_CMS_SIGN 11 + +# define EVP_PKEY_CTRL_CIPHER 12 + +# define EVP_PKEY_CTRL_GET_MD 13 + +# define EVP_PKEY_CTRL_SET_DIGEST_SIZE 14 + +# define EVP_PKEY_ALG_CTRL 0x1000 + +# define EVP_PKEY_FLAG_AUTOARGLEN 2 +/* + * Method handles all operations: don't assume any digest related defaults. + */ +# define EVP_PKEY_FLAG_SIGCTX_CUSTOM 4 + +const EVP_PKEY_METHOD *EVP_PKEY_meth_find(int type); +EVP_PKEY_METHOD *EVP_PKEY_meth_new(int id, int flags); +void EVP_PKEY_meth_get0_info(int *ppkey_id, int *pflags, + const EVP_PKEY_METHOD *meth); +void EVP_PKEY_meth_copy(EVP_PKEY_METHOD *dst, const EVP_PKEY_METHOD *src); +void EVP_PKEY_meth_free(EVP_PKEY_METHOD *pmeth); +int EVP_PKEY_meth_add0(const EVP_PKEY_METHOD *pmeth); +int EVP_PKEY_meth_remove(const EVP_PKEY_METHOD *pmeth); +size_t EVP_PKEY_meth_get_count(void); +const EVP_PKEY_METHOD *EVP_PKEY_meth_get0(size_t idx); + +EVP_PKEY_CTX *EVP_PKEY_CTX_new(EVP_PKEY *pkey, ENGINE *e); +EVP_PKEY_CTX *EVP_PKEY_CTX_new_id(int id, ENGINE *e); +EVP_PKEY_CTX *EVP_PKEY_CTX_dup(EVP_PKEY_CTX *ctx); +void EVP_PKEY_CTX_free(EVP_PKEY_CTX *ctx); + +int EVP_PKEY_CTX_ctrl(EVP_PKEY_CTX *ctx, int keytype, int optype, + int cmd, int p1, void *p2); +int EVP_PKEY_CTX_ctrl_str(EVP_PKEY_CTX *ctx, const char *type, + const char *value); +int EVP_PKEY_CTX_ctrl_uint64(EVP_PKEY_CTX *ctx, int keytype, int optype, + int cmd, uint64_t value); + +int EVP_PKEY_CTX_str2ctrl(EVP_PKEY_CTX *ctx, int cmd, const char *str); +int EVP_PKEY_CTX_hex2ctrl(EVP_PKEY_CTX *ctx, int cmd, const char *hex); + +int EVP_PKEY_CTX_md(EVP_PKEY_CTX *ctx, int optype, int cmd, const char *md); + +int EVP_PKEY_CTX_get_operation(EVP_PKEY_CTX *ctx); +void EVP_PKEY_CTX_set0_keygen_info(EVP_PKEY_CTX *ctx, int *dat, int datlen); + +EVP_PKEY *EVP_PKEY_new_mac_key(int type, ENGINE *e, + const unsigned char *key, int keylen); +EVP_PKEY *EVP_PKEY_new_raw_private_key(int type, ENGINE *e, + const unsigned char *priv, + size_t len); +EVP_PKEY *EVP_PKEY_new_raw_public_key(int type, ENGINE *e, + const unsigned char *pub, + size_t len); +int EVP_PKEY_get_raw_private_key(const EVP_PKEY *pkey, unsigned char *priv, + size_t *len); +int EVP_PKEY_get_raw_public_key(const EVP_PKEY *pkey, unsigned char *pub, + size_t *len); + +EVP_PKEY *EVP_PKEY_new_CMAC_key(ENGINE *e, const unsigned char *priv, + size_t len, const EVP_CIPHER *cipher); + +void EVP_PKEY_CTX_set_data(EVP_PKEY_CTX *ctx, void *data); +void *EVP_PKEY_CTX_get_data(EVP_PKEY_CTX *ctx); +EVP_PKEY *EVP_PKEY_CTX_get0_pkey(EVP_PKEY_CTX *ctx); + +EVP_PKEY *EVP_PKEY_CTX_get0_peerkey(EVP_PKEY_CTX *ctx); + +void EVP_PKEY_CTX_set_app_data(EVP_PKEY_CTX *ctx, void *data); +void *EVP_PKEY_CTX_get_app_data(EVP_PKEY_CTX *ctx); + +int EVP_PKEY_sign_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_sign(EVP_PKEY_CTX *ctx, + unsigned char *sig, size_t *siglen, + const unsigned char *tbs, size_t tbslen); +int EVP_PKEY_verify_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_verify(EVP_PKEY_CTX *ctx, + const unsigned char *sig, size_t siglen, + const unsigned char *tbs, size_t tbslen); +int EVP_PKEY_verify_recover_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_verify_recover(EVP_PKEY_CTX *ctx, + unsigned char *rout, size_t *routlen, + const unsigned char *sig, size_t siglen); +int EVP_PKEY_encrypt_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_encrypt(EVP_PKEY_CTX *ctx, + unsigned char *out, size_t *outlen, + const unsigned char *in, size_t inlen); +int EVP_PKEY_decrypt_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_decrypt(EVP_PKEY_CTX *ctx, + unsigned char *out, size_t *outlen, + const unsigned char *in, size_t inlen); + +int EVP_PKEY_derive_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_derive_set_peer(EVP_PKEY_CTX *ctx, EVP_PKEY *peer); +int EVP_PKEY_derive(EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen); + +typedef int EVP_PKEY_gen_cb(EVP_PKEY_CTX *ctx); + +int EVP_PKEY_paramgen_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_paramgen(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey); +int EVP_PKEY_keygen_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey); +int EVP_PKEY_check(EVP_PKEY_CTX *ctx); +int EVP_PKEY_public_check(EVP_PKEY_CTX *ctx); +int EVP_PKEY_param_check(EVP_PKEY_CTX *ctx); + +void EVP_PKEY_CTX_set_cb(EVP_PKEY_CTX *ctx, EVP_PKEY_gen_cb *cb); +EVP_PKEY_gen_cb *EVP_PKEY_CTX_get_cb(EVP_PKEY_CTX *ctx); + +int EVP_PKEY_CTX_get_keygen_info(EVP_PKEY_CTX *ctx, int idx); + +void EVP_PKEY_meth_set_init(EVP_PKEY_METHOD *pmeth, + int (*init) (EVP_PKEY_CTX *ctx)); + +void EVP_PKEY_meth_set_copy(EVP_PKEY_METHOD *pmeth, + int (*copy) (EVP_PKEY_CTX *dst, + EVP_PKEY_CTX *src)); + +void EVP_PKEY_meth_set_cleanup(EVP_PKEY_METHOD *pmeth, + void (*cleanup) (EVP_PKEY_CTX *ctx)); + +void EVP_PKEY_meth_set_paramgen(EVP_PKEY_METHOD *pmeth, + int (*paramgen_init) (EVP_PKEY_CTX *ctx), + int (*paramgen) (EVP_PKEY_CTX *ctx, + EVP_PKEY *pkey)); + +void EVP_PKEY_meth_set_keygen(EVP_PKEY_METHOD *pmeth, + int (*keygen_init) (EVP_PKEY_CTX *ctx), + int (*keygen) (EVP_PKEY_CTX *ctx, + EVP_PKEY *pkey)); + +void EVP_PKEY_meth_set_sign(EVP_PKEY_METHOD *pmeth, + int (*sign_init) (EVP_PKEY_CTX *ctx), + int (*sign) (EVP_PKEY_CTX *ctx, + unsigned char *sig, size_t *siglen, + const unsigned char *tbs, + size_t tbslen)); + +void EVP_PKEY_meth_set_verify(EVP_PKEY_METHOD *pmeth, + int (*verify_init) (EVP_PKEY_CTX *ctx), + int (*verify) (EVP_PKEY_CTX *ctx, + const unsigned char *sig, + size_t siglen, + const unsigned char *tbs, + size_t tbslen)); + +void EVP_PKEY_meth_set_verify_recover(EVP_PKEY_METHOD *pmeth, + int (*verify_recover_init) (EVP_PKEY_CTX + *ctx), + int (*verify_recover) (EVP_PKEY_CTX + *ctx, + unsigned char + *sig, + size_t *siglen, + const unsigned + char *tbs, + size_t tbslen)); + +void EVP_PKEY_meth_set_signctx(EVP_PKEY_METHOD *pmeth, + int (*signctx_init) (EVP_PKEY_CTX *ctx, + EVP_MD_CTX *mctx), + int (*signctx) (EVP_PKEY_CTX *ctx, + unsigned char *sig, + size_t *siglen, + EVP_MD_CTX *mctx)); + +void EVP_PKEY_meth_set_verifyctx(EVP_PKEY_METHOD *pmeth, + int (*verifyctx_init) (EVP_PKEY_CTX *ctx, + EVP_MD_CTX *mctx), + int (*verifyctx) (EVP_PKEY_CTX *ctx, + const unsigned char *sig, + int siglen, + EVP_MD_CTX *mctx)); + +void EVP_PKEY_meth_set_encrypt(EVP_PKEY_METHOD *pmeth, + int (*encrypt_init) (EVP_PKEY_CTX *ctx), + int (*encryptfn) (EVP_PKEY_CTX *ctx, + unsigned char *out, + size_t *outlen, + const unsigned char *in, + size_t inlen)); + +void EVP_PKEY_meth_set_decrypt(EVP_PKEY_METHOD *pmeth, + int (*decrypt_init) (EVP_PKEY_CTX *ctx), + int (*decrypt) (EVP_PKEY_CTX *ctx, + unsigned char *out, + size_t *outlen, + const unsigned char *in, + size_t inlen)); + +void EVP_PKEY_meth_set_derive(EVP_PKEY_METHOD *pmeth, + int (*derive_init) (EVP_PKEY_CTX *ctx), + int (*derive) (EVP_PKEY_CTX *ctx, + unsigned char *key, + size_t *keylen)); + +void EVP_PKEY_meth_set_ctrl(EVP_PKEY_METHOD *pmeth, + int (*ctrl) (EVP_PKEY_CTX *ctx, int type, int p1, + void *p2), + int (*ctrl_str) (EVP_PKEY_CTX *ctx, + const char *type, + const char *value)); + +void EVP_PKEY_meth_set_digestsign(EVP_PKEY_METHOD *pmeth, + int (*digestsign) (EVP_MD_CTX *ctx, + unsigned char *sig, + size_t *siglen, + const unsigned char *tbs, + size_t tbslen)); + +void EVP_PKEY_meth_set_digestverify(EVP_PKEY_METHOD *pmeth, + int (*digestverify) (EVP_MD_CTX *ctx, + const unsigned char *sig, + size_t siglen, + const unsigned char *tbs, + size_t tbslen)); + +void EVP_PKEY_meth_set_check(EVP_PKEY_METHOD *pmeth, + int (*check) (EVP_PKEY *pkey)); + +void EVP_PKEY_meth_set_public_check(EVP_PKEY_METHOD *pmeth, + int (*check) (EVP_PKEY *pkey)); + +void EVP_PKEY_meth_set_param_check(EVP_PKEY_METHOD *pmeth, + int (*check) (EVP_PKEY *pkey)); + +void EVP_PKEY_meth_set_digest_custom(EVP_PKEY_METHOD *pmeth, + int (*digest_custom) (EVP_PKEY_CTX *ctx, + EVP_MD_CTX *mctx)); + +void EVP_PKEY_meth_get_init(const EVP_PKEY_METHOD *pmeth, + int (**pinit) (EVP_PKEY_CTX *ctx)); + +void EVP_PKEY_meth_get_copy(const EVP_PKEY_METHOD *pmeth, + int (**pcopy) (EVP_PKEY_CTX *dst, + EVP_PKEY_CTX *src)); + +void EVP_PKEY_meth_get_cleanup(const EVP_PKEY_METHOD *pmeth, + void (**pcleanup) (EVP_PKEY_CTX *ctx)); + +void EVP_PKEY_meth_get_paramgen(const EVP_PKEY_METHOD *pmeth, + int (**pparamgen_init) (EVP_PKEY_CTX *ctx), + int (**pparamgen) (EVP_PKEY_CTX *ctx, + EVP_PKEY *pkey)); + +void EVP_PKEY_meth_get_keygen(const EVP_PKEY_METHOD *pmeth, + int (**pkeygen_init) (EVP_PKEY_CTX *ctx), + int (**pkeygen) (EVP_PKEY_CTX *ctx, + EVP_PKEY *pkey)); + +void EVP_PKEY_meth_get_sign(const EVP_PKEY_METHOD *pmeth, + int (**psign_init) (EVP_PKEY_CTX *ctx), + int (**psign) (EVP_PKEY_CTX *ctx, + unsigned char *sig, size_t *siglen, + const unsigned char *tbs, + size_t tbslen)); + +void EVP_PKEY_meth_get_verify(const EVP_PKEY_METHOD *pmeth, + int (**pverify_init) (EVP_PKEY_CTX *ctx), + int (**pverify) (EVP_PKEY_CTX *ctx, + const unsigned char *sig, + size_t siglen, + const unsigned char *tbs, + size_t tbslen)); + +void EVP_PKEY_meth_get_verify_recover(const EVP_PKEY_METHOD *pmeth, + int (**pverify_recover_init) (EVP_PKEY_CTX + *ctx), + int (**pverify_recover) (EVP_PKEY_CTX + *ctx, + unsigned char + *sig, + size_t *siglen, + const unsigned + char *tbs, + size_t tbslen)); + +void EVP_PKEY_meth_get_signctx(const EVP_PKEY_METHOD *pmeth, + int (**psignctx_init) (EVP_PKEY_CTX *ctx, + EVP_MD_CTX *mctx), + int (**psignctx) (EVP_PKEY_CTX *ctx, + unsigned char *sig, + size_t *siglen, + EVP_MD_CTX *mctx)); + +void EVP_PKEY_meth_get_verifyctx(const EVP_PKEY_METHOD *pmeth, + int (**pverifyctx_init) (EVP_PKEY_CTX *ctx, + EVP_MD_CTX *mctx), + int (**pverifyctx) (EVP_PKEY_CTX *ctx, + const unsigned char *sig, + int siglen, + EVP_MD_CTX *mctx)); + +void EVP_PKEY_meth_get_encrypt(const EVP_PKEY_METHOD *pmeth, + int (**pencrypt_init) (EVP_PKEY_CTX *ctx), + int (**pencryptfn) (EVP_PKEY_CTX *ctx, + unsigned char *out, + size_t *outlen, + const unsigned char *in, + size_t inlen)); + +void EVP_PKEY_meth_get_decrypt(const EVP_PKEY_METHOD *pmeth, + int (**pdecrypt_init) (EVP_PKEY_CTX *ctx), + int (**pdecrypt) (EVP_PKEY_CTX *ctx, + unsigned char *out, + size_t *outlen, + const unsigned char *in, + size_t inlen)); + +void EVP_PKEY_meth_get_derive(const EVP_PKEY_METHOD *pmeth, + int (**pderive_init) (EVP_PKEY_CTX *ctx), + int (**pderive) (EVP_PKEY_CTX *ctx, + unsigned char *key, + size_t *keylen)); + +void EVP_PKEY_meth_get_ctrl(const EVP_PKEY_METHOD *pmeth, + int (**pctrl) (EVP_PKEY_CTX *ctx, int type, int p1, + void *p2), + int (**pctrl_str) (EVP_PKEY_CTX *ctx, + const char *type, + const char *value)); + +void EVP_PKEY_meth_get_digestsign(EVP_PKEY_METHOD *pmeth, + int (**digestsign) (EVP_MD_CTX *ctx, + unsigned char *sig, + size_t *siglen, + const unsigned char *tbs, + size_t tbslen)); + +void EVP_PKEY_meth_get_digestverify(EVP_PKEY_METHOD *pmeth, + int (**digestverify) (EVP_MD_CTX *ctx, + const unsigned char *sig, + size_t siglen, + const unsigned char *tbs, + size_t tbslen)); + +void EVP_PKEY_meth_get_check(const EVP_PKEY_METHOD *pmeth, + int (**pcheck) (EVP_PKEY *pkey)); + +void EVP_PKEY_meth_get_public_check(const EVP_PKEY_METHOD *pmeth, + int (**pcheck) (EVP_PKEY *pkey)); + +void EVP_PKEY_meth_get_param_check(const EVP_PKEY_METHOD *pmeth, + int (**pcheck) (EVP_PKEY *pkey)); + +void EVP_PKEY_meth_get_digest_custom(EVP_PKEY_METHOD *pmeth, + int (**pdigest_custom) (EVP_PKEY_CTX *ctx, + EVP_MD_CTX *mctx)); +void EVP_add_alg_module(void); + + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/evperr.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/evperr.h new file mode 100644 index 00000000..d2b26ea5 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/evperr.h @@ -0,0 +1,205 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_EVPERR_H +# define HEADER_EVPERR_H + +# ifndef HEADER_SYMHACKS_H +# include +# endif + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_EVP_strings(void); + +/* + * EVP function codes. + */ +# define EVP_F_AESNI_INIT_KEY 165 +# define EVP_F_AESNI_XTS_INIT_KEY 207 +# define EVP_F_AES_GCM_CTRL 196 +# define EVP_F_AES_INIT_KEY 133 +# define EVP_F_AES_OCB_CIPHER 169 +# define EVP_F_AES_T4_INIT_KEY 178 +# define EVP_F_AES_T4_XTS_INIT_KEY 208 +# define EVP_F_AES_WRAP_CIPHER 170 +# define EVP_F_AES_XTS_INIT_KEY 209 +# define EVP_F_ALG_MODULE_INIT 177 +# define EVP_F_ARIA_CCM_INIT_KEY 175 +# define EVP_F_ARIA_GCM_CTRL 197 +# define EVP_F_ARIA_GCM_INIT_KEY 176 +# define EVP_F_ARIA_INIT_KEY 185 +# define EVP_F_B64_NEW 198 +# define EVP_F_CAMELLIA_INIT_KEY 159 +# define EVP_F_CHACHA20_POLY1305_CTRL 182 +# define EVP_F_CMLL_T4_INIT_KEY 179 +# define EVP_F_DES_EDE3_WRAP_CIPHER 171 +# define EVP_F_DO_SIGVER_INIT 161 +# define EVP_F_ENC_NEW 199 +# define EVP_F_EVP_CIPHERINIT_EX 123 +# define EVP_F_EVP_CIPHER_ASN1_TO_PARAM 204 +# define EVP_F_EVP_CIPHER_CTX_COPY 163 +# define EVP_F_EVP_CIPHER_CTX_CTRL 124 +# define EVP_F_EVP_CIPHER_CTX_SET_KEY_LENGTH 122 +# define EVP_F_EVP_CIPHER_PARAM_TO_ASN1 205 +# define EVP_F_EVP_DECRYPTFINAL_EX 101 +# define EVP_F_EVP_DECRYPTUPDATE 166 +# define EVP_F_EVP_DIGESTFINALXOF 174 +# define EVP_F_EVP_DIGESTINIT_EX 128 +# define EVP_F_EVP_ENCRYPTDECRYPTUPDATE 219 +# define EVP_F_EVP_ENCRYPTFINAL_EX 127 +# define EVP_F_EVP_ENCRYPTUPDATE 167 +# define EVP_F_EVP_MD_CTX_COPY_EX 110 +# define EVP_F_EVP_MD_SIZE 162 +# define EVP_F_EVP_OPENINIT 102 +# define EVP_F_EVP_PBE_ALG_ADD 115 +# define EVP_F_EVP_PBE_ALG_ADD_TYPE 160 +# define EVP_F_EVP_PBE_CIPHERINIT 116 +# define EVP_F_EVP_PBE_SCRYPT 181 +# define EVP_F_EVP_PKCS82PKEY 111 +# define EVP_F_EVP_PKEY2PKCS8 113 +# define EVP_F_EVP_PKEY_ASN1_ADD0 188 +# define EVP_F_EVP_PKEY_CHECK 186 +# define EVP_F_EVP_PKEY_COPY_PARAMETERS 103 +# define EVP_F_EVP_PKEY_CTX_CTRL 137 +# define EVP_F_EVP_PKEY_CTX_CTRL_STR 150 +# define EVP_F_EVP_PKEY_CTX_DUP 156 +# define EVP_F_EVP_PKEY_CTX_MD 168 +# define EVP_F_EVP_PKEY_DECRYPT 104 +# define EVP_F_EVP_PKEY_DECRYPT_INIT 138 +# define EVP_F_EVP_PKEY_DECRYPT_OLD 151 +# define EVP_F_EVP_PKEY_DERIVE 153 +# define EVP_F_EVP_PKEY_DERIVE_INIT 154 +# define EVP_F_EVP_PKEY_DERIVE_SET_PEER 155 +# define EVP_F_EVP_PKEY_ENCRYPT 105 +# define EVP_F_EVP_PKEY_ENCRYPT_INIT 139 +# define EVP_F_EVP_PKEY_ENCRYPT_OLD 152 +# define EVP_F_EVP_PKEY_GET0_DH 119 +# define EVP_F_EVP_PKEY_GET0_DSA 120 +# define EVP_F_EVP_PKEY_GET0_EC_KEY 131 +# define EVP_F_EVP_PKEY_GET0_HMAC 183 +# define EVP_F_EVP_PKEY_GET0_POLY1305 184 +# define EVP_F_EVP_PKEY_GET0_RSA 121 +# define EVP_F_EVP_PKEY_GET0_SIPHASH 172 +# define EVP_F_EVP_PKEY_GET_RAW_PRIVATE_KEY 202 +# define EVP_F_EVP_PKEY_GET_RAW_PUBLIC_KEY 203 +# define EVP_F_EVP_PKEY_KEYGEN 146 +# define EVP_F_EVP_PKEY_KEYGEN_INIT 147 +# define EVP_F_EVP_PKEY_METH_ADD0 194 +# define EVP_F_EVP_PKEY_METH_NEW 195 +# define EVP_F_EVP_PKEY_NEW 106 +# define EVP_F_EVP_PKEY_NEW_CMAC_KEY 193 +# define EVP_F_EVP_PKEY_NEW_RAW_PRIVATE_KEY 191 +# define EVP_F_EVP_PKEY_NEW_RAW_PUBLIC_KEY 192 +# define EVP_F_EVP_PKEY_PARAMGEN 148 +# define EVP_F_EVP_PKEY_PARAMGEN_INIT 149 +# define EVP_F_EVP_PKEY_PARAM_CHECK 189 +# define EVP_F_EVP_PKEY_PUBLIC_CHECK 190 +# define EVP_F_EVP_PKEY_SET1_ENGINE 187 +# define EVP_F_EVP_PKEY_SET_ALIAS_TYPE 206 +# define EVP_F_EVP_PKEY_SIGN 140 +# define EVP_F_EVP_PKEY_SIGN_INIT 141 +# define EVP_F_EVP_PKEY_VERIFY 142 +# define EVP_F_EVP_PKEY_VERIFY_INIT 143 +# define EVP_F_EVP_PKEY_VERIFY_RECOVER 144 +# define EVP_F_EVP_PKEY_VERIFY_RECOVER_INIT 145 +# define EVP_F_EVP_SIGNFINAL 107 +# define EVP_F_EVP_VERIFYFINAL 108 +# define EVP_F_INT_CTX_NEW 157 +# define EVP_F_OK_NEW 200 +# define EVP_F_PKCS5_PBE_KEYIVGEN 117 +# define EVP_F_PKCS5_V2_PBE_KEYIVGEN 118 +# define EVP_F_PKCS5_V2_PBKDF2_KEYIVGEN 164 +# define EVP_F_PKCS5_V2_SCRYPT_KEYIVGEN 180 +# define EVP_F_PKEY_SET_TYPE 158 +# define EVP_F_RC2_MAGIC_TO_METH 109 +# define EVP_F_RC5_CTRL 125 +# define EVP_F_R_32_12_16_INIT_KEY 242 +# define EVP_F_S390X_AES_GCM_CTRL 201 +# define EVP_F_UPDATE 173 + +/* + * EVP reason codes. + */ +# define EVP_R_AES_KEY_SETUP_FAILED 143 +# define EVP_R_ARIA_KEY_SETUP_FAILED 176 +# define EVP_R_BAD_DECRYPT 100 +# define EVP_R_BAD_KEY_LENGTH 195 +# define EVP_R_BUFFER_TOO_SMALL 155 +# define EVP_R_CAMELLIA_KEY_SETUP_FAILED 157 +# define EVP_R_CIPHER_PARAMETER_ERROR 122 +# define EVP_R_COMMAND_NOT_SUPPORTED 147 +# define EVP_R_COPY_ERROR 173 +# define EVP_R_CTRL_NOT_IMPLEMENTED 132 +# define EVP_R_CTRL_OPERATION_NOT_IMPLEMENTED 133 +# define EVP_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH 138 +# define EVP_R_DECODE_ERROR 114 +# define EVP_R_DIFFERENT_KEY_TYPES 101 +# define EVP_R_DIFFERENT_PARAMETERS 153 +# define EVP_R_ERROR_LOADING_SECTION 165 +# define EVP_R_ERROR_SETTING_FIPS_MODE 166 +# define EVP_R_EXPECTING_AN_HMAC_KEY 174 +# define EVP_R_EXPECTING_AN_RSA_KEY 127 +# define EVP_R_EXPECTING_A_DH_KEY 128 +# define EVP_R_EXPECTING_A_DSA_KEY 129 +# define EVP_R_EXPECTING_A_EC_KEY 142 +# define EVP_R_EXPECTING_A_POLY1305_KEY 164 +# define EVP_R_EXPECTING_A_SIPHASH_KEY 175 +# define EVP_R_FIPS_MODE_NOT_SUPPORTED 167 +# define EVP_R_GET_RAW_KEY_FAILED 182 +# define EVP_R_ILLEGAL_SCRYPT_PARAMETERS 171 +# define EVP_R_INITIALIZATION_ERROR 134 +# define EVP_R_INPUT_NOT_INITIALIZED 111 +# define EVP_R_INVALID_DIGEST 152 +# define EVP_R_INVALID_FIPS_MODE 168 +# define EVP_R_INVALID_IV_LENGTH 194 +# define EVP_R_INVALID_KEY 163 +# define EVP_R_INVALID_KEY_LENGTH 130 +# define EVP_R_INVALID_OPERATION 148 +# define EVP_R_KEYGEN_FAILURE 120 +# define EVP_R_KEY_SETUP_FAILED 180 +# define EVP_R_MEMORY_LIMIT_EXCEEDED 172 +# define EVP_R_MESSAGE_DIGEST_IS_NULL 159 +# define EVP_R_METHOD_NOT_SUPPORTED 144 +# define EVP_R_MISSING_PARAMETERS 103 +# define EVP_R_NOT_XOF_OR_INVALID_LENGTH 178 +# define EVP_R_NO_CIPHER_SET 131 +# define EVP_R_NO_DEFAULT_DIGEST 158 +# define EVP_R_NO_DIGEST_SET 139 +# define EVP_R_NO_KEY_SET 154 +# define EVP_R_NO_OPERATION_SET 149 +# define EVP_R_ONLY_ONESHOT_SUPPORTED 177 +# define EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE 150 +# define EVP_R_OPERATON_NOT_INITIALIZED 151 +# define EVP_R_PARTIALLY_OVERLAPPING 162 +# define EVP_R_PBKDF2_ERROR 181 +# define EVP_R_PKEY_APPLICATION_ASN1_METHOD_ALREADY_REGISTERED 179 +# define EVP_R_PRIVATE_KEY_DECODE_ERROR 145 +# define EVP_R_PRIVATE_KEY_ENCODE_ERROR 146 +# define EVP_R_PUBLIC_KEY_NOT_RSA 106 +# define EVP_R_UNKNOWN_CIPHER 160 +# define EVP_R_UNKNOWN_DIGEST 161 +# define EVP_R_UNKNOWN_OPTION 169 +# define EVP_R_UNKNOWN_PBE_ALGORITHM 121 +# define EVP_R_UNSUPPORTED_ALGORITHM 156 +# define EVP_R_UNSUPPORTED_CIPHER 107 +# define EVP_R_UNSUPPORTED_KEYLENGTH 123 +# define EVP_R_UNSUPPORTED_KEY_DERIVATION_FUNCTION 124 +# define EVP_R_UNSUPPORTED_KEY_SIZE 108 +# define EVP_R_UNSUPPORTED_NUMBER_OF_ROUNDS 135 +# define EVP_R_UNSUPPORTED_PRF 125 +# define EVP_R_UNSUPPORTED_PRIVATE_KEY_ALGORITHM 118 +# define EVP_R_UNSUPPORTED_SALT_TYPE 126 +# define EVP_R_WRAP_MODE_NOT_ALLOWED 170 +# define EVP_R_WRONG_FINAL_BLOCK_LENGTH 109 +# define EVP_R_XTS_DUPLICATED_KEYS 183 + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/hmac.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/hmac.h new file mode 100644 index 00000000..458efc1d --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/hmac.h @@ -0,0 +1,51 @@ +/* + * Copyright 1995-2018 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_HMAC_H +# define HEADER_HMAC_H + +# include + +# include + +# if OPENSSL_API_COMPAT < 0x10200000L +# define HMAC_MAX_MD_CBLOCK 128 /* Deprecated */ +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +size_t HMAC_size(const HMAC_CTX *e); +HMAC_CTX *HMAC_CTX_new(void); +int HMAC_CTX_reset(HMAC_CTX *ctx); +void HMAC_CTX_free(HMAC_CTX *ctx); + +DEPRECATEDIN_1_1_0(__owur int HMAC_Init(HMAC_CTX *ctx, const void *key, int len, + const EVP_MD *md)) + +/*__owur*/ int HMAC_Init_ex(HMAC_CTX *ctx, const void *key, int len, + const EVP_MD *md, ENGINE *impl); +/*__owur*/ int HMAC_Update(HMAC_CTX *ctx, const unsigned char *data, + size_t len); +/*__owur*/ int HMAC_Final(HMAC_CTX *ctx, unsigned char *md, + unsigned int *len); +unsigned char *HMAC(const EVP_MD *evp_md, const void *key, int key_len, + const unsigned char *d, size_t n, unsigned char *md, + unsigned int *md_len); +__owur int HMAC_CTX_copy(HMAC_CTX *dctx, HMAC_CTX *sctx); + +void HMAC_CTX_set_flags(HMAC_CTX *ctx, unsigned long flags); +const EVP_MD *HMAC_CTX_get_md(const HMAC_CTX *ctx); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/idea.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/idea.h new file mode 100644 index 00000000..4334f3ea --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/idea.h @@ -0,0 +1,64 @@ +/* + * Copyright 1995-2016 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_IDEA_H +# define HEADER_IDEA_H + +# include + +# ifndef OPENSSL_NO_IDEA +# ifdef __cplusplus +extern "C" { +# endif + +typedef unsigned int IDEA_INT; + +# define IDEA_ENCRYPT 1 +# define IDEA_DECRYPT 0 + +# define IDEA_BLOCK 8 +# define IDEA_KEY_LENGTH 16 + +typedef struct idea_key_st { + IDEA_INT data[9][6]; +} IDEA_KEY_SCHEDULE; + +const char *IDEA_options(void); +void IDEA_ecb_encrypt(const unsigned char *in, unsigned char *out, + IDEA_KEY_SCHEDULE *ks); +void IDEA_set_encrypt_key(const unsigned char *key, IDEA_KEY_SCHEDULE *ks); +void IDEA_set_decrypt_key(IDEA_KEY_SCHEDULE *ek, IDEA_KEY_SCHEDULE *dk); +void IDEA_cbc_encrypt(const unsigned char *in, unsigned char *out, + long length, IDEA_KEY_SCHEDULE *ks, unsigned char *iv, + int enc); +void IDEA_cfb64_encrypt(const unsigned char *in, unsigned char *out, + long length, IDEA_KEY_SCHEDULE *ks, unsigned char *iv, + int *num, int enc); +void IDEA_ofb64_encrypt(const unsigned char *in, unsigned char *out, + long length, IDEA_KEY_SCHEDULE *ks, unsigned char *iv, + int *num); +void IDEA_encrypt(unsigned long *in, IDEA_KEY_SCHEDULE *ks); + +# if OPENSSL_API_COMPAT < 0x10100000L +# define idea_options IDEA_options +# define idea_ecb_encrypt IDEA_ecb_encrypt +# define idea_set_encrypt_key IDEA_set_encrypt_key +# define idea_set_decrypt_key IDEA_set_decrypt_key +# define idea_cbc_encrypt IDEA_cbc_encrypt +# define idea_cfb64_encrypt IDEA_cfb64_encrypt +# define idea_ofb64_encrypt IDEA_ofb64_encrypt +# define idea_encrypt IDEA_encrypt +# endif + +# ifdef __cplusplus +} +# endif +# endif + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/kdf.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/kdf.h new file mode 100644 index 00000000..5abd4c37 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/kdf.h @@ -0,0 +1,97 @@ +/* + * Copyright 2016-2018 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_KDF_H +# define HEADER_KDF_H + +# include +#ifdef __cplusplus +extern "C" { +#endif + +# define EVP_PKEY_CTRL_TLS_MD (EVP_PKEY_ALG_CTRL) +# define EVP_PKEY_CTRL_TLS_SECRET (EVP_PKEY_ALG_CTRL + 1) +# define EVP_PKEY_CTRL_TLS_SEED (EVP_PKEY_ALG_CTRL + 2) +# define EVP_PKEY_CTRL_HKDF_MD (EVP_PKEY_ALG_CTRL + 3) +# define EVP_PKEY_CTRL_HKDF_SALT (EVP_PKEY_ALG_CTRL + 4) +# define EVP_PKEY_CTRL_HKDF_KEY (EVP_PKEY_ALG_CTRL + 5) +# define EVP_PKEY_CTRL_HKDF_INFO (EVP_PKEY_ALG_CTRL + 6) +# define EVP_PKEY_CTRL_HKDF_MODE (EVP_PKEY_ALG_CTRL + 7) +# define EVP_PKEY_CTRL_PASS (EVP_PKEY_ALG_CTRL + 8) +# define EVP_PKEY_CTRL_SCRYPT_SALT (EVP_PKEY_ALG_CTRL + 9) +# define EVP_PKEY_CTRL_SCRYPT_N (EVP_PKEY_ALG_CTRL + 10) +# define EVP_PKEY_CTRL_SCRYPT_R (EVP_PKEY_ALG_CTRL + 11) +# define EVP_PKEY_CTRL_SCRYPT_P (EVP_PKEY_ALG_CTRL + 12) +# define EVP_PKEY_CTRL_SCRYPT_MAXMEM_BYTES (EVP_PKEY_ALG_CTRL + 13) + +# define EVP_PKEY_HKDEF_MODE_EXTRACT_AND_EXPAND 0 +# define EVP_PKEY_HKDEF_MODE_EXTRACT_ONLY 1 +# define EVP_PKEY_HKDEF_MODE_EXPAND_ONLY 2 + +# define EVP_PKEY_CTX_set_tls1_prf_md(pctx, md) \ + EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_TLS_MD, 0, (void *)(md)) + +# define EVP_PKEY_CTX_set1_tls1_prf_secret(pctx, sec, seclen) \ + EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_TLS_SECRET, seclen, (void *)(sec)) + +# define EVP_PKEY_CTX_add1_tls1_prf_seed(pctx, seed, seedlen) \ + EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_TLS_SEED, seedlen, (void *)(seed)) + +# define EVP_PKEY_CTX_set_hkdf_md(pctx, md) \ + EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_HKDF_MD, 0, (void *)(md)) + +# define EVP_PKEY_CTX_set1_hkdf_salt(pctx, salt, saltlen) \ + EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_HKDF_SALT, saltlen, (void *)(salt)) + +# define EVP_PKEY_CTX_set1_hkdf_key(pctx, key, keylen) \ + EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_HKDF_KEY, keylen, (void *)(key)) + +# define EVP_PKEY_CTX_add1_hkdf_info(pctx, info, infolen) \ + EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_HKDF_INFO, infolen, (void *)(info)) + +# define EVP_PKEY_CTX_hkdf_mode(pctx, mode) \ + EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_HKDF_MODE, mode, NULL) + +# define EVP_PKEY_CTX_set1_pbe_pass(pctx, pass, passlen) \ + EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_PASS, passlen, (void *)(pass)) + +# define EVP_PKEY_CTX_set1_scrypt_salt(pctx, salt, saltlen) \ + EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_SCRYPT_SALT, saltlen, (void *)(salt)) + +# define EVP_PKEY_CTX_set_scrypt_N(pctx, n) \ + EVP_PKEY_CTX_ctrl_uint64(pctx, -1, EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_SCRYPT_N, n) + +# define EVP_PKEY_CTX_set_scrypt_r(pctx, r) \ + EVP_PKEY_CTX_ctrl_uint64(pctx, -1, EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_SCRYPT_R, r) + +# define EVP_PKEY_CTX_set_scrypt_p(pctx, p) \ + EVP_PKEY_CTX_ctrl_uint64(pctx, -1, EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_SCRYPT_P, p) + +# define EVP_PKEY_CTX_set_scrypt_maxmem_bytes(pctx, maxmem_bytes) \ + EVP_PKEY_CTX_ctrl_uint64(pctx, -1, EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_SCRYPT_MAXMEM_BYTES, maxmem_bytes) + + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/kdferr.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/kdferr.h new file mode 100644 index 00000000..3f51bd02 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/kdferr.h @@ -0,0 +1,55 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2019 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_KDFERR_H +# define HEADER_KDFERR_H + +# ifndef HEADER_SYMHACKS_H +# include +# endif + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_KDF_strings(void); + +/* + * KDF function codes. + */ +# define KDF_F_PKEY_HKDF_CTRL_STR 103 +# define KDF_F_PKEY_HKDF_DERIVE 102 +# define KDF_F_PKEY_HKDF_INIT 108 +# define KDF_F_PKEY_SCRYPT_CTRL_STR 104 +# define KDF_F_PKEY_SCRYPT_CTRL_UINT64 105 +# define KDF_F_PKEY_SCRYPT_DERIVE 109 +# define KDF_F_PKEY_SCRYPT_INIT 106 +# define KDF_F_PKEY_SCRYPT_SET_MEMBUF 107 +# define KDF_F_PKEY_TLS1_PRF_CTRL_STR 100 +# define KDF_F_PKEY_TLS1_PRF_DERIVE 101 +# define KDF_F_PKEY_TLS1_PRF_INIT 110 +# define KDF_F_TLS1_PRF_ALG 111 + +/* + * KDF reason codes. + */ +# define KDF_R_INVALID_DIGEST 100 +# define KDF_R_MISSING_ITERATION_COUNT 109 +# define KDF_R_MISSING_KEY 104 +# define KDF_R_MISSING_MESSAGE_DIGEST 105 +# define KDF_R_MISSING_PARAMETER 101 +# define KDF_R_MISSING_PASS 110 +# define KDF_R_MISSING_SALT 111 +# define KDF_R_MISSING_SECRET 107 +# define KDF_R_MISSING_SEED 106 +# define KDF_R_UNKNOWN_PARAMETER_TYPE 103 +# define KDF_R_VALUE_ERROR 108 +# define KDF_R_VALUE_MISSING 102 + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/lhash.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/lhash.h new file mode 100644 index 00000000..2e42d727 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/lhash.h @@ -0,0 +1,241 @@ +/* + * 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* + * Header for dynamic hash table routines Author - Eric Young + */ + +#ifndef HEADER_LHASH_H +# define HEADER_LHASH_H + +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct lhash_node_st OPENSSL_LH_NODE; +typedef int (*OPENSSL_LH_COMPFUNC) (const void *, const void *); +typedef unsigned long (*OPENSSL_LH_HASHFUNC) (const void *); +typedef void (*OPENSSL_LH_DOALL_FUNC) (void *); +typedef void (*OPENSSL_LH_DOALL_FUNCARG) (void *, void *); +typedef struct lhash_st OPENSSL_LHASH; + +/* + * Macros for declaring and implementing type-safe wrappers for LHASH + * callbacks. This way, callbacks can be provided to LHASH structures without + * function pointer casting and the macro-defined callbacks provide + * per-variable casting before deferring to the underlying type-specific + * callbacks. NB: It is possible to place a "static" in front of both the + * DECLARE and IMPLEMENT macros if the functions are strictly internal. + */ + +/* First: "hash" functions */ +# define DECLARE_LHASH_HASH_FN(name, o_type) \ + unsigned long name##_LHASH_HASH(const void *); +# define IMPLEMENT_LHASH_HASH_FN(name, o_type) \ + unsigned long name##_LHASH_HASH(const void *arg) { \ + const o_type *a = arg; \ + return name##_hash(a); } +# define LHASH_HASH_FN(name) name##_LHASH_HASH + +/* Second: "compare" functions */ +# define DECLARE_LHASH_COMP_FN(name, o_type) \ + int name##_LHASH_COMP(const void *, const void *); +# define IMPLEMENT_LHASH_COMP_FN(name, o_type) \ + int name##_LHASH_COMP(const void *arg1, const void *arg2) { \ + const o_type *a = arg1; \ + const o_type *b = arg2; \ + return name##_cmp(a,b); } +# define LHASH_COMP_FN(name) name##_LHASH_COMP + +/* Fourth: "doall_arg" functions */ +# define DECLARE_LHASH_DOALL_ARG_FN(name, o_type, a_type) \ + void name##_LHASH_DOALL_ARG(void *, void *); +# define IMPLEMENT_LHASH_DOALL_ARG_FN(name, o_type, a_type) \ + void name##_LHASH_DOALL_ARG(void *arg1, void *arg2) { \ + o_type *a = arg1; \ + a_type *b = arg2; \ + name##_doall_arg(a, b); } +# define LHASH_DOALL_ARG_FN(name) name##_LHASH_DOALL_ARG + + +# define LH_LOAD_MULT 256 + +int OPENSSL_LH_error(OPENSSL_LHASH *lh); +OPENSSL_LHASH *OPENSSL_LH_new(OPENSSL_LH_HASHFUNC h, OPENSSL_LH_COMPFUNC c); +void OPENSSL_LH_free(OPENSSL_LHASH *lh); +void *OPENSSL_LH_insert(OPENSSL_LHASH *lh, void *data); +void *OPENSSL_LH_delete(OPENSSL_LHASH *lh, const void *data); +void *OPENSSL_LH_retrieve(OPENSSL_LHASH *lh, const void *data); +void OPENSSL_LH_doall(OPENSSL_LHASH *lh, OPENSSL_LH_DOALL_FUNC func); +void OPENSSL_LH_doall_arg(OPENSSL_LHASH *lh, OPENSSL_LH_DOALL_FUNCARG func, void *arg); +unsigned long OPENSSL_LH_strhash(const char *c); +unsigned long OPENSSL_LH_num_items(const OPENSSL_LHASH *lh); +unsigned long OPENSSL_LH_get_down_load(const OPENSSL_LHASH *lh); +void OPENSSL_LH_set_down_load(OPENSSL_LHASH *lh, unsigned long down_load); + +# ifndef OPENSSL_NO_STDIO +void OPENSSL_LH_stats(const OPENSSL_LHASH *lh, FILE *fp); +void OPENSSL_LH_node_stats(const OPENSSL_LHASH *lh, FILE *fp); +void OPENSSL_LH_node_usage_stats(const OPENSSL_LHASH *lh, FILE *fp); +# endif +void OPENSSL_LH_stats_bio(const OPENSSL_LHASH *lh, BIO *out); +void OPENSSL_LH_node_stats_bio(const OPENSSL_LHASH *lh, BIO *out); +void OPENSSL_LH_node_usage_stats_bio(const OPENSSL_LHASH *lh, BIO *out); + +# if OPENSSL_API_COMPAT < 0x10100000L +# define _LHASH OPENSSL_LHASH +# define LHASH_NODE OPENSSL_LH_NODE +# define lh_error OPENSSL_LH_error +# define lh_new OPENSSL_LH_new +# define lh_free OPENSSL_LH_free +# define lh_insert OPENSSL_LH_insert +# define lh_delete OPENSSL_LH_delete +# define lh_retrieve OPENSSL_LH_retrieve +# define lh_doall OPENSSL_LH_doall +# define lh_doall_arg OPENSSL_LH_doall_arg +# define lh_strhash OPENSSL_LH_strhash +# define lh_num_items OPENSSL_LH_num_items +# ifndef OPENSSL_NO_STDIO +# define lh_stats OPENSSL_LH_stats +# define lh_node_stats OPENSSL_LH_node_stats +# define lh_node_usage_stats OPENSSL_LH_node_usage_stats +# endif +# define lh_stats_bio OPENSSL_LH_stats_bio +# define lh_node_stats_bio OPENSSL_LH_node_stats_bio +# define lh_node_usage_stats_bio OPENSSL_LH_node_usage_stats_bio +# endif + +/* Type checking... */ + +# define LHASH_OF(type) struct lhash_st_##type + +# define DEFINE_LHASH_OF(type) \ + LHASH_OF(type) { union lh_##type##_dummy { void* d1; unsigned long d2; int d3; } dummy; }; \ + static ossl_unused ossl_inline LHASH_OF(type) *lh_##type##_new(unsigned long (*hfn)(const type *), \ + int (*cfn)(const type *, const type *)) \ + { \ + return (LHASH_OF(type) *) \ + OPENSSL_LH_new((OPENSSL_LH_HASHFUNC)hfn, (OPENSSL_LH_COMPFUNC)cfn); \ + } \ + static ossl_unused ossl_inline void lh_##type##_free(LHASH_OF(type) *lh) \ + { \ + OPENSSL_LH_free((OPENSSL_LHASH *)lh); \ + } \ + static ossl_unused ossl_inline type *lh_##type##_insert(LHASH_OF(type) *lh, type *d) \ + { \ + return (type *)OPENSSL_LH_insert((OPENSSL_LHASH *)lh, d); \ + } \ + static ossl_unused ossl_inline type *lh_##type##_delete(LHASH_OF(type) *lh, const type *d) \ + { \ + return (type *)OPENSSL_LH_delete((OPENSSL_LHASH *)lh, d); \ + } \ + static ossl_unused ossl_inline type *lh_##type##_retrieve(LHASH_OF(type) *lh, const type *d) \ + { \ + return (type *)OPENSSL_LH_retrieve((OPENSSL_LHASH *)lh, d); \ + } \ + static ossl_unused ossl_inline int lh_##type##_error(LHASH_OF(type) *lh) \ + { \ + return OPENSSL_LH_error((OPENSSL_LHASH *)lh); \ + } \ + static ossl_unused ossl_inline unsigned long lh_##type##_num_items(LHASH_OF(type) *lh) \ + { \ + return OPENSSL_LH_num_items((OPENSSL_LHASH *)lh); \ + } \ + static ossl_unused ossl_inline void lh_##type##_node_stats_bio(const LHASH_OF(type) *lh, BIO *out) \ + { \ + OPENSSL_LH_node_stats_bio((const OPENSSL_LHASH *)lh, out); \ + } \ + static ossl_unused ossl_inline void lh_##type##_node_usage_stats_bio(const LHASH_OF(type) *lh, BIO *out) \ + { \ + OPENSSL_LH_node_usage_stats_bio((const OPENSSL_LHASH *)lh, out); \ + } \ + static ossl_unused ossl_inline void lh_##type##_stats_bio(const LHASH_OF(type) *lh, BIO *out) \ + { \ + OPENSSL_LH_stats_bio((const OPENSSL_LHASH *)lh, out); \ + } \ + static ossl_unused ossl_inline unsigned long lh_##type##_get_down_load(LHASH_OF(type) *lh) \ + { \ + return OPENSSL_LH_get_down_load((OPENSSL_LHASH *)lh); \ + } \ + static ossl_unused ossl_inline void lh_##type##_set_down_load(LHASH_OF(type) *lh, unsigned long dl) \ + { \ + OPENSSL_LH_set_down_load((OPENSSL_LHASH *)lh, dl); \ + } \ + static ossl_unused ossl_inline void lh_##type##_doall(LHASH_OF(type) *lh, \ + void (*doall)(type *)) \ + { \ + OPENSSL_LH_doall((OPENSSL_LHASH *)lh, (OPENSSL_LH_DOALL_FUNC)doall); \ + } \ + LHASH_OF(type) + +#define IMPLEMENT_LHASH_DOALL_ARG_CONST(type, argtype) \ + int_implement_lhash_doall(type, argtype, const type) + +#define IMPLEMENT_LHASH_DOALL_ARG(type, argtype) \ + int_implement_lhash_doall(type, argtype, type) + +#define int_implement_lhash_doall(type, argtype, cbargtype) \ + static ossl_unused ossl_inline void \ + lh_##type##_doall_##argtype(LHASH_OF(type) *lh, \ + void (*fn)(cbargtype *, argtype *), \ + argtype *arg) \ + { \ + OPENSSL_LH_doall_arg((OPENSSL_LHASH *)lh, (OPENSSL_LH_DOALL_FUNCARG)fn, (void *)arg); \ + } \ + LHASH_OF(type) + +DEFINE_LHASH_OF(OPENSSL_STRING); +# ifdef _MSC_VER +/* + * push and pop this warning: + * warning C4090: 'function': different 'const' qualifiers + */ +# pragma warning (push) +# pragma warning (disable: 4090) +# endif + +DEFINE_LHASH_OF(OPENSSL_CSTRING); + +# ifdef _MSC_VER +# pragma warning (pop) +# endif + +/* + * If called without higher optimization (min. -xO3) the Oracle Developer + * Studio compiler generates code for the defined (static inline) functions + * above. + * This would later lead to the linker complaining about missing symbols when + * this header file is included but the resulting object is not linked against + * the Crypto library (openssl#6912). + */ +# ifdef __SUNPRO_C +# pragma weak OPENSSL_LH_new +# pragma weak OPENSSL_LH_free +# pragma weak OPENSSL_LH_insert +# pragma weak OPENSSL_LH_delete +# pragma weak OPENSSL_LH_retrieve +# pragma weak OPENSSL_LH_error +# pragma weak OPENSSL_LH_num_items +# pragma weak OPENSSL_LH_node_stats_bio +# pragma weak OPENSSL_LH_node_usage_stats_bio +# pragma weak OPENSSL_LH_stats_bio +# pragma weak OPENSSL_LH_get_down_load +# pragma weak OPENSSL_LH_set_down_load +# pragma weak OPENSSL_LH_doall +# pragma weak OPENSSL_LH_doall_arg +# endif /* __SUNPRO_C */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/md2.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/md2.h new file mode 100644 index 00000000..7faf8e3d --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/md2.h @@ -0,0 +1,44 @@ +/* + * Copyright 1995-2016 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_MD2_H +# define HEADER_MD2_H + +# include + +# ifndef OPENSSL_NO_MD2 +# include +# ifdef __cplusplus +extern "C" { +# endif + +typedef unsigned char MD2_INT; + +# define MD2_DIGEST_LENGTH 16 +# define MD2_BLOCK 16 + +typedef struct MD2state_st { + unsigned int num; + unsigned char data[MD2_BLOCK]; + MD2_INT cksm[MD2_BLOCK]; + MD2_INT state[MD2_BLOCK]; +} MD2_CTX; + +const char *MD2_options(void); +int MD2_Init(MD2_CTX *c); +int MD2_Update(MD2_CTX *c, const unsigned char *data, size_t len); +int MD2_Final(unsigned char *md, MD2_CTX *c); +unsigned char *MD2(const unsigned char *d, size_t n, unsigned char *md); + +# ifdef __cplusplus +} +# endif +# endif + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/md4.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/md4.h new file mode 100644 index 00000000..940e29db --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/md4.h @@ -0,0 +1,51 @@ +/* + * Copyright 1995-2016 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_MD4_H +# define HEADER_MD4_H + +# include + +# ifndef OPENSSL_NO_MD4 +# include +# include +# ifdef __cplusplus +extern "C" { +# endif + +/*- + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + * ! MD4_LONG has to be at least 32 bits wide. ! + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + */ +# define MD4_LONG unsigned int + +# define MD4_CBLOCK 64 +# define MD4_LBLOCK (MD4_CBLOCK/4) +# define MD4_DIGEST_LENGTH 16 + +typedef struct MD4state_st { + MD4_LONG A, B, C, D; + MD4_LONG Nl, Nh; + MD4_LONG data[MD4_LBLOCK]; + unsigned int num; +} MD4_CTX; + +int MD4_Init(MD4_CTX *c); +int MD4_Update(MD4_CTX *c, const void *data, size_t len); +int MD4_Final(unsigned char *md, MD4_CTX *c); +unsigned char *MD4(const unsigned char *d, size_t n, unsigned char *md); +void MD4_Transform(MD4_CTX *c, const unsigned char *b); + +# ifdef __cplusplus +} +# endif +# endif + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/md5.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/md5.h new file mode 100644 index 00000000..2deb7721 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/md5.h @@ -0,0 +1,50 @@ +/* + * Copyright 1995-2016 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_MD5_H +# define HEADER_MD5_H + +# include + +# ifndef OPENSSL_NO_MD5 +# include +# include +# ifdef __cplusplus +extern "C" { +# endif + +/* + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + * ! MD5_LONG has to be at least 32 bits wide. ! + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + */ +# define MD5_LONG unsigned int + +# define MD5_CBLOCK 64 +# define MD5_LBLOCK (MD5_CBLOCK/4) +# define MD5_DIGEST_LENGTH 16 + +typedef struct MD5state_st { + MD5_LONG A, B, C, D; + MD5_LONG Nl, Nh; + MD5_LONG data[MD5_LBLOCK]; + unsigned int num; +} MD5_CTX; + +int MD5_Init(MD5_CTX *c); +int MD5_Update(MD5_CTX *c, const void *data, size_t len); +int MD5_Final(unsigned char *md, MD5_CTX *c); +unsigned char *MD5(const unsigned char *d, size_t n, unsigned char *md); +void MD5_Transform(MD5_CTX *c, const unsigned char *b); +# ifdef __cplusplus +} +# endif +# endif + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/mdc2.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/mdc2.h new file mode 100644 index 00000000..aabd2bfa --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/mdc2.h @@ -0,0 +1,42 @@ +/* + * Copyright 1995-2016 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_MDC2_H +# define HEADER_MDC2_H + +# include + +#ifndef OPENSSL_NO_MDC2 +# include +# include +# ifdef __cplusplus +extern "C" { +# endif + +# define MDC2_BLOCK 8 +# define MDC2_DIGEST_LENGTH 16 + +typedef struct mdc2_ctx_st { + unsigned int num; + unsigned char data[MDC2_BLOCK]; + DES_cblock h, hh; + int pad_type; /* either 1 or 2, default 1 */ +} MDC2_CTX; + +int MDC2_Init(MDC2_CTX *c); +int MDC2_Update(MDC2_CTX *c, const unsigned char *data, size_t len); +int MDC2_Final(unsigned char *md, MDC2_CTX *c); +unsigned char *MDC2(const unsigned char *d, size_t n, unsigned char *md); + +# ifdef __cplusplus +} +# endif +# endif + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/modes.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/modes.h new file mode 100644 index 00000000..d544f98d --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/modes.h @@ -0,0 +1,208 @@ +/* + * Copyright 2008-2016 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_MODES_H +# define HEADER_MODES_H + +# include + +# ifdef __cplusplus +extern "C" { +# endif +typedef void (*block128_f) (const unsigned char in[16], + unsigned char out[16], const void *key); + +typedef void (*cbc128_f) (const unsigned char *in, unsigned char *out, + size_t len, const void *key, + unsigned char ivec[16], int enc); + +typedef void (*ctr128_f) (const unsigned char *in, unsigned char *out, + size_t blocks, const void *key, + const unsigned char ivec[16]); + +typedef void (*ccm128_f) (const unsigned char *in, unsigned char *out, + size_t blocks, const void *key, + const unsigned char ivec[16], + unsigned char cmac[16]); + +void CRYPTO_cbc128_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const void *key, + unsigned char ivec[16], block128_f block); +void CRYPTO_cbc128_decrypt(const unsigned char *in, unsigned char *out, + size_t len, const void *key, + unsigned char ivec[16], block128_f block); + +void CRYPTO_ctr128_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const void *key, + unsigned char ivec[16], + unsigned char ecount_buf[16], unsigned int *num, + block128_f block); + +void CRYPTO_ctr128_encrypt_ctr32(const unsigned char *in, unsigned char *out, + size_t len, const void *key, + unsigned char ivec[16], + unsigned char ecount_buf[16], + unsigned int *num, ctr128_f ctr); + +void CRYPTO_ofb128_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const void *key, + unsigned char ivec[16], int *num, + block128_f block); + +void CRYPTO_cfb128_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const void *key, + unsigned char ivec[16], int *num, + int enc, block128_f block); +void CRYPTO_cfb128_8_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const void *key, + unsigned char ivec[16], int *num, + int enc, block128_f block); +void CRYPTO_cfb128_1_encrypt(const unsigned char *in, unsigned char *out, + size_t bits, const void *key, + unsigned char ivec[16], int *num, + int enc, block128_f block); + +size_t CRYPTO_cts128_encrypt_block(const unsigned char *in, + unsigned char *out, size_t len, + const void *key, unsigned char ivec[16], + block128_f block); +size_t CRYPTO_cts128_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const void *key, + unsigned char ivec[16], cbc128_f cbc); +size_t CRYPTO_cts128_decrypt_block(const unsigned char *in, + unsigned char *out, size_t len, + const void *key, unsigned char ivec[16], + block128_f block); +size_t CRYPTO_cts128_decrypt(const unsigned char *in, unsigned char *out, + size_t len, const void *key, + unsigned char ivec[16], cbc128_f cbc); + +size_t CRYPTO_nistcts128_encrypt_block(const unsigned char *in, + unsigned char *out, size_t len, + const void *key, + unsigned char ivec[16], + block128_f block); +size_t CRYPTO_nistcts128_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const void *key, + unsigned char ivec[16], cbc128_f cbc); +size_t CRYPTO_nistcts128_decrypt_block(const unsigned char *in, + unsigned char *out, size_t len, + const void *key, + unsigned char ivec[16], + block128_f block); +size_t CRYPTO_nistcts128_decrypt(const unsigned char *in, unsigned char *out, + size_t len, const void *key, + unsigned char ivec[16], cbc128_f cbc); + +typedef struct gcm128_context GCM128_CONTEXT; + +GCM128_CONTEXT *CRYPTO_gcm128_new(void *key, block128_f block); +void CRYPTO_gcm128_init(GCM128_CONTEXT *ctx, void *key, block128_f block); +void CRYPTO_gcm128_setiv(GCM128_CONTEXT *ctx, const unsigned char *iv, + size_t len); +int CRYPTO_gcm128_aad(GCM128_CONTEXT *ctx, const unsigned char *aad, + size_t len); +int CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx, + const unsigned char *in, unsigned char *out, + size_t len); +int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx, + const unsigned char *in, unsigned char *out, + size_t len); +int CRYPTO_gcm128_encrypt_ctr32(GCM128_CONTEXT *ctx, + const unsigned char *in, unsigned char *out, + size_t len, ctr128_f stream); +int CRYPTO_gcm128_decrypt_ctr32(GCM128_CONTEXT *ctx, + const unsigned char *in, unsigned char *out, + size_t len, ctr128_f stream); +int CRYPTO_gcm128_finish(GCM128_CONTEXT *ctx, const unsigned char *tag, + size_t len); +void CRYPTO_gcm128_tag(GCM128_CONTEXT *ctx, unsigned char *tag, size_t len); +void CRYPTO_gcm128_release(GCM128_CONTEXT *ctx); + +typedef struct ccm128_context CCM128_CONTEXT; + +void CRYPTO_ccm128_init(CCM128_CONTEXT *ctx, + unsigned int M, unsigned int L, void *key, + block128_f block); +int CRYPTO_ccm128_setiv(CCM128_CONTEXT *ctx, const unsigned char *nonce, + size_t nlen, size_t mlen); +void CRYPTO_ccm128_aad(CCM128_CONTEXT *ctx, const unsigned char *aad, + size_t alen); +int CRYPTO_ccm128_encrypt(CCM128_CONTEXT *ctx, const unsigned char *inp, + unsigned char *out, size_t len); +int CRYPTO_ccm128_decrypt(CCM128_CONTEXT *ctx, const unsigned char *inp, + unsigned char *out, size_t len); +int CRYPTO_ccm128_encrypt_ccm64(CCM128_CONTEXT *ctx, const unsigned char *inp, + unsigned char *out, size_t len, + ccm128_f stream); +int CRYPTO_ccm128_decrypt_ccm64(CCM128_CONTEXT *ctx, const unsigned char *inp, + unsigned char *out, size_t len, + ccm128_f stream); +size_t CRYPTO_ccm128_tag(CCM128_CONTEXT *ctx, unsigned char *tag, size_t len); + +typedef struct xts128_context XTS128_CONTEXT; + +int CRYPTO_xts128_encrypt(const XTS128_CONTEXT *ctx, + const unsigned char iv[16], + const unsigned char *inp, unsigned char *out, + size_t len, int enc); + +size_t CRYPTO_128_wrap(void *key, const unsigned char *iv, + unsigned char *out, + const unsigned char *in, size_t inlen, + block128_f block); + +size_t CRYPTO_128_unwrap(void *key, const unsigned char *iv, + unsigned char *out, + const unsigned char *in, size_t inlen, + block128_f block); +size_t CRYPTO_128_wrap_pad(void *key, const unsigned char *icv, + unsigned char *out, const unsigned char *in, + size_t inlen, block128_f block); +size_t CRYPTO_128_unwrap_pad(void *key, const unsigned char *icv, + unsigned char *out, const unsigned char *in, + size_t inlen, block128_f block); + +# ifndef OPENSSL_NO_OCB +typedef struct ocb128_context OCB128_CONTEXT; + +typedef void (*ocb128_f) (const unsigned char *in, unsigned char *out, + size_t blocks, const void *key, + size_t start_block_num, + unsigned char offset_i[16], + const unsigned char L_[][16], + unsigned char checksum[16]); + +OCB128_CONTEXT *CRYPTO_ocb128_new(void *keyenc, void *keydec, + block128_f encrypt, block128_f decrypt, + ocb128_f stream); +int CRYPTO_ocb128_init(OCB128_CONTEXT *ctx, void *keyenc, void *keydec, + block128_f encrypt, block128_f decrypt, + ocb128_f stream); +int CRYPTO_ocb128_copy_ctx(OCB128_CONTEXT *dest, OCB128_CONTEXT *src, + void *keyenc, void *keydec); +int CRYPTO_ocb128_setiv(OCB128_CONTEXT *ctx, const unsigned char *iv, + size_t len, size_t taglen); +int CRYPTO_ocb128_aad(OCB128_CONTEXT *ctx, const unsigned char *aad, + size_t len); +int CRYPTO_ocb128_encrypt(OCB128_CONTEXT *ctx, const unsigned char *in, + unsigned char *out, size_t len); +int CRYPTO_ocb128_decrypt(OCB128_CONTEXT *ctx, const unsigned char *in, + unsigned char *out, size_t len); +int CRYPTO_ocb128_finish(OCB128_CONTEXT *ctx, const unsigned char *tag, + size_t len); +int CRYPTO_ocb128_tag(OCB128_CONTEXT *ctx, unsigned char *tag, size_t len); +void CRYPTO_ocb128_cleanup(OCB128_CONTEXT *ctx); +# endif /* OPENSSL_NO_OCB */ + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/obj_mac.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/obj_mac.h new file mode 100644 index 00000000..483fc050 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/obj_mac.h @@ -0,0 +1,5198 @@ +/* + * WARNING: do not edit! + * Generated by crypto/objects/objects.pl + * + * 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#define SN_undef "UNDEF" +#define LN_undef "undefined" +#define NID_undef 0 +#define OBJ_undef 0L + +#define SN_itu_t "ITU-T" +#define LN_itu_t "itu-t" +#define NID_itu_t 645 +#define OBJ_itu_t 0L + +#define NID_ccitt 404 +#define OBJ_ccitt OBJ_itu_t + +#define SN_iso "ISO" +#define LN_iso "iso" +#define NID_iso 181 +#define OBJ_iso 1L + +#define SN_joint_iso_itu_t "JOINT-ISO-ITU-T" +#define LN_joint_iso_itu_t "joint-iso-itu-t" +#define NID_joint_iso_itu_t 646 +#define OBJ_joint_iso_itu_t 2L + +#define NID_joint_iso_ccitt 393 +#define OBJ_joint_iso_ccitt OBJ_joint_iso_itu_t + +#define SN_member_body "member-body" +#define LN_member_body "ISO Member Body" +#define NID_member_body 182 +#define OBJ_member_body OBJ_iso,2L + +#define SN_identified_organization "identified-organization" +#define NID_identified_organization 676 +#define OBJ_identified_organization OBJ_iso,3L + +#define SN_hmac_md5 "HMAC-MD5" +#define LN_hmac_md5 "hmac-md5" +#define NID_hmac_md5 780 +#define OBJ_hmac_md5 OBJ_identified_organization,6L,1L,5L,5L,8L,1L,1L + +#define SN_hmac_sha1 "HMAC-SHA1" +#define LN_hmac_sha1 "hmac-sha1" +#define NID_hmac_sha1 781 +#define OBJ_hmac_sha1 OBJ_identified_organization,6L,1L,5L,5L,8L,1L,2L + +#define SN_x509ExtAdmission "x509ExtAdmission" +#define LN_x509ExtAdmission "Professional Information or basis for Admission" +#define NID_x509ExtAdmission 1093 +#define OBJ_x509ExtAdmission OBJ_identified_organization,36L,8L,3L,3L + +#define SN_certicom_arc "certicom-arc" +#define NID_certicom_arc 677 +#define OBJ_certicom_arc OBJ_identified_organization,132L + +#define SN_ieee "ieee" +#define NID_ieee 1170 +#define OBJ_ieee OBJ_identified_organization,111L + +#define SN_ieee_siswg "ieee-siswg" +#define LN_ieee_siswg "IEEE Security in Storage Working Group" +#define NID_ieee_siswg 1171 +#define OBJ_ieee_siswg OBJ_ieee,2L,1619L + +#define SN_international_organizations "international-organizations" +#define LN_international_organizations "International Organizations" +#define NID_international_organizations 647 +#define OBJ_international_organizations OBJ_joint_iso_itu_t,23L + +#define SN_wap "wap" +#define NID_wap 678 +#define OBJ_wap OBJ_international_organizations,43L + +#define SN_wap_wsg "wap-wsg" +#define NID_wap_wsg 679 +#define OBJ_wap_wsg OBJ_wap,1L + +#define SN_selected_attribute_types "selected-attribute-types" +#define LN_selected_attribute_types "Selected Attribute Types" +#define NID_selected_attribute_types 394 +#define OBJ_selected_attribute_types OBJ_joint_iso_itu_t,5L,1L,5L + +#define SN_clearance "clearance" +#define NID_clearance 395 +#define OBJ_clearance OBJ_selected_attribute_types,55L + +#define SN_ISO_US "ISO-US" +#define LN_ISO_US "ISO US Member Body" +#define NID_ISO_US 183 +#define OBJ_ISO_US OBJ_member_body,840L + +#define SN_X9_57 "X9-57" +#define LN_X9_57 "X9.57" +#define NID_X9_57 184 +#define OBJ_X9_57 OBJ_ISO_US,10040L + +#define SN_X9cm "X9cm" +#define LN_X9cm "X9.57 CM ?" +#define NID_X9cm 185 +#define OBJ_X9cm OBJ_X9_57,4L + +#define SN_ISO_CN "ISO-CN" +#define LN_ISO_CN "ISO CN Member Body" +#define NID_ISO_CN 1140 +#define OBJ_ISO_CN OBJ_member_body,156L + +#define SN_oscca "oscca" +#define NID_oscca 1141 +#define OBJ_oscca OBJ_ISO_CN,10197L + +#define SN_sm_scheme "sm-scheme" +#define NID_sm_scheme 1142 +#define OBJ_sm_scheme OBJ_oscca,1L + +#define SN_dsa "DSA" +#define LN_dsa "dsaEncryption" +#define NID_dsa 116 +#define OBJ_dsa OBJ_X9cm,1L + +#define SN_dsaWithSHA1 "DSA-SHA1" +#define LN_dsaWithSHA1 "dsaWithSHA1" +#define NID_dsaWithSHA1 113 +#define OBJ_dsaWithSHA1 OBJ_X9cm,3L + +#define SN_ansi_X9_62 "ansi-X9-62" +#define LN_ansi_X9_62 "ANSI X9.62" +#define NID_ansi_X9_62 405 +#define OBJ_ansi_X9_62 OBJ_ISO_US,10045L + +#define OBJ_X9_62_id_fieldType OBJ_ansi_X9_62,1L + +#define SN_X9_62_prime_field "prime-field" +#define NID_X9_62_prime_field 406 +#define OBJ_X9_62_prime_field OBJ_X9_62_id_fieldType,1L + +#define SN_X9_62_characteristic_two_field "characteristic-two-field" +#define NID_X9_62_characteristic_two_field 407 +#define OBJ_X9_62_characteristic_two_field OBJ_X9_62_id_fieldType,2L + +#define SN_X9_62_id_characteristic_two_basis "id-characteristic-two-basis" +#define NID_X9_62_id_characteristic_two_basis 680 +#define OBJ_X9_62_id_characteristic_two_basis OBJ_X9_62_characteristic_two_field,3L + +#define SN_X9_62_onBasis "onBasis" +#define NID_X9_62_onBasis 681 +#define OBJ_X9_62_onBasis OBJ_X9_62_id_characteristic_two_basis,1L + +#define SN_X9_62_tpBasis "tpBasis" +#define NID_X9_62_tpBasis 682 +#define OBJ_X9_62_tpBasis OBJ_X9_62_id_characteristic_two_basis,2L + +#define SN_X9_62_ppBasis "ppBasis" +#define NID_X9_62_ppBasis 683 +#define OBJ_X9_62_ppBasis OBJ_X9_62_id_characteristic_two_basis,3L + +#define OBJ_X9_62_id_publicKeyType OBJ_ansi_X9_62,2L + +#define SN_X9_62_id_ecPublicKey "id-ecPublicKey" +#define NID_X9_62_id_ecPublicKey 408 +#define OBJ_X9_62_id_ecPublicKey OBJ_X9_62_id_publicKeyType,1L + +#define OBJ_X9_62_ellipticCurve OBJ_ansi_X9_62,3L + +#define OBJ_X9_62_c_TwoCurve OBJ_X9_62_ellipticCurve,0L + +#define SN_X9_62_c2pnb163v1 "c2pnb163v1" +#define NID_X9_62_c2pnb163v1 684 +#define OBJ_X9_62_c2pnb163v1 OBJ_X9_62_c_TwoCurve,1L + +#define SN_X9_62_c2pnb163v2 "c2pnb163v2" +#define NID_X9_62_c2pnb163v2 685 +#define OBJ_X9_62_c2pnb163v2 OBJ_X9_62_c_TwoCurve,2L + +#define SN_X9_62_c2pnb163v3 "c2pnb163v3" +#define NID_X9_62_c2pnb163v3 686 +#define OBJ_X9_62_c2pnb163v3 OBJ_X9_62_c_TwoCurve,3L + +#define SN_X9_62_c2pnb176v1 "c2pnb176v1" +#define NID_X9_62_c2pnb176v1 687 +#define OBJ_X9_62_c2pnb176v1 OBJ_X9_62_c_TwoCurve,4L + +#define SN_X9_62_c2tnb191v1 "c2tnb191v1" +#define NID_X9_62_c2tnb191v1 688 +#define OBJ_X9_62_c2tnb191v1 OBJ_X9_62_c_TwoCurve,5L + +#define SN_X9_62_c2tnb191v2 "c2tnb191v2" +#define NID_X9_62_c2tnb191v2 689 +#define OBJ_X9_62_c2tnb191v2 OBJ_X9_62_c_TwoCurve,6L + +#define SN_X9_62_c2tnb191v3 "c2tnb191v3" +#define NID_X9_62_c2tnb191v3 690 +#define OBJ_X9_62_c2tnb191v3 OBJ_X9_62_c_TwoCurve,7L + +#define SN_X9_62_c2onb191v4 "c2onb191v4" +#define NID_X9_62_c2onb191v4 691 +#define OBJ_X9_62_c2onb191v4 OBJ_X9_62_c_TwoCurve,8L + +#define SN_X9_62_c2onb191v5 "c2onb191v5" +#define NID_X9_62_c2onb191v5 692 +#define OBJ_X9_62_c2onb191v5 OBJ_X9_62_c_TwoCurve,9L + +#define SN_X9_62_c2pnb208w1 "c2pnb208w1" +#define NID_X9_62_c2pnb208w1 693 +#define OBJ_X9_62_c2pnb208w1 OBJ_X9_62_c_TwoCurve,10L + +#define SN_X9_62_c2tnb239v1 "c2tnb239v1" +#define NID_X9_62_c2tnb239v1 694 +#define OBJ_X9_62_c2tnb239v1 OBJ_X9_62_c_TwoCurve,11L + +#define SN_X9_62_c2tnb239v2 "c2tnb239v2" +#define NID_X9_62_c2tnb239v2 695 +#define OBJ_X9_62_c2tnb239v2 OBJ_X9_62_c_TwoCurve,12L + +#define SN_X9_62_c2tnb239v3 "c2tnb239v3" +#define NID_X9_62_c2tnb239v3 696 +#define OBJ_X9_62_c2tnb239v3 OBJ_X9_62_c_TwoCurve,13L + +#define SN_X9_62_c2onb239v4 "c2onb239v4" +#define NID_X9_62_c2onb239v4 697 +#define OBJ_X9_62_c2onb239v4 OBJ_X9_62_c_TwoCurve,14L + +#define SN_X9_62_c2onb239v5 "c2onb239v5" +#define NID_X9_62_c2onb239v5 698 +#define OBJ_X9_62_c2onb239v5 OBJ_X9_62_c_TwoCurve,15L + +#define SN_X9_62_c2pnb272w1 "c2pnb272w1" +#define NID_X9_62_c2pnb272w1 699 +#define OBJ_X9_62_c2pnb272w1 OBJ_X9_62_c_TwoCurve,16L + +#define SN_X9_62_c2pnb304w1 "c2pnb304w1" +#define NID_X9_62_c2pnb304w1 700 +#define OBJ_X9_62_c2pnb304w1 OBJ_X9_62_c_TwoCurve,17L + +#define SN_X9_62_c2tnb359v1 "c2tnb359v1" +#define NID_X9_62_c2tnb359v1 701 +#define OBJ_X9_62_c2tnb359v1 OBJ_X9_62_c_TwoCurve,18L + +#define SN_X9_62_c2pnb368w1 "c2pnb368w1" +#define NID_X9_62_c2pnb368w1 702 +#define OBJ_X9_62_c2pnb368w1 OBJ_X9_62_c_TwoCurve,19L + +#define SN_X9_62_c2tnb431r1 "c2tnb431r1" +#define NID_X9_62_c2tnb431r1 703 +#define OBJ_X9_62_c2tnb431r1 OBJ_X9_62_c_TwoCurve,20L + +#define OBJ_X9_62_primeCurve OBJ_X9_62_ellipticCurve,1L + +#define SN_X9_62_prime192v1 "prime192v1" +#define NID_X9_62_prime192v1 409 +#define OBJ_X9_62_prime192v1 OBJ_X9_62_primeCurve,1L + +#define SN_X9_62_prime192v2 "prime192v2" +#define NID_X9_62_prime192v2 410 +#define OBJ_X9_62_prime192v2 OBJ_X9_62_primeCurve,2L + +#define SN_X9_62_prime192v3 "prime192v3" +#define NID_X9_62_prime192v3 411 +#define OBJ_X9_62_prime192v3 OBJ_X9_62_primeCurve,3L + +#define SN_X9_62_prime239v1 "prime239v1" +#define NID_X9_62_prime239v1 412 +#define OBJ_X9_62_prime239v1 OBJ_X9_62_primeCurve,4L + +#define SN_X9_62_prime239v2 "prime239v2" +#define NID_X9_62_prime239v2 413 +#define OBJ_X9_62_prime239v2 OBJ_X9_62_primeCurve,5L + +#define SN_X9_62_prime239v3 "prime239v3" +#define NID_X9_62_prime239v3 414 +#define OBJ_X9_62_prime239v3 OBJ_X9_62_primeCurve,6L + +#define SN_X9_62_prime256v1 "prime256v1" +#define NID_X9_62_prime256v1 415 +#define OBJ_X9_62_prime256v1 OBJ_X9_62_primeCurve,7L + +#define OBJ_X9_62_id_ecSigType OBJ_ansi_X9_62,4L + +#define SN_ecdsa_with_SHA1 "ecdsa-with-SHA1" +#define NID_ecdsa_with_SHA1 416 +#define OBJ_ecdsa_with_SHA1 OBJ_X9_62_id_ecSigType,1L + +#define SN_ecdsa_with_Recommended "ecdsa-with-Recommended" +#define NID_ecdsa_with_Recommended 791 +#define OBJ_ecdsa_with_Recommended OBJ_X9_62_id_ecSigType,2L + +#define SN_ecdsa_with_Specified "ecdsa-with-Specified" +#define NID_ecdsa_with_Specified 792 +#define OBJ_ecdsa_with_Specified OBJ_X9_62_id_ecSigType,3L + +#define SN_ecdsa_with_SHA224 "ecdsa-with-SHA224" +#define NID_ecdsa_with_SHA224 793 +#define OBJ_ecdsa_with_SHA224 OBJ_ecdsa_with_Specified,1L + +#define SN_ecdsa_with_SHA256 "ecdsa-with-SHA256" +#define NID_ecdsa_with_SHA256 794 +#define OBJ_ecdsa_with_SHA256 OBJ_ecdsa_with_Specified,2L + +#define SN_ecdsa_with_SHA384 "ecdsa-with-SHA384" +#define NID_ecdsa_with_SHA384 795 +#define OBJ_ecdsa_with_SHA384 OBJ_ecdsa_with_Specified,3L + +#define SN_ecdsa_with_SHA512 "ecdsa-with-SHA512" +#define NID_ecdsa_with_SHA512 796 +#define OBJ_ecdsa_with_SHA512 OBJ_ecdsa_with_Specified,4L + +#define OBJ_secg_ellipticCurve OBJ_certicom_arc,0L + +#define SN_secp112r1 "secp112r1" +#define NID_secp112r1 704 +#define OBJ_secp112r1 OBJ_secg_ellipticCurve,6L + +#define SN_secp112r2 "secp112r2" +#define NID_secp112r2 705 +#define OBJ_secp112r2 OBJ_secg_ellipticCurve,7L + +#define SN_secp128r1 "secp128r1" +#define NID_secp128r1 706 +#define OBJ_secp128r1 OBJ_secg_ellipticCurve,28L + +#define SN_secp128r2 "secp128r2" +#define NID_secp128r2 707 +#define OBJ_secp128r2 OBJ_secg_ellipticCurve,29L + +#define SN_secp160k1 "secp160k1" +#define NID_secp160k1 708 +#define OBJ_secp160k1 OBJ_secg_ellipticCurve,9L + +#define SN_secp160r1 "secp160r1" +#define NID_secp160r1 709 +#define OBJ_secp160r1 OBJ_secg_ellipticCurve,8L + +#define SN_secp160r2 "secp160r2" +#define NID_secp160r2 710 +#define OBJ_secp160r2 OBJ_secg_ellipticCurve,30L + +#define SN_secp192k1 "secp192k1" +#define NID_secp192k1 711 +#define OBJ_secp192k1 OBJ_secg_ellipticCurve,31L + +#define SN_secp224k1 "secp224k1" +#define NID_secp224k1 712 +#define OBJ_secp224k1 OBJ_secg_ellipticCurve,32L + +#define SN_secp224r1 "secp224r1" +#define NID_secp224r1 713 +#define OBJ_secp224r1 OBJ_secg_ellipticCurve,33L + +#define SN_secp256k1 "secp256k1" +#define NID_secp256k1 714 +#define OBJ_secp256k1 OBJ_secg_ellipticCurve,10L + +#define SN_secp384r1 "secp384r1" +#define NID_secp384r1 715 +#define OBJ_secp384r1 OBJ_secg_ellipticCurve,34L + +#define SN_secp521r1 "secp521r1" +#define NID_secp521r1 716 +#define OBJ_secp521r1 OBJ_secg_ellipticCurve,35L + +#define SN_sect113r1 "sect113r1" +#define NID_sect113r1 717 +#define OBJ_sect113r1 OBJ_secg_ellipticCurve,4L + +#define SN_sect113r2 "sect113r2" +#define NID_sect113r2 718 +#define OBJ_sect113r2 OBJ_secg_ellipticCurve,5L + +#define SN_sect131r1 "sect131r1" +#define NID_sect131r1 719 +#define OBJ_sect131r1 OBJ_secg_ellipticCurve,22L + +#define SN_sect131r2 "sect131r2" +#define NID_sect131r2 720 +#define OBJ_sect131r2 OBJ_secg_ellipticCurve,23L + +#define SN_sect163k1 "sect163k1" +#define NID_sect163k1 721 +#define OBJ_sect163k1 OBJ_secg_ellipticCurve,1L + +#define SN_sect163r1 "sect163r1" +#define NID_sect163r1 722 +#define OBJ_sect163r1 OBJ_secg_ellipticCurve,2L + +#define SN_sect163r2 "sect163r2" +#define NID_sect163r2 723 +#define OBJ_sect163r2 OBJ_secg_ellipticCurve,15L + +#define SN_sect193r1 "sect193r1" +#define NID_sect193r1 724 +#define OBJ_sect193r1 OBJ_secg_ellipticCurve,24L + +#define SN_sect193r2 "sect193r2" +#define NID_sect193r2 725 +#define OBJ_sect193r2 OBJ_secg_ellipticCurve,25L + +#define SN_sect233k1 "sect233k1" +#define NID_sect233k1 726 +#define OBJ_sect233k1 OBJ_secg_ellipticCurve,26L + +#define SN_sect233r1 "sect233r1" +#define NID_sect233r1 727 +#define OBJ_sect233r1 OBJ_secg_ellipticCurve,27L + +#define SN_sect239k1 "sect239k1" +#define NID_sect239k1 728 +#define OBJ_sect239k1 OBJ_secg_ellipticCurve,3L + +#define SN_sect283k1 "sect283k1" +#define NID_sect283k1 729 +#define OBJ_sect283k1 OBJ_secg_ellipticCurve,16L + +#define SN_sect283r1 "sect283r1" +#define NID_sect283r1 730 +#define OBJ_sect283r1 OBJ_secg_ellipticCurve,17L + +#define SN_sect409k1 "sect409k1" +#define NID_sect409k1 731 +#define OBJ_sect409k1 OBJ_secg_ellipticCurve,36L + +#define SN_sect409r1 "sect409r1" +#define NID_sect409r1 732 +#define OBJ_sect409r1 OBJ_secg_ellipticCurve,37L + +#define SN_sect571k1 "sect571k1" +#define NID_sect571k1 733 +#define OBJ_sect571k1 OBJ_secg_ellipticCurve,38L + +#define SN_sect571r1 "sect571r1" +#define NID_sect571r1 734 +#define OBJ_sect571r1 OBJ_secg_ellipticCurve,39L + +#define OBJ_wap_wsg_idm_ecid OBJ_wap_wsg,4L + +#define SN_wap_wsg_idm_ecid_wtls1 "wap-wsg-idm-ecid-wtls1" +#define NID_wap_wsg_idm_ecid_wtls1 735 +#define OBJ_wap_wsg_idm_ecid_wtls1 OBJ_wap_wsg_idm_ecid,1L + +#define SN_wap_wsg_idm_ecid_wtls3 "wap-wsg-idm-ecid-wtls3" +#define NID_wap_wsg_idm_ecid_wtls3 736 +#define OBJ_wap_wsg_idm_ecid_wtls3 OBJ_wap_wsg_idm_ecid,3L + +#define SN_wap_wsg_idm_ecid_wtls4 "wap-wsg-idm-ecid-wtls4" +#define NID_wap_wsg_idm_ecid_wtls4 737 +#define OBJ_wap_wsg_idm_ecid_wtls4 OBJ_wap_wsg_idm_ecid,4L + +#define SN_wap_wsg_idm_ecid_wtls5 "wap-wsg-idm-ecid-wtls5" +#define NID_wap_wsg_idm_ecid_wtls5 738 +#define OBJ_wap_wsg_idm_ecid_wtls5 OBJ_wap_wsg_idm_ecid,5L + +#define SN_wap_wsg_idm_ecid_wtls6 "wap-wsg-idm-ecid-wtls6" +#define NID_wap_wsg_idm_ecid_wtls6 739 +#define OBJ_wap_wsg_idm_ecid_wtls6 OBJ_wap_wsg_idm_ecid,6L + +#define SN_wap_wsg_idm_ecid_wtls7 "wap-wsg-idm-ecid-wtls7" +#define NID_wap_wsg_idm_ecid_wtls7 740 +#define OBJ_wap_wsg_idm_ecid_wtls7 OBJ_wap_wsg_idm_ecid,7L + +#define SN_wap_wsg_idm_ecid_wtls8 "wap-wsg-idm-ecid-wtls8" +#define NID_wap_wsg_idm_ecid_wtls8 741 +#define OBJ_wap_wsg_idm_ecid_wtls8 OBJ_wap_wsg_idm_ecid,8L + +#define SN_wap_wsg_idm_ecid_wtls9 "wap-wsg-idm-ecid-wtls9" +#define NID_wap_wsg_idm_ecid_wtls9 742 +#define OBJ_wap_wsg_idm_ecid_wtls9 OBJ_wap_wsg_idm_ecid,9L + +#define SN_wap_wsg_idm_ecid_wtls10 "wap-wsg-idm-ecid-wtls10" +#define NID_wap_wsg_idm_ecid_wtls10 743 +#define OBJ_wap_wsg_idm_ecid_wtls10 OBJ_wap_wsg_idm_ecid,10L + +#define SN_wap_wsg_idm_ecid_wtls11 "wap-wsg-idm-ecid-wtls11" +#define NID_wap_wsg_idm_ecid_wtls11 744 +#define OBJ_wap_wsg_idm_ecid_wtls11 OBJ_wap_wsg_idm_ecid,11L + +#define SN_wap_wsg_idm_ecid_wtls12 "wap-wsg-idm-ecid-wtls12" +#define NID_wap_wsg_idm_ecid_wtls12 745 +#define OBJ_wap_wsg_idm_ecid_wtls12 OBJ_wap_wsg_idm_ecid,12L + +#define SN_cast5_cbc "CAST5-CBC" +#define LN_cast5_cbc "cast5-cbc" +#define NID_cast5_cbc 108 +#define OBJ_cast5_cbc OBJ_ISO_US,113533L,7L,66L,10L + +#define SN_cast5_ecb "CAST5-ECB" +#define LN_cast5_ecb "cast5-ecb" +#define NID_cast5_ecb 109 + +#define SN_cast5_cfb64 "CAST5-CFB" +#define LN_cast5_cfb64 "cast5-cfb" +#define NID_cast5_cfb64 110 + +#define SN_cast5_ofb64 "CAST5-OFB" +#define LN_cast5_ofb64 "cast5-ofb" +#define NID_cast5_ofb64 111 + +#define LN_pbeWithMD5AndCast5_CBC "pbeWithMD5AndCast5CBC" +#define NID_pbeWithMD5AndCast5_CBC 112 +#define OBJ_pbeWithMD5AndCast5_CBC OBJ_ISO_US,113533L,7L,66L,12L + +#define SN_id_PasswordBasedMAC "id-PasswordBasedMAC" +#define LN_id_PasswordBasedMAC "password based MAC" +#define NID_id_PasswordBasedMAC 782 +#define OBJ_id_PasswordBasedMAC OBJ_ISO_US,113533L,7L,66L,13L + +#define SN_id_DHBasedMac "id-DHBasedMac" +#define LN_id_DHBasedMac "Diffie-Hellman based MAC" +#define NID_id_DHBasedMac 783 +#define OBJ_id_DHBasedMac OBJ_ISO_US,113533L,7L,66L,30L + +#define SN_rsadsi "rsadsi" +#define LN_rsadsi "RSA Data Security, Inc." +#define NID_rsadsi 1 +#define OBJ_rsadsi OBJ_ISO_US,113549L + +#define SN_pkcs "pkcs" +#define LN_pkcs "RSA Data Security, Inc. PKCS" +#define NID_pkcs 2 +#define OBJ_pkcs OBJ_rsadsi,1L + +#define SN_pkcs1 "pkcs1" +#define NID_pkcs1 186 +#define OBJ_pkcs1 OBJ_pkcs,1L + +#define LN_rsaEncryption "rsaEncryption" +#define NID_rsaEncryption 6 +#define OBJ_rsaEncryption OBJ_pkcs1,1L + +#define SN_md2WithRSAEncryption "RSA-MD2" +#define LN_md2WithRSAEncryption "md2WithRSAEncryption" +#define NID_md2WithRSAEncryption 7 +#define OBJ_md2WithRSAEncryption OBJ_pkcs1,2L + +#define SN_md4WithRSAEncryption "RSA-MD4" +#define LN_md4WithRSAEncryption "md4WithRSAEncryption" +#define NID_md4WithRSAEncryption 396 +#define OBJ_md4WithRSAEncryption OBJ_pkcs1,3L + +#define SN_md5WithRSAEncryption "RSA-MD5" +#define LN_md5WithRSAEncryption "md5WithRSAEncryption" +#define NID_md5WithRSAEncryption 8 +#define OBJ_md5WithRSAEncryption OBJ_pkcs1,4L + +#define SN_sha1WithRSAEncryption "RSA-SHA1" +#define LN_sha1WithRSAEncryption "sha1WithRSAEncryption" +#define NID_sha1WithRSAEncryption 65 +#define OBJ_sha1WithRSAEncryption OBJ_pkcs1,5L + +#define SN_rsaesOaep "RSAES-OAEP" +#define LN_rsaesOaep "rsaesOaep" +#define NID_rsaesOaep 919 +#define OBJ_rsaesOaep OBJ_pkcs1,7L + +#define SN_mgf1 "MGF1" +#define LN_mgf1 "mgf1" +#define NID_mgf1 911 +#define OBJ_mgf1 OBJ_pkcs1,8L + +#define SN_pSpecified "PSPECIFIED" +#define LN_pSpecified "pSpecified" +#define NID_pSpecified 935 +#define OBJ_pSpecified OBJ_pkcs1,9L + +#define SN_rsassaPss "RSASSA-PSS" +#define LN_rsassaPss "rsassaPss" +#define NID_rsassaPss 912 +#define OBJ_rsassaPss OBJ_pkcs1,10L + +#define SN_sha256WithRSAEncryption "RSA-SHA256" +#define LN_sha256WithRSAEncryption "sha256WithRSAEncryption" +#define NID_sha256WithRSAEncryption 668 +#define OBJ_sha256WithRSAEncryption OBJ_pkcs1,11L + +#define SN_sha384WithRSAEncryption "RSA-SHA384" +#define LN_sha384WithRSAEncryption "sha384WithRSAEncryption" +#define NID_sha384WithRSAEncryption 669 +#define OBJ_sha384WithRSAEncryption OBJ_pkcs1,12L + +#define SN_sha512WithRSAEncryption "RSA-SHA512" +#define LN_sha512WithRSAEncryption "sha512WithRSAEncryption" +#define NID_sha512WithRSAEncryption 670 +#define OBJ_sha512WithRSAEncryption OBJ_pkcs1,13L + +#define SN_sha224WithRSAEncryption "RSA-SHA224" +#define LN_sha224WithRSAEncryption "sha224WithRSAEncryption" +#define NID_sha224WithRSAEncryption 671 +#define OBJ_sha224WithRSAEncryption OBJ_pkcs1,14L + +#define SN_sha512_224WithRSAEncryption "RSA-SHA512/224" +#define LN_sha512_224WithRSAEncryption "sha512-224WithRSAEncryption" +#define NID_sha512_224WithRSAEncryption 1145 +#define OBJ_sha512_224WithRSAEncryption OBJ_pkcs1,15L + +#define SN_sha512_256WithRSAEncryption "RSA-SHA512/256" +#define LN_sha512_256WithRSAEncryption "sha512-256WithRSAEncryption" +#define NID_sha512_256WithRSAEncryption 1146 +#define OBJ_sha512_256WithRSAEncryption OBJ_pkcs1,16L + +#define SN_pkcs3 "pkcs3" +#define NID_pkcs3 27 +#define OBJ_pkcs3 OBJ_pkcs,3L + +#define LN_dhKeyAgreement "dhKeyAgreement" +#define NID_dhKeyAgreement 28 +#define OBJ_dhKeyAgreement OBJ_pkcs3,1L + +#define SN_pkcs5 "pkcs5" +#define NID_pkcs5 187 +#define OBJ_pkcs5 OBJ_pkcs,5L + +#define SN_pbeWithMD2AndDES_CBC "PBE-MD2-DES" +#define LN_pbeWithMD2AndDES_CBC "pbeWithMD2AndDES-CBC" +#define NID_pbeWithMD2AndDES_CBC 9 +#define OBJ_pbeWithMD2AndDES_CBC OBJ_pkcs5,1L + +#define SN_pbeWithMD5AndDES_CBC "PBE-MD5-DES" +#define LN_pbeWithMD5AndDES_CBC "pbeWithMD5AndDES-CBC" +#define NID_pbeWithMD5AndDES_CBC 10 +#define OBJ_pbeWithMD5AndDES_CBC OBJ_pkcs5,3L + +#define SN_pbeWithMD2AndRC2_CBC "PBE-MD2-RC2-64" +#define LN_pbeWithMD2AndRC2_CBC "pbeWithMD2AndRC2-CBC" +#define NID_pbeWithMD2AndRC2_CBC 168 +#define OBJ_pbeWithMD2AndRC2_CBC OBJ_pkcs5,4L + +#define SN_pbeWithMD5AndRC2_CBC "PBE-MD5-RC2-64" +#define LN_pbeWithMD5AndRC2_CBC "pbeWithMD5AndRC2-CBC" +#define NID_pbeWithMD5AndRC2_CBC 169 +#define OBJ_pbeWithMD5AndRC2_CBC OBJ_pkcs5,6L + +#define SN_pbeWithSHA1AndDES_CBC "PBE-SHA1-DES" +#define LN_pbeWithSHA1AndDES_CBC "pbeWithSHA1AndDES-CBC" +#define NID_pbeWithSHA1AndDES_CBC 170 +#define OBJ_pbeWithSHA1AndDES_CBC OBJ_pkcs5,10L + +#define SN_pbeWithSHA1AndRC2_CBC "PBE-SHA1-RC2-64" +#define LN_pbeWithSHA1AndRC2_CBC "pbeWithSHA1AndRC2-CBC" +#define NID_pbeWithSHA1AndRC2_CBC 68 +#define OBJ_pbeWithSHA1AndRC2_CBC OBJ_pkcs5,11L + +#define LN_id_pbkdf2 "PBKDF2" +#define NID_id_pbkdf2 69 +#define OBJ_id_pbkdf2 OBJ_pkcs5,12L + +#define LN_pbes2 "PBES2" +#define NID_pbes2 161 +#define OBJ_pbes2 OBJ_pkcs5,13L + +#define LN_pbmac1 "PBMAC1" +#define NID_pbmac1 162 +#define OBJ_pbmac1 OBJ_pkcs5,14L + +#define SN_pkcs7 "pkcs7" +#define NID_pkcs7 20 +#define OBJ_pkcs7 OBJ_pkcs,7L + +#define LN_pkcs7_data "pkcs7-data" +#define NID_pkcs7_data 21 +#define OBJ_pkcs7_data OBJ_pkcs7,1L + +#define LN_pkcs7_signed "pkcs7-signedData" +#define NID_pkcs7_signed 22 +#define OBJ_pkcs7_signed OBJ_pkcs7,2L + +#define LN_pkcs7_enveloped "pkcs7-envelopedData" +#define NID_pkcs7_enveloped 23 +#define OBJ_pkcs7_enveloped OBJ_pkcs7,3L + +#define LN_pkcs7_signedAndEnveloped "pkcs7-signedAndEnvelopedData" +#define NID_pkcs7_signedAndEnveloped 24 +#define OBJ_pkcs7_signedAndEnveloped OBJ_pkcs7,4L + +#define LN_pkcs7_digest "pkcs7-digestData" +#define NID_pkcs7_digest 25 +#define OBJ_pkcs7_digest OBJ_pkcs7,5L + +#define LN_pkcs7_encrypted "pkcs7-encryptedData" +#define NID_pkcs7_encrypted 26 +#define OBJ_pkcs7_encrypted OBJ_pkcs7,6L + +#define SN_pkcs9 "pkcs9" +#define NID_pkcs9 47 +#define OBJ_pkcs9 OBJ_pkcs,9L + +#define LN_pkcs9_emailAddress "emailAddress" +#define NID_pkcs9_emailAddress 48 +#define OBJ_pkcs9_emailAddress OBJ_pkcs9,1L + +#define LN_pkcs9_unstructuredName "unstructuredName" +#define NID_pkcs9_unstructuredName 49 +#define OBJ_pkcs9_unstructuredName OBJ_pkcs9,2L + +#define LN_pkcs9_contentType "contentType" +#define NID_pkcs9_contentType 50 +#define OBJ_pkcs9_contentType OBJ_pkcs9,3L + +#define LN_pkcs9_messageDigest "messageDigest" +#define NID_pkcs9_messageDigest 51 +#define OBJ_pkcs9_messageDigest OBJ_pkcs9,4L + +#define LN_pkcs9_signingTime "signingTime" +#define NID_pkcs9_signingTime 52 +#define OBJ_pkcs9_signingTime OBJ_pkcs9,5L + +#define LN_pkcs9_countersignature "countersignature" +#define NID_pkcs9_countersignature 53 +#define OBJ_pkcs9_countersignature OBJ_pkcs9,6L + +#define LN_pkcs9_challengePassword "challengePassword" +#define NID_pkcs9_challengePassword 54 +#define OBJ_pkcs9_challengePassword OBJ_pkcs9,7L + +#define LN_pkcs9_unstructuredAddress "unstructuredAddress" +#define NID_pkcs9_unstructuredAddress 55 +#define OBJ_pkcs9_unstructuredAddress OBJ_pkcs9,8L + +#define LN_pkcs9_extCertAttributes "extendedCertificateAttributes" +#define NID_pkcs9_extCertAttributes 56 +#define OBJ_pkcs9_extCertAttributes OBJ_pkcs9,9L + +#define SN_ext_req "extReq" +#define LN_ext_req "Extension Request" +#define NID_ext_req 172 +#define OBJ_ext_req OBJ_pkcs9,14L + +#define SN_SMIMECapabilities "SMIME-CAPS" +#define LN_SMIMECapabilities "S/MIME Capabilities" +#define NID_SMIMECapabilities 167 +#define OBJ_SMIMECapabilities OBJ_pkcs9,15L + +#define SN_SMIME "SMIME" +#define LN_SMIME "S/MIME" +#define NID_SMIME 188 +#define OBJ_SMIME OBJ_pkcs9,16L + +#define SN_id_smime_mod "id-smime-mod" +#define NID_id_smime_mod 189 +#define OBJ_id_smime_mod OBJ_SMIME,0L + +#define SN_id_smime_ct "id-smime-ct" +#define NID_id_smime_ct 190 +#define OBJ_id_smime_ct OBJ_SMIME,1L + +#define SN_id_smime_aa "id-smime-aa" +#define NID_id_smime_aa 191 +#define OBJ_id_smime_aa OBJ_SMIME,2L + +#define SN_id_smime_alg "id-smime-alg" +#define NID_id_smime_alg 192 +#define OBJ_id_smime_alg OBJ_SMIME,3L + +#define SN_id_smime_cd "id-smime-cd" +#define NID_id_smime_cd 193 +#define OBJ_id_smime_cd OBJ_SMIME,4L + +#define SN_id_smime_spq "id-smime-spq" +#define NID_id_smime_spq 194 +#define OBJ_id_smime_spq OBJ_SMIME,5L + +#define SN_id_smime_cti "id-smime-cti" +#define NID_id_smime_cti 195 +#define OBJ_id_smime_cti OBJ_SMIME,6L + +#define SN_id_smime_mod_cms "id-smime-mod-cms" +#define NID_id_smime_mod_cms 196 +#define OBJ_id_smime_mod_cms OBJ_id_smime_mod,1L + +#define SN_id_smime_mod_ess "id-smime-mod-ess" +#define NID_id_smime_mod_ess 197 +#define OBJ_id_smime_mod_ess OBJ_id_smime_mod,2L + +#define SN_id_smime_mod_oid "id-smime-mod-oid" +#define NID_id_smime_mod_oid 198 +#define OBJ_id_smime_mod_oid OBJ_id_smime_mod,3L + +#define SN_id_smime_mod_msg_v3 "id-smime-mod-msg-v3" +#define NID_id_smime_mod_msg_v3 199 +#define OBJ_id_smime_mod_msg_v3 OBJ_id_smime_mod,4L + +#define SN_id_smime_mod_ets_eSignature_88 "id-smime-mod-ets-eSignature-88" +#define NID_id_smime_mod_ets_eSignature_88 200 +#define OBJ_id_smime_mod_ets_eSignature_88 OBJ_id_smime_mod,5L + +#define SN_id_smime_mod_ets_eSignature_97 "id-smime-mod-ets-eSignature-97" +#define NID_id_smime_mod_ets_eSignature_97 201 +#define OBJ_id_smime_mod_ets_eSignature_97 OBJ_id_smime_mod,6L + +#define SN_id_smime_mod_ets_eSigPolicy_88 "id-smime-mod-ets-eSigPolicy-88" +#define NID_id_smime_mod_ets_eSigPolicy_88 202 +#define OBJ_id_smime_mod_ets_eSigPolicy_88 OBJ_id_smime_mod,7L + +#define SN_id_smime_mod_ets_eSigPolicy_97 "id-smime-mod-ets-eSigPolicy-97" +#define NID_id_smime_mod_ets_eSigPolicy_97 203 +#define OBJ_id_smime_mod_ets_eSigPolicy_97 OBJ_id_smime_mod,8L + +#define SN_id_smime_ct_receipt "id-smime-ct-receipt" +#define NID_id_smime_ct_receipt 204 +#define OBJ_id_smime_ct_receipt OBJ_id_smime_ct,1L + +#define SN_id_smime_ct_authData "id-smime-ct-authData" +#define NID_id_smime_ct_authData 205 +#define OBJ_id_smime_ct_authData OBJ_id_smime_ct,2L + +#define SN_id_smime_ct_publishCert "id-smime-ct-publishCert" +#define NID_id_smime_ct_publishCert 206 +#define OBJ_id_smime_ct_publishCert OBJ_id_smime_ct,3L + +#define SN_id_smime_ct_TSTInfo "id-smime-ct-TSTInfo" +#define NID_id_smime_ct_TSTInfo 207 +#define OBJ_id_smime_ct_TSTInfo OBJ_id_smime_ct,4L + +#define SN_id_smime_ct_TDTInfo "id-smime-ct-TDTInfo" +#define NID_id_smime_ct_TDTInfo 208 +#define OBJ_id_smime_ct_TDTInfo OBJ_id_smime_ct,5L + +#define SN_id_smime_ct_contentInfo "id-smime-ct-contentInfo" +#define NID_id_smime_ct_contentInfo 209 +#define OBJ_id_smime_ct_contentInfo OBJ_id_smime_ct,6L + +#define SN_id_smime_ct_DVCSRequestData "id-smime-ct-DVCSRequestData" +#define NID_id_smime_ct_DVCSRequestData 210 +#define OBJ_id_smime_ct_DVCSRequestData OBJ_id_smime_ct,7L + +#define SN_id_smime_ct_DVCSResponseData "id-smime-ct-DVCSResponseData" +#define NID_id_smime_ct_DVCSResponseData 211 +#define OBJ_id_smime_ct_DVCSResponseData OBJ_id_smime_ct,8L + +#define SN_id_smime_ct_compressedData "id-smime-ct-compressedData" +#define NID_id_smime_ct_compressedData 786 +#define OBJ_id_smime_ct_compressedData OBJ_id_smime_ct,9L + +#define SN_id_smime_ct_contentCollection "id-smime-ct-contentCollection" +#define NID_id_smime_ct_contentCollection 1058 +#define OBJ_id_smime_ct_contentCollection OBJ_id_smime_ct,19L + +#define SN_id_smime_ct_authEnvelopedData "id-smime-ct-authEnvelopedData" +#define NID_id_smime_ct_authEnvelopedData 1059 +#define OBJ_id_smime_ct_authEnvelopedData OBJ_id_smime_ct,23L + +#define SN_id_ct_asciiTextWithCRLF "id-ct-asciiTextWithCRLF" +#define NID_id_ct_asciiTextWithCRLF 787 +#define OBJ_id_ct_asciiTextWithCRLF OBJ_id_smime_ct,27L + +#define SN_id_ct_xml "id-ct-xml" +#define NID_id_ct_xml 1060 +#define OBJ_id_ct_xml OBJ_id_smime_ct,28L + +#define SN_id_smime_aa_receiptRequest "id-smime-aa-receiptRequest" +#define NID_id_smime_aa_receiptRequest 212 +#define OBJ_id_smime_aa_receiptRequest OBJ_id_smime_aa,1L + +#define SN_id_smime_aa_securityLabel "id-smime-aa-securityLabel" +#define NID_id_smime_aa_securityLabel 213 +#define OBJ_id_smime_aa_securityLabel OBJ_id_smime_aa,2L + +#define SN_id_smime_aa_mlExpandHistory "id-smime-aa-mlExpandHistory" +#define NID_id_smime_aa_mlExpandHistory 214 +#define OBJ_id_smime_aa_mlExpandHistory OBJ_id_smime_aa,3L + +#define SN_id_smime_aa_contentHint "id-smime-aa-contentHint" +#define NID_id_smime_aa_contentHint 215 +#define OBJ_id_smime_aa_contentHint OBJ_id_smime_aa,4L + +#define SN_id_smime_aa_msgSigDigest "id-smime-aa-msgSigDigest" +#define NID_id_smime_aa_msgSigDigest 216 +#define OBJ_id_smime_aa_msgSigDigest OBJ_id_smime_aa,5L + +#define SN_id_smime_aa_encapContentType "id-smime-aa-encapContentType" +#define NID_id_smime_aa_encapContentType 217 +#define OBJ_id_smime_aa_encapContentType OBJ_id_smime_aa,6L + +#define SN_id_smime_aa_contentIdentifier "id-smime-aa-contentIdentifier" +#define NID_id_smime_aa_contentIdentifier 218 +#define OBJ_id_smime_aa_contentIdentifier OBJ_id_smime_aa,7L + +#define SN_id_smime_aa_macValue "id-smime-aa-macValue" +#define NID_id_smime_aa_macValue 219 +#define OBJ_id_smime_aa_macValue OBJ_id_smime_aa,8L + +#define SN_id_smime_aa_equivalentLabels "id-smime-aa-equivalentLabels" +#define NID_id_smime_aa_equivalentLabels 220 +#define OBJ_id_smime_aa_equivalentLabels OBJ_id_smime_aa,9L + +#define SN_id_smime_aa_contentReference "id-smime-aa-contentReference" +#define NID_id_smime_aa_contentReference 221 +#define OBJ_id_smime_aa_contentReference OBJ_id_smime_aa,10L + +#define SN_id_smime_aa_encrypKeyPref "id-smime-aa-encrypKeyPref" +#define NID_id_smime_aa_encrypKeyPref 222 +#define OBJ_id_smime_aa_encrypKeyPref OBJ_id_smime_aa,11L + +#define SN_id_smime_aa_signingCertificate "id-smime-aa-signingCertificate" +#define NID_id_smime_aa_signingCertificate 223 +#define OBJ_id_smime_aa_signingCertificate OBJ_id_smime_aa,12L + +#define SN_id_smime_aa_smimeEncryptCerts "id-smime-aa-smimeEncryptCerts" +#define NID_id_smime_aa_smimeEncryptCerts 224 +#define OBJ_id_smime_aa_smimeEncryptCerts OBJ_id_smime_aa,13L + +#define SN_id_smime_aa_timeStampToken "id-smime-aa-timeStampToken" +#define NID_id_smime_aa_timeStampToken 225 +#define OBJ_id_smime_aa_timeStampToken OBJ_id_smime_aa,14L + +#define SN_id_smime_aa_ets_sigPolicyId "id-smime-aa-ets-sigPolicyId" +#define NID_id_smime_aa_ets_sigPolicyId 226 +#define OBJ_id_smime_aa_ets_sigPolicyId OBJ_id_smime_aa,15L + +#define SN_id_smime_aa_ets_commitmentType "id-smime-aa-ets-commitmentType" +#define NID_id_smime_aa_ets_commitmentType 227 +#define OBJ_id_smime_aa_ets_commitmentType OBJ_id_smime_aa,16L + +#define SN_id_smime_aa_ets_signerLocation "id-smime-aa-ets-signerLocation" +#define NID_id_smime_aa_ets_signerLocation 228 +#define OBJ_id_smime_aa_ets_signerLocation OBJ_id_smime_aa,17L + +#define SN_id_smime_aa_ets_signerAttr "id-smime-aa-ets-signerAttr" +#define NID_id_smime_aa_ets_signerAttr 229 +#define OBJ_id_smime_aa_ets_signerAttr OBJ_id_smime_aa,18L + +#define SN_id_smime_aa_ets_otherSigCert "id-smime-aa-ets-otherSigCert" +#define NID_id_smime_aa_ets_otherSigCert 230 +#define OBJ_id_smime_aa_ets_otherSigCert OBJ_id_smime_aa,19L + +#define SN_id_smime_aa_ets_contentTimestamp "id-smime-aa-ets-contentTimestamp" +#define NID_id_smime_aa_ets_contentTimestamp 231 +#define OBJ_id_smime_aa_ets_contentTimestamp OBJ_id_smime_aa,20L + +#define SN_id_smime_aa_ets_CertificateRefs "id-smime-aa-ets-CertificateRefs" +#define NID_id_smime_aa_ets_CertificateRefs 232 +#define OBJ_id_smime_aa_ets_CertificateRefs OBJ_id_smime_aa,21L + +#define SN_id_smime_aa_ets_RevocationRefs "id-smime-aa-ets-RevocationRefs" +#define NID_id_smime_aa_ets_RevocationRefs 233 +#define OBJ_id_smime_aa_ets_RevocationRefs OBJ_id_smime_aa,22L + +#define SN_id_smime_aa_ets_certValues "id-smime-aa-ets-certValues" +#define NID_id_smime_aa_ets_certValues 234 +#define OBJ_id_smime_aa_ets_certValues OBJ_id_smime_aa,23L + +#define SN_id_smime_aa_ets_revocationValues "id-smime-aa-ets-revocationValues" +#define NID_id_smime_aa_ets_revocationValues 235 +#define OBJ_id_smime_aa_ets_revocationValues OBJ_id_smime_aa,24L + +#define SN_id_smime_aa_ets_escTimeStamp "id-smime-aa-ets-escTimeStamp" +#define NID_id_smime_aa_ets_escTimeStamp 236 +#define OBJ_id_smime_aa_ets_escTimeStamp OBJ_id_smime_aa,25L + +#define SN_id_smime_aa_ets_certCRLTimestamp "id-smime-aa-ets-certCRLTimestamp" +#define NID_id_smime_aa_ets_certCRLTimestamp 237 +#define OBJ_id_smime_aa_ets_certCRLTimestamp OBJ_id_smime_aa,26L + +#define SN_id_smime_aa_ets_archiveTimeStamp "id-smime-aa-ets-archiveTimeStamp" +#define NID_id_smime_aa_ets_archiveTimeStamp 238 +#define OBJ_id_smime_aa_ets_archiveTimeStamp OBJ_id_smime_aa,27L + +#define SN_id_smime_aa_signatureType "id-smime-aa-signatureType" +#define NID_id_smime_aa_signatureType 239 +#define OBJ_id_smime_aa_signatureType OBJ_id_smime_aa,28L + +#define SN_id_smime_aa_dvcs_dvc "id-smime-aa-dvcs-dvc" +#define NID_id_smime_aa_dvcs_dvc 240 +#define OBJ_id_smime_aa_dvcs_dvc OBJ_id_smime_aa,29L + +#define SN_id_smime_aa_signingCertificateV2 "id-smime-aa-signingCertificateV2" +#define NID_id_smime_aa_signingCertificateV2 1086 +#define OBJ_id_smime_aa_signingCertificateV2 OBJ_id_smime_aa,47L + +#define SN_id_smime_alg_ESDHwith3DES "id-smime-alg-ESDHwith3DES" +#define NID_id_smime_alg_ESDHwith3DES 241 +#define OBJ_id_smime_alg_ESDHwith3DES OBJ_id_smime_alg,1L + +#define SN_id_smime_alg_ESDHwithRC2 "id-smime-alg-ESDHwithRC2" +#define NID_id_smime_alg_ESDHwithRC2 242 +#define OBJ_id_smime_alg_ESDHwithRC2 OBJ_id_smime_alg,2L + +#define SN_id_smime_alg_3DESwrap "id-smime-alg-3DESwrap" +#define NID_id_smime_alg_3DESwrap 243 +#define OBJ_id_smime_alg_3DESwrap OBJ_id_smime_alg,3L + +#define SN_id_smime_alg_RC2wrap "id-smime-alg-RC2wrap" +#define NID_id_smime_alg_RC2wrap 244 +#define OBJ_id_smime_alg_RC2wrap OBJ_id_smime_alg,4L + +#define SN_id_smime_alg_ESDH "id-smime-alg-ESDH" +#define NID_id_smime_alg_ESDH 245 +#define OBJ_id_smime_alg_ESDH OBJ_id_smime_alg,5L + +#define SN_id_smime_alg_CMS3DESwrap "id-smime-alg-CMS3DESwrap" +#define NID_id_smime_alg_CMS3DESwrap 246 +#define OBJ_id_smime_alg_CMS3DESwrap OBJ_id_smime_alg,6L + +#define SN_id_smime_alg_CMSRC2wrap "id-smime-alg-CMSRC2wrap" +#define NID_id_smime_alg_CMSRC2wrap 247 +#define OBJ_id_smime_alg_CMSRC2wrap OBJ_id_smime_alg,7L + +#define SN_id_alg_PWRI_KEK "id-alg-PWRI-KEK" +#define NID_id_alg_PWRI_KEK 893 +#define OBJ_id_alg_PWRI_KEK OBJ_id_smime_alg,9L + +#define SN_id_smime_cd_ldap "id-smime-cd-ldap" +#define NID_id_smime_cd_ldap 248 +#define OBJ_id_smime_cd_ldap OBJ_id_smime_cd,1L + +#define SN_id_smime_spq_ets_sqt_uri "id-smime-spq-ets-sqt-uri" +#define NID_id_smime_spq_ets_sqt_uri 249 +#define OBJ_id_smime_spq_ets_sqt_uri OBJ_id_smime_spq,1L + +#define SN_id_smime_spq_ets_sqt_unotice "id-smime-spq-ets-sqt-unotice" +#define NID_id_smime_spq_ets_sqt_unotice 250 +#define OBJ_id_smime_spq_ets_sqt_unotice OBJ_id_smime_spq,2L + +#define SN_id_smime_cti_ets_proofOfOrigin "id-smime-cti-ets-proofOfOrigin" +#define NID_id_smime_cti_ets_proofOfOrigin 251 +#define OBJ_id_smime_cti_ets_proofOfOrigin OBJ_id_smime_cti,1L + +#define SN_id_smime_cti_ets_proofOfReceipt "id-smime-cti-ets-proofOfReceipt" +#define NID_id_smime_cti_ets_proofOfReceipt 252 +#define OBJ_id_smime_cti_ets_proofOfReceipt OBJ_id_smime_cti,2L + +#define SN_id_smime_cti_ets_proofOfDelivery "id-smime-cti-ets-proofOfDelivery" +#define NID_id_smime_cti_ets_proofOfDelivery 253 +#define OBJ_id_smime_cti_ets_proofOfDelivery OBJ_id_smime_cti,3L + +#define SN_id_smime_cti_ets_proofOfSender "id-smime-cti-ets-proofOfSender" +#define NID_id_smime_cti_ets_proofOfSender 254 +#define OBJ_id_smime_cti_ets_proofOfSender OBJ_id_smime_cti,4L + +#define SN_id_smime_cti_ets_proofOfApproval "id-smime-cti-ets-proofOfApproval" +#define NID_id_smime_cti_ets_proofOfApproval 255 +#define OBJ_id_smime_cti_ets_proofOfApproval OBJ_id_smime_cti,5L + +#define SN_id_smime_cti_ets_proofOfCreation "id-smime-cti-ets-proofOfCreation" +#define NID_id_smime_cti_ets_proofOfCreation 256 +#define OBJ_id_smime_cti_ets_proofOfCreation OBJ_id_smime_cti,6L + +#define LN_friendlyName "friendlyName" +#define NID_friendlyName 156 +#define OBJ_friendlyName OBJ_pkcs9,20L + +#define LN_localKeyID "localKeyID" +#define NID_localKeyID 157 +#define OBJ_localKeyID OBJ_pkcs9,21L + +#define SN_ms_csp_name "CSPName" +#define LN_ms_csp_name "Microsoft CSP Name" +#define NID_ms_csp_name 417 +#define OBJ_ms_csp_name 1L,3L,6L,1L,4L,1L,311L,17L,1L + +#define SN_LocalKeySet "LocalKeySet" +#define LN_LocalKeySet "Microsoft Local Key set" +#define NID_LocalKeySet 856 +#define OBJ_LocalKeySet 1L,3L,6L,1L,4L,1L,311L,17L,2L + +#define OBJ_certTypes OBJ_pkcs9,22L + +#define LN_x509Certificate "x509Certificate" +#define NID_x509Certificate 158 +#define OBJ_x509Certificate OBJ_certTypes,1L + +#define LN_sdsiCertificate "sdsiCertificate" +#define NID_sdsiCertificate 159 +#define OBJ_sdsiCertificate OBJ_certTypes,2L + +#define OBJ_crlTypes OBJ_pkcs9,23L + +#define LN_x509Crl "x509Crl" +#define NID_x509Crl 160 +#define OBJ_x509Crl OBJ_crlTypes,1L + +#define OBJ_pkcs12 OBJ_pkcs,12L + +#define OBJ_pkcs12_pbeids OBJ_pkcs12,1L + +#define SN_pbe_WithSHA1And128BitRC4 "PBE-SHA1-RC4-128" +#define LN_pbe_WithSHA1And128BitRC4 "pbeWithSHA1And128BitRC4" +#define NID_pbe_WithSHA1And128BitRC4 144 +#define OBJ_pbe_WithSHA1And128BitRC4 OBJ_pkcs12_pbeids,1L + +#define SN_pbe_WithSHA1And40BitRC4 "PBE-SHA1-RC4-40" +#define LN_pbe_WithSHA1And40BitRC4 "pbeWithSHA1And40BitRC4" +#define NID_pbe_WithSHA1And40BitRC4 145 +#define OBJ_pbe_WithSHA1And40BitRC4 OBJ_pkcs12_pbeids,2L + +#define SN_pbe_WithSHA1And3_Key_TripleDES_CBC "PBE-SHA1-3DES" +#define LN_pbe_WithSHA1And3_Key_TripleDES_CBC "pbeWithSHA1And3-KeyTripleDES-CBC" +#define NID_pbe_WithSHA1And3_Key_TripleDES_CBC 146 +#define OBJ_pbe_WithSHA1And3_Key_TripleDES_CBC OBJ_pkcs12_pbeids,3L + +#define SN_pbe_WithSHA1And2_Key_TripleDES_CBC "PBE-SHA1-2DES" +#define LN_pbe_WithSHA1And2_Key_TripleDES_CBC "pbeWithSHA1And2-KeyTripleDES-CBC" +#define NID_pbe_WithSHA1And2_Key_TripleDES_CBC 147 +#define OBJ_pbe_WithSHA1And2_Key_TripleDES_CBC OBJ_pkcs12_pbeids,4L + +#define SN_pbe_WithSHA1And128BitRC2_CBC "PBE-SHA1-RC2-128" +#define LN_pbe_WithSHA1And128BitRC2_CBC "pbeWithSHA1And128BitRC2-CBC" +#define NID_pbe_WithSHA1And128BitRC2_CBC 148 +#define OBJ_pbe_WithSHA1And128BitRC2_CBC OBJ_pkcs12_pbeids,5L + +#define SN_pbe_WithSHA1And40BitRC2_CBC "PBE-SHA1-RC2-40" +#define LN_pbe_WithSHA1And40BitRC2_CBC "pbeWithSHA1And40BitRC2-CBC" +#define NID_pbe_WithSHA1And40BitRC2_CBC 149 +#define OBJ_pbe_WithSHA1And40BitRC2_CBC OBJ_pkcs12_pbeids,6L + +#define OBJ_pkcs12_Version1 OBJ_pkcs12,10L + +#define OBJ_pkcs12_BagIds OBJ_pkcs12_Version1,1L + +#define LN_keyBag "keyBag" +#define NID_keyBag 150 +#define OBJ_keyBag OBJ_pkcs12_BagIds,1L + +#define LN_pkcs8ShroudedKeyBag "pkcs8ShroudedKeyBag" +#define NID_pkcs8ShroudedKeyBag 151 +#define OBJ_pkcs8ShroudedKeyBag OBJ_pkcs12_BagIds,2L + +#define LN_certBag "certBag" +#define NID_certBag 152 +#define OBJ_certBag OBJ_pkcs12_BagIds,3L + +#define LN_crlBag "crlBag" +#define NID_crlBag 153 +#define OBJ_crlBag OBJ_pkcs12_BagIds,4L + +#define LN_secretBag "secretBag" +#define NID_secretBag 154 +#define OBJ_secretBag OBJ_pkcs12_BagIds,5L + +#define LN_safeContentsBag "safeContentsBag" +#define NID_safeContentsBag 155 +#define OBJ_safeContentsBag OBJ_pkcs12_BagIds,6L + +#define SN_md2 "MD2" +#define LN_md2 "md2" +#define NID_md2 3 +#define OBJ_md2 OBJ_rsadsi,2L,2L + +#define SN_md4 "MD4" +#define LN_md4 "md4" +#define NID_md4 257 +#define OBJ_md4 OBJ_rsadsi,2L,4L + +#define SN_md5 "MD5" +#define LN_md5 "md5" +#define NID_md5 4 +#define OBJ_md5 OBJ_rsadsi,2L,5L + +#define SN_md5_sha1 "MD5-SHA1" +#define LN_md5_sha1 "md5-sha1" +#define NID_md5_sha1 114 + +#define LN_hmacWithMD5 "hmacWithMD5" +#define NID_hmacWithMD5 797 +#define OBJ_hmacWithMD5 OBJ_rsadsi,2L,6L + +#define LN_hmacWithSHA1 "hmacWithSHA1" +#define NID_hmacWithSHA1 163 +#define OBJ_hmacWithSHA1 OBJ_rsadsi,2L,7L + +#define SN_sm2 "SM2" +#define LN_sm2 "sm2" +#define NID_sm2 1172 +#define OBJ_sm2 OBJ_sm_scheme,301L + +#define SN_sm3 "SM3" +#define LN_sm3 "sm3" +#define NID_sm3 1143 +#define OBJ_sm3 OBJ_sm_scheme,401L + +#define SN_sm3WithRSAEncryption "RSA-SM3" +#define LN_sm3WithRSAEncryption "sm3WithRSAEncryption" +#define NID_sm3WithRSAEncryption 1144 +#define OBJ_sm3WithRSAEncryption OBJ_sm_scheme,504L + +#define LN_hmacWithSHA224 "hmacWithSHA224" +#define NID_hmacWithSHA224 798 +#define OBJ_hmacWithSHA224 OBJ_rsadsi,2L,8L + +#define LN_hmacWithSHA256 "hmacWithSHA256" +#define NID_hmacWithSHA256 799 +#define OBJ_hmacWithSHA256 OBJ_rsadsi,2L,9L + +#define LN_hmacWithSHA384 "hmacWithSHA384" +#define NID_hmacWithSHA384 800 +#define OBJ_hmacWithSHA384 OBJ_rsadsi,2L,10L + +#define LN_hmacWithSHA512 "hmacWithSHA512" +#define NID_hmacWithSHA512 801 +#define OBJ_hmacWithSHA512 OBJ_rsadsi,2L,11L + +#define LN_hmacWithSHA512_224 "hmacWithSHA512-224" +#define NID_hmacWithSHA512_224 1193 +#define OBJ_hmacWithSHA512_224 OBJ_rsadsi,2L,12L + +#define LN_hmacWithSHA512_256 "hmacWithSHA512-256" +#define NID_hmacWithSHA512_256 1194 +#define OBJ_hmacWithSHA512_256 OBJ_rsadsi,2L,13L + +#define SN_rc2_cbc "RC2-CBC" +#define LN_rc2_cbc "rc2-cbc" +#define NID_rc2_cbc 37 +#define OBJ_rc2_cbc OBJ_rsadsi,3L,2L + +#define SN_rc2_ecb "RC2-ECB" +#define LN_rc2_ecb "rc2-ecb" +#define NID_rc2_ecb 38 + +#define SN_rc2_cfb64 "RC2-CFB" +#define LN_rc2_cfb64 "rc2-cfb" +#define NID_rc2_cfb64 39 + +#define SN_rc2_ofb64 "RC2-OFB" +#define LN_rc2_ofb64 "rc2-ofb" +#define NID_rc2_ofb64 40 + +#define SN_rc2_40_cbc "RC2-40-CBC" +#define LN_rc2_40_cbc "rc2-40-cbc" +#define NID_rc2_40_cbc 98 + +#define SN_rc2_64_cbc "RC2-64-CBC" +#define LN_rc2_64_cbc "rc2-64-cbc" +#define NID_rc2_64_cbc 166 + +#define SN_rc4 "RC4" +#define LN_rc4 "rc4" +#define NID_rc4 5 +#define OBJ_rc4 OBJ_rsadsi,3L,4L + +#define SN_rc4_40 "RC4-40" +#define LN_rc4_40 "rc4-40" +#define NID_rc4_40 97 + +#define SN_des_ede3_cbc "DES-EDE3-CBC" +#define LN_des_ede3_cbc "des-ede3-cbc" +#define NID_des_ede3_cbc 44 +#define OBJ_des_ede3_cbc OBJ_rsadsi,3L,7L + +#define SN_rc5_cbc "RC5-CBC" +#define LN_rc5_cbc "rc5-cbc" +#define NID_rc5_cbc 120 +#define OBJ_rc5_cbc OBJ_rsadsi,3L,8L + +#define SN_rc5_ecb "RC5-ECB" +#define LN_rc5_ecb "rc5-ecb" +#define NID_rc5_ecb 121 + +#define SN_rc5_cfb64 "RC5-CFB" +#define LN_rc5_cfb64 "rc5-cfb" +#define NID_rc5_cfb64 122 + +#define SN_rc5_ofb64 "RC5-OFB" +#define LN_rc5_ofb64 "rc5-ofb" +#define NID_rc5_ofb64 123 + +#define SN_ms_ext_req "msExtReq" +#define LN_ms_ext_req "Microsoft Extension Request" +#define NID_ms_ext_req 171 +#define OBJ_ms_ext_req 1L,3L,6L,1L,4L,1L,311L,2L,1L,14L + +#define SN_ms_code_ind "msCodeInd" +#define LN_ms_code_ind "Microsoft Individual Code Signing" +#define NID_ms_code_ind 134 +#define OBJ_ms_code_ind 1L,3L,6L,1L,4L,1L,311L,2L,1L,21L + +#define SN_ms_code_com "msCodeCom" +#define LN_ms_code_com "Microsoft Commercial Code Signing" +#define NID_ms_code_com 135 +#define OBJ_ms_code_com 1L,3L,6L,1L,4L,1L,311L,2L,1L,22L + +#define SN_ms_ctl_sign "msCTLSign" +#define LN_ms_ctl_sign "Microsoft Trust List Signing" +#define NID_ms_ctl_sign 136 +#define OBJ_ms_ctl_sign 1L,3L,6L,1L,4L,1L,311L,10L,3L,1L + +#define SN_ms_sgc "msSGC" +#define LN_ms_sgc "Microsoft Server Gated Crypto" +#define NID_ms_sgc 137 +#define OBJ_ms_sgc 1L,3L,6L,1L,4L,1L,311L,10L,3L,3L + +#define SN_ms_efs "msEFS" +#define LN_ms_efs "Microsoft Encrypted File System" +#define NID_ms_efs 138 +#define OBJ_ms_efs 1L,3L,6L,1L,4L,1L,311L,10L,3L,4L + +#define SN_ms_smartcard_login "msSmartcardLogin" +#define LN_ms_smartcard_login "Microsoft Smartcard Login" +#define NID_ms_smartcard_login 648 +#define OBJ_ms_smartcard_login 1L,3L,6L,1L,4L,1L,311L,20L,2L,2L + +#define SN_ms_upn "msUPN" +#define LN_ms_upn "Microsoft User Principal Name" +#define NID_ms_upn 649 +#define OBJ_ms_upn 1L,3L,6L,1L,4L,1L,311L,20L,2L,3L + +#define SN_idea_cbc "IDEA-CBC" +#define LN_idea_cbc "idea-cbc" +#define NID_idea_cbc 34 +#define OBJ_idea_cbc 1L,3L,6L,1L,4L,1L,188L,7L,1L,1L,2L + +#define SN_idea_ecb "IDEA-ECB" +#define LN_idea_ecb "idea-ecb" +#define NID_idea_ecb 36 + +#define SN_idea_cfb64 "IDEA-CFB" +#define LN_idea_cfb64 "idea-cfb" +#define NID_idea_cfb64 35 + +#define SN_idea_ofb64 "IDEA-OFB" +#define LN_idea_ofb64 "idea-ofb" +#define NID_idea_ofb64 46 + +#define SN_bf_cbc "BF-CBC" +#define LN_bf_cbc "bf-cbc" +#define NID_bf_cbc 91 +#define OBJ_bf_cbc 1L,3L,6L,1L,4L,1L,3029L,1L,2L + +#define SN_bf_ecb "BF-ECB" +#define LN_bf_ecb "bf-ecb" +#define NID_bf_ecb 92 + +#define SN_bf_cfb64 "BF-CFB" +#define LN_bf_cfb64 "bf-cfb" +#define NID_bf_cfb64 93 + +#define SN_bf_ofb64 "BF-OFB" +#define LN_bf_ofb64 "bf-ofb" +#define NID_bf_ofb64 94 + +#define SN_id_pkix "PKIX" +#define NID_id_pkix 127 +#define OBJ_id_pkix 1L,3L,6L,1L,5L,5L,7L + +#define SN_id_pkix_mod "id-pkix-mod" +#define NID_id_pkix_mod 258 +#define OBJ_id_pkix_mod OBJ_id_pkix,0L + +#define SN_id_pe "id-pe" +#define NID_id_pe 175 +#define OBJ_id_pe OBJ_id_pkix,1L + +#define SN_id_qt "id-qt" +#define NID_id_qt 259 +#define OBJ_id_qt OBJ_id_pkix,2L + +#define SN_id_kp "id-kp" +#define NID_id_kp 128 +#define OBJ_id_kp OBJ_id_pkix,3L + +#define SN_id_it "id-it" +#define NID_id_it 260 +#define OBJ_id_it OBJ_id_pkix,4L + +#define SN_id_pkip "id-pkip" +#define NID_id_pkip 261 +#define OBJ_id_pkip OBJ_id_pkix,5L + +#define SN_id_alg "id-alg" +#define NID_id_alg 262 +#define OBJ_id_alg OBJ_id_pkix,6L + +#define SN_id_cmc "id-cmc" +#define NID_id_cmc 263 +#define OBJ_id_cmc OBJ_id_pkix,7L + +#define SN_id_on "id-on" +#define NID_id_on 264 +#define OBJ_id_on OBJ_id_pkix,8L + +#define SN_id_pda "id-pda" +#define NID_id_pda 265 +#define OBJ_id_pda OBJ_id_pkix,9L + +#define SN_id_aca "id-aca" +#define NID_id_aca 266 +#define OBJ_id_aca OBJ_id_pkix,10L + +#define SN_id_qcs "id-qcs" +#define NID_id_qcs 267 +#define OBJ_id_qcs OBJ_id_pkix,11L + +#define SN_id_cct "id-cct" +#define NID_id_cct 268 +#define OBJ_id_cct OBJ_id_pkix,12L + +#define SN_id_ppl "id-ppl" +#define NID_id_ppl 662 +#define OBJ_id_ppl OBJ_id_pkix,21L + +#define SN_id_ad "id-ad" +#define NID_id_ad 176 +#define OBJ_id_ad OBJ_id_pkix,48L + +#define SN_id_pkix1_explicit_88 "id-pkix1-explicit-88" +#define NID_id_pkix1_explicit_88 269 +#define OBJ_id_pkix1_explicit_88 OBJ_id_pkix_mod,1L + +#define SN_id_pkix1_implicit_88 "id-pkix1-implicit-88" +#define NID_id_pkix1_implicit_88 270 +#define OBJ_id_pkix1_implicit_88 OBJ_id_pkix_mod,2L + +#define SN_id_pkix1_explicit_93 "id-pkix1-explicit-93" +#define NID_id_pkix1_explicit_93 271 +#define OBJ_id_pkix1_explicit_93 OBJ_id_pkix_mod,3L + +#define SN_id_pkix1_implicit_93 "id-pkix1-implicit-93" +#define NID_id_pkix1_implicit_93 272 +#define OBJ_id_pkix1_implicit_93 OBJ_id_pkix_mod,4L + +#define SN_id_mod_crmf "id-mod-crmf" +#define NID_id_mod_crmf 273 +#define OBJ_id_mod_crmf OBJ_id_pkix_mod,5L + +#define SN_id_mod_cmc "id-mod-cmc" +#define NID_id_mod_cmc 274 +#define OBJ_id_mod_cmc OBJ_id_pkix_mod,6L + +#define SN_id_mod_kea_profile_88 "id-mod-kea-profile-88" +#define NID_id_mod_kea_profile_88 275 +#define OBJ_id_mod_kea_profile_88 OBJ_id_pkix_mod,7L + +#define SN_id_mod_kea_profile_93 "id-mod-kea-profile-93" +#define NID_id_mod_kea_profile_93 276 +#define OBJ_id_mod_kea_profile_93 OBJ_id_pkix_mod,8L + +#define SN_id_mod_cmp "id-mod-cmp" +#define NID_id_mod_cmp 277 +#define OBJ_id_mod_cmp OBJ_id_pkix_mod,9L + +#define SN_id_mod_qualified_cert_88 "id-mod-qualified-cert-88" +#define NID_id_mod_qualified_cert_88 278 +#define OBJ_id_mod_qualified_cert_88 OBJ_id_pkix_mod,10L + +#define SN_id_mod_qualified_cert_93 "id-mod-qualified-cert-93" +#define NID_id_mod_qualified_cert_93 279 +#define OBJ_id_mod_qualified_cert_93 OBJ_id_pkix_mod,11L + +#define SN_id_mod_attribute_cert "id-mod-attribute-cert" +#define NID_id_mod_attribute_cert 280 +#define OBJ_id_mod_attribute_cert OBJ_id_pkix_mod,12L + +#define SN_id_mod_timestamp_protocol "id-mod-timestamp-protocol" +#define NID_id_mod_timestamp_protocol 281 +#define OBJ_id_mod_timestamp_protocol OBJ_id_pkix_mod,13L + +#define SN_id_mod_ocsp "id-mod-ocsp" +#define NID_id_mod_ocsp 282 +#define OBJ_id_mod_ocsp OBJ_id_pkix_mod,14L + +#define SN_id_mod_dvcs "id-mod-dvcs" +#define NID_id_mod_dvcs 283 +#define OBJ_id_mod_dvcs OBJ_id_pkix_mod,15L + +#define SN_id_mod_cmp2000 "id-mod-cmp2000" +#define NID_id_mod_cmp2000 284 +#define OBJ_id_mod_cmp2000 OBJ_id_pkix_mod,16L + +#define SN_info_access "authorityInfoAccess" +#define LN_info_access "Authority Information Access" +#define NID_info_access 177 +#define OBJ_info_access OBJ_id_pe,1L + +#define SN_biometricInfo "biometricInfo" +#define LN_biometricInfo "Biometric Info" +#define NID_biometricInfo 285 +#define OBJ_biometricInfo OBJ_id_pe,2L + +#define SN_qcStatements "qcStatements" +#define NID_qcStatements 286 +#define OBJ_qcStatements OBJ_id_pe,3L + +#define SN_ac_auditEntity "ac-auditEntity" +#define NID_ac_auditEntity 287 +#define OBJ_ac_auditEntity OBJ_id_pe,4L + +#define SN_ac_targeting "ac-targeting" +#define NID_ac_targeting 288 +#define OBJ_ac_targeting OBJ_id_pe,5L + +#define SN_aaControls "aaControls" +#define NID_aaControls 289 +#define OBJ_aaControls OBJ_id_pe,6L + +#define SN_sbgp_ipAddrBlock "sbgp-ipAddrBlock" +#define NID_sbgp_ipAddrBlock 290 +#define OBJ_sbgp_ipAddrBlock OBJ_id_pe,7L + +#define SN_sbgp_autonomousSysNum "sbgp-autonomousSysNum" +#define NID_sbgp_autonomousSysNum 291 +#define OBJ_sbgp_autonomousSysNum OBJ_id_pe,8L + +#define SN_sbgp_routerIdentifier "sbgp-routerIdentifier" +#define NID_sbgp_routerIdentifier 292 +#define OBJ_sbgp_routerIdentifier OBJ_id_pe,9L + +#define SN_ac_proxying "ac-proxying" +#define NID_ac_proxying 397 +#define OBJ_ac_proxying OBJ_id_pe,10L + +#define SN_sinfo_access "subjectInfoAccess" +#define LN_sinfo_access "Subject Information Access" +#define NID_sinfo_access 398 +#define OBJ_sinfo_access OBJ_id_pe,11L + +#define SN_proxyCertInfo "proxyCertInfo" +#define LN_proxyCertInfo "Proxy Certificate Information" +#define NID_proxyCertInfo 663 +#define OBJ_proxyCertInfo OBJ_id_pe,14L + +#define SN_tlsfeature "tlsfeature" +#define LN_tlsfeature "TLS Feature" +#define NID_tlsfeature 1020 +#define OBJ_tlsfeature OBJ_id_pe,24L + +#define SN_id_qt_cps "id-qt-cps" +#define LN_id_qt_cps "Policy Qualifier CPS" +#define NID_id_qt_cps 164 +#define OBJ_id_qt_cps OBJ_id_qt,1L + +#define SN_id_qt_unotice "id-qt-unotice" +#define LN_id_qt_unotice "Policy Qualifier User Notice" +#define NID_id_qt_unotice 165 +#define OBJ_id_qt_unotice OBJ_id_qt,2L + +#define SN_textNotice "textNotice" +#define NID_textNotice 293 +#define OBJ_textNotice OBJ_id_qt,3L + +#define SN_server_auth "serverAuth" +#define LN_server_auth "TLS Web Server Authentication" +#define NID_server_auth 129 +#define OBJ_server_auth OBJ_id_kp,1L + +#define SN_client_auth "clientAuth" +#define LN_client_auth "TLS Web Client Authentication" +#define NID_client_auth 130 +#define OBJ_client_auth OBJ_id_kp,2L + +#define SN_code_sign "codeSigning" +#define LN_code_sign "Code Signing" +#define NID_code_sign 131 +#define OBJ_code_sign OBJ_id_kp,3L + +#define SN_email_protect "emailProtection" +#define LN_email_protect "E-mail Protection" +#define NID_email_protect 132 +#define OBJ_email_protect OBJ_id_kp,4L + +#define SN_ipsecEndSystem "ipsecEndSystem" +#define LN_ipsecEndSystem "IPSec End System" +#define NID_ipsecEndSystem 294 +#define OBJ_ipsecEndSystem OBJ_id_kp,5L + +#define SN_ipsecTunnel "ipsecTunnel" +#define LN_ipsecTunnel "IPSec Tunnel" +#define NID_ipsecTunnel 295 +#define OBJ_ipsecTunnel OBJ_id_kp,6L + +#define SN_ipsecUser "ipsecUser" +#define LN_ipsecUser "IPSec User" +#define NID_ipsecUser 296 +#define OBJ_ipsecUser OBJ_id_kp,7L + +#define SN_time_stamp "timeStamping" +#define LN_time_stamp "Time Stamping" +#define NID_time_stamp 133 +#define OBJ_time_stamp OBJ_id_kp,8L + +#define SN_OCSP_sign "OCSPSigning" +#define LN_OCSP_sign "OCSP Signing" +#define NID_OCSP_sign 180 +#define OBJ_OCSP_sign OBJ_id_kp,9L + +#define SN_dvcs "DVCS" +#define LN_dvcs "dvcs" +#define NID_dvcs 297 +#define OBJ_dvcs OBJ_id_kp,10L + +#define SN_ipsec_IKE "ipsecIKE" +#define LN_ipsec_IKE "ipsec Internet Key Exchange" +#define NID_ipsec_IKE 1022 +#define OBJ_ipsec_IKE OBJ_id_kp,17L + +#define SN_capwapAC "capwapAC" +#define LN_capwapAC "Ctrl/provision WAP Access" +#define NID_capwapAC 1023 +#define OBJ_capwapAC OBJ_id_kp,18L + +#define SN_capwapWTP "capwapWTP" +#define LN_capwapWTP "Ctrl/Provision WAP Termination" +#define NID_capwapWTP 1024 +#define OBJ_capwapWTP OBJ_id_kp,19L + +#define SN_sshClient "secureShellClient" +#define LN_sshClient "SSH Client" +#define NID_sshClient 1025 +#define OBJ_sshClient OBJ_id_kp,21L + +#define SN_sshServer "secureShellServer" +#define LN_sshServer "SSH Server" +#define NID_sshServer 1026 +#define OBJ_sshServer OBJ_id_kp,22L + +#define SN_sendRouter "sendRouter" +#define LN_sendRouter "Send Router" +#define NID_sendRouter 1027 +#define OBJ_sendRouter OBJ_id_kp,23L + +#define SN_sendProxiedRouter "sendProxiedRouter" +#define LN_sendProxiedRouter "Send Proxied Router" +#define NID_sendProxiedRouter 1028 +#define OBJ_sendProxiedRouter OBJ_id_kp,24L + +#define SN_sendOwner "sendOwner" +#define LN_sendOwner "Send Owner" +#define NID_sendOwner 1029 +#define OBJ_sendOwner OBJ_id_kp,25L + +#define SN_sendProxiedOwner "sendProxiedOwner" +#define LN_sendProxiedOwner "Send Proxied Owner" +#define NID_sendProxiedOwner 1030 +#define OBJ_sendProxiedOwner OBJ_id_kp,26L + +#define SN_cmcCA "cmcCA" +#define LN_cmcCA "CMC Certificate Authority" +#define NID_cmcCA 1131 +#define OBJ_cmcCA OBJ_id_kp,27L + +#define SN_cmcRA "cmcRA" +#define LN_cmcRA "CMC Registration Authority" +#define NID_cmcRA 1132 +#define OBJ_cmcRA OBJ_id_kp,28L + +#define SN_id_it_caProtEncCert "id-it-caProtEncCert" +#define NID_id_it_caProtEncCert 298 +#define OBJ_id_it_caProtEncCert OBJ_id_it,1L + +#define SN_id_it_signKeyPairTypes "id-it-signKeyPairTypes" +#define NID_id_it_signKeyPairTypes 299 +#define OBJ_id_it_signKeyPairTypes OBJ_id_it,2L + +#define SN_id_it_encKeyPairTypes "id-it-encKeyPairTypes" +#define NID_id_it_encKeyPairTypes 300 +#define OBJ_id_it_encKeyPairTypes OBJ_id_it,3L + +#define SN_id_it_preferredSymmAlg "id-it-preferredSymmAlg" +#define NID_id_it_preferredSymmAlg 301 +#define OBJ_id_it_preferredSymmAlg OBJ_id_it,4L + +#define SN_id_it_caKeyUpdateInfo "id-it-caKeyUpdateInfo" +#define NID_id_it_caKeyUpdateInfo 302 +#define OBJ_id_it_caKeyUpdateInfo OBJ_id_it,5L + +#define SN_id_it_currentCRL "id-it-currentCRL" +#define NID_id_it_currentCRL 303 +#define OBJ_id_it_currentCRL OBJ_id_it,6L + +#define SN_id_it_unsupportedOIDs "id-it-unsupportedOIDs" +#define NID_id_it_unsupportedOIDs 304 +#define OBJ_id_it_unsupportedOIDs OBJ_id_it,7L + +#define SN_id_it_subscriptionRequest "id-it-subscriptionRequest" +#define NID_id_it_subscriptionRequest 305 +#define OBJ_id_it_subscriptionRequest OBJ_id_it,8L + +#define SN_id_it_subscriptionResponse "id-it-subscriptionResponse" +#define NID_id_it_subscriptionResponse 306 +#define OBJ_id_it_subscriptionResponse OBJ_id_it,9L + +#define SN_id_it_keyPairParamReq "id-it-keyPairParamReq" +#define NID_id_it_keyPairParamReq 307 +#define OBJ_id_it_keyPairParamReq OBJ_id_it,10L + +#define SN_id_it_keyPairParamRep "id-it-keyPairParamRep" +#define NID_id_it_keyPairParamRep 308 +#define OBJ_id_it_keyPairParamRep OBJ_id_it,11L + +#define SN_id_it_revPassphrase "id-it-revPassphrase" +#define NID_id_it_revPassphrase 309 +#define OBJ_id_it_revPassphrase OBJ_id_it,12L + +#define SN_id_it_implicitConfirm "id-it-implicitConfirm" +#define NID_id_it_implicitConfirm 310 +#define OBJ_id_it_implicitConfirm OBJ_id_it,13L + +#define SN_id_it_confirmWaitTime "id-it-confirmWaitTime" +#define NID_id_it_confirmWaitTime 311 +#define OBJ_id_it_confirmWaitTime OBJ_id_it,14L + +#define SN_id_it_origPKIMessage "id-it-origPKIMessage" +#define NID_id_it_origPKIMessage 312 +#define OBJ_id_it_origPKIMessage OBJ_id_it,15L + +#define SN_id_it_suppLangTags "id-it-suppLangTags" +#define NID_id_it_suppLangTags 784 +#define OBJ_id_it_suppLangTags OBJ_id_it,16L + +#define SN_id_regCtrl "id-regCtrl" +#define NID_id_regCtrl 313 +#define OBJ_id_regCtrl OBJ_id_pkip,1L + +#define SN_id_regInfo "id-regInfo" +#define NID_id_regInfo 314 +#define OBJ_id_regInfo OBJ_id_pkip,2L + +#define SN_id_regCtrl_regToken "id-regCtrl-regToken" +#define NID_id_regCtrl_regToken 315 +#define OBJ_id_regCtrl_regToken OBJ_id_regCtrl,1L + +#define SN_id_regCtrl_authenticator "id-regCtrl-authenticator" +#define NID_id_regCtrl_authenticator 316 +#define OBJ_id_regCtrl_authenticator OBJ_id_regCtrl,2L + +#define SN_id_regCtrl_pkiPublicationInfo "id-regCtrl-pkiPublicationInfo" +#define NID_id_regCtrl_pkiPublicationInfo 317 +#define OBJ_id_regCtrl_pkiPublicationInfo OBJ_id_regCtrl,3L + +#define SN_id_regCtrl_pkiArchiveOptions "id-regCtrl-pkiArchiveOptions" +#define NID_id_regCtrl_pkiArchiveOptions 318 +#define OBJ_id_regCtrl_pkiArchiveOptions OBJ_id_regCtrl,4L + +#define SN_id_regCtrl_oldCertID "id-regCtrl-oldCertID" +#define NID_id_regCtrl_oldCertID 319 +#define OBJ_id_regCtrl_oldCertID OBJ_id_regCtrl,5L + +#define SN_id_regCtrl_protocolEncrKey "id-regCtrl-protocolEncrKey" +#define NID_id_regCtrl_protocolEncrKey 320 +#define OBJ_id_regCtrl_protocolEncrKey OBJ_id_regCtrl,6L + +#define SN_id_regInfo_utf8Pairs "id-regInfo-utf8Pairs" +#define NID_id_regInfo_utf8Pairs 321 +#define OBJ_id_regInfo_utf8Pairs OBJ_id_regInfo,1L + +#define SN_id_regInfo_certReq "id-regInfo-certReq" +#define NID_id_regInfo_certReq 322 +#define OBJ_id_regInfo_certReq OBJ_id_regInfo,2L + +#define SN_id_alg_des40 "id-alg-des40" +#define NID_id_alg_des40 323 +#define OBJ_id_alg_des40 OBJ_id_alg,1L + +#define SN_id_alg_noSignature "id-alg-noSignature" +#define NID_id_alg_noSignature 324 +#define OBJ_id_alg_noSignature OBJ_id_alg,2L + +#define SN_id_alg_dh_sig_hmac_sha1 "id-alg-dh-sig-hmac-sha1" +#define NID_id_alg_dh_sig_hmac_sha1 325 +#define OBJ_id_alg_dh_sig_hmac_sha1 OBJ_id_alg,3L + +#define SN_id_alg_dh_pop "id-alg-dh-pop" +#define NID_id_alg_dh_pop 326 +#define OBJ_id_alg_dh_pop OBJ_id_alg,4L + +#define SN_id_cmc_statusInfo "id-cmc-statusInfo" +#define NID_id_cmc_statusInfo 327 +#define OBJ_id_cmc_statusInfo OBJ_id_cmc,1L + +#define SN_id_cmc_identification "id-cmc-identification" +#define NID_id_cmc_identification 328 +#define OBJ_id_cmc_identification OBJ_id_cmc,2L + +#define SN_id_cmc_identityProof "id-cmc-identityProof" +#define NID_id_cmc_identityProof 329 +#define OBJ_id_cmc_identityProof OBJ_id_cmc,3L + +#define SN_id_cmc_dataReturn "id-cmc-dataReturn" +#define NID_id_cmc_dataReturn 330 +#define OBJ_id_cmc_dataReturn OBJ_id_cmc,4L + +#define SN_id_cmc_transactionId "id-cmc-transactionId" +#define NID_id_cmc_transactionId 331 +#define OBJ_id_cmc_transactionId OBJ_id_cmc,5L + +#define SN_id_cmc_senderNonce "id-cmc-senderNonce" +#define NID_id_cmc_senderNonce 332 +#define OBJ_id_cmc_senderNonce OBJ_id_cmc,6L + +#define SN_id_cmc_recipientNonce "id-cmc-recipientNonce" +#define NID_id_cmc_recipientNonce 333 +#define OBJ_id_cmc_recipientNonce OBJ_id_cmc,7L + +#define SN_id_cmc_addExtensions "id-cmc-addExtensions" +#define NID_id_cmc_addExtensions 334 +#define OBJ_id_cmc_addExtensions OBJ_id_cmc,8L + +#define SN_id_cmc_encryptedPOP "id-cmc-encryptedPOP" +#define NID_id_cmc_encryptedPOP 335 +#define OBJ_id_cmc_encryptedPOP OBJ_id_cmc,9L + +#define SN_id_cmc_decryptedPOP "id-cmc-decryptedPOP" +#define NID_id_cmc_decryptedPOP 336 +#define OBJ_id_cmc_decryptedPOP OBJ_id_cmc,10L + +#define SN_id_cmc_lraPOPWitness "id-cmc-lraPOPWitness" +#define NID_id_cmc_lraPOPWitness 337 +#define OBJ_id_cmc_lraPOPWitness OBJ_id_cmc,11L + +#define SN_id_cmc_getCert "id-cmc-getCert" +#define NID_id_cmc_getCert 338 +#define OBJ_id_cmc_getCert OBJ_id_cmc,15L + +#define SN_id_cmc_getCRL "id-cmc-getCRL" +#define NID_id_cmc_getCRL 339 +#define OBJ_id_cmc_getCRL OBJ_id_cmc,16L + +#define SN_id_cmc_revokeRequest "id-cmc-revokeRequest" +#define NID_id_cmc_revokeRequest 340 +#define OBJ_id_cmc_revokeRequest OBJ_id_cmc,17L + +#define SN_id_cmc_regInfo "id-cmc-regInfo" +#define NID_id_cmc_regInfo 341 +#define OBJ_id_cmc_regInfo OBJ_id_cmc,18L + +#define SN_id_cmc_responseInfo "id-cmc-responseInfo" +#define NID_id_cmc_responseInfo 342 +#define OBJ_id_cmc_responseInfo OBJ_id_cmc,19L + +#define SN_id_cmc_queryPending "id-cmc-queryPending" +#define NID_id_cmc_queryPending 343 +#define OBJ_id_cmc_queryPending OBJ_id_cmc,21L + +#define SN_id_cmc_popLinkRandom "id-cmc-popLinkRandom" +#define NID_id_cmc_popLinkRandom 344 +#define OBJ_id_cmc_popLinkRandom OBJ_id_cmc,22L + +#define SN_id_cmc_popLinkWitness "id-cmc-popLinkWitness" +#define NID_id_cmc_popLinkWitness 345 +#define OBJ_id_cmc_popLinkWitness OBJ_id_cmc,23L + +#define SN_id_cmc_confirmCertAcceptance "id-cmc-confirmCertAcceptance" +#define NID_id_cmc_confirmCertAcceptance 346 +#define OBJ_id_cmc_confirmCertAcceptance OBJ_id_cmc,24L + +#define SN_id_on_personalData "id-on-personalData" +#define NID_id_on_personalData 347 +#define OBJ_id_on_personalData OBJ_id_on,1L + +#define SN_id_on_permanentIdentifier "id-on-permanentIdentifier" +#define LN_id_on_permanentIdentifier "Permanent Identifier" +#define NID_id_on_permanentIdentifier 858 +#define OBJ_id_on_permanentIdentifier OBJ_id_on,3L + +#define SN_id_pda_dateOfBirth "id-pda-dateOfBirth" +#define NID_id_pda_dateOfBirth 348 +#define OBJ_id_pda_dateOfBirth OBJ_id_pda,1L + +#define SN_id_pda_placeOfBirth "id-pda-placeOfBirth" +#define NID_id_pda_placeOfBirth 349 +#define OBJ_id_pda_placeOfBirth OBJ_id_pda,2L + +#define SN_id_pda_gender "id-pda-gender" +#define NID_id_pda_gender 351 +#define OBJ_id_pda_gender OBJ_id_pda,3L + +#define SN_id_pda_countryOfCitizenship "id-pda-countryOfCitizenship" +#define NID_id_pda_countryOfCitizenship 352 +#define OBJ_id_pda_countryOfCitizenship OBJ_id_pda,4L + +#define SN_id_pda_countryOfResidence "id-pda-countryOfResidence" +#define NID_id_pda_countryOfResidence 353 +#define OBJ_id_pda_countryOfResidence OBJ_id_pda,5L + +#define SN_id_aca_authenticationInfo "id-aca-authenticationInfo" +#define NID_id_aca_authenticationInfo 354 +#define OBJ_id_aca_authenticationInfo OBJ_id_aca,1L + +#define SN_id_aca_accessIdentity "id-aca-accessIdentity" +#define NID_id_aca_accessIdentity 355 +#define OBJ_id_aca_accessIdentity OBJ_id_aca,2L + +#define SN_id_aca_chargingIdentity "id-aca-chargingIdentity" +#define NID_id_aca_chargingIdentity 356 +#define OBJ_id_aca_chargingIdentity OBJ_id_aca,3L + +#define SN_id_aca_group "id-aca-group" +#define NID_id_aca_group 357 +#define OBJ_id_aca_group OBJ_id_aca,4L + +#define SN_id_aca_role "id-aca-role" +#define NID_id_aca_role 358 +#define OBJ_id_aca_role OBJ_id_aca,5L + +#define SN_id_aca_encAttrs "id-aca-encAttrs" +#define NID_id_aca_encAttrs 399 +#define OBJ_id_aca_encAttrs OBJ_id_aca,6L + +#define SN_id_qcs_pkixQCSyntax_v1 "id-qcs-pkixQCSyntax-v1" +#define NID_id_qcs_pkixQCSyntax_v1 359 +#define OBJ_id_qcs_pkixQCSyntax_v1 OBJ_id_qcs,1L + +#define SN_id_cct_crs "id-cct-crs" +#define NID_id_cct_crs 360 +#define OBJ_id_cct_crs OBJ_id_cct,1L + +#define SN_id_cct_PKIData "id-cct-PKIData" +#define NID_id_cct_PKIData 361 +#define OBJ_id_cct_PKIData OBJ_id_cct,2L + +#define SN_id_cct_PKIResponse "id-cct-PKIResponse" +#define NID_id_cct_PKIResponse 362 +#define OBJ_id_cct_PKIResponse OBJ_id_cct,3L + +#define SN_id_ppl_anyLanguage "id-ppl-anyLanguage" +#define LN_id_ppl_anyLanguage "Any language" +#define NID_id_ppl_anyLanguage 664 +#define OBJ_id_ppl_anyLanguage OBJ_id_ppl,0L + +#define SN_id_ppl_inheritAll "id-ppl-inheritAll" +#define LN_id_ppl_inheritAll "Inherit all" +#define NID_id_ppl_inheritAll 665 +#define OBJ_id_ppl_inheritAll OBJ_id_ppl,1L + +#define SN_Independent "id-ppl-independent" +#define LN_Independent "Independent" +#define NID_Independent 667 +#define OBJ_Independent OBJ_id_ppl,2L + +#define SN_ad_OCSP "OCSP" +#define LN_ad_OCSP "OCSP" +#define NID_ad_OCSP 178 +#define OBJ_ad_OCSP OBJ_id_ad,1L + +#define SN_ad_ca_issuers "caIssuers" +#define LN_ad_ca_issuers "CA Issuers" +#define NID_ad_ca_issuers 179 +#define OBJ_ad_ca_issuers OBJ_id_ad,2L + +#define SN_ad_timeStamping "ad_timestamping" +#define LN_ad_timeStamping "AD Time Stamping" +#define NID_ad_timeStamping 363 +#define OBJ_ad_timeStamping OBJ_id_ad,3L + +#define SN_ad_dvcs "AD_DVCS" +#define LN_ad_dvcs "ad dvcs" +#define NID_ad_dvcs 364 +#define OBJ_ad_dvcs OBJ_id_ad,4L + +#define SN_caRepository "caRepository" +#define LN_caRepository "CA Repository" +#define NID_caRepository 785 +#define OBJ_caRepository OBJ_id_ad,5L + +#define OBJ_id_pkix_OCSP OBJ_ad_OCSP + +#define SN_id_pkix_OCSP_basic "basicOCSPResponse" +#define LN_id_pkix_OCSP_basic "Basic OCSP Response" +#define NID_id_pkix_OCSP_basic 365 +#define OBJ_id_pkix_OCSP_basic OBJ_id_pkix_OCSP,1L + +#define SN_id_pkix_OCSP_Nonce "Nonce" +#define LN_id_pkix_OCSP_Nonce "OCSP Nonce" +#define NID_id_pkix_OCSP_Nonce 366 +#define OBJ_id_pkix_OCSP_Nonce OBJ_id_pkix_OCSP,2L + +#define SN_id_pkix_OCSP_CrlID "CrlID" +#define LN_id_pkix_OCSP_CrlID "OCSP CRL ID" +#define NID_id_pkix_OCSP_CrlID 367 +#define OBJ_id_pkix_OCSP_CrlID OBJ_id_pkix_OCSP,3L + +#define SN_id_pkix_OCSP_acceptableResponses "acceptableResponses" +#define LN_id_pkix_OCSP_acceptableResponses "Acceptable OCSP Responses" +#define NID_id_pkix_OCSP_acceptableResponses 368 +#define OBJ_id_pkix_OCSP_acceptableResponses OBJ_id_pkix_OCSP,4L + +#define SN_id_pkix_OCSP_noCheck "noCheck" +#define LN_id_pkix_OCSP_noCheck "OCSP No Check" +#define NID_id_pkix_OCSP_noCheck 369 +#define OBJ_id_pkix_OCSP_noCheck OBJ_id_pkix_OCSP,5L + +#define SN_id_pkix_OCSP_archiveCutoff "archiveCutoff" +#define LN_id_pkix_OCSP_archiveCutoff "OCSP Archive Cutoff" +#define NID_id_pkix_OCSP_archiveCutoff 370 +#define OBJ_id_pkix_OCSP_archiveCutoff OBJ_id_pkix_OCSP,6L + +#define SN_id_pkix_OCSP_serviceLocator "serviceLocator" +#define LN_id_pkix_OCSP_serviceLocator "OCSP Service Locator" +#define NID_id_pkix_OCSP_serviceLocator 371 +#define OBJ_id_pkix_OCSP_serviceLocator OBJ_id_pkix_OCSP,7L + +#define SN_id_pkix_OCSP_extendedStatus "extendedStatus" +#define LN_id_pkix_OCSP_extendedStatus "Extended OCSP Status" +#define NID_id_pkix_OCSP_extendedStatus 372 +#define OBJ_id_pkix_OCSP_extendedStatus OBJ_id_pkix_OCSP,8L + +#define SN_id_pkix_OCSP_valid "valid" +#define NID_id_pkix_OCSP_valid 373 +#define OBJ_id_pkix_OCSP_valid OBJ_id_pkix_OCSP,9L + +#define SN_id_pkix_OCSP_path "path" +#define NID_id_pkix_OCSP_path 374 +#define OBJ_id_pkix_OCSP_path OBJ_id_pkix_OCSP,10L + +#define SN_id_pkix_OCSP_trustRoot "trustRoot" +#define LN_id_pkix_OCSP_trustRoot "Trust Root" +#define NID_id_pkix_OCSP_trustRoot 375 +#define OBJ_id_pkix_OCSP_trustRoot OBJ_id_pkix_OCSP,11L + +#define SN_algorithm "algorithm" +#define LN_algorithm "algorithm" +#define NID_algorithm 376 +#define OBJ_algorithm 1L,3L,14L,3L,2L + +#define SN_md5WithRSA "RSA-NP-MD5" +#define LN_md5WithRSA "md5WithRSA" +#define NID_md5WithRSA 104 +#define OBJ_md5WithRSA OBJ_algorithm,3L + +#define SN_des_ecb "DES-ECB" +#define LN_des_ecb "des-ecb" +#define NID_des_ecb 29 +#define OBJ_des_ecb OBJ_algorithm,6L + +#define SN_des_cbc "DES-CBC" +#define LN_des_cbc "des-cbc" +#define NID_des_cbc 31 +#define OBJ_des_cbc OBJ_algorithm,7L + +#define SN_des_ofb64 "DES-OFB" +#define LN_des_ofb64 "des-ofb" +#define NID_des_ofb64 45 +#define OBJ_des_ofb64 OBJ_algorithm,8L + +#define SN_des_cfb64 "DES-CFB" +#define LN_des_cfb64 "des-cfb" +#define NID_des_cfb64 30 +#define OBJ_des_cfb64 OBJ_algorithm,9L + +#define SN_rsaSignature "rsaSignature" +#define NID_rsaSignature 377 +#define OBJ_rsaSignature OBJ_algorithm,11L + +#define SN_dsa_2 "DSA-old" +#define LN_dsa_2 "dsaEncryption-old" +#define NID_dsa_2 67 +#define OBJ_dsa_2 OBJ_algorithm,12L + +#define SN_dsaWithSHA "DSA-SHA" +#define LN_dsaWithSHA "dsaWithSHA" +#define NID_dsaWithSHA 66 +#define OBJ_dsaWithSHA OBJ_algorithm,13L + +#define SN_shaWithRSAEncryption "RSA-SHA" +#define LN_shaWithRSAEncryption "shaWithRSAEncryption" +#define NID_shaWithRSAEncryption 42 +#define OBJ_shaWithRSAEncryption OBJ_algorithm,15L + +#define SN_des_ede_ecb "DES-EDE" +#define LN_des_ede_ecb "des-ede" +#define NID_des_ede_ecb 32 +#define OBJ_des_ede_ecb OBJ_algorithm,17L + +#define SN_des_ede3_ecb "DES-EDE3" +#define LN_des_ede3_ecb "des-ede3" +#define NID_des_ede3_ecb 33 + +#define SN_des_ede_cbc "DES-EDE-CBC" +#define LN_des_ede_cbc "des-ede-cbc" +#define NID_des_ede_cbc 43 + +#define SN_des_ede_cfb64 "DES-EDE-CFB" +#define LN_des_ede_cfb64 "des-ede-cfb" +#define NID_des_ede_cfb64 60 + +#define SN_des_ede3_cfb64 "DES-EDE3-CFB" +#define LN_des_ede3_cfb64 "des-ede3-cfb" +#define NID_des_ede3_cfb64 61 + +#define SN_des_ede_ofb64 "DES-EDE-OFB" +#define LN_des_ede_ofb64 "des-ede-ofb" +#define NID_des_ede_ofb64 62 + +#define SN_des_ede3_ofb64 "DES-EDE3-OFB" +#define LN_des_ede3_ofb64 "des-ede3-ofb" +#define NID_des_ede3_ofb64 63 + +#define SN_desx_cbc "DESX-CBC" +#define LN_desx_cbc "desx-cbc" +#define NID_desx_cbc 80 + +#define SN_sha "SHA" +#define LN_sha "sha" +#define NID_sha 41 +#define OBJ_sha OBJ_algorithm,18L + +#define SN_sha1 "SHA1" +#define LN_sha1 "sha1" +#define NID_sha1 64 +#define OBJ_sha1 OBJ_algorithm,26L + +#define SN_dsaWithSHA1_2 "DSA-SHA1-old" +#define LN_dsaWithSHA1_2 "dsaWithSHA1-old" +#define NID_dsaWithSHA1_2 70 +#define OBJ_dsaWithSHA1_2 OBJ_algorithm,27L + +#define SN_sha1WithRSA "RSA-SHA1-2" +#define LN_sha1WithRSA "sha1WithRSA" +#define NID_sha1WithRSA 115 +#define OBJ_sha1WithRSA OBJ_algorithm,29L + +#define SN_ripemd160 "RIPEMD160" +#define LN_ripemd160 "ripemd160" +#define NID_ripemd160 117 +#define OBJ_ripemd160 1L,3L,36L,3L,2L,1L + +#define SN_ripemd160WithRSA "RSA-RIPEMD160" +#define LN_ripemd160WithRSA "ripemd160WithRSA" +#define NID_ripemd160WithRSA 119 +#define OBJ_ripemd160WithRSA 1L,3L,36L,3L,3L,1L,2L + +#define SN_blake2b512 "BLAKE2b512" +#define LN_blake2b512 "blake2b512" +#define NID_blake2b512 1056 +#define OBJ_blake2b512 1L,3L,6L,1L,4L,1L,1722L,12L,2L,1L,16L + +#define SN_blake2s256 "BLAKE2s256" +#define LN_blake2s256 "blake2s256" +#define NID_blake2s256 1057 +#define OBJ_blake2s256 1L,3L,6L,1L,4L,1L,1722L,12L,2L,2L,8L + +#define SN_sxnet "SXNetID" +#define LN_sxnet "Strong Extranet ID" +#define NID_sxnet 143 +#define OBJ_sxnet 1L,3L,101L,1L,4L,1L + +#define SN_X500 "X500" +#define LN_X500 "directory services (X.500)" +#define NID_X500 11 +#define OBJ_X500 2L,5L + +#define SN_X509 "X509" +#define NID_X509 12 +#define OBJ_X509 OBJ_X500,4L + +#define SN_commonName "CN" +#define LN_commonName "commonName" +#define NID_commonName 13 +#define OBJ_commonName OBJ_X509,3L + +#define SN_surname "SN" +#define LN_surname "surname" +#define NID_surname 100 +#define OBJ_surname OBJ_X509,4L + +#define LN_serialNumber "serialNumber" +#define NID_serialNumber 105 +#define OBJ_serialNumber OBJ_X509,5L + +#define SN_countryName "C" +#define LN_countryName "countryName" +#define NID_countryName 14 +#define OBJ_countryName OBJ_X509,6L + +#define SN_localityName "L" +#define LN_localityName "localityName" +#define NID_localityName 15 +#define OBJ_localityName OBJ_X509,7L + +#define SN_stateOrProvinceName "ST" +#define LN_stateOrProvinceName "stateOrProvinceName" +#define NID_stateOrProvinceName 16 +#define OBJ_stateOrProvinceName OBJ_X509,8L + +#define SN_streetAddress "street" +#define LN_streetAddress "streetAddress" +#define NID_streetAddress 660 +#define OBJ_streetAddress OBJ_X509,9L + +#define SN_organizationName "O" +#define LN_organizationName "organizationName" +#define NID_organizationName 17 +#define OBJ_organizationName OBJ_X509,10L + +#define SN_organizationalUnitName "OU" +#define LN_organizationalUnitName "organizationalUnitName" +#define NID_organizationalUnitName 18 +#define OBJ_organizationalUnitName OBJ_X509,11L + +#define SN_title "title" +#define LN_title "title" +#define NID_title 106 +#define OBJ_title OBJ_X509,12L + +#define LN_description "description" +#define NID_description 107 +#define OBJ_description OBJ_X509,13L + +#define LN_searchGuide "searchGuide" +#define NID_searchGuide 859 +#define OBJ_searchGuide OBJ_X509,14L + +#define LN_businessCategory "businessCategory" +#define NID_businessCategory 860 +#define OBJ_businessCategory OBJ_X509,15L + +#define LN_postalAddress "postalAddress" +#define NID_postalAddress 861 +#define OBJ_postalAddress OBJ_X509,16L + +#define LN_postalCode "postalCode" +#define NID_postalCode 661 +#define OBJ_postalCode OBJ_X509,17L + +#define LN_postOfficeBox "postOfficeBox" +#define NID_postOfficeBox 862 +#define OBJ_postOfficeBox OBJ_X509,18L + +#define LN_physicalDeliveryOfficeName "physicalDeliveryOfficeName" +#define NID_physicalDeliveryOfficeName 863 +#define OBJ_physicalDeliveryOfficeName OBJ_X509,19L + +#define LN_telephoneNumber "telephoneNumber" +#define NID_telephoneNumber 864 +#define OBJ_telephoneNumber OBJ_X509,20L + +#define LN_telexNumber "telexNumber" +#define NID_telexNumber 865 +#define OBJ_telexNumber OBJ_X509,21L + +#define LN_teletexTerminalIdentifier "teletexTerminalIdentifier" +#define NID_teletexTerminalIdentifier 866 +#define OBJ_teletexTerminalIdentifier OBJ_X509,22L + +#define LN_facsimileTelephoneNumber "facsimileTelephoneNumber" +#define NID_facsimileTelephoneNumber 867 +#define OBJ_facsimileTelephoneNumber OBJ_X509,23L + +#define LN_x121Address "x121Address" +#define NID_x121Address 868 +#define OBJ_x121Address OBJ_X509,24L + +#define LN_internationaliSDNNumber "internationaliSDNNumber" +#define NID_internationaliSDNNumber 869 +#define OBJ_internationaliSDNNumber OBJ_X509,25L + +#define LN_registeredAddress "registeredAddress" +#define NID_registeredAddress 870 +#define OBJ_registeredAddress OBJ_X509,26L + +#define LN_destinationIndicator "destinationIndicator" +#define NID_destinationIndicator 871 +#define OBJ_destinationIndicator OBJ_X509,27L + +#define LN_preferredDeliveryMethod "preferredDeliveryMethod" +#define NID_preferredDeliveryMethod 872 +#define OBJ_preferredDeliveryMethod OBJ_X509,28L + +#define LN_presentationAddress "presentationAddress" +#define NID_presentationAddress 873 +#define OBJ_presentationAddress OBJ_X509,29L + +#define LN_supportedApplicationContext "supportedApplicationContext" +#define NID_supportedApplicationContext 874 +#define OBJ_supportedApplicationContext OBJ_X509,30L + +#define SN_member "member" +#define NID_member 875 +#define OBJ_member OBJ_X509,31L + +#define SN_owner "owner" +#define NID_owner 876 +#define OBJ_owner OBJ_X509,32L + +#define LN_roleOccupant "roleOccupant" +#define NID_roleOccupant 877 +#define OBJ_roleOccupant OBJ_X509,33L + +#define SN_seeAlso "seeAlso" +#define NID_seeAlso 878 +#define OBJ_seeAlso OBJ_X509,34L + +#define LN_userPassword "userPassword" +#define NID_userPassword 879 +#define OBJ_userPassword OBJ_X509,35L + +#define LN_userCertificate "userCertificate" +#define NID_userCertificate 880 +#define OBJ_userCertificate OBJ_X509,36L + +#define LN_cACertificate "cACertificate" +#define NID_cACertificate 881 +#define OBJ_cACertificate OBJ_X509,37L + +#define LN_authorityRevocationList "authorityRevocationList" +#define NID_authorityRevocationList 882 +#define OBJ_authorityRevocationList OBJ_X509,38L + +#define LN_certificateRevocationList "certificateRevocationList" +#define NID_certificateRevocationList 883 +#define OBJ_certificateRevocationList OBJ_X509,39L + +#define LN_crossCertificatePair "crossCertificatePair" +#define NID_crossCertificatePair 884 +#define OBJ_crossCertificatePair OBJ_X509,40L + +#define SN_name "name" +#define LN_name "name" +#define NID_name 173 +#define OBJ_name OBJ_X509,41L + +#define SN_givenName "GN" +#define LN_givenName "givenName" +#define NID_givenName 99 +#define OBJ_givenName OBJ_X509,42L + +#define SN_initials "initials" +#define LN_initials "initials" +#define NID_initials 101 +#define OBJ_initials OBJ_X509,43L + +#define LN_generationQualifier "generationQualifier" +#define NID_generationQualifier 509 +#define OBJ_generationQualifier OBJ_X509,44L + +#define LN_x500UniqueIdentifier "x500UniqueIdentifier" +#define NID_x500UniqueIdentifier 503 +#define OBJ_x500UniqueIdentifier OBJ_X509,45L + +#define SN_dnQualifier "dnQualifier" +#define LN_dnQualifier "dnQualifier" +#define NID_dnQualifier 174 +#define OBJ_dnQualifier OBJ_X509,46L + +#define LN_enhancedSearchGuide "enhancedSearchGuide" +#define NID_enhancedSearchGuide 885 +#define OBJ_enhancedSearchGuide OBJ_X509,47L + +#define LN_protocolInformation "protocolInformation" +#define NID_protocolInformation 886 +#define OBJ_protocolInformation OBJ_X509,48L + +#define LN_distinguishedName "distinguishedName" +#define NID_distinguishedName 887 +#define OBJ_distinguishedName OBJ_X509,49L + +#define LN_uniqueMember "uniqueMember" +#define NID_uniqueMember 888 +#define OBJ_uniqueMember OBJ_X509,50L + +#define LN_houseIdentifier "houseIdentifier" +#define NID_houseIdentifier 889 +#define OBJ_houseIdentifier OBJ_X509,51L + +#define LN_supportedAlgorithms "supportedAlgorithms" +#define NID_supportedAlgorithms 890 +#define OBJ_supportedAlgorithms OBJ_X509,52L + +#define LN_deltaRevocationList "deltaRevocationList" +#define NID_deltaRevocationList 891 +#define OBJ_deltaRevocationList OBJ_X509,53L + +#define SN_dmdName "dmdName" +#define NID_dmdName 892 +#define OBJ_dmdName OBJ_X509,54L + +#define LN_pseudonym "pseudonym" +#define NID_pseudonym 510 +#define OBJ_pseudonym OBJ_X509,65L + +#define SN_role "role" +#define LN_role "role" +#define NID_role 400 +#define OBJ_role OBJ_X509,72L + +#define LN_organizationIdentifier "organizationIdentifier" +#define NID_organizationIdentifier 1089 +#define OBJ_organizationIdentifier OBJ_X509,97L + +#define SN_countryCode3c "c3" +#define LN_countryCode3c "countryCode3c" +#define NID_countryCode3c 1090 +#define OBJ_countryCode3c OBJ_X509,98L + +#define SN_countryCode3n "n3" +#define LN_countryCode3n "countryCode3n" +#define NID_countryCode3n 1091 +#define OBJ_countryCode3n OBJ_X509,99L + +#define LN_dnsName "dnsName" +#define NID_dnsName 1092 +#define OBJ_dnsName OBJ_X509,100L + +#define SN_X500algorithms "X500algorithms" +#define LN_X500algorithms "directory services - algorithms" +#define NID_X500algorithms 378 +#define OBJ_X500algorithms OBJ_X500,8L + +#define SN_rsa "RSA" +#define LN_rsa "rsa" +#define NID_rsa 19 +#define OBJ_rsa OBJ_X500algorithms,1L,1L + +#define SN_mdc2WithRSA "RSA-MDC2" +#define LN_mdc2WithRSA "mdc2WithRSA" +#define NID_mdc2WithRSA 96 +#define OBJ_mdc2WithRSA OBJ_X500algorithms,3L,100L + +#define SN_mdc2 "MDC2" +#define LN_mdc2 "mdc2" +#define NID_mdc2 95 +#define OBJ_mdc2 OBJ_X500algorithms,3L,101L + +#define SN_id_ce "id-ce" +#define NID_id_ce 81 +#define OBJ_id_ce OBJ_X500,29L + +#define SN_subject_directory_attributes "subjectDirectoryAttributes" +#define LN_subject_directory_attributes "X509v3 Subject Directory Attributes" +#define NID_subject_directory_attributes 769 +#define OBJ_subject_directory_attributes OBJ_id_ce,9L + +#define SN_subject_key_identifier "subjectKeyIdentifier" +#define LN_subject_key_identifier "X509v3 Subject Key Identifier" +#define NID_subject_key_identifier 82 +#define OBJ_subject_key_identifier OBJ_id_ce,14L + +#define SN_key_usage "keyUsage" +#define LN_key_usage "X509v3 Key Usage" +#define NID_key_usage 83 +#define OBJ_key_usage OBJ_id_ce,15L + +#define SN_private_key_usage_period "privateKeyUsagePeriod" +#define LN_private_key_usage_period "X509v3 Private Key Usage Period" +#define NID_private_key_usage_period 84 +#define OBJ_private_key_usage_period OBJ_id_ce,16L + +#define SN_subject_alt_name "subjectAltName" +#define LN_subject_alt_name "X509v3 Subject Alternative Name" +#define NID_subject_alt_name 85 +#define OBJ_subject_alt_name OBJ_id_ce,17L + +#define SN_issuer_alt_name "issuerAltName" +#define LN_issuer_alt_name "X509v3 Issuer Alternative Name" +#define NID_issuer_alt_name 86 +#define OBJ_issuer_alt_name OBJ_id_ce,18L + +#define SN_basic_constraints "basicConstraints" +#define LN_basic_constraints "X509v3 Basic Constraints" +#define NID_basic_constraints 87 +#define OBJ_basic_constraints OBJ_id_ce,19L + +#define SN_crl_number "crlNumber" +#define LN_crl_number "X509v3 CRL Number" +#define NID_crl_number 88 +#define OBJ_crl_number OBJ_id_ce,20L + +#define SN_crl_reason "CRLReason" +#define LN_crl_reason "X509v3 CRL Reason Code" +#define NID_crl_reason 141 +#define OBJ_crl_reason OBJ_id_ce,21L + +#define SN_invalidity_date "invalidityDate" +#define LN_invalidity_date "Invalidity Date" +#define NID_invalidity_date 142 +#define OBJ_invalidity_date OBJ_id_ce,24L + +#define SN_delta_crl "deltaCRL" +#define LN_delta_crl "X509v3 Delta CRL Indicator" +#define NID_delta_crl 140 +#define OBJ_delta_crl OBJ_id_ce,27L + +#define SN_issuing_distribution_point "issuingDistributionPoint" +#define LN_issuing_distribution_point "X509v3 Issuing Distribution Point" +#define NID_issuing_distribution_point 770 +#define OBJ_issuing_distribution_point OBJ_id_ce,28L + +#define SN_certificate_issuer "certificateIssuer" +#define LN_certificate_issuer "X509v3 Certificate Issuer" +#define NID_certificate_issuer 771 +#define OBJ_certificate_issuer OBJ_id_ce,29L + +#define SN_name_constraints "nameConstraints" +#define LN_name_constraints "X509v3 Name Constraints" +#define NID_name_constraints 666 +#define OBJ_name_constraints OBJ_id_ce,30L + +#define SN_crl_distribution_points "crlDistributionPoints" +#define LN_crl_distribution_points "X509v3 CRL Distribution Points" +#define NID_crl_distribution_points 103 +#define OBJ_crl_distribution_points OBJ_id_ce,31L + +#define SN_certificate_policies "certificatePolicies" +#define LN_certificate_policies "X509v3 Certificate Policies" +#define NID_certificate_policies 89 +#define OBJ_certificate_policies OBJ_id_ce,32L + +#define SN_any_policy "anyPolicy" +#define LN_any_policy "X509v3 Any Policy" +#define NID_any_policy 746 +#define OBJ_any_policy OBJ_certificate_policies,0L + +#define SN_policy_mappings "policyMappings" +#define LN_policy_mappings "X509v3 Policy Mappings" +#define NID_policy_mappings 747 +#define OBJ_policy_mappings OBJ_id_ce,33L + +#define SN_authority_key_identifier "authorityKeyIdentifier" +#define LN_authority_key_identifier "X509v3 Authority Key Identifier" +#define NID_authority_key_identifier 90 +#define OBJ_authority_key_identifier OBJ_id_ce,35L + +#define SN_policy_constraints "policyConstraints" +#define LN_policy_constraints "X509v3 Policy Constraints" +#define NID_policy_constraints 401 +#define OBJ_policy_constraints OBJ_id_ce,36L + +#define SN_ext_key_usage "extendedKeyUsage" +#define LN_ext_key_usage "X509v3 Extended Key Usage" +#define NID_ext_key_usage 126 +#define OBJ_ext_key_usage OBJ_id_ce,37L + +#define SN_freshest_crl "freshestCRL" +#define LN_freshest_crl "X509v3 Freshest CRL" +#define NID_freshest_crl 857 +#define OBJ_freshest_crl OBJ_id_ce,46L + +#define SN_inhibit_any_policy "inhibitAnyPolicy" +#define LN_inhibit_any_policy "X509v3 Inhibit Any Policy" +#define NID_inhibit_any_policy 748 +#define OBJ_inhibit_any_policy OBJ_id_ce,54L + +#define SN_target_information "targetInformation" +#define LN_target_information "X509v3 AC Targeting" +#define NID_target_information 402 +#define OBJ_target_information OBJ_id_ce,55L + +#define SN_no_rev_avail "noRevAvail" +#define LN_no_rev_avail "X509v3 No Revocation Available" +#define NID_no_rev_avail 403 +#define OBJ_no_rev_avail OBJ_id_ce,56L + +#define SN_anyExtendedKeyUsage "anyExtendedKeyUsage" +#define LN_anyExtendedKeyUsage "Any Extended Key Usage" +#define NID_anyExtendedKeyUsage 910 +#define OBJ_anyExtendedKeyUsage OBJ_ext_key_usage,0L + +#define SN_netscape "Netscape" +#define LN_netscape "Netscape Communications Corp." +#define NID_netscape 57 +#define OBJ_netscape 2L,16L,840L,1L,113730L + +#define SN_netscape_cert_extension "nsCertExt" +#define LN_netscape_cert_extension "Netscape Certificate Extension" +#define NID_netscape_cert_extension 58 +#define OBJ_netscape_cert_extension OBJ_netscape,1L + +#define SN_netscape_data_type "nsDataType" +#define LN_netscape_data_type "Netscape Data Type" +#define NID_netscape_data_type 59 +#define OBJ_netscape_data_type OBJ_netscape,2L + +#define SN_netscape_cert_type "nsCertType" +#define LN_netscape_cert_type "Netscape Cert Type" +#define NID_netscape_cert_type 71 +#define OBJ_netscape_cert_type OBJ_netscape_cert_extension,1L + +#define SN_netscape_base_url "nsBaseUrl" +#define LN_netscape_base_url "Netscape Base Url" +#define NID_netscape_base_url 72 +#define OBJ_netscape_base_url OBJ_netscape_cert_extension,2L + +#define SN_netscape_revocation_url "nsRevocationUrl" +#define LN_netscape_revocation_url "Netscape Revocation Url" +#define NID_netscape_revocation_url 73 +#define OBJ_netscape_revocation_url OBJ_netscape_cert_extension,3L + +#define SN_netscape_ca_revocation_url "nsCaRevocationUrl" +#define LN_netscape_ca_revocation_url "Netscape CA Revocation Url" +#define NID_netscape_ca_revocation_url 74 +#define OBJ_netscape_ca_revocation_url OBJ_netscape_cert_extension,4L + +#define SN_netscape_renewal_url "nsRenewalUrl" +#define LN_netscape_renewal_url "Netscape Renewal Url" +#define NID_netscape_renewal_url 75 +#define OBJ_netscape_renewal_url OBJ_netscape_cert_extension,7L + +#define SN_netscape_ca_policy_url "nsCaPolicyUrl" +#define LN_netscape_ca_policy_url "Netscape CA Policy Url" +#define NID_netscape_ca_policy_url 76 +#define OBJ_netscape_ca_policy_url OBJ_netscape_cert_extension,8L + +#define SN_netscape_ssl_server_name "nsSslServerName" +#define LN_netscape_ssl_server_name "Netscape SSL Server Name" +#define NID_netscape_ssl_server_name 77 +#define OBJ_netscape_ssl_server_name OBJ_netscape_cert_extension,12L + +#define SN_netscape_comment "nsComment" +#define LN_netscape_comment "Netscape Comment" +#define NID_netscape_comment 78 +#define OBJ_netscape_comment OBJ_netscape_cert_extension,13L + +#define SN_netscape_cert_sequence "nsCertSequence" +#define LN_netscape_cert_sequence "Netscape Certificate Sequence" +#define NID_netscape_cert_sequence 79 +#define OBJ_netscape_cert_sequence OBJ_netscape_data_type,5L + +#define SN_ns_sgc "nsSGC" +#define LN_ns_sgc "Netscape Server Gated Crypto" +#define NID_ns_sgc 139 +#define OBJ_ns_sgc OBJ_netscape,4L,1L + +#define SN_org "ORG" +#define LN_org "org" +#define NID_org 379 +#define OBJ_org OBJ_iso,3L + +#define SN_dod "DOD" +#define LN_dod "dod" +#define NID_dod 380 +#define OBJ_dod OBJ_org,6L + +#define SN_iana "IANA" +#define LN_iana "iana" +#define NID_iana 381 +#define OBJ_iana OBJ_dod,1L + +#define OBJ_internet OBJ_iana + +#define SN_Directory "directory" +#define LN_Directory "Directory" +#define NID_Directory 382 +#define OBJ_Directory OBJ_internet,1L + +#define SN_Management "mgmt" +#define LN_Management "Management" +#define NID_Management 383 +#define OBJ_Management OBJ_internet,2L + +#define SN_Experimental "experimental" +#define LN_Experimental "Experimental" +#define NID_Experimental 384 +#define OBJ_Experimental OBJ_internet,3L + +#define SN_Private "private" +#define LN_Private "Private" +#define NID_Private 385 +#define OBJ_Private OBJ_internet,4L + +#define SN_Security "security" +#define LN_Security "Security" +#define NID_Security 386 +#define OBJ_Security OBJ_internet,5L + +#define SN_SNMPv2 "snmpv2" +#define LN_SNMPv2 "SNMPv2" +#define NID_SNMPv2 387 +#define OBJ_SNMPv2 OBJ_internet,6L + +#define LN_Mail "Mail" +#define NID_Mail 388 +#define OBJ_Mail OBJ_internet,7L + +#define SN_Enterprises "enterprises" +#define LN_Enterprises "Enterprises" +#define NID_Enterprises 389 +#define OBJ_Enterprises OBJ_Private,1L + +#define SN_dcObject "dcobject" +#define LN_dcObject "dcObject" +#define NID_dcObject 390 +#define OBJ_dcObject OBJ_Enterprises,1466L,344L + +#define SN_mime_mhs "mime-mhs" +#define LN_mime_mhs "MIME MHS" +#define NID_mime_mhs 504 +#define OBJ_mime_mhs OBJ_Mail,1L + +#define SN_mime_mhs_headings "mime-mhs-headings" +#define LN_mime_mhs_headings "mime-mhs-headings" +#define NID_mime_mhs_headings 505 +#define OBJ_mime_mhs_headings OBJ_mime_mhs,1L + +#define SN_mime_mhs_bodies "mime-mhs-bodies" +#define LN_mime_mhs_bodies "mime-mhs-bodies" +#define NID_mime_mhs_bodies 506 +#define OBJ_mime_mhs_bodies OBJ_mime_mhs,2L + +#define SN_id_hex_partial_message "id-hex-partial-message" +#define LN_id_hex_partial_message "id-hex-partial-message" +#define NID_id_hex_partial_message 507 +#define OBJ_id_hex_partial_message OBJ_mime_mhs_headings,1L + +#define SN_id_hex_multipart_message "id-hex-multipart-message" +#define LN_id_hex_multipart_message "id-hex-multipart-message" +#define NID_id_hex_multipart_message 508 +#define OBJ_id_hex_multipart_message OBJ_mime_mhs_headings,2L + +#define SN_zlib_compression "ZLIB" +#define LN_zlib_compression "zlib compression" +#define NID_zlib_compression 125 +#define OBJ_zlib_compression OBJ_id_smime_alg,8L + +#define OBJ_csor 2L,16L,840L,1L,101L,3L + +#define OBJ_nistAlgorithms OBJ_csor,4L + +#define OBJ_aes OBJ_nistAlgorithms,1L + +#define SN_aes_128_ecb "AES-128-ECB" +#define LN_aes_128_ecb "aes-128-ecb" +#define NID_aes_128_ecb 418 +#define OBJ_aes_128_ecb OBJ_aes,1L + +#define SN_aes_128_cbc "AES-128-CBC" +#define LN_aes_128_cbc "aes-128-cbc" +#define NID_aes_128_cbc 419 +#define OBJ_aes_128_cbc OBJ_aes,2L + +#define SN_aes_128_ofb128 "AES-128-OFB" +#define LN_aes_128_ofb128 "aes-128-ofb" +#define NID_aes_128_ofb128 420 +#define OBJ_aes_128_ofb128 OBJ_aes,3L + +#define SN_aes_128_cfb128 "AES-128-CFB" +#define LN_aes_128_cfb128 "aes-128-cfb" +#define NID_aes_128_cfb128 421 +#define OBJ_aes_128_cfb128 OBJ_aes,4L + +#define SN_id_aes128_wrap "id-aes128-wrap" +#define NID_id_aes128_wrap 788 +#define OBJ_id_aes128_wrap OBJ_aes,5L + +#define SN_aes_128_gcm "id-aes128-GCM" +#define LN_aes_128_gcm "aes-128-gcm" +#define NID_aes_128_gcm 895 +#define OBJ_aes_128_gcm OBJ_aes,6L + +#define SN_aes_128_ccm "id-aes128-CCM" +#define LN_aes_128_ccm "aes-128-ccm" +#define NID_aes_128_ccm 896 +#define OBJ_aes_128_ccm OBJ_aes,7L + +#define SN_id_aes128_wrap_pad "id-aes128-wrap-pad" +#define NID_id_aes128_wrap_pad 897 +#define OBJ_id_aes128_wrap_pad OBJ_aes,8L + +#define SN_aes_192_ecb "AES-192-ECB" +#define LN_aes_192_ecb "aes-192-ecb" +#define NID_aes_192_ecb 422 +#define OBJ_aes_192_ecb OBJ_aes,21L + +#define SN_aes_192_cbc "AES-192-CBC" +#define LN_aes_192_cbc "aes-192-cbc" +#define NID_aes_192_cbc 423 +#define OBJ_aes_192_cbc OBJ_aes,22L + +#define SN_aes_192_ofb128 "AES-192-OFB" +#define LN_aes_192_ofb128 "aes-192-ofb" +#define NID_aes_192_ofb128 424 +#define OBJ_aes_192_ofb128 OBJ_aes,23L + +#define SN_aes_192_cfb128 "AES-192-CFB" +#define LN_aes_192_cfb128 "aes-192-cfb" +#define NID_aes_192_cfb128 425 +#define OBJ_aes_192_cfb128 OBJ_aes,24L + +#define SN_id_aes192_wrap "id-aes192-wrap" +#define NID_id_aes192_wrap 789 +#define OBJ_id_aes192_wrap OBJ_aes,25L + +#define SN_aes_192_gcm "id-aes192-GCM" +#define LN_aes_192_gcm "aes-192-gcm" +#define NID_aes_192_gcm 898 +#define OBJ_aes_192_gcm OBJ_aes,26L + +#define SN_aes_192_ccm "id-aes192-CCM" +#define LN_aes_192_ccm "aes-192-ccm" +#define NID_aes_192_ccm 899 +#define OBJ_aes_192_ccm OBJ_aes,27L + +#define SN_id_aes192_wrap_pad "id-aes192-wrap-pad" +#define NID_id_aes192_wrap_pad 900 +#define OBJ_id_aes192_wrap_pad OBJ_aes,28L + +#define SN_aes_256_ecb "AES-256-ECB" +#define LN_aes_256_ecb "aes-256-ecb" +#define NID_aes_256_ecb 426 +#define OBJ_aes_256_ecb OBJ_aes,41L + +#define SN_aes_256_cbc "AES-256-CBC" +#define LN_aes_256_cbc "aes-256-cbc" +#define NID_aes_256_cbc 427 +#define OBJ_aes_256_cbc OBJ_aes,42L + +#define SN_aes_256_ofb128 "AES-256-OFB" +#define LN_aes_256_ofb128 "aes-256-ofb" +#define NID_aes_256_ofb128 428 +#define OBJ_aes_256_ofb128 OBJ_aes,43L + +#define SN_aes_256_cfb128 "AES-256-CFB" +#define LN_aes_256_cfb128 "aes-256-cfb" +#define NID_aes_256_cfb128 429 +#define OBJ_aes_256_cfb128 OBJ_aes,44L + +#define SN_id_aes256_wrap "id-aes256-wrap" +#define NID_id_aes256_wrap 790 +#define OBJ_id_aes256_wrap OBJ_aes,45L + +#define SN_aes_256_gcm "id-aes256-GCM" +#define LN_aes_256_gcm "aes-256-gcm" +#define NID_aes_256_gcm 901 +#define OBJ_aes_256_gcm OBJ_aes,46L + +#define SN_aes_256_ccm "id-aes256-CCM" +#define LN_aes_256_ccm "aes-256-ccm" +#define NID_aes_256_ccm 902 +#define OBJ_aes_256_ccm OBJ_aes,47L + +#define SN_id_aes256_wrap_pad "id-aes256-wrap-pad" +#define NID_id_aes256_wrap_pad 903 +#define OBJ_id_aes256_wrap_pad OBJ_aes,48L + +#define SN_aes_128_xts "AES-128-XTS" +#define LN_aes_128_xts "aes-128-xts" +#define NID_aes_128_xts 913 +#define OBJ_aes_128_xts OBJ_ieee_siswg,0L,1L,1L + +#define SN_aes_256_xts "AES-256-XTS" +#define LN_aes_256_xts "aes-256-xts" +#define NID_aes_256_xts 914 +#define OBJ_aes_256_xts OBJ_ieee_siswg,0L,1L,2L + +#define SN_aes_128_cfb1 "AES-128-CFB1" +#define LN_aes_128_cfb1 "aes-128-cfb1" +#define NID_aes_128_cfb1 650 + +#define SN_aes_192_cfb1 "AES-192-CFB1" +#define LN_aes_192_cfb1 "aes-192-cfb1" +#define NID_aes_192_cfb1 651 + +#define SN_aes_256_cfb1 "AES-256-CFB1" +#define LN_aes_256_cfb1 "aes-256-cfb1" +#define NID_aes_256_cfb1 652 + +#define SN_aes_128_cfb8 "AES-128-CFB8" +#define LN_aes_128_cfb8 "aes-128-cfb8" +#define NID_aes_128_cfb8 653 + +#define SN_aes_192_cfb8 "AES-192-CFB8" +#define LN_aes_192_cfb8 "aes-192-cfb8" +#define NID_aes_192_cfb8 654 + +#define SN_aes_256_cfb8 "AES-256-CFB8" +#define LN_aes_256_cfb8 "aes-256-cfb8" +#define NID_aes_256_cfb8 655 + +#define SN_aes_128_ctr "AES-128-CTR" +#define LN_aes_128_ctr "aes-128-ctr" +#define NID_aes_128_ctr 904 + +#define SN_aes_192_ctr "AES-192-CTR" +#define LN_aes_192_ctr "aes-192-ctr" +#define NID_aes_192_ctr 905 + +#define SN_aes_256_ctr "AES-256-CTR" +#define LN_aes_256_ctr "aes-256-ctr" +#define NID_aes_256_ctr 906 + +#define SN_aes_128_ocb "AES-128-OCB" +#define LN_aes_128_ocb "aes-128-ocb" +#define NID_aes_128_ocb 958 + +#define SN_aes_192_ocb "AES-192-OCB" +#define LN_aes_192_ocb "aes-192-ocb" +#define NID_aes_192_ocb 959 + +#define SN_aes_256_ocb "AES-256-OCB" +#define LN_aes_256_ocb "aes-256-ocb" +#define NID_aes_256_ocb 960 + +#define SN_des_cfb1 "DES-CFB1" +#define LN_des_cfb1 "des-cfb1" +#define NID_des_cfb1 656 + +#define SN_des_cfb8 "DES-CFB8" +#define LN_des_cfb8 "des-cfb8" +#define NID_des_cfb8 657 + +#define SN_des_ede3_cfb1 "DES-EDE3-CFB1" +#define LN_des_ede3_cfb1 "des-ede3-cfb1" +#define NID_des_ede3_cfb1 658 + +#define SN_des_ede3_cfb8 "DES-EDE3-CFB8" +#define LN_des_ede3_cfb8 "des-ede3-cfb8" +#define NID_des_ede3_cfb8 659 + +#define OBJ_nist_hashalgs OBJ_nistAlgorithms,2L + +#define SN_sha256 "SHA256" +#define LN_sha256 "sha256" +#define NID_sha256 672 +#define OBJ_sha256 OBJ_nist_hashalgs,1L + +#define SN_sha384 "SHA384" +#define LN_sha384 "sha384" +#define NID_sha384 673 +#define OBJ_sha384 OBJ_nist_hashalgs,2L + +#define SN_sha512 "SHA512" +#define LN_sha512 "sha512" +#define NID_sha512 674 +#define OBJ_sha512 OBJ_nist_hashalgs,3L + +#define SN_sha224 "SHA224" +#define LN_sha224 "sha224" +#define NID_sha224 675 +#define OBJ_sha224 OBJ_nist_hashalgs,4L + +#define SN_sha512_224 "SHA512-224" +#define LN_sha512_224 "sha512-224" +#define NID_sha512_224 1094 +#define OBJ_sha512_224 OBJ_nist_hashalgs,5L + +#define SN_sha512_256 "SHA512-256" +#define LN_sha512_256 "sha512-256" +#define NID_sha512_256 1095 +#define OBJ_sha512_256 OBJ_nist_hashalgs,6L + +#define SN_sha3_224 "SHA3-224" +#define LN_sha3_224 "sha3-224" +#define NID_sha3_224 1096 +#define OBJ_sha3_224 OBJ_nist_hashalgs,7L + +#define SN_sha3_256 "SHA3-256" +#define LN_sha3_256 "sha3-256" +#define NID_sha3_256 1097 +#define OBJ_sha3_256 OBJ_nist_hashalgs,8L + +#define SN_sha3_384 "SHA3-384" +#define LN_sha3_384 "sha3-384" +#define NID_sha3_384 1098 +#define OBJ_sha3_384 OBJ_nist_hashalgs,9L + +#define SN_sha3_512 "SHA3-512" +#define LN_sha3_512 "sha3-512" +#define NID_sha3_512 1099 +#define OBJ_sha3_512 OBJ_nist_hashalgs,10L + +#define SN_shake128 "SHAKE128" +#define LN_shake128 "shake128" +#define NID_shake128 1100 +#define OBJ_shake128 OBJ_nist_hashalgs,11L + +#define SN_shake256 "SHAKE256" +#define LN_shake256 "shake256" +#define NID_shake256 1101 +#define OBJ_shake256 OBJ_nist_hashalgs,12L + +#define SN_hmac_sha3_224 "id-hmacWithSHA3-224" +#define LN_hmac_sha3_224 "hmac-sha3-224" +#define NID_hmac_sha3_224 1102 +#define OBJ_hmac_sha3_224 OBJ_nist_hashalgs,13L + +#define SN_hmac_sha3_256 "id-hmacWithSHA3-256" +#define LN_hmac_sha3_256 "hmac-sha3-256" +#define NID_hmac_sha3_256 1103 +#define OBJ_hmac_sha3_256 OBJ_nist_hashalgs,14L + +#define SN_hmac_sha3_384 "id-hmacWithSHA3-384" +#define LN_hmac_sha3_384 "hmac-sha3-384" +#define NID_hmac_sha3_384 1104 +#define OBJ_hmac_sha3_384 OBJ_nist_hashalgs,15L + +#define SN_hmac_sha3_512 "id-hmacWithSHA3-512" +#define LN_hmac_sha3_512 "hmac-sha3-512" +#define NID_hmac_sha3_512 1105 +#define OBJ_hmac_sha3_512 OBJ_nist_hashalgs,16L + +#define OBJ_dsa_with_sha2 OBJ_nistAlgorithms,3L + +#define SN_dsa_with_SHA224 "dsa_with_SHA224" +#define NID_dsa_with_SHA224 802 +#define OBJ_dsa_with_SHA224 OBJ_dsa_with_sha2,1L + +#define SN_dsa_with_SHA256 "dsa_with_SHA256" +#define NID_dsa_with_SHA256 803 +#define OBJ_dsa_with_SHA256 OBJ_dsa_with_sha2,2L + +#define OBJ_sigAlgs OBJ_nistAlgorithms,3L + +#define SN_dsa_with_SHA384 "id-dsa-with-sha384" +#define LN_dsa_with_SHA384 "dsa_with_SHA384" +#define NID_dsa_with_SHA384 1106 +#define OBJ_dsa_with_SHA384 OBJ_sigAlgs,3L + +#define SN_dsa_with_SHA512 "id-dsa-with-sha512" +#define LN_dsa_with_SHA512 "dsa_with_SHA512" +#define NID_dsa_with_SHA512 1107 +#define OBJ_dsa_with_SHA512 OBJ_sigAlgs,4L + +#define SN_dsa_with_SHA3_224 "id-dsa-with-sha3-224" +#define LN_dsa_with_SHA3_224 "dsa_with_SHA3-224" +#define NID_dsa_with_SHA3_224 1108 +#define OBJ_dsa_with_SHA3_224 OBJ_sigAlgs,5L + +#define SN_dsa_with_SHA3_256 "id-dsa-with-sha3-256" +#define LN_dsa_with_SHA3_256 "dsa_with_SHA3-256" +#define NID_dsa_with_SHA3_256 1109 +#define OBJ_dsa_with_SHA3_256 OBJ_sigAlgs,6L + +#define SN_dsa_with_SHA3_384 "id-dsa-with-sha3-384" +#define LN_dsa_with_SHA3_384 "dsa_with_SHA3-384" +#define NID_dsa_with_SHA3_384 1110 +#define OBJ_dsa_with_SHA3_384 OBJ_sigAlgs,7L + +#define SN_dsa_with_SHA3_512 "id-dsa-with-sha3-512" +#define LN_dsa_with_SHA3_512 "dsa_with_SHA3-512" +#define NID_dsa_with_SHA3_512 1111 +#define OBJ_dsa_with_SHA3_512 OBJ_sigAlgs,8L + +#define SN_ecdsa_with_SHA3_224 "id-ecdsa-with-sha3-224" +#define LN_ecdsa_with_SHA3_224 "ecdsa_with_SHA3-224" +#define NID_ecdsa_with_SHA3_224 1112 +#define OBJ_ecdsa_with_SHA3_224 OBJ_sigAlgs,9L + +#define SN_ecdsa_with_SHA3_256 "id-ecdsa-with-sha3-256" +#define LN_ecdsa_with_SHA3_256 "ecdsa_with_SHA3-256" +#define NID_ecdsa_with_SHA3_256 1113 +#define OBJ_ecdsa_with_SHA3_256 OBJ_sigAlgs,10L + +#define SN_ecdsa_with_SHA3_384 "id-ecdsa-with-sha3-384" +#define LN_ecdsa_with_SHA3_384 "ecdsa_with_SHA3-384" +#define NID_ecdsa_with_SHA3_384 1114 +#define OBJ_ecdsa_with_SHA3_384 OBJ_sigAlgs,11L + +#define SN_ecdsa_with_SHA3_512 "id-ecdsa-with-sha3-512" +#define LN_ecdsa_with_SHA3_512 "ecdsa_with_SHA3-512" +#define NID_ecdsa_with_SHA3_512 1115 +#define OBJ_ecdsa_with_SHA3_512 OBJ_sigAlgs,12L + +#define SN_RSA_SHA3_224 "id-rsassa-pkcs1-v1_5-with-sha3-224" +#define LN_RSA_SHA3_224 "RSA-SHA3-224" +#define NID_RSA_SHA3_224 1116 +#define OBJ_RSA_SHA3_224 OBJ_sigAlgs,13L + +#define SN_RSA_SHA3_256 "id-rsassa-pkcs1-v1_5-with-sha3-256" +#define LN_RSA_SHA3_256 "RSA-SHA3-256" +#define NID_RSA_SHA3_256 1117 +#define OBJ_RSA_SHA3_256 OBJ_sigAlgs,14L + +#define SN_RSA_SHA3_384 "id-rsassa-pkcs1-v1_5-with-sha3-384" +#define LN_RSA_SHA3_384 "RSA-SHA3-384" +#define NID_RSA_SHA3_384 1118 +#define OBJ_RSA_SHA3_384 OBJ_sigAlgs,15L + +#define SN_RSA_SHA3_512 "id-rsassa-pkcs1-v1_5-with-sha3-512" +#define LN_RSA_SHA3_512 "RSA-SHA3-512" +#define NID_RSA_SHA3_512 1119 +#define OBJ_RSA_SHA3_512 OBJ_sigAlgs,16L + +#define SN_hold_instruction_code "holdInstructionCode" +#define LN_hold_instruction_code "Hold Instruction Code" +#define NID_hold_instruction_code 430 +#define OBJ_hold_instruction_code OBJ_id_ce,23L + +#define OBJ_holdInstruction OBJ_X9_57,2L + +#define SN_hold_instruction_none "holdInstructionNone" +#define LN_hold_instruction_none "Hold Instruction None" +#define NID_hold_instruction_none 431 +#define OBJ_hold_instruction_none OBJ_holdInstruction,1L + +#define SN_hold_instruction_call_issuer "holdInstructionCallIssuer" +#define LN_hold_instruction_call_issuer "Hold Instruction Call Issuer" +#define NID_hold_instruction_call_issuer 432 +#define OBJ_hold_instruction_call_issuer OBJ_holdInstruction,2L + +#define SN_hold_instruction_reject "holdInstructionReject" +#define LN_hold_instruction_reject "Hold Instruction Reject" +#define NID_hold_instruction_reject 433 +#define OBJ_hold_instruction_reject OBJ_holdInstruction,3L + +#define SN_data "data" +#define NID_data 434 +#define OBJ_data OBJ_itu_t,9L + +#define SN_pss "pss" +#define NID_pss 435 +#define OBJ_pss OBJ_data,2342L + +#define SN_ucl "ucl" +#define NID_ucl 436 +#define OBJ_ucl OBJ_pss,19200300L + +#define SN_pilot "pilot" +#define NID_pilot 437 +#define OBJ_pilot OBJ_ucl,100L + +#define LN_pilotAttributeType "pilotAttributeType" +#define NID_pilotAttributeType 438 +#define OBJ_pilotAttributeType OBJ_pilot,1L + +#define LN_pilotAttributeSyntax "pilotAttributeSyntax" +#define NID_pilotAttributeSyntax 439 +#define OBJ_pilotAttributeSyntax OBJ_pilot,3L + +#define LN_pilotObjectClass "pilotObjectClass" +#define NID_pilotObjectClass 440 +#define OBJ_pilotObjectClass OBJ_pilot,4L + +#define LN_pilotGroups "pilotGroups" +#define NID_pilotGroups 441 +#define OBJ_pilotGroups OBJ_pilot,10L + +#define LN_iA5StringSyntax "iA5StringSyntax" +#define NID_iA5StringSyntax 442 +#define OBJ_iA5StringSyntax OBJ_pilotAttributeSyntax,4L + +#define LN_caseIgnoreIA5StringSyntax "caseIgnoreIA5StringSyntax" +#define NID_caseIgnoreIA5StringSyntax 443 +#define OBJ_caseIgnoreIA5StringSyntax OBJ_pilotAttributeSyntax,5L + +#define LN_pilotObject "pilotObject" +#define NID_pilotObject 444 +#define OBJ_pilotObject OBJ_pilotObjectClass,3L + +#define LN_pilotPerson "pilotPerson" +#define NID_pilotPerson 445 +#define OBJ_pilotPerson OBJ_pilotObjectClass,4L + +#define SN_account "account" +#define NID_account 446 +#define OBJ_account OBJ_pilotObjectClass,5L + +#define SN_document "document" +#define NID_document 447 +#define OBJ_document OBJ_pilotObjectClass,6L + +#define SN_room "room" +#define NID_room 448 +#define OBJ_room OBJ_pilotObjectClass,7L + +#define LN_documentSeries "documentSeries" +#define NID_documentSeries 449 +#define OBJ_documentSeries OBJ_pilotObjectClass,9L + +#define SN_Domain "domain" +#define LN_Domain "Domain" +#define NID_Domain 392 +#define OBJ_Domain OBJ_pilotObjectClass,13L + +#define LN_rFC822localPart "rFC822localPart" +#define NID_rFC822localPart 450 +#define OBJ_rFC822localPart OBJ_pilotObjectClass,14L + +#define LN_dNSDomain "dNSDomain" +#define NID_dNSDomain 451 +#define OBJ_dNSDomain OBJ_pilotObjectClass,15L + +#define LN_domainRelatedObject "domainRelatedObject" +#define NID_domainRelatedObject 452 +#define OBJ_domainRelatedObject OBJ_pilotObjectClass,17L + +#define LN_friendlyCountry "friendlyCountry" +#define NID_friendlyCountry 453 +#define OBJ_friendlyCountry OBJ_pilotObjectClass,18L + +#define LN_simpleSecurityObject "simpleSecurityObject" +#define NID_simpleSecurityObject 454 +#define OBJ_simpleSecurityObject OBJ_pilotObjectClass,19L + +#define LN_pilotOrganization "pilotOrganization" +#define NID_pilotOrganization 455 +#define OBJ_pilotOrganization OBJ_pilotObjectClass,20L + +#define LN_pilotDSA "pilotDSA" +#define NID_pilotDSA 456 +#define OBJ_pilotDSA OBJ_pilotObjectClass,21L + +#define LN_qualityLabelledData "qualityLabelledData" +#define NID_qualityLabelledData 457 +#define OBJ_qualityLabelledData OBJ_pilotObjectClass,22L + +#define SN_userId "UID" +#define LN_userId "userId" +#define NID_userId 458 +#define OBJ_userId OBJ_pilotAttributeType,1L + +#define LN_textEncodedORAddress "textEncodedORAddress" +#define NID_textEncodedORAddress 459 +#define OBJ_textEncodedORAddress OBJ_pilotAttributeType,2L + +#define SN_rfc822Mailbox "mail" +#define LN_rfc822Mailbox "rfc822Mailbox" +#define NID_rfc822Mailbox 460 +#define OBJ_rfc822Mailbox OBJ_pilotAttributeType,3L + +#define SN_info "info" +#define NID_info 461 +#define OBJ_info OBJ_pilotAttributeType,4L + +#define LN_favouriteDrink "favouriteDrink" +#define NID_favouriteDrink 462 +#define OBJ_favouriteDrink OBJ_pilotAttributeType,5L + +#define LN_roomNumber "roomNumber" +#define NID_roomNumber 463 +#define OBJ_roomNumber OBJ_pilotAttributeType,6L + +#define SN_photo "photo" +#define NID_photo 464 +#define OBJ_photo OBJ_pilotAttributeType,7L + +#define LN_userClass "userClass" +#define NID_userClass 465 +#define OBJ_userClass OBJ_pilotAttributeType,8L + +#define SN_host "host" +#define NID_host 466 +#define OBJ_host OBJ_pilotAttributeType,9L + +#define SN_manager "manager" +#define NID_manager 467 +#define OBJ_manager OBJ_pilotAttributeType,10L + +#define LN_documentIdentifier "documentIdentifier" +#define NID_documentIdentifier 468 +#define OBJ_documentIdentifier OBJ_pilotAttributeType,11L + +#define LN_documentTitle "documentTitle" +#define NID_documentTitle 469 +#define OBJ_documentTitle OBJ_pilotAttributeType,12L + +#define LN_documentVersion "documentVersion" +#define NID_documentVersion 470 +#define OBJ_documentVersion OBJ_pilotAttributeType,13L + +#define LN_documentAuthor "documentAuthor" +#define NID_documentAuthor 471 +#define OBJ_documentAuthor OBJ_pilotAttributeType,14L + +#define LN_documentLocation "documentLocation" +#define NID_documentLocation 472 +#define OBJ_documentLocation OBJ_pilotAttributeType,15L + +#define LN_homeTelephoneNumber "homeTelephoneNumber" +#define NID_homeTelephoneNumber 473 +#define OBJ_homeTelephoneNumber OBJ_pilotAttributeType,20L + +#define SN_secretary "secretary" +#define NID_secretary 474 +#define OBJ_secretary OBJ_pilotAttributeType,21L + +#define LN_otherMailbox "otherMailbox" +#define NID_otherMailbox 475 +#define OBJ_otherMailbox OBJ_pilotAttributeType,22L + +#define LN_lastModifiedTime "lastModifiedTime" +#define NID_lastModifiedTime 476 +#define OBJ_lastModifiedTime OBJ_pilotAttributeType,23L + +#define LN_lastModifiedBy "lastModifiedBy" +#define NID_lastModifiedBy 477 +#define OBJ_lastModifiedBy OBJ_pilotAttributeType,24L + +#define SN_domainComponent "DC" +#define LN_domainComponent "domainComponent" +#define NID_domainComponent 391 +#define OBJ_domainComponent OBJ_pilotAttributeType,25L + +#define LN_aRecord "aRecord" +#define NID_aRecord 478 +#define OBJ_aRecord OBJ_pilotAttributeType,26L + +#define LN_pilotAttributeType27 "pilotAttributeType27" +#define NID_pilotAttributeType27 479 +#define OBJ_pilotAttributeType27 OBJ_pilotAttributeType,27L + +#define LN_mXRecord "mXRecord" +#define NID_mXRecord 480 +#define OBJ_mXRecord OBJ_pilotAttributeType,28L + +#define LN_nSRecord "nSRecord" +#define NID_nSRecord 481 +#define OBJ_nSRecord OBJ_pilotAttributeType,29L + +#define LN_sOARecord "sOARecord" +#define NID_sOARecord 482 +#define OBJ_sOARecord OBJ_pilotAttributeType,30L + +#define LN_cNAMERecord "cNAMERecord" +#define NID_cNAMERecord 483 +#define OBJ_cNAMERecord OBJ_pilotAttributeType,31L + +#define LN_associatedDomain "associatedDomain" +#define NID_associatedDomain 484 +#define OBJ_associatedDomain OBJ_pilotAttributeType,37L + +#define LN_associatedName "associatedName" +#define NID_associatedName 485 +#define OBJ_associatedName OBJ_pilotAttributeType,38L + +#define LN_homePostalAddress "homePostalAddress" +#define NID_homePostalAddress 486 +#define OBJ_homePostalAddress OBJ_pilotAttributeType,39L + +#define LN_personalTitle "personalTitle" +#define NID_personalTitle 487 +#define OBJ_personalTitle OBJ_pilotAttributeType,40L + +#define LN_mobileTelephoneNumber "mobileTelephoneNumber" +#define NID_mobileTelephoneNumber 488 +#define OBJ_mobileTelephoneNumber OBJ_pilotAttributeType,41L + +#define LN_pagerTelephoneNumber "pagerTelephoneNumber" +#define NID_pagerTelephoneNumber 489 +#define OBJ_pagerTelephoneNumber OBJ_pilotAttributeType,42L + +#define LN_friendlyCountryName "friendlyCountryName" +#define NID_friendlyCountryName 490 +#define OBJ_friendlyCountryName OBJ_pilotAttributeType,43L + +#define SN_uniqueIdentifier "uid" +#define LN_uniqueIdentifier "uniqueIdentifier" +#define NID_uniqueIdentifier 102 +#define OBJ_uniqueIdentifier OBJ_pilotAttributeType,44L + +#define LN_organizationalStatus "organizationalStatus" +#define NID_organizationalStatus 491 +#define OBJ_organizationalStatus OBJ_pilotAttributeType,45L + +#define LN_janetMailbox "janetMailbox" +#define NID_janetMailbox 492 +#define OBJ_janetMailbox OBJ_pilotAttributeType,46L + +#define LN_mailPreferenceOption "mailPreferenceOption" +#define NID_mailPreferenceOption 493 +#define OBJ_mailPreferenceOption OBJ_pilotAttributeType,47L + +#define LN_buildingName "buildingName" +#define NID_buildingName 494 +#define OBJ_buildingName OBJ_pilotAttributeType,48L + +#define LN_dSAQuality "dSAQuality" +#define NID_dSAQuality 495 +#define OBJ_dSAQuality OBJ_pilotAttributeType,49L + +#define LN_singleLevelQuality "singleLevelQuality" +#define NID_singleLevelQuality 496 +#define OBJ_singleLevelQuality OBJ_pilotAttributeType,50L + +#define LN_subtreeMinimumQuality "subtreeMinimumQuality" +#define NID_subtreeMinimumQuality 497 +#define OBJ_subtreeMinimumQuality OBJ_pilotAttributeType,51L + +#define LN_subtreeMaximumQuality "subtreeMaximumQuality" +#define NID_subtreeMaximumQuality 498 +#define OBJ_subtreeMaximumQuality OBJ_pilotAttributeType,52L + +#define LN_personalSignature "personalSignature" +#define NID_personalSignature 499 +#define OBJ_personalSignature OBJ_pilotAttributeType,53L + +#define LN_dITRedirect "dITRedirect" +#define NID_dITRedirect 500 +#define OBJ_dITRedirect OBJ_pilotAttributeType,54L + +#define SN_audio "audio" +#define NID_audio 501 +#define OBJ_audio OBJ_pilotAttributeType,55L + +#define LN_documentPublisher "documentPublisher" +#define NID_documentPublisher 502 +#define OBJ_documentPublisher OBJ_pilotAttributeType,56L + +#define SN_id_set "id-set" +#define LN_id_set "Secure Electronic Transactions" +#define NID_id_set 512 +#define OBJ_id_set OBJ_international_organizations,42L + +#define SN_set_ctype "set-ctype" +#define LN_set_ctype "content types" +#define NID_set_ctype 513 +#define OBJ_set_ctype OBJ_id_set,0L + +#define SN_set_msgExt "set-msgExt" +#define LN_set_msgExt "message extensions" +#define NID_set_msgExt 514 +#define OBJ_set_msgExt OBJ_id_set,1L + +#define SN_set_attr "set-attr" +#define NID_set_attr 515 +#define OBJ_set_attr OBJ_id_set,3L + +#define SN_set_policy "set-policy" +#define NID_set_policy 516 +#define OBJ_set_policy OBJ_id_set,5L + +#define SN_set_certExt "set-certExt" +#define LN_set_certExt "certificate extensions" +#define NID_set_certExt 517 +#define OBJ_set_certExt OBJ_id_set,7L + +#define SN_set_brand "set-brand" +#define NID_set_brand 518 +#define OBJ_set_brand OBJ_id_set,8L + +#define SN_setct_PANData "setct-PANData" +#define NID_setct_PANData 519 +#define OBJ_setct_PANData OBJ_set_ctype,0L + +#define SN_setct_PANToken "setct-PANToken" +#define NID_setct_PANToken 520 +#define OBJ_setct_PANToken OBJ_set_ctype,1L + +#define SN_setct_PANOnly "setct-PANOnly" +#define NID_setct_PANOnly 521 +#define OBJ_setct_PANOnly OBJ_set_ctype,2L + +#define SN_setct_OIData "setct-OIData" +#define NID_setct_OIData 522 +#define OBJ_setct_OIData OBJ_set_ctype,3L + +#define SN_setct_PI "setct-PI" +#define NID_setct_PI 523 +#define OBJ_setct_PI OBJ_set_ctype,4L + +#define SN_setct_PIData "setct-PIData" +#define NID_setct_PIData 524 +#define OBJ_setct_PIData OBJ_set_ctype,5L + +#define SN_setct_PIDataUnsigned "setct-PIDataUnsigned" +#define NID_setct_PIDataUnsigned 525 +#define OBJ_setct_PIDataUnsigned OBJ_set_ctype,6L + +#define SN_setct_HODInput "setct-HODInput" +#define NID_setct_HODInput 526 +#define OBJ_setct_HODInput OBJ_set_ctype,7L + +#define SN_setct_AuthResBaggage "setct-AuthResBaggage" +#define NID_setct_AuthResBaggage 527 +#define OBJ_setct_AuthResBaggage OBJ_set_ctype,8L + +#define SN_setct_AuthRevReqBaggage "setct-AuthRevReqBaggage" +#define NID_setct_AuthRevReqBaggage 528 +#define OBJ_setct_AuthRevReqBaggage OBJ_set_ctype,9L + +#define SN_setct_AuthRevResBaggage "setct-AuthRevResBaggage" +#define NID_setct_AuthRevResBaggage 529 +#define OBJ_setct_AuthRevResBaggage OBJ_set_ctype,10L + +#define SN_setct_CapTokenSeq "setct-CapTokenSeq" +#define NID_setct_CapTokenSeq 530 +#define OBJ_setct_CapTokenSeq OBJ_set_ctype,11L + +#define SN_setct_PInitResData "setct-PInitResData" +#define NID_setct_PInitResData 531 +#define OBJ_setct_PInitResData OBJ_set_ctype,12L + +#define SN_setct_PI_TBS "setct-PI-TBS" +#define NID_setct_PI_TBS 532 +#define OBJ_setct_PI_TBS OBJ_set_ctype,13L + +#define SN_setct_PResData "setct-PResData" +#define NID_setct_PResData 533 +#define OBJ_setct_PResData OBJ_set_ctype,14L + +#define SN_setct_AuthReqTBS "setct-AuthReqTBS" +#define NID_setct_AuthReqTBS 534 +#define OBJ_setct_AuthReqTBS OBJ_set_ctype,16L + +#define SN_setct_AuthResTBS "setct-AuthResTBS" +#define NID_setct_AuthResTBS 535 +#define OBJ_setct_AuthResTBS OBJ_set_ctype,17L + +#define SN_setct_AuthResTBSX "setct-AuthResTBSX" +#define NID_setct_AuthResTBSX 536 +#define OBJ_setct_AuthResTBSX OBJ_set_ctype,18L + +#define SN_setct_AuthTokenTBS "setct-AuthTokenTBS" +#define NID_setct_AuthTokenTBS 537 +#define OBJ_setct_AuthTokenTBS OBJ_set_ctype,19L + +#define SN_setct_CapTokenData "setct-CapTokenData" +#define NID_setct_CapTokenData 538 +#define OBJ_setct_CapTokenData OBJ_set_ctype,20L + +#define SN_setct_CapTokenTBS "setct-CapTokenTBS" +#define NID_setct_CapTokenTBS 539 +#define OBJ_setct_CapTokenTBS OBJ_set_ctype,21L + +#define SN_setct_AcqCardCodeMsg "setct-AcqCardCodeMsg" +#define NID_setct_AcqCardCodeMsg 540 +#define OBJ_setct_AcqCardCodeMsg OBJ_set_ctype,22L + +#define SN_setct_AuthRevReqTBS "setct-AuthRevReqTBS" +#define NID_setct_AuthRevReqTBS 541 +#define OBJ_setct_AuthRevReqTBS OBJ_set_ctype,23L + +#define SN_setct_AuthRevResData "setct-AuthRevResData" +#define NID_setct_AuthRevResData 542 +#define OBJ_setct_AuthRevResData OBJ_set_ctype,24L + +#define SN_setct_AuthRevResTBS "setct-AuthRevResTBS" +#define NID_setct_AuthRevResTBS 543 +#define OBJ_setct_AuthRevResTBS OBJ_set_ctype,25L + +#define SN_setct_CapReqTBS "setct-CapReqTBS" +#define NID_setct_CapReqTBS 544 +#define OBJ_setct_CapReqTBS OBJ_set_ctype,26L + +#define SN_setct_CapReqTBSX "setct-CapReqTBSX" +#define NID_setct_CapReqTBSX 545 +#define OBJ_setct_CapReqTBSX OBJ_set_ctype,27L + +#define SN_setct_CapResData "setct-CapResData" +#define NID_setct_CapResData 546 +#define OBJ_setct_CapResData OBJ_set_ctype,28L + +#define SN_setct_CapRevReqTBS "setct-CapRevReqTBS" +#define NID_setct_CapRevReqTBS 547 +#define OBJ_setct_CapRevReqTBS OBJ_set_ctype,29L + +#define SN_setct_CapRevReqTBSX "setct-CapRevReqTBSX" +#define NID_setct_CapRevReqTBSX 548 +#define OBJ_setct_CapRevReqTBSX OBJ_set_ctype,30L + +#define SN_setct_CapRevResData "setct-CapRevResData" +#define NID_setct_CapRevResData 549 +#define OBJ_setct_CapRevResData OBJ_set_ctype,31L + +#define SN_setct_CredReqTBS "setct-CredReqTBS" +#define NID_setct_CredReqTBS 550 +#define OBJ_setct_CredReqTBS OBJ_set_ctype,32L + +#define SN_setct_CredReqTBSX "setct-CredReqTBSX" +#define NID_setct_CredReqTBSX 551 +#define OBJ_setct_CredReqTBSX OBJ_set_ctype,33L + +#define SN_setct_CredResData "setct-CredResData" +#define NID_setct_CredResData 552 +#define OBJ_setct_CredResData OBJ_set_ctype,34L + +#define SN_setct_CredRevReqTBS "setct-CredRevReqTBS" +#define NID_setct_CredRevReqTBS 553 +#define OBJ_setct_CredRevReqTBS OBJ_set_ctype,35L + +#define SN_setct_CredRevReqTBSX "setct-CredRevReqTBSX" +#define NID_setct_CredRevReqTBSX 554 +#define OBJ_setct_CredRevReqTBSX OBJ_set_ctype,36L + +#define SN_setct_CredRevResData "setct-CredRevResData" +#define NID_setct_CredRevResData 555 +#define OBJ_setct_CredRevResData OBJ_set_ctype,37L + +#define SN_setct_PCertReqData "setct-PCertReqData" +#define NID_setct_PCertReqData 556 +#define OBJ_setct_PCertReqData OBJ_set_ctype,38L + +#define SN_setct_PCertResTBS "setct-PCertResTBS" +#define NID_setct_PCertResTBS 557 +#define OBJ_setct_PCertResTBS OBJ_set_ctype,39L + +#define SN_setct_BatchAdminReqData "setct-BatchAdminReqData" +#define NID_setct_BatchAdminReqData 558 +#define OBJ_setct_BatchAdminReqData OBJ_set_ctype,40L + +#define SN_setct_BatchAdminResData "setct-BatchAdminResData" +#define NID_setct_BatchAdminResData 559 +#define OBJ_setct_BatchAdminResData OBJ_set_ctype,41L + +#define SN_setct_CardCInitResTBS "setct-CardCInitResTBS" +#define NID_setct_CardCInitResTBS 560 +#define OBJ_setct_CardCInitResTBS OBJ_set_ctype,42L + +#define SN_setct_MeAqCInitResTBS "setct-MeAqCInitResTBS" +#define NID_setct_MeAqCInitResTBS 561 +#define OBJ_setct_MeAqCInitResTBS OBJ_set_ctype,43L + +#define SN_setct_RegFormResTBS "setct-RegFormResTBS" +#define NID_setct_RegFormResTBS 562 +#define OBJ_setct_RegFormResTBS OBJ_set_ctype,44L + +#define SN_setct_CertReqData "setct-CertReqData" +#define NID_setct_CertReqData 563 +#define OBJ_setct_CertReqData OBJ_set_ctype,45L + +#define SN_setct_CertReqTBS "setct-CertReqTBS" +#define NID_setct_CertReqTBS 564 +#define OBJ_setct_CertReqTBS OBJ_set_ctype,46L + +#define SN_setct_CertResData "setct-CertResData" +#define NID_setct_CertResData 565 +#define OBJ_setct_CertResData OBJ_set_ctype,47L + +#define SN_setct_CertInqReqTBS "setct-CertInqReqTBS" +#define NID_setct_CertInqReqTBS 566 +#define OBJ_setct_CertInqReqTBS OBJ_set_ctype,48L + +#define SN_setct_ErrorTBS "setct-ErrorTBS" +#define NID_setct_ErrorTBS 567 +#define OBJ_setct_ErrorTBS OBJ_set_ctype,49L + +#define SN_setct_PIDualSignedTBE "setct-PIDualSignedTBE" +#define NID_setct_PIDualSignedTBE 568 +#define OBJ_setct_PIDualSignedTBE OBJ_set_ctype,50L + +#define SN_setct_PIUnsignedTBE "setct-PIUnsignedTBE" +#define NID_setct_PIUnsignedTBE 569 +#define OBJ_setct_PIUnsignedTBE OBJ_set_ctype,51L + +#define SN_setct_AuthReqTBE "setct-AuthReqTBE" +#define NID_setct_AuthReqTBE 570 +#define OBJ_setct_AuthReqTBE OBJ_set_ctype,52L + +#define SN_setct_AuthResTBE "setct-AuthResTBE" +#define NID_setct_AuthResTBE 571 +#define OBJ_setct_AuthResTBE OBJ_set_ctype,53L + +#define SN_setct_AuthResTBEX "setct-AuthResTBEX" +#define NID_setct_AuthResTBEX 572 +#define OBJ_setct_AuthResTBEX OBJ_set_ctype,54L + +#define SN_setct_AuthTokenTBE "setct-AuthTokenTBE" +#define NID_setct_AuthTokenTBE 573 +#define OBJ_setct_AuthTokenTBE OBJ_set_ctype,55L + +#define SN_setct_CapTokenTBE "setct-CapTokenTBE" +#define NID_setct_CapTokenTBE 574 +#define OBJ_setct_CapTokenTBE OBJ_set_ctype,56L + +#define SN_setct_CapTokenTBEX "setct-CapTokenTBEX" +#define NID_setct_CapTokenTBEX 575 +#define OBJ_setct_CapTokenTBEX OBJ_set_ctype,57L + +#define SN_setct_AcqCardCodeMsgTBE "setct-AcqCardCodeMsgTBE" +#define NID_setct_AcqCardCodeMsgTBE 576 +#define OBJ_setct_AcqCardCodeMsgTBE OBJ_set_ctype,58L + +#define SN_setct_AuthRevReqTBE "setct-AuthRevReqTBE" +#define NID_setct_AuthRevReqTBE 577 +#define OBJ_setct_AuthRevReqTBE OBJ_set_ctype,59L + +#define SN_setct_AuthRevResTBE "setct-AuthRevResTBE" +#define NID_setct_AuthRevResTBE 578 +#define OBJ_setct_AuthRevResTBE OBJ_set_ctype,60L + +#define SN_setct_AuthRevResTBEB "setct-AuthRevResTBEB" +#define NID_setct_AuthRevResTBEB 579 +#define OBJ_setct_AuthRevResTBEB OBJ_set_ctype,61L + +#define SN_setct_CapReqTBE "setct-CapReqTBE" +#define NID_setct_CapReqTBE 580 +#define OBJ_setct_CapReqTBE OBJ_set_ctype,62L + +#define SN_setct_CapReqTBEX "setct-CapReqTBEX" +#define NID_setct_CapReqTBEX 581 +#define OBJ_setct_CapReqTBEX OBJ_set_ctype,63L + +#define SN_setct_CapResTBE "setct-CapResTBE" +#define NID_setct_CapResTBE 582 +#define OBJ_setct_CapResTBE OBJ_set_ctype,64L + +#define SN_setct_CapRevReqTBE "setct-CapRevReqTBE" +#define NID_setct_CapRevReqTBE 583 +#define OBJ_setct_CapRevReqTBE OBJ_set_ctype,65L + +#define SN_setct_CapRevReqTBEX "setct-CapRevReqTBEX" +#define NID_setct_CapRevReqTBEX 584 +#define OBJ_setct_CapRevReqTBEX OBJ_set_ctype,66L + +#define SN_setct_CapRevResTBE "setct-CapRevResTBE" +#define NID_setct_CapRevResTBE 585 +#define OBJ_setct_CapRevResTBE OBJ_set_ctype,67L + +#define SN_setct_CredReqTBE "setct-CredReqTBE" +#define NID_setct_CredReqTBE 586 +#define OBJ_setct_CredReqTBE OBJ_set_ctype,68L + +#define SN_setct_CredReqTBEX "setct-CredReqTBEX" +#define NID_setct_CredReqTBEX 587 +#define OBJ_setct_CredReqTBEX OBJ_set_ctype,69L + +#define SN_setct_CredResTBE "setct-CredResTBE" +#define NID_setct_CredResTBE 588 +#define OBJ_setct_CredResTBE OBJ_set_ctype,70L + +#define SN_setct_CredRevReqTBE "setct-CredRevReqTBE" +#define NID_setct_CredRevReqTBE 589 +#define OBJ_setct_CredRevReqTBE OBJ_set_ctype,71L + +#define SN_setct_CredRevReqTBEX "setct-CredRevReqTBEX" +#define NID_setct_CredRevReqTBEX 590 +#define OBJ_setct_CredRevReqTBEX OBJ_set_ctype,72L + +#define SN_setct_CredRevResTBE "setct-CredRevResTBE" +#define NID_setct_CredRevResTBE 591 +#define OBJ_setct_CredRevResTBE OBJ_set_ctype,73L + +#define SN_setct_BatchAdminReqTBE "setct-BatchAdminReqTBE" +#define NID_setct_BatchAdminReqTBE 592 +#define OBJ_setct_BatchAdminReqTBE OBJ_set_ctype,74L + +#define SN_setct_BatchAdminResTBE "setct-BatchAdminResTBE" +#define NID_setct_BatchAdminResTBE 593 +#define OBJ_setct_BatchAdminResTBE OBJ_set_ctype,75L + +#define SN_setct_RegFormReqTBE "setct-RegFormReqTBE" +#define NID_setct_RegFormReqTBE 594 +#define OBJ_setct_RegFormReqTBE OBJ_set_ctype,76L + +#define SN_setct_CertReqTBE "setct-CertReqTBE" +#define NID_setct_CertReqTBE 595 +#define OBJ_setct_CertReqTBE OBJ_set_ctype,77L + +#define SN_setct_CertReqTBEX "setct-CertReqTBEX" +#define NID_setct_CertReqTBEX 596 +#define OBJ_setct_CertReqTBEX OBJ_set_ctype,78L + +#define SN_setct_CertResTBE "setct-CertResTBE" +#define NID_setct_CertResTBE 597 +#define OBJ_setct_CertResTBE OBJ_set_ctype,79L + +#define SN_setct_CRLNotificationTBS "setct-CRLNotificationTBS" +#define NID_setct_CRLNotificationTBS 598 +#define OBJ_setct_CRLNotificationTBS OBJ_set_ctype,80L + +#define SN_setct_CRLNotificationResTBS "setct-CRLNotificationResTBS" +#define NID_setct_CRLNotificationResTBS 599 +#define OBJ_setct_CRLNotificationResTBS OBJ_set_ctype,81L + +#define SN_setct_BCIDistributionTBS "setct-BCIDistributionTBS" +#define NID_setct_BCIDistributionTBS 600 +#define OBJ_setct_BCIDistributionTBS OBJ_set_ctype,82L + +#define SN_setext_genCrypt "setext-genCrypt" +#define LN_setext_genCrypt "generic cryptogram" +#define NID_setext_genCrypt 601 +#define OBJ_setext_genCrypt OBJ_set_msgExt,1L + +#define SN_setext_miAuth "setext-miAuth" +#define LN_setext_miAuth "merchant initiated auth" +#define NID_setext_miAuth 602 +#define OBJ_setext_miAuth OBJ_set_msgExt,3L + +#define SN_setext_pinSecure "setext-pinSecure" +#define NID_setext_pinSecure 603 +#define OBJ_setext_pinSecure OBJ_set_msgExt,4L + +#define SN_setext_pinAny "setext-pinAny" +#define NID_setext_pinAny 604 +#define OBJ_setext_pinAny OBJ_set_msgExt,5L + +#define SN_setext_track2 "setext-track2" +#define NID_setext_track2 605 +#define OBJ_setext_track2 OBJ_set_msgExt,7L + +#define SN_setext_cv "setext-cv" +#define LN_setext_cv "additional verification" +#define NID_setext_cv 606 +#define OBJ_setext_cv OBJ_set_msgExt,8L + +#define SN_set_policy_root "set-policy-root" +#define NID_set_policy_root 607 +#define OBJ_set_policy_root OBJ_set_policy,0L + +#define SN_setCext_hashedRoot "setCext-hashedRoot" +#define NID_setCext_hashedRoot 608 +#define OBJ_setCext_hashedRoot OBJ_set_certExt,0L + +#define SN_setCext_certType "setCext-certType" +#define NID_setCext_certType 609 +#define OBJ_setCext_certType OBJ_set_certExt,1L + +#define SN_setCext_merchData "setCext-merchData" +#define NID_setCext_merchData 610 +#define OBJ_setCext_merchData OBJ_set_certExt,2L + +#define SN_setCext_cCertRequired "setCext-cCertRequired" +#define NID_setCext_cCertRequired 611 +#define OBJ_setCext_cCertRequired OBJ_set_certExt,3L + +#define SN_setCext_tunneling "setCext-tunneling" +#define NID_setCext_tunneling 612 +#define OBJ_setCext_tunneling OBJ_set_certExt,4L + +#define SN_setCext_setExt "setCext-setExt" +#define NID_setCext_setExt 613 +#define OBJ_setCext_setExt OBJ_set_certExt,5L + +#define SN_setCext_setQualf "setCext-setQualf" +#define NID_setCext_setQualf 614 +#define OBJ_setCext_setQualf OBJ_set_certExt,6L + +#define SN_setCext_PGWYcapabilities "setCext-PGWYcapabilities" +#define NID_setCext_PGWYcapabilities 615 +#define OBJ_setCext_PGWYcapabilities OBJ_set_certExt,7L + +#define SN_setCext_TokenIdentifier "setCext-TokenIdentifier" +#define NID_setCext_TokenIdentifier 616 +#define OBJ_setCext_TokenIdentifier OBJ_set_certExt,8L + +#define SN_setCext_Track2Data "setCext-Track2Data" +#define NID_setCext_Track2Data 617 +#define OBJ_setCext_Track2Data OBJ_set_certExt,9L + +#define SN_setCext_TokenType "setCext-TokenType" +#define NID_setCext_TokenType 618 +#define OBJ_setCext_TokenType OBJ_set_certExt,10L + +#define SN_setCext_IssuerCapabilities "setCext-IssuerCapabilities" +#define NID_setCext_IssuerCapabilities 619 +#define OBJ_setCext_IssuerCapabilities OBJ_set_certExt,11L + +#define SN_setAttr_Cert "setAttr-Cert" +#define NID_setAttr_Cert 620 +#define OBJ_setAttr_Cert OBJ_set_attr,0L + +#define SN_setAttr_PGWYcap "setAttr-PGWYcap" +#define LN_setAttr_PGWYcap "payment gateway capabilities" +#define NID_setAttr_PGWYcap 621 +#define OBJ_setAttr_PGWYcap OBJ_set_attr,1L + +#define SN_setAttr_TokenType "setAttr-TokenType" +#define NID_setAttr_TokenType 622 +#define OBJ_setAttr_TokenType OBJ_set_attr,2L + +#define SN_setAttr_IssCap "setAttr-IssCap" +#define LN_setAttr_IssCap "issuer capabilities" +#define NID_setAttr_IssCap 623 +#define OBJ_setAttr_IssCap OBJ_set_attr,3L + +#define SN_set_rootKeyThumb "set-rootKeyThumb" +#define NID_set_rootKeyThumb 624 +#define OBJ_set_rootKeyThumb OBJ_setAttr_Cert,0L + +#define SN_set_addPolicy "set-addPolicy" +#define NID_set_addPolicy 625 +#define OBJ_set_addPolicy OBJ_setAttr_Cert,1L + +#define SN_setAttr_Token_EMV "setAttr-Token-EMV" +#define NID_setAttr_Token_EMV 626 +#define OBJ_setAttr_Token_EMV OBJ_setAttr_TokenType,1L + +#define SN_setAttr_Token_B0Prime "setAttr-Token-B0Prime" +#define NID_setAttr_Token_B0Prime 627 +#define OBJ_setAttr_Token_B0Prime OBJ_setAttr_TokenType,2L + +#define SN_setAttr_IssCap_CVM "setAttr-IssCap-CVM" +#define NID_setAttr_IssCap_CVM 628 +#define OBJ_setAttr_IssCap_CVM OBJ_setAttr_IssCap,3L + +#define SN_setAttr_IssCap_T2 "setAttr-IssCap-T2" +#define NID_setAttr_IssCap_T2 629 +#define OBJ_setAttr_IssCap_T2 OBJ_setAttr_IssCap,4L + +#define SN_setAttr_IssCap_Sig "setAttr-IssCap-Sig" +#define NID_setAttr_IssCap_Sig 630 +#define OBJ_setAttr_IssCap_Sig OBJ_setAttr_IssCap,5L + +#define SN_setAttr_GenCryptgrm "setAttr-GenCryptgrm" +#define LN_setAttr_GenCryptgrm "generate cryptogram" +#define NID_setAttr_GenCryptgrm 631 +#define OBJ_setAttr_GenCryptgrm OBJ_setAttr_IssCap_CVM,1L + +#define SN_setAttr_T2Enc "setAttr-T2Enc" +#define LN_setAttr_T2Enc "encrypted track 2" +#define NID_setAttr_T2Enc 632 +#define OBJ_setAttr_T2Enc OBJ_setAttr_IssCap_T2,1L + +#define SN_setAttr_T2cleartxt "setAttr-T2cleartxt" +#define LN_setAttr_T2cleartxt "cleartext track 2" +#define NID_setAttr_T2cleartxt 633 +#define OBJ_setAttr_T2cleartxt OBJ_setAttr_IssCap_T2,2L + +#define SN_setAttr_TokICCsig "setAttr-TokICCsig" +#define LN_setAttr_TokICCsig "ICC or token signature" +#define NID_setAttr_TokICCsig 634 +#define OBJ_setAttr_TokICCsig OBJ_setAttr_IssCap_Sig,1L + +#define SN_setAttr_SecDevSig "setAttr-SecDevSig" +#define LN_setAttr_SecDevSig "secure device signature" +#define NID_setAttr_SecDevSig 635 +#define OBJ_setAttr_SecDevSig OBJ_setAttr_IssCap_Sig,2L + +#define SN_set_brand_IATA_ATA "set-brand-IATA-ATA" +#define NID_set_brand_IATA_ATA 636 +#define OBJ_set_brand_IATA_ATA OBJ_set_brand,1L + +#define SN_set_brand_Diners "set-brand-Diners" +#define NID_set_brand_Diners 637 +#define OBJ_set_brand_Diners OBJ_set_brand,30L + +#define SN_set_brand_AmericanExpress "set-brand-AmericanExpress" +#define NID_set_brand_AmericanExpress 638 +#define OBJ_set_brand_AmericanExpress OBJ_set_brand,34L + +#define SN_set_brand_JCB "set-brand-JCB" +#define NID_set_brand_JCB 639 +#define OBJ_set_brand_JCB OBJ_set_brand,35L + +#define SN_set_brand_Visa "set-brand-Visa" +#define NID_set_brand_Visa 640 +#define OBJ_set_brand_Visa OBJ_set_brand,4L + +#define SN_set_brand_MasterCard "set-brand-MasterCard" +#define NID_set_brand_MasterCard 641 +#define OBJ_set_brand_MasterCard OBJ_set_brand,5L + +#define SN_set_brand_Novus "set-brand-Novus" +#define NID_set_brand_Novus 642 +#define OBJ_set_brand_Novus OBJ_set_brand,6011L + +#define SN_des_cdmf "DES-CDMF" +#define LN_des_cdmf "des-cdmf" +#define NID_des_cdmf 643 +#define OBJ_des_cdmf OBJ_rsadsi,3L,10L + +#define SN_rsaOAEPEncryptionSET "rsaOAEPEncryptionSET" +#define NID_rsaOAEPEncryptionSET 644 +#define OBJ_rsaOAEPEncryptionSET OBJ_rsadsi,1L,1L,6L + +#define SN_ipsec3 "Oakley-EC2N-3" +#define LN_ipsec3 "ipsec3" +#define NID_ipsec3 749 + +#define SN_ipsec4 "Oakley-EC2N-4" +#define LN_ipsec4 "ipsec4" +#define NID_ipsec4 750 + +#define SN_whirlpool "whirlpool" +#define NID_whirlpool 804 +#define OBJ_whirlpool OBJ_iso,0L,10118L,3L,0L,55L + +#define SN_cryptopro "cryptopro" +#define NID_cryptopro 805 +#define OBJ_cryptopro OBJ_member_body,643L,2L,2L + +#define SN_cryptocom "cryptocom" +#define NID_cryptocom 806 +#define OBJ_cryptocom OBJ_member_body,643L,2L,9L + +#define SN_id_tc26 "id-tc26" +#define NID_id_tc26 974 +#define OBJ_id_tc26 OBJ_member_body,643L,7L,1L + +#define SN_id_GostR3411_94_with_GostR3410_2001 "id-GostR3411-94-with-GostR3410-2001" +#define LN_id_GostR3411_94_with_GostR3410_2001 "GOST R 34.11-94 with GOST R 34.10-2001" +#define NID_id_GostR3411_94_with_GostR3410_2001 807 +#define OBJ_id_GostR3411_94_with_GostR3410_2001 OBJ_cryptopro,3L + +#define SN_id_GostR3411_94_with_GostR3410_94 "id-GostR3411-94-with-GostR3410-94" +#define LN_id_GostR3411_94_with_GostR3410_94 "GOST R 34.11-94 with GOST R 34.10-94" +#define NID_id_GostR3411_94_with_GostR3410_94 808 +#define OBJ_id_GostR3411_94_with_GostR3410_94 OBJ_cryptopro,4L + +#define SN_id_GostR3411_94 "md_gost94" +#define LN_id_GostR3411_94 "GOST R 34.11-94" +#define NID_id_GostR3411_94 809 +#define OBJ_id_GostR3411_94 OBJ_cryptopro,9L + +#define SN_id_HMACGostR3411_94 "id-HMACGostR3411-94" +#define LN_id_HMACGostR3411_94 "HMAC GOST 34.11-94" +#define NID_id_HMACGostR3411_94 810 +#define OBJ_id_HMACGostR3411_94 OBJ_cryptopro,10L + +#define SN_id_GostR3410_2001 "gost2001" +#define LN_id_GostR3410_2001 "GOST R 34.10-2001" +#define NID_id_GostR3410_2001 811 +#define OBJ_id_GostR3410_2001 OBJ_cryptopro,19L + +#define SN_id_GostR3410_94 "gost94" +#define LN_id_GostR3410_94 "GOST R 34.10-94" +#define NID_id_GostR3410_94 812 +#define OBJ_id_GostR3410_94 OBJ_cryptopro,20L + +#define SN_id_Gost28147_89 "gost89" +#define LN_id_Gost28147_89 "GOST 28147-89" +#define NID_id_Gost28147_89 813 +#define OBJ_id_Gost28147_89 OBJ_cryptopro,21L + +#define SN_gost89_cnt "gost89-cnt" +#define NID_gost89_cnt 814 + +#define SN_gost89_cnt_12 "gost89-cnt-12" +#define NID_gost89_cnt_12 975 + +#define SN_gost89_cbc "gost89-cbc" +#define NID_gost89_cbc 1009 + +#define SN_gost89_ecb "gost89-ecb" +#define NID_gost89_ecb 1010 + +#define SN_gost89_ctr "gost89-ctr" +#define NID_gost89_ctr 1011 + +#define SN_id_Gost28147_89_MAC "gost-mac" +#define LN_id_Gost28147_89_MAC "GOST 28147-89 MAC" +#define NID_id_Gost28147_89_MAC 815 +#define OBJ_id_Gost28147_89_MAC OBJ_cryptopro,22L + +#define SN_gost_mac_12 "gost-mac-12" +#define NID_gost_mac_12 976 + +#define SN_id_GostR3411_94_prf "prf-gostr3411-94" +#define LN_id_GostR3411_94_prf "GOST R 34.11-94 PRF" +#define NID_id_GostR3411_94_prf 816 +#define OBJ_id_GostR3411_94_prf OBJ_cryptopro,23L + +#define SN_id_GostR3410_2001DH "id-GostR3410-2001DH" +#define LN_id_GostR3410_2001DH "GOST R 34.10-2001 DH" +#define NID_id_GostR3410_2001DH 817 +#define OBJ_id_GostR3410_2001DH OBJ_cryptopro,98L + +#define SN_id_GostR3410_94DH "id-GostR3410-94DH" +#define LN_id_GostR3410_94DH "GOST R 34.10-94 DH" +#define NID_id_GostR3410_94DH 818 +#define OBJ_id_GostR3410_94DH OBJ_cryptopro,99L + +#define SN_id_Gost28147_89_CryptoPro_KeyMeshing "id-Gost28147-89-CryptoPro-KeyMeshing" +#define NID_id_Gost28147_89_CryptoPro_KeyMeshing 819 +#define OBJ_id_Gost28147_89_CryptoPro_KeyMeshing OBJ_cryptopro,14L,1L + +#define SN_id_Gost28147_89_None_KeyMeshing "id-Gost28147-89-None-KeyMeshing" +#define NID_id_Gost28147_89_None_KeyMeshing 820 +#define OBJ_id_Gost28147_89_None_KeyMeshing OBJ_cryptopro,14L,0L + +#define SN_id_GostR3411_94_TestParamSet "id-GostR3411-94-TestParamSet" +#define NID_id_GostR3411_94_TestParamSet 821 +#define OBJ_id_GostR3411_94_TestParamSet OBJ_cryptopro,30L,0L + +#define SN_id_GostR3411_94_CryptoProParamSet "id-GostR3411-94-CryptoProParamSet" +#define NID_id_GostR3411_94_CryptoProParamSet 822 +#define OBJ_id_GostR3411_94_CryptoProParamSet OBJ_cryptopro,30L,1L + +#define SN_id_Gost28147_89_TestParamSet "id-Gost28147-89-TestParamSet" +#define NID_id_Gost28147_89_TestParamSet 823 +#define OBJ_id_Gost28147_89_TestParamSet OBJ_cryptopro,31L,0L + +#define SN_id_Gost28147_89_CryptoPro_A_ParamSet "id-Gost28147-89-CryptoPro-A-ParamSet" +#define NID_id_Gost28147_89_CryptoPro_A_ParamSet 824 +#define OBJ_id_Gost28147_89_CryptoPro_A_ParamSet OBJ_cryptopro,31L,1L + +#define SN_id_Gost28147_89_CryptoPro_B_ParamSet "id-Gost28147-89-CryptoPro-B-ParamSet" +#define NID_id_Gost28147_89_CryptoPro_B_ParamSet 825 +#define OBJ_id_Gost28147_89_CryptoPro_B_ParamSet OBJ_cryptopro,31L,2L + +#define SN_id_Gost28147_89_CryptoPro_C_ParamSet "id-Gost28147-89-CryptoPro-C-ParamSet" +#define NID_id_Gost28147_89_CryptoPro_C_ParamSet 826 +#define OBJ_id_Gost28147_89_CryptoPro_C_ParamSet OBJ_cryptopro,31L,3L + +#define SN_id_Gost28147_89_CryptoPro_D_ParamSet "id-Gost28147-89-CryptoPro-D-ParamSet" +#define NID_id_Gost28147_89_CryptoPro_D_ParamSet 827 +#define OBJ_id_Gost28147_89_CryptoPro_D_ParamSet OBJ_cryptopro,31L,4L + +#define SN_id_Gost28147_89_CryptoPro_Oscar_1_1_ParamSet "id-Gost28147-89-CryptoPro-Oscar-1-1-ParamSet" +#define NID_id_Gost28147_89_CryptoPro_Oscar_1_1_ParamSet 828 +#define OBJ_id_Gost28147_89_CryptoPro_Oscar_1_1_ParamSet OBJ_cryptopro,31L,5L + +#define SN_id_Gost28147_89_CryptoPro_Oscar_1_0_ParamSet "id-Gost28147-89-CryptoPro-Oscar-1-0-ParamSet" +#define NID_id_Gost28147_89_CryptoPro_Oscar_1_0_ParamSet 829 +#define OBJ_id_Gost28147_89_CryptoPro_Oscar_1_0_ParamSet OBJ_cryptopro,31L,6L + +#define SN_id_Gost28147_89_CryptoPro_RIC_1_ParamSet "id-Gost28147-89-CryptoPro-RIC-1-ParamSet" +#define NID_id_Gost28147_89_CryptoPro_RIC_1_ParamSet 830 +#define OBJ_id_Gost28147_89_CryptoPro_RIC_1_ParamSet OBJ_cryptopro,31L,7L + +#define SN_id_GostR3410_94_TestParamSet "id-GostR3410-94-TestParamSet" +#define NID_id_GostR3410_94_TestParamSet 831 +#define OBJ_id_GostR3410_94_TestParamSet OBJ_cryptopro,32L,0L + +#define SN_id_GostR3410_94_CryptoPro_A_ParamSet "id-GostR3410-94-CryptoPro-A-ParamSet" +#define NID_id_GostR3410_94_CryptoPro_A_ParamSet 832 +#define OBJ_id_GostR3410_94_CryptoPro_A_ParamSet OBJ_cryptopro,32L,2L + +#define SN_id_GostR3410_94_CryptoPro_B_ParamSet "id-GostR3410-94-CryptoPro-B-ParamSet" +#define NID_id_GostR3410_94_CryptoPro_B_ParamSet 833 +#define OBJ_id_GostR3410_94_CryptoPro_B_ParamSet OBJ_cryptopro,32L,3L + +#define SN_id_GostR3410_94_CryptoPro_C_ParamSet "id-GostR3410-94-CryptoPro-C-ParamSet" +#define NID_id_GostR3410_94_CryptoPro_C_ParamSet 834 +#define OBJ_id_GostR3410_94_CryptoPro_C_ParamSet OBJ_cryptopro,32L,4L + +#define SN_id_GostR3410_94_CryptoPro_D_ParamSet "id-GostR3410-94-CryptoPro-D-ParamSet" +#define NID_id_GostR3410_94_CryptoPro_D_ParamSet 835 +#define OBJ_id_GostR3410_94_CryptoPro_D_ParamSet OBJ_cryptopro,32L,5L + +#define SN_id_GostR3410_94_CryptoPro_XchA_ParamSet "id-GostR3410-94-CryptoPro-XchA-ParamSet" +#define NID_id_GostR3410_94_CryptoPro_XchA_ParamSet 836 +#define OBJ_id_GostR3410_94_CryptoPro_XchA_ParamSet OBJ_cryptopro,33L,1L + +#define SN_id_GostR3410_94_CryptoPro_XchB_ParamSet "id-GostR3410-94-CryptoPro-XchB-ParamSet" +#define NID_id_GostR3410_94_CryptoPro_XchB_ParamSet 837 +#define OBJ_id_GostR3410_94_CryptoPro_XchB_ParamSet OBJ_cryptopro,33L,2L + +#define SN_id_GostR3410_94_CryptoPro_XchC_ParamSet "id-GostR3410-94-CryptoPro-XchC-ParamSet" +#define NID_id_GostR3410_94_CryptoPro_XchC_ParamSet 838 +#define OBJ_id_GostR3410_94_CryptoPro_XchC_ParamSet OBJ_cryptopro,33L,3L + +#define SN_id_GostR3410_2001_TestParamSet "id-GostR3410-2001-TestParamSet" +#define NID_id_GostR3410_2001_TestParamSet 839 +#define OBJ_id_GostR3410_2001_TestParamSet OBJ_cryptopro,35L,0L + +#define SN_id_GostR3410_2001_CryptoPro_A_ParamSet "id-GostR3410-2001-CryptoPro-A-ParamSet" +#define NID_id_GostR3410_2001_CryptoPro_A_ParamSet 840 +#define OBJ_id_GostR3410_2001_CryptoPro_A_ParamSet OBJ_cryptopro,35L,1L + +#define SN_id_GostR3410_2001_CryptoPro_B_ParamSet "id-GostR3410-2001-CryptoPro-B-ParamSet" +#define NID_id_GostR3410_2001_CryptoPro_B_ParamSet 841 +#define OBJ_id_GostR3410_2001_CryptoPro_B_ParamSet OBJ_cryptopro,35L,2L + +#define SN_id_GostR3410_2001_CryptoPro_C_ParamSet "id-GostR3410-2001-CryptoPro-C-ParamSet" +#define NID_id_GostR3410_2001_CryptoPro_C_ParamSet 842 +#define OBJ_id_GostR3410_2001_CryptoPro_C_ParamSet OBJ_cryptopro,35L,3L + +#define SN_id_GostR3410_2001_CryptoPro_XchA_ParamSet "id-GostR3410-2001-CryptoPro-XchA-ParamSet" +#define NID_id_GostR3410_2001_CryptoPro_XchA_ParamSet 843 +#define OBJ_id_GostR3410_2001_CryptoPro_XchA_ParamSet OBJ_cryptopro,36L,0L + +#define SN_id_GostR3410_2001_CryptoPro_XchB_ParamSet "id-GostR3410-2001-CryptoPro-XchB-ParamSet" +#define NID_id_GostR3410_2001_CryptoPro_XchB_ParamSet 844 +#define OBJ_id_GostR3410_2001_CryptoPro_XchB_ParamSet OBJ_cryptopro,36L,1L + +#define SN_id_GostR3410_94_a "id-GostR3410-94-a" +#define NID_id_GostR3410_94_a 845 +#define OBJ_id_GostR3410_94_a OBJ_id_GostR3410_94,1L + +#define SN_id_GostR3410_94_aBis "id-GostR3410-94-aBis" +#define NID_id_GostR3410_94_aBis 846 +#define OBJ_id_GostR3410_94_aBis OBJ_id_GostR3410_94,2L + +#define SN_id_GostR3410_94_b "id-GostR3410-94-b" +#define NID_id_GostR3410_94_b 847 +#define OBJ_id_GostR3410_94_b OBJ_id_GostR3410_94,3L + +#define SN_id_GostR3410_94_bBis "id-GostR3410-94-bBis" +#define NID_id_GostR3410_94_bBis 848 +#define OBJ_id_GostR3410_94_bBis OBJ_id_GostR3410_94,4L + +#define SN_id_Gost28147_89_cc "id-Gost28147-89-cc" +#define LN_id_Gost28147_89_cc "GOST 28147-89 Cryptocom ParamSet" +#define NID_id_Gost28147_89_cc 849 +#define OBJ_id_Gost28147_89_cc OBJ_cryptocom,1L,6L,1L + +#define SN_id_GostR3410_94_cc "gost94cc" +#define LN_id_GostR3410_94_cc "GOST 34.10-94 Cryptocom" +#define NID_id_GostR3410_94_cc 850 +#define OBJ_id_GostR3410_94_cc OBJ_cryptocom,1L,5L,3L + +#define SN_id_GostR3410_2001_cc "gost2001cc" +#define LN_id_GostR3410_2001_cc "GOST 34.10-2001 Cryptocom" +#define NID_id_GostR3410_2001_cc 851 +#define OBJ_id_GostR3410_2001_cc OBJ_cryptocom,1L,5L,4L + +#define SN_id_GostR3411_94_with_GostR3410_94_cc "id-GostR3411-94-with-GostR3410-94-cc" +#define LN_id_GostR3411_94_with_GostR3410_94_cc "GOST R 34.11-94 with GOST R 34.10-94 Cryptocom" +#define NID_id_GostR3411_94_with_GostR3410_94_cc 852 +#define OBJ_id_GostR3411_94_with_GostR3410_94_cc OBJ_cryptocom,1L,3L,3L + +#define SN_id_GostR3411_94_with_GostR3410_2001_cc "id-GostR3411-94-with-GostR3410-2001-cc" +#define LN_id_GostR3411_94_with_GostR3410_2001_cc "GOST R 34.11-94 with GOST R 34.10-2001 Cryptocom" +#define NID_id_GostR3411_94_with_GostR3410_2001_cc 853 +#define OBJ_id_GostR3411_94_with_GostR3410_2001_cc OBJ_cryptocom,1L,3L,4L + +#define SN_id_GostR3410_2001_ParamSet_cc "id-GostR3410-2001-ParamSet-cc" +#define LN_id_GostR3410_2001_ParamSet_cc "GOST R 3410-2001 Parameter Set Cryptocom" +#define NID_id_GostR3410_2001_ParamSet_cc 854 +#define OBJ_id_GostR3410_2001_ParamSet_cc OBJ_cryptocom,1L,8L,1L + +#define SN_id_tc26_algorithms "id-tc26-algorithms" +#define NID_id_tc26_algorithms 977 +#define OBJ_id_tc26_algorithms OBJ_id_tc26,1L + +#define SN_id_tc26_sign "id-tc26-sign" +#define NID_id_tc26_sign 978 +#define OBJ_id_tc26_sign OBJ_id_tc26_algorithms,1L + +#define SN_id_GostR3410_2012_256 "gost2012_256" +#define LN_id_GostR3410_2012_256 "GOST R 34.10-2012 with 256 bit modulus" +#define NID_id_GostR3410_2012_256 979 +#define OBJ_id_GostR3410_2012_256 OBJ_id_tc26_sign,1L + +#define SN_id_GostR3410_2012_512 "gost2012_512" +#define LN_id_GostR3410_2012_512 "GOST R 34.10-2012 with 512 bit modulus" +#define NID_id_GostR3410_2012_512 980 +#define OBJ_id_GostR3410_2012_512 OBJ_id_tc26_sign,2L + +#define SN_id_tc26_digest "id-tc26-digest" +#define NID_id_tc26_digest 981 +#define OBJ_id_tc26_digest OBJ_id_tc26_algorithms,2L + +#define SN_id_GostR3411_2012_256 "md_gost12_256" +#define LN_id_GostR3411_2012_256 "GOST R 34.11-2012 with 256 bit hash" +#define NID_id_GostR3411_2012_256 982 +#define OBJ_id_GostR3411_2012_256 OBJ_id_tc26_digest,2L + +#define SN_id_GostR3411_2012_512 "md_gost12_512" +#define LN_id_GostR3411_2012_512 "GOST R 34.11-2012 with 512 bit hash" +#define NID_id_GostR3411_2012_512 983 +#define OBJ_id_GostR3411_2012_512 OBJ_id_tc26_digest,3L + +#define SN_id_tc26_signwithdigest "id-tc26-signwithdigest" +#define NID_id_tc26_signwithdigest 984 +#define OBJ_id_tc26_signwithdigest OBJ_id_tc26_algorithms,3L + +#define SN_id_tc26_signwithdigest_gost3410_2012_256 "id-tc26-signwithdigest-gost3410-2012-256" +#define LN_id_tc26_signwithdigest_gost3410_2012_256 "GOST R 34.10-2012 with GOST R 34.11-2012 (256 bit)" +#define NID_id_tc26_signwithdigest_gost3410_2012_256 985 +#define OBJ_id_tc26_signwithdigest_gost3410_2012_256 OBJ_id_tc26_signwithdigest,2L + +#define SN_id_tc26_signwithdigest_gost3410_2012_512 "id-tc26-signwithdigest-gost3410-2012-512" +#define LN_id_tc26_signwithdigest_gost3410_2012_512 "GOST R 34.10-2012 with GOST R 34.11-2012 (512 bit)" +#define NID_id_tc26_signwithdigest_gost3410_2012_512 986 +#define OBJ_id_tc26_signwithdigest_gost3410_2012_512 OBJ_id_tc26_signwithdigest,3L + +#define SN_id_tc26_mac "id-tc26-mac" +#define NID_id_tc26_mac 987 +#define OBJ_id_tc26_mac OBJ_id_tc26_algorithms,4L + +#define SN_id_tc26_hmac_gost_3411_2012_256 "id-tc26-hmac-gost-3411-2012-256" +#define LN_id_tc26_hmac_gost_3411_2012_256 "HMAC GOST 34.11-2012 256 bit" +#define NID_id_tc26_hmac_gost_3411_2012_256 988 +#define OBJ_id_tc26_hmac_gost_3411_2012_256 OBJ_id_tc26_mac,1L + +#define SN_id_tc26_hmac_gost_3411_2012_512 "id-tc26-hmac-gost-3411-2012-512" +#define LN_id_tc26_hmac_gost_3411_2012_512 "HMAC GOST 34.11-2012 512 bit" +#define NID_id_tc26_hmac_gost_3411_2012_512 989 +#define OBJ_id_tc26_hmac_gost_3411_2012_512 OBJ_id_tc26_mac,2L + +#define SN_id_tc26_cipher "id-tc26-cipher" +#define NID_id_tc26_cipher 990 +#define OBJ_id_tc26_cipher OBJ_id_tc26_algorithms,5L + +#define SN_id_tc26_cipher_gostr3412_2015_magma "id-tc26-cipher-gostr3412-2015-magma" +#define NID_id_tc26_cipher_gostr3412_2015_magma 1173 +#define OBJ_id_tc26_cipher_gostr3412_2015_magma OBJ_id_tc26_cipher,1L + +#define SN_id_tc26_cipher_gostr3412_2015_magma_ctracpkm "id-tc26-cipher-gostr3412-2015-magma-ctracpkm" +#define NID_id_tc26_cipher_gostr3412_2015_magma_ctracpkm 1174 +#define OBJ_id_tc26_cipher_gostr3412_2015_magma_ctracpkm OBJ_id_tc26_cipher_gostr3412_2015_magma,1L + +#define SN_id_tc26_cipher_gostr3412_2015_magma_ctracpkm_omac "id-tc26-cipher-gostr3412-2015-magma-ctracpkm-omac" +#define NID_id_tc26_cipher_gostr3412_2015_magma_ctracpkm_omac 1175 +#define OBJ_id_tc26_cipher_gostr3412_2015_magma_ctracpkm_omac OBJ_id_tc26_cipher_gostr3412_2015_magma,2L + +#define SN_id_tc26_cipher_gostr3412_2015_kuznyechik "id-tc26-cipher-gostr3412-2015-kuznyechik" +#define NID_id_tc26_cipher_gostr3412_2015_kuznyechik 1176 +#define OBJ_id_tc26_cipher_gostr3412_2015_kuznyechik OBJ_id_tc26_cipher,2L + +#define SN_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm "id-tc26-cipher-gostr3412-2015-kuznyechik-ctracpkm" +#define NID_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm 1177 +#define OBJ_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm OBJ_id_tc26_cipher_gostr3412_2015_kuznyechik,1L + +#define SN_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm_omac "id-tc26-cipher-gostr3412-2015-kuznyechik-ctracpkm-omac" +#define NID_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm_omac 1178 +#define OBJ_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm_omac OBJ_id_tc26_cipher_gostr3412_2015_kuznyechik,2L + +#define SN_id_tc26_agreement "id-tc26-agreement" +#define NID_id_tc26_agreement 991 +#define OBJ_id_tc26_agreement OBJ_id_tc26_algorithms,6L + +#define SN_id_tc26_agreement_gost_3410_2012_256 "id-tc26-agreement-gost-3410-2012-256" +#define NID_id_tc26_agreement_gost_3410_2012_256 992 +#define OBJ_id_tc26_agreement_gost_3410_2012_256 OBJ_id_tc26_agreement,1L + +#define SN_id_tc26_agreement_gost_3410_2012_512 "id-tc26-agreement-gost-3410-2012-512" +#define NID_id_tc26_agreement_gost_3410_2012_512 993 +#define OBJ_id_tc26_agreement_gost_3410_2012_512 OBJ_id_tc26_agreement,2L + +#define SN_id_tc26_wrap "id-tc26-wrap" +#define NID_id_tc26_wrap 1179 +#define OBJ_id_tc26_wrap OBJ_id_tc26_algorithms,7L + +#define SN_id_tc26_wrap_gostr3412_2015_magma "id-tc26-wrap-gostr3412-2015-magma" +#define NID_id_tc26_wrap_gostr3412_2015_magma 1180 +#define OBJ_id_tc26_wrap_gostr3412_2015_magma OBJ_id_tc26_wrap,1L + +#define SN_id_tc26_wrap_gostr3412_2015_magma_kexp15 "id-tc26-wrap-gostr3412-2015-magma-kexp15" +#define NID_id_tc26_wrap_gostr3412_2015_magma_kexp15 1181 +#define OBJ_id_tc26_wrap_gostr3412_2015_magma_kexp15 OBJ_id_tc26_wrap_gostr3412_2015_magma,1L + +#define SN_id_tc26_wrap_gostr3412_2015_kuznyechik "id-tc26-wrap-gostr3412-2015-kuznyechik" +#define NID_id_tc26_wrap_gostr3412_2015_kuznyechik 1182 +#define OBJ_id_tc26_wrap_gostr3412_2015_kuznyechik OBJ_id_tc26_wrap,2L + +#define SN_id_tc26_wrap_gostr3412_2015_kuznyechik_kexp15 "id-tc26-wrap-gostr3412-2015-kuznyechik-kexp15" +#define NID_id_tc26_wrap_gostr3412_2015_kuznyechik_kexp15 1183 +#define OBJ_id_tc26_wrap_gostr3412_2015_kuznyechik_kexp15 OBJ_id_tc26_wrap_gostr3412_2015_kuznyechik,1L + +#define SN_id_tc26_constants "id-tc26-constants" +#define NID_id_tc26_constants 994 +#define OBJ_id_tc26_constants OBJ_id_tc26,2L + +#define SN_id_tc26_sign_constants "id-tc26-sign-constants" +#define NID_id_tc26_sign_constants 995 +#define OBJ_id_tc26_sign_constants OBJ_id_tc26_constants,1L + +#define SN_id_tc26_gost_3410_2012_256_constants "id-tc26-gost-3410-2012-256-constants" +#define NID_id_tc26_gost_3410_2012_256_constants 1147 +#define OBJ_id_tc26_gost_3410_2012_256_constants OBJ_id_tc26_sign_constants,1L + +#define SN_id_tc26_gost_3410_2012_256_paramSetA "id-tc26-gost-3410-2012-256-paramSetA" +#define LN_id_tc26_gost_3410_2012_256_paramSetA "GOST R 34.10-2012 (256 bit) ParamSet A" +#define NID_id_tc26_gost_3410_2012_256_paramSetA 1148 +#define OBJ_id_tc26_gost_3410_2012_256_paramSetA OBJ_id_tc26_gost_3410_2012_256_constants,1L + +#define SN_id_tc26_gost_3410_2012_256_paramSetB "id-tc26-gost-3410-2012-256-paramSetB" +#define LN_id_tc26_gost_3410_2012_256_paramSetB "GOST R 34.10-2012 (256 bit) ParamSet B" +#define NID_id_tc26_gost_3410_2012_256_paramSetB 1184 +#define OBJ_id_tc26_gost_3410_2012_256_paramSetB OBJ_id_tc26_gost_3410_2012_256_constants,2L + +#define SN_id_tc26_gost_3410_2012_256_paramSetC "id-tc26-gost-3410-2012-256-paramSetC" +#define LN_id_tc26_gost_3410_2012_256_paramSetC "GOST R 34.10-2012 (256 bit) ParamSet C" +#define NID_id_tc26_gost_3410_2012_256_paramSetC 1185 +#define OBJ_id_tc26_gost_3410_2012_256_paramSetC OBJ_id_tc26_gost_3410_2012_256_constants,3L + +#define SN_id_tc26_gost_3410_2012_256_paramSetD "id-tc26-gost-3410-2012-256-paramSetD" +#define LN_id_tc26_gost_3410_2012_256_paramSetD "GOST R 34.10-2012 (256 bit) ParamSet D" +#define NID_id_tc26_gost_3410_2012_256_paramSetD 1186 +#define OBJ_id_tc26_gost_3410_2012_256_paramSetD OBJ_id_tc26_gost_3410_2012_256_constants,4L + +#define SN_id_tc26_gost_3410_2012_512_constants "id-tc26-gost-3410-2012-512-constants" +#define NID_id_tc26_gost_3410_2012_512_constants 996 +#define OBJ_id_tc26_gost_3410_2012_512_constants OBJ_id_tc26_sign_constants,2L + +#define SN_id_tc26_gost_3410_2012_512_paramSetTest "id-tc26-gost-3410-2012-512-paramSetTest" +#define LN_id_tc26_gost_3410_2012_512_paramSetTest "GOST R 34.10-2012 (512 bit) testing parameter set" +#define NID_id_tc26_gost_3410_2012_512_paramSetTest 997 +#define OBJ_id_tc26_gost_3410_2012_512_paramSetTest OBJ_id_tc26_gost_3410_2012_512_constants,0L + +#define SN_id_tc26_gost_3410_2012_512_paramSetA "id-tc26-gost-3410-2012-512-paramSetA" +#define LN_id_tc26_gost_3410_2012_512_paramSetA "GOST R 34.10-2012 (512 bit) ParamSet A" +#define NID_id_tc26_gost_3410_2012_512_paramSetA 998 +#define OBJ_id_tc26_gost_3410_2012_512_paramSetA OBJ_id_tc26_gost_3410_2012_512_constants,1L + +#define SN_id_tc26_gost_3410_2012_512_paramSetB "id-tc26-gost-3410-2012-512-paramSetB" +#define LN_id_tc26_gost_3410_2012_512_paramSetB "GOST R 34.10-2012 (512 bit) ParamSet B" +#define NID_id_tc26_gost_3410_2012_512_paramSetB 999 +#define OBJ_id_tc26_gost_3410_2012_512_paramSetB OBJ_id_tc26_gost_3410_2012_512_constants,2L + +#define SN_id_tc26_gost_3410_2012_512_paramSetC "id-tc26-gost-3410-2012-512-paramSetC" +#define LN_id_tc26_gost_3410_2012_512_paramSetC "GOST R 34.10-2012 (512 bit) ParamSet C" +#define NID_id_tc26_gost_3410_2012_512_paramSetC 1149 +#define OBJ_id_tc26_gost_3410_2012_512_paramSetC OBJ_id_tc26_gost_3410_2012_512_constants,3L + +#define SN_id_tc26_digest_constants "id-tc26-digest-constants" +#define NID_id_tc26_digest_constants 1000 +#define OBJ_id_tc26_digest_constants OBJ_id_tc26_constants,2L + +#define SN_id_tc26_cipher_constants "id-tc26-cipher-constants" +#define NID_id_tc26_cipher_constants 1001 +#define OBJ_id_tc26_cipher_constants OBJ_id_tc26_constants,5L + +#define SN_id_tc26_gost_28147_constants "id-tc26-gost-28147-constants" +#define NID_id_tc26_gost_28147_constants 1002 +#define OBJ_id_tc26_gost_28147_constants OBJ_id_tc26_cipher_constants,1L + +#define SN_id_tc26_gost_28147_param_Z "id-tc26-gost-28147-param-Z" +#define LN_id_tc26_gost_28147_param_Z "GOST 28147-89 TC26 parameter set" +#define NID_id_tc26_gost_28147_param_Z 1003 +#define OBJ_id_tc26_gost_28147_param_Z OBJ_id_tc26_gost_28147_constants,1L + +#define SN_INN "INN" +#define LN_INN "INN" +#define NID_INN 1004 +#define OBJ_INN OBJ_member_body,643L,3L,131L,1L,1L + +#define SN_OGRN "OGRN" +#define LN_OGRN "OGRN" +#define NID_OGRN 1005 +#define OBJ_OGRN OBJ_member_body,643L,100L,1L + +#define SN_SNILS "SNILS" +#define LN_SNILS "SNILS" +#define NID_SNILS 1006 +#define OBJ_SNILS OBJ_member_body,643L,100L,3L + +#define SN_subjectSignTool "subjectSignTool" +#define LN_subjectSignTool "Signing Tool of Subject" +#define NID_subjectSignTool 1007 +#define OBJ_subjectSignTool OBJ_member_body,643L,100L,111L + +#define SN_issuerSignTool "issuerSignTool" +#define LN_issuerSignTool "Signing Tool of Issuer" +#define NID_issuerSignTool 1008 +#define OBJ_issuerSignTool OBJ_member_body,643L,100L,112L + +#define SN_grasshopper_ecb "grasshopper-ecb" +#define NID_grasshopper_ecb 1012 + +#define SN_grasshopper_ctr "grasshopper-ctr" +#define NID_grasshopper_ctr 1013 + +#define SN_grasshopper_ofb "grasshopper-ofb" +#define NID_grasshopper_ofb 1014 + +#define SN_grasshopper_cbc "grasshopper-cbc" +#define NID_grasshopper_cbc 1015 + +#define SN_grasshopper_cfb "grasshopper-cfb" +#define NID_grasshopper_cfb 1016 + +#define SN_grasshopper_mac "grasshopper-mac" +#define NID_grasshopper_mac 1017 + +#define SN_magma_ecb "magma-ecb" +#define NID_magma_ecb 1187 + +#define SN_magma_ctr "magma-ctr" +#define NID_magma_ctr 1188 + +#define SN_magma_ofb "magma-ofb" +#define NID_magma_ofb 1189 + +#define SN_magma_cbc "magma-cbc" +#define NID_magma_cbc 1190 + +#define SN_magma_cfb "magma-cfb" +#define NID_magma_cfb 1191 + +#define SN_magma_mac "magma-mac" +#define NID_magma_mac 1192 + +#define SN_camellia_128_cbc "CAMELLIA-128-CBC" +#define LN_camellia_128_cbc "camellia-128-cbc" +#define NID_camellia_128_cbc 751 +#define OBJ_camellia_128_cbc 1L,2L,392L,200011L,61L,1L,1L,1L,2L + +#define SN_camellia_192_cbc "CAMELLIA-192-CBC" +#define LN_camellia_192_cbc "camellia-192-cbc" +#define NID_camellia_192_cbc 752 +#define OBJ_camellia_192_cbc 1L,2L,392L,200011L,61L,1L,1L,1L,3L + +#define SN_camellia_256_cbc "CAMELLIA-256-CBC" +#define LN_camellia_256_cbc "camellia-256-cbc" +#define NID_camellia_256_cbc 753 +#define OBJ_camellia_256_cbc 1L,2L,392L,200011L,61L,1L,1L,1L,4L + +#define SN_id_camellia128_wrap "id-camellia128-wrap" +#define NID_id_camellia128_wrap 907 +#define OBJ_id_camellia128_wrap 1L,2L,392L,200011L,61L,1L,1L,3L,2L + +#define SN_id_camellia192_wrap "id-camellia192-wrap" +#define NID_id_camellia192_wrap 908 +#define OBJ_id_camellia192_wrap 1L,2L,392L,200011L,61L,1L,1L,3L,3L + +#define SN_id_camellia256_wrap "id-camellia256-wrap" +#define NID_id_camellia256_wrap 909 +#define OBJ_id_camellia256_wrap 1L,2L,392L,200011L,61L,1L,1L,3L,4L + +#define OBJ_ntt_ds 0L,3L,4401L,5L + +#define OBJ_camellia OBJ_ntt_ds,3L,1L,9L + +#define SN_camellia_128_ecb "CAMELLIA-128-ECB" +#define LN_camellia_128_ecb "camellia-128-ecb" +#define NID_camellia_128_ecb 754 +#define OBJ_camellia_128_ecb OBJ_camellia,1L + +#define SN_camellia_128_ofb128 "CAMELLIA-128-OFB" +#define LN_camellia_128_ofb128 "camellia-128-ofb" +#define NID_camellia_128_ofb128 766 +#define OBJ_camellia_128_ofb128 OBJ_camellia,3L + +#define SN_camellia_128_cfb128 "CAMELLIA-128-CFB" +#define LN_camellia_128_cfb128 "camellia-128-cfb" +#define NID_camellia_128_cfb128 757 +#define OBJ_camellia_128_cfb128 OBJ_camellia,4L + +#define SN_camellia_128_gcm "CAMELLIA-128-GCM" +#define LN_camellia_128_gcm "camellia-128-gcm" +#define NID_camellia_128_gcm 961 +#define OBJ_camellia_128_gcm OBJ_camellia,6L + +#define SN_camellia_128_ccm "CAMELLIA-128-CCM" +#define LN_camellia_128_ccm "camellia-128-ccm" +#define NID_camellia_128_ccm 962 +#define OBJ_camellia_128_ccm OBJ_camellia,7L + +#define SN_camellia_128_ctr "CAMELLIA-128-CTR" +#define LN_camellia_128_ctr "camellia-128-ctr" +#define NID_camellia_128_ctr 963 +#define OBJ_camellia_128_ctr OBJ_camellia,9L + +#define SN_camellia_128_cmac "CAMELLIA-128-CMAC" +#define LN_camellia_128_cmac "camellia-128-cmac" +#define NID_camellia_128_cmac 964 +#define OBJ_camellia_128_cmac OBJ_camellia,10L + +#define SN_camellia_192_ecb "CAMELLIA-192-ECB" +#define LN_camellia_192_ecb "camellia-192-ecb" +#define NID_camellia_192_ecb 755 +#define OBJ_camellia_192_ecb OBJ_camellia,21L + +#define SN_camellia_192_ofb128 "CAMELLIA-192-OFB" +#define LN_camellia_192_ofb128 "camellia-192-ofb" +#define NID_camellia_192_ofb128 767 +#define OBJ_camellia_192_ofb128 OBJ_camellia,23L + +#define SN_camellia_192_cfb128 "CAMELLIA-192-CFB" +#define LN_camellia_192_cfb128 "camellia-192-cfb" +#define NID_camellia_192_cfb128 758 +#define OBJ_camellia_192_cfb128 OBJ_camellia,24L + +#define SN_camellia_192_gcm "CAMELLIA-192-GCM" +#define LN_camellia_192_gcm "camellia-192-gcm" +#define NID_camellia_192_gcm 965 +#define OBJ_camellia_192_gcm OBJ_camellia,26L + +#define SN_camellia_192_ccm "CAMELLIA-192-CCM" +#define LN_camellia_192_ccm "camellia-192-ccm" +#define NID_camellia_192_ccm 966 +#define OBJ_camellia_192_ccm OBJ_camellia,27L + +#define SN_camellia_192_ctr "CAMELLIA-192-CTR" +#define LN_camellia_192_ctr "camellia-192-ctr" +#define NID_camellia_192_ctr 967 +#define OBJ_camellia_192_ctr OBJ_camellia,29L + +#define SN_camellia_192_cmac "CAMELLIA-192-CMAC" +#define LN_camellia_192_cmac "camellia-192-cmac" +#define NID_camellia_192_cmac 968 +#define OBJ_camellia_192_cmac OBJ_camellia,30L + +#define SN_camellia_256_ecb "CAMELLIA-256-ECB" +#define LN_camellia_256_ecb "camellia-256-ecb" +#define NID_camellia_256_ecb 756 +#define OBJ_camellia_256_ecb OBJ_camellia,41L + +#define SN_camellia_256_ofb128 "CAMELLIA-256-OFB" +#define LN_camellia_256_ofb128 "camellia-256-ofb" +#define NID_camellia_256_ofb128 768 +#define OBJ_camellia_256_ofb128 OBJ_camellia,43L + +#define SN_camellia_256_cfb128 "CAMELLIA-256-CFB" +#define LN_camellia_256_cfb128 "camellia-256-cfb" +#define NID_camellia_256_cfb128 759 +#define OBJ_camellia_256_cfb128 OBJ_camellia,44L + +#define SN_camellia_256_gcm "CAMELLIA-256-GCM" +#define LN_camellia_256_gcm "camellia-256-gcm" +#define NID_camellia_256_gcm 969 +#define OBJ_camellia_256_gcm OBJ_camellia,46L + +#define SN_camellia_256_ccm "CAMELLIA-256-CCM" +#define LN_camellia_256_ccm "camellia-256-ccm" +#define NID_camellia_256_ccm 970 +#define OBJ_camellia_256_ccm OBJ_camellia,47L + +#define SN_camellia_256_ctr "CAMELLIA-256-CTR" +#define LN_camellia_256_ctr "camellia-256-ctr" +#define NID_camellia_256_ctr 971 +#define OBJ_camellia_256_ctr OBJ_camellia,49L + +#define SN_camellia_256_cmac "CAMELLIA-256-CMAC" +#define LN_camellia_256_cmac "camellia-256-cmac" +#define NID_camellia_256_cmac 972 +#define OBJ_camellia_256_cmac OBJ_camellia,50L + +#define SN_camellia_128_cfb1 "CAMELLIA-128-CFB1" +#define LN_camellia_128_cfb1 "camellia-128-cfb1" +#define NID_camellia_128_cfb1 760 + +#define SN_camellia_192_cfb1 "CAMELLIA-192-CFB1" +#define LN_camellia_192_cfb1 "camellia-192-cfb1" +#define NID_camellia_192_cfb1 761 + +#define SN_camellia_256_cfb1 "CAMELLIA-256-CFB1" +#define LN_camellia_256_cfb1 "camellia-256-cfb1" +#define NID_camellia_256_cfb1 762 + +#define SN_camellia_128_cfb8 "CAMELLIA-128-CFB8" +#define LN_camellia_128_cfb8 "camellia-128-cfb8" +#define NID_camellia_128_cfb8 763 + +#define SN_camellia_192_cfb8 "CAMELLIA-192-CFB8" +#define LN_camellia_192_cfb8 "camellia-192-cfb8" +#define NID_camellia_192_cfb8 764 + +#define SN_camellia_256_cfb8 "CAMELLIA-256-CFB8" +#define LN_camellia_256_cfb8 "camellia-256-cfb8" +#define NID_camellia_256_cfb8 765 + +#define OBJ_aria 1L,2L,410L,200046L,1L,1L + +#define SN_aria_128_ecb "ARIA-128-ECB" +#define LN_aria_128_ecb "aria-128-ecb" +#define NID_aria_128_ecb 1065 +#define OBJ_aria_128_ecb OBJ_aria,1L + +#define SN_aria_128_cbc "ARIA-128-CBC" +#define LN_aria_128_cbc "aria-128-cbc" +#define NID_aria_128_cbc 1066 +#define OBJ_aria_128_cbc OBJ_aria,2L + +#define SN_aria_128_cfb128 "ARIA-128-CFB" +#define LN_aria_128_cfb128 "aria-128-cfb" +#define NID_aria_128_cfb128 1067 +#define OBJ_aria_128_cfb128 OBJ_aria,3L + +#define SN_aria_128_ofb128 "ARIA-128-OFB" +#define LN_aria_128_ofb128 "aria-128-ofb" +#define NID_aria_128_ofb128 1068 +#define OBJ_aria_128_ofb128 OBJ_aria,4L + +#define SN_aria_128_ctr "ARIA-128-CTR" +#define LN_aria_128_ctr "aria-128-ctr" +#define NID_aria_128_ctr 1069 +#define OBJ_aria_128_ctr OBJ_aria,5L + +#define SN_aria_192_ecb "ARIA-192-ECB" +#define LN_aria_192_ecb "aria-192-ecb" +#define NID_aria_192_ecb 1070 +#define OBJ_aria_192_ecb OBJ_aria,6L + +#define SN_aria_192_cbc "ARIA-192-CBC" +#define LN_aria_192_cbc "aria-192-cbc" +#define NID_aria_192_cbc 1071 +#define OBJ_aria_192_cbc OBJ_aria,7L + +#define SN_aria_192_cfb128 "ARIA-192-CFB" +#define LN_aria_192_cfb128 "aria-192-cfb" +#define NID_aria_192_cfb128 1072 +#define OBJ_aria_192_cfb128 OBJ_aria,8L + +#define SN_aria_192_ofb128 "ARIA-192-OFB" +#define LN_aria_192_ofb128 "aria-192-ofb" +#define NID_aria_192_ofb128 1073 +#define OBJ_aria_192_ofb128 OBJ_aria,9L + +#define SN_aria_192_ctr "ARIA-192-CTR" +#define LN_aria_192_ctr "aria-192-ctr" +#define NID_aria_192_ctr 1074 +#define OBJ_aria_192_ctr OBJ_aria,10L + +#define SN_aria_256_ecb "ARIA-256-ECB" +#define LN_aria_256_ecb "aria-256-ecb" +#define NID_aria_256_ecb 1075 +#define OBJ_aria_256_ecb OBJ_aria,11L + +#define SN_aria_256_cbc "ARIA-256-CBC" +#define LN_aria_256_cbc "aria-256-cbc" +#define NID_aria_256_cbc 1076 +#define OBJ_aria_256_cbc OBJ_aria,12L + +#define SN_aria_256_cfb128 "ARIA-256-CFB" +#define LN_aria_256_cfb128 "aria-256-cfb" +#define NID_aria_256_cfb128 1077 +#define OBJ_aria_256_cfb128 OBJ_aria,13L + +#define SN_aria_256_ofb128 "ARIA-256-OFB" +#define LN_aria_256_ofb128 "aria-256-ofb" +#define NID_aria_256_ofb128 1078 +#define OBJ_aria_256_ofb128 OBJ_aria,14L + +#define SN_aria_256_ctr "ARIA-256-CTR" +#define LN_aria_256_ctr "aria-256-ctr" +#define NID_aria_256_ctr 1079 +#define OBJ_aria_256_ctr OBJ_aria,15L + +#define SN_aria_128_cfb1 "ARIA-128-CFB1" +#define LN_aria_128_cfb1 "aria-128-cfb1" +#define NID_aria_128_cfb1 1080 + +#define SN_aria_192_cfb1 "ARIA-192-CFB1" +#define LN_aria_192_cfb1 "aria-192-cfb1" +#define NID_aria_192_cfb1 1081 + +#define SN_aria_256_cfb1 "ARIA-256-CFB1" +#define LN_aria_256_cfb1 "aria-256-cfb1" +#define NID_aria_256_cfb1 1082 + +#define SN_aria_128_cfb8 "ARIA-128-CFB8" +#define LN_aria_128_cfb8 "aria-128-cfb8" +#define NID_aria_128_cfb8 1083 + +#define SN_aria_192_cfb8 "ARIA-192-CFB8" +#define LN_aria_192_cfb8 "aria-192-cfb8" +#define NID_aria_192_cfb8 1084 + +#define SN_aria_256_cfb8 "ARIA-256-CFB8" +#define LN_aria_256_cfb8 "aria-256-cfb8" +#define NID_aria_256_cfb8 1085 + +#define SN_aria_128_ccm "ARIA-128-CCM" +#define LN_aria_128_ccm "aria-128-ccm" +#define NID_aria_128_ccm 1120 +#define OBJ_aria_128_ccm OBJ_aria,37L + +#define SN_aria_192_ccm "ARIA-192-CCM" +#define LN_aria_192_ccm "aria-192-ccm" +#define NID_aria_192_ccm 1121 +#define OBJ_aria_192_ccm OBJ_aria,38L + +#define SN_aria_256_ccm "ARIA-256-CCM" +#define LN_aria_256_ccm "aria-256-ccm" +#define NID_aria_256_ccm 1122 +#define OBJ_aria_256_ccm OBJ_aria,39L + +#define SN_aria_128_gcm "ARIA-128-GCM" +#define LN_aria_128_gcm "aria-128-gcm" +#define NID_aria_128_gcm 1123 +#define OBJ_aria_128_gcm OBJ_aria,34L + +#define SN_aria_192_gcm "ARIA-192-GCM" +#define LN_aria_192_gcm "aria-192-gcm" +#define NID_aria_192_gcm 1124 +#define OBJ_aria_192_gcm OBJ_aria,35L + +#define SN_aria_256_gcm "ARIA-256-GCM" +#define LN_aria_256_gcm "aria-256-gcm" +#define NID_aria_256_gcm 1125 +#define OBJ_aria_256_gcm OBJ_aria,36L + +#define SN_kisa "KISA" +#define LN_kisa "kisa" +#define NID_kisa 773 +#define OBJ_kisa OBJ_member_body,410L,200004L + +#define SN_seed_ecb "SEED-ECB" +#define LN_seed_ecb "seed-ecb" +#define NID_seed_ecb 776 +#define OBJ_seed_ecb OBJ_kisa,1L,3L + +#define SN_seed_cbc "SEED-CBC" +#define LN_seed_cbc "seed-cbc" +#define NID_seed_cbc 777 +#define OBJ_seed_cbc OBJ_kisa,1L,4L + +#define SN_seed_cfb128 "SEED-CFB" +#define LN_seed_cfb128 "seed-cfb" +#define NID_seed_cfb128 779 +#define OBJ_seed_cfb128 OBJ_kisa,1L,5L + +#define SN_seed_ofb128 "SEED-OFB" +#define LN_seed_ofb128 "seed-ofb" +#define NID_seed_ofb128 778 +#define OBJ_seed_ofb128 OBJ_kisa,1L,6L + +#define SN_sm4_ecb "SM4-ECB" +#define LN_sm4_ecb "sm4-ecb" +#define NID_sm4_ecb 1133 +#define OBJ_sm4_ecb OBJ_sm_scheme,104L,1L + +#define SN_sm4_cbc "SM4-CBC" +#define LN_sm4_cbc "sm4-cbc" +#define NID_sm4_cbc 1134 +#define OBJ_sm4_cbc OBJ_sm_scheme,104L,2L + +#define SN_sm4_ofb128 "SM4-OFB" +#define LN_sm4_ofb128 "sm4-ofb" +#define NID_sm4_ofb128 1135 +#define OBJ_sm4_ofb128 OBJ_sm_scheme,104L,3L + +#define SN_sm4_cfb128 "SM4-CFB" +#define LN_sm4_cfb128 "sm4-cfb" +#define NID_sm4_cfb128 1137 +#define OBJ_sm4_cfb128 OBJ_sm_scheme,104L,4L + +#define SN_sm4_cfb1 "SM4-CFB1" +#define LN_sm4_cfb1 "sm4-cfb1" +#define NID_sm4_cfb1 1136 +#define OBJ_sm4_cfb1 OBJ_sm_scheme,104L,5L + +#define SN_sm4_cfb8 "SM4-CFB8" +#define LN_sm4_cfb8 "sm4-cfb8" +#define NID_sm4_cfb8 1138 +#define OBJ_sm4_cfb8 OBJ_sm_scheme,104L,6L + +#define SN_sm4_ctr "SM4-CTR" +#define LN_sm4_ctr "sm4-ctr" +#define NID_sm4_ctr 1139 +#define OBJ_sm4_ctr OBJ_sm_scheme,104L,7L + +#define SN_hmac "HMAC" +#define LN_hmac "hmac" +#define NID_hmac 855 + +#define SN_cmac "CMAC" +#define LN_cmac "cmac" +#define NID_cmac 894 + +#define SN_rc4_hmac_md5 "RC4-HMAC-MD5" +#define LN_rc4_hmac_md5 "rc4-hmac-md5" +#define NID_rc4_hmac_md5 915 + +#define SN_aes_128_cbc_hmac_sha1 "AES-128-CBC-HMAC-SHA1" +#define LN_aes_128_cbc_hmac_sha1 "aes-128-cbc-hmac-sha1" +#define NID_aes_128_cbc_hmac_sha1 916 + +#define SN_aes_192_cbc_hmac_sha1 "AES-192-CBC-HMAC-SHA1" +#define LN_aes_192_cbc_hmac_sha1 "aes-192-cbc-hmac-sha1" +#define NID_aes_192_cbc_hmac_sha1 917 + +#define SN_aes_256_cbc_hmac_sha1 "AES-256-CBC-HMAC-SHA1" +#define LN_aes_256_cbc_hmac_sha1 "aes-256-cbc-hmac-sha1" +#define NID_aes_256_cbc_hmac_sha1 918 + +#define SN_aes_128_cbc_hmac_sha256 "AES-128-CBC-HMAC-SHA256" +#define LN_aes_128_cbc_hmac_sha256 "aes-128-cbc-hmac-sha256" +#define NID_aes_128_cbc_hmac_sha256 948 + +#define SN_aes_192_cbc_hmac_sha256 "AES-192-CBC-HMAC-SHA256" +#define LN_aes_192_cbc_hmac_sha256 "aes-192-cbc-hmac-sha256" +#define NID_aes_192_cbc_hmac_sha256 949 + +#define SN_aes_256_cbc_hmac_sha256 "AES-256-CBC-HMAC-SHA256" +#define LN_aes_256_cbc_hmac_sha256 "aes-256-cbc-hmac-sha256" +#define NID_aes_256_cbc_hmac_sha256 950 + +#define SN_chacha20_poly1305 "ChaCha20-Poly1305" +#define LN_chacha20_poly1305 "chacha20-poly1305" +#define NID_chacha20_poly1305 1018 + +#define SN_chacha20 "ChaCha20" +#define LN_chacha20 "chacha20" +#define NID_chacha20 1019 + +#define SN_dhpublicnumber "dhpublicnumber" +#define LN_dhpublicnumber "X9.42 DH" +#define NID_dhpublicnumber 920 +#define OBJ_dhpublicnumber OBJ_ISO_US,10046L,2L,1L + +#define SN_brainpoolP160r1 "brainpoolP160r1" +#define NID_brainpoolP160r1 921 +#define OBJ_brainpoolP160r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,1L + +#define SN_brainpoolP160t1 "brainpoolP160t1" +#define NID_brainpoolP160t1 922 +#define OBJ_brainpoolP160t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,2L + +#define SN_brainpoolP192r1 "brainpoolP192r1" +#define NID_brainpoolP192r1 923 +#define OBJ_brainpoolP192r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,3L + +#define SN_brainpoolP192t1 "brainpoolP192t1" +#define NID_brainpoolP192t1 924 +#define OBJ_brainpoolP192t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,4L + +#define SN_brainpoolP224r1 "brainpoolP224r1" +#define NID_brainpoolP224r1 925 +#define OBJ_brainpoolP224r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,5L + +#define SN_brainpoolP224t1 "brainpoolP224t1" +#define NID_brainpoolP224t1 926 +#define OBJ_brainpoolP224t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,6L + +#define SN_brainpoolP256r1 "brainpoolP256r1" +#define NID_brainpoolP256r1 927 +#define OBJ_brainpoolP256r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,7L + +#define SN_brainpoolP256t1 "brainpoolP256t1" +#define NID_brainpoolP256t1 928 +#define OBJ_brainpoolP256t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,8L + +#define SN_brainpoolP320r1 "brainpoolP320r1" +#define NID_brainpoolP320r1 929 +#define OBJ_brainpoolP320r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,9L + +#define SN_brainpoolP320t1 "brainpoolP320t1" +#define NID_brainpoolP320t1 930 +#define OBJ_brainpoolP320t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,10L + +#define SN_brainpoolP384r1 "brainpoolP384r1" +#define NID_brainpoolP384r1 931 +#define OBJ_brainpoolP384r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,11L + +#define SN_brainpoolP384t1 "brainpoolP384t1" +#define NID_brainpoolP384t1 932 +#define OBJ_brainpoolP384t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,12L + +#define SN_brainpoolP512r1 "brainpoolP512r1" +#define NID_brainpoolP512r1 933 +#define OBJ_brainpoolP512r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,13L + +#define SN_brainpoolP512t1 "brainpoolP512t1" +#define NID_brainpoolP512t1 934 +#define OBJ_brainpoolP512t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,14L + +#define OBJ_x9_63_scheme 1L,3L,133L,16L,840L,63L,0L + +#define OBJ_secg_scheme OBJ_certicom_arc,1L + +#define SN_dhSinglePass_stdDH_sha1kdf_scheme "dhSinglePass-stdDH-sha1kdf-scheme" +#define NID_dhSinglePass_stdDH_sha1kdf_scheme 936 +#define OBJ_dhSinglePass_stdDH_sha1kdf_scheme OBJ_x9_63_scheme,2L + +#define SN_dhSinglePass_stdDH_sha224kdf_scheme "dhSinglePass-stdDH-sha224kdf-scheme" +#define NID_dhSinglePass_stdDH_sha224kdf_scheme 937 +#define OBJ_dhSinglePass_stdDH_sha224kdf_scheme OBJ_secg_scheme,11L,0L + +#define SN_dhSinglePass_stdDH_sha256kdf_scheme "dhSinglePass-stdDH-sha256kdf-scheme" +#define NID_dhSinglePass_stdDH_sha256kdf_scheme 938 +#define OBJ_dhSinglePass_stdDH_sha256kdf_scheme OBJ_secg_scheme,11L,1L + +#define SN_dhSinglePass_stdDH_sha384kdf_scheme "dhSinglePass-stdDH-sha384kdf-scheme" +#define NID_dhSinglePass_stdDH_sha384kdf_scheme 939 +#define OBJ_dhSinglePass_stdDH_sha384kdf_scheme OBJ_secg_scheme,11L,2L + +#define SN_dhSinglePass_stdDH_sha512kdf_scheme "dhSinglePass-stdDH-sha512kdf-scheme" +#define NID_dhSinglePass_stdDH_sha512kdf_scheme 940 +#define OBJ_dhSinglePass_stdDH_sha512kdf_scheme OBJ_secg_scheme,11L,3L + +#define SN_dhSinglePass_cofactorDH_sha1kdf_scheme "dhSinglePass-cofactorDH-sha1kdf-scheme" +#define NID_dhSinglePass_cofactorDH_sha1kdf_scheme 941 +#define OBJ_dhSinglePass_cofactorDH_sha1kdf_scheme OBJ_x9_63_scheme,3L + +#define SN_dhSinglePass_cofactorDH_sha224kdf_scheme "dhSinglePass-cofactorDH-sha224kdf-scheme" +#define NID_dhSinglePass_cofactorDH_sha224kdf_scheme 942 +#define OBJ_dhSinglePass_cofactorDH_sha224kdf_scheme OBJ_secg_scheme,14L,0L + +#define SN_dhSinglePass_cofactorDH_sha256kdf_scheme "dhSinglePass-cofactorDH-sha256kdf-scheme" +#define NID_dhSinglePass_cofactorDH_sha256kdf_scheme 943 +#define OBJ_dhSinglePass_cofactorDH_sha256kdf_scheme OBJ_secg_scheme,14L,1L + +#define SN_dhSinglePass_cofactorDH_sha384kdf_scheme "dhSinglePass-cofactorDH-sha384kdf-scheme" +#define NID_dhSinglePass_cofactorDH_sha384kdf_scheme 944 +#define OBJ_dhSinglePass_cofactorDH_sha384kdf_scheme OBJ_secg_scheme,14L,2L + +#define SN_dhSinglePass_cofactorDH_sha512kdf_scheme "dhSinglePass-cofactorDH-sha512kdf-scheme" +#define NID_dhSinglePass_cofactorDH_sha512kdf_scheme 945 +#define OBJ_dhSinglePass_cofactorDH_sha512kdf_scheme OBJ_secg_scheme,14L,3L + +#define SN_dh_std_kdf "dh-std-kdf" +#define NID_dh_std_kdf 946 + +#define SN_dh_cofactor_kdf "dh-cofactor-kdf" +#define NID_dh_cofactor_kdf 947 + +#define SN_ct_precert_scts "ct_precert_scts" +#define LN_ct_precert_scts "CT Precertificate SCTs" +#define NID_ct_precert_scts 951 +#define OBJ_ct_precert_scts 1L,3L,6L,1L,4L,1L,11129L,2L,4L,2L + +#define SN_ct_precert_poison "ct_precert_poison" +#define LN_ct_precert_poison "CT Precertificate Poison" +#define NID_ct_precert_poison 952 +#define OBJ_ct_precert_poison 1L,3L,6L,1L,4L,1L,11129L,2L,4L,3L + +#define SN_ct_precert_signer "ct_precert_signer" +#define LN_ct_precert_signer "CT Precertificate Signer" +#define NID_ct_precert_signer 953 +#define OBJ_ct_precert_signer 1L,3L,6L,1L,4L,1L,11129L,2L,4L,4L + +#define SN_ct_cert_scts "ct_cert_scts" +#define LN_ct_cert_scts "CT Certificate SCTs" +#define NID_ct_cert_scts 954 +#define OBJ_ct_cert_scts 1L,3L,6L,1L,4L,1L,11129L,2L,4L,5L + +#define SN_jurisdictionLocalityName "jurisdictionL" +#define LN_jurisdictionLocalityName "jurisdictionLocalityName" +#define NID_jurisdictionLocalityName 955 +#define OBJ_jurisdictionLocalityName 1L,3L,6L,1L,4L,1L,311L,60L,2L,1L,1L + +#define SN_jurisdictionStateOrProvinceName "jurisdictionST" +#define LN_jurisdictionStateOrProvinceName "jurisdictionStateOrProvinceName" +#define NID_jurisdictionStateOrProvinceName 956 +#define OBJ_jurisdictionStateOrProvinceName 1L,3L,6L,1L,4L,1L,311L,60L,2L,1L,2L + +#define SN_jurisdictionCountryName "jurisdictionC" +#define LN_jurisdictionCountryName "jurisdictionCountryName" +#define NID_jurisdictionCountryName 957 +#define OBJ_jurisdictionCountryName 1L,3L,6L,1L,4L,1L,311L,60L,2L,1L,3L + +#define SN_id_scrypt "id-scrypt" +#define LN_id_scrypt "scrypt" +#define NID_id_scrypt 973 +#define OBJ_id_scrypt 1L,3L,6L,1L,4L,1L,11591L,4L,11L + +#define SN_tls1_prf "TLS1-PRF" +#define LN_tls1_prf "tls1-prf" +#define NID_tls1_prf 1021 + +#define SN_hkdf "HKDF" +#define LN_hkdf "hkdf" +#define NID_hkdf 1036 + +#define SN_id_pkinit "id-pkinit" +#define NID_id_pkinit 1031 +#define OBJ_id_pkinit 1L,3L,6L,1L,5L,2L,3L + +#define SN_pkInitClientAuth "pkInitClientAuth" +#define LN_pkInitClientAuth "PKINIT Client Auth" +#define NID_pkInitClientAuth 1032 +#define OBJ_pkInitClientAuth OBJ_id_pkinit,4L + +#define SN_pkInitKDC "pkInitKDC" +#define LN_pkInitKDC "Signing KDC Response" +#define NID_pkInitKDC 1033 +#define OBJ_pkInitKDC OBJ_id_pkinit,5L + +#define SN_X25519 "X25519" +#define NID_X25519 1034 +#define OBJ_X25519 1L,3L,101L,110L + +#define SN_X448 "X448" +#define NID_X448 1035 +#define OBJ_X448 1L,3L,101L,111L + +#define SN_ED25519 "ED25519" +#define NID_ED25519 1087 +#define OBJ_ED25519 1L,3L,101L,112L + +#define SN_ED448 "ED448" +#define NID_ED448 1088 +#define OBJ_ED448 1L,3L,101L,113L + +#define SN_kx_rsa "KxRSA" +#define LN_kx_rsa "kx-rsa" +#define NID_kx_rsa 1037 + +#define SN_kx_ecdhe "KxECDHE" +#define LN_kx_ecdhe "kx-ecdhe" +#define NID_kx_ecdhe 1038 + +#define SN_kx_dhe "KxDHE" +#define LN_kx_dhe "kx-dhe" +#define NID_kx_dhe 1039 + +#define SN_kx_ecdhe_psk "KxECDHE-PSK" +#define LN_kx_ecdhe_psk "kx-ecdhe-psk" +#define NID_kx_ecdhe_psk 1040 + +#define SN_kx_dhe_psk "KxDHE-PSK" +#define LN_kx_dhe_psk "kx-dhe-psk" +#define NID_kx_dhe_psk 1041 + +#define SN_kx_rsa_psk "KxRSA_PSK" +#define LN_kx_rsa_psk "kx-rsa-psk" +#define NID_kx_rsa_psk 1042 + +#define SN_kx_psk "KxPSK" +#define LN_kx_psk "kx-psk" +#define NID_kx_psk 1043 + +#define SN_kx_srp "KxSRP" +#define LN_kx_srp "kx-srp" +#define NID_kx_srp 1044 + +#define SN_kx_gost "KxGOST" +#define LN_kx_gost "kx-gost" +#define NID_kx_gost 1045 + +#define SN_kx_any "KxANY" +#define LN_kx_any "kx-any" +#define NID_kx_any 1063 + +#define SN_auth_rsa "AuthRSA" +#define LN_auth_rsa "auth-rsa" +#define NID_auth_rsa 1046 + +#define SN_auth_ecdsa "AuthECDSA" +#define LN_auth_ecdsa "auth-ecdsa" +#define NID_auth_ecdsa 1047 + +#define SN_auth_psk "AuthPSK" +#define LN_auth_psk "auth-psk" +#define NID_auth_psk 1048 + +#define SN_auth_dss "AuthDSS" +#define LN_auth_dss "auth-dss" +#define NID_auth_dss 1049 + +#define SN_auth_gost01 "AuthGOST01" +#define LN_auth_gost01 "auth-gost01" +#define NID_auth_gost01 1050 + +#define SN_auth_gost12 "AuthGOST12" +#define LN_auth_gost12 "auth-gost12" +#define NID_auth_gost12 1051 + +#define SN_auth_srp "AuthSRP" +#define LN_auth_srp "auth-srp" +#define NID_auth_srp 1052 + +#define SN_auth_null "AuthNULL" +#define LN_auth_null "auth-null" +#define NID_auth_null 1053 + +#define SN_auth_any "AuthANY" +#define LN_auth_any "auth-any" +#define NID_auth_any 1064 + +#define SN_poly1305 "Poly1305" +#define LN_poly1305 "poly1305" +#define NID_poly1305 1061 + +#define SN_siphash "SipHash" +#define LN_siphash "siphash" +#define NID_siphash 1062 + +#define SN_ffdhe2048 "ffdhe2048" +#define NID_ffdhe2048 1126 + +#define SN_ffdhe3072 "ffdhe3072" +#define NID_ffdhe3072 1127 + +#define SN_ffdhe4096 "ffdhe4096" +#define NID_ffdhe4096 1128 + +#define SN_ffdhe6144 "ffdhe6144" +#define NID_ffdhe6144 1129 + +#define SN_ffdhe8192 "ffdhe8192" +#define NID_ffdhe8192 1130 + +#define SN_ISO_UA "ISO-UA" +#define NID_ISO_UA 1150 +#define OBJ_ISO_UA OBJ_member_body,804L + +#define SN_ua_pki "ua-pki" +#define NID_ua_pki 1151 +#define OBJ_ua_pki OBJ_ISO_UA,2L,1L,1L,1L + +#define SN_dstu28147 "dstu28147" +#define LN_dstu28147 "DSTU Gost 28147-2009" +#define NID_dstu28147 1152 +#define OBJ_dstu28147 OBJ_ua_pki,1L,1L,1L + +#define SN_dstu28147_ofb "dstu28147-ofb" +#define LN_dstu28147_ofb "DSTU Gost 28147-2009 OFB mode" +#define NID_dstu28147_ofb 1153 +#define OBJ_dstu28147_ofb OBJ_dstu28147,2L + +#define SN_dstu28147_cfb "dstu28147-cfb" +#define LN_dstu28147_cfb "DSTU Gost 28147-2009 CFB mode" +#define NID_dstu28147_cfb 1154 +#define OBJ_dstu28147_cfb OBJ_dstu28147,3L + +#define SN_dstu28147_wrap "dstu28147-wrap" +#define LN_dstu28147_wrap "DSTU Gost 28147-2009 key wrap" +#define NID_dstu28147_wrap 1155 +#define OBJ_dstu28147_wrap OBJ_dstu28147,5L + +#define SN_hmacWithDstu34311 "hmacWithDstu34311" +#define LN_hmacWithDstu34311 "HMAC DSTU Gost 34311-95" +#define NID_hmacWithDstu34311 1156 +#define OBJ_hmacWithDstu34311 OBJ_ua_pki,1L,1L,2L + +#define SN_dstu34311 "dstu34311" +#define LN_dstu34311 "DSTU Gost 34311-95" +#define NID_dstu34311 1157 +#define OBJ_dstu34311 OBJ_ua_pki,1L,2L,1L + +#define SN_dstu4145le "dstu4145le" +#define LN_dstu4145le "DSTU 4145-2002 little endian" +#define NID_dstu4145le 1158 +#define OBJ_dstu4145le OBJ_ua_pki,1L,3L,1L,1L + +#define SN_dstu4145be "dstu4145be" +#define LN_dstu4145be "DSTU 4145-2002 big endian" +#define NID_dstu4145be 1159 +#define OBJ_dstu4145be OBJ_dstu4145le,1L,1L + +#define SN_uacurve0 "uacurve0" +#define LN_uacurve0 "DSTU curve 0" +#define NID_uacurve0 1160 +#define OBJ_uacurve0 OBJ_dstu4145le,2L,0L + +#define SN_uacurve1 "uacurve1" +#define LN_uacurve1 "DSTU curve 1" +#define NID_uacurve1 1161 +#define OBJ_uacurve1 OBJ_dstu4145le,2L,1L + +#define SN_uacurve2 "uacurve2" +#define LN_uacurve2 "DSTU curve 2" +#define NID_uacurve2 1162 +#define OBJ_uacurve2 OBJ_dstu4145le,2L,2L + +#define SN_uacurve3 "uacurve3" +#define LN_uacurve3 "DSTU curve 3" +#define NID_uacurve3 1163 +#define OBJ_uacurve3 OBJ_dstu4145le,2L,3L + +#define SN_uacurve4 "uacurve4" +#define LN_uacurve4 "DSTU curve 4" +#define NID_uacurve4 1164 +#define OBJ_uacurve4 OBJ_dstu4145le,2L,4L + +#define SN_uacurve5 "uacurve5" +#define LN_uacurve5 "DSTU curve 5" +#define NID_uacurve5 1165 +#define OBJ_uacurve5 OBJ_dstu4145le,2L,5L + +#define SN_uacurve6 "uacurve6" +#define LN_uacurve6 "DSTU curve 6" +#define NID_uacurve6 1166 +#define OBJ_uacurve6 OBJ_dstu4145le,2L,6L + +#define SN_uacurve7 "uacurve7" +#define LN_uacurve7 "DSTU curve 7" +#define NID_uacurve7 1167 +#define OBJ_uacurve7 OBJ_dstu4145le,2L,7L + +#define SN_uacurve8 "uacurve8" +#define LN_uacurve8 "DSTU curve 8" +#define NID_uacurve8 1168 +#define OBJ_uacurve8 OBJ_dstu4145le,2L,8L + +#define SN_uacurve9 "uacurve9" +#define LN_uacurve9 "DSTU curve 9" +#define NID_uacurve9 1169 +#define OBJ_uacurve9 OBJ_dstu4145le,2L,9L diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/objects.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/objects.h new file mode 100644 index 00000000..5e8b5762 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/objects.h @@ -0,0 +1,175 @@ +/* + * Copyright 1995-2018 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_OBJECTS_H +# define HEADER_OBJECTS_H + +# include +# include +# include +# include + +# define OBJ_NAME_TYPE_UNDEF 0x00 +# define OBJ_NAME_TYPE_MD_METH 0x01 +# define OBJ_NAME_TYPE_CIPHER_METH 0x02 +# define OBJ_NAME_TYPE_PKEY_METH 0x03 +# define OBJ_NAME_TYPE_COMP_METH 0x04 +# define OBJ_NAME_TYPE_NUM 0x05 + +# define OBJ_NAME_ALIAS 0x8000 + +# define OBJ_BSEARCH_VALUE_ON_NOMATCH 0x01 +# define OBJ_BSEARCH_FIRST_VALUE_ON_MATCH 0x02 + + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct obj_name_st { + int type; + int alias; + const char *name; + const char *data; +} OBJ_NAME; + +# define OBJ_create_and_add_object(a,b,c) OBJ_create(a,b,c) + +int OBJ_NAME_init(void); +int OBJ_NAME_new_index(unsigned long (*hash_func) (const char *), + int (*cmp_func) (const char *, const char *), + void (*free_func) (const char *, int, const char *)); +const char *OBJ_NAME_get(const char *name, int type); +int OBJ_NAME_add(const char *name, int type, const char *data); +int OBJ_NAME_remove(const char *name, int type); +void OBJ_NAME_cleanup(int type); /* -1 for everything */ +void OBJ_NAME_do_all(int type, void (*fn) (const OBJ_NAME *, void *arg), + void *arg); +void OBJ_NAME_do_all_sorted(int type, + void (*fn) (const OBJ_NAME *, void *arg), + void *arg); + +ASN1_OBJECT *OBJ_dup(const ASN1_OBJECT *o); +ASN1_OBJECT *OBJ_nid2obj(int n); +const char *OBJ_nid2ln(int n); +const char *OBJ_nid2sn(int n); +int OBJ_obj2nid(const ASN1_OBJECT *o); +ASN1_OBJECT *OBJ_txt2obj(const char *s, int no_name); +int OBJ_obj2txt(char *buf, int buf_len, const ASN1_OBJECT *a, int no_name); +int OBJ_txt2nid(const char *s); +int OBJ_ln2nid(const char *s); +int OBJ_sn2nid(const char *s); +int OBJ_cmp(const ASN1_OBJECT *a, const ASN1_OBJECT *b); +const void *OBJ_bsearch_(const void *key, const void *base, int num, int size, + int (*cmp) (const void *, const void *)); +const void *OBJ_bsearch_ex_(const void *key, const void *base, int num, + int size, + int (*cmp) (const void *, const void *), + int flags); + +# define _DECLARE_OBJ_BSEARCH_CMP_FN(scope, type1, type2, nm) \ + static int nm##_cmp_BSEARCH_CMP_FN(const void *, const void *); \ + static int nm##_cmp(type1 const *, type2 const *); \ + scope type2 * OBJ_bsearch_##nm(type1 *key, type2 const *base, int num) + +# define DECLARE_OBJ_BSEARCH_CMP_FN(type1, type2, cmp) \ + _DECLARE_OBJ_BSEARCH_CMP_FN(static, type1, type2, cmp) +# define DECLARE_OBJ_BSEARCH_GLOBAL_CMP_FN(type1, type2, nm) \ + type2 * OBJ_bsearch_##nm(type1 *key, type2 const *base, int num) + +/*- + * Unsolved problem: if a type is actually a pointer type, like + * nid_triple is, then its impossible to get a const where you need + * it. Consider: + * + * typedef int nid_triple[3]; + * const void *a_; + * const nid_triple const *a = a_; + * + * The assignment discards a const because what you really want is: + * + * const int const * const *a = a_; + * + * But if you do that, you lose the fact that a is an array of 3 ints, + * which breaks comparison functions. + * + * Thus we end up having to cast, sadly, or unpack the + * declarations. Or, as I finally did in this case, declare nid_triple + * to be a struct, which it should have been in the first place. + * + * Ben, August 2008. + * + * Also, strictly speaking not all types need be const, but handling + * the non-constness means a lot of complication, and in practice + * comparison routines do always not touch their arguments. + */ + +# define IMPLEMENT_OBJ_BSEARCH_CMP_FN(type1, type2, nm) \ + static int nm##_cmp_BSEARCH_CMP_FN(const void *a_, const void *b_) \ + { \ + type1 const *a = a_; \ + type2 const *b = b_; \ + return nm##_cmp(a,b); \ + } \ + static type2 *OBJ_bsearch_##nm(type1 *key, type2 const *base, int num) \ + { \ + return (type2 *)OBJ_bsearch_(key, base, num, sizeof(type2), \ + nm##_cmp_BSEARCH_CMP_FN); \ + } \ + extern void dummy_prototype(void) + +# define IMPLEMENT_OBJ_BSEARCH_GLOBAL_CMP_FN(type1, type2, nm) \ + static int nm##_cmp_BSEARCH_CMP_FN(const void *a_, const void *b_) \ + { \ + type1 const *a = a_; \ + type2 const *b = b_; \ + return nm##_cmp(a,b); \ + } \ + type2 *OBJ_bsearch_##nm(type1 *key, type2 const *base, int num) \ + { \ + return (type2 *)OBJ_bsearch_(key, base, num, sizeof(type2), \ + nm##_cmp_BSEARCH_CMP_FN); \ + } \ + extern void dummy_prototype(void) + +# define OBJ_bsearch(type1,key,type2,base,num,cmp) \ + ((type2 *)OBJ_bsearch_(CHECKED_PTR_OF(type1,key),CHECKED_PTR_OF(type2,base), \ + num,sizeof(type2), \ + ((void)CHECKED_PTR_OF(type1,cmp##_type_1), \ + (void)CHECKED_PTR_OF(type2,cmp##_type_2), \ + cmp##_BSEARCH_CMP_FN))) + +# define OBJ_bsearch_ex(type1,key,type2,base,num,cmp,flags) \ + ((type2 *)OBJ_bsearch_ex_(CHECKED_PTR_OF(type1,key),CHECKED_PTR_OF(type2,base), \ + num,sizeof(type2), \ + ((void)CHECKED_PTR_OF(type1,cmp##_type_1), \ + (void)type_2=CHECKED_PTR_OF(type2,cmp##_type_2), \ + cmp##_BSEARCH_CMP_FN)),flags) + +int OBJ_new_nid(int num); +int OBJ_add_object(const ASN1_OBJECT *obj); +int OBJ_create(const char *oid, const char *sn, const char *ln); +#if OPENSSL_API_COMPAT < 0x10100000L +# define OBJ_cleanup() while(0) continue +#endif +int OBJ_create_objects(BIO *in); + +size_t OBJ_length(const ASN1_OBJECT *obj); +const unsigned char *OBJ_get0_data(const ASN1_OBJECT *obj); + +int OBJ_find_sigid_algs(int signid, int *pdig_nid, int *ppkey_nid); +int OBJ_find_sigid_by_algs(int *psignid, int dig_nid, int pkey_nid); +int OBJ_add_sigid(int signid, int dig_id, int pkey_id); +void OBJ_sigid_free(void); + + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/objectserr.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/objectserr.h new file mode 100644 index 00000000..02e166f1 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/objectserr.h @@ -0,0 +1,42 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2019 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_OBJERR_H +# define HEADER_OBJERR_H + +# ifndef HEADER_SYMHACKS_H +# include +# endif + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_OBJ_strings(void); + +/* + * OBJ function codes. + */ +# define OBJ_F_OBJ_ADD_OBJECT 105 +# define OBJ_F_OBJ_ADD_SIGID 107 +# define OBJ_F_OBJ_CREATE 100 +# define OBJ_F_OBJ_DUP 101 +# define OBJ_F_OBJ_NAME_NEW_INDEX 106 +# define OBJ_F_OBJ_NID2LN 102 +# define OBJ_F_OBJ_NID2OBJ 103 +# define OBJ_F_OBJ_NID2SN 104 +# define OBJ_F_OBJ_TXT2OBJ 108 + +/* + * OBJ reason codes. + */ +# define OBJ_R_OID_EXISTS 102 +# define OBJ_R_UNKNOWN_NID 101 + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ocsp.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ocsp.h new file mode 100644 index 00000000..4d759a49 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ocsp.h @@ -0,0 +1,352 @@ +/* + * Copyright 2000-2019 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_OCSP_H +# define HEADER_OCSP_H + +#include + +/* + * These definitions are outside the OPENSSL_NO_OCSP guard because although for + * historical reasons they have OCSP_* names, they can actually be used + * independently of OCSP. E.g. see RFC5280 + */ +/*- + * CRLReason ::= ENUMERATED { + * unspecified (0), + * keyCompromise (1), + * cACompromise (2), + * affiliationChanged (3), + * superseded (4), + * cessationOfOperation (5), + * certificateHold (6), + * removeFromCRL (8) } + */ +# define OCSP_REVOKED_STATUS_NOSTATUS -1 +# define OCSP_REVOKED_STATUS_UNSPECIFIED 0 +# define OCSP_REVOKED_STATUS_KEYCOMPROMISE 1 +# define OCSP_REVOKED_STATUS_CACOMPROMISE 2 +# define OCSP_REVOKED_STATUS_AFFILIATIONCHANGED 3 +# define OCSP_REVOKED_STATUS_SUPERSEDED 4 +# define OCSP_REVOKED_STATUS_CESSATIONOFOPERATION 5 +# define OCSP_REVOKED_STATUS_CERTIFICATEHOLD 6 +# define OCSP_REVOKED_STATUS_REMOVEFROMCRL 8 + + +# ifndef OPENSSL_NO_OCSP + +# include +# include +# include +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Various flags and values */ + +# define OCSP_DEFAULT_NONCE_LENGTH 16 + +# define OCSP_NOCERTS 0x1 +# define OCSP_NOINTERN 0x2 +# define OCSP_NOSIGS 0x4 +# define OCSP_NOCHAIN 0x8 +# define OCSP_NOVERIFY 0x10 +# define OCSP_NOEXPLICIT 0x20 +# define OCSP_NOCASIGN 0x40 +# define OCSP_NODELEGATED 0x80 +# define OCSP_NOCHECKS 0x100 +# define OCSP_TRUSTOTHER 0x200 +# define OCSP_RESPID_KEY 0x400 +# define OCSP_NOTIME 0x800 + +typedef struct ocsp_cert_id_st OCSP_CERTID; + +DEFINE_STACK_OF(OCSP_CERTID) + +typedef struct ocsp_one_request_st OCSP_ONEREQ; + +DEFINE_STACK_OF(OCSP_ONEREQ) + +typedef struct ocsp_req_info_st OCSP_REQINFO; +typedef struct ocsp_signature_st OCSP_SIGNATURE; +typedef struct ocsp_request_st OCSP_REQUEST; + +# define OCSP_RESPONSE_STATUS_SUCCESSFUL 0 +# define OCSP_RESPONSE_STATUS_MALFORMEDREQUEST 1 +# define OCSP_RESPONSE_STATUS_INTERNALERROR 2 +# define OCSP_RESPONSE_STATUS_TRYLATER 3 +# define OCSP_RESPONSE_STATUS_SIGREQUIRED 5 +# define OCSP_RESPONSE_STATUS_UNAUTHORIZED 6 + +typedef struct ocsp_resp_bytes_st OCSP_RESPBYTES; + +# define V_OCSP_RESPID_NAME 0 +# define V_OCSP_RESPID_KEY 1 + +DEFINE_STACK_OF(OCSP_RESPID) + +typedef struct ocsp_revoked_info_st OCSP_REVOKEDINFO; + +# define V_OCSP_CERTSTATUS_GOOD 0 +# define V_OCSP_CERTSTATUS_REVOKED 1 +# define V_OCSP_CERTSTATUS_UNKNOWN 2 + +typedef struct ocsp_cert_status_st OCSP_CERTSTATUS; +typedef struct ocsp_single_response_st OCSP_SINGLERESP; + +DEFINE_STACK_OF(OCSP_SINGLERESP) + +typedef struct ocsp_response_data_st OCSP_RESPDATA; + +typedef struct ocsp_basic_response_st OCSP_BASICRESP; + +typedef struct ocsp_crl_id_st OCSP_CRLID; +typedef struct ocsp_service_locator_st OCSP_SERVICELOC; + +# define PEM_STRING_OCSP_REQUEST "OCSP REQUEST" +# define PEM_STRING_OCSP_RESPONSE "OCSP RESPONSE" + +# define d2i_OCSP_REQUEST_bio(bp,p) ASN1_d2i_bio_of(OCSP_REQUEST,OCSP_REQUEST_new,d2i_OCSP_REQUEST,bp,p) + +# define d2i_OCSP_RESPONSE_bio(bp,p) ASN1_d2i_bio_of(OCSP_RESPONSE,OCSP_RESPONSE_new,d2i_OCSP_RESPONSE,bp,p) + +# define PEM_read_bio_OCSP_REQUEST(bp,x,cb) (OCSP_REQUEST *)PEM_ASN1_read_bio( \ + (char *(*)())d2i_OCSP_REQUEST,PEM_STRING_OCSP_REQUEST, \ + bp,(char **)(x),cb,NULL) + +# define PEM_read_bio_OCSP_RESPONSE(bp,x,cb) (OCSP_RESPONSE *)PEM_ASN1_read_bio(\ + (char *(*)())d2i_OCSP_RESPONSE,PEM_STRING_OCSP_RESPONSE, \ + bp,(char **)(x),cb,NULL) + +# define PEM_write_bio_OCSP_REQUEST(bp,o) \ + PEM_ASN1_write_bio((int (*)())i2d_OCSP_REQUEST,PEM_STRING_OCSP_REQUEST,\ + bp,(char *)(o), NULL,NULL,0,NULL,NULL) + +# define PEM_write_bio_OCSP_RESPONSE(bp,o) \ + PEM_ASN1_write_bio((int (*)())i2d_OCSP_RESPONSE,PEM_STRING_OCSP_RESPONSE,\ + bp,(char *)(o), NULL,NULL,0,NULL,NULL) + +# define i2d_OCSP_RESPONSE_bio(bp,o) ASN1_i2d_bio_of(OCSP_RESPONSE,i2d_OCSP_RESPONSE,bp,o) + +# define i2d_OCSP_REQUEST_bio(bp,o) ASN1_i2d_bio_of(OCSP_REQUEST,i2d_OCSP_REQUEST,bp,o) + +# define ASN1_BIT_STRING_digest(data,type,md,len) \ + ASN1_item_digest(ASN1_ITEM_rptr(ASN1_BIT_STRING),type,data,md,len) + +# define OCSP_CERTSTATUS_dup(cs)\ + (OCSP_CERTSTATUS*)ASN1_dup((int(*)())i2d_OCSP_CERTSTATUS,\ + (char *(*)())d2i_OCSP_CERTSTATUS,(char *)(cs)) + +OCSP_CERTID *OCSP_CERTID_dup(OCSP_CERTID *id); + +OCSP_RESPONSE *OCSP_sendreq_bio(BIO *b, const char *path, OCSP_REQUEST *req); +OCSP_REQ_CTX *OCSP_sendreq_new(BIO *io, const char *path, OCSP_REQUEST *req, + int maxline); +int OCSP_REQ_CTX_nbio(OCSP_REQ_CTX *rctx); +int OCSP_sendreq_nbio(OCSP_RESPONSE **presp, OCSP_REQ_CTX *rctx); +OCSP_REQ_CTX *OCSP_REQ_CTX_new(BIO *io, int maxline); +void OCSP_REQ_CTX_free(OCSP_REQ_CTX *rctx); +void OCSP_set_max_response_length(OCSP_REQ_CTX *rctx, unsigned long len); +int OCSP_REQ_CTX_i2d(OCSP_REQ_CTX *rctx, const ASN1_ITEM *it, + ASN1_VALUE *val); +int OCSP_REQ_CTX_nbio_d2i(OCSP_REQ_CTX *rctx, ASN1_VALUE **pval, + const ASN1_ITEM *it); +BIO *OCSP_REQ_CTX_get0_mem_bio(OCSP_REQ_CTX *rctx); +int OCSP_REQ_CTX_http(OCSP_REQ_CTX *rctx, const char *op, const char *path); +int OCSP_REQ_CTX_set1_req(OCSP_REQ_CTX *rctx, OCSP_REQUEST *req); +int OCSP_REQ_CTX_add1_header(OCSP_REQ_CTX *rctx, + const char *name, const char *value); + +OCSP_CERTID *OCSP_cert_to_id(const EVP_MD *dgst, const X509 *subject, + const X509 *issuer); + +OCSP_CERTID *OCSP_cert_id_new(const EVP_MD *dgst, + const X509_NAME *issuerName, + const ASN1_BIT_STRING *issuerKey, + const ASN1_INTEGER *serialNumber); + +OCSP_ONEREQ *OCSP_request_add0_id(OCSP_REQUEST *req, OCSP_CERTID *cid); + +int OCSP_request_add1_nonce(OCSP_REQUEST *req, unsigned char *val, int len); +int OCSP_basic_add1_nonce(OCSP_BASICRESP *resp, unsigned char *val, int len); +int OCSP_check_nonce(OCSP_REQUEST *req, OCSP_BASICRESP *bs); +int OCSP_copy_nonce(OCSP_BASICRESP *resp, OCSP_REQUEST *req); + +int OCSP_request_set1_name(OCSP_REQUEST *req, X509_NAME *nm); +int OCSP_request_add1_cert(OCSP_REQUEST *req, X509 *cert); + +int OCSP_request_sign(OCSP_REQUEST *req, + X509 *signer, + EVP_PKEY *key, + const EVP_MD *dgst, + STACK_OF(X509) *certs, unsigned long flags); + +int OCSP_response_status(OCSP_RESPONSE *resp); +OCSP_BASICRESP *OCSP_response_get1_basic(OCSP_RESPONSE *resp); + +const ASN1_OCTET_STRING *OCSP_resp_get0_signature(const OCSP_BASICRESP *bs); +const X509_ALGOR *OCSP_resp_get0_tbs_sigalg(const OCSP_BASICRESP *bs); +const OCSP_RESPDATA *OCSP_resp_get0_respdata(const OCSP_BASICRESP *bs); +int OCSP_resp_get0_signer(OCSP_BASICRESP *bs, X509 **signer, + STACK_OF(X509) *extra_certs); + +int OCSP_resp_count(OCSP_BASICRESP *bs); +OCSP_SINGLERESP *OCSP_resp_get0(OCSP_BASICRESP *bs, int idx); +const ASN1_GENERALIZEDTIME *OCSP_resp_get0_produced_at(const OCSP_BASICRESP* bs); +const STACK_OF(X509) *OCSP_resp_get0_certs(const OCSP_BASICRESP *bs); +int OCSP_resp_get0_id(const OCSP_BASICRESP *bs, + const ASN1_OCTET_STRING **pid, + const X509_NAME **pname); +int OCSP_resp_get1_id(const OCSP_BASICRESP *bs, + ASN1_OCTET_STRING **pid, + X509_NAME **pname); + +int OCSP_resp_find(OCSP_BASICRESP *bs, OCSP_CERTID *id, int last); +int OCSP_single_get0_status(OCSP_SINGLERESP *single, int *reason, + ASN1_GENERALIZEDTIME **revtime, + ASN1_GENERALIZEDTIME **thisupd, + ASN1_GENERALIZEDTIME **nextupd); +int OCSP_resp_find_status(OCSP_BASICRESP *bs, OCSP_CERTID *id, int *status, + int *reason, + ASN1_GENERALIZEDTIME **revtime, + ASN1_GENERALIZEDTIME **thisupd, + ASN1_GENERALIZEDTIME **nextupd); +int OCSP_check_validity(ASN1_GENERALIZEDTIME *thisupd, + ASN1_GENERALIZEDTIME *nextupd, long sec, long maxsec); + +int OCSP_request_verify(OCSP_REQUEST *req, STACK_OF(X509) *certs, + X509_STORE *store, unsigned long flags); + +int OCSP_parse_url(const char *url, char **phost, char **pport, char **ppath, + int *pssl); + +int OCSP_id_issuer_cmp(const OCSP_CERTID *a, const OCSP_CERTID *b); +int OCSP_id_cmp(const OCSP_CERTID *a, const OCSP_CERTID *b); + +int OCSP_request_onereq_count(OCSP_REQUEST *req); +OCSP_ONEREQ *OCSP_request_onereq_get0(OCSP_REQUEST *req, int i); +OCSP_CERTID *OCSP_onereq_get0_id(OCSP_ONEREQ *one); +int OCSP_id_get0_info(ASN1_OCTET_STRING **piNameHash, ASN1_OBJECT **pmd, + ASN1_OCTET_STRING **pikeyHash, + ASN1_INTEGER **pserial, OCSP_CERTID *cid); +int OCSP_request_is_signed(OCSP_REQUEST *req); +OCSP_RESPONSE *OCSP_response_create(int status, OCSP_BASICRESP *bs); +OCSP_SINGLERESP *OCSP_basic_add1_status(OCSP_BASICRESP *rsp, + OCSP_CERTID *cid, + int status, int reason, + ASN1_TIME *revtime, + ASN1_TIME *thisupd, + ASN1_TIME *nextupd); +int OCSP_basic_add1_cert(OCSP_BASICRESP *resp, X509 *cert); +int OCSP_basic_sign(OCSP_BASICRESP *brsp, + X509 *signer, EVP_PKEY *key, const EVP_MD *dgst, + STACK_OF(X509) *certs, unsigned long flags); +int OCSP_basic_sign_ctx(OCSP_BASICRESP *brsp, + X509 *signer, EVP_MD_CTX *ctx, + STACK_OF(X509) *certs, unsigned long flags); +int OCSP_RESPID_set_by_name(OCSP_RESPID *respid, X509 *cert); +int OCSP_RESPID_set_by_key(OCSP_RESPID *respid, X509 *cert); +int OCSP_RESPID_match(OCSP_RESPID *respid, X509 *cert); + +X509_EXTENSION *OCSP_crlID_new(const char *url, long *n, char *tim); + +X509_EXTENSION *OCSP_accept_responses_new(char **oids); + +X509_EXTENSION *OCSP_archive_cutoff_new(char *tim); + +X509_EXTENSION *OCSP_url_svcloc_new(X509_NAME *issuer, const char **urls); + +int OCSP_REQUEST_get_ext_count(OCSP_REQUEST *x); +int OCSP_REQUEST_get_ext_by_NID(OCSP_REQUEST *x, int nid, int lastpos); +int OCSP_REQUEST_get_ext_by_OBJ(OCSP_REQUEST *x, const ASN1_OBJECT *obj, + int lastpos); +int OCSP_REQUEST_get_ext_by_critical(OCSP_REQUEST *x, int crit, int lastpos); +X509_EXTENSION *OCSP_REQUEST_get_ext(OCSP_REQUEST *x, int loc); +X509_EXTENSION *OCSP_REQUEST_delete_ext(OCSP_REQUEST *x, int loc); +void *OCSP_REQUEST_get1_ext_d2i(OCSP_REQUEST *x, int nid, int *crit, + int *idx); +int OCSP_REQUEST_add1_ext_i2d(OCSP_REQUEST *x, int nid, void *value, int crit, + unsigned long flags); +int OCSP_REQUEST_add_ext(OCSP_REQUEST *x, X509_EXTENSION *ex, int loc); + +int OCSP_ONEREQ_get_ext_count(OCSP_ONEREQ *x); +int OCSP_ONEREQ_get_ext_by_NID(OCSP_ONEREQ *x, int nid, int lastpos); +int OCSP_ONEREQ_get_ext_by_OBJ(OCSP_ONEREQ *x, const ASN1_OBJECT *obj, int lastpos); +int OCSP_ONEREQ_get_ext_by_critical(OCSP_ONEREQ *x, int crit, int lastpos); +X509_EXTENSION *OCSP_ONEREQ_get_ext(OCSP_ONEREQ *x, int loc); +X509_EXTENSION *OCSP_ONEREQ_delete_ext(OCSP_ONEREQ *x, int loc); +void *OCSP_ONEREQ_get1_ext_d2i(OCSP_ONEREQ *x, int nid, int *crit, int *idx); +int OCSP_ONEREQ_add1_ext_i2d(OCSP_ONEREQ *x, int nid, void *value, int crit, + unsigned long flags); +int OCSP_ONEREQ_add_ext(OCSP_ONEREQ *x, X509_EXTENSION *ex, int loc); + +int OCSP_BASICRESP_get_ext_count(OCSP_BASICRESP *x); +int OCSP_BASICRESP_get_ext_by_NID(OCSP_BASICRESP *x, int nid, int lastpos); +int OCSP_BASICRESP_get_ext_by_OBJ(OCSP_BASICRESP *x, const ASN1_OBJECT *obj, + int lastpos); +int OCSP_BASICRESP_get_ext_by_critical(OCSP_BASICRESP *x, int crit, + int lastpos); +X509_EXTENSION *OCSP_BASICRESP_get_ext(OCSP_BASICRESP *x, int loc); +X509_EXTENSION *OCSP_BASICRESP_delete_ext(OCSP_BASICRESP *x, int loc); +void *OCSP_BASICRESP_get1_ext_d2i(OCSP_BASICRESP *x, int nid, int *crit, + int *idx); +int OCSP_BASICRESP_add1_ext_i2d(OCSP_BASICRESP *x, int nid, void *value, + int crit, unsigned long flags); +int OCSP_BASICRESP_add_ext(OCSP_BASICRESP *x, X509_EXTENSION *ex, int loc); + +int OCSP_SINGLERESP_get_ext_count(OCSP_SINGLERESP *x); +int OCSP_SINGLERESP_get_ext_by_NID(OCSP_SINGLERESP *x, int nid, int lastpos); +int OCSP_SINGLERESP_get_ext_by_OBJ(OCSP_SINGLERESP *x, const ASN1_OBJECT *obj, + int lastpos); +int OCSP_SINGLERESP_get_ext_by_critical(OCSP_SINGLERESP *x, int crit, + int lastpos); +X509_EXTENSION *OCSP_SINGLERESP_get_ext(OCSP_SINGLERESP *x, int loc); +X509_EXTENSION *OCSP_SINGLERESP_delete_ext(OCSP_SINGLERESP *x, int loc); +void *OCSP_SINGLERESP_get1_ext_d2i(OCSP_SINGLERESP *x, int nid, int *crit, + int *idx); +int OCSP_SINGLERESP_add1_ext_i2d(OCSP_SINGLERESP *x, int nid, void *value, + int crit, unsigned long flags); +int OCSP_SINGLERESP_add_ext(OCSP_SINGLERESP *x, X509_EXTENSION *ex, int loc); +const OCSP_CERTID *OCSP_SINGLERESP_get0_id(const OCSP_SINGLERESP *x); + +DECLARE_ASN1_FUNCTIONS(OCSP_SINGLERESP) +DECLARE_ASN1_FUNCTIONS(OCSP_CERTSTATUS) +DECLARE_ASN1_FUNCTIONS(OCSP_REVOKEDINFO) +DECLARE_ASN1_FUNCTIONS(OCSP_BASICRESP) +DECLARE_ASN1_FUNCTIONS(OCSP_RESPDATA) +DECLARE_ASN1_FUNCTIONS(OCSP_RESPID) +DECLARE_ASN1_FUNCTIONS(OCSP_RESPONSE) +DECLARE_ASN1_FUNCTIONS(OCSP_RESPBYTES) +DECLARE_ASN1_FUNCTIONS(OCSP_ONEREQ) +DECLARE_ASN1_FUNCTIONS(OCSP_CERTID) +DECLARE_ASN1_FUNCTIONS(OCSP_REQUEST) +DECLARE_ASN1_FUNCTIONS(OCSP_SIGNATURE) +DECLARE_ASN1_FUNCTIONS(OCSP_REQINFO) +DECLARE_ASN1_FUNCTIONS(OCSP_CRLID) +DECLARE_ASN1_FUNCTIONS(OCSP_SERVICELOC) + +const char *OCSP_response_status_str(long s); +const char *OCSP_cert_status_str(long s); +const char *OCSP_crl_reason_str(long s); + +int OCSP_REQUEST_print(BIO *bp, OCSP_REQUEST *a, unsigned long flags); +int OCSP_RESPONSE_print(BIO *bp, OCSP_RESPONSE *o, unsigned long flags); + +int OCSP_basic_verify(OCSP_BASICRESP *bs, STACK_OF(X509) *certs, + X509_STORE *st, unsigned long flags); + + +# ifdef __cplusplus +} +# endif +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ocsperr.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ocsperr.h new file mode 100644 index 00000000..8dd9e01a --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ocsperr.h @@ -0,0 +1,78 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2019 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_OCSPERR_H +# define HEADER_OCSPERR_H + +# ifndef HEADER_SYMHACKS_H +# include +# endif + +# include + +# ifndef OPENSSL_NO_OCSP + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_OCSP_strings(void); + +/* + * OCSP function codes. + */ +# define OCSP_F_D2I_OCSP_NONCE 102 +# define OCSP_F_OCSP_BASIC_ADD1_STATUS 103 +# define OCSP_F_OCSP_BASIC_SIGN 104 +# define OCSP_F_OCSP_BASIC_SIGN_CTX 119 +# define OCSP_F_OCSP_BASIC_VERIFY 105 +# define OCSP_F_OCSP_CERT_ID_NEW 101 +# define OCSP_F_OCSP_CHECK_DELEGATED 106 +# define OCSP_F_OCSP_CHECK_IDS 107 +# define OCSP_F_OCSP_CHECK_ISSUER 108 +# define OCSP_F_OCSP_CHECK_VALIDITY 115 +# define OCSP_F_OCSP_MATCH_ISSUERID 109 +# define OCSP_F_OCSP_PARSE_URL 114 +# define OCSP_F_OCSP_REQUEST_SIGN 110 +# define OCSP_F_OCSP_REQUEST_VERIFY 116 +# define OCSP_F_OCSP_RESPONSE_GET1_BASIC 111 +# define OCSP_F_PARSE_HTTP_LINE1 118 + +/* + * OCSP reason codes. + */ +# define OCSP_R_CERTIFICATE_VERIFY_ERROR 101 +# define OCSP_R_DIGEST_ERR 102 +# define OCSP_R_ERROR_IN_NEXTUPDATE_FIELD 122 +# define OCSP_R_ERROR_IN_THISUPDATE_FIELD 123 +# define OCSP_R_ERROR_PARSING_URL 121 +# define OCSP_R_MISSING_OCSPSIGNING_USAGE 103 +# define OCSP_R_NEXTUPDATE_BEFORE_THISUPDATE 124 +# define OCSP_R_NOT_BASIC_RESPONSE 104 +# define OCSP_R_NO_CERTIFICATES_IN_CHAIN 105 +# define OCSP_R_NO_RESPONSE_DATA 108 +# define OCSP_R_NO_REVOKED_TIME 109 +# define OCSP_R_NO_SIGNER_KEY 130 +# define OCSP_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE 110 +# define OCSP_R_REQUEST_NOT_SIGNED 128 +# define OCSP_R_RESPONSE_CONTAINS_NO_REVOCATION_DATA 111 +# define OCSP_R_ROOT_CA_NOT_TRUSTED 112 +# define OCSP_R_SERVER_RESPONSE_ERROR 114 +# define OCSP_R_SERVER_RESPONSE_PARSE_ERROR 115 +# define OCSP_R_SIGNATURE_FAILURE 117 +# define OCSP_R_SIGNER_CERTIFICATE_NOT_FOUND 118 +# define OCSP_R_STATUS_EXPIRED 125 +# define OCSP_R_STATUS_NOT_YET_VALID 126 +# define OCSP_R_STATUS_TOO_OLD 127 +# define OCSP_R_UNKNOWN_MESSAGE_DIGEST 119 +# define OCSP_R_UNKNOWN_NID 120 +# define OCSP_R_UNSUPPORTED_REQUESTORNAME_TYPE 129 + +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/opensslconf.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/opensslconf.h new file mode 100644 index 00000000..1b0705db --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/opensslconf.h @@ -0,0 +1,195 @@ +/* + * WARNING: do not edit! + * Generated by Makefile from include/openssl/opensslconf.h.in + * + * Copyright 2016-2018 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef OPENSSL_ALGORITHM_DEFINES +# error OPENSSL_ALGORITHM_DEFINES no longer supported +#endif + +/* + * OpenSSL was configured with the following options: + */ + +#ifndef OPENSSL_NO_MD2 +# define OPENSSL_NO_MD2 +#endif +#ifndef OPENSSL_NO_RC5 +# define OPENSSL_NO_RC5 +#endif +#ifndef OPENSSL_THREADS +# define OPENSSL_THREADS +#endif +#ifndef OPENSSL_RAND_SEED_OS +# define OPENSSL_RAND_SEED_OS +#endif +#ifndef OPENSSL_NO_AFALGENG +# define OPENSSL_NO_AFALGENG +#endif +#ifndef OPENSSL_NO_ASAN +# define OPENSSL_NO_ASAN +#endif +#ifndef OPENSSL_NO_CRYPTO_MDEBUG +# define OPENSSL_NO_CRYPTO_MDEBUG +#endif +#ifndef OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE +# define OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE +#endif +#ifndef OPENSSL_NO_DEVCRYPTOENG +# define OPENSSL_NO_DEVCRYPTOENG +#endif +#ifndef OPENSSL_NO_EC_NISTP_64_GCC_128 +# define OPENSSL_NO_EC_NISTP_64_GCC_128 +#endif +#ifndef OPENSSL_NO_EGD +# define OPENSSL_NO_EGD +#endif +#ifndef OPENSSL_NO_EXTERNAL_TESTS +# define OPENSSL_NO_EXTERNAL_TESTS +#endif +#ifndef OPENSSL_NO_FUZZ_AFL +# define OPENSSL_NO_FUZZ_AFL +#endif +#ifndef OPENSSL_NO_FUZZ_LIBFUZZER +# define OPENSSL_NO_FUZZ_LIBFUZZER +#endif +#ifndef OPENSSL_NO_HEARTBEATS +# define OPENSSL_NO_HEARTBEATS +#endif +#ifndef OPENSSL_NO_MSAN +# define OPENSSL_NO_MSAN +#endif +#ifndef OPENSSL_NO_SCTP +# define OPENSSL_NO_SCTP +#endif +#ifndef OPENSSL_NO_SSL_TRACE +# define OPENSSL_NO_SSL_TRACE +#endif +#ifndef OPENSSL_NO_SSL3 +# define OPENSSL_NO_SSL3 +#endif +#ifndef OPENSSL_NO_SSL3_METHOD +# define OPENSSL_NO_SSL3_METHOD +#endif +#ifndef OPENSSL_NO_UBSAN +# define OPENSSL_NO_UBSAN +#endif +#ifndef OPENSSL_NO_UNIT_TEST +# define OPENSSL_NO_UNIT_TEST +#endif +#ifndef OPENSSL_NO_WEAK_SSL_CIPHERS +# define OPENSSL_NO_WEAK_SSL_CIPHERS +#endif +#ifndef OPENSSL_NO_STATIC_ENGINE +# define OPENSSL_NO_STATIC_ENGINE +#endif + + +/* + * Sometimes OPENSSSL_NO_xxx ends up with an empty file and some compilers + * don't like that. This will hopefully silence them. + */ +#define NON_EMPTY_TRANSLATION_UNIT static void *dummy = &dummy; + +/* + * Applications should use -DOPENSSL_API_COMPAT= to suppress the + * declarations of functions deprecated in or before . Otherwise, they + * still won't see them if the library has been built to disable deprecated + * functions. + */ +#ifndef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f; +# ifdef __GNUC__ +# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 0) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif +# endif +#endif + +#ifndef OPENSSL_FILE +# ifdef OPENSSL_NO_FILENAMES +# define OPENSSL_FILE "" +# define OPENSSL_LINE 0 +# else +# define OPENSSL_FILE __FILE__ +# define OPENSSL_LINE __LINE__ +# endif +#endif + +#ifndef OPENSSL_MIN_API +# define OPENSSL_MIN_API 0 +#endif + +#if !defined(OPENSSL_API_COMPAT) || OPENSSL_API_COMPAT < OPENSSL_MIN_API +# undef OPENSSL_API_COMPAT +# define OPENSSL_API_COMPAT OPENSSL_MIN_API +#endif + +/* + * Do not deprecate things to be deprecated in version 1.2.0 before the + * OpenSSL version number matches. + */ +#if OPENSSL_VERSION_NUMBER < 0x10200000L +# define DEPRECATEDIN_1_2_0(f) f; +#elif OPENSSL_API_COMPAT < 0x10200000L +# define DEPRECATEDIN_1_2_0(f) DECLARE_DEPRECATED(f) +#else +# define DEPRECATEDIN_1_2_0(f) +#endif + +#if OPENSSL_API_COMPAT < 0x10100000L +# define DEPRECATEDIN_1_1_0(f) DECLARE_DEPRECATED(f) +#else +# define DEPRECATEDIN_1_1_0(f) +#endif + +#if OPENSSL_API_COMPAT < 0x10000000L +# define DEPRECATEDIN_1_0_0(f) DECLARE_DEPRECATED(f) +#else +# define DEPRECATEDIN_1_0_0(f) +#endif + +#if OPENSSL_API_COMPAT < 0x00908000L +# define DEPRECATEDIN_0_9_8(f) DECLARE_DEPRECATED(f) +#else +# define DEPRECATEDIN_0_9_8(f) +#endif + +/* Generate 80386 code? */ +#undef I386_ONLY + +#undef OPENSSL_UNISTD +#define OPENSSL_UNISTD + +#undef OPENSSL_EXPORT_VAR_AS_FUNCTION + +/* + * The following are cipher-specific, but are part of the public API. + */ +#if !defined(OPENSSL_SYS_UEFI) +# undef BN_LLONG +/* Only one for the following should be defined */ +# define SIXTY_FOUR_BIT_LONG +# undef SIXTY_FOUR_BIT +# undef THIRTY_TWO_BIT +#endif + +#define RC4_INT unsigned char + +#ifdef __cplusplus +} +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/opensslv.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/opensslv.h new file mode 100644 index 00000000..17d271f5 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/opensslv.h @@ -0,0 +1,101 @@ +/* + * 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_OPENSSLV_H +# define HEADER_OPENSSLV_H + +#ifdef __cplusplus +extern "C" { +#endif + +/*- + * Numeric release version identifier: + * MNNFFPPS: major minor fix patch status + * The status nibble has one of the values 0 for development, 1 to e for betas + * 1 to 14, and f for release. The patch level is exactly that. + * For example: + * 0.9.3-dev 0x00903000 + * 0.9.3-beta1 0x00903001 + * 0.9.3-beta2-dev 0x00903002 + * 0.9.3-beta2 0x00903002 (same as ...beta2-dev) + * 0.9.3 0x0090300f + * 0.9.3a 0x0090301f + * 0.9.4 0x0090400f + * 1.2.3z 0x102031af + * + * For continuity reasons (because 0.9.5 is already out, and is coded + * 0x00905100), between 0.9.5 and 0.9.6 the coding of the patch level + * part is slightly different, by setting the highest bit. This means + * that 0.9.5a looks like this: 0x0090581f. At 0.9.6, we can start + * with 0x0090600S... + * + * (Prior to 0.9.3-dev a different scheme was used: 0.9.2b is 0x0922.) + * (Prior to 0.9.5a beta1, a different scheme was used: MMNNFFRBB for + * major minor fix final patch/beta) + */ +# define OPENSSL_VERSION_NUMBER 0x1010107fL +# define OPENSSL_VERSION_TEXT "OpenSSL 1.1.1g 21 Apr 2020" + +/*- + * The macros below are to be used for shared library (.so, .dll, ...) + * versioning. That kind of versioning works a bit differently between + * operating systems. The most usual scheme is to set a major and a minor + * number, and have the runtime loader check that the major number is equal + * to what it was at application link time, while the minor number has to + * be greater or equal to what it was at application link time. With this + * scheme, the version number is usually part of the file name, like this: + * + * libcrypto.so.0.9 + * + * Some unixen also make a softlink with the major version number only: + * + * libcrypto.so.0 + * + * On Tru64 and IRIX 6.x it works a little bit differently. There, the + * shared library version is stored in the file, and is actually a series + * of versions, separated by colons. The rightmost version present in the + * library when linking an application is stored in the application to be + * matched at run time. When the application is run, a check is done to + * see if the library version stored in the application matches any of the + * versions in the version string of the library itself. + * This version string can be constructed in any way, depending on what + * kind of matching is desired. However, to implement the same scheme as + * the one used in the other unixen, all compatible versions, from lowest + * to highest, should be part of the string. Consecutive builds would + * give the following versions strings: + * + * 3.0 + * 3.0:3.1 + * 3.0:3.1:3.2 + * 4.0 + * 4.0:4.1 + * + * Notice how version 4 is completely incompatible with version, and + * therefore give the breach you can see. + * + * There may be other schemes as well that I haven't yet discovered. + * + * So, here's the way it works here: first of all, the library version + * number doesn't need at all to match the overall OpenSSL version. + * However, it's nice and more understandable if it actually does. + * The current library version is stored in the macro SHLIB_VERSION_NUMBER, + * which is just a piece of text in the format "M.m.e" (Major, minor, edit). + * For the sake of Tru64, IRIX, and any other OS that behaves in similar ways, + * we need to keep a history of version numbers, which is done in the + * macro SHLIB_VERSION_HISTORY. The numbers are separated by colons and + * should only keep the versions that are binary compatible with the current. + */ +# define SHLIB_VERSION_HISTORY "" +# define SHLIB_VERSION_NUMBER "1.1" + + +#ifdef __cplusplus +} +#endif +#endif /* HEADER_OPENSSLV_H */ diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ossl_typ.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ossl_typ.h new file mode 100644 index 00000000..e0edfaaf --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ossl_typ.h @@ -0,0 +1,197 @@ +/* + * Copyright 2001-2018 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_OPENSSL_TYPES_H +# define HEADER_OPENSSL_TYPES_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +# include + +# ifdef NO_ASN1_TYPEDEFS +# define ASN1_INTEGER ASN1_STRING +# define ASN1_ENUMERATED ASN1_STRING +# define ASN1_BIT_STRING ASN1_STRING +# define ASN1_OCTET_STRING ASN1_STRING +# define ASN1_PRINTABLESTRING ASN1_STRING +# define ASN1_T61STRING ASN1_STRING +# define ASN1_IA5STRING ASN1_STRING +# define ASN1_UTCTIME ASN1_STRING +# define ASN1_GENERALIZEDTIME ASN1_STRING +# define ASN1_TIME ASN1_STRING +# define ASN1_GENERALSTRING ASN1_STRING +# define ASN1_UNIVERSALSTRING ASN1_STRING +# define ASN1_BMPSTRING ASN1_STRING +# define ASN1_VISIBLESTRING ASN1_STRING +# define ASN1_UTF8STRING ASN1_STRING +# define ASN1_BOOLEAN int +# define ASN1_NULL int +# else +typedef struct asn1_string_st ASN1_INTEGER; +typedef struct asn1_string_st ASN1_ENUMERATED; +typedef struct asn1_string_st ASN1_BIT_STRING; +typedef struct asn1_string_st ASN1_OCTET_STRING; +typedef struct asn1_string_st ASN1_PRINTABLESTRING; +typedef struct asn1_string_st ASN1_T61STRING; +typedef struct asn1_string_st ASN1_IA5STRING; +typedef struct asn1_string_st ASN1_GENERALSTRING; +typedef struct asn1_string_st ASN1_UNIVERSALSTRING; +typedef struct asn1_string_st ASN1_BMPSTRING; +typedef struct asn1_string_st ASN1_UTCTIME; +typedef struct asn1_string_st ASN1_TIME; +typedef struct asn1_string_st ASN1_GENERALIZEDTIME; +typedef struct asn1_string_st ASN1_VISIBLESTRING; +typedef struct asn1_string_st ASN1_UTF8STRING; +typedef struct asn1_string_st ASN1_STRING; +typedef int ASN1_BOOLEAN; +typedef int ASN1_NULL; +# endif + +typedef struct asn1_object_st ASN1_OBJECT; + +typedef struct ASN1_ITEM_st ASN1_ITEM; +typedef struct asn1_pctx_st ASN1_PCTX; +typedef struct asn1_sctx_st ASN1_SCTX; + +# ifdef _WIN32 +# undef X509_NAME +# undef X509_EXTENSIONS +# undef PKCS7_ISSUER_AND_SERIAL +# undef PKCS7_SIGNER_INFO +# undef OCSP_REQUEST +# undef OCSP_RESPONSE +# endif + +# ifdef BIGNUM +# undef BIGNUM +# endif +struct dane_st; +typedef struct bio_st BIO; +typedef struct bignum_st BIGNUM; +typedef struct bignum_ctx BN_CTX; +typedef struct bn_blinding_st BN_BLINDING; +typedef struct bn_mont_ctx_st BN_MONT_CTX; +typedef struct bn_recp_ctx_st BN_RECP_CTX; +typedef struct bn_gencb_st BN_GENCB; + +typedef struct buf_mem_st BUF_MEM; + +typedef struct evp_cipher_st EVP_CIPHER; +typedef struct evp_cipher_ctx_st EVP_CIPHER_CTX; +typedef struct evp_md_st EVP_MD; +typedef struct evp_md_ctx_st EVP_MD_CTX; +typedef struct evp_pkey_st EVP_PKEY; + +typedef struct evp_pkey_asn1_method_st EVP_PKEY_ASN1_METHOD; + +typedef struct evp_pkey_method_st EVP_PKEY_METHOD; +typedef struct evp_pkey_ctx_st EVP_PKEY_CTX; + +typedef struct evp_Encode_Ctx_st EVP_ENCODE_CTX; + +typedef struct hmac_ctx_st HMAC_CTX; + +typedef struct dh_st DH; +typedef struct dh_method DH_METHOD; + +typedef struct dsa_st DSA; +typedef struct dsa_method DSA_METHOD; + +typedef struct rsa_st RSA; +typedef struct rsa_meth_st RSA_METHOD; +typedef struct rsa_pss_params_st RSA_PSS_PARAMS; + +typedef struct ec_key_st EC_KEY; +typedef struct ec_key_method_st EC_KEY_METHOD; + +typedef struct rand_meth_st RAND_METHOD; +typedef struct rand_drbg_st RAND_DRBG; + +typedef struct ssl_dane_st SSL_DANE; +typedef struct x509_st X509; +typedef struct X509_algor_st X509_ALGOR; +typedef struct X509_crl_st X509_CRL; +typedef struct x509_crl_method_st X509_CRL_METHOD; +typedef struct x509_revoked_st X509_REVOKED; +typedef struct X509_name_st X509_NAME; +typedef struct X509_pubkey_st X509_PUBKEY; +typedef struct x509_store_st X509_STORE; +typedef struct x509_store_ctx_st X509_STORE_CTX; + +typedef struct x509_object_st X509_OBJECT; +typedef struct x509_lookup_st X509_LOOKUP; +typedef struct x509_lookup_method_st X509_LOOKUP_METHOD; +typedef struct X509_VERIFY_PARAM_st X509_VERIFY_PARAM; + +typedef struct x509_sig_info_st X509_SIG_INFO; + +typedef struct pkcs8_priv_key_info_st PKCS8_PRIV_KEY_INFO; + +typedef struct v3_ext_ctx X509V3_CTX; +typedef struct conf_st CONF; +typedef struct ossl_init_settings_st OPENSSL_INIT_SETTINGS; + +typedef struct ui_st UI; +typedef struct ui_method_st UI_METHOD; + +typedef struct engine_st ENGINE; +typedef struct ssl_st SSL; +typedef struct ssl_ctx_st SSL_CTX; + +typedef struct comp_ctx_st COMP_CTX; +typedef struct comp_method_st COMP_METHOD; + +typedef struct X509_POLICY_NODE_st X509_POLICY_NODE; +typedef struct X509_POLICY_LEVEL_st X509_POLICY_LEVEL; +typedef struct X509_POLICY_TREE_st X509_POLICY_TREE; +typedef struct X509_POLICY_CACHE_st X509_POLICY_CACHE; + +typedef struct AUTHORITY_KEYID_st AUTHORITY_KEYID; +typedef struct DIST_POINT_st DIST_POINT; +typedef struct ISSUING_DIST_POINT_st ISSUING_DIST_POINT; +typedef struct NAME_CONSTRAINTS_st NAME_CONSTRAINTS; + +typedef struct crypto_ex_data_st CRYPTO_EX_DATA; + +typedef struct ocsp_req_ctx_st OCSP_REQ_CTX; +typedef struct ocsp_response_st OCSP_RESPONSE; +typedef struct ocsp_responder_id_st OCSP_RESPID; + +typedef struct sct_st SCT; +typedef struct sct_ctx_st SCT_CTX; +typedef struct ctlog_st CTLOG; +typedef struct ctlog_store_st CTLOG_STORE; +typedef struct ct_policy_eval_ctx_st CT_POLICY_EVAL_CTX; + +typedef struct ossl_store_info_st OSSL_STORE_INFO; +typedef struct ossl_store_search_st OSSL_STORE_SEARCH; + +#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L && \ + defined(INTMAX_MAX) && defined(UINTMAX_MAX) +typedef intmax_t ossl_intmax_t; +typedef uintmax_t ossl_uintmax_t; +#else +/* + * Not long long, because the C-library can only be expected to provide + * strtoll(), strtoull() at the same time as intmax_t and strtoimax(), + * strtoumax(). Since we use these for parsing arguments, we need the + * conversion functions, not just the sizes. + */ +typedef long ossl_intmax_t; +typedef unsigned long ossl_uintmax_t; +#endif + +#ifdef __cplusplus +} +#endif +#endif /* def HEADER_OPENSSL_TYPES_H */ diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pem.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pem.h new file mode 100644 index 00000000..2ef5b5d0 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pem.h @@ -0,0 +1,378 @@ +/* + * Copyright 1995-2018 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_PEM_H +# define HEADER_PEM_H + +# include +# include +# include +# include +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +# define PEM_BUFSIZE 1024 + +# define PEM_STRING_X509_OLD "X509 CERTIFICATE" +# define PEM_STRING_X509 "CERTIFICATE" +# define PEM_STRING_X509_TRUSTED "TRUSTED CERTIFICATE" +# define PEM_STRING_X509_REQ_OLD "NEW CERTIFICATE REQUEST" +# define PEM_STRING_X509_REQ "CERTIFICATE REQUEST" +# define PEM_STRING_X509_CRL "X509 CRL" +# define PEM_STRING_EVP_PKEY "ANY PRIVATE KEY" +# define PEM_STRING_PUBLIC "PUBLIC KEY" +# define PEM_STRING_RSA "RSA PRIVATE KEY" +# define PEM_STRING_RSA_PUBLIC "RSA PUBLIC KEY" +# define PEM_STRING_DSA "DSA PRIVATE KEY" +# define PEM_STRING_DSA_PUBLIC "DSA PUBLIC KEY" +# define PEM_STRING_PKCS7 "PKCS7" +# define PEM_STRING_PKCS7_SIGNED "PKCS #7 SIGNED DATA" +# define PEM_STRING_PKCS8 "ENCRYPTED PRIVATE KEY" +# define PEM_STRING_PKCS8INF "PRIVATE KEY" +# define PEM_STRING_DHPARAMS "DH PARAMETERS" +# define PEM_STRING_DHXPARAMS "X9.42 DH PARAMETERS" +# define PEM_STRING_SSL_SESSION "SSL SESSION PARAMETERS" +# define PEM_STRING_DSAPARAMS "DSA PARAMETERS" +# define PEM_STRING_ECDSA_PUBLIC "ECDSA PUBLIC KEY" +# define PEM_STRING_ECPARAMETERS "EC PARAMETERS" +# define PEM_STRING_ECPRIVATEKEY "EC PRIVATE KEY" +# define PEM_STRING_PARAMETERS "PARAMETERS" +# define PEM_STRING_CMS "CMS" + +# define PEM_TYPE_ENCRYPTED 10 +# define PEM_TYPE_MIC_ONLY 20 +# define PEM_TYPE_MIC_CLEAR 30 +# define PEM_TYPE_CLEAR 40 + +/* + * These macros make the PEM_read/PEM_write functions easier to maintain and + * write. Now they are all implemented with either: IMPLEMENT_PEM_rw(...) or + * IMPLEMENT_PEM_rw_cb(...) + */ + +# ifdef OPENSSL_NO_STDIO + +# define IMPLEMENT_PEM_read_fp(name, type, str, asn1) /**/ +# define IMPLEMENT_PEM_write_fp(name, type, str, asn1) /**/ +# define IMPLEMENT_PEM_write_fp_const(name, type, str, asn1) /**/ +# define IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1) /**/ +# define IMPLEMENT_PEM_write_cb_fp_const(name, type, str, asn1) /**/ +# else + +# define IMPLEMENT_PEM_read_fp(name, type, str, asn1) \ +type *PEM_read_##name(FILE *fp, type **x, pem_password_cb *cb, void *u)\ +{ \ +return PEM_ASN1_read((d2i_of_void *)d2i_##asn1, str,fp,(void **)x,cb,u); \ +} + +# define IMPLEMENT_PEM_write_fp(name, type, str, asn1) \ +int PEM_write_##name(FILE *fp, type *x) \ +{ \ +return PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,x,NULL,NULL,0,NULL,NULL); \ +} + +# define IMPLEMENT_PEM_write_fp_const(name, type, str, asn1) \ +int PEM_write_##name(FILE *fp, const type *x) \ +{ \ +return PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,(void *)x,NULL,NULL,0,NULL,NULL); \ +} + +# define IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1) \ +int PEM_write_##name(FILE *fp, type *x, const EVP_CIPHER *enc, \ + unsigned char *kstr, int klen, pem_password_cb *cb, \ + void *u) \ + { \ + return PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,x,enc,kstr,klen,cb,u); \ + } + +# define IMPLEMENT_PEM_write_cb_fp_const(name, type, str, asn1) \ +int PEM_write_##name(FILE *fp, type *x, const EVP_CIPHER *enc, \ + unsigned char *kstr, int klen, pem_password_cb *cb, \ + void *u) \ + { \ + return PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,x,enc,kstr,klen,cb,u); \ + } + +# endif + +# define IMPLEMENT_PEM_read_bio(name, type, str, asn1) \ +type *PEM_read_bio_##name(BIO *bp, type **x, pem_password_cb *cb, void *u)\ +{ \ +return PEM_ASN1_read_bio((d2i_of_void *)d2i_##asn1, str,bp,(void **)x,cb,u); \ +} + +# define IMPLEMENT_PEM_write_bio(name, type, str, asn1) \ +int PEM_write_bio_##name(BIO *bp, type *x) \ +{ \ +return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,x,NULL,NULL,0,NULL,NULL); \ +} + +# define IMPLEMENT_PEM_write_bio_const(name, type, str, asn1) \ +int PEM_write_bio_##name(BIO *bp, const type *x) \ +{ \ +return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,(void *)x,NULL,NULL,0,NULL,NULL); \ +} + +# define IMPLEMENT_PEM_write_cb_bio(name, type, str, asn1) \ +int PEM_write_bio_##name(BIO *bp, type *x, const EVP_CIPHER *enc, \ + unsigned char *kstr, int klen, pem_password_cb *cb, void *u) \ + { \ + return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,x,enc,kstr,klen,cb,u); \ + } + +# define IMPLEMENT_PEM_write_cb_bio_const(name, type, str, asn1) \ +int PEM_write_bio_##name(BIO *bp, type *x, const EVP_CIPHER *enc, \ + unsigned char *kstr, int klen, pem_password_cb *cb, void *u) \ + { \ + return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,(void *)x,enc,kstr,klen,cb,u); \ + } + +# define IMPLEMENT_PEM_write(name, type, str, asn1) \ + IMPLEMENT_PEM_write_bio(name, type, str, asn1) \ + IMPLEMENT_PEM_write_fp(name, type, str, asn1) + +# define IMPLEMENT_PEM_write_const(name, type, str, asn1) \ + IMPLEMENT_PEM_write_bio_const(name, type, str, asn1) \ + IMPLEMENT_PEM_write_fp_const(name, type, str, asn1) + +# define IMPLEMENT_PEM_write_cb(name, type, str, asn1) \ + IMPLEMENT_PEM_write_cb_bio(name, type, str, asn1) \ + IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1) + +# define IMPLEMENT_PEM_write_cb_const(name, type, str, asn1) \ + IMPLEMENT_PEM_write_cb_bio_const(name, type, str, asn1) \ + IMPLEMENT_PEM_write_cb_fp_const(name, type, str, asn1) + +# define IMPLEMENT_PEM_read(name, type, str, asn1) \ + IMPLEMENT_PEM_read_bio(name, type, str, asn1) \ + IMPLEMENT_PEM_read_fp(name, type, str, asn1) + +# define IMPLEMENT_PEM_rw(name, type, str, asn1) \ + IMPLEMENT_PEM_read(name, type, str, asn1) \ + IMPLEMENT_PEM_write(name, type, str, asn1) + +# define IMPLEMENT_PEM_rw_const(name, type, str, asn1) \ + IMPLEMENT_PEM_read(name, type, str, asn1) \ + IMPLEMENT_PEM_write_const(name, type, str, asn1) + +# define IMPLEMENT_PEM_rw_cb(name, type, str, asn1) \ + IMPLEMENT_PEM_read(name, type, str, asn1) \ + IMPLEMENT_PEM_write_cb(name, type, str, asn1) + +/* These are the same except they are for the declarations */ + +# if defined(OPENSSL_NO_STDIO) + +# define DECLARE_PEM_read_fp(name, type) /**/ +# define DECLARE_PEM_write_fp(name, type) /**/ +# define DECLARE_PEM_write_fp_const(name, type) /**/ +# define DECLARE_PEM_write_cb_fp(name, type) /**/ +# else + +# define DECLARE_PEM_read_fp(name, type) \ + type *PEM_read_##name(FILE *fp, type **x, pem_password_cb *cb, void *u); + +# define DECLARE_PEM_write_fp(name, type) \ + int PEM_write_##name(FILE *fp, type *x); + +# define DECLARE_PEM_write_fp_const(name, type) \ + int PEM_write_##name(FILE *fp, const type *x); + +# define DECLARE_PEM_write_cb_fp(name, type) \ + int PEM_write_##name(FILE *fp, type *x, const EVP_CIPHER *enc, \ + unsigned char *kstr, int klen, pem_password_cb *cb, void *u); + +# endif + +# define DECLARE_PEM_read_bio(name, type) \ + type *PEM_read_bio_##name(BIO *bp, type **x, pem_password_cb *cb, void *u); + +# define DECLARE_PEM_write_bio(name, type) \ + int PEM_write_bio_##name(BIO *bp, type *x); + +# define DECLARE_PEM_write_bio_const(name, type) \ + int PEM_write_bio_##name(BIO *bp, const type *x); + +# define DECLARE_PEM_write_cb_bio(name, type) \ + int PEM_write_bio_##name(BIO *bp, type *x, const EVP_CIPHER *enc, \ + unsigned char *kstr, int klen, pem_password_cb *cb, void *u); + +# define DECLARE_PEM_write(name, type) \ + DECLARE_PEM_write_bio(name, type) \ + DECLARE_PEM_write_fp(name, type) +# define DECLARE_PEM_write_const(name, type) \ + DECLARE_PEM_write_bio_const(name, type) \ + DECLARE_PEM_write_fp_const(name, type) +# define DECLARE_PEM_write_cb(name, type) \ + DECLARE_PEM_write_cb_bio(name, type) \ + DECLARE_PEM_write_cb_fp(name, type) +# define DECLARE_PEM_read(name, type) \ + DECLARE_PEM_read_bio(name, type) \ + DECLARE_PEM_read_fp(name, type) +# define DECLARE_PEM_rw(name, type) \ + DECLARE_PEM_read(name, type) \ + DECLARE_PEM_write(name, type) +# define DECLARE_PEM_rw_const(name, type) \ + DECLARE_PEM_read(name, type) \ + DECLARE_PEM_write_const(name, type) +# define DECLARE_PEM_rw_cb(name, type) \ + DECLARE_PEM_read(name, type) \ + DECLARE_PEM_write_cb(name, type) +typedef int pem_password_cb (char *buf, int size, int rwflag, void *userdata); + +int PEM_get_EVP_CIPHER_INFO(char *header, EVP_CIPHER_INFO *cipher); +int PEM_do_header(EVP_CIPHER_INFO *cipher, unsigned char *data, long *len, + pem_password_cb *callback, void *u); + +int PEM_read_bio(BIO *bp, char **name, char **header, + unsigned char **data, long *len); +# define PEM_FLAG_SECURE 0x1 +# define PEM_FLAG_EAY_COMPATIBLE 0x2 +# define PEM_FLAG_ONLY_B64 0x4 +int PEM_read_bio_ex(BIO *bp, char **name, char **header, + unsigned char **data, long *len, unsigned int flags); +int PEM_bytes_read_bio_secmem(unsigned char **pdata, long *plen, char **pnm, + const char *name, BIO *bp, pem_password_cb *cb, + void *u); +int PEM_write_bio(BIO *bp, const char *name, const char *hdr, + const unsigned char *data, long len); +int PEM_bytes_read_bio(unsigned char **pdata, long *plen, char **pnm, + const char *name, BIO *bp, pem_password_cb *cb, + void *u); +void *PEM_ASN1_read_bio(d2i_of_void *d2i, const char *name, BIO *bp, void **x, + pem_password_cb *cb, void *u); +int PEM_ASN1_write_bio(i2d_of_void *i2d, const char *name, BIO *bp, void *x, + const EVP_CIPHER *enc, unsigned char *kstr, int klen, + pem_password_cb *cb, void *u); + +STACK_OF(X509_INFO) *PEM_X509_INFO_read_bio(BIO *bp, STACK_OF(X509_INFO) *sk, + pem_password_cb *cb, void *u); +int PEM_X509_INFO_write_bio(BIO *bp, X509_INFO *xi, EVP_CIPHER *enc, + unsigned char *kstr, int klen, + pem_password_cb *cd, void *u); + +#ifndef OPENSSL_NO_STDIO +int PEM_read(FILE *fp, char **name, char **header, + unsigned char **data, long *len); +int PEM_write(FILE *fp, const char *name, const char *hdr, + const unsigned char *data, long len); +void *PEM_ASN1_read(d2i_of_void *d2i, const char *name, FILE *fp, void **x, + pem_password_cb *cb, void *u); +int PEM_ASN1_write(i2d_of_void *i2d, const char *name, FILE *fp, + void *x, const EVP_CIPHER *enc, unsigned char *kstr, + int klen, pem_password_cb *callback, void *u); +STACK_OF(X509_INFO) *PEM_X509_INFO_read(FILE *fp, STACK_OF(X509_INFO) *sk, + pem_password_cb *cb, void *u); +#endif + +int PEM_SignInit(EVP_MD_CTX *ctx, EVP_MD *type); +int PEM_SignUpdate(EVP_MD_CTX *ctx, unsigned char *d, unsigned int cnt); +int PEM_SignFinal(EVP_MD_CTX *ctx, unsigned char *sigret, + unsigned int *siglen, EVP_PKEY *pkey); + +/* The default pem_password_cb that's used internally */ +int PEM_def_callback(char *buf, int num, int rwflag, void *userdata); +void PEM_proc_type(char *buf, int type); +void PEM_dek_info(char *buf, const char *type, int len, char *str); + +# include + +DECLARE_PEM_rw(X509, X509) +DECLARE_PEM_rw(X509_AUX, X509) +DECLARE_PEM_rw(X509_REQ, X509_REQ) +DECLARE_PEM_write(X509_REQ_NEW, X509_REQ) +DECLARE_PEM_rw(X509_CRL, X509_CRL) +DECLARE_PEM_rw(PKCS7, PKCS7) +DECLARE_PEM_rw(NETSCAPE_CERT_SEQUENCE, NETSCAPE_CERT_SEQUENCE) +DECLARE_PEM_rw(PKCS8, X509_SIG) +DECLARE_PEM_rw(PKCS8_PRIV_KEY_INFO, PKCS8_PRIV_KEY_INFO) +# ifndef OPENSSL_NO_RSA +DECLARE_PEM_rw_cb(RSAPrivateKey, RSA) +DECLARE_PEM_rw_const(RSAPublicKey, RSA) +DECLARE_PEM_rw(RSA_PUBKEY, RSA) +# endif +# ifndef OPENSSL_NO_DSA +DECLARE_PEM_rw_cb(DSAPrivateKey, DSA) +DECLARE_PEM_rw(DSA_PUBKEY, DSA) +DECLARE_PEM_rw_const(DSAparams, DSA) +# endif +# ifndef OPENSSL_NO_EC +DECLARE_PEM_rw_const(ECPKParameters, EC_GROUP) +DECLARE_PEM_rw_cb(ECPrivateKey, EC_KEY) +DECLARE_PEM_rw(EC_PUBKEY, EC_KEY) +# endif +# ifndef OPENSSL_NO_DH +DECLARE_PEM_rw_const(DHparams, DH) +DECLARE_PEM_write_const(DHxparams, DH) +# endif +DECLARE_PEM_rw_cb(PrivateKey, EVP_PKEY) +DECLARE_PEM_rw(PUBKEY, EVP_PKEY) + +int PEM_write_bio_PrivateKey_traditional(BIO *bp, EVP_PKEY *x, + const EVP_CIPHER *enc, + unsigned char *kstr, int klen, + pem_password_cb *cb, void *u); + +int PEM_write_bio_PKCS8PrivateKey_nid(BIO *bp, EVP_PKEY *x, int nid, + char *kstr, int klen, + pem_password_cb *cb, void *u); +int PEM_write_bio_PKCS8PrivateKey(BIO *, EVP_PKEY *, const EVP_CIPHER *, + char *, int, pem_password_cb *, void *); +int i2d_PKCS8PrivateKey_bio(BIO *bp, EVP_PKEY *x, const EVP_CIPHER *enc, + char *kstr, int klen, + pem_password_cb *cb, void *u); +int i2d_PKCS8PrivateKey_nid_bio(BIO *bp, EVP_PKEY *x, int nid, + char *kstr, int klen, + pem_password_cb *cb, void *u); +EVP_PKEY *d2i_PKCS8PrivateKey_bio(BIO *bp, EVP_PKEY **x, pem_password_cb *cb, + void *u); + +# ifndef OPENSSL_NO_STDIO +int i2d_PKCS8PrivateKey_fp(FILE *fp, EVP_PKEY *x, const EVP_CIPHER *enc, + char *kstr, int klen, + pem_password_cb *cb, void *u); +int i2d_PKCS8PrivateKey_nid_fp(FILE *fp, EVP_PKEY *x, int nid, + char *kstr, int klen, + pem_password_cb *cb, void *u); +int PEM_write_PKCS8PrivateKey_nid(FILE *fp, EVP_PKEY *x, int nid, + char *kstr, int klen, + pem_password_cb *cb, void *u); + +EVP_PKEY *d2i_PKCS8PrivateKey_fp(FILE *fp, EVP_PKEY **x, pem_password_cb *cb, + void *u); + +int PEM_write_PKCS8PrivateKey(FILE *fp, EVP_PKEY *x, const EVP_CIPHER *enc, + char *kstr, int klen, pem_password_cb *cd, + void *u); +# endif +EVP_PKEY *PEM_read_bio_Parameters(BIO *bp, EVP_PKEY **x); +int PEM_write_bio_Parameters(BIO *bp, EVP_PKEY *x); + +# ifndef OPENSSL_NO_DSA +EVP_PKEY *b2i_PrivateKey(const unsigned char **in, long length); +EVP_PKEY *b2i_PublicKey(const unsigned char **in, long length); +EVP_PKEY *b2i_PrivateKey_bio(BIO *in); +EVP_PKEY *b2i_PublicKey_bio(BIO *in); +int i2b_PrivateKey_bio(BIO *out, EVP_PKEY *pk); +int i2b_PublicKey_bio(BIO *out, EVP_PKEY *pk); +# ifndef OPENSSL_NO_RC4 +EVP_PKEY *b2i_PVK_bio(BIO *in, pem_password_cb *cb, void *u); +int i2b_PVK_bio(BIO *out, EVP_PKEY *pk, int enclevel, + pem_password_cb *cb, void *u); +# endif +# endif + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pem2.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pem2.h new file mode 100644 index 00000000..038fe790 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pem2.h @@ -0,0 +1,13 @@ +/* + * Copyright 1999-2018 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_PEM2_H +# define HEADER_PEM2_H +# include +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pemerr.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pemerr.h new file mode 100644 index 00000000..0c45918f --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pemerr.h @@ -0,0 +1,103 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2019 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_PEMERR_H +# define HEADER_PEMERR_H + +# ifndef HEADER_SYMHACKS_H +# include +# endif + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_PEM_strings(void); + +/* + * PEM function codes. + */ +# define PEM_F_B2I_DSS 127 +# define PEM_F_B2I_PVK_BIO 128 +# define PEM_F_B2I_RSA 129 +# define PEM_F_CHECK_BITLEN_DSA 130 +# define PEM_F_CHECK_BITLEN_RSA 131 +# define PEM_F_D2I_PKCS8PRIVATEKEY_BIO 120 +# define PEM_F_D2I_PKCS8PRIVATEKEY_FP 121 +# define PEM_F_DO_B2I 132 +# define PEM_F_DO_B2I_BIO 133 +# define PEM_F_DO_BLOB_HEADER 134 +# define PEM_F_DO_I2B 146 +# define PEM_F_DO_PK8PKEY 126 +# define PEM_F_DO_PK8PKEY_FP 125 +# define PEM_F_DO_PVK_BODY 135 +# define PEM_F_DO_PVK_HEADER 136 +# define PEM_F_GET_HEADER_AND_DATA 143 +# define PEM_F_GET_NAME 144 +# define PEM_F_I2B_PVK 137 +# define PEM_F_I2B_PVK_BIO 138 +# define PEM_F_LOAD_IV 101 +# define PEM_F_PEM_ASN1_READ 102 +# define PEM_F_PEM_ASN1_READ_BIO 103 +# define PEM_F_PEM_ASN1_WRITE 104 +# define PEM_F_PEM_ASN1_WRITE_BIO 105 +# define PEM_F_PEM_DEF_CALLBACK 100 +# define PEM_F_PEM_DO_HEADER 106 +# define PEM_F_PEM_GET_EVP_CIPHER_INFO 107 +# define PEM_F_PEM_READ 108 +# define PEM_F_PEM_READ_BIO 109 +# define PEM_F_PEM_READ_BIO_DHPARAMS 141 +# define PEM_F_PEM_READ_BIO_EX 145 +# define PEM_F_PEM_READ_BIO_PARAMETERS 140 +# define PEM_F_PEM_READ_BIO_PRIVATEKEY 123 +# define PEM_F_PEM_READ_DHPARAMS 142 +# define PEM_F_PEM_READ_PRIVATEKEY 124 +# define PEM_F_PEM_SIGNFINAL 112 +# define PEM_F_PEM_WRITE 113 +# define PEM_F_PEM_WRITE_BIO 114 +# define PEM_F_PEM_WRITE_PRIVATEKEY 139 +# define PEM_F_PEM_X509_INFO_READ 115 +# define PEM_F_PEM_X509_INFO_READ_BIO 116 +# define PEM_F_PEM_X509_INFO_WRITE_BIO 117 + +/* + * PEM reason codes. + */ +# define PEM_R_BAD_BASE64_DECODE 100 +# define PEM_R_BAD_DECRYPT 101 +# define PEM_R_BAD_END_LINE 102 +# define PEM_R_BAD_IV_CHARS 103 +# define PEM_R_BAD_MAGIC_NUMBER 116 +# define PEM_R_BAD_PASSWORD_READ 104 +# define PEM_R_BAD_VERSION_NUMBER 117 +# define PEM_R_BIO_WRITE_FAILURE 118 +# define PEM_R_CIPHER_IS_NULL 127 +# define PEM_R_ERROR_CONVERTING_PRIVATE_KEY 115 +# define PEM_R_EXPECTING_PRIVATE_KEY_BLOB 119 +# define PEM_R_EXPECTING_PUBLIC_KEY_BLOB 120 +# define PEM_R_HEADER_TOO_LONG 128 +# define PEM_R_INCONSISTENT_HEADER 121 +# define PEM_R_KEYBLOB_HEADER_PARSE_ERROR 122 +# define PEM_R_KEYBLOB_TOO_SHORT 123 +# define PEM_R_MISSING_DEK_IV 129 +# define PEM_R_NOT_DEK_INFO 105 +# define PEM_R_NOT_ENCRYPTED 106 +# define PEM_R_NOT_PROC_TYPE 107 +# define PEM_R_NO_START_LINE 108 +# define PEM_R_PROBLEMS_GETTING_PASSWORD 109 +# define PEM_R_PVK_DATA_TOO_SHORT 124 +# define PEM_R_PVK_TOO_SHORT 125 +# define PEM_R_READ_KEY 111 +# define PEM_R_SHORT_HEADER 112 +# define PEM_R_UNEXPECTED_DEK_IV 130 +# define PEM_R_UNSUPPORTED_CIPHER 113 +# define PEM_R_UNSUPPORTED_ENCRYPTION 114 +# define PEM_R_UNSUPPORTED_KEY_COMPONENTS 126 + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pkcs12.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pkcs12.h new file mode 100644 index 00000000..3f43dad6 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pkcs12.h @@ -0,0 +1,223 @@ +/* + * Copyright 1999-2016 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_PKCS12_H +# define HEADER_PKCS12_H + +# include +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +# define PKCS12_KEY_ID 1 +# define PKCS12_IV_ID 2 +# define PKCS12_MAC_ID 3 + +/* Default iteration count */ +# ifndef PKCS12_DEFAULT_ITER +# define PKCS12_DEFAULT_ITER PKCS5_DEFAULT_ITER +# endif + +# define PKCS12_MAC_KEY_LENGTH 20 + +# define PKCS12_SALT_LEN 8 + +/* It's not clear if these are actually needed... */ +# define PKCS12_key_gen PKCS12_key_gen_utf8 +# define PKCS12_add_friendlyname PKCS12_add_friendlyname_utf8 + +/* MS key usage constants */ + +# define KEY_EX 0x10 +# define KEY_SIG 0x80 + +typedef struct PKCS12_MAC_DATA_st PKCS12_MAC_DATA; + +typedef struct PKCS12_st PKCS12; + +typedef struct PKCS12_SAFEBAG_st PKCS12_SAFEBAG; + +DEFINE_STACK_OF(PKCS12_SAFEBAG) + +typedef struct pkcs12_bag_st PKCS12_BAGS; + +# define PKCS12_ERROR 0 +# define PKCS12_OK 1 + +/* Compatibility macros */ + +#if OPENSSL_API_COMPAT < 0x10100000L + +# define M_PKCS12_bag_type PKCS12_bag_type +# define M_PKCS12_cert_bag_type PKCS12_cert_bag_type +# define M_PKCS12_crl_bag_type PKCS12_cert_bag_type + +# define PKCS12_certbag2x509 PKCS12_SAFEBAG_get1_cert +# define PKCS12_certbag2scrl PKCS12_SAFEBAG_get1_crl +# define PKCS12_bag_type PKCS12_SAFEBAG_get_nid +# define PKCS12_cert_bag_type PKCS12_SAFEBAG_get_bag_nid +# define PKCS12_x5092certbag PKCS12_SAFEBAG_create_cert +# define PKCS12_x509crl2certbag PKCS12_SAFEBAG_create_crl +# define PKCS12_MAKE_KEYBAG PKCS12_SAFEBAG_create0_p8inf +# define PKCS12_MAKE_SHKEYBAG PKCS12_SAFEBAG_create_pkcs8_encrypt + +#endif + +DEPRECATEDIN_1_1_0(ASN1_TYPE *PKCS12_get_attr(const PKCS12_SAFEBAG *bag, int attr_nid)) + +ASN1_TYPE *PKCS8_get_attr(PKCS8_PRIV_KEY_INFO *p8, int attr_nid); +int PKCS12_mac_present(const PKCS12 *p12); +void PKCS12_get0_mac(const ASN1_OCTET_STRING **pmac, + const X509_ALGOR **pmacalg, + const ASN1_OCTET_STRING **psalt, + const ASN1_INTEGER **piter, + const PKCS12 *p12); + +const ASN1_TYPE *PKCS12_SAFEBAG_get0_attr(const PKCS12_SAFEBAG *bag, + int attr_nid); +const ASN1_OBJECT *PKCS12_SAFEBAG_get0_type(const PKCS12_SAFEBAG *bag); +int PKCS12_SAFEBAG_get_nid(const PKCS12_SAFEBAG *bag); +int PKCS12_SAFEBAG_get_bag_nid(const PKCS12_SAFEBAG *bag); + +X509 *PKCS12_SAFEBAG_get1_cert(const PKCS12_SAFEBAG *bag); +X509_CRL *PKCS12_SAFEBAG_get1_crl(const PKCS12_SAFEBAG *bag); +const STACK_OF(PKCS12_SAFEBAG) * +PKCS12_SAFEBAG_get0_safes(const PKCS12_SAFEBAG *bag); +const PKCS8_PRIV_KEY_INFO *PKCS12_SAFEBAG_get0_p8inf(const PKCS12_SAFEBAG *bag); +const X509_SIG *PKCS12_SAFEBAG_get0_pkcs8(const PKCS12_SAFEBAG *bag); + +PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_cert(X509 *x509); +PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_crl(X509_CRL *crl); +PKCS12_SAFEBAG *PKCS12_SAFEBAG_create0_p8inf(PKCS8_PRIV_KEY_INFO *p8); +PKCS12_SAFEBAG *PKCS12_SAFEBAG_create0_pkcs8(X509_SIG *p8); +PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_pkcs8_encrypt(int pbe_nid, + const char *pass, + int passlen, + unsigned char *salt, + int saltlen, int iter, + PKCS8_PRIV_KEY_INFO *p8inf); + +PKCS12_SAFEBAG *PKCS12_item_pack_safebag(void *obj, const ASN1_ITEM *it, + int nid1, int nid2); +PKCS8_PRIV_KEY_INFO *PKCS8_decrypt(const X509_SIG *p8, const char *pass, + int passlen); +PKCS8_PRIV_KEY_INFO *PKCS12_decrypt_skey(const PKCS12_SAFEBAG *bag, + const char *pass, int passlen); +X509_SIG *PKCS8_encrypt(int pbe_nid, const EVP_CIPHER *cipher, + const char *pass, int passlen, unsigned char *salt, + int saltlen, int iter, PKCS8_PRIV_KEY_INFO *p8); +X509_SIG *PKCS8_set0_pbe(const char *pass, int passlen, + PKCS8_PRIV_KEY_INFO *p8inf, X509_ALGOR *pbe); +PKCS7 *PKCS12_pack_p7data(STACK_OF(PKCS12_SAFEBAG) *sk); +STACK_OF(PKCS12_SAFEBAG) *PKCS12_unpack_p7data(PKCS7 *p7); +PKCS7 *PKCS12_pack_p7encdata(int pbe_nid, const char *pass, int passlen, + unsigned char *salt, int saltlen, int iter, + STACK_OF(PKCS12_SAFEBAG) *bags); +STACK_OF(PKCS12_SAFEBAG) *PKCS12_unpack_p7encdata(PKCS7 *p7, const char *pass, + int passlen); + +int PKCS12_pack_authsafes(PKCS12 *p12, STACK_OF(PKCS7) *safes); +STACK_OF(PKCS7) *PKCS12_unpack_authsafes(const PKCS12 *p12); + +int PKCS12_add_localkeyid(PKCS12_SAFEBAG *bag, unsigned char *name, + int namelen); +int PKCS12_add_friendlyname_asc(PKCS12_SAFEBAG *bag, const char *name, + int namelen); +int PKCS12_add_friendlyname_utf8(PKCS12_SAFEBAG *bag, const char *name, + int namelen); +int PKCS12_add_CSPName_asc(PKCS12_SAFEBAG *bag, const char *name, + int namelen); +int PKCS12_add_friendlyname_uni(PKCS12_SAFEBAG *bag, + const unsigned char *name, int namelen); +int PKCS8_add_keyusage(PKCS8_PRIV_KEY_INFO *p8, int usage); +ASN1_TYPE *PKCS12_get_attr_gen(const STACK_OF(X509_ATTRIBUTE) *attrs, + int attr_nid); +char *PKCS12_get_friendlyname(PKCS12_SAFEBAG *bag); +const STACK_OF(X509_ATTRIBUTE) * +PKCS12_SAFEBAG_get0_attrs(const PKCS12_SAFEBAG *bag); +unsigned char *PKCS12_pbe_crypt(const X509_ALGOR *algor, + const char *pass, int passlen, + const unsigned char *in, int inlen, + unsigned char **data, int *datalen, + int en_de); +void *PKCS12_item_decrypt_d2i(const X509_ALGOR *algor, const ASN1_ITEM *it, + const char *pass, int passlen, + const ASN1_OCTET_STRING *oct, int zbuf); +ASN1_OCTET_STRING *PKCS12_item_i2d_encrypt(X509_ALGOR *algor, + const ASN1_ITEM *it, + const char *pass, int passlen, + void *obj, int zbuf); +PKCS12 *PKCS12_init(int mode); +int PKCS12_key_gen_asc(const char *pass, int passlen, unsigned char *salt, + int saltlen, int id, int iter, int n, + unsigned char *out, const EVP_MD *md_type); +int PKCS12_key_gen_uni(unsigned char *pass, int passlen, unsigned char *salt, + int saltlen, int id, int iter, int n, + unsigned char *out, const EVP_MD *md_type); +int PKCS12_key_gen_utf8(const char *pass, int passlen, unsigned char *salt, + int saltlen, int id, int iter, int n, + unsigned char *out, const EVP_MD *md_type); +int PKCS12_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, + ASN1_TYPE *param, const EVP_CIPHER *cipher, + const EVP_MD *md_type, int en_de); +int PKCS12_gen_mac(PKCS12 *p12, const char *pass, int passlen, + unsigned char *mac, unsigned int *maclen); +int PKCS12_verify_mac(PKCS12 *p12, const char *pass, int passlen); +int PKCS12_set_mac(PKCS12 *p12, const char *pass, int passlen, + unsigned char *salt, int saltlen, int iter, + const EVP_MD *md_type); +int PKCS12_setup_mac(PKCS12 *p12, int iter, unsigned char *salt, + int saltlen, const EVP_MD *md_type); +unsigned char *OPENSSL_asc2uni(const char *asc, int asclen, + unsigned char **uni, int *unilen); +char *OPENSSL_uni2asc(const unsigned char *uni, int unilen); +unsigned char *OPENSSL_utf82uni(const char *asc, int asclen, + unsigned char **uni, int *unilen); +char *OPENSSL_uni2utf8(const unsigned char *uni, int unilen); + +DECLARE_ASN1_FUNCTIONS(PKCS12) +DECLARE_ASN1_FUNCTIONS(PKCS12_MAC_DATA) +DECLARE_ASN1_FUNCTIONS(PKCS12_SAFEBAG) +DECLARE_ASN1_FUNCTIONS(PKCS12_BAGS) + +DECLARE_ASN1_ITEM(PKCS12_SAFEBAGS) +DECLARE_ASN1_ITEM(PKCS12_AUTHSAFES) + +void PKCS12_PBE_add(void); +int PKCS12_parse(PKCS12 *p12, const char *pass, EVP_PKEY **pkey, X509 **cert, + STACK_OF(X509) **ca); +PKCS12 *PKCS12_create(const char *pass, const char *name, EVP_PKEY *pkey, + X509 *cert, STACK_OF(X509) *ca, int nid_key, int nid_cert, + int iter, int mac_iter, int keytype); + +PKCS12_SAFEBAG *PKCS12_add_cert(STACK_OF(PKCS12_SAFEBAG) **pbags, X509 *cert); +PKCS12_SAFEBAG *PKCS12_add_key(STACK_OF(PKCS12_SAFEBAG) **pbags, + EVP_PKEY *key, int key_usage, int iter, + int key_nid, const char *pass); +int PKCS12_add_safe(STACK_OF(PKCS7) **psafes, STACK_OF(PKCS12_SAFEBAG) *bags, + int safe_nid, int iter, const char *pass); +PKCS12 *PKCS12_add_safes(STACK_OF(PKCS7) *safes, int p7_nid); + +int i2d_PKCS12_bio(BIO *bp, PKCS12 *p12); +# ifndef OPENSSL_NO_STDIO +int i2d_PKCS12_fp(FILE *fp, PKCS12 *p12); +# endif +PKCS12 *d2i_PKCS12_bio(BIO *bp, PKCS12 **p12); +# ifndef OPENSSL_NO_STDIO +PKCS12 *d2i_PKCS12_fp(FILE *fp, PKCS12 **p12); +# endif +int PKCS12_newpass(PKCS12 *p12, const char *oldpass, const char *newpass); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pkcs12err.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pkcs12err.h new file mode 100644 index 00000000..eff5eb26 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pkcs12err.h @@ -0,0 +1,81 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2019 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_PKCS12ERR_H +# define HEADER_PKCS12ERR_H + +# ifndef HEADER_SYMHACKS_H +# include +# endif + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_PKCS12_strings(void); + +/* + * PKCS12 function codes. + */ +# define PKCS12_F_OPENSSL_ASC2UNI 121 +# define PKCS12_F_OPENSSL_UNI2ASC 124 +# define PKCS12_F_OPENSSL_UNI2UTF8 127 +# define PKCS12_F_OPENSSL_UTF82UNI 129 +# define PKCS12_F_PKCS12_CREATE 105 +# define PKCS12_F_PKCS12_GEN_MAC 107 +# define PKCS12_F_PKCS12_INIT 109 +# define PKCS12_F_PKCS12_ITEM_DECRYPT_D2I 106 +# define PKCS12_F_PKCS12_ITEM_I2D_ENCRYPT 108 +# define PKCS12_F_PKCS12_ITEM_PACK_SAFEBAG 117 +# define PKCS12_F_PKCS12_KEY_GEN_ASC 110 +# define PKCS12_F_PKCS12_KEY_GEN_UNI 111 +# define PKCS12_F_PKCS12_KEY_GEN_UTF8 116 +# define PKCS12_F_PKCS12_NEWPASS 128 +# define PKCS12_F_PKCS12_PACK_P7DATA 114 +# define PKCS12_F_PKCS12_PACK_P7ENCDATA 115 +# define PKCS12_F_PKCS12_PARSE 118 +# define PKCS12_F_PKCS12_PBE_CRYPT 119 +# define PKCS12_F_PKCS12_PBE_KEYIVGEN 120 +# define PKCS12_F_PKCS12_SAFEBAG_CREATE0_P8INF 112 +# define PKCS12_F_PKCS12_SAFEBAG_CREATE0_PKCS8 113 +# define PKCS12_F_PKCS12_SAFEBAG_CREATE_PKCS8_ENCRYPT 133 +# define PKCS12_F_PKCS12_SETUP_MAC 122 +# define PKCS12_F_PKCS12_SET_MAC 123 +# define PKCS12_F_PKCS12_UNPACK_AUTHSAFES 130 +# define PKCS12_F_PKCS12_UNPACK_P7DATA 131 +# define PKCS12_F_PKCS12_VERIFY_MAC 126 +# define PKCS12_F_PKCS8_ENCRYPT 125 +# define PKCS12_F_PKCS8_SET0_PBE 132 + +/* + * PKCS12 reason codes. + */ +# define PKCS12_R_CANT_PACK_STRUCTURE 100 +# define PKCS12_R_CONTENT_TYPE_NOT_DATA 121 +# define PKCS12_R_DECODE_ERROR 101 +# define PKCS12_R_ENCODE_ERROR 102 +# define PKCS12_R_ENCRYPT_ERROR 103 +# define PKCS12_R_ERROR_SETTING_ENCRYPTED_DATA_TYPE 120 +# define PKCS12_R_INVALID_NULL_ARGUMENT 104 +# define PKCS12_R_INVALID_NULL_PKCS12_POINTER 105 +# define PKCS12_R_IV_GEN_ERROR 106 +# define PKCS12_R_KEY_GEN_ERROR 107 +# define PKCS12_R_MAC_ABSENT 108 +# define PKCS12_R_MAC_GENERATION_ERROR 109 +# define PKCS12_R_MAC_SETUP_ERROR 110 +# define PKCS12_R_MAC_STRING_SET_ERROR 111 +# define PKCS12_R_MAC_VERIFY_FAILURE 113 +# define PKCS12_R_PARSE_ERROR 114 +# define PKCS12_R_PKCS12_ALGOR_CIPHERINIT_ERROR 115 +# define PKCS12_R_PKCS12_CIPHERFINAL_ERROR 116 +# define PKCS12_R_PKCS12_PBE_CRYPT_ERROR 117 +# define PKCS12_R_UNKNOWN_DIGEST_ALGORITHM 118 +# define PKCS12_R_UNSUPPORTED_PKCS12_MODE 119 + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pkcs7.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pkcs7.h new file mode 100644 index 00000000..9b66e002 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pkcs7.h @@ -0,0 +1,319 @@ +/* + * Copyright 1995-2016 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_PKCS7_H +# define HEADER_PKCS7_H + +# include +# include +# include + +# include +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +/*- +Encryption_ID DES-CBC +Digest_ID MD5 +Digest_Encryption_ID rsaEncryption +Key_Encryption_ID rsaEncryption +*/ + +typedef struct pkcs7_issuer_and_serial_st { + X509_NAME *issuer; + ASN1_INTEGER *serial; +} PKCS7_ISSUER_AND_SERIAL; + +typedef struct pkcs7_signer_info_st { + ASN1_INTEGER *version; /* version 1 */ + PKCS7_ISSUER_AND_SERIAL *issuer_and_serial; + X509_ALGOR *digest_alg; + STACK_OF(X509_ATTRIBUTE) *auth_attr; /* [ 0 ] */ + X509_ALGOR *digest_enc_alg; + ASN1_OCTET_STRING *enc_digest; + STACK_OF(X509_ATTRIBUTE) *unauth_attr; /* [ 1 ] */ + /* The private key to sign with */ + EVP_PKEY *pkey; +} PKCS7_SIGNER_INFO; + +DEFINE_STACK_OF(PKCS7_SIGNER_INFO) + +typedef struct pkcs7_recip_info_st { + ASN1_INTEGER *version; /* version 0 */ + PKCS7_ISSUER_AND_SERIAL *issuer_and_serial; + X509_ALGOR *key_enc_algor; + ASN1_OCTET_STRING *enc_key; + X509 *cert; /* get the pub-key from this */ +} PKCS7_RECIP_INFO; + +DEFINE_STACK_OF(PKCS7_RECIP_INFO) + +typedef struct pkcs7_signed_st { + ASN1_INTEGER *version; /* version 1 */ + STACK_OF(X509_ALGOR) *md_algs; /* md used */ + STACK_OF(X509) *cert; /* [ 0 ] */ + STACK_OF(X509_CRL) *crl; /* [ 1 ] */ + STACK_OF(PKCS7_SIGNER_INFO) *signer_info; + struct pkcs7_st *contents; +} PKCS7_SIGNED; +/* + * The above structure is very very similar to PKCS7_SIGN_ENVELOPE. How about + * merging the two + */ + +typedef struct pkcs7_enc_content_st { + ASN1_OBJECT *content_type; + X509_ALGOR *algorithm; + ASN1_OCTET_STRING *enc_data; /* [ 0 ] */ + const EVP_CIPHER *cipher; +} PKCS7_ENC_CONTENT; + +typedef struct pkcs7_enveloped_st { + ASN1_INTEGER *version; /* version 0 */ + STACK_OF(PKCS7_RECIP_INFO) *recipientinfo; + PKCS7_ENC_CONTENT *enc_data; +} PKCS7_ENVELOPE; + +typedef struct pkcs7_signedandenveloped_st { + ASN1_INTEGER *version; /* version 1 */ + STACK_OF(X509_ALGOR) *md_algs; /* md used */ + STACK_OF(X509) *cert; /* [ 0 ] */ + STACK_OF(X509_CRL) *crl; /* [ 1 ] */ + STACK_OF(PKCS7_SIGNER_INFO) *signer_info; + PKCS7_ENC_CONTENT *enc_data; + STACK_OF(PKCS7_RECIP_INFO) *recipientinfo; +} PKCS7_SIGN_ENVELOPE; + +typedef struct pkcs7_digest_st { + ASN1_INTEGER *version; /* version 0 */ + X509_ALGOR *md; /* md used */ + struct pkcs7_st *contents; + ASN1_OCTET_STRING *digest; +} PKCS7_DIGEST; + +typedef struct pkcs7_encrypted_st { + ASN1_INTEGER *version; /* version 0 */ + PKCS7_ENC_CONTENT *enc_data; +} PKCS7_ENCRYPT; + +typedef struct pkcs7_st { + /* + * The following is non NULL if it contains ASN1 encoding of this + * structure + */ + unsigned char *asn1; + long length; +# define PKCS7_S_HEADER 0 +# define PKCS7_S_BODY 1 +# define PKCS7_S_TAIL 2 + int state; /* used during processing */ + int detached; + ASN1_OBJECT *type; + /* content as defined by the type */ + /* + * all encryption/message digests are applied to the 'contents', leaving + * out the 'type' field. + */ + union { + char *ptr; + /* NID_pkcs7_data */ + ASN1_OCTET_STRING *data; + /* NID_pkcs7_signed */ + PKCS7_SIGNED *sign; + /* NID_pkcs7_enveloped */ + PKCS7_ENVELOPE *enveloped; + /* NID_pkcs7_signedAndEnveloped */ + PKCS7_SIGN_ENVELOPE *signed_and_enveloped; + /* NID_pkcs7_digest */ + PKCS7_DIGEST *digest; + /* NID_pkcs7_encrypted */ + PKCS7_ENCRYPT *encrypted; + /* Anything else */ + ASN1_TYPE *other; + } d; +} PKCS7; + +DEFINE_STACK_OF(PKCS7) + +# define PKCS7_OP_SET_DETACHED_SIGNATURE 1 +# define PKCS7_OP_GET_DETACHED_SIGNATURE 2 + +# define PKCS7_get_signed_attributes(si) ((si)->auth_attr) +# define PKCS7_get_attributes(si) ((si)->unauth_attr) + +# define PKCS7_type_is_signed(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_signed) +# define PKCS7_type_is_encrypted(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_encrypted) +# define PKCS7_type_is_enveloped(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_enveloped) +# define PKCS7_type_is_signedAndEnveloped(a) \ + (OBJ_obj2nid((a)->type) == NID_pkcs7_signedAndEnveloped) +# define PKCS7_type_is_data(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_data) +# define PKCS7_type_is_digest(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_digest) + +# define PKCS7_set_detached(p,v) \ + PKCS7_ctrl(p,PKCS7_OP_SET_DETACHED_SIGNATURE,v,NULL) +# define PKCS7_get_detached(p) \ + PKCS7_ctrl(p,PKCS7_OP_GET_DETACHED_SIGNATURE,0,NULL) + +# define PKCS7_is_detached(p7) (PKCS7_type_is_signed(p7) && PKCS7_get_detached(p7)) + +/* S/MIME related flags */ + +# define PKCS7_TEXT 0x1 +# define PKCS7_NOCERTS 0x2 +# define PKCS7_NOSIGS 0x4 +# define PKCS7_NOCHAIN 0x8 +# define PKCS7_NOINTERN 0x10 +# define PKCS7_NOVERIFY 0x20 +# define PKCS7_DETACHED 0x40 +# define PKCS7_BINARY 0x80 +# define PKCS7_NOATTR 0x100 +# define PKCS7_NOSMIMECAP 0x200 +# define PKCS7_NOOLDMIMETYPE 0x400 +# define PKCS7_CRLFEOL 0x800 +# define PKCS7_STREAM 0x1000 +# define PKCS7_NOCRL 0x2000 +# define PKCS7_PARTIAL 0x4000 +# define PKCS7_REUSE_DIGEST 0x8000 +# define PKCS7_NO_DUAL_CONTENT 0x10000 + +/* Flags: for compatibility with older code */ + +# define SMIME_TEXT PKCS7_TEXT +# define SMIME_NOCERTS PKCS7_NOCERTS +# define SMIME_NOSIGS PKCS7_NOSIGS +# define SMIME_NOCHAIN PKCS7_NOCHAIN +# define SMIME_NOINTERN PKCS7_NOINTERN +# define SMIME_NOVERIFY PKCS7_NOVERIFY +# define SMIME_DETACHED PKCS7_DETACHED +# define SMIME_BINARY PKCS7_BINARY +# define SMIME_NOATTR PKCS7_NOATTR + +/* CRLF ASCII canonicalisation */ +# define SMIME_ASCIICRLF 0x80000 + +DECLARE_ASN1_FUNCTIONS(PKCS7_ISSUER_AND_SERIAL) + +int PKCS7_ISSUER_AND_SERIAL_digest(PKCS7_ISSUER_AND_SERIAL *data, + const EVP_MD *type, unsigned char *md, + unsigned int *len); +# ifndef OPENSSL_NO_STDIO +PKCS7 *d2i_PKCS7_fp(FILE *fp, PKCS7 **p7); +int i2d_PKCS7_fp(FILE *fp, PKCS7 *p7); +# endif +PKCS7 *PKCS7_dup(PKCS7 *p7); +PKCS7 *d2i_PKCS7_bio(BIO *bp, PKCS7 **p7); +int i2d_PKCS7_bio(BIO *bp, PKCS7 *p7); +int i2d_PKCS7_bio_stream(BIO *out, PKCS7 *p7, BIO *in, int flags); +int PEM_write_bio_PKCS7_stream(BIO *out, PKCS7 *p7, BIO *in, int flags); + +DECLARE_ASN1_FUNCTIONS(PKCS7_SIGNER_INFO) +DECLARE_ASN1_FUNCTIONS(PKCS7_RECIP_INFO) +DECLARE_ASN1_FUNCTIONS(PKCS7_SIGNED) +DECLARE_ASN1_FUNCTIONS(PKCS7_ENC_CONTENT) +DECLARE_ASN1_FUNCTIONS(PKCS7_ENVELOPE) +DECLARE_ASN1_FUNCTIONS(PKCS7_SIGN_ENVELOPE) +DECLARE_ASN1_FUNCTIONS(PKCS7_DIGEST) +DECLARE_ASN1_FUNCTIONS(PKCS7_ENCRYPT) +DECLARE_ASN1_FUNCTIONS(PKCS7) + +DECLARE_ASN1_ITEM(PKCS7_ATTR_SIGN) +DECLARE_ASN1_ITEM(PKCS7_ATTR_VERIFY) + +DECLARE_ASN1_NDEF_FUNCTION(PKCS7) +DECLARE_ASN1_PRINT_FUNCTION(PKCS7) + +long PKCS7_ctrl(PKCS7 *p7, int cmd, long larg, char *parg); + +int PKCS7_set_type(PKCS7 *p7, int type); +int PKCS7_set0_type_other(PKCS7 *p7, int type, ASN1_TYPE *other); +int PKCS7_set_content(PKCS7 *p7, PKCS7 *p7_data); +int PKCS7_SIGNER_INFO_set(PKCS7_SIGNER_INFO *p7i, X509 *x509, EVP_PKEY *pkey, + const EVP_MD *dgst); +int PKCS7_SIGNER_INFO_sign(PKCS7_SIGNER_INFO *si); +int PKCS7_add_signer(PKCS7 *p7, PKCS7_SIGNER_INFO *p7i); +int PKCS7_add_certificate(PKCS7 *p7, X509 *x509); +int PKCS7_add_crl(PKCS7 *p7, X509_CRL *x509); +int PKCS7_content_new(PKCS7 *p7, int nid); +int PKCS7_dataVerify(X509_STORE *cert_store, X509_STORE_CTX *ctx, + BIO *bio, PKCS7 *p7, PKCS7_SIGNER_INFO *si); +int PKCS7_signatureVerify(BIO *bio, PKCS7 *p7, PKCS7_SIGNER_INFO *si, + X509 *x509); + +BIO *PKCS7_dataInit(PKCS7 *p7, BIO *bio); +int PKCS7_dataFinal(PKCS7 *p7, BIO *bio); +BIO *PKCS7_dataDecode(PKCS7 *p7, EVP_PKEY *pkey, BIO *in_bio, X509 *pcert); + +PKCS7_SIGNER_INFO *PKCS7_add_signature(PKCS7 *p7, X509 *x509, + EVP_PKEY *pkey, const EVP_MD *dgst); +X509 *PKCS7_cert_from_signer_info(PKCS7 *p7, PKCS7_SIGNER_INFO *si); +int PKCS7_set_digest(PKCS7 *p7, const EVP_MD *md); +STACK_OF(PKCS7_SIGNER_INFO) *PKCS7_get_signer_info(PKCS7 *p7); + +PKCS7_RECIP_INFO *PKCS7_add_recipient(PKCS7 *p7, X509 *x509); +void PKCS7_SIGNER_INFO_get0_algs(PKCS7_SIGNER_INFO *si, EVP_PKEY **pk, + X509_ALGOR **pdig, X509_ALGOR **psig); +void PKCS7_RECIP_INFO_get0_alg(PKCS7_RECIP_INFO *ri, X509_ALGOR **penc); +int PKCS7_add_recipient_info(PKCS7 *p7, PKCS7_RECIP_INFO *ri); +int PKCS7_RECIP_INFO_set(PKCS7_RECIP_INFO *p7i, X509 *x509); +int PKCS7_set_cipher(PKCS7 *p7, const EVP_CIPHER *cipher); +int PKCS7_stream(unsigned char ***boundary, PKCS7 *p7); + +PKCS7_ISSUER_AND_SERIAL *PKCS7_get_issuer_and_serial(PKCS7 *p7, int idx); +ASN1_OCTET_STRING *PKCS7_digest_from_attributes(STACK_OF(X509_ATTRIBUTE) *sk); +int PKCS7_add_signed_attribute(PKCS7_SIGNER_INFO *p7si, int nid, int type, + void *data); +int PKCS7_add_attribute(PKCS7_SIGNER_INFO *p7si, int nid, int atrtype, + void *value); +ASN1_TYPE *PKCS7_get_attribute(PKCS7_SIGNER_INFO *si, int nid); +ASN1_TYPE *PKCS7_get_signed_attribute(PKCS7_SIGNER_INFO *si, int nid); +int PKCS7_set_signed_attributes(PKCS7_SIGNER_INFO *p7si, + STACK_OF(X509_ATTRIBUTE) *sk); +int PKCS7_set_attributes(PKCS7_SIGNER_INFO *p7si, + STACK_OF(X509_ATTRIBUTE) *sk); + +PKCS7 *PKCS7_sign(X509 *signcert, EVP_PKEY *pkey, STACK_OF(X509) *certs, + BIO *data, int flags); + +PKCS7_SIGNER_INFO *PKCS7_sign_add_signer(PKCS7 *p7, + X509 *signcert, EVP_PKEY *pkey, + const EVP_MD *md, int flags); + +int PKCS7_final(PKCS7 *p7, BIO *data, int flags); +int PKCS7_verify(PKCS7 *p7, STACK_OF(X509) *certs, X509_STORE *store, + BIO *indata, BIO *out, int flags); +STACK_OF(X509) *PKCS7_get0_signers(PKCS7 *p7, STACK_OF(X509) *certs, + int flags); +PKCS7 *PKCS7_encrypt(STACK_OF(X509) *certs, BIO *in, const EVP_CIPHER *cipher, + int flags); +int PKCS7_decrypt(PKCS7 *p7, EVP_PKEY *pkey, X509 *cert, BIO *data, + int flags); + +int PKCS7_add_attrib_smimecap(PKCS7_SIGNER_INFO *si, + STACK_OF(X509_ALGOR) *cap); +STACK_OF(X509_ALGOR) *PKCS7_get_smimecap(PKCS7_SIGNER_INFO *si); +int PKCS7_simple_smimecap(STACK_OF(X509_ALGOR) *sk, int nid, int arg); + +int PKCS7_add_attrib_content_type(PKCS7_SIGNER_INFO *si, ASN1_OBJECT *coid); +int PKCS7_add0_attrib_signing_time(PKCS7_SIGNER_INFO *si, ASN1_TIME *t); +int PKCS7_add1_attrib_digest(PKCS7_SIGNER_INFO *si, + const unsigned char *md, int mdlen); + +int SMIME_write_PKCS7(BIO *bio, PKCS7 *p7, BIO *data, int flags); +PKCS7 *SMIME_read_PKCS7(BIO *bio, BIO **bcont); + +BIO *BIO_new_PKCS7(BIO *out, PKCS7 *p7); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pkcs7err.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pkcs7err.h new file mode 100644 index 00000000..02e0299a --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pkcs7err.h @@ -0,0 +1,103 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2019 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_PKCS7ERR_H +# define HEADER_PKCS7ERR_H + +# ifndef HEADER_SYMHACKS_H +# include +# endif + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_PKCS7_strings(void); + +/* + * PKCS7 function codes. + */ +# define PKCS7_F_DO_PKCS7_SIGNED_ATTRIB 136 +# define PKCS7_F_PKCS7_ADD0_ATTRIB_SIGNING_TIME 135 +# define PKCS7_F_PKCS7_ADD_ATTRIB_SMIMECAP 118 +# define PKCS7_F_PKCS7_ADD_CERTIFICATE 100 +# define PKCS7_F_PKCS7_ADD_CRL 101 +# define PKCS7_F_PKCS7_ADD_RECIPIENT_INFO 102 +# define PKCS7_F_PKCS7_ADD_SIGNATURE 131 +# define PKCS7_F_PKCS7_ADD_SIGNER 103 +# define PKCS7_F_PKCS7_BIO_ADD_DIGEST 125 +# define PKCS7_F_PKCS7_COPY_EXISTING_DIGEST 138 +# define PKCS7_F_PKCS7_CTRL 104 +# define PKCS7_F_PKCS7_DATADECODE 112 +# define PKCS7_F_PKCS7_DATAFINAL 128 +# define PKCS7_F_PKCS7_DATAINIT 105 +# define PKCS7_F_PKCS7_DATAVERIFY 107 +# define PKCS7_F_PKCS7_DECRYPT 114 +# define PKCS7_F_PKCS7_DECRYPT_RINFO 133 +# define PKCS7_F_PKCS7_ENCODE_RINFO 132 +# define PKCS7_F_PKCS7_ENCRYPT 115 +# define PKCS7_F_PKCS7_FINAL 134 +# define PKCS7_F_PKCS7_FIND_DIGEST 127 +# define PKCS7_F_PKCS7_GET0_SIGNERS 124 +# define PKCS7_F_PKCS7_RECIP_INFO_SET 130 +# define PKCS7_F_PKCS7_SET_CIPHER 108 +# define PKCS7_F_PKCS7_SET_CONTENT 109 +# define PKCS7_F_PKCS7_SET_DIGEST 126 +# define PKCS7_F_PKCS7_SET_TYPE 110 +# define PKCS7_F_PKCS7_SIGN 116 +# define PKCS7_F_PKCS7_SIGNATUREVERIFY 113 +# define PKCS7_F_PKCS7_SIGNER_INFO_SET 129 +# define PKCS7_F_PKCS7_SIGNER_INFO_SIGN 139 +# define PKCS7_F_PKCS7_SIGN_ADD_SIGNER 137 +# define PKCS7_F_PKCS7_SIMPLE_SMIMECAP 119 +# define PKCS7_F_PKCS7_VERIFY 117 + +/* + * PKCS7 reason codes. + */ +# define PKCS7_R_CERTIFICATE_VERIFY_ERROR 117 +# define PKCS7_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER 144 +# define PKCS7_R_CIPHER_NOT_INITIALIZED 116 +# define PKCS7_R_CONTENT_AND_DATA_PRESENT 118 +# define PKCS7_R_CTRL_ERROR 152 +# define PKCS7_R_DECRYPT_ERROR 119 +# define PKCS7_R_DIGEST_FAILURE 101 +# define PKCS7_R_ENCRYPTION_CTRL_FAILURE 149 +# define PKCS7_R_ENCRYPTION_NOT_SUPPORTED_FOR_THIS_KEY_TYPE 150 +# define PKCS7_R_ERROR_ADDING_RECIPIENT 120 +# define PKCS7_R_ERROR_SETTING_CIPHER 121 +# define PKCS7_R_INVALID_NULL_POINTER 143 +# define PKCS7_R_INVALID_SIGNED_DATA_TYPE 155 +# define PKCS7_R_NO_CONTENT 122 +# define PKCS7_R_NO_DEFAULT_DIGEST 151 +# define PKCS7_R_NO_MATCHING_DIGEST_TYPE_FOUND 154 +# define PKCS7_R_NO_RECIPIENT_MATCHES_CERTIFICATE 115 +# define PKCS7_R_NO_SIGNATURES_ON_DATA 123 +# define PKCS7_R_NO_SIGNERS 142 +# define PKCS7_R_OPERATION_NOT_SUPPORTED_ON_THIS_TYPE 104 +# define PKCS7_R_PKCS7_ADD_SIGNATURE_ERROR 124 +# define PKCS7_R_PKCS7_ADD_SIGNER_ERROR 153 +# define PKCS7_R_PKCS7_DATASIGN 145 +# define PKCS7_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE 127 +# define PKCS7_R_SIGNATURE_FAILURE 105 +# define PKCS7_R_SIGNER_CERTIFICATE_NOT_FOUND 128 +# define PKCS7_R_SIGNING_CTRL_FAILURE 147 +# define PKCS7_R_SIGNING_NOT_SUPPORTED_FOR_THIS_KEY_TYPE 148 +# define PKCS7_R_SMIME_TEXT_ERROR 129 +# define PKCS7_R_UNABLE_TO_FIND_CERTIFICATE 106 +# define PKCS7_R_UNABLE_TO_FIND_MEM_BIO 107 +# define PKCS7_R_UNABLE_TO_FIND_MESSAGE_DIGEST 108 +# define PKCS7_R_UNKNOWN_DIGEST_TYPE 109 +# define PKCS7_R_UNKNOWN_OPERATION 110 +# define PKCS7_R_UNSUPPORTED_CIPHER_TYPE 111 +# define PKCS7_R_UNSUPPORTED_CONTENT_TYPE 112 +# define PKCS7_R_WRONG_CONTENT_TYPE 113 +# define PKCS7_R_WRONG_PKCS7_TYPE 114 + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/rand.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/rand.h new file mode 100644 index 00000000..38a2a271 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/rand.h @@ -0,0 +1,77 @@ +/* + * Copyright 1995-2018 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_RAND_H +# define HEADER_RAND_H + +# include +# include +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +struct rand_meth_st { + int (*seed) (const void *buf, int num); + int (*bytes) (unsigned char *buf, int num); + void (*cleanup) (void); + int (*add) (const void *buf, int num, double randomness); + int (*pseudorand) (unsigned char *buf, int num); + int (*status) (void); +}; + +int RAND_set_rand_method(const RAND_METHOD *meth); +const RAND_METHOD *RAND_get_rand_method(void); +# ifndef OPENSSL_NO_ENGINE +int RAND_set_rand_engine(ENGINE *engine); +# endif + +RAND_METHOD *RAND_OpenSSL(void); + +# if OPENSSL_API_COMPAT < 0x10100000L +# define RAND_cleanup() while(0) continue +# endif +int RAND_bytes(unsigned char *buf, int num); +int RAND_priv_bytes(unsigned char *buf, int num); +DEPRECATEDIN_1_1_0(int RAND_pseudo_bytes(unsigned char *buf, int num)) + +void RAND_seed(const void *buf, int num); +void RAND_keep_random_devices_open(int keep); + +# if defined(__ANDROID__) && defined(__NDK_FPABI__) +__NDK_FPABI__ /* __attribute__((pcs("aapcs"))) on ARM */ +# endif +void RAND_add(const void *buf, int num, double randomness); +int RAND_load_file(const char *file, long max_bytes); +int RAND_write_file(const char *file); +const char *RAND_file_name(char *file, size_t num); +int RAND_status(void); + +# ifndef OPENSSL_NO_EGD +int RAND_query_egd_bytes(const char *path, unsigned char *buf, int bytes); +int RAND_egd(const char *path); +int RAND_egd_bytes(const char *path, int bytes); +# endif + +int RAND_poll(void); + +# if defined(_WIN32) && (defined(BASETYPES) || defined(_WINDEF_H)) +/* application has to include in order to use these */ +DEPRECATEDIN_1_1_0(void RAND_screen(void)) +DEPRECATEDIN_1_1_0(int RAND_event(UINT, WPARAM, LPARAM)) +# endif + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/rand_drbg.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/rand_drbg.h new file mode 100644 index 00000000..45b731b7 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/rand_drbg.h @@ -0,0 +1,130 @@ +/* + * Copyright 2017-2018 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_DRBG_RAND_H +# define HEADER_DRBG_RAND_H + +# include +# include +# include + +/* + * RAND_DRBG flags + * + * Note: if new flags are added, the constant `rand_drbg_used_flags` + * in drbg_lib.c needs to be updated accordingly. + */ + +/* In CTR mode, disable derivation function ctr_df */ +# define RAND_DRBG_FLAG_CTR_NO_DF 0x1 + + +# if OPENSSL_API_COMPAT < 0x10200000L +/* This #define was replaced by an internal constant and should not be used. */ +# define RAND_DRBG_USED_FLAGS (RAND_DRBG_FLAG_CTR_NO_DF) +# endif + +/* + * Default security strength (in the sense of [NIST SP 800-90Ar1]) + * + * NIST SP 800-90Ar1 supports the strength of the DRBG being smaller than that + * of the cipher by collecting less entropy. The current DRBG implementation + * does not take RAND_DRBG_STRENGTH into account and sets the strength of the + * DRBG to that of the cipher. + * + * RAND_DRBG_STRENGTH is currently only used for the legacy RAND + * implementation. + * + * Currently supported ciphers are: NID_aes_128_ctr, NID_aes_192_ctr and + * NID_aes_256_ctr + */ +# define RAND_DRBG_STRENGTH 256 +/* Default drbg type */ +# define RAND_DRBG_TYPE NID_aes_256_ctr +/* Default drbg flags */ +# define RAND_DRBG_FLAGS 0 + + +# ifdef __cplusplus +extern "C" { +# endif + +/* + * Object lifetime functions. + */ +RAND_DRBG *RAND_DRBG_new(int type, unsigned int flags, RAND_DRBG *parent); +RAND_DRBG *RAND_DRBG_secure_new(int type, unsigned int flags, RAND_DRBG *parent); +int RAND_DRBG_set(RAND_DRBG *drbg, int type, unsigned int flags); +int RAND_DRBG_set_defaults(int type, unsigned int flags); +int RAND_DRBG_instantiate(RAND_DRBG *drbg, + const unsigned char *pers, size_t perslen); +int RAND_DRBG_uninstantiate(RAND_DRBG *drbg); +void RAND_DRBG_free(RAND_DRBG *drbg); + +/* + * Object "use" functions. + */ +int RAND_DRBG_reseed(RAND_DRBG *drbg, + const unsigned char *adin, size_t adinlen, + int prediction_resistance); +int RAND_DRBG_generate(RAND_DRBG *drbg, unsigned char *out, size_t outlen, + int prediction_resistance, + const unsigned char *adin, size_t adinlen); +int RAND_DRBG_bytes(RAND_DRBG *drbg, unsigned char *out, size_t outlen); + +int RAND_DRBG_set_reseed_interval(RAND_DRBG *drbg, unsigned int interval); +int RAND_DRBG_set_reseed_time_interval(RAND_DRBG *drbg, time_t interval); + +int RAND_DRBG_set_reseed_defaults( + unsigned int master_reseed_interval, + unsigned int slave_reseed_interval, + time_t master_reseed_time_interval, + time_t slave_reseed_time_interval + ); + +RAND_DRBG *RAND_DRBG_get0_master(void); +RAND_DRBG *RAND_DRBG_get0_public(void); +RAND_DRBG *RAND_DRBG_get0_private(void); + +/* + * EXDATA + */ +# define RAND_DRBG_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_DRBG, l, p, newf, dupf, freef) +int RAND_DRBG_set_ex_data(RAND_DRBG *drbg, int idx, void *arg); +void *RAND_DRBG_get_ex_data(const RAND_DRBG *drbg, int idx); + +/* + * Callback function typedefs + */ +typedef size_t (*RAND_DRBG_get_entropy_fn)(RAND_DRBG *drbg, + unsigned char **pout, + int entropy, size_t min_len, + size_t max_len, + int prediction_resistance); +typedef void (*RAND_DRBG_cleanup_entropy_fn)(RAND_DRBG *ctx, + unsigned char *out, size_t outlen); +typedef size_t (*RAND_DRBG_get_nonce_fn)(RAND_DRBG *drbg, unsigned char **pout, + int entropy, size_t min_len, + size_t max_len); +typedef void (*RAND_DRBG_cleanup_nonce_fn)(RAND_DRBG *drbg, + unsigned char *out, size_t outlen); + +int RAND_DRBG_set_callbacks(RAND_DRBG *drbg, + RAND_DRBG_get_entropy_fn get_entropy, + RAND_DRBG_cleanup_entropy_fn cleanup_entropy, + RAND_DRBG_get_nonce_fn get_nonce, + RAND_DRBG_cleanup_nonce_fn cleanup_nonce); + + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/randerr.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/randerr.h new file mode 100644 index 00000000..79d57905 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/randerr.h @@ -0,0 +1,94 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_RANDERR_H +# define HEADER_RANDERR_H + +# include + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_RAND_strings(void); + +/* + * RAND function codes. + */ +# define RAND_F_DATA_COLLECT_METHOD 127 +# define RAND_F_DRBG_BYTES 101 +# define RAND_F_DRBG_GET_ENTROPY 105 +# define RAND_F_DRBG_SETUP 117 +# define RAND_F_GET_ENTROPY 106 +# define RAND_F_RAND_BYTES 100 +# define RAND_F_RAND_DRBG_ENABLE_LOCKING 119 +# define RAND_F_RAND_DRBG_GENERATE 107 +# define RAND_F_RAND_DRBG_GET_ENTROPY 120 +# define RAND_F_RAND_DRBG_GET_NONCE 123 +# define RAND_F_RAND_DRBG_INSTANTIATE 108 +# define RAND_F_RAND_DRBG_NEW 109 +# define RAND_F_RAND_DRBG_RESEED 110 +# define RAND_F_RAND_DRBG_RESTART 102 +# define RAND_F_RAND_DRBG_SET 104 +# define RAND_F_RAND_DRBG_SET_DEFAULTS 121 +# define RAND_F_RAND_DRBG_UNINSTANTIATE 118 +# define RAND_F_RAND_LOAD_FILE 111 +# define RAND_F_RAND_POOL_ACQUIRE_ENTROPY 122 +# define RAND_F_RAND_POOL_ADD 103 +# define RAND_F_RAND_POOL_ADD_BEGIN 113 +# define RAND_F_RAND_POOL_ADD_END 114 +# define RAND_F_RAND_POOL_ATTACH 124 +# define RAND_F_RAND_POOL_BYTES_NEEDED 115 +# define RAND_F_RAND_POOL_GROW 125 +# define RAND_F_RAND_POOL_NEW 116 +# define RAND_F_RAND_PSEUDO_BYTES 126 +# define RAND_F_RAND_WRITE_FILE 112 + +/* + * RAND reason codes. + */ +# define RAND_R_ADDITIONAL_INPUT_TOO_LONG 102 +# define RAND_R_ALREADY_INSTANTIATED 103 +# define RAND_R_ARGUMENT_OUT_OF_RANGE 105 +# define RAND_R_CANNOT_OPEN_FILE 121 +# define RAND_R_DRBG_ALREADY_INITIALIZED 129 +# define RAND_R_DRBG_NOT_INITIALISED 104 +# define RAND_R_ENTROPY_INPUT_TOO_LONG 106 +# define RAND_R_ENTROPY_OUT_OF_RANGE 124 +# define RAND_R_ERROR_ENTROPY_POOL_WAS_IGNORED 127 +# define RAND_R_ERROR_INITIALISING_DRBG 107 +# define RAND_R_ERROR_INSTANTIATING_DRBG 108 +# define RAND_R_ERROR_RETRIEVING_ADDITIONAL_INPUT 109 +# define RAND_R_ERROR_RETRIEVING_ENTROPY 110 +# define RAND_R_ERROR_RETRIEVING_NONCE 111 +# define RAND_R_FAILED_TO_CREATE_LOCK 126 +# define RAND_R_FUNC_NOT_IMPLEMENTED 101 +# define RAND_R_FWRITE_ERROR 123 +# define RAND_R_GENERATE_ERROR 112 +# define RAND_R_INTERNAL_ERROR 113 +# define RAND_R_IN_ERROR_STATE 114 +# define RAND_R_NOT_A_REGULAR_FILE 122 +# define RAND_R_NOT_INSTANTIATED 115 +# define RAND_R_NO_DRBG_IMPLEMENTATION_SELECTED 128 +# define RAND_R_PARENT_LOCKING_NOT_ENABLED 130 +# define RAND_R_PARENT_STRENGTH_TOO_WEAK 131 +# define RAND_R_PERSONALISATION_STRING_TOO_LONG 116 +# define RAND_R_PREDICTION_RESISTANCE_NOT_SUPPORTED 133 +# define RAND_R_PRNG_NOT_SEEDED 100 +# define RAND_R_RANDOM_POOL_OVERFLOW 125 +# define RAND_R_RANDOM_POOL_UNDERFLOW 134 +# define RAND_R_REQUEST_TOO_LARGE_FOR_DRBG 117 +# define RAND_R_RESEED_ERROR 118 +# define RAND_R_SELFTEST_FAILURE 119 +# define RAND_R_TOO_LITTLE_NONCE_REQUESTED 135 +# define RAND_R_TOO_MUCH_NONCE_REQUESTED 136 +# define RAND_R_UNSUPPORTED_DRBG_FLAGS 132 +# define RAND_R_UNSUPPORTED_DRBG_TYPE 120 + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/rc2.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/rc2.h new file mode 100644 index 00000000..585f9e4c --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/rc2.h @@ -0,0 +1,51 @@ +/* + * Copyright 1995-2016 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_RC2_H +# define HEADER_RC2_H + +# include + +# ifndef OPENSSL_NO_RC2 +# ifdef __cplusplus +extern "C" { +# endif + +typedef unsigned int RC2_INT; + +# define RC2_ENCRYPT 1 +# define RC2_DECRYPT 0 + +# define RC2_BLOCK 8 +# define RC2_KEY_LENGTH 16 + +typedef struct rc2_key_st { + RC2_INT data[64]; +} RC2_KEY; + +void RC2_set_key(RC2_KEY *key, int len, const unsigned char *data, int bits); +void RC2_ecb_encrypt(const unsigned char *in, unsigned char *out, + RC2_KEY *key, int enc); +void RC2_encrypt(unsigned long *data, RC2_KEY *key); +void RC2_decrypt(unsigned long *data, RC2_KEY *key); +void RC2_cbc_encrypt(const unsigned char *in, unsigned char *out, long length, + RC2_KEY *ks, unsigned char *iv, int enc); +void RC2_cfb64_encrypt(const unsigned char *in, unsigned char *out, + long length, RC2_KEY *schedule, unsigned char *ivec, + int *num, int enc); +void RC2_ofb64_encrypt(const unsigned char *in, unsigned char *out, + long length, RC2_KEY *schedule, unsigned char *ivec, + int *num); + +# ifdef __cplusplus +} +# endif +# endif + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/rc4.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/rc4.h new file mode 100644 index 00000000..86803b37 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/rc4.h @@ -0,0 +1,36 @@ +/* + * Copyright 1995-2016 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_RC4_H +# define HEADER_RC4_H + +# include + +# ifndef OPENSSL_NO_RC4 +# include +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct rc4_key_st { + RC4_INT x, y; + RC4_INT data[256]; +} RC4_KEY; + +const char *RC4_options(void); +void RC4_set_key(RC4_KEY *key, int len, const unsigned char *data); +void RC4(RC4_KEY *key, size_t len, const unsigned char *indata, + unsigned char *outdata); + +# ifdef __cplusplus +} +# endif +# endif + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/rc5.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/rc5.h new file mode 100644 index 00000000..793f88e4 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/rc5.h @@ -0,0 +1,63 @@ +/* + * Copyright 1995-2016 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_RC5_H +# define HEADER_RC5_H + +# include + +# ifndef OPENSSL_NO_RC5 +# ifdef __cplusplus +extern "C" { +# endif + +# define RC5_ENCRYPT 1 +# define RC5_DECRYPT 0 + +# define RC5_32_INT unsigned int + +# define RC5_32_BLOCK 8 +# define RC5_32_KEY_LENGTH 16/* This is a default, max is 255 */ + +/* + * This are the only values supported. Tweak the code if you want more The + * most supported modes will be RC5-32/12/16 RC5-32/16/8 + */ +# define RC5_8_ROUNDS 8 +# define RC5_12_ROUNDS 12 +# define RC5_16_ROUNDS 16 + +typedef struct rc5_key_st { + /* Number of rounds */ + int rounds; + RC5_32_INT data[2 * (RC5_16_ROUNDS + 1)]; +} RC5_32_KEY; + +void RC5_32_set_key(RC5_32_KEY *key, int len, const unsigned char *data, + int rounds); +void RC5_32_ecb_encrypt(const unsigned char *in, unsigned char *out, + RC5_32_KEY *key, int enc); +void RC5_32_encrypt(unsigned long *data, RC5_32_KEY *key); +void RC5_32_decrypt(unsigned long *data, RC5_32_KEY *key); +void RC5_32_cbc_encrypt(const unsigned char *in, unsigned char *out, + long length, RC5_32_KEY *ks, unsigned char *iv, + int enc); +void RC5_32_cfb64_encrypt(const unsigned char *in, unsigned char *out, + long length, RC5_32_KEY *schedule, + unsigned char *ivec, int *num, int enc); +void RC5_32_ofb64_encrypt(const unsigned char *in, unsigned char *out, + long length, RC5_32_KEY *schedule, + unsigned char *ivec, int *num); + +# ifdef __cplusplus +} +# endif +# endif + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ripemd.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ripemd.h new file mode 100644 index 00000000..c42026aa --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ripemd.h @@ -0,0 +1,47 @@ +/* + * Copyright 1995-2016 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_RIPEMD_H +# define HEADER_RIPEMD_H + +# include + +#ifndef OPENSSL_NO_RMD160 +# include +# include +# ifdef __cplusplus +extern "C" { +# endif + +# define RIPEMD160_LONG unsigned int + +# define RIPEMD160_CBLOCK 64 +# define RIPEMD160_LBLOCK (RIPEMD160_CBLOCK/4) +# define RIPEMD160_DIGEST_LENGTH 20 + +typedef struct RIPEMD160state_st { + RIPEMD160_LONG A, B, C, D, E; + RIPEMD160_LONG Nl, Nh; + RIPEMD160_LONG data[RIPEMD160_LBLOCK]; + unsigned int num; +} RIPEMD160_CTX; + +int RIPEMD160_Init(RIPEMD160_CTX *c); +int RIPEMD160_Update(RIPEMD160_CTX *c, const void *data, size_t len); +int RIPEMD160_Final(unsigned char *md, RIPEMD160_CTX *c); +unsigned char *RIPEMD160(const unsigned char *d, size_t n, unsigned char *md); +void RIPEMD160_Transform(RIPEMD160_CTX *c, const unsigned char *b); + +# ifdef __cplusplus +} +# endif +# endif + + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/rsa.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/rsa.h new file mode 100644 index 00000000..5e76365c --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/rsa.h @@ -0,0 +1,513 @@ +/* + * Copyright 1995-2018 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_RSA_H +# define HEADER_RSA_H + +# include + +# ifndef OPENSSL_NO_RSA +# include +# include +# include +# include +# if OPENSSL_API_COMPAT < 0x10100000L +# include +# endif +# include +# ifdef __cplusplus +extern "C" { +# endif + +/* The types RSA and RSA_METHOD are defined in ossl_typ.h */ + +# ifndef OPENSSL_RSA_MAX_MODULUS_BITS +# define OPENSSL_RSA_MAX_MODULUS_BITS 16384 +# endif + +# define OPENSSL_RSA_FIPS_MIN_MODULUS_BITS 1024 + +# ifndef OPENSSL_RSA_SMALL_MODULUS_BITS +# define OPENSSL_RSA_SMALL_MODULUS_BITS 3072 +# endif +# ifndef OPENSSL_RSA_MAX_PUBEXP_BITS + +/* exponent limit enforced for "large" modulus only */ +# define OPENSSL_RSA_MAX_PUBEXP_BITS 64 +# endif + +# define RSA_3 0x3L +# define RSA_F4 0x10001L + +/* based on RFC 8017 appendix A.1.2 */ +# define RSA_ASN1_VERSION_DEFAULT 0 +# define RSA_ASN1_VERSION_MULTI 1 + +# define RSA_DEFAULT_PRIME_NUM 2 + +# define RSA_METHOD_FLAG_NO_CHECK 0x0001/* don't check pub/private + * match */ + +# define RSA_FLAG_CACHE_PUBLIC 0x0002 +# define RSA_FLAG_CACHE_PRIVATE 0x0004 +# define RSA_FLAG_BLINDING 0x0008 +# define RSA_FLAG_THREAD_SAFE 0x0010 +/* + * This flag means the private key operations will be handled by rsa_mod_exp + * and that they do not depend on the private key components being present: + * for example a key stored in external hardware. Without this flag + * bn_mod_exp gets called when private key components are absent. + */ +# define RSA_FLAG_EXT_PKEY 0x0020 + +/* + * new with 0.9.6j and 0.9.7b; the built-in + * RSA implementation now uses blinding by + * default (ignoring RSA_FLAG_BLINDING), + * but other engines might not need it + */ +# define RSA_FLAG_NO_BLINDING 0x0080 +# if OPENSSL_API_COMPAT < 0x10100000L +/* + * Does nothing. Previously this switched off constant time behaviour. + */ +# define RSA_FLAG_NO_CONSTTIME 0x0000 +# endif +# if OPENSSL_API_COMPAT < 0x00908000L +/* deprecated name for the flag*/ +/* + * new with 0.9.7h; the built-in RSA + * implementation now uses constant time + * modular exponentiation for secret exponents + * by default. This flag causes the + * faster variable sliding window method to + * be used for all exponents. + */ +# define RSA_FLAG_NO_EXP_CONSTTIME RSA_FLAG_NO_CONSTTIME +# endif + +# define EVP_PKEY_CTX_set_rsa_padding(ctx, pad) \ + RSA_pkey_ctx_ctrl(ctx, -1, EVP_PKEY_CTRL_RSA_PADDING, pad, NULL) + +# define EVP_PKEY_CTX_get_rsa_padding(ctx, ppad) \ + RSA_pkey_ctx_ctrl(ctx, -1, EVP_PKEY_CTRL_GET_RSA_PADDING, 0, ppad) + +# define EVP_PKEY_CTX_set_rsa_pss_saltlen(ctx, len) \ + RSA_pkey_ctx_ctrl(ctx, (EVP_PKEY_OP_SIGN|EVP_PKEY_OP_VERIFY), \ + EVP_PKEY_CTRL_RSA_PSS_SALTLEN, len, NULL) +/* Salt length matches digest */ +# define RSA_PSS_SALTLEN_DIGEST -1 +/* Verify only: auto detect salt length */ +# define RSA_PSS_SALTLEN_AUTO -2 +/* Set salt length to maximum possible */ +# define RSA_PSS_SALTLEN_MAX -3 +/* Old compatible max salt length for sign only */ +# define RSA_PSS_SALTLEN_MAX_SIGN -2 + +# define EVP_PKEY_CTX_set_rsa_pss_keygen_saltlen(ctx, len) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA_PSS, EVP_PKEY_OP_KEYGEN, \ + EVP_PKEY_CTRL_RSA_PSS_SALTLEN, len, NULL) + +# define EVP_PKEY_CTX_get_rsa_pss_saltlen(ctx, plen) \ + RSA_pkey_ctx_ctrl(ctx, (EVP_PKEY_OP_SIGN|EVP_PKEY_OP_VERIFY), \ + EVP_PKEY_CTRL_GET_RSA_PSS_SALTLEN, 0, plen) + +# define EVP_PKEY_CTX_set_rsa_keygen_bits(ctx, bits) \ + RSA_pkey_ctx_ctrl(ctx, EVP_PKEY_OP_KEYGEN, \ + EVP_PKEY_CTRL_RSA_KEYGEN_BITS, bits, NULL) + +# define EVP_PKEY_CTX_set_rsa_keygen_pubexp(ctx, pubexp) \ + RSA_pkey_ctx_ctrl(ctx, EVP_PKEY_OP_KEYGEN, \ + EVP_PKEY_CTRL_RSA_KEYGEN_PUBEXP, 0, pubexp) + +# define EVP_PKEY_CTX_set_rsa_keygen_primes(ctx, primes) \ + RSA_pkey_ctx_ctrl(ctx, EVP_PKEY_OP_KEYGEN, \ + EVP_PKEY_CTRL_RSA_KEYGEN_PRIMES, primes, NULL) + +# define EVP_PKEY_CTX_set_rsa_mgf1_md(ctx, md) \ + RSA_pkey_ctx_ctrl(ctx, EVP_PKEY_OP_TYPE_SIG | EVP_PKEY_OP_TYPE_CRYPT, \ + EVP_PKEY_CTRL_RSA_MGF1_MD, 0, (void *)(md)) + +# define EVP_PKEY_CTX_set_rsa_pss_keygen_mgf1_md(ctx, md) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA_PSS, EVP_PKEY_OP_KEYGEN, \ + EVP_PKEY_CTRL_RSA_MGF1_MD, 0, (void *)(md)) + +# define EVP_PKEY_CTX_set_rsa_oaep_md(ctx, md) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT, \ + EVP_PKEY_CTRL_RSA_OAEP_MD, 0, (void *)(md)) + +# define EVP_PKEY_CTX_get_rsa_mgf1_md(ctx, pmd) \ + RSA_pkey_ctx_ctrl(ctx, EVP_PKEY_OP_TYPE_SIG | EVP_PKEY_OP_TYPE_CRYPT, \ + EVP_PKEY_CTRL_GET_RSA_MGF1_MD, 0, (void *)(pmd)) + +# define EVP_PKEY_CTX_get_rsa_oaep_md(ctx, pmd) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT, \ + EVP_PKEY_CTRL_GET_RSA_OAEP_MD, 0, (void *)(pmd)) + +# define EVP_PKEY_CTX_set0_rsa_oaep_label(ctx, l, llen) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT, \ + EVP_PKEY_CTRL_RSA_OAEP_LABEL, llen, (void *)(l)) + +# define EVP_PKEY_CTX_get0_rsa_oaep_label(ctx, l) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT, \ + EVP_PKEY_CTRL_GET_RSA_OAEP_LABEL, 0, (void *)(l)) + +# define EVP_PKEY_CTX_set_rsa_pss_keygen_md(ctx, md) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA_PSS, \ + EVP_PKEY_OP_KEYGEN, EVP_PKEY_CTRL_MD, \ + 0, (void *)(md)) + +# define EVP_PKEY_CTRL_RSA_PADDING (EVP_PKEY_ALG_CTRL + 1) +# define EVP_PKEY_CTRL_RSA_PSS_SALTLEN (EVP_PKEY_ALG_CTRL + 2) + +# define EVP_PKEY_CTRL_RSA_KEYGEN_BITS (EVP_PKEY_ALG_CTRL + 3) +# define EVP_PKEY_CTRL_RSA_KEYGEN_PUBEXP (EVP_PKEY_ALG_CTRL + 4) +# define EVP_PKEY_CTRL_RSA_MGF1_MD (EVP_PKEY_ALG_CTRL + 5) + +# define EVP_PKEY_CTRL_GET_RSA_PADDING (EVP_PKEY_ALG_CTRL + 6) +# define EVP_PKEY_CTRL_GET_RSA_PSS_SALTLEN (EVP_PKEY_ALG_CTRL + 7) +# define EVP_PKEY_CTRL_GET_RSA_MGF1_MD (EVP_PKEY_ALG_CTRL + 8) + +# define EVP_PKEY_CTRL_RSA_OAEP_MD (EVP_PKEY_ALG_CTRL + 9) +# define EVP_PKEY_CTRL_RSA_OAEP_LABEL (EVP_PKEY_ALG_CTRL + 10) + +# define EVP_PKEY_CTRL_GET_RSA_OAEP_MD (EVP_PKEY_ALG_CTRL + 11) +# define EVP_PKEY_CTRL_GET_RSA_OAEP_LABEL (EVP_PKEY_ALG_CTRL + 12) + +# define EVP_PKEY_CTRL_RSA_KEYGEN_PRIMES (EVP_PKEY_ALG_CTRL + 13) + +# define RSA_PKCS1_PADDING 1 +# define RSA_SSLV23_PADDING 2 +# define RSA_NO_PADDING 3 +# define RSA_PKCS1_OAEP_PADDING 4 +# define RSA_X931_PADDING 5 +/* EVP_PKEY_ only */ +# define RSA_PKCS1_PSS_PADDING 6 + +# define RSA_PKCS1_PADDING_SIZE 11 + +# define RSA_set_app_data(s,arg) RSA_set_ex_data(s,0,arg) +# define RSA_get_app_data(s) RSA_get_ex_data(s,0) + +RSA *RSA_new(void); +RSA *RSA_new_method(ENGINE *engine); +int RSA_bits(const RSA *rsa); +int RSA_size(const RSA *rsa); +int RSA_security_bits(const RSA *rsa); + +int RSA_set0_key(RSA *r, BIGNUM *n, BIGNUM *e, BIGNUM *d); +int RSA_set0_factors(RSA *r, BIGNUM *p, BIGNUM *q); +int RSA_set0_crt_params(RSA *r,BIGNUM *dmp1, BIGNUM *dmq1, BIGNUM *iqmp); +int RSA_set0_multi_prime_params(RSA *r, BIGNUM *primes[], BIGNUM *exps[], + BIGNUM *coeffs[], int pnum); +void RSA_get0_key(const RSA *r, + const BIGNUM **n, const BIGNUM **e, const BIGNUM **d); +void RSA_get0_factors(const RSA *r, const BIGNUM **p, const BIGNUM **q); +int RSA_get_multi_prime_extra_count(const RSA *r); +int RSA_get0_multi_prime_factors(const RSA *r, const BIGNUM *primes[]); +void RSA_get0_crt_params(const RSA *r, + const BIGNUM **dmp1, const BIGNUM **dmq1, + const BIGNUM **iqmp); +int RSA_get0_multi_prime_crt_params(const RSA *r, const BIGNUM *exps[], + const BIGNUM *coeffs[]); +const BIGNUM *RSA_get0_n(const RSA *d); +const BIGNUM *RSA_get0_e(const RSA *d); +const BIGNUM *RSA_get0_d(const RSA *d); +const BIGNUM *RSA_get0_p(const RSA *d); +const BIGNUM *RSA_get0_q(const RSA *d); +const BIGNUM *RSA_get0_dmp1(const RSA *r); +const BIGNUM *RSA_get0_dmq1(const RSA *r); +const BIGNUM *RSA_get0_iqmp(const RSA *r); +const RSA_PSS_PARAMS *RSA_get0_pss_params(const RSA *r); +void RSA_clear_flags(RSA *r, int flags); +int RSA_test_flags(const RSA *r, int flags); +void RSA_set_flags(RSA *r, int flags); +int RSA_get_version(RSA *r); +ENGINE *RSA_get0_engine(const RSA *r); + +/* Deprecated version */ +DEPRECATEDIN_0_9_8(RSA *RSA_generate_key(int bits, unsigned long e, void + (*callback) (int, int, void *), + void *cb_arg)) + +/* New version */ +int RSA_generate_key_ex(RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb); +/* Multi-prime version */ +int RSA_generate_multi_prime_key(RSA *rsa, int bits, int primes, + BIGNUM *e, BN_GENCB *cb); + +int RSA_X931_derive_ex(RSA *rsa, BIGNUM *p1, BIGNUM *p2, BIGNUM *q1, + BIGNUM *q2, const BIGNUM *Xp1, const BIGNUM *Xp2, + const BIGNUM *Xp, const BIGNUM *Xq1, const BIGNUM *Xq2, + const BIGNUM *Xq, const BIGNUM *e, BN_GENCB *cb); +int RSA_X931_generate_key_ex(RSA *rsa, int bits, const BIGNUM *e, + BN_GENCB *cb); + +int RSA_check_key(const RSA *); +int RSA_check_key_ex(const RSA *, BN_GENCB *cb); + /* next 4 return -1 on error */ +int RSA_public_encrypt(int flen, const unsigned char *from, + unsigned char *to, RSA *rsa, int padding); +int RSA_private_encrypt(int flen, const unsigned char *from, + unsigned char *to, RSA *rsa, int padding); +int RSA_public_decrypt(int flen, const unsigned char *from, + unsigned char *to, RSA *rsa, int padding); +int RSA_private_decrypt(int flen, const unsigned char *from, + unsigned char *to, RSA *rsa, int padding); +void RSA_free(RSA *r); +/* "up" the RSA object's reference count */ +int RSA_up_ref(RSA *r); + +int RSA_flags(const RSA *r); + +void RSA_set_default_method(const RSA_METHOD *meth); +const RSA_METHOD *RSA_get_default_method(void); +const RSA_METHOD *RSA_null_method(void); +const RSA_METHOD *RSA_get_method(const RSA *rsa); +int RSA_set_method(RSA *rsa, const RSA_METHOD *meth); + +/* these are the actual RSA functions */ +const RSA_METHOD *RSA_PKCS1_OpenSSL(void); + +int RSA_pkey_ctx_ctrl(EVP_PKEY_CTX *ctx, int optype, int cmd, int p1, void *p2); + +DECLARE_ASN1_ENCODE_FUNCTIONS_const(RSA, RSAPublicKey) +DECLARE_ASN1_ENCODE_FUNCTIONS_const(RSA, RSAPrivateKey) + +struct rsa_pss_params_st { + X509_ALGOR *hashAlgorithm; + X509_ALGOR *maskGenAlgorithm; + ASN1_INTEGER *saltLength; + ASN1_INTEGER *trailerField; + /* Decoded hash algorithm from maskGenAlgorithm */ + X509_ALGOR *maskHash; +}; + +DECLARE_ASN1_FUNCTIONS(RSA_PSS_PARAMS) + +typedef struct rsa_oaep_params_st { + X509_ALGOR *hashFunc; + X509_ALGOR *maskGenFunc; + X509_ALGOR *pSourceFunc; + /* Decoded hash algorithm from maskGenFunc */ + X509_ALGOR *maskHash; +} RSA_OAEP_PARAMS; + +DECLARE_ASN1_FUNCTIONS(RSA_OAEP_PARAMS) + +# ifndef OPENSSL_NO_STDIO +int RSA_print_fp(FILE *fp, const RSA *r, int offset); +# endif + +int RSA_print(BIO *bp, const RSA *r, int offset); + +/* + * The following 2 functions sign and verify a X509_SIG ASN1 object inside + * PKCS#1 padded RSA encryption + */ +int RSA_sign(int type, const unsigned char *m, unsigned int m_length, + unsigned char *sigret, unsigned int *siglen, RSA *rsa); +int RSA_verify(int type, const unsigned char *m, unsigned int m_length, + const unsigned char *sigbuf, unsigned int siglen, RSA *rsa); + +/* + * The following 2 function sign and verify a ASN1_OCTET_STRING object inside + * PKCS#1 padded RSA encryption + */ +int RSA_sign_ASN1_OCTET_STRING(int type, + const unsigned char *m, unsigned int m_length, + unsigned char *sigret, unsigned int *siglen, + RSA *rsa); +int RSA_verify_ASN1_OCTET_STRING(int type, const unsigned char *m, + unsigned int m_length, unsigned char *sigbuf, + unsigned int siglen, RSA *rsa); + +int RSA_blinding_on(RSA *rsa, BN_CTX *ctx); +void RSA_blinding_off(RSA *rsa); +BN_BLINDING *RSA_setup_blinding(RSA *rsa, BN_CTX *ctx); + +int RSA_padding_add_PKCS1_type_1(unsigned char *to, int tlen, + const unsigned char *f, int fl); +int RSA_padding_check_PKCS1_type_1(unsigned char *to, int tlen, + const unsigned char *f, int fl, + int rsa_len); +int RSA_padding_add_PKCS1_type_2(unsigned char *to, int tlen, + const unsigned char *f, int fl); +int RSA_padding_check_PKCS1_type_2(unsigned char *to, int tlen, + const unsigned char *f, int fl, + int rsa_len); +int PKCS1_MGF1(unsigned char *mask, long len, const unsigned char *seed, + long seedlen, const EVP_MD *dgst); +int RSA_padding_add_PKCS1_OAEP(unsigned char *to, int tlen, + const unsigned char *f, int fl, + const unsigned char *p, int pl); +int RSA_padding_check_PKCS1_OAEP(unsigned char *to, int tlen, + const unsigned char *f, int fl, int rsa_len, + const unsigned char *p, int pl); +int RSA_padding_add_PKCS1_OAEP_mgf1(unsigned char *to, int tlen, + const unsigned char *from, int flen, + const unsigned char *param, int plen, + const EVP_MD *md, const EVP_MD *mgf1md); +int RSA_padding_check_PKCS1_OAEP_mgf1(unsigned char *to, int tlen, + const unsigned char *from, int flen, + int num, const unsigned char *param, + int plen, const EVP_MD *md, + const EVP_MD *mgf1md); +int RSA_padding_add_SSLv23(unsigned char *to, int tlen, + const unsigned char *f, int fl); +int RSA_padding_check_SSLv23(unsigned char *to, int tlen, + const unsigned char *f, int fl, int rsa_len); +int RSA_padding_add_none(unsigned char *to, int tlen, const unsigned char *f, + int fl); +int RSA_padding_check_none(unsigned char *to, int tlen, + const unsigned char *f, int fl, int rsa_len); +int RSA_padding_add_X931(unsigned char *to, int tlen, const unsigned char *f, + int fl); +int RSA_padding_check_X931(unsigned char *to, int tlen, + const unsigned char *f, int fl, int rsa_len); +int RSA_X931_hash_id(int nid); + +int RSA_verify_PKCS1_PSS(RSA *rsa, const unsigned char *mHash, + const EVP_MD *Hash, const unsigned char *EM, + int sLen); +int RSA_padding_add_PKCS1_PSS(RSA *rsa, unsigned char *EM, + const unsigned char *mHash, const EVP_MD *Hash, + int sLen); + +int RSA_verify_PKCS1_PSS_mgf1(RSA *rsa, const unsigned char *mHash, + const EVP_MD *Hash, const EVP_MD *mgf1Hash, + const unsigned char *EM, int sLen); + +int RSA_padding_add_PKCS1_PSS_mgf1(RSA *rsa, unsigned char *EM, + const unsigned char *mHash, + const EVP_MD *Hash, const EVP_MD *mgf1Hash, + int sLen); + +#define RSA_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_RSA, l, p, newf, dupf, freef) +int RSA_set_ex_data(RSA *r, int idx, void *arg); +void *RSA_get_ex_data(const RSA *r, int idx); + +RSA *RSAPublicKey_dup(RSA *rsa); +RSA *RSAPrivateKey_dup(RSA *rsa); + +/* + * If this flag is set the RSA method is FIPS compliant and can be used in + * FIPS mode. This is set in the validated module method. If an application + * sets this flag in its own methods it is its responsibility to ensure the + * result is compliant. + */ + +# define RSA_FLAG_FIPS_METHOD 0x0400 + +/* + * If this flag is set the operations normally disabled in FIPS mode are + * permitted it is then the applications responsibility to ensure that the + * usage is compliant. + */ + +# define RSA_FLAG_NON_FIPS_ALLOW 0x0400 +/* + * Application has decided PRNG is good enough to generate a key: don't + * check. + */ +# define RSA_FLAG_CHECKED 0x0800 + +RSA_METHOD *RSA_meth_new(const char *name, int flags); +void RSA_meth_free(RSA_METHOD *meth); +RSA_METHOD *RSA_meth_dup(const RSA_METHOD *meth); +const char *RSA_meth_get0_name(const RSA_METHOD *meth); +int RSA_meth_set1_name(RSA_METHOD *meth, const char *name); +int RSA_meth_get_flags(const RSA_METHOD *meth); +int RSA_meth_set_flags(RSA_METHOD *meth, int flags); +void *RSA_meth_get0_app_data(const RSA_METHOD *meth); +int RSA_meth_set0_app_data(RSA_METHOD *meth, void *app_data); +int (*RSA_meth_get_pub_enc(const RSA_METHOD *meth)) + (int flen, const unsigned char *from, + unsigned char *to, RSA *rsa, int padding); +int RSA_meth_set_pub_enc(RSA_METHOD *rsa, + int (*pub_enc) (int flen, const unsigned char *from, + unsigned char *to, RSA *rsa, + int padding)); +int (*RSA_meth_get_pub_dec(const RSA_METHOD *meth)) + (int flen, const unsigned char *from, + unsigned char *to, RSA *rsa, int padding); +int RSA_meth_set_pub_dec(RSA_METHOD *rsa, + int (*pub_dec) (int flen, const unsigned char *from, + unsigned char *to, RSA *rsa, + int padding)); +int (*RSA_meth_get_priv_enc(const RSA_METHOD *meth)) + (int flen, const unsigned char *from, + unsigned char *to, RSA *rsa, int padding); +int RSA_meth_set_priv_enc(RSA_METHOD *rsa, + int (*priv_enc) (int flen, const unsigned char *from, + unsigned char *to, RSA *rsa, + int padding)); +int (*RSA_meth_get_priv_dec(const RSA_METHOD *meth)) + (int flen, const unsigned char *from, + unsigned char *to, RSA *rsa, int padding); +int RSA_meth_set_priv_dec(RSA_METHOD *rsa, + int (*priv_dec) (int flen, const unsigned char *from, + unsigned char *to, RSA *rsa, + int padding)); +int (*RSA_meth_get_mod_exp(const RSA_METHOD *meth)) + (BIGNUM *r0, const BIGNUM *i, RSA *rsa, BN_CTX *ctx); +int RSA_meth_set_mod_exp(RSA_METHOD *rsa, + int (*mod_exp) (BIGNUM *r0, const BIGNUM *i, RSA *rsa, + BN_CTX *ctx)); +int (*RSA_meth_get_bn_mod_exp(const RSA_METHOD *meth)) + (BIGNUM *r, const BIGNUM *a, const BIGNUM *p, + const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx); +int RSA_meth_set_bn_mod_exp(RSA_METHOD *rsa, + int (*bn_mod_exp) (BIGNUM *r, + const BIGNUM *a, + const BIGNUM *p, + const BIGNUM *m, + BN_CTX *ctx, + BN_MONT_CTX *m_ctx)); +int (*RSA_meth_get_init(const RSA_METHOD *meth)) (RSA *rsa); +int RSA_meth_set_init(RSA_METHOD *rsa, int (*init) (RSA *rsa)); +int (*RSA_meth_get_finish(const RSA_METHOD *meth)) (RSA *rsa); +int RSA_meth_set_finish(RSA_METHOD *rsa, int (*finish) (RSA *rsa)); +int (*RSA_meth_get_sign(const RSA_METHOD *meth)) + (int type, + const unsigned char *m, unsigned int m_length, + unsigned char *sigret, unsigned int *siglen, + const RSA *rsa); +int RSA_meth_set_sign(RSA_METHOD *rsa, + int (*sign) (int type, const unsigned char *m, + unsigned int m_length, + unsigned char *sigret, unsigned int *siglen, + const RSA *rsa)); +int (*RSA_meth_get_verify(const RSA_METHOD *meth)) + (int dtype, const unsigned char *m, + unsigned int m_length, const unsigned char *sigbuf, + unsigned int siglen, const RSA *rsa); +int RSA_meth_set_verify(RSA_METHOD *rsa, + int (*verify) (int dtype, const unsigned char *m, + unsigned int m_length, + const unsigned char *sigbuf, + unsigned int siglen, const RSA *rsa)); +int (*RSA_meth_get_keygen(const RSA_METHOD *meth)) + (RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb); +int RSA_meth_set_keygen(RSA_METHOD *rsa, + int (*keygen) (RSA *rsa, int bits, BIGNUM *e, + BN_GENCB *cb)); +int (*RSA_meth_get_multi_prime_keygen(const RSA_METHOD *meth)) + (RSA *rsa, int bits, int primes, BIGNUM *e, BN_GENCB *cb); +int RSA_meth_set_multi_prime_keygen(RSA_METHOD *meth, + int (*keygen) (RSA *rsa, int bits, + int primes, BIGNUM *e, + BN_GENCB *cb)); + +# ifdef __cplusplus +} +# endif +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/rsaerr.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/rsaerr.h new file mode 100644 index 00000000..59b15e13 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/rsaerr.h @@ -0,0 +1,167 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2019 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_RSAERR_H +# define HEADER_RSAERR_H + +# ifndef HEADER_SYMHACKS_H +# include +# endif + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_RSA_strings(void); + +/* + * RSA function codes. + */ +# define RSA_F_CHECK_PADDING_MD 140 +# define RSA_F_ENCODE_PKCS1 146 +# define RSA_F_INT_RSA_VERIFY 145 +# define RSA_F_OLD_RSA_PRIV_DECODE 147 +# define RSA_F_PKEY_PSS_INIT 165 +# define RSA_F_PKEY_RSA_CTRL 143 +# define RSA_F_PKEY_RSA_CTRL_STR 144 +# define RSA_F_PKEY_RSA_SIGN 142 +# define RSA_F_PKEY_RSA_VERIFY 149 +# define RSA_F_PKEY_RSA_VERIFYRECOVER 141 +# define RSA_F_RSA_ALGOR_TO_MD 156 +# define RSA_F_RSA_BUILTIN_KEYGEN 129 +# define RSA_F_RSA_CHECK_KEY 123 +# define RSA_F_RSA_CHECK_KEY_EX 160 +# define RSA_F_RSA_CMS_DECRYPT 159 +# define RSA_F_RSA_CMS_VERIFY 158 +# define RSA_F_RSA_ITEM_VERIFY 148 +# define RSA_F_RSA_METH_DUP 161 +# define RSA_F_RSA_METH_NEW 162 +# define RSA_F_RSA_METH_SET1_NAME 163 +# define RSA_F_RSA_MGF1_TO_MD 157 +# define RSA_F_RSA_MULTIP_INFO_NEW 166 +# define RSA_F_RSA_NEW_METHOD 106 +# define RSA_F_RSA_NULL 124 +# define RSA_F_RSA_NULL_PRIVATE_DECRYPT 132 +# define RSA_F_RSA_NULL_PRIVATE_ENCRYPT 133 +# define RSA_F_RSA_NULL_PUBLIC_DECRYPT 134 +# define RSA_F_RSA_NULL_PUBLIC_ENCRYPT 135 +# define RSA_F_RSA_OSSL_PRIVATE_DECRYPT 101 +# define RSA_F_RSA_OSSL_PRIVATE_ENCRYPT 102 +# define RSA_F_RSA_OSSL_PUBLIC_DECRYPT 103 +# define RSA_F_RSA_OSSL_PUBLIC_ENCRYPT 104 +# define RSA_F_RSA_PADDING_ADD_NONE 107 +# define RSA_F_RSA_PADDING_ADD_PKCS1_OAEP 121 +# define RSA_F_RSA_PADDING_ADD_PKCS1_OAEP_MGF1 154 +# define RSA_F_RSA_PADDING_ADD_PKCS1_PSS 125 +# define RSA_F_RSA_PADDING_ADD_PKCS1_PSS_MGF1 152 +# define RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_1 108 +# define RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_2 109 +# define RSA_F_RSA_PADDING_ADD_SSLV23 110 +# define RSA_F_RSA_PADDING_ADD_X931 127 +# define RSA_F_RSA_PADDING_CHECK_NONE 111 +# define RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP 122 +# define RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP_MGF1 153 +# define RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_1 112 +# define RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_2 113 +# define RSA_F_RSA_PADDING_CHECK_SSLV23 114 +# define RSA_F_RSA_PADDING_CHECK_X931 128 +# define RSA_F_RSA_PARAM_DECODE 164 +# define RSA_F_RSA_PRINT 115 +# define RSA_F_RSA_PRINT_FP 116 +# define RSA_F_RSA_PRIV_DECODE 150 +# define RSA_F_RSA_PRIV_ENCODE 138 +# define RSA_F_RSA_PSS_GET_PARAM 151 +# define RSA_F_RSA_PSS_TO_CTX 155 +# define RSA_F_RSA_PUB_DECODE 139 +# define RSA_F_RSA_SETUP_BLINDING 136 +# define RSA_F_RSA_SIGN 117 +# define RSA_F_RSA_SIGN_ASN1_OCTET_STRING 118 +# define RSA_F_RSA_VERIFY 119 +# define RSA_F_RSA_VERIFY_ASN1_OCTET_STRING 120 +# define RSA_F_RSA_VERIFY_PKCS1_PSS_MGF1 126 +# define RSA_F_SETUP_TBUF 167 + +/* + * RSA reason codes. + */ +# define RSA_R_ALGORITHM_MISMATCH 100 +# define RSA_R_BAD_E_VALUE 101 +# define RSA_R_BAD_FIXED_HEADER_DECRYPT 102 +# define RSA_R_BAD_PAD_BYTE_COUNT 103 +# define RSA_R_BAD_SIGNATURE 104 +# define RSA_R_BLOCK_TYPE_IS_NOT_01 106 +# define RSA_R_BLOCK_TYPE_IS_NOT_02 107 +# define RSA_R_DATA_GREATER_THAN_MOD_LEN 108 +# define RSA_R_DATA_TOO_LARGE 109 +# define RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE 110 +# define RSA_R_DATA_TOO_LARGE_FOR_MODULUS 132 +# define RSA_R_DATA_TOO_SMALL 111 +# define RSA_R_DATA_TOO_SMALL_FOR_KEY_SIZE 122 +# define RSA_R_DIGEST_DOES_NOT_MATCH 158 +# define RSA_R_DIGEST_NOT_ALLOWED 145 +# define RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY 112 +# define RSA_R_DMP1_NOT_CONGRUENT_TO_D 124 +# define RSA_R_DMQ1_NOT_CONGRUENT_TO_D 125 +# define RSA_R_D_E_NOT_CONGRUENT_TO_1 123 +# define RSA_R_FIRST_OCTET_INVALID 133 +# define RSA_R_ILLEGAL_OR_UNSUPPORTED_PADDING_MODE 144 +# define RSA_R_INVALID_DIGEST 157 +# define RSA_R_INVALID_DIGEST_LENGTH 143 +# define RSA_R_INVALID_HEADER 137 +# define RSA_R_INVALID_LABEL 160 +# define RSA_R_INVALID_MESSAGE_LENGTH 131 +# define RSA_R_INVALID_MGF1_MD 156 +# define RSA_R_INVALID_MULTI_PRIME_KEY 167 +# define RSA_R_INVALID_OAEP_PARAMETERS 161 +# define RSA_R_INVALID_PADDING 138 +# define RSA_R_INVALID_PADDING_MODE 141 +# define RSA_R_INVALID_PSS_PARAMETERS 149 +# define RSA_R_INVALID_PSS_SALTLEN 146 +# define RSA_R_INVALID_SALT_LENGTH 150 +# define RSA_R_INVALID_TRAILER 139 +# define RSA_R_INVALID_X931_DIGEST 142 +# define RSA_R_IQMP_NOT_INVERSE_OF_Q 126 +# define RSA_R_KEY_PRIME_NUM_INVALID 165 +# define RSA_R_KEY_SIZE_TOO_SMALL 120 +# define RSA_R_LAST_OCTET_INVALID 134 +# define RSA_R_MISSING_PRIVATE_KEY 179 +# define RSA_R_MGF1_DIGEST_NOT_ALLOWED 152 +# define RSA_R_MODULUS_TOO_LARGE 105 +# define RSA_R_MP_COEFFICIENT_NOT_INVERSE_OF_R 168 +# define RSA_R_MP_EXPONENT_NOT_CONGRUENT_TO_D 169 +# define RSA_R_MP_R_NOT_PRIME 170 +# define RSA_R_NO_PUBLIC_EXPONENT 140 +# define RSA_R_NULL_BEFORE_BLOCK_MISSING 113 +# define RSA_R_N_DOES_NOT_EQUAL_PRODUCT_OF_PRIMES 172 +# define RSA_R_N_DOES_NOT_EQUAL_P_Q 127 +# define RSA_R_OAEP_DECODING_ERROR 121 +# define RSA_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE 148 +# define RSA_R_PADDING_CHECK_FAILED 114 +# define RSA_R_PKCS_DECODING_ERROR 159 +# define RSA_R_PSS_SALTLEN_TOO_SMALL 164 +# define RSA_R_P_NOT_PRIME 128 +# define RSA_R_Q_NOT_PRIME 129 +# define RSA_R_RSA_OPERATIONS_NOT_SUPPORTED 130 +# define RSA_R_SLEN_CHECK_FAILED 136 +# define RSA_R_SLEN_RECOVERY_FAILED 135 +# define RSA_R_SSLV3_ROLLBACK_ATTACK 115 +# define RSA_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD 116 +# define RSA_R_UNKNOWN_ALGORITHM_TYPE 117 +# define RSA_R_UNKNOWN_DIGEST 166 +# define RSA_R_UNKNOWN_MASK_DIGEST 151 +# define RSA_R_UNKNOWN_PADDING_TYPE 118 +# define RSA_R_UNSUPPORTED_ENCRYPTION_TYPE 162 +# define RSA_R_UNSUPPORTED_LABEL_SOURCE 163 +# define RSA_R_UNSUPPORTED_MASK_ALGORITHM 153 +# define RSA_R_UNSUPPORTED_MASK_PARAMETER 154 +# define RSA_R_UNSUPPORTED_SIGNATURE_TYPE 155 +# define RSA_R_VALUE_MISSING 147 +# define RSA_R_WRONG_SIGNATURE_LENGTH 119 + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/safestack.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/safestack.h new file mode 100644 index 00000000..38b55789 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/safestack.h @@ -0,0 +1,207 @@ +/* + * Copyright 1999-2019 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_SAFESTACK_H +# define HEADER_SAFESTACK_H + +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +# define STACK_OF(type) struct stack_st_##type + +# define SKM_DEFINE_STACK_OF(t1, t2, t3) \ + STACK_OF(t1); \ + typedef int (*sk_##t1##_compfunc)(const t3 * const *a, const t3 *const *b); \ + typedef void (*sk_##t1##_freefunc)(t3 *a); \ + typedef t3 * (*sk_##t1##_copyfunc)(const t3 *a); \ + static ossl_unused ossl_inline int sk_##t1##_num(const STACK_OF(t1) *sk) \ + { \ + return OPENSSL_sk_num((const OPENSSL_STACK *)sk); \ + } \ + static ossl_unused ossl_inline t2 *sk_##t1##_value(const STACK_OF(t1) *sk, int idx) \ + { \ + return (t2 *)OPENSSL_sk_value((const OPENSSL_STACK *)sk, idx); \ + } \ + static ossl_unused ossl_inline STACK_OF(t1) *sk_##t1##_new(sk_##t1##_compfunc compare) \ + { \ + return (STACK_OF(t1) *)OPENSSL_sk_new((OPENSSL_sk_compfunc)compare); \ + } \ + static ossl_unused ossl_inline STACK_OF(t1) *sk_##t1##_new_null(void) \ + { \ + return (STACK_OF(t1) *)OPENSSL_sk_new_null(); \ + } \ + static ossl_unused ossl_inline STACK_OF(t1) *sk_##t1##_new_reserve(sk_##t1##_compfunc compare, int n) \ + { \ + return (STACK_OF(t1) *)OPENSSL_sk_new_reserve((OPENSSL_sk_compfunc)compare, n); \ + } \ + static ossl_unused ossl_inline int sk_##t1##_reserve(STACK_OF(t1) *sk, int n) \ + { \ + return OPENSSL_sk_reserve((OPENSSL_STACK *)sk, n); \ + } \ + static ossl_unused ossl_inline void sk_##t1##_free(STACK_OF(t1) *sk) \ + { \ + OPENSSL_sk_free((OPENSSL_STACK *)sk); \ + } \ + static ossl_unused ossl_inline void sk_##t1##_zero(STACK_OF(t1) *sk) \ + { \ + OPENSSL_sk_zero((OPENSSL_STACK *)sk); \ + } \ + static ossl_unused ossl_inline t2 *sk_##t1##_delete(STACK_OF(t1) *sk, int i) \ + { \ + return (t2 *)OPENSSL_sk_delete((OPENSSL_STACK *)sk, i); \ + } \ + static ossl_unused ossl_inline t2 *sk_##t1##_delete_ptr(STACK_OF(t1) *sk, t2 *ptr) \ + { \ + return (t2 *)OPENSSL_sk_delete_ptr((OPENSSL_STACK *)sk, \ + (const void *)ptr); \ + } \ + static ossl_unused ossl_inline int sk_##t1##_push(STACK_OF(t1) *sk, t2 *ptr) \ + { \ + return OPENSSL_sk_push((OPENSSL_STACK *)sk, (const void *)ptr); \ + } \ + static ossl_unused ossl_inline int sk_##t1##_unshift(STACK_OF(t1) *sk, t2 *ptr) \ + { \ + return OPENSSL_sk_unshift((OPENSSL_STACK *)sk, (const void *)ptr); \ + } \ + static ossl_unused ossl_inline t2 *sk_##t1##_pop(STACK_OF(t1) *sk) \ + { \ + return (t2 *)OPENSSL_sk_pop((OPENSSL_STACK *)sk); \ + } \ + static ossl_unused ossl_inline t2 *sk_##t1##_shift(STACK_OF(t1) *sk) \ + { \ + return (t2 *)OPENSSL_sk_shift((OPENSSL_STACK *)sk); \ + } \ + static ossl_unused ossl_inline void sk_##t1##_pop_free(STACK_OF(t1) *sk, sk_##t1##_freefunc freefunc) \ + { \ + OPENSSL_sk_pop_free((OPENSSL_STACK *)sk, (OPENSSL_sk_freefunc)freefunc); \ + } \ + static ossl_unused ossl_inline int sk_##t1##_insert(STACK_OF(t1) *sk, t2 *ptr, int idx) \ + { \ + return OPENSSL_sk_insert((OPENSSL_STACK *)sk, (const void *)ptr, idx); \ + } \ + static ossl_unused ossl_inline t2 *sk_##t1##_set(STACK_OF(t1) *sk, int idx, t2 *ptr) \ + { \ + return (t2 *)OPENSSL_sk_set((OPENSSL_STACK *)sk, idx, (const void *)ptr); \ + } \ + static ossl_unused ossl_inline int sk_##t1##_find(STACK_OF(t1) *sk, t2 *ptr) \ + { \ + return OPENSSL_sk_find((OPENSSL_STACK *)sk, (const void *)ptr); \ + } \ + static ossl_unused ossl_inline int sk_##t1##_find_ex(STACK_OF(t1) *sk, t2 *ptr) \ + { \ + return OPENSSL_sk_find_ex((OPENSSL_STACK *)sk, (const void *)ptr); \ + } \ + static ossl_unused ossl_inline void sk_##t1##_sort(STACK_OF(t1) *sk) \ + { \ + OPENSSL_sk_sort((OPENSSL_STACK *)sk); \ + } \ + static ossl_unused ossl_inline int sk_##t1##_is_sorted(const STACK_OF(t1) *sk) \ + { \ + return OPENSSL_sk_is_sorted((const OPENSSL_STACK *)sk); \ + } \ + static ossl_unused ossl_inline STACK_OF(t1) * sk_##t1##_dup(const STACK_OF(t1) *sk) \ + { \ + return (STACK_OF(t1) *)OPENSSL_sk_dup((const OPENSSL_STACK *)sk); \ + } \ + static ossl_unused ossl_inline STACK_OF(t1) *sk_##t1##_deep_copy(const STACK_OF(t1) *sk, \ + sk_##t1##_copyfunc copyfunc, \ + sk_##t1##_freefunc freefunc) \ + { \ + return (STACK_OF(t1) *)OPENSSL_sk_deep_copy((const OPENSSL_STACK *)sk, \ + (OPENSSL_sk_copyfunc)copyfunc, \ + (OPENSSL_sk_freefunc)freefunc); \ + } \ + static ossl_unused ossl_inline sk_##t1##_compfunc sk_##t1##_set_cmp_func(STACK_OF(t1) *sk, sk_##t1##_compfunc compare) \ + { \ + return (sk_##t1##_compfunc)OPENSSL_sk_set_cmp_func((OPENSSL_STACK *)sk, (OPENSSL_sk_compfunc)compare); \ + } + +# define DEFINE_SPECIAL_STACK_OF(t1, t2) SKM_DEFINE_STACK_OF(t1, t2, t2) +# define DEFINE_STACK_OF(t) SKM_DEFINE_STACK_OF(t, t, t) +# define DEFINE_SPECIAL_STACK_OF_CONST(t1, t2) \ + SKM_DEFINE_STACK_OF(t1, const t2, t2) +# define DEFINE_STACK_OF_CONST(t) SKM_DEFINE_STACK_OF(t, const t, t) + +/*- + * Strings are special: normally an lhash entry will point to a single + * (somewhat) mutable object. In the case of strings: + * + * a) Instead of a single char, there is an array of chars, NUL-terminated. + * b) The string may have be immutable. + * + * So, they need their own declarations. Especially important for + * type-checking tools, such as Deputy. + * + * In practice, however, it appears to be hard to have a const + * string. For now, I'm settling for dealing with the fact it is a + * string at all. + */ +typedef char *OPENSSL_STRING; +typedef const char *OPENSSL_CSTRING; + +/*- + * Confusingly, LHASH_OF(STRING) deals with char ** throughout, but + * STACK_OF(STRING) is really more like STACK_OF(char), only, as mentioned + * above, instead of a single char each entry is a NUL-terminated array of + * chars. So, we have to implement STRING specially for STACK_OF. This is + * dealt with in the autogenerated macros below. + */ +DEFINE_SPECIAL_STACK_OF(OPENSSL_STRING, char) +DEFINE_SPECIAL_STACK_OF_CONST(OPENSSL_CSTRING, char) + +/* + * Similarly, we sometimes use a block of characters, NOT nul-terminated. + * These should also be distinguished from "normal" stacks. + */ +typedef void *OPENSSL_BLOCK; +DEFINE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void) + +/* + * If called without higher optimization (min. -xO3) the Oracle Developer + * Studio compiler generates code for the defined (static inline) functions + * above. + * This would later lead to the linker complaining about missing symbols when + * this header file is included but the resulting object is not linked against + * the Crypto library (openssl#6912). + */ +# ifdef __SUNPRO_C +# pragma weak OPENSSL_sk_num +# pragma weak OPENSSL_sk_value +# pragma weak OPENSSL_sk_new +# pragma weak OPENSSL_sk_new_null +# pragma weak OPENSSL_sk_new_reserve +# pragma weak OPENSSL_sk_reserve +# pragma weak OPENSSL_sk_free +# pragma weak OPENSSL_sk_zero +# pragma weak OPENSSL_sk_delete +# pragma weak OPENSSL_sk_delete_ptr +# pragma weak OPENSSL_sk_push +# pragma weak OPENSSL_sk_unshift +# pragma weak OPENSSL_sk_pop +# pragma weak OPENSSL_sk_shift +# pragma weak OPENSSL_sk_pop_free +# pragma weak OPENSSL_sk_insert +# pragma weak OPENSSL_sk_set +# pragma weak OPENSSL_sk_find +# pragma weak OPENSSL_sk_find_ex +# pragma weak OPENSSL_sk_sort +# pragma weak OPENSSL_sk_is_sorted +# pragma weak OPENSSL_sk_dup +# pragma weak OPENSSL_sk_deep_copy +# pragma weak OPENSSL_sk_set_cmp_func +# endif /* __SUNPRO_C */ + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/seed.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/seed.h new file mode 100644 index 00000000..de10b085 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/seed.h @@ -0,0 +1,96 @@ +/* + * Copyright 2007-2016 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* + * Copyright (c) 2007 KISA(Korea Information Security Agency). All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Neither the name of author nor the names of its contributors may + * be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#ifndef HEADER_SEED_H +# define HEADER_SEED_H + +# include + +# ifndef OPENSSL_NO_SEED +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +/* look whether we need 'long' to get 32 bits */ +# ifdef AES_LONG +# ifndef SEED_LONG +# define SEED_LONG 1 +# endif +# endif + +# include + +# define SEED_BLOCK_SIZE 16 +# define SEED_KEY_LENGTH 16 + +typedef struct seed_key_st { +# ifdef SEED_LONG + unsigned long data[32]; +# else + unsigned int data[32]; +# endif +} SEED_KEY_SCHEDULE; + +void SEED_set_key(const unsigned char rawkey[SEED_KEY_LENGTH], + SEED_KEY_SCHEDULE *ks); + +void SEED_encrypt(const unsigned char s[SEED_BLOCK_SIZE], + unsigned char d[SEED_BLOCK_SIZE], + const SEED_KEY_SCHEDULE *ks); +void SEED_decrypt(const unsigned char s[SEED_BLOCK_SIZE], + unsigned char d[SEED_BLOCK_SIZE], + const SEED_KEY_SCHEDULE *ks); + +void SEED_ecb_encrypt(const unsigned char *in, unsigned char *out, + const SEED_KEY_SCHEDULE *ks, int enc); +void SEED_cbc_encrypt(const unsigned char *in, unsigned char *out, size_t len, + const SEED_KEY_SCHEDULE *ks, + unsigned char ivec[SEED_BLOCK_SIZE], int enc); +void SEED_cfb128_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const SEED_KEY_SCHEDULE *ks, + unsigned char ivec[SEED_BLOCK_SIZE], int *num, + int enc); +void SEED_ofb128_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const SEED_KEY_SCHEDULE *ks, + unsigned char ivec[SEED_BLOCK_SIZE], int *num); + +# ifdef __cplusplus +} +# endif +# endif + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/sha.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/sha.h new file mode 100644 index 00000000..6a1eb0de --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/sha.h @@ -0,0 +1,119 @@ +/* + * Copyright 1995-2016 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_SHA_H +# define HEADER_SHA_H + +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +/*- + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + * ! SHA_LONG has to be at least 32 bits wide. ! + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + */ +# define SHA_LONG unsigned int + +# define SHA_LBLOCK 16 +# define SHA_CBLOCK (SHA_LBLOCK*4)/* SHA treats input data as a + * contiguous array of 32 bit wide + * big-endian values. */ +# define SHA_LAST_BLOCK (SHA_CBLOCK-8) +# define SHA_DIGEST_LENGTH 20 + +typedef struct SHAstate_st { + SHA_LONG h0, h1, h2, h3, h4; + SHA_LONG Nl, Nh; + SHA_LONG data[SHA_LBLOCK]; + unsigned int num; +} SHA_CTX; + +int SHA1_Init(SHA_CTX *c); +int SHA1_Update(SHA_CTX *c, const void *data, size_t len); +int SHA1_Final(unsigned char *md, SHA_CTX *c); +unsigned char *SHA1(const unsigned char *d, size_t n, unsigned char *md); +void SHA1_Transform(SHA_CTX *c, const unsigned char *data); + +# define SHA256_CBLOCK (SHA_LBLOCK*4)/* SHA-256 treats input data as a + * contiguous array of 32 bit wide + * big-endian values. */ + +typedef struct SHA256state_st { + SHA_LONG h[8]; + SHA_LONG Nl, Nh; + SHA_LONG data[SHA_LBLOCK]; + unsigned int num, md_len; +} SHA256_CTX; + +int SHA224_Init(SHA256_CTX *c); +int SHA224_Update(SHA256_CTX *c, const void *data, size_t len); +int SHA224_Final(unsigned char *md, SHA256_CTX *c); +unsigned char *SHA224(const unsigned char *d, size_t n, unsigned char *md); +int SHA256_Init(SHA256_CTX *c); +int SHA256_Update(SHA256_CTX *c, const void *data, size_t len); +int SHA256_Final(unsigned char *md, SHA256_CTX *c); +unsigned char *SHA256(const unsigned char *d, size_t n, unsigned char *md); +void SHA256_Transform(SHA256_CTX *c, const unsigned char *data); + +# define SHA224_DIGEST_LENGTH 28 +# define SHA256_DIGEST_LENGTH 32 +# define SHA384_DIGEST_LENGTH 48 +# define SHA512_DIGEST_LENGTH 64 + +/* + * Unlike 32-bit digest algorithms, SHA-512 *relies* on SHA_LONG64 + * being exactly 64-bit wide. See Implementation Notes in sha512.c + * for further details. + */ +/* + * SHA-512 treats input data as a + * contiguous array of 64 bit + * wide big-endian values. + */ +# define SHA512_CBLOCK (SHA_LBLOCK*8) +# if (defined(_WIN32) || defined(_WIN64)) && !defined(__MINGW32__) +# define SHA_LONG64 unsigned __int64 +# define U64(C) C##UI64 +# elif defined(__arch64__) +# define SHA_LONG64 unsigned long +# define U64(C) C##UL +# else +# define SHA_LONG64 unsigned long long +# define U64(C) C##ULL +# endif + +typedef struct SHA512state_st { + SHA_LONG64 h[8]; + SHA_LONG64 Nl, Nh; + union { + SHA_LONG64 d[SHA_LBLOCK]; + unsigned char p[SHA512_CBLOCK]; + } u; + unsigned int num, md_len; +} SHA512_CTX; + +int SHA384_Init(SHA512_CTX *c); +int SHA384_Update(SHA512_CTX *c, const void *data, size_t len); +int SHA384_Final(unsigned char *md, SHA512_CTX *c); +unsigned char *SHA384(const unsigned char *d, size_t n, unsigned char *md); +int SHA512_Init(SHA512_CTX *c); +int SHA512_Update(SHA512_CTX *c, const void *data, size_t len); +int SHA512_Final(unsigned char *md, SHA512_CTX *c); +unsigned char *SHA512(const unsigned char *d, size_t n, unsigned char *md); +void SHA512_Transform(SHA512_CTX *c, const unsigned char *data); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/srp.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/srp.h new file mode 100644 index 00000000..aaf13558 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/srp.h @@ -0,0 +1,135 @@ +/* + * Copyright 2004-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2004, EdelKey Project. 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 Christophe Renou and Peter Sylvester, + * for the EdelKey project. + */ + +#ifndef HEADER_SRP_H +# define HEADER_SRP_H + +#include + +#ifndef OPENSSL_NO_SRP +# include +# include +# include +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +typedef struct SRP_gN_cache_st { + char *b64_bn; + BIGNUM *bn; +} SRP_gN_cache; + + +DEFINE_STACK_OF(SRP_gN_cache) + +typedef struct SRP_user_pwd_st { + /* Owned by us. */ + char *id; + BIGNUM *s; + BIGNUM *v; + /* Not owned by us. */ + const BIGNUM *g; + const BIGNUM *N; + /* Owned by us. */ + char *info; +} SRP_user_pwd; + +void SRP_user_pwd_free(SRP_user_pwd *user_pwd); + +DEFINE_STACK_OF(SRP_user_pwd) + +typedef struct SRP_VBASE_st { + STACK_OF(SRP_user_pwd) *users_pwd; + STACK_OF(SRP_gN_cache) *gN_cache; +/* to simulate a user */ + char *seed_key; + const BIGNUM *default_g; + const BIGNUM *default_N; +} SRP_VBASE; + +/* + * Internal structure storing N and g pair + */ +typedef struct SRP_gN_st { + char *id; + const BIGNUM *g; + const BIGNUM *N; +} SRP_gN; + +DEFINE_STACK_OF(SRP_gN) + +SRP_VBASE *SRP_VBASE_new(char *seed_key); +void SRP_VBASE_free(SRP_VBASE *vb); +int SRP_VBASE_init(SRP_VBASE *vb, char *verifier_file); + +/* This method ignores the configured seed and fails for an unknown user. */ +DEPRECATEDIN_1_1_0(SRP_user_pwd *SRP_VBASE_get_by_user(SRP_VBASE *vb, char *username)) +/* NOTE: unlike in SRP_VBASE_get_by_user, caller owns the returned pointer.*/ +SRP_user_pwd *SRP_VBASE_get1_by_user(SRP_VBASE *vb, char *username); + +char *SRP_create_verifier(const char *user, const char *pass, char **salt, + char **verifier, const char *N, const char *g); +int SRP_create_verifier_BN(const char *user, const char *pass, BIGNUM **salt, + BIGNUM **verifier, const BIGNUM *N, + const BIGNUM *g); + +# define SRP_NO_ERROR 0 +# define SRP_ERR_VBASE_INCOMPLETE_FILE 1 +# define SRP_ERR_VBASE_BN_LIB 2 +# define SRP_ERR_OPEN_FILE 3 +# define SRP_ERR_MEMORY 4 + +# define DB_srptype 0 +# define DB_srpverifier 1 +# define DB_srpsalt 2 +# define DB_srpid 3 +# define DB_srpgN 4 +# define DB_srpinfo 5 +# undef DB_NUMBER +# define DB_NUMBER 6 + +# define DB_SRP_INDEX 'I' +# define DB_SRP_VALID 'V' +# define DB_SRP_REVOKED 'R' +# define DB_SRP_MODIF 'v' + +/* see srp.c */ +char *SRP_check_known_gN_param(const BIGNUM *g, const BIGNUM *N); +SRP_gN *SRP_get_default_gN(const char *id); + +/* server side .... */ +BIGNUM *SRP_Calc_server_key(const BIGNUM *A, const BIGNUM *v, const BIGNUM *u, + const BIGNUM *b, const BIGNUM *N); +BIGNUM *SRP_Calc_B(const BIGNUM *b, const BIGNUM *N, const BIGNUM *g, + const BIGNUM *v); +int SRP_Verify_A_mod_N(const BIGNUM *A, const BIGNUM *N); +BIGNUM *SRP_Calc_u(const BIGNUM *A, const BIGNUM *B, const BIGNUM *N); + +/* client side .... */ +BIGNUM *SRP_Calc_x(const BIGNUM *s, const char *user, const char *pass); +BIGNUM *SRP_Calc_A(const BIGNUM *a, const BIGNUM *N, const BIGNUM *g); +BIGNUM *SRP_Calc_client_key(const BIGNUM *N, const BIGNUM *B, const BIGNUM *g, + const BIGNUM *x, const BIGNUM *a, const BIGNUM *u); +int SRP_Verify_B_mod_N(const BIGNUM *B, const BIGNUM *N); + +# define SRP_MINIMAL_N 1024 + +# ifdef __cplusplus +} +# endif +# endif + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/srtp.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/srtp.h new file mode 100644 index 00000000..0b57c235 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/srtp.h @@ -0,0 +1,50 @@ +/* + * Copyright 2011-2016 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* + * DTLS code by Eric Rescorla + * + * Copyright (C) 2006, Network Resonance, Inc. Copyright (C) 2011, RTFM, Inc. + */ + +#ifndef HEADER_D1_SRTP_H +# define HEADER_D1_SRTP_H + +# include + +#ifdef __cplusplus +extern "C" { +#endif + +# define SRTP_AES128_CM_SHA1_80 0x0001 +# define SRTP_AES128_CM_SHA1_32 0x0002 +# define SRTP_AES128_F8_SHA1_80 0x0003 +# define SRTP_AES128_F8_SHA1_32 0x0004 +# define SRTP_NULL_SHA1_80 0x0005 +# define SRTP_NULL_SHA1_32 0x0006 + +/* AEAD SRTP protection profiles from RFC 7714 */ +# define SRTP_AEAD_AES_128_GCM 0x0007 +# define SRTP_AEAD_AES_256_GCM 0x0008 + +# ifndef OPENSSL_NO_SRTP + +__owur int SSL_CTX_set_tlsext_use_srtp(SSL_CTX *ctx, const char *profiles); +__owur int SSL_set_tlsext_use_srtp(SSL *ssl, const char *profiles); + +__owur STACK_OF(SRTP_PROTECTION_PROFILE) *SSL_get_srtp_profiles(SSL *ssl); +__owur SRTP_PROTECTION_PROFILE *SSL_get_selected_srtp_profile(SSL *s); + +# endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ssl.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ssl.h new file mode 100644 index 00000000..6724ccf2 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ssl.h @@ -0,0 +1,2438 @@ +/* + * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved + * Copyright 2005 Nokia. 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 + */ + +#ifndef HEADER_SSL_H +# define HEADER_SSL_H + +# include +# include +# include +# include +# if OPENSSL_API_COMPAT < 0x10100000L +# include +# include +# include +# endif +# include +# include +# include +# include + +# include +# include +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +/* OpenSSL version number for ASN.1 encoding of the session information */ +/*- + * Version 0 - initial version + * Version 1 - added the optional peer certificate + */ +# define SSL_SESSION_ASN1_VERSION 0x0001 + +# define SSL_MAX_SSL_SESSION_ID_LENGTH 32 +# define SSL_MAX_SID_CTX_LENGTH 32 + +# define SSL_MIN_RSA_MODULUS_LENGTH_IN_BYTES (512/8) +# define SSL_MAX_KEY_ARG_LENGTH 8 +# define SSL_MAX_MASTER_KEY_LENGTH 48 + +/* The maximum number of encrypt/decrypt pipelines we can support */ +# define SSL_MAX_PIPELINES 32 + +/* text strings for the ciphers */ + +/* These are used to specify which ciphers to use and not to use */ + +# define SSL_TXT_LOW "LOW" +# define SSL_TXT_MEDIUM "MEDIUM" +# define SSL_TXT_HIGH "HIGH" +# define SSL_TXT_FIPS "FIPS" + +# define SSL_TXT_aNULL "aNULL" +# define SSL_TXT_eNULL "eNULL" +# define SSL_TXT_NULL "NULL" + +# define SSL_TXT_kRSA "kRSA" +# define SSL_TXT_kDHr "kDHr"/* this cipher class has been removed */ +# define SSL_TXT_kDHd "kDHd"/* this cipher class has been removed */ +# define SSL_TXT_kDH "kDH"/* this cipher class has been removed */ +# define SSL_TXT_kEDH "kEDH"/* alias for kDHE */ +# define SSL_TXT_kDHE "kDHE" +# define SSL_TXT_kECDHr "kECDHr"/* this cipher class has been removed */ +# define SSL_TXT_kECDHe "kECDHe"/* this cipher class has been removed */ +# define SSL_TXT_kECDH "kECDH"/* this cipher class has been removed */ +# define SSL_TXT_kEECDH "kEECDH"/* alias for kECDHE */ +# define SSL_TXT_kECDHE "kECDHE" +# define SSL_TXT_kPSK "kPSK" +# define SSL_TXT_kRSAPSK "kRSAPSK" +# define SSL_TXT_kECDHEPSK "kECDHEPSK" +# define SSL_TXT_kDHEPSK "kDHEPSK" +# define SSL_TXT_kGOST "kGOST" +# define SSL_TXT_kSRP "kSRP" + +# define SSL_TXT_aRSA "aRSA" +# define SSL_TXT_aDSS "aDSS" +# define SSL_TXT_aDH "aDH"/* this cipher class has been removed */ +# define SSL_TXT_aECDH "aECDH"/* this cipher class has been removed */ +# define SSL_TXT_aECDSA "aECDSA" +# define SSL_TXT_aPSK "aPSK" +# define SSL_TXT_aGOST94 "aGOST94" +# define SSL_TXT_aGOST01 "aGOST01" +# define SSL_TXT_aGOST12 "aGOST12" +# define SSL_TXT_aGOST "aGOST" +# define SSL_TXT_aSRP "aSRP" + +# define SSL_TXT_DSS "DSS" +# define SSL_TXT_DH "DH" +# define SSL_TXT_DHE "DHE"/* same as "kDHE:-ADH" */ +# define SSL_TXT_EDH "EDH"/* alias for DHE */ +# define SSL_TXT_ADH "ADH" +# define SSL_TXT_RSA "RSA" +# define SSL_TXT_ECDH "ECDH" +# define SSL_TXT_EECDH "EECDH"/* alias for ECDHE" */ +# define SSL_TXT_ECDHE "ECDHE"/* same as "kECDHE:-AECDH" */ +# define SSL_TXT_AECDH "AECDH" +# define SSL_TXT_ECDSA "ECDSA" +# define SSL_TXT_PSK "PSK" +# define SSL_TXT_SRP "SRP" + +# define SSL_TXT_DES "DES" +# define SSL_TXT_3DES "3DES" +# define SSL_TXT_RC4 "RC4" +# define SSL_TXT_RC2 "RC2" +# define SSL_TXT_IDEA "IDEA" +# define SSL_TXT_SEED "SEED" +# define SSL_TXT_AES128 "AES128" +# define SSL_TXT_AES256 "AES256" +# define SSL_TXT_AES "AES" +# define SSL_TXT_AES_GCM "AESGCM" +# define SSL_TXT_AES_CCM "AESCCM" +# define SSL_TXT_AES_CCM_8 "AESCCM8" +# define SSL_TXT_CAMELLIA128 "CAMELLIA128" +# define SSL_TXT_CAMELLIA256 "CAMELLIA256" +# define SSL_TXT_CAMELLIA "CAMELLIA" +# define SSL_TXT_CHACHA20 "CHACHA20" +# define SSL_TXT_GOST "GOST89" +# define SSL_TXT_ARIA "ARIA" +# define SSL_TXT_ARIA_GCM "ARIAGCM" +# define SSL_TXT_ARIA128 "ARIA128" +# define SSL_TXT_ARIA256 "ARIA256" + +# define SSL_TXT_MD5 "MD5" +# define SSL_TXT_SHA1 "SHA1" +# define SSL_TXT_SHA "SHA"/* same as "SHA1" */ +# define SSL_TXT_GOST94 "GOST94" +# define SSL_TXT_GOST89MAC "GOST89MAC" +# define SSL_TXT_GOST12 "GOST12" +# define SSL_TXT_GOST89MAC12 "GOST89MAC12" +# define SSL_TXT_SHA256 "SHA256" +# define SSL_TXT_SHA384 "SHA384" + +# define SSL_TXT_SSLV3 "SSLv3" +# define SSL_TXT_TLSV1 "TLSv1" +# define SSL_TXT_TLSV1_1 "TLSv1.1" +# define SSL_TXT_TLSV1_2 "TLSv1.2" + +# define SSL_TXT_ALL "ALL" + +/*- + * COMPLEMENTOF* definitions. These identifiers are used to (de-select) + * ciphers normally not being used. + * Example: "RC4" will activate all ciphers using RC4 including ciphers + * without authentication, which would normally disabled by DEFAULT (due + * the "!ADH" being part of default). Therefore "RC4:!COMPLEMENTOFDEFAULT" + * will make sure that it is also disabled in the specific selection. + * COMPLEMENTOF* identifiers are portable between version, as adjustments + * to the default cipher setup will also be included here. + * + * COMPLEMENTOFDEFAULT does not experience the same special treatment that + * DEFAULT gets, as only selection is being done and no sorting as needed + * for DEFAULT. + */ +# define SSL_TXT_CMPALL "COMPLEMENTOFALL" +# define SSL_TXT_CMPDEF "COMPLEMENTOFDEFAULT" + +/* + * The following cipher list is used by default. It also is substituted when + * an application-defined cipher list string starts with 'DEFAULT'. + * This applies to ciphersuites for TLSv1.2 and below. + */ +# define SSL_DEFAULT_CIPHER_LIST "ALL:!COMPLEMENTOFDEFAULT:!eNULL" +/* This is the default set of TLSv1.3 ciphersuites */ +# if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305) +# define TLS_DEFAULT_CIPHERSUITES "TLS_AES_256_GCM_SHA384:" \ + "TLS_CHACHA20_POLY1305_SHA256:" \ + "TLS_AES_128_GCM_SHA256" +# else +# define TLS_DEFAULT_CIPHERSUITES "TLS_AES_256_GCM_SHA384:" \ + "TLS_AES_128_GCM_SHA256" +#endif +/* + * As of OpenSSL 1.0.0, ssl_create_cipher_list() in ssl/ssl_ciph.c always + * starts with a reasonable order, and all we have to do for DEFAULT is + * throwing out anonymous and unencrypted ciphersuites! (The latter are not + * actually enabled by ALL, but "ALL:RSA" would enable some of them.) + */ + +/* Used in SSL_set_shutdown()/SSL_get_shutdown(); */ +# define SSL_SENT_SHUTDOWN 1 +# define SSL_RECEIVED_SHUTDOWN 2 + +#ifdef __cplusplus +} +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +# define SSL_FILETYPE_ASN1 X509_FILETYPE_ASN1 +# define SSL_FILETYPE_PEM X509_FILETYPE_PEM + +/* + * This is needed to stop compilers complaining about the 'struct ssl_st *' + * function parameters used to prototype callbacks in SSL_CTX. + */ +typedef struct ssl_st *ssl_crock_st; +typedef struct tls_session_ticket_ext_st TLS_SESSION_TICKET_EXT; +typedef struct ssl_method_st SSL_METHOD; +typedef struct ssl_cipher_st SSL_CIPHER; +typedef struct ssl_session_st SSL_SESSION; +typedef struct tls_sigalgs_st TLS_SIGALGS; +typedef struct ssl_conf_ctx_st SSL_CONF_CTX; +typedef struct ssl_comp_st SSL_COMP; + +STACK_OF(SSL_CIPHER); +STACK_OF(SSL_COMP); + +/* SRTP protection profiles for use with the use_srtp extension (RFC 5764)*/ +typedef struct srtp_protection_profile_st { + const char *name; + unsigned long id; +} SRTP_PROTECTION_PROFILE; + +DEFINE_STACK_OF(SRTP_PROTECTION_PROFILE) + +typedef int (*tls_session_ticket_ext_cb_fn)(SSL *s, const unsigned char *data, + int len, void *arg); +typedef int (*tls_session_secret_cb_fn)(SSL *s, void *secret, int *secret_len, + STACK_OF(SSL_CIPHER) *peer_ciphers, + const SSL_CIPHER **cipher, void *arg); + +/* Extension context codes */ +/* This extension is only allowed in TLS */ +#define SSL_EXT_TLS_ONLY 0x0001 +/* This extension is only allowed in DTLS */ +#define SSL_EXT_DTLS_ONLY 0x0002 +/* Some extensions may be allowed in DTLS but we don't implement them for it */ +#define SSL_EXT_TLS_IMPLEMENTATION_ONLY 0x0004 +/* Most extensions are not defined for SSLv3 but EXT_TYPE_renegotiate is */ +#define SSL_EXT_SSL3_ALLOWED 0x0008 +/* Extension is only defined for TLS1.2 and below */ +#define SSL_EXT_TLS1_2_AND_BELOW_ONLY 0x0010 +/* Extension is only defined for TLS1.3 and above */ +#define SSL_EXT_TLS1_3_ONLY 0x0020 +/* Ignore this extension during parsing if we are resuming */ +#define SSL_EXT_IGNORE_ON_RESUMPTION 0x0040 +#define SSL_EXT_CLIENT_HELLO 0x0080 +/* Really means TLS1.2 or below */ +#define SSL_EXT_TLS1_2_SERVER_HELLO 0x0100 +#define SSL_EXT_TLS1_3_SERVER_HELLO 0x0200 +#define SSL_EXT_TLS1_3_ENCRYPTED_EXTENSIONS 0x0400 +#define SSL_EXT_TLS1_3_HELLO_RETRY_REQUEST 0x0800 +#define SSL_EXT_TLS1_3_CERTIFICATE 0x1000 +#define SSL_EXT_TLS1_3_NEW_SESSION_TICKET 0x2000 +#define SSL_EXT_TLS1_3_CERTIFICATE_REQUEST 0x4000 + +/* Typedefs for handling custom extensions */ + +typedef int (*custom_ext_add_cb)(SSL *s, unsigned int ext_type, + const unsigned char **out, size_t *outlen, + int *al, void *add_arg); + +typedef void (*custom_ext_free_cb)(SSL *s, unsigned int ext_type, + const unsigned char *out, void *add_arg); + +typedef int (*custom_ext_parse_cb)(SSL *s, unsigned int ext_type, + const unsigned char *in, size_t inlen, + int *al, void *parse_arg); + + +typedef int (*SSL_custom_ext_add_cb_ex)(SSL *s, unsigned int ext_type, + unsigned int context, + const unsigned char **out, + size_t *outlen, X509 *x, + size_t chainidx, + int *al, void *add_arg); + +typedef void (*SSL_custom_ext_free_cb_ex)(SSL *s, unsigned int ext_type, + unsigned int context, + const unsigned char *out, + void *add_arg); + +typedef int (*SSL_custom_ext_parse_cb_ex)(SSL *s, unsigned int ext_type, + unsigned int context, + const unsigned char *in, + size_t inlen, X509 *x, + size_t chainidx, + int *al, void *parse_arg); + +/* Typedef for verification callback */ +typedef int (*SSL_verify_cb)(int preverify_ok, X509_STORE_CTX *x509_ctx); + +/* + * Some values are reserved until OpenSSL 1.2.0 because they were previously + * included in SSL_OP_ALL in a 1.1.x release. + * + * Reserved value (until OpenSSL 1.2.0) 0x00000001U + * Reserved value (until OpenSSL 1.2.0) 0x00000002U + */ +/* Allow initial connection to servers that don't support RI */ +# define SSL_OP_LEGACY_SERVER_CONNECT 0x00000004U + +/* Reserved value (until OpenSSL 1.2.0) 0x00000008U */ +# define SSL_OP_TLSEXT_PADDING 0x00000010U +/* Reserved value (until OpenSSL 1.2.0) 0x00000020U */ +# define SSL_OP_SAFARI_ECDHE_ECDSA_BUG 0x00000040U +/* + * Reserved value (until OpenSSL 1.2.0) 0x00000080U + * Reserved value (until OpenSSL 1.2.0) 0x00000100U + * Reserved value (until OpenSSL 1.2.0) 0x00000200U + */ + +/* In TLSv1.3 allow a non-(ec)dhe based kex_mode */ +# define SSL_OP_ALLOW_NO_DHE_KEX 0x00000400U + +/* + * Disable SSL 3.0/TLS 1.0 CBC vulnerability workaround that was added in + * OpenSSL 0.9.6d. Usually (depending on the application protocol) the + * workaround is not needed. Unfortunately some broken SSL/TLS + * implementations cannot handle it at all, which is why we include it in + * SSL_OP_ALL. Added in 0.9.6e + */ +# define SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS 0x00000800U + +/* DTLS options */ +# define SSL_OP_NO_QUERY_MTU 0x00001000U +/* Turn on Cookie Exchange (on relevant for servers) */ +# define SSL_OP_COOKIE_EXCHANGE 0x00002000U +/* Don't use RFC4507 ticket extension */ +# define SSL_OP_NO_TICKET 0x00004000U +# ifndef OPENSSL_NO_DTLS1_METHOD +/* Use Cisco's "speshul" version of DTLS_BAD_VER + * (only with deprecated DTLSv1_client_method()) */ +# define SSL_OP_CISCO_ANYCONNECT 0x00008000U +# endif + +/* As server, disallow session resumption on renegotiation */ +# define SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION 0x00010000U +/* Don't use compression even if supported */ +# define SSL_OP_NO_COMPRESSION 0x00020000U +/* Permit unsafe legacy renegotiation */ +# define SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION 0x00040000U +/* Disable encrypt-then-mac */ +# define SSL_OP_NO_ENCRYPT_THEN_MAC 0x00080000U + +/* + * Enable TLSv1.3 Compatibility mode. This is on by default. A future version + * of OpenSSL may have this disabled by default. + */ +# define SSL_OP_ENABLE_MIDDLEBOX_COMPAT 0x00100000U + +/* Prioritize Chacha20Poly1305 when client does. + * Modifies SSL_OP_CIPHER_SERVER_PREFERENCE */ +# define SSL_OP_PRIORITIZE_CHACHA 0x00200000U + +/* + * Set on servers to choose the cipher according to the server's preferences + */ +# define SSL_OP_CIPHER_SERVER_PREFERENCE 0x00400000U +/* + * If set, a server will allow a client to issue a SSLv3.0 version number as + * latest version supported in the premaster secret, even when TLSv1.0 + * (version 3.1) was announced in the client hello. Normally this is + * forbidden to prevent version rollback attacks. + */ +# define SSL_OP_TLS_ROLLBACK_BUG 0x00800000U + +/* + * Switches off automatic TLSv1.3 anti-replay protection for early data. This + * is a server-side option only (no effect on the client). + */ +# define SSL_OP_NO_ANTI_REPLAY 0x01000000U + +# define SSL_OP_NO_SSLv3 0x02000000U +# define SSL_OP_NO_TLSv1 0x04000000U +# define SSL_OP_NO_TLSv1_2 0x08000000U +# define SSL_OP_NO_TLSv1_1 0x10000000U +# define SSL_OP_NO_TLSv1_3 0x20000000U + +# define SSL_OP_NO_DTLSv1 0x04000000U +# define SSL_OP_NO_DTLSv1_2 0x08000000U + +# define SSL_OP_NO_SSL_MASK (SSL_OP_NO_SSLv3|\ + SSL_OP_NO_TLSv1|SSL_OP_NO_TLSv1_1|SSL_OP_NO_TLSv1_2|SSL_OP_NO_TLSv1_3) +# define SSL_OP_NO_DTLS_MASK (SSL_OP_NO_DTLSv1|SSL_OP_NO_DTLSv1_2) + +/* Disallow all renegotiation */ +# define SSL_OP_NO_RENEGOTIATION 0x40000000U + +/* + * Make server add server-hello extension from early version of cryptopro + * draft, when GOST ciphersuite is negotiated. Required for interoperability + * with CryptoPro CSP 3.x + */ +# define SSL_OP_CRYPTOPRO_TLSEXT_BUG 0x80000000U + +/* + * SSL_OP_ALL: various bug workarounds that should be rather harmless. + * This used to be 0x000FFFFFL before 0.9.7. + * This used to be 0x80000BFFU before 1.1.1. + */ +# define SSL_OP_ALL (SSL_OP_CRYPTOPRO_TLSEXT_BUG|\ + SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS|\ + SSL_OP_LEGACY_SERVER_CONNECT|\ + SSL_OP_TLSEXT_PADDING|\ + SSL_OP_SAFARI_ECDHE_ECDSA_BUG) + +/* OBSOLETE OPTIONS: retained for compatibility */ + +/* Removed from OpenSSL 1.1.0. Was 0x00000001L */ +/* Related to removed SSLv2. */ +# define SSL_OP_MICROSOFT_SESS_ID_BUG 0x0 +/* Removed from OpenSSL 1.1.0. Was 0x00000002L */ +/* Related to removed SSLv2. */ +# define SSL_OP_NETSCAPE_CHALLENGE_BUG 0x0 +/* Removed from OpenSSL 0.9.8q and 1.0.0c. Was 0x00000008L */ +/* Dead forever, see CVE-2010-4180 */ +# define SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG 0x0 +/* Removed from OpenSSL 1.0.1h and 1.0.2. Was 0x00000010L */ +/* Refers to ancient SSLREF and SSLv2. */ +# define SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG 0x0 +/* Removed from OpenSSL 1.1.0. Was 0x00000020 */ +# define SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER 0x0 +/* Removed from OpenSSL 0.9.7h and 0.9.8b. Was 0x00000040L */ +# define SSL_OP_MSIE_SSLV2_RSA_PADDING 0x0 +/* Removed from OpenSSL 1.1.0. Was 0x00000080 */ +/* Ancient SSLeay version. */ +# define SSL_OP_SSLEAY_080_CLIENT_DH_BUG 0x0 +/* Removed from OpenSSL 1.1.0. Was 0x00000100L */ +# define SSL_OP_TLS_D5_BUG 0x0 +/* Removed from OpenSSL 1.1.0. Was 0x00000200L */ +# define SSL_OP_TLS_BLOCK_PADDING_BUG 0x0 +/* Removed from OpenSSL 1.1.0. Was 0x00080000L */ +# define SSL_OP_SINGLE_ECDH_USE 0x0 +/* Removed from OpenSSL 1.1.0. Was 0x00100000L */ +# define SSL_OP_SINGLE_DH_USE 0x0 +/* Removed from OpenSSL 1.0.1k and 1.0.2. Was 0x00200000L */ +# define SSL_OP_EPHEMERAL_RSA 0x0 +/* Removed from OpenSSL 1.1.0. Was 0x01000000L */ +# define SSL_OP_NO_SSLv2 0x0 +/* Removed from OpenSSL 1.0.1. Was 0x08000000L */ +# define SSL_OP_PKCS1_CHECK_1 0x0 +/* Removed from OpenSSL 1.0.1. Was 0x10000000L */ +# define SSL_OP_PKCS1_CHECK_2 0x0 +/* Removed from OpenSSL 1.1.0. Was 0x20000000L */ +# define SSL_OP_NETSCAPE_CA_DN_BUG 0x0 +/* Removed from OpenSSL 1.1.0. Was 0x40000000L */ +# define SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG 0x0 + +/* + * Allow SSL_write(..., n) to return r with 0 < r < n (i.e. report success + * when just a single record has been written): + */ +# define SSL_MODE_ENABLE_PARTIAL_WRITE 0x00000001U +/* + * Make it possible to retry SSL_write() with changed buffer location (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(): + */ +# define SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER 0x00000002U +/* + * Never bother the application with retries if the transport is blocking: + */ +# define SSL_MODE_AUTO_RETRY 0x00000004U +/* Don't attempt to automatically build certificate chain */ +# define SSL_MODE_NO_AUTO_CHAIN 0x00000008U +/* + * Save RAM by releasing read and write buffers when they're empty. (SSL3 and + * TLS only.) Released buffers are freed. + */ +# define SSL_MODE_RELEASE_BUFFERS 0x00000010U +/* + * Send the current time in the Random fields of the ClientHello and + * ServerHello records for compatibility with hypothetical implementations + * that require it. + */ +# define SSL_MODE_SEND_CLIENTHELLO_TIME 0x00000020U +# define SSL_MODE_SEND_SERVERHELLO_TIME 0x00000040U +/* + * Send TLS_FALLBACK_SCSV in the ClientHello. To be set only by applications + * that reconnect with a downgraded protocol version; see + * draft-ietf-tls-downgrade-scsv-00 for details. DO NOT ENABLE THIS if your + * application attempts a normal handshake. Only use this in explicit + * fallback retries, following the guidance in + * draft-ietf-tls-downgrade-scsv-00. + */ +# define SSL_MODE_SEND_FALLBACK_SCSV 0x00000080U +/* + * Support Asynchronous operation + */ +# define SSL_MODE_ASYNC 0x00000100U + +/* + * When using DTLS/SCTP, include the terminating zero in the label + * used for computing the endpoint-pair shared secret. Required for + * interoperability with implementations having this bug like these + * older version of OpenSSL: + * - OpenSSL 1.0.0 series + * - OpenSSL 1.0.1 series + * - OpenSSL 1.0.2 series + * - OpenSSL 1.1.0 series + * - OpenSSL 1.1.1 and 1.1.1a + */ +# define SSL_MODE_DTLS_SCTP_LABEL_LENGTH_BUG 0x00000400U + +/* Cert related flags */ +/* + * Many implementations ignore some aspects of the TLS standards such as + * enforcing certificate chain algorithms. When this is set we enforce them. + */ +# define SSL_CERT_FLAG_TLS_STRICT 0x00000001U + +/* Suite B modes, takes same values as certificate verify flags */ +# define SSL_CERT_FLAG_SUITEB_128_LOS_ONLY 0x10000 +/* Suite B 192 bit only mode */ +# define SSL_CERT_FLAG_SUITEB_192_LOS 0x20000 +/* Suite B 128 bit mode allowing 192 bit algorithms */ +# define SSL_CERT_FLAG_SUITEB_128_LOS 0x30000 + +/* Perform all sorts of protocol violations for testing purposes */ +# define SSL_CERT_FLAG_BROKEN_PROTOCOL 0x10000000 + +/* Flags for building certificate chains */ +/* Treat any existing certificates as untrusted CAs */ +# define SSL_BUILD_CHAIN_FLAG_UNTRUSTED 0x1 +/* Don't include root CA in chain */ +# define SSL_BUILD_CHAIN_FLAG_NO_ROOT 0x2 +/* Just check certificates already there */ +# define SSL_BUILD_CHAIN_FLAG_CHECK 0x4 +/* Ignore verification errors */ +# define SSL_BUILD_CHAIN_FLAG_IGNORE_ERROR 0x8 +/* Clear verification errors from queue */ +# define SSL_BUILD_CHAIN_FLAG_CLEAR_ERROR 0x10 + +/* Flags returned by SSL_check_chain */ +/* Certificate can be used with this session */ +# define CERT_PKEY_VALID 0x1 +/* Certificate can also be used for signing */ +# define CERT_PKEY_SIGN 0x2 +/* EE certificate signing algorithm OK */ +# define CERT_PKEY_EE_SIGNATURE 0x10 +/* CA signature algorithms OK */ +# define CERT_PKEY_CA_SIGNATURE 0x20 +/* EE certificate parameters OK */ +# define CERT_PKEY_EE_PARAM 0x40 +/* CA certificate parameters OK */ +# define CERT_PKEY_CA_PARAM 0x80 +/* Signing explicitly allowed as opposed to SHA1 fallback */ +# define CERT_PKEY_EXPLICIT_SIGN 0x100 +/* Client CA issuer names match (always set for server cert) */ +# define CERT_PKEY_ISSUER_NAME 0x200 +/* Cert type matches client types (always set for server cert) */ +# define CERT_PKEY_CERT_TYPE 0x400 +/* Cert chain suitable to Suite B */ +# define CERT_PKEY_SUITEB 0x800 + +# define SSL_CONF_FLAG_CMDLINE 0x1 +# define SSL_CONF_FLAG_FILE 0x2 +# define SSL_CONF_FLAG_CLIENT 0x4 +# define SSL_CONF_FLAG_SERVER 0x8 +# define SSL_CONF_FLAG_SHOW_ERRORS 0x10 +# define SSL_CONF_FLAG_CERTIFICATE 0x20 +# define SSL_CONF_FLAG_REQUIRE_PRIVATE 0x40 +/* Configuration value types */ +# define SSL_CONF_TYPE_UNKNOWN 0x0 +# define SSL_CONF_TYPE_STRING 0x1 +# define SSL_CONF_TYPE_FILE 0x2 +# define SSL_CONF_TYPE_DIR 0x3 +# define SSL_CONF_TYPE_NONE 0x4 + +/* Maximum length of the application-controlled segment of a a TLSv1.3 cookie */ +# define SSL_COOKIE_LENGTH 4096 + +/* + * Note: SSL[_CTX]_set_{options,mode} use |= op on the previous value, they + * cannot be used to clear bits. + */ + +unsigned long SSL_CTX_get_options(const SSL_CTX *ctx); +unsigned long SSL_get_options(const SSL *s); +unsigned long SSL_CTX_clear_options(SSL_CTX *ctx, unsigned long op); +unsigned long SSL_clear_options(SSL *s, unsigned long op); +unsigned long SSL_CTX_set_options(SSL_CTX *ctx, unsigned long op); +unsigned long SSL_set_options(SSL *s, unsigned long op); + +# define SSL_CTX_set_mode(ctx,op) \ + SSL_CTX_ctrl((ctx),SSL_CTRL_MODE,(op),NULL) +# define SSL_CTX_clear_mode(ctx,op) \ + SSL_CTX_ctrl((ctx),SSL_CTRL_CLEAR_MODE,(op),NULL) +# define SSL_CTX_get_mode(ctx) \ + SSL_CTX_ctrl((ctx),SSL_CTRL_MODE,0,NULL) +# define SSL_clear_mode(ssl,op) \ + SSL_ctrl((ssl),SSL_CTRL_CLEAR_MODE,(op),NULL) +# define SSL_set_mode(ssl,op) \ + SSL_ctrl((ssl),SSL_CTRL_MODE,(op),NULL) +# define SSL_get_mode(ssl) \ + SSL_ctrl((ssl),SSL_CTRL_MODE,0,NULL) +# define SSL_set_mtu(ssl, mtu) \ + SSL_ctrl((ssl),SSL_CTRL_SET_MTU,(mtu),NULL) +# define DTLS_set_link_mtu(ssl, mtu) \ + SSL_ctrl((ssl),DTLS_CTRL_SET_LINK_MTU,(mtu),NULL) +# define DTLS_get_link_min_mtu(ssl) \ + SSL_ctrl((ssl),DTLS_CTRL_GET_LINK_MIN_MTU,0,NULL) + +# define SSL_get_secure_renegotiation_support(ssl) \ + SSL_ctrl((ssl), SSL_CTRL_GET_RI_SUPPORT, 0, NULL) + +# ifndef OPENSSL_NO_HEARTBEATS +# define SSL_heartbeat(ssl) \ + SSL_ctrl((ssl),SSL_CTRL_DTLS_EXT_SEND_HEARTBEAT,0,NULL) +# endif + +# define SSL_CTX_set_cert_flags(ctx,op) \ + SSL_CTX_ctrl((ctx),SSL_CTRL_CERT_FLAGS,(op),NULL) +# define SSL_set_cert_flags(s,op) \ + SSL_ctrl((s),SSL_CTRL_CERT_FLAGS,(op),NULL) +# define SSL_CTX_clear_cert_flags(ctx,op) \ + SSL_CTX_ctrl((ctx),SSL_CTRL_CLEAR_CERT_FLAGS,(op),NULL) +# define SSL_clear_cert_flags(s,op) \ + SSL_ctrl((s),SSL_CTRL_CLEAR_CERT_FLAGS,(op),NULL) + +void SSL_CTX_set_msg_callback(SSL_CTX *ctx, + void (*cb) (int write_p, int version, + int content_type, const void *buf, + size_t len, SSL *ssl, void *arg)); +void SSL_set_msg_callback(SSL *ssl, + void (*cb) (int write_p, int version, + int content_type, const void *buf, + size_t len, SSL *ssl, void *arg)); +# define SSL_CTX_set_msg_callback_arg(ctx, arg) SSL_CTX_ctrl((ctx), SSL_CTRL_SET_MSG_CALLBACK_ARG, 0, (arg)) +# define SSL_set_msg_callback_arg(ssl, arg) SSL_ctrl((ssl), SSL_CTRL_SET_MSG_CALLBACK_ARG, 0, (arg)) + +# define SSL_get_extms_support(s) \ + SSL_ctrl((s),SSL_CTRL_GET_EXTMS_SUPPORT,0,NULL) + +# ifndef OPENSSL_NO_SRP + +/* see tls_srp.c */ +__owur int SSL_SRP_CTX_init(SSL *s); +__owur int SSL_CTX_SRP_CTX_init(SSL_CTX *ctx); +int SSL_SRP_CTX_free(SSL *ctx); +int SSL_CTX_SRP_CTX_free(SSL_CTX *ctx); +__owur int SSL_srp_server_param_with_username(SSL *s, int *ad); +__owur int SRP_Calc_A_param(SSL *s); + +# endif + +/* 100k max cert list */ +# define SSL_MAX_CERT_LIST_DEFAULT 1024*100 + +# define SSL_SESSION_CACHE_MAX_SIZE_DEFAULT (1024*20) + +/* + * This callback type is used inside SSL_CTX, SSL, and in the functions that + * set them. It is used to override the generation of SSL/TLS session IDs in + * a server. Return value should be zero on an error, non-zero to proceed. + * Also, callbacks should themselves check if the id they generate is unique + * otherwise the SSL handshake will fail with an error - callbacks can do + * this using the 'ssl' value they're passed by; + * SSL_has_matching_session_id(ssl, id, *id_len) The length value passed in + * is set at the maximum size the session ID can be. In SSLv3/TLSv1 it is 32 + * bytes. The callback can alter this length to be less if desired. It is + * also an error for the callback to set the size to zero. + */ +typedef int (*GEN_SESSION_CB) (SSL *ssl, unsigned char *id, + unsigned int *id_len); + +# define SSL_SESS_CACHE_OFF 0x0000 +# define SSL_SESS_CACHE_CLIENT 0x0001 +# define SSL_SESS_CACHE_SERVER 0x0002 +# define SSL_SESS_CACHE_BOTH (SSL_SESS_CACHE_CLIENT|SSL_SESS_CACHE_SERVER) +# define SSL_SESS_CACHE_NO_AUTO_CLEAR 0x0080 +/* enough comments already ... see SSL_CTX_set_session_cache_mode(3) */ +# define SSL_SESS_CACHE_NO_INTERNAL_LOOKUP 0x0100 +# define SSL_SESS_CACHE_NO_INTERNAL_STORE 0x0200 +# define SSL_SESS_CACHE_NO_INTERNAL \ + (SSL_SESS_CACHE_NO_INTERNAL_LOOKUP|SSL_SESS_CACHE_NO_INTERNAL_STORE) + +LHASH_OF(SSL_SESSION) *SSL_CTX_sessions(SSL_CTX *ctx); +# define SSL_CTX_sess_number(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_NUMBER,0,NULL) +# define SSL_CTX_sess_connect(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT,0,NULL) +# define SSL_CTX_sess_connect_good(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT_GOOD,0,NULL) +# define SSL_CTX_sess_connect_renegotiate(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT_RENEGOTIATE,0,NULL) +# define SSL_CTX_sess_accept(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT,0,NULL) +# define SSL_CTX_sess_accept_renegotiate(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT_RENEGOTIATE,0,NULL) +# define SSL_CTX_sess_accept_good(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT_GOOD,0,NULL) +# define SSL_CTX_sess_hits(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_HIT,0,NULL) +# define SSL_CTX_sess_cb_hits(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CB_HIT,0,NULL) +# define SSL_CTX_sess_misses(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_MISSES,0,NULL) +# define SSL_CTX_sess_timeouts(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_TIMEOUTS,0,NULL) +# define SSL_CTX_sess_cache_full(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CACHE_FULL,0,NULL) + +void SSL_CTX_sess_set_new_cb(SSL_CTX *ctx, + int (*new_session_cb) (struct ssl_st *ssl, + SSL_SESSION *sess)); +int (*SSL_CTX_sess_get_new_cb(SSL_CTX *ctx)) (struct ssl_st *ssl, + SSL_SESSION *sess); +void SSL_CTX_sess_set_remove_cb(SSL_CTX *ctx, + void (*remove_session_cb) (struct ssl_ctx_st + *ctx, + SSL_SESSION *sess)); +void (*SSL_CTX_sess_get_remove_cb(SSL_CTX *ctx)) (struct ssl_ctx_st *ctx, + SSL_SESSION *sess); +void SSL_CTX_sess_set_get_cb(SSL_CTX *ctx, + SSL_SESSION *(*get_session_cb) (struct ssl_st + *ssl, + const unsigned char + *data, int len, + int *copy)); +SSL_SESSION *(*SSL_CTX_sess_get_get_cb(SSL_CTX *ctx)) (struct ssl_st *ssl, + const unsigned char *data, + int len, int *copy); +void SSL_CTX_set_info_callback(SSL_CTX *ctx, + void (*cb) (const SSL *ssl, int type, int val)); +void (*SSL_CTX_get_info_callback(SSL_CTX *ctx)) (const SSL *ssl, int type, + int val); +void SSL_CTX_set_client_cert_cb(SSL_CTX *ctx, + int (*client_cert_cb) (SSL *ssl, X509 **x509, + EVP_PKEY **pkey)); +int (*SSL_CTX_get_client_cert_cb(SSL_CTX *ctx)) (SSL *ssl, X509 **x509, + EVP_PKEY **pkey); +# ifndef OPENSSL_NO_ENGINE +__owur int SSL_CTX_set_client_cert_engine(SSL_CTX *ctx, ENGINE *e); +# endif +void SSL_CTX_set_cookie_generate_cb(SSL_CTX *ctx, + int (*app_gen_cookie_cb) (SSL *ssl, + unsigned char + *cookie, + unsigned int + *cookie_len)); +void SSL_CTX_set_cookie_verify_cb(SSL_CTX *ctx, + int (*app_verify_cookie_cb) (SSL *ssl, + const unsigned + char *cookie, + unsigned int + cookie_len)); + +void SSL_CTX_set_stateless_cookie_generate_cb( + SSL_CTX *ctx, + int (*gen_stateless_cookie_cb) (SSL *ssl, + unsigned char *cookie, + size_t *cookie_len)); +void SSL_CTX_set_stateless_cookie_verify_cb( + SSL_CTX *ctx, + int (*verify_stateless_cookie_cb) (SSL *ssl, + const unsigned char *cookie, + size_t cookie_len)); +# ifndef OPENSSL_NO_NEXTPROTONEG + +typedef int (*SSL_CTX_npn_advertised_cb_func)(SSL *ssl, + const unsigned char **out, + unsigned int *outlen, + void *arg); +void SSL_CTX_set_next_protos_advertised_cb(SSL_CTX *s, + SSL_CTX_npn_advertised_cb_func cb, + void *arg); +# define SSL_CTX_set_npn_advertised_cb SSL_CTX_set_next_protos_advertised_cb + +typedef int (*SSL_CTX_npn_select_cb_func)(SSL *s, + unsigned char **out, + unsigned char *outlen, + const unsigned char *in, + unsigned int inlen, + void *arg); +void SSL_CTX_set_next_proto_select_cb(SSL_CTX *s, + SSL_CTX_npn_select_cb_func cb, + void *arg); +# define SSL_CTX_set_npn_select_cb SSL_CTX_set_next_proto_select_cb + +void SSL_get0_next_proto_negotiated(const SSL *s, const unsigned char **data, + unsigned *len); +# define SSL_get0_npn_negotiated SSL_get0_next_proto_negotiated +# endif + +__owur int SSL_select_next_proto(unsigned char **out, unsigned char *outlen, + const unsigned char *in, unsigned int inlen, + const unsigned char *client, + unsigned int client_len); + +# define OPENSSL_NPN_UNSUPPORTED 0 +# define OPENSSL_NPN_NEGOTIATED 1 +# define OPENSSL_NPN_NO_OVERLAP 2 + +__owur int SSL_CTX_set_alpn_protos(SSL_CTX *ctx, const unsigned char *protos, + unsigned int protos_len); +__owur int SSL_set_alpn_protos(SSL *ssl, const unsigned char *protos, + unsigned int protos_len); +typedef int (*SSL_CTX_alpn_select_cb_func)(SSL *ssl, + const unsigned char **out, + unsigned char *outlen, + const unsigned char *in, + unsigned int inlen, + void *arg); +void SSL_CTX_set_alpn_select_cb(SSL_CTX *ctx, + SSL_CTX_alpn_select_cb_func cb, + void *arg); +void SSL_get0_alpn_selected(const SSL *ssl, const unsigned char **data, + unsigned int *len); + +# ifndef OPENSSL_NO_PSK +/* + * the maximum length of the buffer given to callbacks containing the + * resulting identity/psk + */ +# define PSK_MAX_IDENTITY_LEN 128 +# define PSK_MAX_PSK_LEN 256 +typedef unsigned int (*SSL_psk_client_cb_func)(SSL *ssl, + const char *hint, + char *identity, + unsigned int max_identity_len, + unsigned char *psk, + unsigned int max_psk_len); +void SSL_CTX_set_psk_client_callback(SSL_CTX *ctx, SSL_psk_client_cb_func cb); +void SSL_set_psk_client_callback(SSL *ssl, SSL_psk_client_cb_func cb); + +typedef unsigned int (*SSL_psk_server_cb_func)(SSL *ssl, + const char *identity, + unsigned char *psk, + unsigned int max_psk_len); +void SSL_CTX_set_psk_server_callback(SSL_CTX *ctx, SSL_psk_server_cb_func cb); +void SSL_set_psk_server_callback(SSL *ssl, SSL_psk_server_cb_func cb); + +__owur int SSL_CTX_use_psk_identity_hint(SSL_CTX *ctx, const char *identity_hint); +__owur int SSL_use_psk_identity_hint(SSL *s, const char *identity_hint); +const char *SSL_get_psk_identity_hint(const SSL *s); +const char *SSL_get_psk_identity(const SSL *s); +# endif + +typedef int (*SSL_psk_find_session_cb_func)(SSL *ssl, + const unsigned char *identity, + size_t identity_len, + SSL_SESSION **sess); +typedef int (*SSL_psk_use_session_cb_func)(SSL *ssl, const EVP_MD *md, + const unsigned char **id, + size_t *idlen, + SSL_SESSION **sess); + +void SSL_set_psk_find_session_callback(SSL *s, SSL_psk_find_session_cb_func cb); +void SSL_CTX_set_psk_find_session_callback(SSL_CTX *ctx, + SSL_psk_find_session_cb_func cb); +void SSL_set_psk_use_session_callback(SSL *s, SSL_psk_use_session_cb_func cb); +void SSL_CTX_set_psk_use_session_callback(SSL_CTX *ctx, + SSL_psk_use_session_cb_func cb); + +/* Register callbacks to handle custom TLS Extensions for client or server. */ + +__owur int SSL_CTX_has_client_custom_ext(const SSL_CTX *ctx, + unsigned int ext_type); + +__owur int SSL_CTX_add_client_custom_ext(SSL_CTX *ctx, + unsigned int ext_type, + custom_ext_add_cb add_cb, + custom_ext_free_cb free_cb, + void *add_arg, + custom_ext_parse_cb parse_cb, + void *parse_arg); + +__owur int SSL_CTX_add_server_custom_ext(SSL_CTX *ctx, + unsigned int ext_type, + custom_ext_add_cb add_cb, + custom_ext_free_cb free_cb, + void *add_arg, + custom_ext_parse_cb parse_cb, + void *parse_arg); + +__owur int SSL_CTX_add_custom_ext(SSL_CTX *ctx, unsigned int ext_type, + unsigned int context, + SSL_custom_ext_add_cb_ex add_cb, + SSL_custom_ext_free_cb_ex free_cb, + void *add_arg, + SSL_custom_ext_parse_cb_ex parse_cb, + void *parse_arg); + +__owur int SSL_extension_supported(unsigned int ext_type); + +# define SSL_NOTHING 1 +# define SSL_WRITING 2 +# define SSL_READING 3 +# define SSL_X509_LOOKUP 4 +# define SSL_ASYNC_PAUSED 5 +# define SSL_ASYNC_NO_JOBS 6 +# define SSL_CLIENT_HELLO_CB 7 + +/* These will only be used when doing non-blocking IO */ +# define SSL_want_nothing(s) (SSL_want(s) == SSL_NOTHING) +# define SSL_want_read(s) (SSL_want(s) == SSL_READING) +# define SSL_want_write(s) (SSL_want(s) == SSL_WRITING) +# define SSL_want_x509_lookup(s) (SSL_want(s) == SSL_X509_LOOKUP) +# define SSL_want_async(s) (SSL_want(s) == SSL_ASYNC_PAUSED) +# define SSL_want_async_job(s) (SSL_want(s) == SSL_ASYNC_NO_JOBS) +# define SSL_want_client_hello_cb(s) (SSL_want(s) == SSL_CLIENT_HELLO_CB) + +# define SSL_MAC_FLAG_READ_MAC_STREAM 1 +# define SSL_MAC_FLAG_WRITE_MAC_STREAM 2 + +/* + * A callback for logging out TLS key material. This callback should log out + * |line| followed by a newline. + */ +typedef void (*SSL_CTX_keylog_cb_func)(const SSL *ssl, const char *line); + +/* + * SSL_CTX_set_keylog_callback configures a callback to log key material. This + * is intended for debugging use with tools like Wireshark. The cb function + * should log line followed by a newline. + */ +void SSL_CTX_set_keylog_callback(SSL_CTX *ctx, SSL_CTX_keylog_cb_func cb); + +/* + * SSL_CTX_get_keylog_callback returns the callback configured by + * SSL_CTX_set_keylog_callback. + */ +SSL_CTX_keylog_cb_func SSL_CTX_get_keylog_callback(const SSL_CTX *ctx); + +int SSL_CTX_set_max_early_data(SSL_CTX *ctx, uint32_t max_early_data); +uint32_t SSL_CTX_get_max_early_data(const SSL_CTX *ctx); +int SSL_set_max_early_data(SSL *s, uint32_t max_early_data); +uint32_t SSL_get_max_early_data(const SSL *s); +int SSL_CTX_set_recv_max_early_data(SSL_CTX *ctx, uint32_t recv_max_early_data); +uint32_t SSL_CTX_get_recv_max_early_data(const SSL_CTX *ctx); +int SSL_set_recv_max_early_data(SSL *s, uint32_t recv_max_early_data); +uint32_t SSL_get_recv_max_early_data(const SSL *s); + +#ifdef __cplusplus +} +#endif + +# include +# include +# include /* This is mostly sslv3 with a few tweaks */ +# include /* Datagram TLS */ +# include /* Support for the use_srtp extension */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * These need to be after the above set of includes due to a compiler bug + * in VisualStudio 2015 + */ +DEFINE_STACK_OF_CONST(SSL_CIPHER) +DEFINE_STACK_OF(SSL_COMP) + +/* compatibility */ +# define SSL_set_app_data(s,arg) (SSL_set_ex_data(s,0,(char *)(arg))) +# define SSL_get_app_data(s) (SSL_get_ex_data(s,0)) +# define SSL_SESSION_set_app_data(s,a) (SSL_SESSION_set_ex_data(s,0, \ + (char *)(a))) +# define SSL_SESSION_get_app_data(s) (SSL_SESSION_get_ex_data(s,0)) +# define SSL_CTX_get_app_data(ctx) (SSL_CTX_get_ex_data(ctx,0)) +# define SSL_CTX_set_app_data(ctx,arg) (SSL_CTX_set_ex_data(ctx,0, \ + (char *)(arg))) +DEPRECATEDIN_1_1_0(void SSL_set_debug(SSL *s, int debug)) + +/* TLSv1.3 KeyUpdate message types */ +/* -1 used so that this is an invalid value for the on-the-wire protocol */ +#define SSL_KEY_UPDATE_NONE -1 +/* Values as defined for the on-the-wire protocol */ +#define SSL_KEY_UPDATE_NOT_REQUESTED 0 +#define SSL_KEY_UPDATE_REQUESTED 1 + +/* + * The valid handshake states (one for each type message sent and one for each + * type of message received). There are also two "special" states: + * TLS = TLS or DTLS state + * DTLS = DTLS specific state + * CR/SR = Client Read/Server Read + * CW/SW = Client Write/Server Write + * + * The "special" states are: + * TLS_ST_BEFORE = No handshake has been initiated yet + * TLS_ST_OK = A handshake has been successfully completed + */ +typedef enum { + TLS_ST_BEFORE, + TLS_ST_OK, + DTLS_ST_CR_HELLO_VERIFY_REQUEST, + TLS_ST_CR_SRVR_HELLO, + TLS_ST_CR_CERT, + TLS_ST_CR_CERT_STATUS, + TLS_ST_CR_KEY_EXCH, + TLS_ST_CR_CERT_REQ, + TLS_ST_CR_SRVR_DONE, + TLS_ST_CR_SESSION_TICKET, + TLS_ST_CR_CHANGE, + TLS_ST_CR_FINISHED, + TLS_ST_CW_CLNT_HELLO, + TLS_ST_CW_CERT, + TLS_ST_CW_KEY_EXCH, + TLS_ST_CW_CERT_VRFY, + TLS_ST_CW_CHANGE, + TLS_ST_CW_NEXT_PROTO, + TLS_ST_CW_FINISHED, + TLS_ST_SW_HELLO_REQ, + TLS_ST_SR_CLNT_HELLO, + DTLS_ST_SW_HELLO_VERIFY_REQUEST, + TLS_ST_SW_SRVR_HELLO, + TLS_ST_SW_CERT, + TLS_ST_SW_KEY_EXCH, + TLS_ST_SW_CERT_REQ, + TLS_ST_SW_SRVR_DONE, + TLS_ST_SR_CERT, + TLS_ST_SR_KEY_EXCH, + TLS_ST_SR_CERT_VRFY, + TLS_ST_SR_NEXT_PROTO, + TLS_ST_SR_CHANGE, + TLS_ST_SR_FINISHED, + TLS_ST_SW_SESSION_TICKET, + TLS_ST_SW_CERT_STATUS, + TLS_ST_SW_CHANGE, + TLS_ST_SW_FINISHED, + TLS_ST_SW_ENCRYPTED_EXTENSIONS, + TLS_ST_CR_ENCRYPTED_EXTENSIONS, + TLS_ST_CR_CERT_VRFY, + TLS_ST_SW_CERT_VRFY, + TLS_ST_CR_HELLO_REQ, + TLS_ST_SW_KEY_UPDATE, + TLS_ST_CW_KEY_UPDATE, + TLS_ST_SR_KEY_UPDATE, + TLS_ST_CR_KEY_UPDATE, + TLS_ST_EARLY_DATA, + TLS_ST_PENDING_EARLY_DATA_END, + TLS_ST_CW_END_OF_EARLY_DATA, + TLS_ST_SR_END_OF_EARLY_DATA +} OSSL_HANDSHAKE_STATE; + +/* + * Most of the following state values are no longer used and are defined to be + * the closest equivalent value in the current state machine code. Not all + * defines have an equivalent and are set to a dummy value (-1). SSL_ST_CONNECT + * and SSL_ST_ACCEPT are still in use in the definition of SSL_CB_ACCEPT_LOOP, + * SSL_CB_ACCEPT_EXIT, SSL_CB_CONNECT_LOOP and SSL_CB_CONNECT_EXIT. + */ + +# define SSL_ST_CONNECT 0x1000 +# define SSL_ST_ACCEPT 0x2000 + +# define SSL_ST_MASK 0x0FFF + +# define SSL_CB_LOOP 0x01 +# define SSL_CB_EXIT 0x02 +# define SSL_CB_READ 0x04 +# define SSL_CB_WRITE 0x08 +# define SSL_CB_ALERT 0x4000/* used in callback */ +# define SSL_CB_READ_ALERT (SSL_CB_ALERT|SSL_CB_READ) +# define SSL_CB_WRITE_ALERT (SSL_CB_ALERT|SSL_CB_WRITE) +# define SSL_CB_ACCEPT_LOOP (SSL_ST_ACCEPT|SSL_CB_LOOP) +# define SSL_CB_ACCEPT_EXIT (SSL_ST_ACCEPT|SSL_CB_EXIT) +# define SSL_CB_CONNECT_LOOP (SSL_ST_CONNECT|SSL_CB_LOOP) +# define SSL_CB_CONNECT_EXIT (SSL_ST_CONNECT|SSL_CB_EXIT) +# define SSL_CB_HANDSHAKE_START 0x10 +# define SSL_CB_HANDSHAKE_DONE 0x20 + +/* Is the SSL_connection established? */ +# define SSL_in_connect_init(a) (SSL_in_init(a) && !SSL_is_server(a)) +# define SSL_in_accept_init(a) (SSL_in_init(a) && SSL_is_server(a)) +int SSL_in_init(const SSL *s); +int SSL_in_before(const SSL *s); +int SSL_is_init_finished(const SSL *s); + +/* + * The following 3 states are kept in ssl->rlayer.rstate when reads fail, you + * should not need these + */ +# define SSL_ST_READ_HEADER 0xF0 +# define SSL_ST_READ_BODY 0xF1 +# define SSL_ST_READ_DONE 0xF2 + +/*- + * Obtain latest Finished message + * -- that we sent (SSL_get_finished) + * -- that we expected from peer (SSL_get_peer_finished). + * Returns length (0 == no Finished so far), copies up to 'count' bytes. + */ +size_t SSL_get_finished(const SSL *s, void *buf, size_t count); +size_t SSL_get_peer_finished(const SSL *s, void *buf, size_t count); + +/* + * use either SSL_VERIFY_NONE or SSL_VERIFY_PEER, the last 3 options are + * 'ored' with SSL_VERIFY_PEER if they are desired + */ +# define SSL_VERIFY_NONE 0x00 +# define SSL_VERIFY_PEER 0x01 +# define SSL_VERIFY_FAIL_IF_NO_PEER_CERT 0x02 +# define SSL_VERIFY_CLIENT_ONCE 0x04 +# define SSL_VERIFY_POST_HANDSHAKE 0x08 + +# if OPENSSL_API_COMPAT < 0x10100000L +# define OpenSSL_add_ssl_algorithms() SSL_library_init() +# define SSLeay_add_ssl_algorithms() SSL_library_init() +# endif + +/* More backward compatibility */ +# define SSL_get_cipher(s) \ + SSL_CIPHER_get_name(SSL_get_current_cipher(s)) +# define SSL_get_cipher_bits(s,np) \ + SSL_CIPHER_get_bits(SSL_get_current_cipher(s),np) +# define SSL_get_cipher_version(s) \ + SSL_CIPHER_get_version(SSL_get_current_cipher(s)) +# define SSL_get_cipher_name(s) \ + SSL_CIPHER_get_name(SSL_get_current_cipher(s)) +# define SSL_get_time(a) SSL_SESSION_get_time(a) +# define SSL_set_time(a,b) SSL_SESSION_set_time((a),(b)) +# define SSL_get_timeout(a) SSL_SESSION_get_timeout(a) +# define SSL_set_timeout(a,b) SSL_SESSION_set_timeout((a),(b)) + +# define d2i_SSL_SESSION_bio(bp,s_id) ASN1_d2i_bio_of(SSL_SESSION,SSL_SESSION_new,d2i_SSL_SESSION,bp,s_id) +# define i2d_SSL_SESSION_bio(bp,s_id) ASN1_i2d_bio_of(SSL_SESSION,i2d_SSL_SESSION,bp,s_id) + +DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) +# define SSL_AD_REASON_OFFSET 1000/* offset to get SSL_R_... value + * from SSL_AD_... */ +/* These alert types are for SSLv3 and TLSv1 */ +# define SSL_AD_CLOSE_NOTIFY SSL3_AD_CLOSE_NOTIFY +/* fatal */ +# define SSL_AD_UNEXPECTED_MESSAGE SSL3_AD_UNEXPECTED_MESSAGE +/* fatal */ +# define SSL_AD_BAD_RECORD_MAC SSL3_AD_BAD_RECORD_MAC +# define SSL_AD_DECRYPTION_FAILED TLS1_AD_DECRYPTION_FAILED +# define SSL_AD_RECORD_OVERFLOW TLS1_AD_RECORD_OVERFLOW +/* fatal */ +# define SSL_AD_DECOMPRESSION_FAILURE SSL3_AD_DECOMPRESSION_FAILURE +/* fatal */ +# define SSL_AD_HANDSHAKE_FAILURE SSL3_AD_HANDSHAKE_FAILURE +/* Not for TLS */ +# define SSL_AD_NO_CERTIFICATE SSL3_AD_NO_CERTIFICATE +# define SSL_AD_BAD_CERTIFICATE SSL3_AD_BAD_CERTIFICATE +# define SSL_AD_UNSUPPORTED_CERTIFICATE SSL3_AD_UNSUPPORTED_CERTIFICATE +# define SSL_AD_CERTIFICATE_REVOKED SSL3_AD_CERTIFICATE_REVOKED +# define SSL_AD_CERTIFICATE_EXPIRED SSL3_AD_CERTIFICATE_EXPIRED +# define SSL_AD_CERTIFICATE_UNKNOWN SSL3_AD_CERTIFICATE_UNKNOWN +/* fatal */ +# define SSL_AD_ILLEGAL_PARAMETER SSL3_AD_ILLEGAL_PARAMETER +/* fatal */ +# define SSL_AD_UNKNOWN_CA TLS1_AD_UNKNOWN_CA +/* fatal */ +# define SSL_AD_ACCESS_DENIED TLS1_AD_ACCESS_DENIED +/* fatal */ +# define SSL_AD_DECODE_ERROR TLS1_AD_DECODE_ERROR +# define SSL_AD_DECRYPT_ERROR TLS1_AD_DECRYPT_ERROR +/* fatal */ +# define SSL_AD_EXPORT_RESTRICTION TLS1_AD_EXPORT_RESTRICTION +/* fatal */ +# define SSL_AD_PROTOCOL_VERSION TLS1_AD_PROTOCOL_VERSION +/* fatal */ +# define SSL_AD_INSUFFICIENT_SECURITY TLS1_AD_INSUFFICIENT_SECURITY +/* fatal */ +# define SSL_AD_INTERNAL_ERROR TLS1_AD_INTERNAL_ERROR +# define SSL_AD_USER_CANCELLED TLS1_AD_USER_CANCELLED +# define SSL_AD_NO_RENEGOTIATION TLS1_AD_NO_RENEGOTIATION +# define SSL_AD_MISSING_EXTENSION TLS13_AD_MISSING_EXTENSION +# define SSL_AD_CERTIFICATE_REQUIRED TLS13_AD_CERTIFICATE_REQUIRED +# define SSL_AD_UNSUPPORTED_EXTENSION TLS1_AD_UNSUPPORTED_EXTENSION +# define SSL_AD_CERTIFICATE_UNOBTAINABLE TLS1_AD_CERTIFICATE_UNOBTAINABLE +# define SSL_AD_UNRECOGNIZED_NAME TLS1_AD_UNRECOGNIZED_NAME +# define SSL_AD_BAD_CERTIFICATE_STATUS_RESPONSE TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE +# define SSL_AD_BAD_CERTIFICATE_HASH_VALUE TLS1_AD_BAD_CERTIFICATE_HASH_VALUE +/* fatal */ +# define SSL_AD_UNKNOWN_PSK_IDENTITY TLS1_AD_UNKNOWN_PSK_IDENTITY +/* fatal */ +# define SSL_AD_INAPPROPRIATE_FALLBACK TLS1_AD_INAPPROPRIATE_FALLBACK +# define SSL_AD_NO_APPLICATION_PROTOCOL TLS1_AD_NO_APPLICATION_PROTOCOL +# define SSL_ERROR_NONE 0 +# define SSL_ERROR_SSL 1 +# define SSL_ERROR_WANT_READ 2 +# define SSL_ERROR_WANT_WRITE 3 +# define SSL_ERROR_WANT_X509_LOOKUP 4 +# define SSL_ERROR_SYSCALL 5/* look at error stack/return + * value/errno */ +# define SSL_ERROR_ZERO_RETURN 6 +# define SSL_ERROR_WANT_CONNECT 7 +# define SSL_ERROR_WANT_ACCEPT 8 +# define SSL_ERROR_WANT_ASYNC 9 +# define SSL_ERROR_WANT_ASYNC_JOB 10 +# define SSL_ERROR_WANT_CLIENT_HELLO_CB 11 +# define SSL_CTRL_SET_TMP_DH 3 +# define SSL_CTRL_SET_TMP_ECDH 4 +# define SSL_CTRL_SET_TMP_DH_CB 6 +# define SSL_CTRL_GET_CLIENT_CERT_REQUEST 9 +# define SSL_CTRL_GET_NUM_RENEGOTIATIONS 10 +# define SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS 11 +# define SSL_CTRL_GET_TOTAL_RENEGOTIATIONS 12 +# define SSL_CTRL_GET_FLAGS 13 +# define SSL_CTRL_EXTRA_CHAIN_CERT 14 +# define SSL_CTRL_SET_MSG_CALLBACK 15 +# define SSL_CTRL_SET_MSG_CALLBACK_ARG 16 +/* only applies to datagram connections */ +# define SSL_CTRL_SET_MTU 17 +/* Stats */ +# define SSL_CTRL_SESS_NUMBER 20 +# define SSL_CTRL_SESS_CONNECT 21 +# define SSL_CTRL_SESS_CONNECT_GOOD 22 +# define SSL_CTRL_SESS_CONNECT_RENEGOTIATE 23 +# define SSL_CTRL_SESS_ACCEPT 24 +# define SSL_CTRL_SESS_ACCEPT_GOOD 25 +# define SSL_CTRL_SESS_ACCEPT_RENEGOTIATE 26 +# define SSL_CTRL_SESS_HIT 27 +# define SSL_CTRL_SESS_CB_HIT 28 +# define SSL_CTRL_SESS_MISSES 29 +# define SSL_CTRL_SESS_TIMEOUTS 30 +# define SSL_CTRL_SESS_CACHE_FULL 31 +# define SSL_CTRL_MODE 33 +# define SSL_CTRL_GET_READ_AHEAD 40 +# define SSL_CTRL_SET_READ_AHEAD 41 +# define SSL_CTRL_SET_SESS_CACHE_SIZE 42 +# define SSL_CTRL_GET_SESS_CACHE_SIZE 43 +# define SSL_CTRL_SET_SESS_CACHE_MODE 44 +# define SSL_CTRL_GET_SESS_CACHE_MODE 45 +# define SSL_CTRL_GET_MAX_CERT_LIST 50 +# define SSL_CTRL_SET_MAX_CERT_LIST 51 +# define SSL_CTRL_SET_MAX_SEND_FRAGMENT 52 +/* see tls1.h for macros based on these */ +# define SSL_CTRL_SET_TLSEXT_SERVERNAME_CB 53 +# define SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG 54 +# define SSL_CTRL_SET_TLSEXT_HOSTNAME 55 +# define SSL_CTRL_SET_TLSEXT_DEBUG_CB 56 +# define SSL_CTRL_SET_TLSEXT_DEBUG_ARG 57 +# define SSL_CTRL_GET_TLSEXT_TICKET_KEYS 58 +# define SSL_CTRL_SET_TLSEXT_TICKET_KEYS 59 +/*# define SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT 60 */ +/*# define SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB 61 */ +/*# define SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB_ARG 62 */ +# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB 63 +# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG 64 +# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE 65 +# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_EXTS 66 +# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_EXTS 67 +# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_IDS 68 +# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_IDS 69 +# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP 70 +# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP 71 +# define SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB 72 +# define SSL_CTRL_SET_TLS_EXT_SRP_USERNAME_CB 75 +# define SSL_CTRL_SET_SRP_VERIFY_PARAM_CB 76 +# define SSL_CTRL_SET_SRP_GIVE_CLIENT_PWD_CB 77 +# define SSL_CTRL_SET_SRP_ARG 78 +# define SSL_CTRL_SET_TLS_EXT_SRP_USERNAME 79 +# define SSL_CTRL_SET_TLS_EXT_SRP_STRENGTH 80 +# define SSL_CTRL_SET_TLS_EXT_SRP_PASSWORD 81 +# ifndef OPENSSL_NO_HEARTBEATS +# define SSL_CTRL_DTLS_EXT_SEND_HEARTBEAT 85 +# define SSL_CTRL_GET_DTLS_EXT_HEARTBEAT_PENDING 86 +# define SSL_CTRL_SET_DTLS_EXT_HEARTBEAT_NO_REQUESTS 87 +# endif +# define DTLS_CTRL_GET_TIMEOUT 73 +# define DTLS_CTRL_HANDLE_TIMEOUT 74 +# define SSL_CTRL_GET_RI_SUPPORT 76 +# define SSL_CTRL_CLEAR_MODE 78 +# define SSL_CTRL_SET_NOT_RESUMABLE_SESS_CB 79 +# define SSL_CTRL_GET_EXTRA_CHAIN_CERTS 82 +# define SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS 83 +# define SSL_CTRL_CHAIN 88 +# define SSL_CTRL_CHAIN_CERT 89 +# define SSL_CTRL_GET_GROUPS 90 +# define SSL_CTRL_SET_GROUPS 91 +# define SSL_CTRL_SET_GROUPS_LIST 92 +# define SSL_CTRL_GET_SHARED_GROUP 93 +# define SSL_CTRL_SET_SIGALGS 97 +# define SSL_CTRL_SET_SIGALGS_LIST 98 +# define SSL_CTRL_CERT_FLAGS 99 +# define SSL_CTRL_CLEAR_CERT_FLAGS 100 +# define SSL_CTRL_SET_CLIENT_SIGALGS 101 +# define SSL_CTRL_SET_CLIENT_SIGALGS_LIST 102 +# define SSL_CTRL_GET_CLIENT_CERT_TYPES 103 +# define SSL_CTRL_SET_CLIENT_CERT_TYPES 104 +# define SSL_CTRL_BUILD_CERT_CHAIN 105 +# define SSL_CTRL_SET_VERIFY_CERT_STORE 106 +# define SSL_CTRL_SET_CHAIN_CERT_STORE 107 +# define SSL_CTRL_GET_PEER_SIGNATURE_NID 108 +# define SSL_CTRL_GET_PEER_TMP_KEY 109 +# define SSL_CTRL_GET_RAW_CIPHERLIST 110 +# define SSL_CTRL_GET_EC_POINT_FORMATS 111 +# define SSL_CTRL_GET_CHAIN_CERTS 115 +# define SSL_CTRL_SELECT_CURRENT_CERT 116 +# define SSL_CTRL_SET_CURRENT_CERT 117 +# define SSL_CTRL_SET_DH_AUTO 118 +# define DTLS_CTRL_SET_LINK_MTU 120 +# define DTLS_CTRL_GET_LINK_MIN_MTU 121 +# define SSL_CTRL_GET_EXTMS_SUPPORT 122 +# define SSL_CTRL_SET_MIN_PROTO_VERSION 123 +# define SSL_CTRL_SET_MAX_PROTO_VERSION 124 +# define SSL_CTRL_SET_SPLIT_SEND_FRAGMENT 125 +# define SSL_CTRL_SET_MAX_PIPELINES 126 +# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_TYPE 127 +# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_CB 128 +# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_CB_ARG 129 +# define SSL_CTRL_GET_MIN_PROTO_VERSION 130 +# define SSL_CTRL_GET_MAX_PROTO_VERSION 131 +# define SSL_CTRL_GET_SIGNATURE_NID 132 +# define SSL_CTRL_GET_TMP_KEY 133 +# define SSL_CERT_SET_FIRST 1 +# define SSL_CERT_SET_NEXT 2 +# define SSL_CERT_SET_SERVER 3 +# define DTLSv1_get_timeout(ssl, arg) \ + SSL_ctrl(ssl,DTLS_CTRL_GET_TIMEOUT,0, (void *)(arg)) +# define DTLSv1_handle_timeout(ssl) \ + SSL_ctrl(ssl,DTLS_CTRL_HANDLE_TIMEOUT,0, NULL) +# define SSL_num_renegotiations(ssl) \ + SSL_ctrl((ssl),SSL_CTRL_GET_NUM_RENEGOTIATIONS,0,NULL) +# define SSL_clear_num_renegotiations(ssl) \ + SSL_ctrl((ssl),SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS,0,NULL) +# define SSL_total_renegotiations(ssl) \ + SSL_ctrl((ssl),SSL_CTRL_GET_TOTAL_RENEGOTIATIONS,0,NULL) +# define SSL_CTX_set_tmp_dh(ctx,dh) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_DH,0,(char *)(dh)) +# define SSL_CTX_set_tmp_ecdh(ctx,ecdh) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_ECDH,0,(char *)(ecdh)) +# define SSL_CTX_set_dh_auto(ctx, onoff) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_DH_AUTO,onoff,NULL) +# define SSL_set_dh_auto(s, onoff) \ + SSL_ctrl(s,SSL_CTRL_SET_DH_AUTO,onoff,NULL) +# define SSL_set_tmp_dh(ssl,dh) \ + SSL_ctrl(ssl,SSL_CTRL_SET_TMP_DH,0,(char *)(dh)) +# define SSL_set_tmp_ecdh(ssl,ecdh) \ + SSL_ctrl(ssl,SSL_CTRL_SET_TMP_ECDH,0,(char *)(ecdh)) +# define SSL_CTX_add_extra_chain_cert(ctx,x509) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_EXTRA_CHAIN_CERT,0,(char *)(x509)) +# define SSL_CTX_get_extra_chain_certs(ctx,px509) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_EXTRA_CHAIN_CERTS,0,px509) +# define SSL_CTX_get_extra_chain_certs_only(ctx,px509) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_EXTRA_CHAIN_CERTS,1,px509) +# define SSL_CTX_clear_extra_chain_certs(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS,0,NULL) +# define SSL_CTX_set0_chain(ctx,sk) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN,0,(char *)(sk)) +# define SSL_CTX_set1_chain(ctx,sk) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN,1,(char *)(sk)) +# define SSL_CTX_add0_chain_cert(ctx,x509) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN_CERT,0,(char *)(x509)) +# define SSL_CTX_add1_chain_cert(ctx,x509) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN_CERT,1,(char *)(x509)) +# define SSL_CTX_get0_chain_certs(ctx,px509) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_CHAIN_CERTS,0,px509) +# define SSL_CTX_clear_chain_certs(ctx) \ + SSL_CTX_set0_chain(ctx,NULL) +# define SSL_CTX_build_cert_chain(ctx, flags) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_BUILD_CERT_CHAIN, flags, NULL) +# define SSL_CTX_select_current_cert(ctx,x509) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SELECT_CURRENT_CERT,0,(char *)(x509)) +# define SSL_CTX_set_current_cert(ctx, op) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CURRENT_CERT, op, NULL) +# define SSL_CTX_set0_verify_cert_store(ctx,st) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_VERIFY_CERT_STORE,0,(char *)(st)) +# define SSL_CTX_set1_verify_cert_store(ctx,st) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_VERIFY_CERT_STORE,1,(char *)(st)) +# define SSL_CTX_set0_chain_cert_store(ctx,st) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CHAIN_CERT_STORE,0,(char *)(st)) +# define SSL_CTX_set1_chain_cert_store(ctx,st) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CHAIN_CERT_STORE,1,(char *)(st)) +# define SSL_set0_chain(s,sk) \ + SSL_ctrl(s,SSL_CTRL_CHAIN,0,(char *)(sk)) +# define SSL_set1_chain(s,sk) \ + SSL_ctrl(s,SSL_CTRL_CHAIN,1,(char *)(sk)) +# define SSL_add0_chain_cert(s,x509) \ + SSL_ctrl(s,SSL_CTRL_CHAIN_CERT,0,(char *)(x509)) +# define SSL_add1_chain_cert(s,x509) \ + SSL_ctrl(s,SSL_CTRL_CHAIN_CERT,1,(char *)(x509)) +# define SSL_get0_chain_certs(s,px509) \ + SSL_ctrl(s,SSL_CTRL_GET_CHAIN_CERTS,0,px509) +# define SSL_clear_chain_certs(s) \ + SSL_set0_chain(s,NULL) +# define SSL_build_cert_chain(s, flags) \ + SSL_ctrl(s,SSL_CTRL_BUILD_CERT_CHAIN, flags, NULL) +# define SSL_select_current_cert(s,x509) \ + SSL_ctrl(s,SSL_CTRL_SELECT_CURRENT_CERT,0,(char *)(x509)) +# define SSL_set_current_cert(s,op) \ + SSL_ctrl(s,SSL_CTRL_SET_CURRENT_CERT, op, NULL) +# define SSL_set0_verify_cert_store(s,st) \ + SSL_ctrl(s,SSL_CTRL_SET_VERIFY_CERT_STORE,0,(char *)(st)) +# define SSL_set1_verify_cert_store(s,st) \ + SSL_ctrl(s,SSL_CTRL_SET_VERIFY_CERT_STORE,1,(char *)(st)) +# define SSL_set0_chain_cert_store(s,st) \ + SSL_ctrl(s,SSL_CTRL_SET_CHAIN_CERT_STORE,0,(char *)(st)) +# define SSL_set1_chain_cert_store(s,st) \ + SSL_ctrl(s,SSL_CTRL_SET_CHAIN_CERT_STORE,1,(char *)(st)) +# define SSL_get1_groups(s, glist) \ + SSL_ctrl(s,SSL_CTRL_GET_GROUPS,0,(int*)(glist)) +# define SSL_CTX_set1_groups(ctx, glist, glistlen) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_GROUPS,glistlen,(char *)(glist)) +# define SSL_CTX_set1_groups_list(ctx, s) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_GROUPS_LIST,0,(char *)(s)) +# define SSL_set1_groups(s, glist, glistlen) \ + SSL_ctrl(s,SSL_CTRL_SET_GROUPS,glistlen,(char *)(glist)) +# define SSL_set1_groups_list(s, str) \ + SSL_ctrl(s,SSL_CTRL_SET_GROUPS_LIST,0,(char *)(str)) +# define SSL_get_shared_group(s, n) \ + SSL_ctrl(s,SSL_CTRL_GET_SHARED_GROUP,n,NULL) +# define SSL_CTX_set1_sigalgs(ctx, slist, slistlen) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SIGALGS,slistlen,(int *)(slist)) +# define SSL_CTX_set1_sigalgs_list(ctx, s) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SIGALGS_LIST,0,(char *)(s)) +# define SSL_set1_sigalgs(s, slist, slistlen) \ + SSL_ctrl(s,SSL_CTRL_SET_SIGALGS,slistlen,(int *)(slist)) +# define SSL_set1_sigalgs_list(s, str) \ + SSL_ctrl(s,SSL_CTRL_SET_SIGALGS_LIST,0,(char *)(str)) +# define SSL_CTX_set1_client_sigalgs(ctx, slist, slistlen) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CLIENT_SIGALGS,slistlen,(int *)(slist)) +# define SSL_CTX_set1_client_sigalgs_list(ctx, s) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CLIENT_SIGALGS_LIST,0,(char *)(s)) +# define SSL_set1_client_sigalgs(s, slist, slistlen) \ + SSL_ctrl(s,SSL_CTRL_SET_CLIENT_SIGALGS,slistlen,(int *)(slist)) +# define SSL_set1_client_sigalgs_list(s, str) \ + SSL_ctrl(s,SSL_CTRL_SET_CLIENT_SIGALGS_LIST,0,(char *)(str)) +# define SSL_get0_certificate_types(s, clist) \ + SSL_ctrl(s, SSL_CTRL_GET_CLIENT_CERT_TYPES, 0, (char *)(clist)) +# define SSL_CTX_set1_client_certificate_types(ctx, clist, clistlen) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CLIENT_CERT_TYPES,clistlen, \ + (char *)(clist)) +# define SSL_set1_client_certificate_types(s, clist, clistlen) \ + SSL_ctrl(s,SSL_CTRL_SET_CLIENT_CERT_TYPES,clistlen,(char *)(clist)) +# define SSL_get_signature_nid(s, pn) \ + SSL_ctrl(s,SSL_CTRL_GET_SIGNATURE_NID,0,pn) +# define SSL_get_peer_signature_nid(s, pn) \ + SSL_ctrl(s,SSL_CTRL_GET_PEER_SIGNATURE_NID,0,pn) +# define SSL_get_peer_tmp_key(s, pk) \ + SSL_ctrl(s,SSL_CTRL_GET_PEER_TMP_KEY,0,pk) +# define SSL_get_tmp_key(s, pk) \ + SSL_ctrl(s,SSL_CTRL_GET_TMP_KEY,0,pk) +# define SSL_get0_raw_cipherlist(s, plst) \ + SSL_ctrl(s,SSL_CTRL_GET_RAW_CIPHERLIST,0,plst) +# define SSL_get0_ec_point_formats(s, plst) \ + SSL_ctrl(s,SSL_CTRL_GET_EC_POINT_FORMATS,0,plst) +# define SSL_CTX_set_min_proto_version(ctx, version) \ + SSL_CTX_ctrl(ctx, SSL_CTRL_SET_MIN_PROTO_VERSION, version, NULL) +# define SSL_CTX_set_max_proto_version(ctx, version) \ + SSL_CTX_ctrl(ctx, SSL_CTRL_SET_MAX_PROTO_VERSION, version, NULL) +# define SSL_CTX_get_min_proto_version(ctx) \ + SSL_CTX_ctrl(ctx, SSL_CTRL_GET_MIN_PROTO_VERSION, 0, NULL) +# define SSL_CTX_get_max_proto_version(ctx) \ + SSL_CTX_ctrl(ctx, SSL_CTRL_GET_MAX_PROTO_VERSION, 0, NULL) +# define SSL_set_min_proto_version(s, version) \ + SSL_ctrl(s, SSL_CTRL_SET_MIN_PROTO_VERSION, version, NULL) +# define SSL_set_max_proto_version(s, version) \ + SSL_ctrl(s, SSL_CTRL_SET_MAX_PROTO_VERSION, version, NULL) +# define SSL_get_min_proto_version(s) \ + SSL_ctrl(s, SSL_CTRL_GET_MIN_PROTO_VERSION, 0, NULL) +# define SSL_get_max_proto_version(s) \ + SSL_ctrl(s, SSL_CTRL_GET_MAX_PROTO_VERSION, 0, NULL) + +/* Backwards compatibility, original 1.1.0 names */ +# define SSL_CTRL_GET_SERVER_TMP_KEY \ + SSL_CTRL_GET_PEER_TMP_KEY +# define SSL_get_server_tmp_key(s, pk) \ + SSL_get_peer_tmp_key(s, pk) + +/* + * The following symbol names are old and obsolete. They are kept + * for compatibility reasons only and should not be used anymore. + */ +# define SSL_CTRL_GET_CURVES SSL_CTRL_GET_GROUPS +# define SSL_CTRL_SET_CURVES SSL_CTRL_SET_GROUPS +# define SSL_CTRL_SET_CURVES_LIST SSL_CTRL_SET_GROUPS_LIST +# define SSL_CTRL_GET_SHARED_CURVE SSL_CTRL_GET_SHARED_GROUP + +# define SSL_get1_curves SSL_get1_groups +# define SSL_CTX_set1_curves SSL_CTX_set1_groups +# define SSL_CTX_set1_curves_list SSL_CTX_set1_groups_list +# define SSL_set1_curves SSL_set1_groups +# define SSL_set1_curves_list SSL_set1_groups_list +# define SSL_get_shared_curve SSL_get_shared_group + + +# if OPENSSL_API_COMPAT < 0x10100000L +/* Provide some compatibility macros for removed functionality. */ +# define SSL_CTX_need_tmp_RSA(ctx) 0 +# define SSL_CTX_set_tmp_rsa(ctx,rsa) 1 +# define SSL_need_tmp_RSA(ssl) 0 +# define SSL_set_tmp_rsa(ssl,rsa) 1 +# define SSL_CTX_set_ecdh_auto(dummy, onoff) ((onoff) != 0) +# define SSL_set_ecdh_auto(dummy, onoff) ((onoff) != 0) +/* + * We "pretend" to call the callback to avoid warnings about unused static + * functions. + */ +# define SSL_CTX_set_tmp_rsa_callback(ctx, cb) while(0) (cb)(NULL, 0, 0) +# define SSL_set_tmp_rsa_callback(ssl, cb) while(0) (cb)(NULL, 0, 0) +# endif +__owur const BIO_METHOD *BIO_f_ssl(void); +__owur BIO *BIO_new_ssl(SSL_CTX *ctx, int client); +__owur BIO *BIO_new_ssl_connect(SSL_CTX *ctx); +__owur BIO *BIO_new_buffer_ssl_connect(SSL_CTX *ctx); +__owur int BIO_ssl_copy_session_id(BIO *to, BIO *from); +void BIO_ssl_shutdown(BIO *ssl_bio); + +__owur int SSL_CTX_set_cipher_list(SSL_CTX *, const char *str); +__owur SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth); +int SSL_CTX_up_ref(SSL_CTX *ctx); +void SSL_CTX_free(SSL_CTX *); +__owur long SSL_CTX_set_timeout(SSL_CTX *ctx, long t); +__owur long SSL_CTX_get_timeout(const SSL_CTX *ctx); +__owur X509_STORE *SSL_CTX_get_cert_store(const SSL_CTX *); +void SSL_CTX_set_cert_store(SSL_CTX *, X509_STORE *); +void SSL_CTX_set1_cert_store(SSL_CTX *, X509_STORE *); +__owur int SSL_want(const SSL *s); +__owur int SSL_clear(SSL *s); + +void SSL_CTX_flush_sessions(SSL_CTX *ctx, long tm); + +__owur const SSL_CIPHER *SSL_get_current_cipher(const SSL *s); +__owur const SSL_CIPHER *SSL_get_pending_cipher(const SSL *s); +__owur int SSL_CIPHER_get_bits(const SSL_CIPHER *c, int *alg_bits); +__owur const char *SSL_CIPHER_get_version(const SSL_CIPHER *c); +__owur const char *SSL_CIPHER_get_name(const SSL_CIPHER *c); +__owur const char *SSL_CIPHER_standard_name(const SSL_CIPHER *c); +__owur const char *OPENSSL_cipher_name(const char *rfc_name); +__owur uint32_t SSL_CIPHER_get_id(const SSL_CIPHER *c); +__owur uint16_t SSL_CIPHER_get_protocol_id(const SSL_CIPHER *c); +__owur int SSL_CIPHER_get_kx_nid(const SSL_CIPHER *c); +__owur int SSL_CIPHER_get_auth_nid(const SSL_CIPHER *c); +__owur const EVP_MD *SSL_CIPHER_get_handshake_digest(const SSL_CIPHER *c); +__owur int SSL_CIPHER_is_aead(const SSL_CIPHER *c); + +__owur int SSL_get_fd(const SSL *s); +__owur int SSL_get_rfd(const SSL *s); +__owur int SSL_get_wfd(const SSL *s); +__owur const char *SSL_get_cipher_list(const SSL *s, int n); +__owur char *SSL_get_shared_ciphers(const SSL *s, char *buf, int size); +__owur int SSL_get_read_ahead(const SSL *s); +__owur int SSL_pending(const SSL *s); +__owur int SSL_has_pending(const SSL *s); +# ifndef OPENSSL_NO_SOCK +__owur int SSL_set_fd(SSL *s, int fd); +__owur int SSL_set_rfd(SSL *s, int fd); +__owur int SSL_set_wfd(SSL *s, int fd); +# endif +void SSL_set0_rbio(SSL *s, BIO *rbio); +void SSL_set0_wbio(SSL *s, BIO *wbio); +void SSL_set_bio(SSL *s, BIO *rbio, BIO *wbio); +__owur BIO *SSL_get_rbio(const SSL *s); +__owur BIO *SSL_get_wbio(const SSL *s); +__owur int SSL_set_cipher_list(SSL *s, const char *str); +__owur int SSL_CTX_set_ciphersuites(SSL_CTX *ctx, const char *str); +__owur int SSL_set_ciphersuites(SSL *s, const char *str); +void SSL_set_read_ahead(SSL *s, int yes); +__owur int SSL_get_verify_mode(const SSL *s); +__owur int SSL_get_verify_depth(const SSL *s); +__owur SSL_verify_cb SSL_get_verify_callback(const SSL *s); +void SSL_set_verify(SSL *s, int mode, SSL_verify_cb callback); +void SSL_set_verify_depth(SSL *s, int depth); +void SSL_set_cert_cb(SSL *s, int (*cb) (SSL *ssl, void *arg), void *arg); +# ifndef OPENSSL_NO_RSA +__owur int SSL_use_RSAPrivateKey(SSL *ssl, RSA *rsa); +__owur int SSL_use_RSAPrivateKey_ASN1(SSL *ssl, const unsigned char *d, + long len); +# endif +__owur int SSL_use_PrivateKey(SSL *ssl, EVP_PKEY *pkey); +__owur int SSL_use_PrivateKey_ASN1(int pk, SSL *ssl, const unsigned char *d, + long len); +__owur int SSL_use_certificate(SSL *ssl, X509 *x); +__owur int SSL_use_certificate_ASN1(SSL *ssl, const unsigned char *d, int len); +__owur int SSL_use_cert_and_key(SSL *ssl, X509 *x509, EVP_PKEY *privatekey, + STACK_OF(X509) *chain, int override); + + +/* serverinfo file format versions */ +# define SSL_SERVERINFOV1 1 +# define SSL_SERVERINFOV2 2 + +/* Set serverinfo data for the current active cert. */ +__owur int SSL_CTX_use_serverinfo(SSL_CTX *ctx, const unsigned char *serverinfo, + size_t serverinfo_length); +__owur int SSL_CTX_use_serverinfo_ex(SSL_CTX *ctx, unsigned int version, + const unsigned char *serverinfo, + size_t serverinfo_length); +__owur int SSL_CTX_use_serverinfo_file(SSL_CTX *ctx, const char *file); + +#ifndef OPENSSL_NO_RSA +__owur int SSL_use_RSAPrivateKey_file(SSL *ssl, const char *file, int type); +#endif + +__owur int SSL_use_PrivateKey_file(SSL *ssl, const char *file, int type); +__owur int SSL_use_certificate_file(SSL *ssl, const char *file, int type); + +#ifndef OPENSSL_NO_RSA +__owur int SSL_CTX_use_RSAPrivateKey_file(SSL_CTX *ctx, const char *file, + int type); +#endif +__owur int SSL_CTX_use_PrivateKey_file(SSL_CTX *ctx, const char *file, + int type); +__owur int SSL_CTX_use_certificate_file(SSL_CTX *ctx, const char *file, + int type); +/* PEM type */ +__owur int SSL_CTX_use_certificate_chain_file(SSL_CTX *ctx, const char *file); +__owur int SSL_use_certificate_chain_file(SSL *ssl, const char *file); +__owur STACK_OF(X509_NAME) *SSL_load_client_CA_file(const char *file); +__owur int SSL_add_file_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs, + const char *file); +int SSL_add_dir_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs, + const char *dir); + +# if OPENSSL_API_COMPAT < 0x10100000L +# define SSL_load_error_strings() \ + OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS \ + | OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL) +# endif + +__owur const char *SSL_state_string(const SSL *s); +__owur const char *SSL_rstate_string(const SSL *s); +__owur const char *SSL_state_string_long(const SSL *s); +__owur const char *SSL_rstate_string_long(const SSL *s); +__owur long SSL_SESSION_get_time(const SSL_SESSION *s); +__owur long SSL_SESSION_set_time(SSL_SESSION *s, long t); +__owur long SSL_SESSION_get_timeout(const SSL_SESSION *s); +__owur long SSL_SESSION_set_timeout(SSL_SESSION *s, long t); +__owur int SSL_SESSION_get_protocol_version(const SSL_SESSION *s); +__owur int SSL_SESSION_set_protocol_version(SSL_SESSION *s, int version); + +__owur const char *SSL_SESSION_get0_hostname(const SSL_SESSION *s); +__owur int SSL_SESSION_set1_hostname(SSL_SESSION *s, const char *hostname); +void SSL_SESSION_get0_alpn_selected(const SSL_SESSION *s, + const unsigned char **alpn, + size_t *len); +__owur int SSL_SESSION_set1_alpn_selected(SSL_SESSION *s, + const unsigned char *alpn, + size_t len); +__owur const SSL_CIPHER *SSL_SESSION_get0_cipher(const SSL_SESSION *s); +__owur int SSL_SESSION_set_cipher(SSL_SESSION *s, const SSL_CIPHER *cipher); +__owur int SSL_SESSION_has_ticket(const SSL_SESSION *s); +__owur unsigned long SSL_SESSION_get_ticket_lifetime_hint(const SSL_SESSION *s); +void SSL_SESSION_get0_ticket(const SSL_SESSION *s, const unsigned char **tick, + size_t *len); +__owur uint32_t SSL_SESSION_get_max_early_data(const SSL_SESSION *s); +__owur int SSL_SESSION_set_max_early_data(SSL_SESSION *s, + uint32_t max_early_data); +__owur int SSL_copy_session_id(SSL *to, const SSL *from); +__owur X509 *SSL_SESSION_get0_peer(SSL_SESSION *s); +__owur int SSL_SESSION_set1_id_context(SSL_SESSION *s, + const unsigned char *sid_ctx, + unsigned int sid_ctx_len); +__owur int SSL_SESSION_set1_id(SSL_SESSION *s, const unsigned char *sid, + unsigned int sid_len); +__owur int SSL_SESSION_is_resumable(const SSL_SESSION *s); + +__owur SSL_SESSION *SSL_SESSION_new(void); +__owur SSL_SESSION *SSL_SESSION_dup(SSL_SESSION *src); +const unsigned char *SSL_SESSION_get_id(const SSL_SESSION *s, + unsigned int *len); +const unsigned char *SSL_SESSION_get0_id_context(const SSL_SESSION *s, + unsigned int *len); +__owur unsigned int SSL_SESSION_get_compress_id(const SSL_SESSION *s); +# ifndef OPENSSL_NO_STDIO +int SSL_SESSION_print_fp(FILE *fp, const SSL_SESSION *ses); +# endif +int SSL_SESSION_print(BIO *fp, const SSL_SESSION *ses); +int SSL_SESSION_print_keylog(BIO *bp, const SSL_SESSION *x); +int SSL_SESSION_up_ref(SSL_SESSION *ses); +void SSL_SESSION_free(SSL_SESSION *ses); +__owur int i2d_SSL_SESSION(SSL_SESSION *in, unsigned char **pp); +__owur int SSL_set_session(SSL *to, SSL_SESSION *session); +int SSL_CTX_add_session(SSL_CTX *ctx, SSL_SESSION *session); +int SSL_CTX_remove_session(SSL_CTX *ctx, SSL_SESSION *session); +__owur int SSL_CTX_set_generate_session_id(SSL_CTX *ctx, GEN_SESSION_CB cb); +__owur int SSL_set_generate_session_id(SSL *s, GEN_SESSION_CB cb); +__owur int SSL_has_matching_session_id(const SSL *s, + const unsigned char *id, + unsigned int id_len); +SSL_SESSION *d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, + long length); + +# ifdef HEADER_X509_H +__owur X509 *SSL_get_peer_certificate(const SSL *s); +# endif + +__owur STACK_OF(X509) *SSL_get_peer_cert_chain(const SSL *s); + +__owur int SSL_CTX_get_verify_mode(const SSL_CTX *ctx); +__owur int SSL_CTX_get_verify_depth(const SSL_CTX *ctx); +__owur SSL_verify_cb SSL_CTX_get_verify_callback(const SSL_CTX *ctx); +void SSL_CTX_set_verify(SSL_CTX *ctx, int mode, SSL_verify_cb callback); +void SSL_CTX_set_verify_depth(SSL_CTX *ctx, int depth); +void SSL_CTX_set_cert_verify_callback(SSL_CTX *ctx, + int (*cb) (X509_STORE_CTX *, void *), + void *arg); +void SSL_CTX_set_cert_cb(SSL_CTX *c, int (*cb) (SSL *ssl, void *arg), + void *arg); +# ifndef OPENSSL_NO_RSA +__owur int SSL_CTX_use_RSAPrivateKey(SSL_CTX *ctx, RSA *rsa); +__owur int SSL_CTX_use_RSAPrivateKey_ASN1(SSL_CTX *ctx, const unsigned char *d, + long len); +# endif +__owur int SSL_CTX_use_PrivateKey(SSL_CTX *ctx, EVP_PKEY *pkey); +__owur int SSL_CTX_use_PrivateKey_ASN1(int pk, SSL_CTX *ctx, + const unsigned char *d, long len); +__owur int SSL_CTX_use_certificate(SSL_CTX *ctx, X509 *x); +__owur int SSL_CTX_use_certificate_ASN1(SSL_CTX *ctx, int len, + const unsigned char *d); +__owur int SSL_CTX_use_cert_and_key(SSL_CTX *ctx, X509 *x509, EVP_PKEY *privatekey, + STACK_OF(X509) *chain, int override); + +void SSL_CTX_set_default_passwd_cb(SSL_CTX *ctx, pem_password_cb *cb); +void SSL_CTX_set_default_passwd_cb_userdata(SSL_CTX *ctx, void *u); +pem_password_cb *SSL_CTX_get_default_passwd_cb(SSL_CTX *ctx); +void *SSL_CTX_get_default_passwd_cb_userdata(SSL_CTX *ctx); +void SSL_set_default_passwd_cb(SSL *s, pem_password_cb *cb); +void SSL_set_default_passwd_cb_userdata(SSL *s, void *u); +pem_password_cb *SSL_get_default_passwd_cb(SSL *s); +void *SSL_get_default_passwd_cb_userdata(SSL *s); + +__owur int SSL_CTX_check_private_key(const SSL_CTX *ctx); +__owur int SSL_check_private_key(const SSL *ctx); + +__owur int SSL_CTX_set_session_id_context(SSL_CTX *ctx, + const unsigned char *sid_ctx, + unsigned int sid_ctx_len); + +SSL *SSL_new(SSL_CTX *ctx); +int SSL_up_ref(SSL *s); +int SSL_is_dtls(const SSL *s); +__owur int SSL_set_session_id_context(SSL *ssl, const unsigned char *sid_ctx, + unsigned int sid_ctx_len); + +__owur int SSL_CTX_set_purpose(SSL_CTX *ctx, int purpose); +__owur int SSL_set_purpose(SSL *ssl, int purpose); +__owur int SSL_CTX_set_trust(SSL_CTX *ctx, int trust); +__owur int SSL_set_trust(SSL *ssl, int trust); + +__owur int SSL_set1_host(SSL *s, const char *hostname); +__owur int SSL_add1_host(SSL *s, const char *hostname); +__owur const char *SSL_get0_peername(SSL *s); +void SSL_set_hostflags(SSL *s, unsigned int flags); + +__owur int SSL_CTX_dane_enable(SSL_CTX *ctx); +__owur int SSL_CTX_dane_mtype_set(SSL_CTX *ctx, const EVP_MD *md, + uint8_t mtype, uint8_t ord); +__owur int SSL_dane_enable(SSL *s, const char *basedomain); +__owur int SSL_dane_tlsa_add(SSL *s, uint8_t usage, uint8_t selector, + uint8_t mtype, unsigned const char *data, size_t dlen); +__owur int SSL_get0_dane_authority(SSL *s, X509 **mcert, EVP_PKEY **mspki); +__owur int SSL_get0_dane_tlsa(SSL *s, uint8_t *usage, uint8_t *selector, + uint8_t *mtype, unsigned const char **data, + size_t *dlen); +/* + * Bridge opacity barrier between libcrypt and libssl, also needed to support + * offline testing in test/danetest.c + */ +SSL_DANE *SSL_get0_dane(SSL *ssl); +/* + * DANE flags + */ +unsigned long SSL_CTX_dane_set_flags(SSL_CTX *ctx, unsigned long flags); +unsigned long SSL_CTX_dane_clear_flags(SSL_CTX *ctx, unsigned long flags); +unsigned long SSL_dane_set_flags(SSL *ssl, unsigned long flags); +unsigned long SSL_dane_clear_flags(SSL *ssl, unsigned long flags); + +__owur int SSL_CTX_set1_param(SSL_CTX *ctx, X509_VERIFY_PARAM *vpm); +__owur int SSL_set1_param(SSL *ssl, X509_VERIFY_PARAM *vpm); + +__owur X509_VERIFY_PARAM *SSL_CTX_get0_param(SSL_CTX *ctx); +__owur X509_VERIFY_PARAM *SSL_get0_param(SSL *ssl); + +# ifndef OPENSSL_NO_SRP +int SSL_CTX_set_srp_username(SSL_CTX *ctx, char *name); +int SSL_CTX_set_srp_password(SSL_CTX *ctx, char *password); +int SSL_CTX_set_srp_strength(SSL_CTX *ctx, int strength); +int SSL_CTX_set_srp_client_pwd_callback(SSL_CTX *ctx, + char *(*cb) (SSL *, void *)); +int SSL_CTX_set_srp_verify_param_callback(SSL_CTX *ctx, + int (*cb) (SSL *, void *)); +int SSL_CTX_set_srp_username_callback(SSL_CTX *ctx, + int (*cb) (SSL *, int *, void *)); +int SSL_CTX_set_srp_cb_arg(SSL_CTX *ctx, void *arg); + +int SSL_set_srp_server_param(SSL *s, const BIGNUM *N, const BIGNUM *g, + BIGNUM *sa, BIGNUM *v, char *info); +int SSL_set_srp_server_param_pw(SSL *s, const char *user, const char *pass, + const char *grp); + +__owur BIGNUM *SSL_get_srp_g(SSL *s); +__owur BIGNUM *SSL_get_srp_N(SSL *s); + +__owur char *SSL_get_srp_username(SSL *s); +__owur char *SSL_get_srp_userinfo(SSL *s); +# endif + +/* + * ClientHello callback and helpers. + */ + +# define SSL_CLIENT_HELLO_SUCCESS 1 +# define SSL_CLIENT_HELLO_ERROR 0 +# define SSL_CLIENT_HELLO_RETRY (-1) + +typedef int (*SSL_client_hello_cb_fn) (SSL *s, int *al, void *arg); +void SSL_CTX_set_client_hello_cb(SSL_CTX *c, SSL_client_hello_cb_fn cb, + void *arg); +int SSL_client_hello_isv2(SSL *s); +unsigned int SSL_client_hello_get0_legacy_version(SSL *s); +size_t SSL_client_hello_get0_random(SSL *s, const unsigned char **out); +size_t SSL_client_hello_get0_session_id(SSL *s, const unsigned char **out); +size_t SSL_client_hello_get0_ciphers(SSL *s, const unsigned char **out); +size_t SSL_client_hello_get0_compression_methods(SSL *s, + const unsigned char **out); +int SSL_client_hello_get1_extensions_present(SSL *s, int **out, size_t *outlen); +int SSL_client_hello_get0_ext(SSL *s, unsigned int type, + const unsigned char **out, size_t *outlen); + +void SSL_certs_clear(SSL *s); +void SSL_free(SSL *ssl); +# ifdef OSSL_ASYNC_FD +/* + * Windows application developer has to include windows.h to use these. + */ +__owur int SSL_waiting_for_async(SSL *s); +__owur int SSL_get_all_async_fds(SSL *s, OSSL_ASYNC_FD *fds, size_t *numfds); +__owur int SSL_get_changed_async_fds(SSL *s, OSSL_ASYNC_FD *addfd, + size_t *numaddfds, OSSL_ASYNC_FD *delfd, + size_t *numdelfds); +# endif +__owur int SSL_accept(SSL *ssl); +__owur int SSL_stateless(SSL *s); +__owur int SSL_connect(SSL *ssl); +__owur int SSL_read(SSL *ssl, void *buf, int num); +__owur int SSL_read_ex(SSL *ssl, void *buf, size_t num, size_t *readbytes); + +# define SSL_READ_EARLY_DATA_ERROR 0 +# define SSL_READ_EARLY_DATA_SUCCESS 1 +# define SSL_READ_EARLY_DATA_FINISH 2 + +__owur int SSL_read_early_data(SSL *s, void *buf, size_t num, + size_t *readbytes); +__owur int SSL_peek(SSL *ssl, void *buf, int num); +__owur int SSL_peek_ex(SSL *ssl, void *buf, size_t num, size_t *readbytes); +__owur int SSL_write(SSL *ssl, const void *buf, int num); +__owur int SSL_write_ex(SSL *s, const void *buf, size_t num, size_t *written); +__owur int SSL_write_early_data(SSL *s, const void *buf, size_t num, + size_t *written); +long SSL_ctrl(SSL *ssl, int cmd, long larg, void *parg); +long SSL_callback_ctrl(SSL *, int, void (*)(void)); +long SSL_CTX_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg); +long SSL_CTX_callback_ctrl(SSL_CTX *, int, void (*)(void)); + +# define SSL_EARLY_DATA_NOT_SENT 0 +# define SSL_EARLY_DATA_REJECTED 1 +# define SSL_EARLY_DATA_ACCEPTED 2 + +__owur int SSL_get_early_data_status(const SSL *s); + +__owur int SSL_get_error(const SSL *s, int ret_code); +__owur const char *SSL_get_version(const SSL *s); + +/* This sets the 'default' SSL version that SSL_new() will create */ +__owur int SSL_CTX_set_ssl_version(SSL_CTX *ctx, const SSL_METHOD *meth); + +# ifndef OPENSSL_NO_SSL3_METHOD +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *SSLv3_method(void)) /* SSLv3 */ +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *SSLv3_server_method(void)) +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *SSLv3_client_method(void)) +# endif + +#define SSLv23_method TLS_method +#define SSLv23_server_method TLS_server_method +#define SSLv23_client_method TLS_client_method + +/* Negotiate highest available SSL/TLS version */ +__owur const SSL_METHOD *TLS_method(void); +__owur const SSL_METHOD *TLS_server_method(void); +__owur const SSL_METHOD *TLS_client_method(void); + +# ifndef OPENSSL_NO_TLS1_METHOD +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_method(void)) /* TLSv1.0 */ +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_server_method(void)) +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_client_method(void)) +# endif + +# ifndef OPENSSL_NO_TLS1_1_METHOD +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_1_method(void)) /* TLSv1.1 */ +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_1_server_method(void)) +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_1_client_method(void)) +# endif + +# ifndef OPENSSL_NO_TLS1_2_METHOD +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_2_method(void)) /* TLSv1.2 */ +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_2_server_method(void)) +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_2_client_method(void)) +# endif + +# ifndef OPENSSL_NO_DTLS1_METHOD +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_method(void)) /* DTLSv1.0 */ +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_server_method(void)) +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_client_method(void)) +# endif + +# ifndef OPENSSL_NO_DTLS1_2_METHOD +/* DTLSv1.2 */ +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_2_method(void)) +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_2_server_method(void)) +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_2_client_method(void)) +# endif + +__owur const SSL_METHOD *DTLS_method(void); /* DTLS 1.0 and 1.2 */ +__owur const SSL_METHOD *DTLS_server_method(void); /* DTLS 1.0 and 1.2 */ +__owur const SSL_METHOD *DTLS_client_method(void); /* DTLS 1.0 and 1.2 */ + +__owur size_t DTLS_get_data_mtu(const SSL *s); + +__owur STACK_OF(SSL_CIPHER) *SSL_get_ciphers(const SSL *s); +__owur STACK_OF(SSL_CIPHER) *SSL_CTX_get_ciphers(const SSL_CTX *ctx); +__owur STACK_OF(SSL_CIPHER) *SSL_get_client_ciphers(const SSL *s); +__owur STACK_OF(SSL_CIPHER) *SSL_get1_supported_ciphers(SSL *s); + +__owur int SSL_do_handshake(SSL *s); +int SSL_key_update(SSL *s, int updatetype); +int SSL_get_key_update_type(const SSL *s); +int SSL_renegotiate(SSL *s); +int SSL_renegotiate_abbreviated(SSL *s); +__owur int SSL_renegotiate_pending(const SSL *s); +int SSL_shutdown(SSL *s); +__owur int SSL_verify_client_post_handshake(SSL *s); +void SSL_CTX_set_post_handshake_auth(SSL_CTX *ctx, int val); +void SSL_set_post_handshake_auth(SSL *s, int val); + +__owur const SSL_METHOD *SSL_CTX_get_ssl_method(const SSL_CTX *ctx); +__owur const SSL_METHOD *SSL_get_ssl_method(const SSL *s); +__owur int SSL_set_ssl_method(SSL *s, const SSL_METHOD *method); +__owur const char *SSL_alert_type_string_long(int value); +__owur const char *SSL_alert_type_string(int value); +__owur const char *SSL_alert_desc_string_long(int value); +__owur const char *SSL_alert_desc_string(int value); + +void SSL_set0_CA_list(SSL *s, STACK_OF(X509_NAME) *name_list); +void SSL_CTX_set0_CA_list(SSL_CTX *ctx, STACK_OF(X509_NAME) *name_list); +__owur const STACK_OF(X509_NAME) *SSL_get0_CA_list(const SSL *s); +__owur const STACK_OF(X509_NAME) *SSL_CTX_get0_CA_list(const SSL_CTX *ctx); +__owur int SSL_add1_to_CA_list(SSL *ssl, const X509 *x); +__owur int SSL_CTX_add1_to_CA_list(SSL_CTX *ctx, const X509 *x); +__owur const STACK_OF(X509_NAME) *SSL_get0_peer_CA_list(const SSL *s); + +void SSL_set_client_CA_list(SSL *s, STACK_OF(X509_NAME) *name_list); +void SSL_CTX_set_client_CA_list(SSL_CTX *ctx, STACK_OF(X509_NAME) *name_list); +__owur STACK_OF(X509_NAME) *SSL_get_client_CA_list(const SSL *s); +__owur STACK_OF(X509_NAME) *SSL_CTX_get_client_CA_list(const SSL_CTX *s); +__owur int SSL_add_client_CA(SSL *ssl, X509 *x); +__owur int SSL_CTX_add_client_CA(SSL_CTX *ctx, X509 *x); + +void SSL_set_connect_state(SSL *s); +void SSL_set_accept_state(SSL *s); + +__owur long SSL_get_default_timeout(const SSL *s); + +# if OPENSSL_API_COMPAT < 0x10100000L +# define SSL_library_init() OPENSSL_init_ssl(0, NULL) +# endif + +__owur char *SSL_CIPHER_description(const SSL_CIPHER *, char *buf, int size); +__owur STACK_OF(X509_NAME) *SSL_dup_CA_list(const STACK_OF(X509_NAME) *sk); + +__owur SSL *SSL_dup(SSL *ssl); + +__owur X509 *SSL_get_certificate(const SSL *ssl); +/* + * EVP_PKEY + */ +struct evp_pkey_st *SSL_get_privatekey(const SSL *ssl); + +__owur X509 *SSL_CTX_get0_certificate(const SSL_CTX *ctx); +__owur EVP_PKEY *SSL_CTX_get0_privatekey(const SSL_CTX *ctx); + +void SSL_CTX_set_quiet_shutdown(SSL_CTX *ctx, int mode); +__owur int SSL_CTX_get_quiet_shutdown(const SSL_CTX *ctx); +void SSL_set_quiet_shutdown(SSL *ssl, int mode); +__owur int SSL_get_quiet_shutdown(const SSL *ssl); +void SSL_set_shutdown(SSL *ssl, int mode); +__owur int SSL_get_shutdown(const SSL *ssl); +__owur int SSL_version(const SSL *ssl); +__owur int SSL_client_version(const SSL *s); +__owur int SSL_CTX_set_default_verify_paths(SSL_CTX *ctx); +__owur int SSL_CTX_set_default_verify_dir(SSL_CTX *ctx); +__owur int SSL_CTX_set_default_verify_file(SSL_CTX *ctx); +__owur int SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile, + const char *CApath); +# define SSL_get0_session SSL_get_session/* just peek at pointer */ +__owur SSL_SESSION *SSL_get_session(const SSL *ssl); +__owur SSL_SESSION *SSL_get1_session(SSL *ssl); /* obtain a reference count */ +__owur SSL_CTX *SSL_get_SSL_CTX(const SSL *ssl); +SSL_CTX *SSL_set_SSL_CTX(SSL *ssl, SSL_CTX *ctx); +void SSL_set_info_callback(SSL *ssl, + void (*cb) (const SSL *ssl, int type, int val)); +void (*SSL_get_info_callback(const SSL *ssl)) (const SSL *ssl, int type, + int val); +__owur OSSL_HANDSHAKE_STATE SSL_get_state(const SSL *ssl); + +void SSL_set_verify_result(SSL *ssl, long v); +__owur long SSL_get_verify_result(const SSL *ssl); +__owur STACK_OF(X509) *SSL_get0_verified_chain(const SSL *s); + +__owur size_t SSL_get_client_random(const SSL *ssl, unsigned char *out, + size_t outlen); +__owur size_t SSL_get_server_random(const SSL *ssl, unsigned char *out, + size_t outlen); +__owur size_t SSL_SESSION_get_master_key(const SSL_SESSION *sess, + unsigned char *out, size_t outlen); +__owur int SSL_SESSION_set1_master_key(SSL_SESSION *sess, + const unsigned char *in, size_t len); +uint8_t SSL_SESSION_get_max_fragment_length(const SSL_SESSION *sess); + +#define SSL_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL, l, p, newf, dupf, freef) +__owur int SSL_set_ex_data(SSL *ssl, int idx, void *data); +void *SSL_get_ex_data(const SSL *ssl, int idx); +#define SSL_SESSION_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL_SESSION, l, p, newf, dupf, freef) +__owur int SSL_SESSION_set_ex_data(SSL_SESSION *ss, int idx, void *data); +void *SSL_SESSION_get_ex_data(const SSL_SESSION *ss, int idx); +#define SSL_CTX_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL_CTX, l, p, newf, dupf, freef) +__owur int SSL_CTX_set_ex_data(SSL_CTX *ssl, int idx, void *data); +void *SSL_CTX_get_ex_data(const SSL_CTX *ssl, int idx); + +__owur int SSL_get_ex_data_X509_STORE_CTX_idx(void); + +# define SSL_CTX_sess_set_cache_size(ctx,t) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SESS_CACHE_SIZE,t,NULL) +# define SSL_CTX_sess_get_cache_size(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_SESS_CACHE_SIZE,0,NULL) +# define SSL_CTX_set_session_cache_mode(ctx,m) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SESS_CACHE_MODE,m,NULL) +# define SSL_CTX_get_session_cache_mode(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_SESS_CACHE_MODE,0,NULL) + +# define SSL_CTX_get_default_read_ahead(ctx) SSL_CTX_get_read_ahead(ctx) +# define SSL_CTX_set_default_read_ahead(ctx,m) SSL_CTX_set_read_ahead(ctx,m) +# define SSL_CTX_get_read_ahead(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_READ_AHEAD,0,NULL) +# define SSL_CTX_set_read_ahead(ctx,m) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_READ_AHEAD,m,NULL) +# define SSL_CTX_get_max_cert_list(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_MAX_CERT_LIST,0,NULL) +# define SSL_CTX_set_max_cert_list(ctx,m) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_MAX_CERT_LIST,m,NULL) +# define SSL_get_max_cert_list(ssl) \ + SSL_ctrl(ssl,SSL_CTRL_GET_MAX_CERT_LIST,0,NULL) +# define SSL_set_max_cert_list(ssl,m) \ + SSL_ctrl(ssl,SSL_CTRL_SET_MAX_CERT_LIST,m,NULL) + +# define SSL_CTX_set_max_send_fragment(ctx,m) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_MAX_SEND_FRAGMENT,m,NULL) +# define SSL_set_max_send_fragment(ssl,m) \ + SSL_ctrl(ssl,SSL_CTRL_SET_MAX_SEND_FRAGMENT,m,NULL) +# define SSL_CTX_set_split_send_fragment(ctx,m) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SPLIT_SEND_FRAGMENT,m,NULL) +# define SSL_set_split_send_fragment(ssl,m) \ + SSL_ctrl(ssl,SSL_CTRL_SET_SPLIT_SEND_FRAGMENT,m,NULL) +# define SSL_CTX_set_max_pipelines(ctx,m) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_MAX_PIPELINES,m,NULL) +# define SSL_set_max_pipelines(ssl,m) \ + SSL_ctrl(ssl,SSL_CTRL_SET_MAX_PIPELINES,m,NULL) + +void SSL_CTX_set_default_read_buffer_len(SSL_CTX *ctx, size_t len); +void SSL_set_default_read_buffer_len(SSL *s, size_t len); + +# ifndef OPENSSL_NO_DH +/* NB: the |keylength| is only applicable when is_export is true */ +void SSL_CTX_set_tmp_dh_callback(SSL_CTX *ctx, + DH *(*dh) (SSL *ssl, int is_export, + int keylength)); +void SSL_set_tmp_dh_callback(SSL *ssl, + DH *(*dh) (SSL *ssl, int is_export, + int keylength)); +# endif + +__owur const COMP_METHOD *SSL_get_current_compression(const SSL *s); +__owur const COMP_METHOD *SSL_get_current_expansion(const SSL *s); +__owur const char *SSL_COMP_get_name(const COMP_METHOD *comp); +__owur const char *SSL_COMP_get0_name(const SSL_COMP *comp); +__owur int SSL_COMP_get_id(const SSL_COMP *comp); +STACK_OF(SSL_COMP) *SSL_COMP_get_compression_methods(void); +__owur STACK_OF(SSL_COMP) *SSL_COMP_set0_compression_methods(STACK_OF(SSL_COMP) + *meths); +# if OPENSSL_API_COMPAT < 0x10100000L +# define SSL_COMP_free_compression_methods() while(0) continue +# endif +__owur int SSL_COMP_add_compression_method(int id, COMP_METHOD *cm); + +const SSL_CIPHER *SSL_CIPHER_find(SSL *ssl, const unsigned char *ptr); +int SSL_CIPHER_get_cipher_nid(const SSL_CIPHER *c); +int SSL_CIPHER_get_digest_nid(const SSL_CIPHER *c); +int SSL_bytes_to_cipher_list(SSL *s, const unsigned char *bytes, size_t len, + int isv2format, STACK_OF(SSL_CIPHER) **sk, + STACK_OF(SSL_CIPHER) **scsvs); + +/* TLS extensions functions */ +__owur int SSL_set_session_ticket_ext(SSL *s, void *ext_data, int ext_len); + +__owur int SSL_set_session_ticket_ext_cb(SSL *s, + tls_session_ticket_ext_cb_fn cb, + void *arg); + +/* Pre-shared secret session resumption functions */ +__owur int SSL_set_session_secret_cb(SSL *s, + tls_session_secret_cb_fn session_secret_cb, + void *arg); + +void SSL_CTX_set_not_resumable_session_callback(SSL_CTX *ctx, + int (*cb) (SSL *ssl, + int + is_forward_secure)); + +void SSL_set_not_resumable_session_callback(SSL *ssl, + int (*cb) (SSL *ssl, + int is_forward_secure)); + +void SSL_CTX_set_record_padding_callback(SSL_CTX *ctx, + size_t (*cb) (SSL *ssl, int type, + size_t len, void *arg)); +void SSL_CTX_set_record_padding_callback_arg(SSL_CTX *ctx, void *arg); +void *SSL_CTX_get_record_padding_callback_arg(const SSL_CTX *ctx); +int SSL_CTX_set_block_padding(SSL_CTX *ctx, size_t block_size); + +void SSL_set_record_padding_callback(SSL *ssl, + size_t (*cb) (SSL *ssl, int type, + size_t len, void *arg)); +void SSL_set_record_padding_callback_arg(SSL *ssl, void *arg); +void *SSL_get_record_padding_callback_arg(const SSL *ssl); +int SSL_set_block_padding(SSL *ssl, size_t block_size); + +int SSL_set_num_tickets(SSL *s, size_t num_tickets); +size_t SSL_get_num_tickets(const SSL *s); +int SSL_CTX_set_num_tickets(SSL_CTX *ctx, size_t num_tickets); +size_t SSL_CTX_get_num_tickets(const SSL_CTX *ctx); + +# if OPENSSL_API_COMPAT < 0x10100000L +# define SSL_cache_hit(s) SSL_session_reused(s) +# endif + +__owur int SSL_session_reused(const SSL *s); +__owur int SSL_is_server(const SSL *s); + +__owur __owur SSL_CONF_CTX *SSL_CONF_CTX_new(void); +int SSL_CONF_CTX_finish(SSL_CONF_CTX *cctx); +void SSL_CONF_CTX_free(SSL_CONF_CTX *cctx); +unsigned int SSL_CONF_CTX_set_flags(SSL_CONF_CTX *cctx, unsigned int flags); +__owur unsigned int SSL_CONF_CTX_clear_flags(SSL_CONF_CTX *cctx, + unsigned int flags); +__owur int SSL_CONF_CTX_set1_prefix(SSL_CONF_CTX *cctx, const char *pre); + +void SSL_CONF_CTX_set_ssl(SSL_CONF_CTX *cctx, SSL *ssl); +void SSL_CONF_CTX_set_ssl_ctx(SSL_CONF_CTX *cctx, SSL_CTX *ctx); + +__owur int SSL_CONF_cmd(SSL_CONF_CTX *cctx, const char *cmd, const char *value); +__owur int SSL_CONF_cmd_argv(SSL_CONF_CTX *cctx, int *pargc, char ***pargv); +__owur int SSL_CONF_cmd_value_type(SSL_CONF_CTX *cctx, const char *cmd); + +void SSL_add_ssl_module(void); +int SSL_config(SSL *s, const char *name); +int SSL_CTX_config(SSL_CTX *ctx, const char *name); + +# ifndef OPENSSL_NO_SSL_TRACE +void SSL_trace(int write_p, int version, int content_type, + const void *buf, size_t len, SSL *ssl, void *arg); +# endif + +# ifndef OPENSSL_NO_SOCK +int DTLSv1_listen(SSL *s, BIO_ADDR *client); +# endif + +# ifndef OPENSSL_NO_CT + +/* + * A callback for verifying that the received SCTs are sufficient. + * Expected to return 1 if they are sufficient, otherwise 0. + * May return a negative integer if an error occurs. + * A connection should be aborted if the SCTs are deemed insufficient. + */ +typedef int (*ssl_ct_validation_cb)(const CT_POLICY_EVAL_CTX *ctx, + const STACK_OF(SCT) *scts, void *arg); + +/* + * Sets a |callback| that is invoked upon receipt of ServerHelloDone to validate + * the received SCTs. + * If the callback returns a non-positive result, the connection is terminated. + * Call this function before beginning a handshake. + * If a NULL |callback| is provided, SCT validation is disabled. + * |arg| is arbitrary userdata that will be passed to the callback whenever it + * is invoked. Ownership of |arg| remains with the caller. + * + * NOTE: A side-effect of setting a CT callback is that an OCSP stapled response + * will be requested. + */ +int SSL_set_ct_validation_callback(SSL *s, ssl_ct_validation_cb callback, + void *arg); +int SSL_CTX_set_ct_validation_callback(SSL_CTX *ctx, + ssl_ct_validation_cb callback, + void *arg); +#define SSL_disable_ct(s) \ + ((void) SSL_set_validation_callback((s), NULL, NULL)) +#define SSL_CTX_disable_ct(ctx) \ + ((void) SSL_CTX_set_validation_callback((ctx), NULL, NULL)) + +/* + * The validation type enumerates the available behaviours of the built-in SSL + * CT validation callback selected via SSL_enable_ct() and SSL_CTX_enable_ct(). + * The underlying callback is a static function in libssl. + */ +enum { + SSL_CT_VALIDATION_PERMISSIVE = 0, + SSL_CT_VALIDATION_STRICT +}; + +/* + * Enable CT by setting up a callback that implements one of the built-in + * validation variants. The SSL_CT_VALIDATION_PERMISSIVE variant always + * continues the handshake, the application can make appropriate decisions at + * handshake completion. The SSL_CT_VALIDATION_STRICT variant requires at + * least one valid SCT, or else handshake termination will be requested. The + * handshake may continue anyway if SSL_VERIFY_NONE is in effect. + */ +int SSL_enable_ct(SSL *s, int validation_mode); +int SSL_CTX_enable_ct(SSL_CTX *ctx, int validation_mode); + +/* + * Report whether a non-NULL callback is enabled. + */ +int SSL_ct_is_enabled(const SSL *s); +int SSL_CTX_ct_is_enabled(const SSL_CTX *ctx); + +/* Gets the SCTs received from a connection */ +const STACK_OF(SCT) *SSL_get0_peer_scts(SSL *s); + +/* + * Loads the CT log list from the default location. + * If a CTLOG_STORE has previously been set using SSL_CTX_set_ctlog_store, + * the log information loaded from this file will be appended to the + * CTLOG_STORE. + * Returns 1 on success, 0 otherwise. + */ +int SSL_CTX_set_default_ctlog_list_file(SSL_CTX *ctx); + +/* + * Loads the CT log list from the specified file path. + * If a CTLOG_STORE has previously been set using SSL_CTX_set_ctlog_store, + * the log information loaded from this file will be appended to the + * CTLOG_STORE. + * Returns 1 on success, 0 otherwise. + */ +int SSL_CTX_set_ctlog_list_file(SSL_CTX *ctx, const char *path); + +/* + * Sets the CT log list used by all SSL connections created from this SSL_CTX. + * Ownership of the CTLOG_STORE is transferred to the SSL_CTX. + */ +void SSL_CTX_set0_ctlog_store(SSL_CTX *ctx, CTLOG_STORE *logs); + +/* + * Gets the CT log list used by all SSL connections created from this SSL_CTX. + * This will be NULL unless one of the following functions has been called: + * - SSL_CTX_set_default_ctlog_list_file + * - SSL_CTX_set_ctlog_list_file + * - SSL_CTX_set_ctlog_store + */ +const CTLOG_STORE *SSL_CTX_get0_ctlog_store(const SSL_CTX *ctx); + +# endif /* OPENSSL_NO_CT */ + +/* What the "other" parameter contains in security callback */ +/* Mask for type */ +# define SSL_SECOP_OTHER_TYPE 0xffff0000 +# define SSL_SECOP_OTHER_NONE 0 +# define SSL_SECOP_OTHER_CIPHER (1 << 16) +# define SSL_SECOP_OTHER_CURVE (2 << 16) +# define SSL_SECOP_OTHER_DH (3 << 16) +# define SSL_SECOP_OTHER_PKEY (4 << 16) +# define SSL_SECOP_OTHER_SIGALG (5 << 16) +# define SSL_SECOP_OTHER_CERT (6 << 16) + +/* Indicated operation refers to peer key or certificate */ +# define SSL_SECOP_PEER 0x1000 + +/* Values for "op" parameter in security callback */ + +/* Called to filter ciphers */ +/* Ciphers client supports */ +# define SSL_SECOP_CIPHER_SUPPORTED (1 | SSL_SECOP_OTHER_CIPHER) +/* Cipher shared by client/server */ +# define SSL_SECOP_CIPHER_SHARED (2 | SSL_SECOP_OTHER_CIPHER) +/* Sanity check of cipher server selects */ +# define SSL_SECOP_CIPHER_CHECK (3 | SSL_SECOP_OTHER_CIPHER) +/* Curves supported by client */ +# define SSL_SECOP_CURVE_SUPPORTED (4 | SSL_SECOP_OTHER_CURVE) +/* Curves shared by client/server */ +# define SSL_SECOP_CURVE_SHARED (5 | SSL_SECOP_OTHER_CURVE) +/* Sanity check of curve server selects */ +# define SSL_SECOP_CURVE_CHECK (6 | SSL_SECOP_OTHER_CURVE) +/* Temporary DH key */ +# define SSL_SECOP_TMP_DH (7 | SSL_SECOP_OTHER_PKEY) +/* SSL/TLS version */ +# define SSL_SECOP_VERSION (9 | SSL_SECOP_OTHER_NONE) +/* Session tickets */ +# define SSL_SECOP_TICKET (10 | SSL_SECOP_OTHER_NONE) +/* Supported signature algorithms sent to peer */ +# define SSL_SECOP_SIGALG_SUPPORTED (11 | SSL_SECOP_OTHER_SIGALG) +/* Shared signature algorithm */ +# define SSL_SECOP_SIGALG_SHARED (12 | SSL_SECOP_OTHER_SIGALG) +/* Sanity check signature algorithm allowed */ +# define SSL_SECOP_SIGALG_CHECK (13 | SSL_SECOP_OTHER_SIGALG) +/* Used to get mask of supported public key signature algorithms */ +# define SSL_SECOP_SIGALG_MASK (14 | SSL_SECOP_OTHER_SIGALG) +/* Use to see if compression is allowed */ +# define SSL_SECOP_COMPRESSION (15 | SSL_SECOP_OTHER_NONE) +/* EE key in certificate */ +# define SSL_SECOP_EE_KEY (16 | SSL_SECOP_OTHER_CERT) +/* CA key in certificate */ +# define SSL_SECOP_CA_KEY (17 | SSL_SECOP_OTHER_CERT) +/* CA digest algorithm in certificate */ +# define SSL_SECOP_CA_MD (18 | SSL_SECOP_OTHER_CERT) +/* Peer EE key in certificate */ +# define SSL_SECOP_PEER_EE_KEY (SSL_SECOP_EE_KEY | SSL_SECOP_PEER) +/* Peer CA key in certificate */ +# define SSL_SECOP_PEER_CA_KEY (SSL_SECOP_CA_KEY | SSL_SECOP_PEER) +/* Peer CA digest algorithm in certificate */ +# define SSL_SECOP_PEER_CA_MD (SSL_SECOP_CA_MD | SSL_SECOP_PEER) + +void SSL_set_security_level(SSL *s, int level); +__owur int SSL_get_security_level(const SSL *s); +void SSL_set_security_callback(SSL *s, + int (*cb) (const SSL *s, const SSL_CTX *ctx, + int op, int bits, int nid, + void *other, void *ex)); +int (*SSL_get_security_callback(const SSL *s)) (const SSL *s, + const SSL_CTX *ctx, int op, + int bits, int nid, void *other, + void *ex); +void SSL_set0_security_ex_data(SSL *s, void *ex); +__owur void *SSL_get0_security_ex_data(const SSL *s); + +void SSL_CTX_set_security_level(SSL_CTX *ctx, int level); +__owur int SSL_CTX_get_security_level(const SSL_CTX *ctx); +void SSL_CTX_set_security_callback(SSL_CTX *ctx, + int (*cb) (const SSL *s, const SSL_CTX *ctx, + int op, int bits, int nid, + void *other, void *ex)); +int (*SSL_CTX_get_security_callback(const SSL_CTX *ctx)) (const SSL *s, + const SSL_CTX *ctx, + int op, int bits, + int nid, + void *other, + void *ex); +void SSL_CTX_set0_security_ex_data(SSL_CTX *ctx, void *ex); +__owur void *SSL_CTX_get0_security_ex_data(const SSL_CTX *ctx); + +/* OPENSSL_INIT flag 0x010000 reserved for internal use */ +# define OPENSSL_INIT_NO_LOAD_SSL_STRINGS 0x00100000L +# define OPENSSL_INIT_LOAD_SSL_STRINGS 0x00200000L + +# define OPENSSL_INIT_SSL_DEFAULT \ + (OPENSSL_INIT_LOAD_SSL_STRINGS | OPENSSL_INIT_LOAD_CRYPTO_STRINGS) + +int OPENSSL_init_ssl(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings); + +# ifndef OPENSSL_NO_UNIT_TEST +__owur const struct openssl_ssl_test_functions *SSL_test_functions(void); +# endif + +__owur int SSL_free_buffers(SSL *ssl); +__owur int SSL_alloc_buffers(SSL *ssl); + +/* Status codes passed to the decrypt session ticket callback. Some of these + * are for internal use only and are never passed to the callback. */ +typedef int SSL_TICKET_STATUS; + +/* Support for ticket appdata */ +/* fatal error, malloc failure */ +# define SSL_TICKET_FATAL_ERR_MALLOC 0 +/* fatal error, either from parsing or decrypting the ticket */ +# define SSL_TICKET_FATAL_ERR_OTHER 1 +/* No ticket present */ +# define SSL_TICKET_NONE 2 +/* Empty ticket present */ +# define SSL_TICKET_EMPTY 3 +/* the ticket couldn't be decrypted */ +# define SSL_TICKET_NO_DECRYPT 4 +/* a ticket was successfully decrypted */ +# define SSL_TICKET_SUCCESS 5 +/* same as above but the ticket needs to be renewed */ +# define SSL_TICKET_SUCCESS_RENEW 6 + +/* Return codes for the decrypt session ticket callback */ +typedef int SSL_TICKET_RETURN; + +/* An error occurred */ +#define SSL_TICKET_RETURN_ABORT 0 +/* Do not use the ticket, do not send a renewed ticket to the client */ +#define SSL_TICKET_RETURN_IGNORE 1 +/* Do not use the ticket, send a renewed ticket to the client */ +#define SSL_TICKET_RETURN_IGNORE_RENEW 2 +/* Use the ticket, do not send a renewed ticket to the client */ +#define SSL_TICKET_RETURN_USE 3 +/* Use the ticket, send a renewed ticket to the client */ +#define SSL_TICKET_RETURN_USE_RENEW 4 + +typedef int (*SSL_CTX_generate_session_ticket_fn)(SSL *s, void *arg); +typedef SSL_TICKET_RETURN (*SSL_CTX_decrypt_session_ticket_fn)(SSL *s, SSL_SESSION *ss, + const unsigned char *keyname, + size_t keyname_length, + SSL_TICKET_STATUS status, + void *arg); +int SSL_CTX_set_session_ticket_cb(SSL_CTX *ctx, + SSL_CTX_generate_session_ticket_fn gen_cb, + SSL_CTX_decrypt_session_ticket_fn dec_cb, + void *arg); +int SSL_SESSION_set1_ticket_appdata(SSL_SESSION *ss, const void *data, size_t len); +int SSL_SESSION_get0_ticket_appdata(SSL_SESSION *ss, void **data, size_t *len); + +extern const char SSL_version_str[]; + +typedef unsigned int (*DTLS_timer_cb)(SSL *s, unsigned int timer_us); + +void DTLS_set_timer_cb(SSL *s, DTLS_timer_cb cb); + + +typedef int (*SSL_allow_early_data_cb_fn)(SSL *s, void *arg); +void SSL_CTX_set_allow_early_data_cb(SSL_CTX *ctx, + SSL_allow_early_data_cb_fn cb, + void *arg); +void SSL_set_allow_early_data_cb(SSL *s, + SSL_allow_early_data_cb_fn cb, + void *arg); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ssl2.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ssl2.h new file mode 100644 index 00000000..5321bd27 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ssl2.h @@ -0,0 +1,24 @@ +/* + * Copyright 1995-2016 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_SSL2_H +# define HEADER_SSL2_H + +#ifdef __cplusplus +extern "C" { +#endif + +# define SSL2_VERSION 0x0002 + +# define SSL2_MT_CLIENT_HELLO 1 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ssl3.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ssl3.h new file mode 100644 index 00000000..8d01fcc4 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ssl3.h @@ -0,0 +1,339 @@ +/* + * Copyright 1995-2018 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 + * 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 + */ + +#ifndef HEADER_SSL3_H +# define HEADER_SSL3_H + +# include +# include +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Signalling cipher suite value from RFC 5746 + * (TLS_EMPTY_RENEGOTIATION_INFO_SCSV) + */ +# define SSL3_CK_SCSV 0x030000FF + +/* + * Signalling cipher suite value from draft-ietf-tls-downgrade-scsv-00 + * (TLS_FALLBACK_SCSV) + */ +# define SSL3_CK_FALLBACK_SCSV 0x03005600 + +# define SSL3_CK_RSA_NULL_MD5 0x03000001 +# define SSL3_CK_RSA_NULL_SHA 0x03000002 +# define SSL3_CK_RSA_RC4_40_MD5 0x03000003 +# define SSL3_CK_RSA_RC4_128_MD5 0x03000004 +# define SSL3_CK_RSA_RC4_128_SHA 0x03000005 +# define SSL3_CK_RSA_RC2_40_MD5 0x03000006 +# define SSL3_CK_RSA_IDEA_128_SHA 0x03000007 +# define SSL3_CK_RSA_DES_40_CBC_SHA 0x03000008 +# define SSL3_CK_RSA_DES_64_CBC_SHA 0x03000009 +# define SSL3_CK_RSA_DES_192_CBC3_SHA 0x0300000A + +# define SSL3_CK_DH_DSS_DES_40_CBC_SHA 0x0300000B +# define SSL3_CK_DH_DSS_DES_64_CBC_SHA 0x0300000C +# define SSL3_CK_DH_DSS_DES_192_CBC3_SHA 0x0300000D +# define SSL3_CK_DH_RSA_DES_40_CBC_SHA 0x0300000E +# define SSL3_CK_DH_RSA_DES_64_CBC_SHA 0x0300000F +# define SSL3_CK_DH_RSA_DES_192_CBC3_SHA 0x03000010 + +# define SSL3_CK_DHE_DSS_DES_40_CBC_SHA 0x03000011 +# define SSL3_CK_EDH_DSS_DES_40_CBC_SHA SSL3_CK_DHE_DSS_DES_40_CBC_SHA +# define SSL3_CK_DHE_DSS_DES_64_CBC_SHA 0x03000012 +# define SSL3_CK_EDH_DSS_DES_64_CBC_SHA SSL3_CK_DHE_DSS_DES_64_CBC_SHA +# define SSL3_CK_DHE_DSS_DES_192_CBC3_SHA 0x03000013 +# define SSL3_CK_EDH_DSS_DES_192_CBC3_SHA SSL3_CK_DHE_DSS_DES_192_CBC3_SHA +# define SSL3_CK_DHE_RSA_DES_40_CBC_SHA 0x03000014 +# define SSL3_CK_EDH_RSA_DES_40_CBC_SHA SSL3_CK_DHE_RSA_DES_40_CBC_SHA +# define SSL3_CK_DHE_RSA_DES_64_CBC_SHA 0x03000015 +# define SSL3_CK_EDH_RSA_DES_64_CBC_SHA SSL3_CK_DHE_RSA_DES_64_CBC_SHA +# define SSL3_CK_DHE_RSA_DES_192_CBC3_SHA 0x03000016 +# define SSL3_CK_EDH_RSA_DES_192_CBC3_SHA SSL3_CK_DHE_RSA_DES_192_CBC3_SHA + +# define SSL3_CK_ADH_RC4_40_MD5 0x03000017 +# define SSL3_CK_ADH_RC4_128_MD5 0x03000018 +# define SSL3_CK_ADH_DES_40_CBC_SHA 0x03000019 +# define SSL3_CK_ADH_DES_64_CBC_SHA 0x0300001A +# define SSL3_CK_ADH_DES_192_CBC_SHA 0x0300001B + +/* a bundle of RFC standard cipher names, generated from ssl3_ciphers[] */ +# define SSL3_RFC_RSA_NULL_MD5 "TLS_RSA_WITH_NULL_MD5" +# define SSL3_RFC_RSA_NULL_SHA "TLS_RSA_WITH_NULL_SHA" +# define SSL3_RFC_RSA_DES_192_CBC3_SHA "TLS_RSA_WITH_3DES_EDE_CBC_SHA" +# define SSL3_RFC_DHE_DSS_DES_192_CBC3_SHA "TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA" +# define SSL3_RFC_DHE_RSA_DES_192_CBC3_SHA "TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA" +# define SSL3_RFC_ADH_DES_192_CBC_SHA "TLS_DH_anon_WITH_3DES_EDE_CBC_SHA" +# define SSL3_RFC_RSA_IDEA_128_SHA "TLS_RSA_WITH_IDEA_CBC_SHA" +# define SSL3_RFC_RSA_RC4_128_MD5 "TLS_RSA_WITH_RC4_128_MD5" +# define SSL3_RFC_RSA_RC4_128_SHA "TLS_RSA_WITH_RC4_128_SHA" +# define SSL3_RFC_ADH_RC4_128_MD5 "TLS_DH_anon_WITH_RC4_128_MD5" + +# define SSL3_TXT_RSA_NULL_MD5 "NULL-MD5" +# define SSL3_TXT_RSA_NULL_SHA "NULL-SHA" +# define SSL3_TXT_RSA_RC4_40_MD5 "EXP-RC4-MD5" +# define SSL3_TXT_RSA_RC4_128_MD5 "RC4-MD5" +# define SSL3_TXT_RSA_RC4_128_SHA "RC4-SHA" +# define SSL3_TXT_RSA_RC2_40_MD5 "EXP-RC2-CBC-MD5" +# define SSL3_TXT_RSA_IDEA_128_SHA "IDEA-CBC-SHA" +# define SSL3_TXT_RSA_DES_40_CBC_SHA "EXP-DES-CBC-SHA" +# define SSL3_TXT_RSA_DES_64_CBC_SHA "DES-CBC-SHA" +# define SSL3_TXT_RSA_DES_192_CBC3_SHA "DES-CBC3-SHA" + +# define SSL3_TXT_DH_DSS_DES_40_CBC_SHA "EXP-DH-DSS-DES-CBC-SHA" +# define SSL3_TXT_DH_DSS_DES_64_CBC_SHA "DH-DSS-DES-CBC-SHA" +# define SSL3_TXT_DH_DSS_DES_192_CBC3_SHA "DH-DSS-DES-CBC3-SHA" +# define SSL3_TXT_DH_RSA_DES_40_CBC_SHA "EXP-DH-RSA-DES-CBC-SHA" +# define SSL3_TXT_DH_RSA_DES_64_CBC_SHA "DH-RSA-DES-CBC-SHA" +# define SSL3_TXT_DH_RSA_DES_192_CBC3_SHA "DH-RSA-DES-CBC3-SHA" + +# define SSL3_TXT_DHE_DSS_DES_40_CBC_SHA "EXP-DHE-DSS-DES-CBC-SHA" +# define SSL3_TXT_DHE_DSS_DES_64_CBC_SHA "DHE-DSS-DES-CBC-SHA" +# define SSL3_TXT_DHE_DSS_DES_192_CBC3_SHA "DHE-DSS-DES-CBC3-SHA" +# define SSL3_TXT_DHE_RSA_DES_40_CBC_SHA "EXP-DHE-RSA-DES-CBC-SHA" +# define SSL3_TXT_DHE_RSA_DES_64_CBC_SHA "DHE-RSA-DES-CBC-SHA" +# define SSL3_TXT_DHE_RSA_DES_192_CBC3_SHA "DHE-RSA-DES-CBC3-SHA" + +/* + * This next block of six "EDH" labels is for backward compatibility with + * older versions of OpenSSL. New code should use the six "DHE" labels above + * instead: + */ +# define SSL3_TXT_EDH_DSS_DES_40_CBC_SHA "EXP-EDH-DSS-DES-CBC-SHA" +# define SSL3_TXT_EDH_DSS_DES_64_CBC_SHA "EDH-DSS-DES-CBC-SHA" +# define SSL3_TXT_EDH_DSS_DES_192_CBC3_SHA "EDH-DSS-DES-CBC3-SHA" +# define SSL3_TXT_EDH_RSA_DES_40_CBC_SHA "EXP-EDH-RSA-DES-CBC-SHA" +# define SSL3_TXT_EDH_RSA_DES_64_CBC_SHA "EDH-RSA-DES-CBC-SHA" +# define SSL3_TXT_EDH_RSA_DES_192_CBC3_SHA "EDH-RSA-DES-CBC3-SHA" + +# define SSL3_TXT_ADH_RC4_40_MD5 "EXP-ADH-RC4-MD5" +# define SSL3_TXT_ADH_RC4_128_MD5 "ADH-RC4-MD5" +# define SSL3_TXT_ADH_DES_40_CBC_SHA "EXP-ADH-DES-CBC-SHA" +# define SSL3_TXT_ADH_DES_64_CBC_SHA "ADH-DES-CBC-SHA" +# define SSL3_TXT_ADH_DES_192_CBC_SHA "ADH-DES-CBC3-SHA" + +# define SSL3_SSL_SESSION_ID_LENGTH 32 +# define SSL3_MAX_SSL_SESSION_ID_LENGTH 32 + +# define SSL3_MASTER_SECRET_SIZE 48 +# define SSL3_RANDOM_SIZE 32 +# define SSL3_SESSION_ID_SIZE 32 +# define SSL3_RT_HEADER_LENGTH 5 + +# define SSL3_HM_HEADER_LENGTH 4 + +# ifndef SSL3_ALIGN_PAYLOAD + /* + * Some will argue that this increases memory footprint, but it's not + * actually true. Point is that malloc has to return at least 64-bit aligned + * pointers, meaning that allocating 5 bytes wastes 3 bytes in either case. + * Suggested pre-gaping simply moves these wasted bytes from the end of + * allocated region to its front, but makes data payload aligned, which + * improves performance:-) + */ +# define SSL3_ALIGN_PAYLOAD 8 +# else +# if (SSL3_ALIGN_PAYLOAD&(SSL3_ALIGN_PAYLOAD-1))!=0 +# error "insane SSL3_ALIGN_PAYLOAD" +# undef SSL3_ALIGN_PAYLOAD +# endif +# endif + +/* + * This is the maximum MAC (digest) size used by the SSL library. Currently + * maximum of 20 is used by SHA1, but we reserve for future extension for + * 512-bit hashes. + */ + +# define SSL3_RT_MAX_MD_SIZE 64 + +/* + * Maximum block size used in all ciphersuites. Currently 16 for AES. + */ + +# define SSL_RT_MAX_CIPHER_BLOCK_SIZE 16 + +# define SSL3_RT_MAX_EXTRA (16384) + +/* Maximum plaintext length: defined by SSL/TLS standards */ +# define SSL3_RT_MAX_PLAIN_LENGTH 16384 +/* Maximum compression overhead: defined by SSL/TLS standards */ +# define SSL3_RT_MAX_COMPRESSED_OVERHEAD 1024 + +/* + * The standards give a maximum encryption overhead of 1024 bytes. In + * practice the value is lower than this. The overhead is the maximum number + * of padding bytes (256) plus the mac size. + */ +# define SSL3_RT_MAX_ENCRYPTED_OVERHEAD (256 + SSL3_RT_MAX_MD_SIZE) +# define SSL3_RT_MAX_TLS13_ENCRYPTED_OVERHEAD 256 + +/* + * OpenSSL currently only uses a padding length of at most one block so the + * send overhead is smaller. + */ + +# define SSL3_RT_SEND_MAX_ENCRYPTED_OVERHEAD \ + (SSL_RT_MAX_CIPHER_BLOCK_SIZE + SSL3_RT_MAX_MD_SIZE) + +/* If compression isn't used don't include the compression overhead */ + +# ifdef OPENSSL_NO_COMP +# define SSL3_RT_MAX_COMPRESSED_LENGTH SSL3_RT_MAX_PLAIN_LENGTH +# else +# define SSL3_RT_MAX_COMPRESSED_LENGTH \ + (SSL3_RT_MAX_PLAIN_LENGTH+SSL3_RT_MAX_COMPRESSED_OVERHEAD) +# endif +# define SSL3_RT_MAX_ENCRYPTED_LENGTH \ + (SSL3_RT_MAX_ENCRYPTED_OVERHEAD+SSL3_RT_MAX_COMPRESSED_LENGTH) +# define SSL3_RT_MAX_TLS13_ENCRYPTED_LENGTH \ + (SSL3_RT_MAX_PLAIN_LENGTH + SSL3_RT_MAX_TLS13_ENCRYPTED_OVERHEAD) +# define SSL3_RT_MAX_PACKET_SIZE \ + (SSL3_RT_MAX_ENCRYPTED_LENGTH+SSL3_RT_HEADER_LENGTH) + +# define SSL3_MD_CLIENT_FINISHED_CONST "\x43\x4C\x4E\x54" +# define SSL3_MD_SERVER_FINISHED_CONST "\x53\x52\x56\x52" + +# define SSL3_VERSION 0x0300 +# define SSL3_VERSION_MAJOR 0x03 +# define SSL3_VERSION_MINOR 0x00 + +# define SSL3_RT_CHANGE_CIPHER_SPEC 20 +# define SSL3_RT_ALERT 21 +# define SSL3_RT_HANDSHAKE 22 +# define SSL3_RT_APPLICATION_DATA 23 +# define DTLS1_RT_HEARTBEAT 24 + +/* Pseudo content types to indicate additional parameters */ +# define TLS1_RT_CRYPTO 0x1000 +# define TLS1_RT_CRYPTO_PREMASTER (TLS1_RT_CRYPTO | 0x1) +# define TLS1_RT_CRYPTO_CLIENT_RANDOM (TLS1_RT_CRYPTO | 0x2) +# define TLS1_RT_CRYPTO_SERVER_RANDOM (TLS1_RT_CRYPTO | 0x3) +# define TLS1_RT_CRYPTO_MASTER (TLS1_RT_CRYPTO | 0x4) + +# define TLS1_RT_CRYPTO_READ 0x0000 +# define TLS1_RT_CRYPTO_WRITE 0x0100 +# define TLS1_RT_CRYPTO_MAC (TLS1_RT_CRYPTO | 0x5) +# define TLS1_RT_CRYPTO_KEY (TLS1_RT_CRYPTO | 0x6) +# define TLS1_RT_CRYPTO_IV (TLS1_RT_CRYPTO | 0x7) +# define TLS1_RT_CRYPTO_FIXED_IV (TLS1_RT_CRYPTO | 0x8) + +/* Pseudo content types for SSL/TLS header info */ +# define SSL3_RT_HEADER 0x100 +# define SSL3_RT_INNER_CONTENT_TYPE 0x101 + +# define SSL3_AL_WARNING 1 +# define SSL3_AL_FATAL 2 + +# define SSL3_AD_CLOSE_NOTIFY 0 +# define SSL3_AD_UNEXPECTED_MESSAGE 10/* fatal */ +# define SSL3_AD_BAD_RECORD_MAC 20/* fatal */ +# define SSL3_AD_DECOMPRESSION_FAILURE 30/* fatal */ +# define SSL3_AD_HANDSHAKE_FAILURE 40/* fatal */ +# define SSL3_AD_NO_CERTIFICATE 41 +# define SSL3_AD_BAD_CERTIFICATE 42 +# define SSL3_AD_UNSUPPORTED_CERTIFICATE 43 +# define SSL3_AD_CERTIFICATE_REVOKED 44 +# define SSL3_AD_CERTIFICATE_EXPIRED 45 +# define SSL3_AD_CERTIFICATE_UNKNOWN 46 +# define SSL3_AD_ILLEGAL_PARAMETER 47/* fatal */ + +# define TLS1_HB_REQUEST 1 +# define TLS1_HB_RESPONSE 2 + + +# define SSL3_CT_RSA_SIGN 1 +# define SSL3_CT_DSS_SIGN 2 +# define SSL3_CT_RSA_FIXED_DH 3 +# define SSL3_CT_DSS_FIXED_DH 4 +# define SSL3_CT_RSA_EPHEMERAL_DH 5 +# define SSL3_CT_DSS_EPHEMERAL_DH 6 +# define SSL3_CT_FORTEZZA_DMS 20 +/* + * SSL3_CT_NUMBER is used to size arrays and it must be large enough to + * contain all of the cert types defined for *either* SSLv3 and TLSv1. + */ +# define SSL3_CT_NUMBER 10 + +# if defined(TLS_CT_NUMBER) +# if TLS_CT_NUMBER != SSL3_CT_NUMBER +# error "SSL/TLS CT_NUMBER values do not match" +# endif +# endif + +/* No longer used as of OpenSSL 1.1.1 */ +# define SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS 0x0001 + +/* Removed from OpenSSL 1.1.0 */ +# define TLS1_FLAGS_TLS_PADDING_BUG 0x0 + +# define TLS1_FLAGS_SKIP_CERT_VERIFY 0x0010 + +/* Set if we encrypt then mac instead of usual mac then encrypt */ +# define TLS1_FLAGS_ENCRYPT_THEN_MAC_READ 0x0100 +# define TLS1_FLAGS_ENCRYPT_THEN_MAC TLS1_FLAGS_ENCRYPT_THEN_MAC_READ + +/* Set if extended master secret extension received from peer */ +# define TLS1_FLAGS_RECEIVED_EXTMS 0x0200 + +# define TLS1_FLAGS_ENCRYPT_THEN_MAC_WRITE 0x0400 + +# define TLS1_FLAGS_STATELESS 0x0800 + +# define SSL3_MT_HELLO_REQUEST 0 +# define SSL3_MT_CLIENT_HELLO 1 +# define SSL3_MT_SERVER_HELLO 2 +# define SSL3_MT_NEWSESSION_TICKET 4 +# define SSL3_MT_END_OF_EARLY_DATA 5 +# define SSL3_MT_ENCRYPTED_EXTENSIONS 8 +# define SSL3_MT_CERTIFICATE 11 +# define SSL3_MT_SERVER_KEY_EXCHANGE 12 +# define SSL3_MT_CERTIFICATE_REQUEST 13 +# define SSL3_MT_SERVER_DONE 14 +# define SSL3_MT_CERTIFICATE_VERIFY 15 +# define SSL3_MT_CLIENT_KEY_EXCHANGE 16 +# define SSL3_MT_FINISHED 20 +# define SSL3_MT_CERTIFICATE_URL 21 +# define SSL3_MT_CERTIFICATE_STATUS 22 +# define SSL3_MT_SUPPLEMENTAL_DATA 23 +# define SSL3_MT_KEY_UPDATE 24 +# ifndef OPENSSL_NO_NEXTPROTONEG +# define SSL3_MT_NEXT_PROTO 67 +# endif +# define SSL3_MT_MESSAGE_HASH 254 +# define DTLS1_MT_HELLO_VERIFY_REQUEST 3 + +/* Dummy message type for handling CCS like a normal handshake message */ +# define SSL3_MT_CHANGE_CIPHER_SPEC 0x0101 + +# define SSL3_MT_CCS 1 + +/* These are used when changing over to a new cipher */ +# define SSL3_CC_READ 0x001 +# define SSL3_CC_WRITE 0x002 +# define SSL3_CC_CLIENT 0x010 +# define SSL3_CC_SERVER 0x020 +# define SSL3_CC_EARLY 0x040 +# define SSL3_CC_HANDSHAKE 0x080 +# define SSL3_CC_APPLICATION 0x100 +# define SSL3_CHANGE_CIPHER_CLIENT_WRITE (SSL3_CC_CLIENT|SSL3_CC_WRITE) +# define SSL3_CHANGE_CIPHER_SERVER_READ (SSL3_CC_SERVER|SSL3_CC_READ) +# define SSL3_CHANGE_CIPHER_CLIENT_READ (SSL3_CC_CLIENT|SSL3_CC_READ) +# define SSL3_CHANGE_CIPHER_SERVER_WRITE (SSL3_CC_SERVER|SSL3_CC_WRITE) + +#ifdef __cplusplus +} +#endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/sslerr.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/sslerr.h new file mode 100644 index 00000000..82983d3c --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/sslerr.h @@ -0,0 +1,773 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_SSLERR_H +# define HEADER_SSLERR_H + +# ifndef HEADER_SYMHACKS_H +# include +# endif + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_SSL_strings(void); + +/* + * SSL function codes. + */ +# define SSL_F_ADD_CLIENT_KEY_SHARE_EXT 438 +# define SSL_F_ADD_KEY_SHARE 512 +# define SSL_F_BYTES_TO_CIPHER_LIST 519 +# define SSL_F_CHECK_SUITEB_CIPHER_LIST 331 +# define SSL_F_CIPHERSUITE_CB 622 +# define SSL_F_CONSTRUCT_CA_NAMES 552 +# define SSL_F_CONSTRUCT_KEY_EXCHANGE_TBS 553 +# define SSL_F_CONSTRUCT_STATEFUL_TICKET 636 +# define SSL_F_CONSTRUCT_STATELESS_TICKET 637 +# define SSL_F_CREATE_SYNTHETIC_MESSAGE_HASH 539 +# define SSL_F_CREATE_TICKET_PREQUEL 638 +# define SSL_F_CT_MOVE_SCTS 345 +# define SSL_F_CT_STRICT 349 +# define SSL_F_CUSTOM_EXT_ADD 554 +# define SSL_F_CUSTOM_EXT_PARSE 555 +# define SSL_F_D2I_SSL_SESSION 103 +# define SSL_F_DANE_CTX_ENABLE 347 +# define SSL_F_DANE_MTYPE_SET 393 +# define SSL_F_DANE_TLSA_ADD 394 +# define SSL_F_DERIVE_SECRET_KEY_AND_IV 514 +# define SSL_F_DO_DTLS1_WRITE 245 +# define SSL_F_DO_SSL3_WRITE 104 +# define SSL_F_DTLS1_BUFFER_RECORD 247 +# define SSL_F_DTLS1_CHECK_TIMEOUT_NUM 318 +# define SSL_F_DTLS1_HEARTBEAT 305 +# define SSL_F_DTLS1_HM_FRAGMENT_NEW 623 +# define SSL_F_DTLS1_PREPROCESS_FRAGMENT 288 +# define SSL_F_DTLS1_PROCESS_BUFFERED_RECORDS 424 +# define SSL_F_DTLS1_PROCESS_RECORD 257 +# define SSL_F_DTLS1_READ_BYTES 258 +# define SSL_F_DTLS1_READ_FAILED 339 +# define SSL_F_DTLS1_RETRANSMIT_MESSAGE 390 +# define SSL_F_DTLS1_WRITE_APP_DATA_BYTES 268 +# define SSL_F_DTLS1_WRITE_BYTES 545 +# define SSL_F_DTLSV1_LISTEN 350 +# define SSL_F_DTLS_CONSTRUCT_CHANGE_CIPHER_SPEC 371 +# define SSL_F_DTLS_CONSTRUCT_HELLO_VERIFY_REQUEST 385 +# define SSL_F_DTLS_GET_REASSEMBLED_MESSAGE 370 +# define SSL_F_DTLS_PROCESS_HELLO_VERIFY 386 +# define SSL_F_DTLS_RECORD_LAYER_NEW 635 +# define SSL_F_DTLS_WAIT_FOR_DRY 592 +# define SSL_F_EARLY_DATA_COUNT_OK 532 +# define SSL_F_FINAL_EARLY_DATA 556 +# define SSL_F_FINAL_EC_PT_FORMATS 485 +# define SSL_F_FINAL_EMS 486 +# define SSL_F_FINAL_KEY_SHARE 503 +# define SSL_F_FINAL_MAXFRAGMENTLEN 557 +# define SSL_F_FINAL_RENEGOTIATE 483 +# define SSL_F_FINAL_SERVER_NAME 558 +# define SSL_F_FINAL_SIG_ALGS 497 +# define SSL_F_GET_CERT_VERIFY_TBS_DATA 588 +# define SSL_F_NSS_KEYLOG_INT 500 +# define SSL_F_OPENSSL_INIT_SSL 342 +# define SSL_F_OSSL_STATEM_CLIENT13_READ_TRANSITION 436 +# define SSL_F_OSSL_STATEM_CLIENT13_WRITE_TRANSITION 598 +# define SSL_F_OSSL_STATEM_CLIENT_CONSTRUCT_MESSAGE 430 +# define SSL_F_OSSL_STATEM_CLIENT_POST_PROCESS_MESSAGE 593 +# define SSL_F_OSSL_STATEM_CLIENT_PROCESS_MESSAGE 594 +# define SSL_F_OSSL_STATEM_CLIENT_READ_TRANSITION 417 +# define SSL_F_OSSL_STATEM_CLIENT_WRITE_TRANSITION 599 +# define SSL_F_OSSL_STATEM_SERVER13_READ_TRANSITION 437 +# define SSL_F_OSSL_STATEM_SERVER13_WRITE_TRANSITION 600 +# define SSL_F_OSSL_STATEM_SERVER_CONSTRUCT_MESSAGE 431 +# define SSL_F_OSSL_STATEM_SERVER_POST_PROCESS_MESSAGE 601 +# define SSL_F_OSSL_STATEM_SERVER_POST_WORK 602 +# define SSL_F_OSSL_STATEM_SERVER_PRE_WORK 640 +# define SSL_F_OSSL_STATEM_SERVER_PROCESS_MESSAGE 603 +# define SSL_F_OSSL_STATEM_SERVER_READ_TRANSITION 418 +# define SSL_F_OSSL_STATEM_SERVER_WRITE_TRANSITION 604 +# define SSL_F_PARSE_CA_NAMES 541 +# define SSL_F_PITEM_NEW 624 +# define SSL_F_PQUEUE_NEW 625 +# define SSL_F_PROCESS_KEY_SHARE_EXT 439 +# define SSL_F_READ_STATE_MACHINE 352 +# define SSL_F_SET_CLIENT_CIPHERSUITE 540 +# define SSL_F_SRP_GENERATE_CLIENT_MASTER_SECRET 595 +# define SSL_F_SRP_GENERATE_SERVER_MASTER_SECRET 589 +# define SSL_F_SRP_VERIFY_SERVER_PARAM 596 +# define SSL_F_SSL3_CHANGE_CIPHER_STATE 129 +# define SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM 130 +# define SSL_F_SSL3_CTRL 213 +# define SSL_F_SSL3_CTX_CTRL 133 +# define SSL_F_SSL3_DIGEST_CACHED_RECORDS 293 +# define SSL_F_SSL3_DO_CHANGE_CIPHER_SPEC 292 +# define SSL_F_SSL3_ENC 608 +# define SSL_F_SSL3_FINAL_FINISH_MAC 285 +# define SSL_F_SSL3_FINISH_MAC 587 +# define SSL_F_SSL3_GENERATE_KEY_BLOCK 238 +# define SSL_F_SSL3_GENERATE_MASTER_SECRET 388 +# define SSL_F_SSL3_GET_RECORD 143 +# define SSL_F_SSL3_INIT_FINISHED_MAC 397 +# define SSL_F_SSL3_OUTPUT_CERT_CHAIN 147 +# define SSL_F_SSL3_READ_BYTES 148 +# define SSL_F_SSL3_READ_N 149 +# define SSL_F_SSL3_SETUP_KEY_BLOCK 157 +# define SSL_F_SSL3_SETUP_READ_BUFFER 156 +# define SSL_F_SSL3_SETUP_WRITE_BUFFER 291 +# define SSL_F_SSL3_WRITE_BYTES 158 +# define SSL_F_SSL3_WRITE_PENDING 159 +# define SSL_F_SSL_ADD_CERT_CHAIN 316 +# define SSL_F_SSL_ADD_CERT_TO_BUF 319 +# define SSL_F_SSL_ADD_CERT_TO_WPACKET 493 +# define SSL_F_SSL_ADD_CLIENTHELLO_RENEGOTIATE_EXT 298 +# define SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT 277 +# define SSL_F_SSL_ADD_CLIENTHELLO_USE_SRTP_EXT 307 +# define SSL_F_SSL_ADD_DIR_CERT_SUBJECTS_TO_STACK 215 +# define SSL_F_SSL_ADD_FILE_CERT_SUBJECTS_TO_STACK 216 +# define SSL_F_SSL_ADD_SERVERHELLO_RENEGOTIATE_EXT 299 +# define SSL_F_SSL_ADD_SERVERHELLO_TLSEXT 278 +# define SSL_F_SSL_ADD_SERVERHELLO_USE_SRTP_EXT 308 +# define SSL_F_SSL_BAD_METHOD 160 +# define SSL_F_SSL_BUILD_CERT_CHAIN 332 +# define SSL_F_SSL_BYTES_TO_CIPHER_LIST 161 +# define SSL_F_SSL_CACHE_CIPHERLIST 520 +# define SSL_F_SSL_CERT_ADD0_CHAIN_CERT 346 +# define SSL_F_SSL_CERT_DUP 221 +# define SSL_F_SSL_CERT_NEW 162 +# define SSL_F_SSL_CERT_SET0_CHAIN 340 +# define SSL_F_SSL_CHECK_PRIVATE_KEY 163 +# define SSL_F_SSL_CHECK_SERVERHELLO_TLSEXT 280 +# define SSL_F_SSL_CHECK_SRP_EXT_CLIENTHELLO 606 +# define SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG 279 +# define SSL_F_SSL_CHOOSE_CLIENT_VERSION 607 +# define SSL_F_SSL_CIPHER_DESCRIPTION 626 +# define SSL_F_SSL_CIPHER_LIST_TO_BYTES 425 +# define SSL_F_SSL_CIPHER_PROCESS_RULESTR 230 +# define SSL_F_SSL_CIPHER_STRENGTH_SORT 231 +# define SSL_F_SSL_CLEAR 164 +# define SSL_F_SSL_CLIENT_HELLO_GET1_EXTENSIONS_PRESENT 627 +# define SSL_F_SSL_COMP_ADD_COMPRESSION_METHOD 165 +# define SSL_F_SSL_CONF_CMD 334 +# define SSL_F_SSL_CREATE_CIPHER_LIST 166 +# define SSL_F_SSL_CTRL 232 +# define SSL_F_SSL_CTX_CHECK_PRIVATE_KEY 168 +# define SSL_F_SSL_CTX_ENABLE_CT 398 +# define SSL_F_SSL_CTX_MAKE_PROFILES 309 +# define SSL_F_SSL_CTX_NEW 169 +# define SSL_F_SSL_CTX_SET_ALPN_PROTOS 343 +# define SSL_F_SSL_CTX_SET_CIPHER_LIST 269 +# define SSL_F_SSL_CTX_SET_CLIENT_CERT_ENGINE 290 +# define SSL_F_SSL_CTX_SET_CT_VALIDATION_CALLBACK 396 +# define SSL_F_SSL_CTX_SET_SESSION_ID_CONTEXT 219 +# define SSL_F_SSL_CTX_SET_SSL_VERSION 170 +# define SSL_F_SSL_CTX_SET_TLSEXT_MAX_FRAGMENT_LENGTH 551 +# define SSL_F_SSL_CTX_USE_CERTIFICATE 171 +# define SSL_F_SSL_CTX_USE_CERTIFICATE_ASN1 172 +# define SSL_F_SSL_CTX_USE_CERTIFICATE_FILE 173 +# define SSL_F_SSL_CTX_USE_PRIVATEKEY 174 +# define SSL_F_SSL_CTX_USE_PRIVATEKEY_ASN1 175 +# define SSL_F_SSL_CTX_USE_PRIVATEKEY_FILE 176 +# define SSL_F_SSL_CTX_USE_PSK_IDENTITY_HINT 272 +# define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY 177 +# define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_ASN1 178 +# define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_FILE 179 +# define SSL_F_SSL_CTX_USE_SERVERINFO 336 +# define SSL_F_SSL_CTX_USE_SERVERINFO_EX 543 +# define SSL_F_SSL_CTX_USE_SERVERINFO_FILE 337 +# define SSL_F_SSL_DANE_DUP 403 +# define SSL_F_SSL_DANE_ENABLE 395 +# define SSL_F_SSL_DERIVE 590 +# define SSL_F_SSL_DO_CONFIG 391 +# define SSL_F_SSL_DO_HANDSHAKE 180 +# define SSL_F_SSL_DUP_CA_LIST 408 +# define SSL_F_SSL_ENABLE_CT 402 +# define SSL_F_SSL_GENERATE_PKEY_GROUP 559 +# define SSL_F_SSL_GENERATE_SESSION_ID 547 +# define SSL_F_SSL_GET_NEW_SESSION 181 +# define SSL_F_SSL_GET_PREV_SESSION 217 +# define SSL_F_SSL_GET_SERVER_CERT_INDEX 322 +# define SSL_F_SSL_GET_SIGN_PKEY 183 +# define SSL_F_SSL_HANDSHAKE_HASH 560 +# define SSL_F_SSL_INIT_WBIO_BUFFER 184 +# define SSL_F_SSL_KEY_UPDATE 515 +# define SSL_F_SSL_LOAD_CLIENT_CA_FILE 185 +# define SSL_F_SSL_LOG_MASTER_SECRET 498 +# define SSL_F_SSL_LOG_RSA_CLIENT_KEY_EXCHANGE 499 +# define SSL_F_SSL_MODULE_INIT 392 +# define SSL_F_SSL_NEW 186 +# define SSL_F_SSL_NEXT_PROTO_VALIDATE 565 +# define SSL_F_SSL_PARSE_CLIENTHELLO_RENEGOTIATE_EXT 300 +# define SSL_F_SSL_PARSE_CLIENTHELLO_TLSEXT 302 +# define SSL_F_SSL_PARSE_CLIENTHELLO_USE_SRTP_EXT 310 +# define SSL_F_SSL_PARSE_SERVERHELLO_RENEGOTIATE_EXT 301 +# define SSL_F_SSL_PARSE_SERVERHELLO_TLSEXT 303 +# define SSL_F_SSL_PARSE_SERVERHELLO_USE_SRTP_EXT 311 +# define SSL_F_SSL_PEEK 270 +# define SSL_F_SSL_PEEK_EX 432 +# define SSL_F_SSL_PEEK_INTERNAL 522 +# define SSL_F_SSL_READ 223 +# define SSL_F_SSL_READ_EARLY_DATA 529 +# define SSL_F_SSL_READ_EX 434 +# define SSL_F_SSL_READ_INTERNAL 523 +# define SSL_F_SSL_RENEGOTIATE 516 +# define SSL_F_SSL_RENEGOTIATE_ABBREVIATED 546 +# define SSL_F_SSL_SCAN_CLIENTHELLO_TLSEXT 320 +# define SSL_F_SSL_SCAN_SERVERHELLO_TLSEXT 321 +# define SSL_F_SSL_SESSION_DUP 348 +# define SSL_F_SSL_SESSION_NEW 189 +# define SSL_F_SSL_SESSION_PRINT_FP 190 +# define SSL_F_SSL_SESSION_SET1_ID 423 +# define SSL_F_SSL_SESSION_SET1_ID_CONTEXT 312 +# define SSL_F_SSL_SET_ALPN_PROTOS 344 +# define SSL_F_SSL_SET_CERT 191 +# define SSL_F_SSL_SET_CERT_AND_KEY 621 +# define SSL_F_SSL_SET_CIPHER_LIST 271 +# define SSL_F_SSL_SET_CT_VALIDATION_CALLBACK 399 +# define SSL_F_SSL_SET_FD 192 +# define SSL_F_SSL_SET_PKEY 193 +# define SSL_F_SSL_SET_RFD 194 +# define SSL_F_SSL_SET_SESSION 195 +# define SSL_F_SSL_SET_SESSION_ID_CONTEXT 218 +# define SSL_F_SSL_SET_SESSION_TICKET_EXT 294 +# define SSL_F_SSL_SET_TLSEXT_MAX_FRAGMENT_LENGTH 550 +# define SSL_F_SSL_SET_WFD 196 +# define SSL_F_SSL_SHUTDOWN 224 +# define SSL_F_SSL_SRP_CTX_INIT 313 +# define SSL_F_SSL_START_ASYNC_JOB 389 +# define SSL_F_SSL_UNDEFINED_FUNCTION 197 +# define SSL_F_SSL_UNDEFINED_VOID_FUNCTION 244 +# define SSL_F_SSL_USE_CERTIFICATE 198 +# define SSL_F_SSL_USE_CERTIFICATE_ASN1 199 +# define SSL_F_SSL_USE_CERTIFICATE_FILE 200 +# define SSL_F_SSL_USE_PRIVATEKEY 201 +# define SSL_F_SSL_USE_PRIVATEKEY_ASN1 202 +# define SSL_F_SSL_USE_PRIVATEKEY_FILE 203 +# define SSL_F_SSL_USE_PSK_IDENTITY_HINT 273 +# define SSL_F_SSL_USE_RSAPRIVATEKEY 204 +# define SSL_F_SSL_USE_RSAPRIVATEKEY_ASN1 205 +# define SSL_F_SSL_USE_RSAPRIVATEKEY_FILE 206 +# define SSL_F_SSL_VALIDATE_CT 400 +# define SSL_F_SSL_VERIFY_CERT_CHAIN 207 +# define SSL_F_SSL_VERIFY_CLIENT_POST_HANDSHAKE 616 +# define SSL_F_SSL_WRITE 208 +# define SSL_F_SSL_WRITE_EARLY_DATA 526 +# define SSL_F_SSL_WRITE_EARLY_FINISH 527 +# define SSL_F_SSL_WRITE_EX 433 +# define SSL_F_SSL_WRITE_INTERNAL 524 +# define SSL_F_STATE_MACHINE 353 +# define SSL_F_TLS12_CHECK_PEER_SIGALG 333 +# define SSL_F_TLS12_COPY_SIGALGS 533 +# define SSL_F_TLS13_CHANGE_CIPHER_STATE 440 +# define SSL_F_TLS13_ENC 609 +# define SSL_F_TLS13_FINAL_FINISH_MAC 605 +# define SSL_F_TLS13_GENERATE_SECRET 591 +# define SSL_F_TLS13_HKDF_EXPAND 561 +# define SSL_F_TLS13_RESTORE_HANDSHAKE_DIGEST_FOR_PHA 617 +# define SSL_F_TLS13_SAVE_HANDSHAKE_DIGEST_FOR_PHA 618 +# define SSL_F_TLS13_SETUP_KEY_BLOCK 441 +# define SSL_F_TLS1_CHANGE_CIPHER_STATE 209 +# define SSL_F_TLS1_CHECK_DUPLICATE_EXTENSIONS 341 +# define SSL_F_TLS1_ENC 401 +# define SSL_F_TLS1_EXPORT_KEYING_MATERIAL 314 +# define SSL_F_TLS1_GET_CURVELIST 338 +# define SSL_F_TLS1_PRF 284 +# define SSL_F_TLS1_SAVE_U16 628 +# define SSL_F_TLS1_SETUP_KEY_BLOCK 211 +# define SSL_F_TLS1_SET_GROUPS 629 +# define SSL_F_TLS1_SET_RAW_SIGALGS 630 +# define SSL_F_TLS1_SET_SERVER_SIGALGS 335 +# define SSL_F_TLS1_SET_SHARED_SIGALGS 631 +# define SSL_F_TLS1_SET_SIGALGS 632 +# define SSL_F_TLS_CHOOSE_SIGALG 513 +# define SSL_F_TLS_CLIENT_KEY_EXCHANGE_POST_WORK 354 +# define SSL_F_TLS_COLLECT_EXTENSIONS 435 +# define SSL_F_TLS_CONSTRUCT_CERTIFICATE_AUTHORITIES 542 +# define SSL_F_TLS_CONSTRUCT_CERTIFICATE_REQUEST 372 +# define SSL_F_TLS_CONSTRUCT_CERT_STATUS 429 +# define SSL_F_TLS_CONSTRUCT_CERT_STATUS_BODY 494 +# define SSL_F_TLS_CONSTRUCT_CERT_VERIFY 496 +# define SSL_F_TLS_CONSTRUCT_CHANGE_CIPHER_SPEC 427 +# define SSL_F_TLS_CONSTRUCT_CKE_DHE 404 +# define SSL_F_TLS_CONSTRUCT_CKE_ECDHE 405 +# define SSL_F_TLS_CONSTRUCT_CKE_GOST 406 +# define SSL_F_TLS_CONSTRUCT_CKE_PSK_PREAMBLE 407 +# define SSL_F_TLS_CONSTRUCT_CKE_RSA 409 +# define SSL_F_TLS_CONSTRUCT_CKE_SRP 410 +# define SSL_F_TLS_CONSTRUCT_CLIENT_CERTIFICATE 484 +# define SSL_F_TLS_CONSTRUCT_CLIENT_HELLO 487 +# define SSL_F_TLS_CONSTRUCT_CLIENT_KEY_EXCHANGE 488 +# define SSL_F_TLS_CONSTRUCT_CLIENT_VERIFY 489 +# define SSL_F_TLS_CONSTRUCT_CTOS_ALPN 466 +# define SSL_F_TLS_CONSTRUCT_CTOS_CERTIFICATE 355 +# define SSL_F_TLS_CONSTRUCT_CTOS_COOKIE 535 +# define SSL_F_TLS_CONSTRUCT_CTOS_EARLY_DATA 530 +# define SSL_F_TLS_CONSTRUCT_CTOS_EC_PT_FORMATS 467 +# define SSL_F_TLS_CONSTRUCT_CTOS_EMS 468 +# define SSL_F_TLS_CONSTRUCT_CTOS_ETM 469 +# define SSL_F_TLS_CONSTRUCT_CTOS_HELLO 356 +# define SSL_F_TLS_CONSTRUCT_CTOS_KEY_EXCHANGE 357 +# define SSL_F_TLS_CONSTRUCT_CTOS_KEY_SHARE 470 +# define SSL_F_TLS_CONSTRUCT_CTOS_MAXFRAGMENTLEN 549 +# define SSL_F_TLS_CONSTRUCT_CTOS_NPN 471 +# define SSL_F_TLS_CONSTRUCT_CTOS_PADDING 472 +# define SSL_F_TLS_CONSTRUCT_CTOS_POST_HANDSHAKE_AUTH 619 +# define SSL_F_TLS_CONSTRUCT_CTOS_PSK 501 +# define SSL_F_TLS_CONSTRUCT_CTOS_PSK_KEX_MODES 509 +# define SSL_F_TLS_CONSTRUCT_CTOS_RENEGOTIATE 473 +# define SSL_F_TLS_CONSTRUCT_CTOS_SCT 474 +# define SSL_F_TLS_CONSTRUCT_CTOS_SERVER_NAME 475 +# define SSL_F_TLS_CONSTRUCT_CTOS_SESSION_TICKET 476 +# define SSL_F_TLS_CONSTRUCT_CTOS_SIG_ALGS 477 +# define SSL_F_TLS_CONSTRUCT_CTOS_SRP 478 +# define SSL_F_TLS_CONSTRUCT_CTOS_STATUS_REQUEST 479 +# define SSL_F_TLS_CONSTRUCT_CTOS_SUPPORTED_GROUPS 480 +# define SSL_F_TLS_CONSTRUCT_CTOS_SUPPORTED_VERSIONS 481 +# define SSL_F_TLS_CONSTRUCT_CTOS_USE_SRTP 482 +# define SSL_F_TLS_CONSTRUCT_CTOS_VERIFY 358 +# define SSL_F_TLS_CONSTRUCT_ENCRYPTED_EXTENSIONS 443 +# define SSL_F_TLS_CONSTRUCT_END_OF_EARLY_DATA 536 +# define SSL_F_TLS_CONSTRUCT_EXTENSIONS 447 +# define SSL_F_TLS_CONSTRUCT_FINISHED 359 +# define SSL_F_TLS_CONSTRUCT_HELLO_REQUEST 373 +# define SSL_F_TLS_CONSTRUCT_HELLO_RETRY_REQUEST 510 +# define SSL_F_TLS_CONSTRUCT_KEY_UPDATE 517 +# define SSL_F_TLS_CONSTRUCT_NEW_SESSION_TICKET 428 +# define SSL_F_TLS_CONSTRUCT_NEXT_PROTO 426 +# define SSL_F_TLS_CONSTRUCT_SERVER_CERTIFICATE 490 +# define SSL_F_TLS_CONSTRUCT_SERVER_HELLO 491 +# define SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE 492 +# define SSL_F_TLS_CONSTRUCT_STOC_ALPN 451 +# define SSL_F_TLS_CONSTRUCT_STOC_CERTIFICATE 374 +# define SSL_F_TLS_CONSTRUCT_STOC_COOKIE 613 +# define SSL_F_TLS_CONSTRUCT_STOC_CRYPTOPRO_BUG 452 +# define SSL_F_TLS_CONSTRUCT_STOC_DONE 375 +# define SSL_F_TLS_CONSTRUCT_STOC_EARLY_DATA 531 +# define SSL_F_TLS_CONSTRUCT_STOC_EARLY_DATA_INFO 525 +# define SSL_F_TLS_CONSTRUCT_STOC_EC_PT_FORMATS 453 +# define SSL_F_TLS_CONSTRUCT_STOC_EMS 454 +# define SSL_F_TLS_CONSTRUCT_STOC_ETM 455 +# define SSL_F_TLS_CONSTRUCT_STOC_HELLO 376 +# define SSL_F_TLS_CONSTRUCT_STOC_KEY_EXCHANGE 377 +# define SSL_F_TLS_CONSTRUCT_STOC_KEY_SHARE 456 +# define SSL_F_TLS_CONSTRUCT_STOC_MAXFRAGMENTLEN 548 +# define SSL_F_TLS_CONSTRUCT_STOC_NEXT_PROTO_NEG 457 +# define SSL_F_TLS_CONSTRUCT_STOC_PSK 504 +# define SSL_F_TLS_CONSTRUCT_STOC_RENEGOTIATE 458 +# define SSL_F_TLS_CONSTRUCT_STOC_SERVER_NAME 459 +# define SSL_F_TLS_CONSTRUCT_STOC_SESSION_TICKET 460 +# define SSL_F_TLS_CONSTRUCT_STOC_STATUS_REQUEST 461 +# define SSL_F_TLS_CONSTRUCT_STOC_SUPPORTED_GROUPS 544 +# define SSL_F_TLS_CONSTRUCT_STOC_SUPPORTED_VERSIONS 611 +# define SSL_F_TLS_CONSTRUCT_STOC_USE_SRTP 462 +# define SSL_F_TLS_EARLY_POST_PROCESS_CLIENT_HELLO 521 +# define SSL_F_TLS_FINISH_HANDSHAKE 597 +# define SSL_F_TLS_GET_MESSAGE_BODY 351 +# define SSL_F_TLS_GET_MESSAGE_HEADER 387 +# define SSL_F_TLS_HANDLE_ALPN 562 +# define SSL_F_TLS_HANDLE_STATUS_REQUEST 563 +# define SSL_F_TLS_PARSE_CERTIFICATE_AUTHORITIES 566 +# define SSL_F_TLS_PARSE_CLIENTHELLO_TLSEXT 449 +# define SSL_F_TLS_PARSE_CTOS_ALPN 567 +# define SSL_F_TLS_PARSE_CTOS_COOKIE 614 +# define SSL_F_TLS_PARSE_CTOS_EARLY_DATA 568 +# define SSL_F_TLS_PARSE_CTOS_EC_PT_FORMATS 569 +# define SSL_F_TLS_PARSE_CTOS_EMS 570 +# define SSL_F_TLS_PARSE_CTOS_KEY_SHARE 463 +# define SSL_F_TLS_PARSE_CTOS_MAXFRAGMENTLEN 571 +# define SSL_F_TLS_PARSE_CTOS_POST_HANDSHAKE_AUTH 620 +# define SSL_F_TLS_PARSE_CTOS_PSK 505 +# define SSL_F_TLS_PARSE_CTOS_PSK_KEX_MODES 572 +# define SSL_F_TLS_PARSE_CTOS_RENEGOTIATE 464 +# define SSL_F_TLS_PARSE_CTOS_SERVER_NAME 573 +# define SSL_F_TLS_PARSE_CTOS_SESSION_TICKET 574 +# define SSL_F_TLS_PARSE_CTOS_SIG_ALGS 575 +# define SSL_F_TLS_PARSE_CTOS_SIG_ALGS_CERT 615 +# define SSL_F_TLS_PARSE_CTOS_SRP 576 +# define SSL_F_TLS_PARSE_CTOS_STATUS_REQUEST 577 +# define SSL_F_TLS_PARSE_CTOS_SUPPORTED_GROUPS 578 +# define SSL_F_TLS_PARSE_CTOS_USE_SRTP 465 +# define SSL_F_TLS_PARSE_STOC_ALPN 579 +# define SSL_F_TLS_PARSE_STOC_COOKIE 534 +# define SSL_F_TLS_PARSE_STOC_EARLY_DATA 538 +# define SSL_F_TLS_PARSE_STOC_EARLY_DATA_INFO 528 +# define SSL_F_TLS_PARSE_STOC_EC_PT_FORMATS 580 +# define SSL_F_TLS_PARSE_STOC_KEY_SHARE 445 +# define SSL_F_TLS_PARSE_STOC_MAXFRAGMENTLEN 581 +# define SSL_F_TLS_PARSE_STOC_NPN 582 +# define SSL_F_TLS_PARSE_STOC_PSK 502 +# define SSL_F_TLS_PARSE_STOC_RENEGOTIATE 448 +# define SSL_F_TLS_PARSE_STOC_SCT 564 +# define SSL_F_TLS_PARSE_STOC_SERVER_NAME 583 +# define SSL_F_TLS_PARSE_STOC_SESSION_TICKET 584 +# define SSL_F_TLS_PARSE_STOC_STATUS_REQUEST 585 +# define SSL_F_TLS_PARSE_STOC_SUPPORTED_VERSIONS 612 +# define SSL_F_TLS_PARSE_STOC_USE_SRTP 446 +# define SSL_F_TLS_POST_PROCESS_CLIENT_HELLO 378 +# define SSL_F_TLS_POST_PROCESS_CLIENT_KEY_EXCHANGE 384 +# define SSL_F_TLS_PREPARE_CLIENT_CERTIFICATE 360 +# define SSL_F_TLS_PROCESS_AS_HELLO_RETRY_REQUEST 610 +# define SSL_F_TLS_PROCESS_CERTIFICATE_REQUEST 361 +# define SSL_F_TLS_PROCESS_CERT_STATUS 362 +# define SSL_F_TLS_PROCESS_CERT_STATUS_BODY 495 +# define SSL_F_TLS_PROCESS_CERT_VERIFY 379 +# define SSL_F_TLS_PROCESS_CHANGE_CIPHER_SPEC 363 +# define SSL_F_TLS_PROCESS_CKE_DHE 411 +# define SSL_F_TLS_PROCESS_CKE_ECDHE 412 +# define SSL_F_TLS_PROCESS_CKE_GOST 413 +# define SSL_F_TLS_PROCESS_CKE_PSK_PREAMBLE 414 +# define SSL_F_TLS_PROCESS_CKE_RSA 415 +# define SSL_F_TLS_PROCESS_CKE_SRP 416 +# define SSL_F_TLS_PROCESS_CLIENT_CERTIFICATE 380 +# define SSL_F_TLS_PROCESS_CLIENT_HELLO 381 +# define SSL_F_TLS_PROCESS_CLIENT_KEY_EXCHANGE 382 +# define SSL_F_TLS_PROCESS_ENCRYPTED_EXTENSIONS 444 +# define SSL_F_TLS_PROCESS_END_OF_EARLY_DATA 537 +# define SSL_F_TLS_PROCESS_FINISHED 364 +# define SSL_F_TLS_PROCESS_HELLO_REQ 507 +# define SSL_F_TLS_PROCESS_HELLO_RETRY_REQUEST 511 +# define SSL_F_TLS_PROCESS_INITIAL_SERVER_FLIGHT 442 +# define SSL_F_TLS_PROCESS_KEY_EXCHANGE 365 +# define SSL_F_TLS_PROCESS_KEY_UPDATE 518 +# define SSL_F_TLS_PROCESS_NEW_SESSION_TICKET 366 +# define SSL_F_TLS_PROCESS_NEXT_PROTO 383 +# define SSL_F_TLS_PROCESS_SERVER_CERTIFICATE 367 +# define SSL_F_TLS_PROCESS_SERVER_DONE 368 +# define SSL_F_TLS_PROCESS_SERVER_HELLO 369 +# define SSL_F_TLS_PROCESS_SKE_DHE 419 +# define SSL_F_TLS_PROCESS_SKE_ECDHE 420 +# define SSL_F_TLS_PROCESS_SKE_PSK_PREAMBLE 421 +# define SSL_F_TLS_PROCESS_SKE_SRP 422 +# define SSL_F_TLS_PSK_DO_BINDER 506 +# define SSL_F_TLS_SCAN_CLIENTHELLO_TLSEXT 450 +# define SSL_F_TLS_SETUP_HANDSHAKE 508 +# define SSL_F_USE_CERTIFICATE_CHAIN_FILE 220 +# define SSL_F_WPACKET_INTERN_INIT_LEN 633 +# define SSL_F_WPACKET_START_SUB_PACKET_LEN__ 634 +# define SSL_F_WRITE_STATE_MACHINE 586 + +/* + * SSL reason codes. + */ +# define SSL_R_APPLICATION_DATA_AFTER_CLOSE_NOTIFY 291 +# define SSL_R_APP_DATA_IN_HANDSHAKE 100 +# define SSL_R_ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT 272 +# define SSL_R_AT_LEAST_TLS_1_0_NEEDED_IN_FIPS_MODE 143 +# define SSL_R_AT_LEAST_TLS_1_2_NEEDED_IN_SUITEB_MODE 158 +# define SSL_R_BAD_CHANGE_CIPHER_SPEC 103 +# define SSL_R_BAD_CIPHER 186 +# define SSL_R_BAD_DATA 390 +# define SSL_R_BAD_DATA_RETURNED_BY_CALLBACK 106 +# define SSL_R_BAD_DECOMPRESSION 107 +# define SSL_R_BAD_DH_VALUE 102 +# define SSL_R_BAD_DIGEST_LENGTH 111 +# define SSL_R_BAD_EARLY_DATA 233 +# define SSL_R_BAD_ECC_CERT 304 +# define SSL_R_BAD_ECPOINT 306 +# define SSL_R_BAD_EXTENSION 110 +# define SSL_R_BAD_HANDSHAKE_LENGTH 332 +# define SSL_R_BAD_HANDSHAKE_STATE 236 +# define SSL_R_BAD_HELLO_REQUEST 105 +# define SSL_R_BAD_HRR_VERSION 263 +# define SSL_R_BAD_KEY_SHARE 108 +# define SSL_R_BAD_KEY_UPDATE 122 +# define SSL_R_BAD_LEGACY_VERSION 292 +# define SSL_R_BAD_LENGTH 271 +# define SSL_R_BAD_PACKET 240 +# define SSL_R_BAD_PACKET_LENGTH 115 +# define SSL_R_BAD_PROTOCOL_VERSION_NUMBER 116 +# define SSL_R_BAD_PSK 219 +# define SSL_R_BAD_PSK_IDENTITY 114 +# define SSL_R_BAD_RECORD_TYPE 443 +# define SSL_R_BAD_RSA_ENCRYPT 119 +# define SSL_R_BAD_SIGNATURE 123 +# define SSL_R_BAD_SRP_A_LENGTH 347 +# define SSL_R_BAD_SRP_PARAMETERS 371 +# define SSL_R_BAD_SRTP_MKI_VALUE 352 +# define SSL_R_BAD_SRTP_PROTECTION_PROFILE_LIST 353 +# define SSL_R_BAD_SSL_FILETYPE 124 +# define SSL_R_BAD_VALUE 384 +# define SSL_R_BAD_WRITE_RETRY 127 +# define SSL_R_BINDER_DOES_NOT_VERIFY 253 +# define SSL_R_BIO_NOT_SET 128 +# define SSL_R_BLOCK_CIPHER_PAD_IS_WRONG 129 +# define SSL_R_BN_LIB 130 +# define SSL_R_CALLBACK_FAILED 234 +# define SSL_R_CANNOT_CHANGE_CIPHER 109 +# define SSL_R_CA_DN_LENGTH_MISMATCH 131 +# define SSL_R_CA_KEY_TOO_SMALL 397 +# define SSL_R_CA_MD_TOO_WEAK 398 +# define SSL_R_CCS_RECEIVED_EARLY 133 +# define SSL_R_CERTIFICATE_VERIFY_FAILED 134 +# define SSL_R_CERT_CB_ERROR 377 +# define SSL_R_CERT_LENGTH_MISMATCH 135 +# define SSL_R_CIPHERSUITE_DIGEST_HAS_CHANGED 218 +# define SSL_R_CIPHER_CODE_WRONG_LENGTH 137 +# define SSL_R_CIPHER_OR_HASH_UNAVAILABLE 138 +# define SSL_R_CLIENTHELLO_TLSEXT 226 +# define SSL_R_COMPRESSED_LENGTH_TOO_LONG 140 +# define SSL_R_COMPRESSION_DISABLED 343 +# define SSL_R_COMPRESSION_FAILURE 141 +# define SSL_R_COMPRESSION_ID_NOT_WITHIN_PRIVATE_RANGE 307 +# define SSL_R_COMPRESSION_LIBRARY_ERROR 142 +# define SSL_R_CONNECTION_TYPE_NOT_SET 144 +# define SSL_R_CONTEXT_NOT_DANE_ENABLED 167 +# define SSL_R_COOKIE_GEN_CALLBACK_FAILURE 400 +# define SSL_R_COOKIE_MISMATCH 308 +# define SSL_R_CUSTOM_EXT_HANDLER_ALREADY_INSTALLED 206 +# define SSL_R_DANE_ALREADY_ENABLED 172 +# define SSL_R_DANE_CANNOT_OVERRIDE_MTYPE_FULL 173 +# define SSL_R_DANE_NOT_ENABLED 175 +# define SSL_R_DANE_TLSA_BAD_CERTIFICATE 180 +# define SSL_R_DANE_TLSA_BAD_CERTIFICATE_USAGE 184 +# define SSL_R_DANE_TLSA_BAD_DATA_LENGTH 189 +# define SSL_R_DANE_TLSA_BAD_DIGEST_LENGTH 192 +# define SSL_R_DANE_TLSA_BAD_MATCHING_TYPE 200 +# define SSL_R_DANE_TLSA_BAD_PUBLIC_KEY 201 +# define SSL_R_DANE_TLSA_BAD_SELECTOR 202 +# define SSL_R_DANE_TLSA_NULL_DATA 203 +# define SSL_R_DATA_BETWEEN_CCS_AND_FINISHED 145 +# define SSL_R_DATA_LENGTH_TOO_LONG 146 +# define SSL_R_DECRYPTION_FAILED 147 +# define SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC 281 +# define SSL_R_DH_KEY_TOO_SMALL 394 +# define SSL_R_DH_PUBLIC_VALUE_LENGTH_IS_WRONG 148 +# define SSL_R_DIGEST_CHECK_FAILED 149 +# define SSL_R_DTLS_MESSAGE_TOO_BIG 334 +# define SSL_R_DUPLICATE_COMPRESSION_ID 309 +# define SSL_R_ECC_CERT_NOT_FOR_SIGNING 318 +# define SSL_R_ECDH_REQUIRED_FOR_SUITEB_MODE 374 +# define SSL_R_EE_KEY_TOO_SMALL 399 +# define SSL_R_EMPTY_SRTP_PROTECTION_PROFILE_LIST 354 +# define SSL_R_ENCRYPTED_LENGTH_TOO_LONG 150 +# define SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST 151 +# define SSL_R_ERROR_SETTING_TLSA_BASE_DOMAIN 204 +# define SSL_R_EXCEEDS_MAX_FRAGMENT_SIZE 194 +# define SSL_R_EXCESSIVE_MESSAGE_SIZE 152 +# define SSL_R_EXTENSION_NOT_RECEIVED 279 +# define SSL_R_EXTRA_DATA_IN_MESSAGE 153 +# define SSL_R_EXT_LENGTH_MISMATCH 163 +# define SSL_R_FAILED_TO_INIT_ASYNC 405 +# define SSL_R_FRAGMENTED_CLIENT_HELLO 401 +# define SSL_R_GOT_A_FIN_BEFORE_A_CCS 154 +# define SSL_R_HTTPS_PROXY_REQUEST 155 +# define SSL_R_HTTP_REQUEST 156 +# define SSL_R_ILLEGAL_POINT_COMPRESSION 162 +# define SSL_R_ILLEGAL_SUITEB_DIGEST 380 +# define SSL_R_INAPPROPRIATE_FALLBACK 373 +# define SSL_R_INCONSISTENT_COMPRESSION 340 +# define SSL_R_INCONSISTENT_EARLY_DATA_ALPN 222 +# define SSL_R_INCONSISTENT_EARLY_DATA_SNI 231 +# define SSL_R_INCONSISTENT_EXTMS 104 +# define SSL_R_INSUFFICIENT_SECURITY 241 +# define SSL_R_INVALID_ALERT 205 +# define SSL_R_INVALID_CCS_MESSAGE 260 +# define SSL_R_INVALID_CERTIFICATE_OR_ALG 238 +# define SSL_R_INVALID_COMMAND 280 +# define SSL_R_INVALID_COMPRESSION_ALGORITHM 341 +# define SSL_R_INVALID_CONFIG 283 +# define SSL_R_INVALID_CONFIGURATION_NAME 113 +# define SSL_R_INVALID_CONTEXT 282 +# define SSL_R_INVALID_CT_VALIDATION_TYPE 212 +# define SSL_R_INVALID_KEY_UPDATE_TYPE 120 +# define SSL_R_INVALID_MAX_EARLY_DATA 174 +# define SSL_R_INVALID_NULL_CMD_NAME 385 +# define SSL_R_INVALID_SEQUENCE_NUMBER 402 +# define SSL_R_INVALID_SERVERINFO_DATA 388 +# define SSL_R_INVALID_SESSION_ID 999 +# define SSL_R_INVALID_SRP_USERNAME 357 +# define SSL_R_INVALID_STATUS_RESPONSE 328 +# define SSL_R_INVALID_TICKET_KEYS_LENGTH 325 +# define SSL_R_LENGTH_MISMATCH 159 +# define SSL_R_LENGTH_TOO_LONG 404 +# define SSL_R_LENGTH_TOO_SHORT 160 +# define SSL_R_LIBRARY_BUG 274 +# define SSL_R_LIBRARY_HAS_NO_CIPHERS 161 +# define SSL_R_MISSING_DSA_SIGNING_CERT 165 +# define SSL_R_MISSING_ECDSA_SIGNING_CERT 381 +# define SSL_R_MISSING_FATAL 256 +# define SSL_R_MISSING_PARAMETERS 290 +# define SSL_R_MISSING_RSA_CERTIFICATE 168 +# define SSL_R_MISSING_RSA_ENCRYPTING_CERT 169 +# define SSL_R_MISSING_RSA_SIGNING_CERT 170 +# define SSL_R_MISSING_SIGALGS_EXTENSION 112 +# define SSL_R_MISSING_SIGNING_CERT 221 +# define SSL_R_MISSING_SRP_PARAM 358 +# define SSL_R_MISSING_SUPPORTED_GROUPS_EXTENSION 209 +# define SSL_R_MISSING_TMP_DH_KEY 171 +# define SSL_R_MISSING_TMP_ECDH_KEY 311 +# define SSL_R_MIXED_HANDSHAKE_AND_NON_HANDSHAKE_DATA 293 +# define SSL_R_NOT_ON_RECORD_BOUNDARY 182 +# define SSL_R_NOT_REPLACING_CERTIFICATE 289 +# define SSL_R_NOT_SERVER 284 +# define SSL_R_NO_APPLICATION_PROTOCOL 235 +# define SSL_R_NO_CERTIFICATES_RETURNED 176 +# define SSL_R_NO_CERTIFICATE_ASSIGNED 177 +# define SSL_R_NO_CERTIFICATE_SET 179 +# define SSL_R_NO_CHANGE_FOLLOWING_HRR 214 +# define SSL_R_NO_CIPHERS_AVAILABLE 181 +# define SSL_R_NO_CIPHERS_SPECIFIED 183 +# define SSL_R_NO_CIPHER_MATCH 185 +# define SSL_R_NO_CLIENT_CERT_METHOD 331 +# define SSL_R_NO_COMPRESSION_SPECIFIED 187 +# define SSL_R_NO_COOKIE_CALLBACK_SET 287 +# define SSL_R_NO_GOST_CERTIFICATE_SENT_BY_PEER 330 +# define SSL_R_NO_METHOD_SPECIFIED 188 +# define SSL_R_NO_PEM_EXTENSIONS 389 +# define SSL_R_NO_PRIVATE_KEY_ASSIGNED 190 +# define SSL_R_NO_PROTOCOLS_AVAILABLE 191 +# define SSL_R_NO_RENEGOTIATION 339 +# define SSL_R_NO_REQUIRED_DIGEST 324 +# define SSL_R_NO_SHARED_CIPHER 193 +# define SSL_R_NO_SHARED_GROUPS 410 +# define SSL_R_NO_SHARED_SIGNATURE_ALGORITHMS 376 +# define SSL_R_NO_SRTP_PROFILES 359 +# define SSL_R_NO_SUITABLE_KEY_SHARE 101 +# define SSL_R_NO_SUITABLE_SIGNATURE_ALGORITHM 118 +# define SSL_R_NO_VALID_SCTS 216 +# define SSL_R_NO_VERIFY_COOKIE_CALLBACK 403 +# define SSL_R_NULL_SSL_CTX 195 +# define SSL_R_NULL_SSL_METHOD_PASSED 196 +# define SSL_R_OLD_SESSION_CIPHER_NOT_RETURNED 197 +# define SSL_R_OLD_SESSION_COMPRESSION_ALGORITHM_NOT_RETURNED 344 +# define SSL_R_OVERFLOW_ERROR 237 +# define SSL_R_PACKET_LENGTH_TOO_LONG 198 +# define SSL_R_PARSE_TLSEXT 227 +# define SSL_R_PATH_TOO_LONG 270 +# define SSL_R_PEER_DID_NOT_RETURN_A_CERTIFICATE 199 +# define SSL_R_PEM_NAME_BAD_PREFIX 391 +# define SSL_R_PEM_NAME_TOO_SHORT 392 +# define SSL_R_PIPELINE_FAILURE 406 +# define SSL_R_POST_HANDSHAKE_AUTH_ENCODING_ERR 278 +# define SSL_R_PRIVATE_KEY_MISMATCH 288 +# define SSL_R_PROTOCOL_IS_SHUTDOWN 207 +# define SSL_R_PSK_IDENTITY_NOT_FOUND 223 +# define SSL_R_PSK_NO_CLIENT_CB 224 +# define SSL_R_PSK_NO_SERVER_CB 225 +# define SSL_R_READ_BIO_NOT_SET 211 +# define SSL_R_READ_TIMEOUT_EXPIRED 312 +# define SSL_R_RECORD_LENGTH_MISMATCH 213 +# define SSL_R_RECORD_TOO_SMALL 298 +# define SSL_R_RENEGOTIATE_EXT_TOO_LONG 335 +# define SSL_R_RENEGOTIATION_ENCODING_ERR 336 +# define SSL_R_RENEGOTIATION_MISMATCH 337 +# define SSL_R_REQUEST_PENDING 285 +# define SSL_R_REQUEST_SENT 286 +# define SSL_R_REQUIRED_CIPHER_MISSING 215 +# define SSL_R_REQUIRED_COMPRESSION_ALGORITHM_MISSING 342 +# define SSL_R_SCSV_RECEIVED_WHEN_RENEGOTIATING 345 +# define SSL_R_SCT_VERIFICATION_FAILED 208 +# define SSL_R_SERVERHELLO_TLSEXT 275 +# define SSL_R_SESSION_ID_CONTEXT_UNINITIALIZED 277 +# define SSL_R_SHUTDOWN_WHILE_IN_INIT 407 +# define SSL_R_SIGNATURE_ALGORITHMS_ERROR 360 +# define SSL_R_SIGNATURE_FOR_NON_SIGNING_CERTIFICATE 220 +# define SSL_R_SRP_A_CALC 361 +# define SSL_R_SRTP_COULD_NOT_ALLOCATE_PROFILES 362 +# define SSL_R_SRTP_PROTECTION_PROFILE_LIST_TOO_LONG 363 +# define SSL_R_SRTP_UNKNOWN_PROTECTION_PROFILE 364 +# define SSL_R_SSL3_EXT_INVALID_MAX_FRAGMENT_LENGTH 232 +# define SSL_R_SSL3_EXT_INVALID_SERVERNAME 319 +# define SSL_R_SSL3_EXT_INVALID_SERVERNAME_TYPE 320 +# define SSL_R_SSL3_SESSION_ID_TOO_LONG 300 +# define SSL_R_SSLV3_ALERT_BAD_CERTIFICATE 1042 +# define SSL_R_SSLV3_ALERT_BAD_RECORD_MAC 1020 +# define SSL_R_SSLV3_ALERT_CERTIFICATE_EXPIRED 1045 +# define SSL_R_SSLV3_ALERT_CERTIFICATE_REVOKED 1044 +# define SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN 1046 +# define SSL_R_SSLV3_ALERT_DECOMPRESSION_FAILURE 1030 +# define SSL_R_SSLV3_ALERT_HANDSHAKE_FAILURE 1040 +# define SSL_R_SSLV3_ALERT_ILLEGAL_PARAMETER 1047 +# define SSL_R_SSLV3_ALERT_NO_CERTIFICATE 1041 +# define SSL_R_SSLV3_ALERT_UNEXPECTED_MESSAGE 1010 +# define SSL_R_SSLV3_ALERT_UNSUPPORTED_CERTIFICATE 1043 +# define SSL_R_SSL_COMMAND_SECTION_EMPTY 117 +# define SSL_R_SSL_COMMAND_SECTION_NOT_FOUND 125 +# define SSL_R_SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION 228 +# define SSL_R_SSL_HANDSHAKE_FAILURE 229 +# define SSL_R_SSL_LIBRARY_HAS_NO_CIPHERS 230 +# define SSL_R_SSL_NEGATIVE_LENGTH 372 +# define SSL_R_SSL_SECTION_EMPTY 126 +# define SSL_R_SSL_SECTION_NOT_FOUND 136 +# define SSL_R_SSL_SESSION_ID_CALLBACK_FAILED 301 +# define SSL_R_SSL_SESSION_ID_CONFLICT 302 +# define SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG 273 +# define SSL_R_SSL_SESSION_ID_HAS_BAD_LENGTH 303 +# define SSL_R_SSL_SESSION_ID_TOO_LONG 408 +# define SSL_R_SSL_SESSION_VERSION_MISMATCH 210 +# define SSL_R_STILL_IN_INIT 121 +# define SSL_R_TLSV13_ALERT_CERTIFICATE_REQUIRED 1116 +# define SSL_R_TLSV13_ALERT_MISSING_EXTENSION 1109 +# define SSL_R_TLSV1_ALERT_ACCESS_DENIED 1049 +# define SSL_R_TLSV1_ALERT_DECODE_ERROR 1050 +# define SSL_R_TLSV1_ALERT_DECRYPTION_FAILED 1021 +# define SSL_R_TLSV1_ALERT_DECRYPT_ERROR 1051 +# define SSL_R_TLSV1_ALERT_EXPORT_RESTRICTION 1060 +# define SSL_R_TLSV1_ALERT_INAPPROPRIATE_FALLBACK 1086 +# define SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY 1071 +# define SSL_R_TLSV1_ALERT_INTERNAL_ERROR 1080 +# define SSL_R_TLSV1_ALERT_NO_RENEGOTIATION 1100 +# define SSL_R_TLSV1_ALERT_PROTOCOL_VERSION 1070 +# define SSL_R_TLSV1_ALERT_RECORD_OVERFLOW 1022 +# define SSL_R_TLSV1_ALERT_UNKNOWN_CA 1048 +# define SSL_R_TLSV1_ALERT_USER_CANCELLED 1090 +# define SSL_R_TLSV1_BAD_CERTIFICATE_HASH_VALUE 1114 +# define SSL_R_TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE 1113 +# define SSL_R_TLSV1_CERTIFICATE_UNOBTAINABLE 1111 +# define SSL_R_TLSV1_UNRECOGNIZED_NAME 1112 +# define SSL_R_TLSV1_UNSUPPORTED_EXTENSION 1110 +# define SSL_R_TLS_HEARTBEAT_PEER_DOESNT_ACCEPT 365 +# define SSL_R_TLS_HEARTBEAT_PENDING 366 +# define SSL_R_TLS_ILLEGAL_EXPORTER_LABEL 367 +# define SSL_R_TLS_INVALID_ECPOINTFORMAT_LIST 157 +# define SSL_R_TOO_MANY_KEY_UPDATES 132 +# define SSL_R_TOO_MANY_WARN_ALERTS 409 +# define SSL_R_TOO_MUCH_EARLY_DATA 164 +# define SSL_R_UNABLE_TO_FIND_ECDH_PARAMETERS 314 +# define SSL_R_UNABLE_TO_FIND_PUBLIC_KEY_PARAMETERS 239 +# define SSL_R_UNABLE_TO_LOAD_SSL3_MD5_ROUTINES 242 +# define SSL_R_UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES 243 +# define SSL_R_UNEXPECTED_CCS_MESSAGE 262 +# define SSL_R_UNEXPECTED_END_OF_EARLY_DATA 178 +# define SSL_R_UNEXPECTED_MESSAGE 244 +# define SSL_R_UNEXPECTED_RECORD 245 +# define SSL_R_UNINITIALIZED 276 +# define SSL_R_UNKNOWN_ALERT_TYPE 246 +# define SSL_R_UNKNOWN_CERTIFICATE_TYPE 247 +# define SSL_R_UNKNOWN_CIPHER_RETURNED 248 +# define SSL_R_UNKNOWN_CIPHER_TYPE 249 +# define SSL_R_UNKNOWN_CMD_NAME 386 +# define SSL_R_UNKNOWN_COMMAND 139 +# define SSL_R_UNKNOWN_DIGEST 368 +# define SSL_R_UNKNOWN_KEY_EXCHANGE_TYPE 250 +# define SSL_R_UNKNOWN_PKEY_TYPE 251 +# define SSL_R_UNKNOWN_PROTOCOL 252 +# define SSL_R_UNKNOWN_SSL_VERSION 254 +# define SSL_R_UNKNOWN_STATE 255 +# define SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED 338 +# define SSL_R_UNSOLICITED_EXTENSION 217 +# define SSL_R_UNSUPPORTED_COMPRESSION_ALGORITHM 257 +# define SSL_R_UNSUPPORTED_ELLIPTIC_CURVE 315 +# define SSL_R_UNSUPPORTED_PROTOCOL 258 +# define SSL_R_UNSUPPORTED_SSL_VERSION 259 +# define SSL_R_UNSUPPORTED_STATUS_TYPE 329 +# define SSL_R_USE_SRTP_NOT_NEGOTIATED 369 +# define SSL_R_VERSION_TOO_HIGH 166 +# define SSL_R_VERSION_TOO_LOW 396 +# define SSL_R_WRONG_CERTIFICATE_TYPE 383 +# define SSL_R_WRONG_CIPHER_RETURNED 261 +# define SSL_R_WRONG_CURVE 378 +# define SSL_R_WRONG_SIGNATURE_LENGTH 264 +# define SSL_R_WRONG_SIGNATURE_SIZE 265 +# define SSL_R_WRONG_SIGNATURE_TYPE 370 +# define SSL_R_WRONG_SSL_VERSION 266 +# define SSL_R_WRONG_VERSION_NUMBER 267 +# define SSL_R_X509_LIB 268 +# define SSL_R_X509_VERIFICATION_SETUP_PROBLEMS 269 + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/stack.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/stack.h new file mode 100644 index 00000000..cfc07505 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/stack.h @@ -0,0 +1,83 @@ +/* + * Copyright 1995-2017 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_STACK_H +# define HEADER_STACK_H + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct stack_st OPENSSL_STACK; /* Use STACK_OF(...) instead */ + +typedef int (*OPENSSL_sk_compfunc)(const void *, const void *); +typedef void (*OPENSSL_sk_freefunc)(void *); +typedef void *(*OPENSSL_sk_copyfunc)(const void *); + +int OPENSSL_sk_num(const OPENSSL_STACK *); +void *OPENSSL_sk_value(const OPENSSL_STACK *, int); + +void *OPENSSL_sk_set(OPENSSL_STACK *st, int i, const void *data); + +OPENSSL_STACK *OPENSSL_sk_new(OPENSSL_sk_compfunc cmp); +OPENSSL_STACK *OPENSSL_sk_new_null(void); +OPENSSL_STACK *OPENSSL_sk_new_reserve(OPENSSL_sk_compfunc c, int n); +int OPENSSL_sk_reserve(OPENSSL_STACK *st, int n); +void OPENSSL_sk_free(OPENSSL_STACK *); +void OPENSSL_sk_pop_free(OPENSSL_STACK *st, void (*func) (void *)); +OPENSSL_STACK *OPENSSL_sk_deep_copy(const OPENSSL_STACK *, + OPENSSL_sk_copyfunc c, + OPENSSL_sk_freefunc f); +int OPENSSL_sk_insert(OPENSSL_STACK *sk, const void *data, int where); +void *OPENSSL_sk_delete(OPENSSL_STACK *st, int loc); +void *OPENSSL_sk_delete_ptr(OPENSSL_STACK *st, const void *p); +int OPENSSL_sk_find(OPENSSL_STACK *st, const void *data); +int OPENSSL_sk_find_ex(OPENSSL_STACK *st, const void *data); +int OPENSSL_sk_push(OPENSSL_STACK *st, const void *data); +int OPENSSL_sk_unshift(OPENSSL_STACK *st, const void *data); +void *OPENSSL_sk_shift(OPENSSL_STACK *st); +void *OPENSSL_sk_pop(OPENSSL_STACK *st); +void OPENSSL_sk_zero(OPENSSL_STACK *st); +OPENSSL_sk_compfunc OPENSSL_sk_set_cmp_func(OPENSSL_STACK *sk, + OPENSSL_sk_compfunc cmp); +OPENSSL_STACK *OPENSSL_sk_dup(const OPENSSL_STACK *st); +void OPENSSL_sk_sort(OPENSSL_STACK *st); +int OPENSSL_sk_is_sorted(const OPENSSL_STACK *st); + +# if OPENSSL_API_COMPAT < 0x10100000L +# define _STACK OPENSSL_STACK +# define sk_num OPENSSL_sk_num +# define sk_value OPENSSL_sk_value +# define sk_set OPENSSL_sk_set +# define sk_new OPENSSL_sk_new +# define sk_new_null OPENSSL_sk_new_null +# define sk_free OPENSSL_sk_free +# define sk_pop_free OPENSSL_sk_pop_free +# define sk_deep_copy OPENSSL_sk_deep_copy +# define sk_insert OPENSSL_sk_insert +# define sk_delete OPENSSL_sk_delete +# define sk_delete_ptr OPENSSL_sk_delete_ptr +# define sk_find OPENSSL_sk_find +# define sk_find_ex OPENSSL_sk_find_ex +# define sk_push OPENSSL_sk_push +# define sk_unshift OPENSSL_sk_unshift +# define sk_shift OPENSSL_sk_shift +# define sk_pop OPENSSL_sk_pop +# define sk_zero OPENSSL_sk_zero +# define sk_set_cmp_func OPENSSL_sk_set_cmp_func +# define sk_dup OPENSSL_sk_dup +# define sk_sort OPENSSL_sk_sort +# define sk_is_sorted OPENSSL_sk_is_sorted +# endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/store.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/store.h new file mode 100644 index 00000000..a40a7339 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/store.h @@ -0,0 +1,266 @@ +/* + * Copyright 2016-2019 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_OSSL_STORE_H +# define HEADER_OSSL_STORE_H + +# include +# include +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +/*- + * The main OSSL_STORE functions. + * ------------------------------ + * + * These allow applications to open a channel to a resource with supported + * data (keys, certs, crls, ...), read the data a piece at a time and decide + * what to do with it, and finally close. + */ + +typedef struct ossl_store_ctx_st OSSL_STORE_CTX; + +/* + * Typedef for the OSSL_STORE_INFO post processing callback. This can be used + * to massage the given OSSL_STORE_INFO, or to drop it entirely (by returning + * NULL). + */ +typedef OSSL_STORE_INFO *(*OSSL_STORE_post_process_info_fn)(OSSL_STORE_INFO *, + void *); + +/* + * Open a channel given a URI. The given UI method will be used any time the + * loader needs extra input, for example when a password or pin is needed, and + * will be passed the same user data every time it's needed in this context. + * + * Returns a context reference which represents the channel to communicate + * through. + */ +OSSL_STORE_CTX *OSSL_STORE_open(const char *uri, const UI_METHOD *ui_method, + void *ui_data, + OSSL_STORE_post_process_info_fn post_process, + void *post_process_data); + +/* + * Control / fine tune the OSSL_STORE channel. |cmd| determines what is to be + * done, and depends on the underlying loader (use OSSL_STORE_get0_scheme to + * determine which loader is used), except for common commands (see below). + * Each command takes different arguments. + */ +int OSSL_STORE_ctrl(OSSL_STORE_CTX *ctx, int cmd, ... /* args */); +int OSSL_STORE_vctrl(OSSL_STORE_CTX *ctx, int cmd, va_list args); + +/* + * Common ctrl commands that different loaders may choose to support. + */ +/* int on = 0 or 1; STORE_ctrl(ctx, STORE_C_USE_SECMEM, &on); */ +# define OSSL_STORE_C_USE_SECMEM 1 +/* Where custom commands start */ +# define OSSL_STORE_C_CUSTOM_START 100 + +/* + * Read one data item (a key, a cert, a CRL) that is supported by the OSSL_STORE + * functionality, given a context. + * Returns a OSSL_STORE_INFO pointer, from which OpenSSL typed data can be + * extracted with OSSL_STORE_INFO_get0_PKEY(), OSSL_STORE_INFO_get0_CERT(), ... + * NULL is returned on error, which may include that the data found at the URI + * can't be figured out for certain or is ambiguous. + */ +OSSL_STORE_INFO *OSSL_STORE_load(OSSL_STORE_CTX *ctx); + +/* + * Check if end of data (end of file) is reached + * Returns 1 on end, 0 otherwise. + */ +int OSSL_STORE_eof(OSSL_STORE_CTX *ctx); + +/* + * Check if an error occurred + * Returns 1 if it did, 0 otherwise. + */ +int OSSL_STORE_error(OSSL_STORE_CTX *ctx); + +/* + * Close the channel + * Returns 1 on success, 0 on error. + */ +int OSSL_STORE_close(OSSL_STORE_CTX *ctx); + + +/*- + * Extracting OpenSSL types from and creating new OSSL_STORE_INFOs + * --------------------------------------------------------------- + */ + +/* + * Types of data that can be ossl_stored in a OSSL_STORE_INFO. + * OSSL_STORE_INFO_NAME is typically found when getting a listing of + * available "files" / "tokens" / what have you. + */ +# define OSSL_STORE_INFO_NAME 1 /* char * */ +# define OSSL_STORE_INFO_PARAMS 2 /* EVP_PKEY * */ +# define OSSL_STORE_INFO_PKEY 3 /* EVP_PKEY * */ +# define OSSL_STORE_INFO_CERT 4 /* X509 * */ +# define OSSL_STORE_INFO_CRL 5 /* X509_CRL * */ + +/* + * Functions to generate OSSL_STORE_INFOs, one function for each type we + * support having in them, as well as a generic constructor. + * + * In all cases, ownership of the object is transferred to the OSSL_STORE_INFO + * and will therefore be freed when the OSSL_STORE_INFO is freed. + */ +OSSL_STORE_INFO *OSSL_STORE_INFO_new_NAME(char *name); +int OSSL_STORE_INFO_set0_NAME_description(OSSL_STORE_INFO *info, char *desc); +OSSL_STORE_INFO *OSSL_STORE_INFO_new_PARAMS(EVP_PKEY *params); +OSSL_STORE_INFO *OSSL_STORE_INFO_new_PKEY(EVP_PKEY *pkey); +OSSL_STORE_INFO *OSSL_STORE_INFO_new_CERT(X509 *x509); +OSSL_STORE_INFO *OSSL_STORE_INFO_new_CRL(X509_CRL *crl); + +/* + * Functions to try to extract data from a OSSL_STORE_INFO. + */ +int OSSL_STORE_INFO_get_type(const OSSL_STORE_INFO *info); +const char *OSSL_STORE_INFO_get0_NAME(const OSSL_STORE_INFO *info); +char *OSSL_STORE_INFO_get1_NAME(const OSSL_STORE_INFO *info); +const char *OSSL_STORE_INFO_get0_NAME_description(const OSSL_STORE_INFO *info); +char *OSSL_STORE_INFO_get1_NAME_description(const OSSL_STORE_INFO *info); +EVP_PKEY *OSSL_STORE_INFO_get0_PARAMS(const OSSL_STORE_INFO *info); +EVP_PKEY *OSSL_STORE_INFO_get1_PARAMS(const OSSL_STORE_INFO *info); +EVP_PKEY *OSSL_STORE_INFO_get0_PKEY(const OSSL_STORE_INFO *info); +EVP_PKEY *OSSL_STORE_INFO_get1_PKEY(const OSSL_STORE_INFO *info); +X509 *OSSL_STORE_INFO_get0_CERT(const OSSL_STORE_INFO *info); +X509 *OSSL_STORE_INFO_get1_CERT(const OSSL_STORE_INFO *info); +X509_CRL *OSSL_STORE_INFO_get0_CRL(const OSSL_STORE_INFO *info); +X509_CRL *OSSL_STORE_INFO_get1_CRL(const OSSL_STORE_INFO *info); + +const char *OSSL_STORE_INFO_type_string(int type); + +/* + * Free the OSSL_STORE_INFO + */ +void OSSL_STORE_INFO_free(OSSL_STORE_INFO *info); + + +/*- + * Functions to construct a search URI from a base URI and search criteria + * ----------------------------------------------------------------------- + */ + +/* OSSL_STORE search types */ +# define OSSL_STORE_SEARCH_BY_NAME 1 /* subject in certs, issuer in CRLs */ +# define OSSL_STORE_SEARCH_BY_ISSUER_SERIAL 2 +# define OSSL_STORE_SEARCH_BY_KEY_FINGERPRINT 3 +# define OSSL_STORE_SEARCH_BY_ALIAS 4 + +/* To check what search types the scheme handler supports */ +int OSSL_STORE_supports_search(OSSL_STORE_CTX *ctx, int search_type); + +/* Search term constructors */ +/* + * The input is considered to be owned by the caller, and must therefore + * remain present throughout the lifetime of the returned OSSL_STORE_SEARCH + */ +OSSL_STORE_SEARCH *OSSL_STORE_SEARCH_by_name(X509_NAME *name); +OSSL_STORE_SEARCH *OSSL_STORE_SEARCH_by_issuer_serial(X509_NAME *name, + const ASN1_INTEGER + *serial); +OSSL_STORE_SEARCH *OSSL_STORE_SEARCH_by_key_fingerprint(const EVP_MD *digest, + const unsigned char + *bytes, size_t len); +OSSL_STORE_SEARCH *OSSL_STORE_SEARCH_by_alias(const char *alias); + +/* Search term destructor */ +void OSSL_STORE_SEARCH_free(OSSL_STORE_SEARCH *search); + +/* Search term accessors */ +int OSSL_STORE_SEARCH_get_type(const OSSL_STORE_SEARCH *criterion); +X509_NAME *OSSL_STORE_SEARCH_get0_name(OSSL_STORE_SEARCH *criterion); +const ASN1_INTEGER *OSSL_STORE_SEARCH_get0_serial(const OSSL_STORE_SEARCH + *criterion); +const unsigned char *OSSL_STORE_SEARCH_get0_bytes(const OSSL_STORE_SEARCH + *criterion, size_t *length); +const char *OSSL_STORE_SEARCH_get0_string(const OSSL_STORE_SEARCH *criterion); +const EVP_MD *OSSL_STORE_SEARCH_get0_digest(const OSSL_STORE_SEARCH *criterion); + +/* + * Add search criterion and expected return type (which can be unspecified) + * to the loading channel. This MUST happen before the first OSSL_STORE_load(). + */ +int OSSL_STORE_expect(OSSL_STORE_CTX *ctx, int expected_type); +int OSSL_STORE_find(OSSL_STORE_CTX *ctx, OSSL_STORE_SEARCH *search); + + +/*- + * Function to register a loader for the given URI scheme. + * ------------------------------------------------------- + * + * The loader receives all the main components of an URI except for the + * scheme. + */ + +typedef struct ossl_store_loader_st OSSL_STORE_LOADER; +OSSL_STORE_LOADER *OSSL_STORE_LOADER_new(ENGINE *e, const char *scheme); +const ENGINE *OSSL_STORE_LOADER_get0_engine(const OSSL_STORE_LOADER *loader); +const char *OSSL_STORE_LOADER_get0_scheme(const OSSL_STORE_LOADER *loader); +/* struct ossl_store_loader_ctx_st is defined differently by each loader */ +typedef struct ossl_store_loader_ctx_st OSSL_STORE_LOADER_CTX; +typedef OSSL_STORE_LOADER_CTX *(*OSSL_STORE_open_fn)(const OSSL_STORE_LOADER + *loader, + const char *uri, + const UI_METHOD *ui_method, + void *ui_data); +int OSSL_STORE_LOADER_set_open(OSSL_STORE_LOADER *loader, + OSSL_STORE_open_fn open_function); +typedef int (*OSSL_STORE_ctrl_fn)(OSSL_STORE_LOADER_CTX *ctx, int cmd, + va_list args); +int OSSL_STORE_LOADER_set_ctrl(OSSL_STORE_LOADER *loader, + OSSL_STORE_ctrl_fn ctrl_function); +typedef int (*OSSL_STORE_expect_fn)(OSSL_STORE_LOADER_CTX *ctx, int expected); +int OSSL_STORE_LOADER_set_expect(OSSL_STORE_LOADER *loader, + OSSL_STORE_expect_fn expect_function); +typedef int (*OSSL_STORE_find_fn)(OSSL_STORE_LOADER_CTX *ctx, + OSSL_STORE_SEARCH *criteria); +int OSSL_STORE_LOADER_set_find(OSSL_STORE_LOADER *loader, + OSSL_STORE_find_fn find_function); +typedef OSSL_STORE_INFO *(*OSSL_STORE_load_fn)(OSSL_STORE_LOADER_CTX *ctx, + const UI_METHOD *ui_method, + void *ui_data); +int OSSL_STORE_LOADER_set_load(OSSL_STORE_LOADER *loader, + OSSL_STORE_load_fn load_function); +typedef int (*OSSL_STORE_eof_fn)(OSSL_STORE_LOADER_CTX *ctx); +int OSSL_STORE_LOADER_set_eof(OSSL_STORE_LOADER *loader, + OSSL_STORE_eof_fn eof_function); +typedef int (*OSSL_STORE_error_fn)(OSSL_STORE_LOADER_CTX *ctx); +int OSSL_STORE_LOADER_set_error(OSSL_STORE_LOADER *loader, + OSSL_STORE_error_fn error_function); +typedef int (*OSSL_STORE_close_fn)(OSSL_STORE_LOADER_CTX *ctx); +int OSSL_STORE_LOADER_set_close(OSSL_STORE_LOADER *loader, + OSSL_STORE_close_fn close_function); +void OSSL_STORE_LOADER_free(OSSL_STORE_LOADER *loader); + +int OSSL_STORE_register_loader(OSSL_STORE_LOADER *loader); +OSSL_STORE_LOADER *OSSL_STORE_unregister_loader(const char *scheme); + +/*- + * Functions to list STORE loaders + * ------------------------------- + */ +int OSSL_STORE_do_all_loaders(void (*do_function) (const OSSL_STORE_LOADER + *loader, void *do_arg), + void *do_arg); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/storeerr.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/storeerr.h new file mode 100644 index 00000000..190eab07 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/storeerr.h @@ -0,0 +1,91 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2019 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_OSSL_STOREERR_H +# define HEADER_OSSL_STOREERR_H + +# ifndef HEADER_SYMHACKS_H +# include +# endif + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_OSSL_STORE_strings(void); + +/* + * OSSL_STORE function codes. + */ +# define OSSL_STORE_F_FILE_CTRL 129 +# define OSSL_STORE_F_FILE_FIND 138 +# define OSSL_STORE_F_FILE_GET_PASS 118 +# define OSSL_STORE_F_FILE_LOAD 119 +# define OSSL_STORE_F_FILE_LOAD_TRY_DECODE 124 +# define OSSL_STORE_F_FILE_NAME_TO_URI 126 +# define OSSL_STORE_F_FILE_OPEN 120 +# define OSSL_STORE_F_OSSL_STORE_ATTACH_PEM_BIO 127 +# define OSSL_STORE_F_OSSL_STORE_EXPECT 130 +# define OSSL_STORE_F_OSSL_STORE_FILE_ATTACH_PEM_BIO_INT 128 +# define OSSL_STORE_F_OSSL_STORE_FIND 131 +# define OSSL_STORE_F_OSSL_STORE_GET0_LOADER_INT 100 +# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_CERT 101 +# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_CRL 102 +# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_NAME 103 +# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_NAME_DESCRIPTION 135 +# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_PARAMS 104 +# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_PKEY 105 +# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_CERT 106 +# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_CRL 107 +# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_EMBEDDED 123 +# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_NAME 109 +# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_PARAMS 110 +# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_PKEY 111 +# define OSSL_STORE_F_OSSL_STORE_INFO_SET0_NAME_DESCRIPTION 134 +# define OSSL_STORE_F_OSSL_STORE_INIT_ONCE 112 +# define OSSL_STORE_F_OSSL_STORE_LOADER_NEW 113 +# define OSSL_STORE_F_OSSL_STORE_OPEN 114 +# define OSSL_STORE_F_OSSL_STORE_OPEN_INT 115 +# define OSSL_STORE_F_OSSL_STORE_REGISTER_LOADER_INT 117 +# define OSSL_STORE_F_OSSL_STORE_SEARCH_BY_ALIAS 132 +# define OSSL_STORE_F_OSSL_STORE_SEARCH_BY_ISSUER_SERIAL 133 +# define OSSL_STORE_F_OSSL_STORE_SEARCH_BY_KEY_FINGERPRINT 136 +# define OSSL_STORE_F_OSSL_STORE_SEARCH_BY_NAME 137 +# define OSSL_STORE_F_OSSL_STORE_UNREGISTER_LOADER_INT 116 +# define OSSL_STORE_F_TRY_DECODE_PARAMS 121 +# define OSSL_STORE_F_TRY_DECODE_PKCS12 122 +# define OSSL_STORE_F_TRY_DECODE_PKCS8ENCRYPTED 125 + +/* + * OSSL_STORE reason codes. + */ +# define OSSL_STORE_R_AMBIGUOUS_CONTENT_TYPE 107 +# define OSSL_STORE_R_BAD_PASSWORD_READ 115 +# define OSSL_STORE_R_ERROR_VERIFYING_PKCS12_MAC 113 +# define OSSL_STORE_R_FINGERPRINT_SIZE_DOES_NOT_MATCH_DIGEST 121 +# define OSSL_STORE_R_INVALID_SCHEME 106 +# define OSSL_STORE_R_IS_NOT_A 112 +# define OSSL_STORE_R_LOADER_INCOMPLETE 116 +# define OSSL_STORE_R_LOADING_STARTED 117 +# define OSSL_STORE_R_NOT_A_CERTIFICATE 100 +# define OSSL_STORE_R_NOT_A_CRL 101 +# define OSSL_STORE_R_NOT_A_KEY 102 +# define OSSL_STORE_R_NOT_A_NAME 103 +# define OSSL_STORE_R_NOT_PARAMETERS 104 +# define OSSL_STORE_R_PASSPHRASE_CALLBACK_ERROR 114 +# define OSSL_STORE_R_PATH_MUST_BE_ABSOLUTE 108 +# define OSSL_STORE_R_SEARCH_ONLY_SUPPORTED_FOR_DIRECTORIES 119 +# define OSSL_STORE_R_UI_PROCESS_INTERRUPTED_OR_CANCELLED 109 +# define OSSL_STORE_R_UNREGISTERED_SCHEME 105 +# define OSSL_STORE_R_UNSUPPORTED_CONTENT_TYPE 110 +# define OSSL_STORE_R_UNSUPPORTED_OPERATION 118 +# define OSSL_STORE_R_UNSUPPORTED_SEARCH_TYPE 120 +# define OSSL_STORE_R_URI_AUTHORITY_UNSUPPORTED 111 + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/symhacks.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/symhacks.h new file mode 100644 index 00000000..156ea6e4 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/symhacks.h @@ -0,0 +1,37 @@ +/* + * Copyright 1999-2018 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_SYMHACKS_H +# define HEADER_SYMHACKS_H + +# include + +/* Case insensitive linking causes problems.... */ +# if defined(OPENSSL_SYS_VMS) +# undef ERR_load_CRYPTO_strings +# define ERR_load_CRYPTO_strings ERR_load_CRYPTOlib_strings +# undef OCSP_crlID_new +# define OCSP_crlID_new OCSP_crlID2_new + +# undef d2i_ECPARAMETERS +# define d2i_ECPARAMETERS d2i_UC_ECPARAMETERS +# undef i2d_ECPARAMETERS +# define i2d_ECPARAMETERS i2d_UC_ECPARAMETERS +# undef d2i_ECPKPARAMETERS +# define d2i_ECPKPARAMETERS d2i_UC_ECPKPARAMETERS +# undef i2d_ECPKPARAMETERS +# define i2d_ECPKPARAMETERS i2d_UC_ECPKPARAMETERS + +/* This one clashes with CMS_data_create */ +# undef cms_Data_create +# define cms_Data_create priv_cms_Data_create + +# endif + +#endif /* ! defined HEADER_VMS_IDHACKS_H */ diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/tls1.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/tls1.h new file mode 100644 index 00000000..76d9fda4 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/tls1.h @@ -0,0 +1,1237 @@ +/* + * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved + * Copyright 2005 Nokia. 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 + */ + +#ifndef HEADER_TLS1_H +# define HEADER_TLS1_H + +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Default security level if not overridden at config time */ +# ifndef OPENSSL_TLS_SECURITY_LEVEL +# define OPENSSL_TLS_SECURITY_LEVEL 1 +# endif + +# define TLS1_VERSION 0x0301 +# define TLS1_1_VERSION 0x0302 +# define TLS1_2_VERSION 0x0303 +# define TLS1_3_VERSION 0x0304 +# define TLS_MAX_VERSION TLS1_3_VERSION + +/* Special value for method supporting multiple versions */ +# define TLS_ANY_VERSION 0x10000 + +# define TLS1_VERSION_MAJOR 0x03 +# define TLS1_VERSION_MINOR 0x01 + +# define TLS1_1_VERSION_MAJOR 0x03 +# define TLS1_1_VERSION_MINOR 0x02 + +# define TLS1_2_VERSION_MAJOR 0x03 +# define TLS1_2_VERSION_MINOR 0x03 + +# define TLS1_get_version(s) \ + ((SSL_version(s) >> 8) == TLS1_VERSION_MAJOR ? SSL_version(s) : 0) + +# define TLS1_get_client_version(s) \ + ((SSL_client_version(s) >> 8) == TLS1_VERSION_MAJOR ? SSL_client_version(s) : 0) + +# define TLS1_AD_DECRYPTION_FAILED 21 +# define TLS1_AD_RECORD_OVERFLOW 22 +# define TLS1_AD_UNKNOWN_CA 48/* fatal */ +# define TLS1_AD_ACCESS_DENIED 49/* fatal */ +# define TLS1_AD_DECODE_ERROR 50/* fatal */ +# define TLS1_AD_DECRYPT_ERROR 51 +# define TLS1_AD_EXPORT_RESTRICTION 60/* fatal */ +# define TLS1_AD_PROTOCOL_VERSION 70/* fatal */ +# define TLS1_AD_INSUFFICIENT_SECURITY 71/* fatal */ +# define TLS1_AD_INTERNAL_ERROR 80/* fatal */ +# define TLS1_AD_INAPPROPRIATE_FALLBACK 86/* fatal */ +# define TLS1_AD_USER_CANCELLED 90 +# define TLS1_AD_NO_RENEGOTIATION 100 +/* TLSv1.3 alerts */ +# define TLS13_AD_MISSING_EXTENSION 109 /* fatal */ +# define TLS13_AD_CERTIFICATE_REQUIRED 116 /* fatal */ +/* codes 110-114 are from RFC3546 */ +# define TLS1_AD_UNSUPPORTED_EXTENSION 110 +# define TLS1_AD_CERTIFICATE_UNOBTAINABLE 111 +# define TLS1_AD_UNRECOGNIZED_NAME 112 +# define TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE 113 +# define TLS1_AD_BAD_CERTIFICATE_HASH_VALUE 114 +# define TLS1_AD_UNKNOWN_PSK_IDENTITY 115/* fatal */ +# define TLS1_AD_NO_APPLICATION_PROTOCOL 120 /* fatal */ + +/* ExtensionType values from RFC3546 / RFC4366 / RFC6066 */ +# define TLSEXT_TYPE_server_name 0 +# define TLSEXT_TYPE_max_fragment_length 1 +# define TLSEXT_TYPE_client_certificate_url 2 +# define TLSEXT_TYPE_trusted_ca_keys 3 +# define TLSEXT_TYPE_truncated_hmac 4 +# define TLSEXT_TYPE_status_request 5 +/* ExtensionType values from RFC4681 */ +# define TLSEXT_TYPE_user_mapping 6 +/* ExtensionType values from RFC5878 */ +# define TLSEXT_TYPE_client_authz 7 +# define TLSEXT_TYPE_server_authz 8 +/* ExtensionType values from RFC6091 */ +# define TLSEXT_TYPE_cert_type 9 + +/* ExtensionType values from RFC4492 */ +/* + * Prior to TLSv1.3 the supported_groups extension was known as + * elliptic_curves + */ +# define TLSEXT_TYPE_supported_groups 10 +# define TLSEXT_TYPE_elliptic_curves TLSEXT_TYPE_supported_groups +# define TLSEXT_TYPE_ec_point_formats 11 + + +/* ExtensionType value from RFC5054 */ +# define TLSEXT_TYPE_srp 12 + +/* ExtensionType values from RFC5246 */ +# define TLSEXT_TYPE_signature_algorithms 13 + +/* ExtensionType value from RFC5764 */ +# define TLSEXT_TYPE_use_srtp 14 + +/* ExtensionType value from RFC5620 */ +# define TLSEXT_TYPE_heartbeat 15 + +/* ExtensionType value from RFC7301 */ +# define TLSEXT_TYPE_application_layer_protocol_negotiation 16 + +/* + * Extension type for Certificate Transparency + * https://tools.ietf.org/html/rfc6962#section-3.3.1 + */ +# define TLSEXT_TYPE_signed_certificate_timestamp 18 + +/* + * ExtensionType value for TLS padding extension. + * http://tools.ietf.org/html/draft-agl-tls-padding + */ +# define TLSEXT_TYPE_padding 21 + +/* ExtensionType value from RFC7366 */ +# define TLSEXT_TYPE_encrypt_then_mac 22 + +/* ExtensionType value from RFC7627 */ +# define TLSEXT_TYPE_extended_master_secret 23 + +/* ExtensionType value from RFC4507 */ +# define TLSEXT_TYPE_session_ticket 35 + +/* As defined for TLS1.3 */ +# define TLSEXT_TYPE_psk 41 +# define TLSEXT_TYPE_early_data 42 +# define TLSEXT_TYPE_supported_versions 43 +# define TLSEXT_TYPE_cookie 44 +# define TLSEXT_TYPE_psk_kex_modes 45 +# define TLSEXT_TYPE_certificate_authorities 47 +# define TLSEXT_TYPE_post_handshake_auth 49 +# define TLSEXT_TYPE_signature_algorithms_cert 50 +# define TLSEXT_TYPE_key_share 51 + +/* Temporary extension type */ +# define TLSEXT_TYPE_renegotiate 0xff01 + +# ifndef OPENSSL_NO_NEXTPROTONEG +/* This is not an IANA defined extension number */ +# define TLSEXT_TYPE_next_proto_neg 13172 +# endif + +/* NameType value from RFC3546 */ +# define TLSEXT_NAMETYPE_host_name 0 +/* status request value from RFC3546 */ +# define TLSEXT_STATUSTYPE_ocsp 1 + +/* ECPointFormat values from RFC4492 */ +# define TLSEXT_ECPOINTFORMAT_first 0 +# define TLSEXT_ECPOINTFORMAT_uncompressed 0 +# define TLSEXT_ECPOINTFORMAT_ansiX962_compressed_prime 1 +# define TLSEXT_ECPOINTFORMAT_ansiX962_compressed_char2 2 +# define TLSEXT_ECPOINTFORMAT_last 2 + +/* Signature and hash algorithms from RFC5246 */ +# define TLSEXT_signature_anonymous 0 +# define TLSEXT_signature_rsa 1 +# define TLSEXT_signature_dsa 2 +# define TLSEXT_signature_ecdsa 3 +# define TLSEXT_signature_gostr34102001 237 +# define TLSEXT_signature_gostr34102012_256 238 +# define TLSEXT_signature_gostr34102012_512 239 + +/* Total number of different signature algorithms */ +# define TLSEXT_signature_num 7 + +# define TLSEXT_hash_none 0 +# define TLSEXT_hash_md5 1 +# define TLSEXT_hash_sha1 2 +# define TLSEXT_hash_sha224 3 +# define TLSEXT_hash_sha256 4 +# define TLSEXT_hash_sha384 5 +# define TLSEXT_hash_sha512 6 +# define TLSEXT_hash_gostr3411 237 +# define TLSEXT_hash_gostr34112012_256 238 +# define TLSEXT_hash_gostr34112012_512 239 + +/* Total number of different digest algorithms */ + +# define TLSEXT_hash_num 10 + +/* Flag set for unrecognised algorithms */ +# define TLSEXT_nid_unknown 0x1000000 + +/* ECC curves */ + +# define TLSEXT_curve_P_256 23 +# define TLSEXT_curve_P_384 24 + +/* OpenSSL value to disable maximum fragment length extension */ +# define TLSEXT_max_fragment_length_DISABLED 0 +/* Allowed values for max fragment length extension */ +# define TLSEXT_max_fragment_length_512 1 +# define TLSEXT_max_fragment_length_1024 2 +# define TLSEXT_max_fragment_length_2048 3 +# define TLSEXT_max_fragment_length_4096 4 + +int SSL_CTX_set_tlsext_max_fragment_length(SSL_CTX *ctx, uint8_t mode); +int SSL_set_tlsext_max_fragment_length(SSL *ssl, uint8_t mode); + +# define TLSEXT_MAXLEN_host_name 255 + +__owur const char *SSL_get_servername(const SSL *s, const int type); +__owur int SSL_get_servername_type(const SSL *s); +/* + * SSL_export_keying_material exports a value derived from the master secret, + * as specified in RFC 5705. It writes |olen| bytes to |out| given a label and + * optional context. (Since a zero length context is allowed, the |use_context| + * flag controls whether a context is included.) It returns 1 on success and + * 0 or -1 otherwise. + */ +__owur int SSL_export_keying_material(SSL *s, unsigned char *out, size_t olen, + const char *label, size_t llen, + const unsigned char *context, + size_t contextlen, int use_context); + +/* + * SSL_export_keying_material_early exports a value derived from the + * early exporter master secret, as specified in + * https://tools.ietf.org/html/draft-ietf-tls-tls13-23. It writes + * |olen| bytes to |out| given a label and optional context. It + * returns 1 on success and 0 otherwise. + */ +__owur int SSL_export_keying_material_early(SSL *s, unsigned char *out, + size_t olen, const char *label, + size_t llen, + const unsigned char *context, + size_t contextlen); + +int SSL_get_peer_signature_type_nid(const SSL *s, int *pnid); +int SSL_get_signature_type_nid(const SSL *s, int *pnid); + +int SSL_get_sigalgs(SSL *s, int idx, + int *psign, int *phash, int *psignandhash, + unsigned char *rsig, unsigned char *rhash); + +int SSL_get_shared_sigalgs(SSL *s, int idx, + int *psign, int *phash, int *psignandhash, + unsigned char *rsig, unsigned char *rhash); + +__owur int SSL_check_chain(SSL *s, X509 *x, EVP_PKEY *pk, STACK_OF(X509) *chain); + +# define SSL_set_tlsext_host_name(s,name) \ + SSL_ctrl(s,SSL_CTRL_SET_TLSEXT_HOSTNAME,TLSEXT_NAMETYPE_host_name,\ + (void *)name) + +# define SSL_set_tlsext_debug_callback(ssl, cb) \ + SSL_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_DEBUG_CB,\ + (void (*)(void))cb) + +# define SSL_set_tlsext_debug_arg(ssl, arg) \ + SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_DEBUG_ARG,0,arg) + +# define SSL_get_tlsext_status_type(ssl) \ + SSL_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_TYPE,0,NULL) + +# define SSL_set_tlsext_status_type(ssl, type) \ + SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE,type,NULL) + +# define SSL_get_tlsext_status_exts(ssl, arg) \ + SSL_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_EXTS,0,arg) + +# define SSL_set_tlsext_status_exts(ssl, arg) \ + SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_EXTS,0,arg) + +# define SSL_get_tlsext_status_ids(ssl, arg) \ + SSL_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_IDS,0,arg) + +# define SSL_set_tlsext_status_ids(ssl, arg) \ + SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_IDS,0,arg) + +# define SSL_get_tlsext_status_ocsp_resp(ssl, arg) \ + SSL_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP,0,arg) + +# define SSL_set_tlsext_status_ocsp_resp(ssl, arg, arglen) \ + SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP,arglen,arg) + +# define SSL_CTX_set_tlsext_servername_callback(ctx, cb) \ + SSL_CTX_callback_ctrl(ctx,SSL_CTRL_SET_TLSEXT_SERVERNAME_CB,\ + (void (*)(void))cb) + +# define SSL_TLSEXT_ERR_OK 0 +# define SSL_TLSEXT_ERR_ALERT_WARNING 1 +# define SSL_TLSEXT_ERR_ALERT_FATAL 2 +# define SSL_TLSEXT_ERR_NOACK 3 + +# define SSL_CTX_set_tlsext_servername_arg(ctx, arg) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG,0,arg) + +# define SSL_CTX_get_tlsext_ticket_keys(ctx, keys, keylen) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_TLSEXT_TICKET_KEYS,keylen,keys) +# define SSL_CTX_set_tlsext_ticket_keys(ctx, keys, keylen) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TLSEXT_TICKET_KEYS,keylen,keys) + +# define SSL_CTX_get_tlsext_status_cb(ssl, cb) \ + SSL_CTX_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_CB,0,(void *)cb) +# define SSL_CTX_set_tlsext_status_cb(ssl, cb) \ + SSL_CTX_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB,\ + (void (*)(void))cb) + +# define SSL_CTX_get_tlsext_status_arg(ssl, arg) \ + SSL_CTX_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_CB_ARG,0,arg) +# define SSL_CTX_set_tlsext_status_arg(ssl, arg) \ + SSL_CTX_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG,0,arg) + +# define SSL_CTX_set_tlsext_status_type(ssl, type) \ + SSL_CTX_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE,type,NULL) + +# define SSL_CTX_get_tlsext_status_type(ssl) \ + SSL_CTX_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_TYPE,0,NULL) + +# define SSL_CTX_set_tlsext_ticket_key_cb(ssl, cb) \ + SSL_CTX_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB,\ + (void (*)(void))cb) + +# ifndef OPENSSL_NO_HEARTBEATS +# define SSL_DTLSEXT_HB_ENABLED 0x01 +# define SSL_DTLSEXT_HB_DONT_SEND_REQUESTS 0x02 +# define SSL_DTLSEXT_HB_DONT_RECV_REQUESTS 0x04 +# define SSL_get_dtlsext_heartbeat_pending(ssl) \ + SSL_ctrl(ssl,SSL_CTRL_GET_DTLS_EXT_HEARTBEAT_PENDING,0,NULL) +# define SSL_set_dtlsext_heartbeat_no_requests(ssl, arg) \ + SSL_ctrl(ssl,SSL_CTRL_SET_DTLS_EXT_HEARTBEAT_NO_REQUESTS,arg,NULL) + +# if OPENSSL_API_COMPAT < 0x10100000L +# define SSL_CTRL_TLS_EXT_SEND_HEARTBEAT \ + SSL_CTRL_DTLS_EXT_SEND_HEARTBEAT +# define SSL_CTRL_GET_TLS_EXT_HEARTBEAT_PENDING \ + SSL_CTRL_GET_DTLS_EXT_HEARTBEAT_PENDING +# define SSL_CTRL_SET_TLS_EXT_HEARTBEAT_NO_REQUESTS \ + SSL_CTRL_SET_DTLS_EXT_HEARTBEAT_NO_REQUESTS +# define SSL_TLSEXT_HB_ENABLED \ + SSL_DTLSEXT_HB_ENABLED +# define SSL_TLSEXT_HB_DONT_SEND_REQUESTS \ + SSL_DTLSEXT_HB_DONT_SEND_REQUESTS +# define SSL_TLSEXT_HB_DONT_RECV_REQUESTS \ + SSL_DTLSEXT_HB_DONT_RECV_REQUESTS +# define SSL_get_tlsext_heartbeat_pending(ssl) \ + SSL_get_dtlsext_heartbeat_pending(ssl) +# define SSL_set_tlsext_heartbeat_no_requests(ssl, arg) \ + SSL_set_dtlsext_heartbeat_no_requests(ssl,arg) +# endif +# endif + +/* PSK ciphersuites from 4279 */ +# define TLS1_CK_PSK_WITH_RC4_128_SHA 0x0300008A +# define TLS1_CK_PSK_WITH_3DES_EDE_CBC_SHA 0x0300008B +# define TLS1_CK_PSK_WITH_AES_128_CBC_SHA 0x0300008C +# define TLS1_CK_PSK_WITH_AES_256_CBC_SHA 0x0300008D +# define TLS1_CK_DHE_PSK_WITH_RC4_128_SHA 0x0300008E +# define TLS1_CK_DHE_PSK_WITH_3DES_EDE_CBC_SHA 0x0300008F +# define TLS1_CK_DHE_PSK_WITH_AES_128_CBC_SHA 0x03000090 +# define TLS1_CK_DHE_PSK_WITH_AES_256_CBC_SHA 0x03000091 +# define TLS1_CK_RSA_PSK_WITH_RC4_128_SHA 0x03000092 +# define TLS1_CK_RSA_PSK_WITH_3DES_EDE_CBC_SHA 0x03000093 +# define TLS1_CK_RSA_PSK_WITH_AES_128_CBC_SHA 0x03000094 +# define TLS1_CK_RSA_PSK_WITH_AES_256_CBC_SHA 0x03000095 + +/* PSK ciphersuites from 5487 */ +# define TLS1_CK_PSK_WITH_AES_128_GCM_SHA256 0x030000A8 +# define TLS1_CK_PSK_WITH_AES_256_GCM_SHA384 0x030000A9 +# define TLS1_CK_DHE_PSK_WITH_AES_128_GCM_SHA256 0x030000AA +# define TLS1_CK_DHE_PSK_WITH_AES_256_GCM_SHA384 0x030000AB +# define TLS1_CK_RSA_PSK_WITH_AES_128_GCM_SHA256 0x030000AC +# define TLS1_CK_RSA_PSK_WITH_AES_256_GCM_SHA384 0x030000AD +# define TLS1_CK_PSK_WITH_AES_128_CBC_SHA256 0x030000AE +# define TLS1_CK_PSK_WITH_AES_256_CBC_SHA384 0x030000AF +# define TLS1_CK_PSK_WITH_NULL_SHA256 0x030000B0 +# define TLS1_CK_PSK_WITH_NULL_SHA384 0x030000B1 +# define TLS1_CK_DHE_PSK_WITH_AES_128_CBC_SHA256 0x030000B2 +# define TLS1_CK_DHE_PSK_WITH_AES_256_CBC_SHA384 0x030000B3 +# define TLS1_CK_DHE_PSK_WITH_NULL_SHA256 0x030000B4 +# define TLS1_CK_DHE_PSK_WITH_NULL_SHA384 0x030000B5 +# define TLS1_CK_RSA_PSK_WITH_AES_128_CBC_SHA256 0x030000B6 +# define TLS1_CK_RSA_PSK_WITH_AES_256_CBC_SHA384 0x030000B7 +# define TLS1_CK_RSA_PSK_WITH_NULL_SHA256 0x030000B8 +# define TLS1_CK_RSA_PSK_WITH_NULL_SHA384 0x030000B9 + +/* NULL PSK ciphersuites from RFC4785 */ +# define TLS1_CK_PSK_WITH_NULL_SHA 0x0300002C +# define TLS1_CK_DHE_PSK_WITH_NULL_SHA 0x0300002D +# define TLS1_CK_RSA_PSK_WITH_NULL_SHA 0x0300002E + +/* AES ciphersuites from RFC3268 */ +# define TLS1_CK_RSA_WITH_AES_128_SHA 0x0300002F +# define TLS1_CK_DH_DSS_WITH_AES_128_SHA 0x03000030 +# define TLS1_CK_DH_RSA_WITH_AES_128_SHA 0x03000031 +# define TLS1_CK_DHE_DSS_WITH_AES_128_SHA 0x03000032 +# define TLS1_CK_DHE_RSA_WITH_AES_128_SHA 0x03000033 +# define TLS1_CK_ADH_WITH_AES_128_SHA 0x03000034 +# define TLS1_CK_RSA_WITH_AES_256_SHA 0x03000035 +# define TLS1_CK_DH_DSS_WITH_AES_256_SHA 0x03000036 +# define TLS1_CK_DH_RSA_WITH_AES_256_SHA 0x03000037 +# define TLS1_CK_DHE_DSS_WITH_AES_256_SHA 0x03000038 +# define TLS1_CK_DHE_RSA_WITH_AES_256_SHA 0x03000039 +# define TLS1_CK_ADH_WITH_AES_256_SHA 0x0300003A + +/* TLS v1.2 ciphersuites */ +# define TLS1_CK_RSA_WITH_NULL_SHA256 0x0300003B +# define TLS1_CK_RSA_WITH_AES_128_SHA256 0x0300003C +# define TLS1_CK_RSA_WITH_AES_256_SHA256 0x0300003D +# define TLS1_CK_DH_DSS_WITH_AES_128_SHA256 0x0300003E +# define TLS1_CK_DH_RSA_WITH_AES_128_SHA256 0x0300003F +# define TLS1_CK_DHE_DSS_WITH_AES_128_SHA256 0x03000040 + +/* Camellia ciphersuites from RFC4132 */ +# define TLS1_CK_RSA_WITH_CAMELLIA_128_CBC_SHA 0x03000041 +# define TLS1_CK_DH_DSS_WITH_CAMELLIA_128_CBC_SHA 0x03000042 +# define TLS1_CK_DH_RSA_WITH_CAMELLIA_128_CBC_SHA 0x03000043 +# define TLS1_CK_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA 0x03000044 +# define TLS1_CK_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA 0x03000045 +# define TLS1_CK_ADH_WITH_CAMELLIA_128_CBC_SHA 0x03000046 + +/* TLS v1.2 ciphersuites */ +# define TLS1_CK_DHE_RSA_WITH_AES_128_SHA256 0x03000067 +# define TLS1_CK_DH_DSS_WITH_AES_256_SHA256 0x03000068 +# define TLS1_CK_DH_RSA_WITH_AES_256_SHA256 0x03000069 +# define TLS1_CK_DHE_DSS_WITH_AES_256_SHA256 0x0300006A +# define TLS1_CK_DHE_RSA_WITH_AES_256_SHA256 0x0300006B +# define TLS1_CK_ADH_WITH_AES_128_SHA256 0x0300006C +# define TLS1_CK_ADH_WITH_AES_256_SHA256 0x0300006D + +/* Camellia ciphersuites from RFC4132 */ +# define TLS1_CK_RSA_WITH_CAMELLIA_256_CBC_SHA 0x03000084 +# define TLS1_CK_DH_DSS_WITH_CAMELLIA_256_CBC_SHA 0x03000085 +# define TLS1_CK_DH_RSA_WITH_CAMELLIA_256_CBC_SHA 0x03000086 +# define TLS1_CK_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA 0x03000087 +# define TLS1_CK_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA 0x03000088 +# define TLS1_CK_ADH_WITH_CAMELLIA_256_CBC_SHA 0x03000089 + +/* SEED ciphersuites from RFC4162 */ +# define TLS1_CK_RSA_WITH_SEED_SHA 0x03000096 +# define TLS1_CK_DH_DSS_WITH_SEED_SHA 0x03000097 +# define TLS1_CK_DH_RSA_WITH_SEED_SHA 0x03000098 +# define TLS1_CK_DHE_DSS_WITH_SEED_SHA 0x03000099 +# define TLS1_CK_DHE_RSA_WITH_SEED_SHA 0x0300009A +# define TLS1_CK_ADH_WITH_SEED_SHA 0x0300009B + +/* TLS v1.2 GCM ciphersuites from RFC5288 */ +# define TLS1_CK_RSA_WITH_AES_128_GCM_SHA256 0x0300009C +# define TLS1_CK_RSA_WITH_AES_256_GCM_SHA384 0x0300009D +# define TLS1_CK_DHE_RSA_WITH_AES_128_GCM_SHA256 0x0300009E +# define TLS1_CK_DHE_RSA_WITH_AES_256_GCM_SHA384 0x0300009F +# define TLS1_CK_DH_RSA_WITH_AES_128_GCM_SHA256 0x030000A0 +# define TLS1_CK_DH_RSA_WITH_AES_256_GCM_SHA384 0x030000A1 +# define TLS1_CK_DHE_DSS_WITH_AES_128_GCM_SHA256 0x030000A2 +# define TLS1_CK_DHE_DSS_WITH_AES_256_GCM_SHA384 0x030000A3 +# define TLS1_CK_DH_DSS_WITH_AES_128_GCM_SHA256 0x030000A4 +# define TLS1_CK_DH_DSS_WITH_AES_256_GCM_SHA384 0x030000A5 +# define TLS1_CK_ADH_WITH_AES_128_GCM_SHA256 0x030000A6 +# define TLS1_CK_ADH_WITH_AES_256_GCM_SHA384 0x030000A7 + +/* CCM ciphersuites from RFC6655 */ +# define TLS1_CK_RSA_WITH_AES_128_CCM 0x0300C09C +# define TLS1_CK_RSA_WITH_AES_256_CCM 0x0300C09D +# define TLS1_CK_DHE_RSA_WITH_AES_128_CCM 0x0300C09E +# define TLS1_CK_DHE_RSA_WITH_AES_256_CCM 0x0300C09F +# define TLS1_CK_RSA_WITH_AES_128_CCM_8 0x0300C0A0 +# define TLS1_CK_RSA_WITH_AES_256_CCM_8 0x0300C0A1 +# define TLS1_CK_DHE_RSA_WITH_AES_128_CCM_8 0x0300C0A2 +# define TLS1_CK_DHE_RSA_WITH_AES_256_CCM_8 0x0300C0A3 +# define TLS1_CK_PSK_WITH_AES_128_CCM 0x0300C0A4 +# define TLS1_CK_PSK_WITH_AES_256_CCM 0x0300C0A5 +# define TLS1_CK_DHE_PSK_WITH_AES_128_CCM 0x0300C0A6 +# define TLS1_CK_DHE_PSK_WITH_AES_256_CCM 0x0300C0A7 +# define TLS1_CK_PSK_WITH_AES_128_CCM_8 0x0300C0A8 +# define TLS1_CK_PSK_WITH_AES_256_CCM_8 0x0300C0A9 +# define TLS1_CK_DHE_PSK_WITH_AES_128_CCM_8 0x0300C0AA +# define TLS1_CK_DHE_PSK_WITH_AES_256_CCM_8 0x0300C0AB + +/* CCM ciphersuites from RFC7251 */ +# define TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CCM 0x0300C0AC +# define TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CCM 0x0300C0AD +# define TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CCM_8 0x0300C0AE +# define TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CCM_8 0x0300C0AF + +/* TLS 1.2 Camellia SHA-256 ciphersuites from RFC5932 */ +# define TLS1_CK_RSA_WITH_CAMELLIA_128_CBC_SHA256 0x030000BA +# define TLS1_CK_DH_DSS_WITH_CAMELLIA_128_CBC_SHA256 0x030000BB +# define TLS1_CK_DH_RSA_WITH_CAMELLIA_128_CBC_SHA256 0x030000BC +# define TLS1_CK_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256 0x030000BD +# define TLS1_CK_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 0x030000BE +# define TLS1_CK_ADH_WITH_CAMELLIA_128_CBC_SHA256 0x030000BF + +# define TLS1_CK_RSA_WITH_CAMELLIA_256_CBC_SHA256 0x030000C0 +# define TLS1_CK_DH_DSS_WITH_CAMELLIA_256_CBC_SHA256 0x030000C1 +# define TLS1_CK_DH_RSA_WITH_CAMELLIA_256_CBC_SHA256 0x030000C2 +# define TLS1_CK_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256 0x030000C3 +# define TLS1_CK_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 0x030000C4 +# define TLS1_CK_ADH_WITH_CAMELLIA_256_CBC_SHA256 0x030000C5 + +/* ECC ciphersuites from RFC4492 */ +# define TLS1_CK_ECDH_ECDSA_WITH_NULL_SHA 0x0300C001 +# define TLS1_CK_ECDH_ECDSA_WITH_RC4_128_SHA 0x0300C002 +# define TLS1_CK_ECDH_ECDSA_WITH_DES_192_CBC3_SHA 0x0300C003 +# define TLS1_CK_ECDH_ECDSA_WITH_AES_128_CBC_SHA 0x0300C004 +# define TLS1_CK_ECDH_ECDSA_WITH_AES_256_CBC_SHA 0x0300C005 + +# define TLS1_CK_ECDHE_ECDSA_WITH_NULL_SHA 0x0300C006 +# define TLS1_CK_ECDHE_ECDSA_WITH_RC4_128_SHA 0x0300C007 +# define TLS1_CK_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA 0x0300C008 +# define TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CBC_SHA 0x0300C009 +# define TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CBC_SHA 0x0300C00A + +# define TLS1_CK_ECDH_RSA_WITH_NULL_SHA 0x0300C00B +# define TLS1_CK_ECDH_RSA_WITH_RC4_128_SHA 0x0300C00C +# define TLS1_CK_ECDH_RSA_WITH_DES_192_CBC3_SHA 0x0300C00D +# define TLS1_CK_ECDH_RSA_WITH_AES_128_CBC_SHA 0x0300C00E +# define TLS1_CK_ECDH_RSA_WITH_AES_256_CBC_SHA 0x0300C00F + +# define TLS1_CK_ECDHE_RSA_WITH_NULL_SHA 0x0300C010 +# define TLS1_CK_ECDHE_RSA_WITH_RC4_128_SHA 0x0300C011 +# define TLS1_CK_ECDHE_RSA_WITH_DES_192_CBC3_SHA 0x0300C012 +# define TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA 0x0300C013 +# define TLS1_CK_ECDHE_RSA_WITH_AES_256_CBC_SHA 0x0300C014 + +# define TLS1_CK_ECDH_anon_WITH_NULL_SHA 0x0300C015 +# define TLS1_CK_ECDH_anon_WITH_RC4_128_SHA 0x0300C016 +# define TLS1_CK_ECDH_anon_WITH_DES_192_CBC3_SHA 0x0300C017 +# define TLS1_CK_ECDH_anon_WITH_AES_128_CBC_SHA 0x0300C018 +# define TLS1_CK_ECDH_anon_WITH_AES_256_CBC_SHA 0x0300C019 + +/* SRP ciphersuites from RFC 5054 */ +# define TLS1_CK_SRP_SHA_WITH_3DES_EDE_CBC_SHA 0x0300C01A +# define TLS1_CK_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA 0x0300C01B +# define TLS1_CK_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA 0x0300C01C +# define TLS1_CK_SRP_SHA_WITH_AES_128_CBC_SHA 0x0300C01D +# define TLS1_CK_SRP_SHA_RSA_WITH_AES_128_CBC_SHA 0x0300C01E +# define TLS1_CK_SRP_SHA_DSS_WITH_AES_128_CBC_SHA 0x0300C01F +# define TLS1_CK_SRP_SHA_WITH_AES_256_CBC_SHA 0x0300C020 +# define TLS1_CK_SRP_SHA_RSA_WITH_AES_256_CBC_SHA 0x0300C021 +# define TLS1_CK_SRP_SHA_DSS_WITH_AES_256_CBC_SHA 0x0300C022 + +/* ECDH HMAC based ciphersuites from RFC5289 */ +# define TLS1_CK_ECDHE_ECDSA_WITH_AES_128_SHA256 0x0300C023 +# define TLS1_CK_ECDHE_ECDSA_WITH_AES_256_SHA384 0x0300C024 +# define TLS1_CK_ECDH_ECDSA_WITH_AES_128_SHA256 0x0300C025 +# define TLS1_CK_ECDH_ECDSA_WITH_AES_256_SHA384 0x0300C026 +# define TLS1_CK_ECDHE_RSA_WITH_AES_128_SHA256 0x0300C027 +# define TLS1_CK_ECDHE_RSA_WITH_AES_256_SHA384 0x0300C028 +# define TLS1_CK_ECDH_RSA_WITH_AES_128_SHA256 0x0300C029 +# define TLS1_CK_ECDH_RSA_WITH_AES_256_SHA384 0x0300C02A + +/* ECDH GCM based ciphersuites from RFC5289 */ +# define TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 0x0300C02B +# define TLS1_CK_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 0x0300C02C +# define TLS1_CK_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 0x0300C02D +# define TLS1_CK_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 0x0300C02E +# define TLS1_CK_ECDHE_RSA_WITH_AES_128_GCM_SHA256 0x0300C02F +# define TLS1_CK_ECDHE_RSA_WITH_AES_256_GCM_SHA384 0x0300C030 +# define TLS1_CK_ECDH_RSA_WITH_AES_128_GCM_SHA256 0x0300C031 +# define TLS1_CK_ECDH_RSA_WITH_AES_256_GCM_SHA384 0x0300C032 + +/* ECDHE PSK ciphersuites from RFC5489 */ +# define TLS1_CK_ECDHE_PSK_WITH_RC4_128_SHA 0x0300C033 +# define TLS1_CK_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA 0x0300C034 +# define TLS1_CK_ECDHE_PSK_WITH_AES_128_CBC_SHA 0x0300C035 +# define TLS1_CK_ECDHE_PSK_WITH_AES_256_CBC_SHA 0x0300C036 + +# define TLS1_CK_ECDHE_PSK_WITH_AES_128_CBC_SHA256 0x0300C037 +# define TLS1_CK_ECDHE_PSK_WITH_AES_256_CBC_SHA384 0x0300C038 + +/* NULL PSK ciphersuites from RFC4785 */ +# define TLS1_CK_ECDHE_PSK_WITH_NULL_SHA 0x0300C039 +# define TLS1_CK_ECDHE_PSK_WITH_NULL_SHA256 0x0300C03A +# define TLS1_CK_ECDHE_PSK_WITH_NULL_SHA384 0x0300C03B + +/* Camellia-CBC ciphersuites from RFC6367 */ +# define TLS1_CK_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 0x0300C072 +# define TLS1_CK_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 0x0300C073 +# define TLS1_CK_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 0x0300C074 +# define TLS1_CK_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 0x0300C075 +# define TLS1_CK_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 0x0300C076 +# define TLS1_CK_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384 0x0300C077 +# define TLS1_CK_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256 0x0300C078 +# define TLS1_CK_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384 0x0300C079 + +# define TLS1_CK_PSK_WITH_CAMELLIA_128_CBC_SHA256 0x0300C094 +# define TLS1_CK_PSK_WITH_CAMELLIA_256_CBC_SHA384 0x0300C095 +# define TLS1_CK_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 0x0300C096 +# define TLS1_CK_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 0x0300C097 +# define TLS1_CK_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256 0x0300C098 +# define TLS1_CK_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384 0x0300C099 +# define TLS1_CK_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 0x0300C09A +# define TLS1_CK_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 0x0300C09B + +/* draft-ietf-tls-chacha20-poly1305-03 */ +# define TLS1_CK_ECDHE_RSA_WITH_CHACHA20_POLY1305 0x0300CCA8 +# define TLS1_CK_ECDHE_ECDSA_WITH_CHACHA20_POLY1305 0x0300CCA9 +# define TLS1_CK_DHE_RSA_WITH_CHACHA20_POLY1305 0x0300CCAA +# define TLS1_CK_PSK_WITH_CHACHA20_POLY1305 0x0300CCAB +# define TLS1_CK_ECDHE_PSK_WITH_CHACHA20_POLY1305 0x0300CCAC +# define TLS1_CK_DHE_PSK_WITH_CHACHA20_POLY1305 0x0300CCAD +# define TLS1_CK_RSA_PSK_WITH_CHACHA20_POLY1305 0x0300CCAE + +/* TLS v1.3 ciphersuites */ +# define TLS1_3_CK_AES_128_GCM_SHA256 0x03001301 +# define TLS1_3_CK_AES_256_GCM_SHA384 0x03001302 +# define TLS1_3_CK_CHACHA20_POLY1305_SHA256 0x03001303 +# define TLS1_3_CK_AES_128_CCM_SHA256 0x03001304 +# define TLS1_3_CK_AES_128_CCM_8_SHA256 0x03001305 + +/* Aria ciphersuites from RFC6209 */ +# define TLS1_CK_RSA_WITH_ARIA_128_GCM_SHA256 0x0300C050 +# define TLS1_CK_RSA_WITH_ARIA_256_GCM_SHA384 0x0300C051 +# define TLS1_CK_DHE_RSA_WITH_ARIA_128_GCM_SHA256 0x0300C052 +# define TLS1_CK_DHE_RSA_WITH_ARIA_256_GCM_SHA384 0x0300C053 +# define TLS1_CK_DH_RSA_WITH_ARIA_128_GCM_SHA256 0x0300C054 +# define TLS1_CK_DH_RSA_WITH_ARIA_256_GCM_SHA384 0x0300C055 +# define TLS1_CK_DHE_DSS_WITH_ARIA_128_GCM_SHA256 0x0300C056 +# define TLS1_CK_DHE_DSS_WITH_ARIA_256_GCM_SHA384 0x0300C057 +# define TLS1_CK_DH_DSS_WITH_ARIA_128_GCM_SHA256 0x0300C058 +# define TLS1_CK_DH_DSS_WITH_ARIA_256_GCM_SHA384 0x0300C059 +# define TLS1_CK_DH_anon_WITH_ARIA_128_GCM_SHA256 0x0300C05A +# define TLS1_CK_DH_anon_WITH_ARIA_256_GCM_SHA384 0x0300C05B +# define TLS1_CK_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256 0x0300C05C +# define TLS1_CK_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384 0x0300C05D +# define TLS1_CK_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256 0x0300C05E +# define TLS1_CK_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384 0x0300C05F +# define TLS1_CK_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256 0x0300C060 +# define TLS1_CK_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384 0x0300C061 +# define TLS1_CK_ECDH_RSA_WITH_ARIA_128_GCM_SHA256 0x0300C062 +# define TLS1_CK_ECDH_RSA_WITH_ARIA_256_GCM_SHA384 0x0300C063 +# define TLS1_CK_PSK_WITH_ARIA_128_GCM_SHA256 0x0300C06A +# define TLS1_CK_PSK_WITH_ARIA_256_GCM_SHA384 0x0300C06B +# define TLS1_CK_DHE_PSK_WITH_ARIA_128_GCM_SHA256 0x0300C06C +# define TLS1_CK_DHE_PSK_WITH_ARIA_256_GCM_SHA384 0x0300C06D +# define TLS1_CK_RSA_PSK_WITH_ARIA_128_GCM_SHA256 0x0300C06E +# define TLS1_CK_RSA_PSK_WITH_ARIA_256_GCM_SHA384 0x0300C06F + +/* a bundle of RFC standard cipher names, generated from ssl3_ciphers[] */ +# define TLS1_RFC_RSA_WITH_AES_128_SHA "TLS_RSA_WITH_AES_128_CBC_SHA" +# define TLS1_RFC_DHE_DSS_WITH_AES_128_SHA "TLS_DHE_DSS_WITH_AES_128_CBC_SHA" +# define TLS1_RFC_DHE_RSA_WITH_AES_128_SHA "TLS_DHE_RSA_WITH_AES_128_CBC_SHA" +# define TLS1_RFC_ADH_WITH_AES_128_SHA "TLS_DH_anon_WITH_AES_128_CBC_SHA" +# define TLS1_RFC_RSA_WITH_AES_256_SHA "TLS_RSA_WITH_AES_256_CBC_SHA" +# define TLS1_RFC_DHE_DSS_WITH_AES_256_SHA "TLS_DHE_DSS_WITH_AES_256_CBC_SHA" +# define TLS1_RFC_DHE_RSA_WITH_AES_256_SHA "TLS_DHE_RSA_WITH_AES_256_CBC_SHA" +# define TLS1_RFC_ADH_WITH_AES_256_SHA "TLS_DH_anon_WITH_AES_256_CBC_SHA" +# define TLS1_RFC_RSA_WITH_NULL_SHA256 "TLS_RSA_WITH_NULL_SHA256" +# define TLS1_RFC_RSA_WITH_AES_128_SHA256 "TLS_RSA_WITH_AES_128_CBC_SHA256" +# define TLS1_RFC_RSA_WITH_AES_256_SHA256 "TLS_RSA_WITH_AES_256_CBC_SHA256" +# define TLS1_RFC_DHE_DSS_WITH_AES_128_SHA256 "TLS_DHE_DSS_WITH_AES_128_CBC_SHA256" +# define TLS1_RFC_DHE_RSA_WITH_AES_128_SHA256 "TLS_DHE_RSA_WITH_AES_128_CBC_SHA256" +# define TLS1_RFC_DHE_DSS_WITH_AES_256_SHA256 "TLS_DHE_DSS_WITH_AES_256_CBC_SHA256" +# define TLS1_RFC_DHE_RSA_WITH_AES_256_SHA256 "TLS_DHE_RSA_WITH_AES_256_CBC_SHA256" +# define TLS1_RFC_ADH_WITH_AES_128_SHA256 "TLS_DH_anon_WITH_AES_128_CBC_SHA256" +# define TLS1_RFC_ADH_WITH_AES_256_SHA256 "TLS_DH_anon_WITH_AES_256_CBC_SHA256" +# define TLS1_RFC_RSA_WITH_AES_128_GCM_SHA256 "TLS_RSA_WITH_AES_128_GCM_SHA256" +# define TLS1_RFC_RSA_WITH_AES_256_GCM_SHA384 "TLS_RSA_WITH_AES_256_GCM_SHA384" +# define TLS1_RFC_DHE_RSA_WITH_AES_128_GCM_SHA256 "TLS_DHE_RSA_WITH_AES_128_GCM_SHA256" +# define TLS1_RFC_DHE_RSA_WITH_AES_256_GCM_SHA384 "TLS_DHE_RSA_WITH_AES_256_GCM_SHA384" +# define TLS1_RFC_DHE_DSS_WITH_AES_128_GCM_SHA256 "TLS_DHE_DSS_WITH_AES_128_GCM_SHA256" +# define TLS1_RFC_DHE_DSS_WITH_AES_256_GCM_SHA384 "TLS_DHE_DSS_WITH_AES_256_GCM_SHA384" +# define TLS1_RFC_ADH_WITH_AES_128_GCM_SHA256 "TLS_DH_anon_WITH_AES_128_GCM_SHA256" +# define TLS1_RFC_ADH_WITH_AES_256_GCM_SHA384 "TLS_DH_anon_WITH_AES_256_GCM_SHA384" +# define TLS1_RFC_RSA_WITH_AES_128_CCM "TLS_RSA_WITH_AES_128_CCM" +# define TLS1_RFC_RSA_WITH_AES_256_CCM "TLS_RSA_WITH_AES_256_CCM" +# define TLS1_RFC_DHE_RSA_WITH_AES_128_CCM "TLS_DHE_RSA_WITH_AES_128_CCM" +# define TLS1_RFC_DHE_RSA_WITH_AES_256_CCM "TLS_DHE_RSA_WITH_AES_256_CCM" +# define TLS1_RFC_RSA_WITH_AES_128_CCM_8 "TLS_RSA_WITH_AES_128_CCM_8" +# define TLS1_RFC_RSA_WITH_AES_256_CCM_8 "TLS_RSA_WITH_AES_256_CCM_8" +# define TLS1_RFC_DHE_RSA_WITH_AES_128_CCM_8 "TLS_DHE_RSA_WITH_AES_128_CCM_8" +# define TLS1_RFC_DHE_RSA_WITH_AES_256_CCM_8 "TLS_DHE_RSA_WITH_AES_256_CCM_8" +# define TLS1_RFC_PSK_WITH_AES_128_CCM "TLS_PSK_WITH_AES_128_CCM" +# define TLS1_RFC_PSK_WITH_AES_256_CCM "TLS_PSK_WITH_AES_256_CCM" +# define TLS1_RFC_DHE_PSK_WITH_AES_128_CCM "TLS_DHE_PSK_WITH_AES_128_CCM" +# define TLS1_RFC_DHE_PSK_WITH_AES_256_CCM "TLS_DHE_PSK_WITH_AES_256_CCM" +# define TLS1_RFC_PSK_WITH_AES_128_CCM_8 "TLS_PSK_WITH_AES_128_CCM_8" +# define TLS1_RFC_PSK_WITH_AES_256_CCM_8 "TLS_PSK_WITH_AES_256_CCM_8" +# define TLS1_RFC_DHE_PSK_WITH_AES_128_CCM_8 "TLS_PSK_DHE_WITH_AES_128_CCM_8" +# define TLS1_RFC_DHE_PSK_WITH_AES_256_CCM_8 "TLS_PSK_DHE_WITH_AES_256_CCM_8" +# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_128_CCM "TLS_ECDHE_ECDSA_WITH_AES_128_CCM" +# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_256_CCM "TLS_ECDHE_ECDSA_WITH_AES_256_CCM" +# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_128_CCM_8 "TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8" +# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_256_CCM_8 "TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8" +# define TLS1_3_RFC_AES_128_GCM_SHA256 "TLS_AES_128_GCM_SHA256" +# define TLS1_3_RFC_AES_256_GCM_SHA384 "TLS_AES_256_GCM_SHA384" +# define TLS1_3_RFC_CHACHA20_POLY1305_SHA256 "TLS_CHACHA20_POLY1305_SHA256" +# define TLS1_3_RFC_AES_128_CCM_SHA256 "TLS_AES_128_CCM_SHA256" +# define TLS1_3_RFC_AES_128_CCM_8_SHA256 "TLS_AES_128_CCM_8_SHA256" +# define TLS1_RFC_ECDHE_ECDSA_WITH_NULL_SHA "TLS_ECDHE_ECDSA_WITH_NULL_SHA" +# define TLS1_RFC_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA "TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA" +# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_128_CBC_SHA "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA" +# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_256_CBC_SHA "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA" +# define TLS1_RFC_ECDHE_RSA_WITH_NULL_SHA "TLS_ECDHE_RSA_WITH_NULL_SHA" +# define TLS1_RFC_ECDHE_RSA_WITH_DES_192_CBC3_SHA "TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA" +# define TLS1_RFC_ECDHE_RSA_WITH_AES_128_CBC_SHA "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA" +# define TLS1_RFC_ECDHE_RSA_WITH_AES_256_CBC_SHA "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA" +# define TLS1_RFC_ECDH_anon_WITH_NULL_SHA "TLS_ECDH_anon_WITH_NULL_SHA" +# define TLS1_RFC_ECDH_anon_WITH_DES_192_CBC3_SHA "TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA" +# define TLS1_RFC_ECDH_anon_WITH_AES_128_CBC_SHA "TLS_ECDH_anon_WITH_AES_128_CBC_SHA" +# define TLS1_RFC_ECDH_anon_WITH_AES_256_CBC_SHA "TLS_ECDH_anon_WITH_AES_256_CBC_SHA" +# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_128_SHA256 "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256" +# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_256_SHA384 "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384" +# define TLS1_RFC_ECDHE_RSA_WITH_AES_128_SHA256 "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256" +# define TLS1_RFC_ECDHE_RSA_WITH_AES_256_SHA384 "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384" +# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256" +# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384" +# define TLS1_RFC_ECDHE_RSA_WITH_AES_128_GCM_SHA256 "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256" +# define TLS1_RFC_ECDHE_RSA_WITH_AES_256_GCM_SHA384 "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384" +# define TLS1_RFC_PSK_WITH_NULL_SHA "TLS_PSK_WITH_NULL_SHA" +# define TLS1_RFC_DHE_PSK_WITH_NULL_SHA "TLS_DHE_PSK_WITH_NULL_SHA" +# define TLS1_RFC_RSA_PSK_WITH_NULL_SHA "TLS_RSA_PSK_WITH_NULL_SHA" +# define TLS1_RFC_PSK_WITH_3DES_EDE_CBC_SHA "TLS_PSK_WITH_3DES_EDE_CBC_SHA" +# define TLS1_RFC_PSK_WITH_AES_128_CBC_SHA "TLS_PSK_WITH_AES_128_CBC_SHA" +# define TLS1_RFC_PSK_WITH_AES_256_CBC_SHA "TLS_PSK_WITH_AES_256_CBC_SHA" +# define TLS1_RFC_DHE_PSK_WITH_3DES_EDE_CBC_SHA "TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA" +# define TLS1_RFC_DHE_PSK_WITH_AES_128_CBC_SHA "TLS_DHE_PSK_WITH_AES_128_CBC_SHA" +# define TLS1_RFC_DHE_PSK_WITH_AES_256_CBC_SHA "TLS_DHE_PSK_WITH_AES_256_CBC_SHA" +# define TLS1_RFC_RSA_PSK_WITH_3DES_EDE_CBC_SHA "TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA" +# define TLS1_RFC_RSA_PSK_WITH_AES_128_CBC_SHA "TLS_RSA_PSK_WITH_AES_128_CBC_SHA" +# define TLS1_RFC_RSA_PSK_WITH_AES_256_CBC_SHA "TLS_RSA_PSK_WITH_AES_256_CBC_SHA" +# define TLS1_RFC_PSK_WITH_AES_128_GCM_SHA256 "TLS_PSK_WITH_AES_128_GCM_SHA256" +# define TLS1_RFC_PSK_WITH_AES_256_GCM_SHA384 "TLS_PSK_WITH_AES_256_GCM_SHA384" +# define TLS1_RFC_DHE_PSK_WITH_AES_128_GCM_SHA256 "TLS_DHE_PSK_WITH_AES_128_GCM_SHA256" +# define TLS1_RFC_DHE_PSK_WITH_AES_256_GCM_SHA384 "TLS_DHE_PSK_WITH_AES_256_GCM_SHA384" +# define TLS1_RFC_RSA_PSK_WITH_AES_128_GCM_SHA256 "TLS_RSA_PSK_WITH_AES_128_GCM_SHA256" +# define TLS1_RFC_RSA_PSK_WITH_AES_256_GCM_SHA384 "TLS_RSA_PSK_WITH_AES_256_GCM_SHA384" +# define TLS1_RFC_PSK_WITH_AES_128_CBC_SHA256 "TLS_PSK_WITH_AES_128_CBC_SHA256" +# define TLS1_RFC_PSK_WITH_AES_256_CBC_SHA384 "TLS_PSK_WITH_AES_256_CBC_SHA384" +# define TLS1_RFC_PSK_WITH_NULL_SHA256 "TLS_PSK_WITH_NULL_SHA256" +# define TLS1_RFC_PSK_WITH_NULL_SHA384 "TLS_PSK_WITH_NULL_SHA384" +# define TLS1_RFC_DHE_PSK_WITH_AES_128_CBC_SHA256 "TLS_DHE_PSK_WITH_AES_128_CBC_SHA256" +# define TLS1_RFC_DHE_PSK_WITH_AES_256_CBC_SHA384 "TLS_DHE_PSK_WITH_AES_256_CBC_SHA384" +# define TLS1_RFC_DHE_PSK_WITH_NULL_SHA256 "TLS_DHE_PSK_WITH_NULL_SHA256" +# define TLS1_RFC_DHE_PSK_WITH_NULL_SHA384 "TLS_DHE_PSK_WITH_NULL_SHA384" +# define TLS1_RFC_RSA_PSK_WITH_AES_128_CBC_SHA256 "TLS_RSA_PSK_WITH_AES_128_CBC_SHA256" +# define TLS1_RFC_RSA_PSK_WITH_AES_256_CBC_SHA384 "TLS_RSA_PSK_WITH_AES_256_CBC_SHA384" +# define TLS1_RFC_RSA_PSK_WITH_NULL_SHA256 "TLS_RSA_PSK_WITH_NULL_SHA256" +# define TLS1_RFC_RSA_PSK_WITH_NULL_SHA384 "TLS_RSA_PSK_WITH_NULL_SHA384" +# define TLS1_RFC_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA "TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA" +# define TLS1_RFC_ECDHE_PSK_WITH_AES_128_CBC_SHA "TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA" +# define TLS1_RFC_ECDHE_PSK_WITH_AES_256_CBC_SHA "TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA" +# define TLS1_RFC_ECDHE_PSK_WITH_AES_128_CBC_SHA256 "TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256" +# define TLS1_RFC_ECDHE_PSK_WITH_AES_256_CBC_SHA384 "TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384" +# define TLS1_RFC_ECDHE_PSK_WITH_NULL_SHA "TLS_ECDHE_PSK_WITH_NULL_SHA" +# define TLS1_RFC_ECDHE_PSK_WITH_NULL_SHA256 "TLS_ECDHE_PSK_WITH_NULL_SHA256" +# define TLS1_RFC_ECDHE_PSK_WITH_NULL_SHA384 "TLS_ECDHE_PSK_WITH_NULL_SHA384" +# define TLS1_RFC_SRP_SHA_WITH_3DES_EDE_CBC_SHA "TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA" +# define TLS1_RFC_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA "TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA" +# define TLS1_RFC_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA "TLS_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA" +# define TLS1_RFC_SRP_SHA_WITH_AES_128_CBC_SHA "TLS_SRP_SHA_WITH_AES_128_CBC_SHA" +# define TLS1_RFC_SRP_SHA_RSA_WITH_AES_128_CBC_SHA "TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA" +# define TLS1_RFC_SRP_SHA_DSS_WITH_AES_128_CBC_SHA "TLS_SRP_SHA_DSS_WITH_AES_128_CBC_SHA" +# define TLS1_RFC_SRP_SHA_WITH_AES_256_CBC_SHA "TLS_SRP_SHA_WITH_AES_256_CBC_SHA" +# define TLS1_RFC_SRP_SHA_RSA_WITH_AES_256_CBC_SHA "TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA" +# define TLS1_RFC_SRP_SHA_DSS_WITH_AES_256_CBC_SHA "TLS_SRP_SHA_DSS_WITH_AES_256_CBC_SHA" +# define TLS1_RFC_DHE_RSA_WITH_CHACHA20_POLY1305 "TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256" +# define TLS1_RFC_ECDHE_RSA_WITH_CHACHA20_POLY1305 "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256" +# define TLS1_RFC_ECDHE_ECDSA_WITH_CHACHA20_POLY1305 "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256" +# define TLS1_RFC_PSK_WITH_CHACHA20_POLY1305 "TLS_PSK_WITH_CHACHA20_POLY1305_SHA256" +# define TLS1_RFC_ECDHE_PSK_WITH_CHACHA20_POLY1305 "TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256" +# define TLS1_RFC_DHE_PSK_WITH_CHACHA20_POLY1305 "TLS_DHE_PSK_WITH_CHACHA20_POLY1305_SHA256" +# define TLS1_RFC_RSA_PSK_WITH_CHACHA20_POLY1305 "TLS_RSA_PSK_WITH_CHACHA20_POLY1305_SHA256" +# define TLS1_RFC_RSA_WITH_CAMELLIA_128_CBC_SHA256 "TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256" +# define TLS1_RFC_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256 "TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256" +# define TLS1_RFC_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 "TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256" +# define TLS1_RFC_ADH_WITH_CAMELLIA_128_CBC_SHA256 "TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA256" +# define TLS1_RFC_RSA_WITH_CAMELLIA_256_CBC_SHA256 "TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256" +# define TLS1_RFC_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256 "TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256" +# define TLS1_RFC_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 "TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256" +# define TLS1_RFC_ADH_WITH_CAMELLIA_256_CBC_SHA256 "TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA256" +# define TLS1_RFC_RSA_WITH_CAMELLIA_256_CBC_SHA "TLS_RSA_WITH_CAMELLIA_256_CBC_SHA" +# define TLS1_RFC_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA "TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA" +# define TLS1_RFC_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA "TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA" +# define TLS1_RFC_ADH_WITH_CAMELLIA_256_CBC_SHA "TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA" +# define TLS1_RFC_RSA_WITH_CAMELLIA_128_CBC_SHA "TLS_RSA_WITH_CAMELLIA_128_CBC_SHA" +# define TLS1_RFC_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA "TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA" +# define TLS1_RFC_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA "TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA" +# define TLS1_RFC_ADH_WITH_CAMELLIA_128_CBC_SHA "TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA" +# define TLS1_RFC_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 "TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256" +# define TLS1_RFC_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 "TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384" +# define TLS1_RFC_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 "TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256" +# define TLS1_RFC_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384 "TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384" +# define TLS1_RFC_PSK_WITH_CAMELLIA_128_CBC_SHA256 "TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256" +# define TLS1_RFC_PSK_WITH_CAMELLIA_256_CBC_SHA384 "TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384" +# define TLS1_RFC_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 "TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256" +# define TLS1_RFC_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 "TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384" +# define TLS1_RFC_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256 "TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256" +# define TLS1_RFC_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384 "TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384" +# define TLS1_RFC_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 "TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256" +# define TLS1_RFC_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 "TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384" +# define TLS1_RFC_RSA_WITH_SEED_SHA "TLS_RSA_WITH_SEED_CBC_SHA" +# define TLS1_RFC_DHE_DSS_WITH_SEED_SHA "TLS_DHE_DSS_WITH_SEED_CBC_SHA" +# define TLS1_RFC_DHE_RSA_WITH_SEED_SHA "TLS_DHE_RSA_WITH_SEED_CBC_SHA" +# define TLS1_RFC_ADH_WITH_SEED_SHA "TLS_DH_anon_WITH_SEED_CBC_SHA" +# define TLS1_RFC_ECDHE_PSK_WITH_RC4_128_SHA "TLS_ECDHE_PSK_WITH_RC4_128_SHA" +# define TLS1_RFC_ECDH_anon_WITH_RC4_128_SHA "TLS_ECDH_anon_WITH_RC4_128_SHA" +# define TLS1_RFC_ECDHE_ECDSA_WITH_RC4_128_SHA "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA" +# define TLS1_RFC_ECDHE_RSA_WITH_RC4_128_SHA "TLS_ECDHE_RSA_WITH_RC4_128_SHA" +# define TLS1_RFC_PSK_WITH_RC4_128_SHA "TLS_PSK_WITH_RC4_128_SHA" +# define TLS1_RFC_RSA_PSK_WITH_RC4_128_SHA "TLS_RSA_PSK_WITH_RC4_128_SHA" +# define TLS1_RFC_DHE_PSK_WITH_RC4_128_SHA "TLS_DHE_PSK_WITH_RC4_128_SHA" +# define TLS1_RFC_RSA_WITH_ARIA_128_GCM_SHA256 "TLS_RSA_WITH_ARIA_128_GCM_SHA256" +# define TLS1_RFC_RSA_WITH_ARIA_256_GCM_SHA384 "TLS_RSA_WITH_ARIA_256_GCM_SHA384" +# define TLS1_RFC_DHE_RSA_WITH_ARIA_128_GCM_SHA256 "TLS_DHE_RSA_WITH_ARIA_128_GCM_SHA256" +# define TLS1_RFC_DHE_RSA_WITH_ARIA_256_GCM_SHA384 "TLS_DHE_RSA_WITH_ARIA_256_GCM_SHA384" +# define TLS1_RFC_DH_RSA_WITH_ARIA_128_GCM_SHA256 "TLS_DH_RSA_WITH_ARIA_128_GCM_SHA256" +# define TLS1_RFC_DH_RSA_WITH_ARIA_256_GCM_SHA384 "TLS_DH_RSA_WITH_ARIA_256_GCM_SHA384" +# define TLS1_RFC_DHE_DSS_WITH_ARIA_128_GCM_SHA256 "TLS_DHE_DSS_WITH_ARIA_128_GCM_SHA256" +# define TLS1_RFC_DHE_DSS_WITH_ARIA_256_GCM_SHA384 "TLS_DHE_DSS_WITH_ARIA_256_GCM_SHA384" +# define TLS1_RFC_DH_DSS_WITH_ARIA_128_GCM_SHA256 "TLS_DH_DSS_WITH_ARIA_128_GCM_SHA256" +# define TLS1_RFC_DH_DSS_WITH_ARIA_256_GCM_SHA384 "TLS_DH_DSS_WITH_ARIA_256_GCM_SHA384" +# define TLS1_RFC_DH_anon_WITH_ARIA_128_GCM_SHA256 "TLS_DH_anon_WITH_ARIA_128_GCM_SHA256" +# define TLS1_RFC_DH_anon_WITH_ARIA_256_GCM_SHA384 "TLS_DH_anon_WITH_ARIA_256_GCM_SHA384" +# define TLS1_RFC_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256 "TLS_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256" +# define TLS1_RFC_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384 "TLS_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384" +# define TLS1_RFC_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256 "TLS_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256" +# define TLS1_RFC_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384 "TLS_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384" +# define TLS1_RFC_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256 "TLS_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256" +# define TLS1_RFC_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384 "TLS_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384" +# define TLS1_RFC_ECDH_RSA_WITH_ARIA_128_GCM_SHA256 "TLS_ECDH_RSA_WITH_ARIA_128_GCM_SHA256" +# define TLS1_RFC_ECDH_RSA_WITH_ARIA_256_GCM_SHA384 "TLS_ECDH_RSA_WITH_ARIA_256_GCM_SHA384" +# define TLS1_RFC_PSK_WITH_ARIA_128_GCM_SHA256 "TLS_PSK_WITH_ARIA_128_GCM_SHA256" +# define TLS1_RFC_PSK_WITH_ARIA_256_GCM_SHA384 "TLS_PSK_WITH_ARIA_256_GCM_SHA384" +# define TLS1_RFC_DHE_PSK_WITH_ARIA_128_GCM_SHA256 "TLS_DHE_PSK_WITH_ARIA_128_GCM_SHA256" +# define TLS1_RFC_DHE_PSK_WITH_ARIA_256_GCM_SHA384 "TLS_DHE_PSK_WITH_ARIA_256_GCM_SHA384" +# define TLS1_RFC_RSA_PSK_WITH_ARIA_128_GCM_SHA256 "TLS_RSA_PSK_WITH_ARIA_128_GCM_SHA256" +# define TLS1_RFC_RSA_PSK_WITH_ARIA_256_GCM_SHA384 "TLS_RSA_PSK_WITH_ARIA_256_GCM_SHA384" + + +/* + * XXX Backward compatibility alert: Older versions of OpenSSL gave some DHE + * ciphers names with "EDH" instead of "DHE". Going forward, we should be + * using DHE everywhere, though we may indefinitely maintain aliases for + * users or configurations that used "EDH" + */ +# define TLS1_TXT_DHE_DSS_WITH_RC4_128_SHA "DHE-DSS-RC4-SHA" + +# define TLS1_TXT_PSK_WITH_NULL_SHA "PSK-NULL-SHA" +# define TLS1_TXT_DHE_PSK_WITH_NULL_SHA "DHE-PSK-NULL-SHA" +# define TLS1_TXT_RSA_PSK_WITH_NULL_SHA "RSA-PSK-NULL-SHA" + +/* AES ciphersuites from RFC3268 */ +# define TLS1_TXT_RSA_WITH_AES_128_SHA "AES128-SHA" +# define TLS1_TXT_DH_DSS_WITH_AES_128_SHA "DH-DSS-AES128-SHA" +# define TLS1_TXT_DH_RSA_WITH_AES_128_SHA "DH-RSA-AES128-SHA" +# define TLS1_TXT_DHE_DSS_WITH_AES_128_SHA "DHE-DSS-AES128-SHA" +# define TLS1_TXT_DHE_RSA_WITH_AES_128_SHA "DHE-RSA-AES128-SHA" +# define TLS1_TXT_ADH_WITH_AES_128_SHA "ADH-AES128-SHA" + +# define TLS1_TXT_RSA_WITH_AES_256_SHA "AES256-SHA" +# define TLS1_TXT_DH_DSS_WITH_AES_256_SHA "DH-DSS-AES256-SHA" +# define TLS1_TXT_DH_RSA_WITH_AES_256_SHA "DH-RSA-AES256-SHA" +# define TLS1_TXT_DHE_DSS_WITH_AES_256_SHA "DHE-DSS-AES256-SHA" +# define TLS1_TXT_DHE_RSA_WITH_AES_256_SHA "DHE-RSA-AES256-SHA" +# define TLS1_TXT_ADH_WITH_AES_256_SHA "ADH-AES256-SHA" + +/* ECC ciphersuites from RFC4492 */ +# define TLS1_TXT_ECDH_ECDSA_WITH_NULL_SHA "ECDH-ECDSA-NULL-SHA" +# define TLS1_TXT_ECDH_ECDSA_WITH_RC4_128_SHA "ECDH-ECDSA-RC4-SHA" +# define TLS1_TXT_ECDH_ECDSA_WITH_DES_192_CBC3_SHA "ECDH-ECDSA-DES-CBC3-SHA" +# define TLS1_TXT_ECDH_ECDSA_WITH_AES_128_CBC_SHA "ECDH-ECDSA-AES128-SHA" +# define TLS1_TXT_ECDH_ECDSA_WITH_AES_256_CBC_SHA "ECDH-ECDSA-AES256-SHA" + +# define TLS1_TXT_ECDHE_ECDSA_WITH_NULL_SHA "ECDHE-ECDSA-NULL-SHA" +# define TLS1_TXT_ECDHE_ECDSA_WITH_RC4_128_SHA "ECDHE-ECDSA-RC4-SHA" +# define TLS1_TXT_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA "ECDHE-ECDSA-DES-CBC3-SHA" +# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CBC_SHA "ECDHE-ECDSA-AES128-SHA" +# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CBC_SHA "ECDHE-ECDSA-AES256-SHA" + +# define TLS1_TXT_ECDH_RSA_WITH_NULL_SHA "ECDH-RSA-NULL-SHA" +# define TLS1_TXT_ECDH_RSA_WITH_RC4_128_SHA "ECDH-RSA-RC4-SHA" +# define TLS1_TXT_ECDH_RSA_WITH_DES_192_CBC3_SHA "ECDH-RSA-DES-CBC3-SHA" +# define TLS1_TXT_ECDH_RSA_WITH_AES_128_CBC_SHA "ECDH-RSA-AES128-SHA" +# define TLS1_TXT_ECDH_RSA_WITH_AES_256_CBC_SHA "ECDH-RSA-AES256-SHA" + +# define TLS1_TXT_ECDHE_RSA_WITH_NULL_SHA "ECDHE-RSA-NULL-SHA" +# define TLS1_TXT_ECDHE_RSA_WITH_RC4_128_SHA "ECDHE-RSA-RC4-SHA" +# define TLS1_TXT_ECDHE_RSA_WITH_DES_192_CBC3_SHA "ECDHE-RSA-DES-CBC3-SHA" +# define TLS1_TXT_ECDHE_RSA_WITH_AES_128_CBC_SHA "ECDHE-RSA-AES128-SHA" +# define TLS1_TXT_ECDHE_RSA_WITH_AES_256_CBC_SHA "ECDHE-RSA-AES256-SHA" + +# define TLS1_TXT_ECDH_anon_WITH_NULL_SHA "AECDH-NULL-SHA" +# define TLS1_TXT_ECDH_anon_WITH_RC4_128_SHA "AECDH-RC4-SHA" +# define TLS1_TXT_ECDH_anon_WITH_DES_192_CBC3_SHA "AECDH-DES-CBC3-SHA" +# define TLS1_TXT_ECDH_anon_WITH_AES_128_CBC_SHA "AECDH-AES128-SHA" +# define TLS1_TXT_ECDH_anon_WITH_AES_256_CBC_SHA "AECDH-AES256-SHA" + +/* PSK ciphersuites from RFC 4279 */ +# define TLS1_TXT_PSK_WITH_RC4_128_SHA "PSK-RC4-SHA" +# define TLS1_TXT_PSK_WITH_3DES_EDE_CBC_SHA "PSK-3DES-EDE-CBC-SHA" +# define TLS1_TXT_PSK_WITH_AES_128_CBC_SHA "PSK-AES128-CBC-SHA" +# define TLS1_TXT_PSK_WITH_AES_256_CBC_SHA "PSK-AES256-CBC-SHA" + +# define TLS1_TXT_DHE_PSK_WITH_RC4_128_SHA "DHE-PSK-RC4-SHA" +# define TLS1_TXT_DHE_PSK_WITH_3DES_EDE_CBC_SHA "DHE-PSK-3DES-EDE-CBC-SHA" +# define TLS1_TXT_DHE_PSK_WITH_AES_128_CBC_SHA "DHE-PSK-AES128-CBC-SHA" +# define TLS1_TXT_DHE_PSK_WITH_AES_256_CBC_SHA "DHE-PSK-AES256-CBC-SHA" +# define TLS1_TXT_RSA_PSK_WITH_RC4_128_SHA "RSA-PSK-RC4-SHA" +# define TLS1_TXT_RSA_PSK_WITH_3DES_EDE_CBC_SHA "RSA-PSK-3DES-EDE-CBC-SHA" +# define TLS1_TXT_RSA_PSK_WITH_AES_128_CBC_SHA "RSA-PSK-AES128-CBC-SHA" +# define TLS1_TXT_RSA_PSK_WITH_AES_256_CBC_SHA "RSA-PSK-AES256-CBC-SHA" + +/* PSK ciphersuites from RFC 5487 */ +# define TLS1_TXT_PSK_WITH_AES_128_GCM_SHA256 "PSK-AES128-GCM-SHA256" +# define TLS1_TXT_PSK_WITH_AES_256_GCM_SHA384 "PSK-AES256-GCM-SHA384" +# define TLS1_TXT_DHE_PSK_WITH_AES_128_GCM_SHA256 "DHE-PSK-AES128-GCM-SHA256" +# define TLS1_TXT_DHE_PSK_WITH_AES_256_GCM_SHA384 "DHE-PSK-AES256-GCM-SHA384" +# define TLS1_TXT_RSA_PSK_WITH_AES_128_GCM_SHA256 "RSA-PSK-AES128-GCM-SHA256" +# define TLS1_TXT_RSA_PSK_WITH_AES_256_GCM_SHA384 "RSA-PSK-AES256-GCM-SHA384" + +# define TLS1_TXT_PSK_WITH_AES_128_CBC_SHA256 "PSK-AES128-CBC-SHA256" +# define TLS1_TXT_PSK_WITH_AES_256_CBC_SHA384 "PSK-AES256-CBC-SHA384" +# define TLS1_TXT_PSK_WITH_NULL_SHA256 "PSK-NULL-SHA256" +# define TLS1_TXT_PSK_WITH_NULL_SHA384 "PSK-NULL-SHA384" + +# define TLS1_TXT_DHE_PSK_WITH_AES_128_CBC_SHA256 "DHE-PSK-AES128-CBC-SHA256" +# define TLS1_TXT_DHE_PSK_WITH_AES_256_CBC_SHA384 "DHE-PSK-AES256-CBC-SHA384" +# define TLS1_TXT_DHE_PSK_WITH_NULL_SHA256 "DHE-PSK-NULL-SHA256" +# define TLS1_TXT_DHE_PSK_WITH_NULL_SHA384 "DHE-PSK-NULL-SHA384" + +# define TLS1_TXT_RSA_PSK_WITH_AES_128_CBC_SHA256 "RSA-PSK-AES128-CBC-SHA256" +# define TLS1_TXT_RSA_PSK_WITH_AES_256_CBC_SHA384 "RSA-PSK-AES256-CBC-SHA384" +# define TLS1_TXT_RSA_PSK_WITH_NULL_SHA256 "RSA-PSK-NULL-SHA256" +# define TLS1_TXT_RSA_PSK_WITH_NULL_SHA384 "RSA-PSK-NULL-SHA384" + +/* SRP ciphersuite from RFC 5054 */ +# define TLS1_TXT_SRP_SHA_WITH_3DES_EDE_CBC_SHA "SRP-3DES-EDE-CBC-SHA" +# define TLS1_TXT_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA "SRP-RSA-3DES-EDE-CBC-SHA" +# define TLS1_TXT_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA "SRP-DSS-3DES-EDE-CBC-SHA" +# define TLS1_TXT_SRP_SHA_WITH_AES_128_CBC_SHA "SRP-AES-128-CBC-SHA" +# define TLS1_TXT_SRP_SHA_RSA_WITH_AES_128_CBC_SHA "SRP-RSA-AES-128-CBC-SHA" +# define TLS1_TXT_SRP_SHA_DSS_WITH_AES_128_CBC_SHA "SRP-DSS-AES-128-CBC-SHA" +# define TLS1_TXT_SRP_SHA_WITH_AES_256_CBC_SHA "SRP-AES-256-CBC-SHA" +# define TLS1_TXT_SRP_SHA_RSA_WITH_AES_256_CBC_SHA "SRP-RSA-AES-256-CBC-SHA" +# define TLS1_TXT_SRP_SHA_DSS_WITH_AES_256_CBC_SHA "SRP-DSS-AES-256-CBC-SHA" + +/* Camellia ciphersuites from RFC4132 */ +# define TLS1_TXT_RSA_WITH_CAMELLIA_128_CBC_SHA "CAMELLIA128-SHA" +# define TLS1_TXT_DH_DSS_WITH_CAMELLIA_128_CBC_SHA "DH-DSS-CAMELLIA128-SHA" +# define TLS1_TXT_DH_RSA_WITH_CAMELLIA_128_CBC_SHA "DH-RSA-CAMELLIA128-SHA" +# define TLS1_TXT_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA "DHE-DSS-CAMELLIA128-SHA" +# define TLS1_TXT_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA "DHE-RSA-CAMELLIA128-SHA" +# define TLS1_TXT_ADH_WITH_CAMELLIA_128_CBC_SHA "ADH-CAMELLIA128-SHA" + +# define TLS1_TXT_RSA_WITH_CAMELLIA_256_CBC_SHA "CAMELLIA256-SHA" +# define TLS1_TXT_DH_DSS_WITH_CAMELLIA_256_CBC_SHA "DH-DSS-CAMELLIA256-SHA" +# define TLS1_TXT_DH_RSA_WITH_CAMELLIA_256_CBC_SHA "DH-RSA-CAMELLIA256-SHA" +# define TLS1_TXT_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA "DHE-DSS-CAMELLIA256-SHA" +# define TLS1_TXT_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA "DHE-RSA-CAMELLIA256-SHA" +# define TLS1_TXT_ADH_WITH_CAMELLIA_256_CBC_SHA "ADH-CAMELLIA256-SHA" + +/* TLS 1.2 Camellia SHA-256 ciphersuites from RFC5932 */ +# define TLS1_TXT_RSA_WITH_CAMELLIA_128_CBC_SHA256 "CAMELLIA128-SHA256" +# define TLS1_TXT_DH_DSS_WITH_CAMELLIA_128_CBC_SHA256 "DH-DSS-CAMELLIA128-SHA256" +# define TLS1_TXT_DH_RSA_WITH_CAMELLIA_128_CBC_SHA256 "DH-RSA-CAMELLIA128-SHA256" +# define TLS1_TXT_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256 "DHE-DSS-CAMELLIA128-SHA256" +# define TLS1_TXT_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 "DHE-RSA-CAMELLIA128-SHA256" +# define TLS1_TXT_ADH_WITH_CAMELLIA_128_CBC_SHA256 "ADH-CAMELLIA128-SHA256" + +# define TLS1_TXT_RSA_WITH_CAMELLIA_256_CBC_SHA256 "CAMELLIA256-SHA256" +# define TLS1_TXT_DH_DSS_WITH_CAMELLIA_256_CBC_SHA256 "DH-DSS-CAMELLIA256-SHA256" +# define TLS1_TXT_DH_RSA_WITH_CAMELLIA_256_CBC_SHA256 "DH-RSA-CAMELLIA256-SHA256" +# define TLS1_TXT_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256 "DHE-DSS-CAMELLIA256-SHA256" +# define TLS1_TXT_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 "DHE-RSA-CAMELLIA256-SHA256" +# define TLS1_TXT_ADH_WITH_CAMELLIA_256_CBC_SHA256 "ADH-CAMELLIA256-SHA256" + +# define TLS1_TXT_PSK_WITH_CAMELLIA_128_CBC_SHA256 "PSK-CAMELLIA128-SHA256" +# define TLS1_TXT_PSK_WITH_CAMELLIA_256_CBC_SHA384 "PSK-CAMELLIA256-SHA384" +# define TLS1_TXT_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 "DHE-PSK-CAMELLIA128-SHA256" +# define TLS1_TXT_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 "DHE-PSK-CAMELLIA256-SHA384" +# define TLS1_TXT_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256 "RSA-PSK-CAMELLIA128-SHA256" +# define TLS1_TXT_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384 "RSA-PSK-CAMELLIA256-SHA384" +# define TLS1_TXT_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 "ECDHE-PSK-CAMELLIA128-SHA256" +# define TLS1_TXT_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 "ECDHE-PSK-CAMELLIA256-SHA384" + +/* SEED ciphersuites from RFC4162 */ +# define TLS1_TXT_RSA_WITH_SEED_SHA "SEED-SHA" +# define TLS1_TXT_DH_DSS_WITH_SEED_SHA "DH-DSS-SEED-SHA" +# define TLS1_TXT_DH_RSA_WITH_SEED_SHA "DH-RSA-SEED-SHA" +# define TLS1_TXT_DHE_DSS_WITH_SEED_SHA "DHE-DSS-SEED-SHA" +# define TLS1_TXT_DHE_RSA_WITH_SEED_SHA "DHE-RSA-SEED-SHA" +# define TLS1_TXT_ADH_WITH_SEED_SHA "ADH-SEED-SHA" + +/* TLS v1.2 ciphersuites */ +# define TLS1_TXT_RSA_WITH_NULL_SHA256 "NULL-SHA256" +# define TLS1_TXT_RSA_WITH_AES_128_SHA256 "AES128-SHA256" +# define TLS1_TXT_RSA_WITH_AES_256_SHA256 "AES256-SHA256" +# define TLS1_TXT_DH_DSS_WITH_AES_128_SHA256 "DH-DSS-AES128-SHA256" +# define TLS1_TXT_DH_RSA_WITH_AES_128_SHA256 "DH-RSA-AES128-SHA256" +# define TLS1_TXT_DHE_DSS_WITH_AES_128_SHA256 "DHE-DSS-AES128-SHA256" +# define TLS1_TXT_DHE_RSA_WITH_AES_128_SHA256 "DHE-RSA-AES128-SHA256" +# define TLS1_TXT_DH_DSS_WITH_AES_256_SHA256 "DH-DSS-AES256-SHA256" +# define TLS1_TXT_DH_RSA_WITH_AES_256_SHA256 "DH-RSA-AES256-SHA256" +# define TLS1_TXT_DHE_DSS_WITH_AES_256_SHA256 "DHE-DSS-AES256-SHA256" +# define TLS1_TXT_DHE_RSA_WITH_AES_256_SHA256 "DHE-RSA-AES256-SHA256" +# define TLS1_TXT_ADH_WITH_AES_128_SHA256 "ADH-AES128-SHA256" +# define TLS1_TXT_ADH_WITH_AES_256_SHA256 "ADH-AES256-SHA256" + +/* TLS v1.2 GCM ciphersuites from RFC5288 */ +# define TLS1_TXT_RSA_WITH_AES_128_GCM_SHA256 "AES128-GCM-SHA256" +# define TLS1_TXT_RSA_WITH_AES_256_GCM_SHA384 "AES256-GCM-SHA384" +# define TLS1_TXT_DHE_RSA_WITH_AES_128_GCM_SHA256 "DHE-RSA-AES128-GCM-SHA256" +# define TLS1_TXT_DHE_RSA_WITH_AES_256_GCM_SHA384 "DHE-RSA-AES256-GCM-SHA384" +# define TLS1_TXT_DH_RSA_WITH_AES_128_GCM_SHA256 "DH-RSA-AES128-GCM-SHA256" +# define TLS1_TXT_DH_RSA_WITH_AES_256_GCM_SHA384 "DH-RSA-AES256-GCM-SHA384" +# define TLS1_TXT_DHE_DSS_WITH_AES_128_GCM_SHA256 "DHE-DSS-AES128-GCM-SHA256" +# define TLS1_TXT_DHE_DSS_WITH_AES_256_GCM_SHA384 "DHE-DSS-AES256-GCM-SHA384" +# define TLS1_TXT_DH_DSS_WITH_AES_128_GCM_SHA256 "DH-DSS-AES128-GCM-SHA256" +# define TLS1_TXT_DH_DSS_WITH_AES_256_GCM_SHA384 "DH-DSS-AES256-GCM-SHA384" +# define TLS1_TXT_ADH_WITH_AES_128_GCM_SHA256 "ADH-AES128-GCM-SHA256" +# define TLS1_TXT_ADH_WITH_AES_256_GCM_SHA384 "ADH-AES256-GCM-SHA384" + +/* CCM ciphersuites from RFC6655 */ +# define TLS1_TXT_RSA_WITH_AES_128_CCM "AES128-CCM" +# define TLS1_TXT_RSA_WITH_AES_256_CCM "AES256-CCM" +# define TLS1_TXT_DHE_RSA_WITH_AES_128_CCM "DHE-RSA-AES128-CCM" +# define TLS1_TXT_DHE_RSA_WITH_AES_256_CCM "DHE-RSA-AES256-CCM" + +# define TLS1_TXT_RSA_WITH_AES_128_CCM_8 "AES128-CCM8" +# define TLS1_TXT_RSA_WITH_AES_256_CCM_8 "AES256-CCM8" +# define TLS1_TXT_DHE_RSA_WITH_AES_128_CCM_8 "DHE-RSA-AES128-CCM8" +# define TLS1_TXT_DHE_RSA_WITH_AES_256_CCM_8 "DHE-RSA-AES256-CCM8" + +# define TLS1_TXT_PSK_WITH_AES_128_CCM "PSK-AES128-CCM" +# define TLS1_TXT_PSK_WITH_AES_256_CCM "PSK-AES256-CCM" +# define TLS1_TXT_DHE_PSK_WITH_AES_128_CCM "DHE-PSK-AES128-CCM" +# define TLS1_TXT_DHE_PSK_WITH_AES_256_CCM "DHE-PSK-AES256-CCM" + +# define TLS1_TXT_PSK_WITH_AES_128_CCM_8 "PSK-AES128-CCM8" +# define TLS1_TXT_PSK_WITH_AES_256_CCM_8 "PSK-AES256-CCM8" +# define TLS1_TXT_DHE_PSK_WITH_AES_128_CCM_8 "DHE-PSK-AES128-CCM8" +# define TLS1_TXT_DHE_PSK_WITH_AES_256_CCM_8 "DHE-PSK-AES256-CCM8" + +/* CCM ciphersuites from RFC7251 */ +# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CCM "ECDHE-ECDSA-AES128-CCM" +# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CCM "ECDHE-ECDSA-AES256-CCM" +# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CCM_8 "ECDHE-ECDSA-AES128-CCM8" +# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CCM_8 "ECDHE-ECDSA-AES256-CCM8" + +/* ECDH HMAC based ciphersuites from RFC5289 */ +# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_SHA256 "ECDHE-ECDSA-AES128-SHA256" +# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_SHA384 "ECDHE-ECDSA-AES256-SHA384" +# define TLS1_TXT_ECDH_ECDSA_WITH_AES_128_SHA256 "ECDH-ECDSA-AES128-SHA256" +# define TLS1_TXT_ECDH_ECDSA_WITH_AES_256_SHA384 "ECDH-ECDSA-AES256-SHA384" +# define TLS1_TXT_ECDHE_RSA_WITH_AES_128_SHA256 "ECDHE-RSA-AES128-SHA256" +# define TLS1_TXT_ECDHE_RSA_WITH_AES_256_SHA384 "ECDHE-RSA-AES256-SHA384" +# define TLS1_TXT_ECDH_RSA_WITH_AES_128_SHA256 "ECDH-RSA-AES128-SHA256" +# define TLS1_TXT_ECDH_RSA_WITH_AES_256_SHA384 "ECDH-RSA-AES256-SHA384" + +/* ECDH GCM based ciphersuites from RFC5289 */ +# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 "ECDHE-ECDSA-AES128-GCM-SHA256" +# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 "ECDHE-ECDSA-AES256-GCM-SHA384" +# define TLS1_TXT_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 "ECDH-ECDSA-AES128-GCM-SHA256" +# define TLS1_TXT_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 "ECDH-ECDSA-AES256-GCM-SHA384" +# define TLS1_TXT_ECDHE_RSA_WITH_AES_128_GCM_SHA256 "ECDHE-RSA-AES128-GCM-SHA256" +# define TLS1_TXT_ECDHE_RSA_WITH_AES_256_GCM_SHA384 "ECDHE-RSA-AES256-GCM-SHA384" +# define TLS1_TXT_ECDH_RSA_WITH_AES_128_GCM_SHA256 "ECDH-RSA-AES128-GCM-SHA256" +# define TLS1_TXT_ECDH_RSA_WITH_AES_256_GCM_SHA384 "ECDH-RSA-AES256-GCM-SHA384" + +/* TLS v1.2 PSK GCM ciphersuites from RFC5487 */ +# define TLS1_TXT_PSK_WITH_AES_128_GCM_SHA256 "PSK-AES128-GCM-SHA256" +# define TLS1_TXT_PSK_WITH_AES_256_GCM_SHA384 "PSK-AES256-GCM-SHA384" + +/* ECDHE PSK ciphersuites from RFC 5489 */ +# define TLS1_TXT_ECDHE_PSK_WITH_RC4_128_SHA "ECDHE-PSK-RC4-SHA" +# define TLS1_TXT_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA "ECDHE-PSK-3DES-EDE-CBC-SHA" +# define TLS1_TXT_ECDHE_PSK_WITH_AES_128_CBC_SHA "ECDHE-PSK-AES128-CBC-SHA" +# define TLS1_TXT_ECDHE_PSK_WITH_AES_256_CBC_SHA "ECDHE-PSK-AES256-CBC-SHA" + +# define TLS1_TXT_ECDHE_PSK_WITH_AES_128_CBC_SHA256 "ECDHE-PSK-AES128-CBC-SHA256" +# define TLS1_TXT_ECDHE_PSK_WITH_AES_256_CBC_SHA384 "ECDHE-PSK-AES256-CBC-SHA384" + +# define TLS1_TXT_ECDHE_PSK_WITH_NULL_SHA "ECDHE-PSK-NULL-SHA" +# define TLS1_TXT_ECDHE_PSK_WITH_NULL_SHA256 "ECDHE-PSK-NULL-SHA256" +# define TLS1_TXT_ECDHE_PSK_WITH_NULL_SHA384 "ECDHE-PSK-NULL-SHA384" + +/* Camellia-CBC ciphersuites from RFC6367 */ +# define TLS1_TXT_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 "ECDHE-ECDSA-CAMELLIA128-SHA256" +# define TLS1_TXT_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 "ECDHE-ECDSA-CAMELLIA256-SHA384" +# define TLS1_TXT_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 "ECDH-ECDSA-CAMELLIA128-SHA256" +# define TLS1_TXT_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 "ECDH-ECDSA-CAMELLIA256-SHA384" +# define TLS1_TXT_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 "ECDHE-RSA-CAMELLIA128-SHA256" +# define TLS1_TXT_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384 "ECDHE-RSA-CAMELLIA256-SHA384" +# define TLS1_TXT_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256 "ECDH-RSA-CAMELLIA128-SHA256" +# define TLS1_TXT_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384 "ECDH-RSA-CAMELLIA256-SHA384" + +/* draft-ietf-tls-chacha20-poly1305-03 */ +# define TLS1_TXT_ECDHE_RSA_WITH_CHACHA20_POLY1305 "ECDHE-RSA-CHACHA20-POLY1305" +# define TLS1_TXT_ECDHE_ECDSA_WITH_CHACHA20_POLY1305 "ECDHE-ECDSA-CHACHA20-POLY1305" +# define TLS1_TXT_DHE_RSA_WITH_CHACHA20_POLY1305 "DHE-RSA-CHACHA20-POLY1305" +# define TLS1_TXT_PSK_WITH_CHACHA20_POLY1305 "PSK-CHACHA20-POLY1305" +# define TLS1_TXT_ECDHE_PSK_WITH_CHACHA20_POLY1305 "ECDHE-PSK-CHACHA20-POLY1305" +# define TLS1_TXT_DHE_PSK_WITH_CHACHA20_POLY1305 "DHE-PSK-CHACHA20-POLY1305" +# define TLS1_TXT_RSA_PSK_WITH_CHACHA20_POLY1305 "RSA-PSK-CHACHA20-POLY1305" + +/* Aria ciphersuites from RFC6209 */ +# define TLS1_TXT_RSA_WITH_ARIA_128_GCM_SHA256 "ARIA128-GCM-SHA256" +# define TLS1_TXT_RSA_WITH_ARIA_256_GCM_SHA384 "ARIA256-GCM-SHA384" +# define TLS1_TXT_DHE_RSA_WITH_ARIA_128_GCM_SHA256 "DHE-RSA-ARIA128-GCM-SHA256" +# define TLS1_TXT_DHE_RSA_WITH_ARIA_256_GCM_SHA384 "DHE-RSA-ARIA256-GCM-SHA384" +# define TLS1_TXT_DH_RSA_WITH_ARIA_128_GCM_SHA256 "DH-RSA-ARIA128-GCM-SHA256" +# define TLS1_TXT_DH_RSA_WITH_ARIA_256_GCM_SHA384 "DH-RSA-ARIA256-GCM-SHA384" +# define TLS1_TXT_DHE_DSS_WITH_ARIA_128_GCM_SHA256 "DHE-DSS-ARIA128-GCM-SHA256" +# define TLS1_TXT_DHE_DSS_WITH_ARIA_256_GCM_SHA384 "DHE-DSS-ARIA256-GCM-SHA384" +# define TLS1_TXT_DH_DSS_WITH_ARIA_128_GCM_SHA256 "DH-DSS-ARIA128-GCM-SHA256" +# define TLS1_TXT_DH_DSS_WITH_ARIA_256_GCM_SHA384 "DH-DSS-ARIA256-GCM-SHA384" +# define TLS1_TXT_DH_anon_WITH_ARIA_128_GCM_SHA256 "ADH-ARIA128-GCM-SHA256" +# define TLS1_TXT_DH_anon_WITH_ARIA_256_GCM_SHA384 "ADH-ARIA256-GCM-SHA384" +# define TLS1_TXT_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256 "ECDHE-ECDSA-ARIA128-GCM-SHA256" +# define TLS1_TXT_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384 "ECDHE-ECDSA-ARIA256-GCM-SHA384" +# define TLS1_TXT_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256 "ECDH-ECDSA-ARIA128-GCM-SHA256" +# define TLS1_TXT_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384 "ECDH-ECDSA-ARIA256-GCM-SHA384" +# define TLS1_TXT_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256 "ECDHE-ARIA128-GCM-SHA256" +# define TLS1_TXT_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384 "ECDHE-ARIA256-GCM-SHA384" +# define TLS1_TXT_ECDH_RSA_WITH_ARIA_128_GCM_SHA256 "ECDH-ARIA128-GCM-SHA256" +# define TLS1_TXT_ECDH_RSA_WITH_ARIA_256_GCM_SHA384 "ECDH-ARIA256-GCM-SHA384" +# define TLS1_TXT_PSK_WITH_ARIA_128_GCM_SHA256 "PSK-ARIA128-GCM-SHA256" +# define TLS1_TXT_PSK_WITH_ARIA_256_GCM_SHA384 "PSK-ARIA256-GCM-SHA384" +# define TLS1_TXT_DHE_PSK_WITH_ARIA_128_GCM_SHA256 "DHE-PSK-ARIA128-GCM-SHA256" +# define TLS1_TXT_DHE_PSK_WITH_ARIA_256_GCM_SHA384 "DHE-PSK-ARIA256-GCM-SHA384" +# define TLS1_TXT_RSA_PSK_WITH_ARIA_128_GCM_SHA256 "RSA-PSK-ARIA128-GCM-SHA256" +# define TLS1_TXT_RSA_PSK_WITH_ARIA_256_GCM_SHA384 "RSA-PSK-ARIA256-GCM-SHA384" + +# define TLS_CT_RSA_SIGN 1 +# define TLS_CT_DSS_SIGN 2 +# define TLS_CT_RSA_FIXED_DH 3 +# define TLS_CT_DSS_FIXED_DH 4 +# define TLS_CT_ECDSA_SIGN 64 +# define TLS_CT_RSA_FIXED_ECDH 65 +# define TLS_CT_ECDSA_FIXED_ECDH 66 +# define TLS_CT_GOST01_SIGN 22 +# define TLS_CT_GOST12_SIGN 238 +# define TLS_CT_GOST12_512_SIGN 239 + +/* + * when correcting this number, correct also SSL3_CT_NUMBER in ssl3.h (see + * comment there) + */ +# define TLS_CT_NUMBER 10 + +# if defined(SSL3_CT_NUMBER) +# if TLS_CT_NUMBER != SSL3_CT_NUMBER +# error "SSL/TLS CT_NUMBER values do not match" +# endif +# endif + +# define TLS1_FINISH_MAC_LENGTH 12 + +# define TLS_MD_MAX_CONST_SIZE 22 +# define TLS_MD_CLIENT_FINISH_CONST "client finished" +# define TLS_MD_CLIENT_FINISH_CONST_SIZE 15 +# define TLS_MD_SERVER_FINISH_CONST "server finished" +# define TLS_MD_SERVER_FINISH_CONST_SIZE 15 +# define TLS_MD_KEY_EXPANSION_CONST "key expansion" +# define TLS_MD_KEY_EXPANSION_CONST_SIZE 13 +# define TLS_MD_CLIENT_WRITE_KEY_CONST "client write key" +# define TLS_MD_CLIENT_WRITE_KEY_CONST_SIZE 16 +# define TLS_MD_SERVER_WRITE_KEY_CONST "server write key" +# define TLS_MD_SERVER_WRITE_KEY_CONST_SIZE 16 +# define TLS_MD_IV_BLOCK_CONST "IV block" +# define TLS_MD_IV_BLOCK_CONST_SIZE 8 +# define TLS_MD_MASTER_SECRET_CONST "master secret" +# define TLS_MD_MASTER_SECRET_CONST_SIZE 13 +# define TLS_MD_EXTENDED_MASTER_SECRET_CONST "extended master secret" +# define TLS_MD_EXTENDED_MASTER_SECRET_CONST_SIZE 22 + +# ifdef CHARSET_EBCDIC +# undef TLS_MD_CLIENT_FINISH_CONST +/* + * client finished + */ +# define TLS_MD_CLIENT_FINISH_CONST "\x63\x6c\x69\x65\x6e\x74\x20\x66\x69\x6e\x69\x73\x68\x65\x64" + +# undef TLS_MD_SERVER_FINISH_CONST +/* + * server finished + */ +# define TLS_MD_SERVER_FINISH_CONST "\x73\x65\x72\x76\x65\x72\x20\x66\x69\x6e\x69\x73\x68\x65\x64" + +# undef TLS_MD_SERVER_WRITE_KEY_CONST +/* + * server write key + */ +# define TLS_MD_SERVER_WRITE_KEY_CONST "\x73\x65\x72\x76\x65\x72\x20\x77\x72\x69\x74\x65\x20\x6b\x65\x79" + +# undef TLS_MD_KEY_EXPANSION_CONST +/* + * key expansion + */ +# define TLS_MD_KEY_EXPANSION_CONST "\x6b\x65\x79\x20\x65\x78\x70\x61\x6e\x73\x69\x6f\x6e" + +# undef TLS_MD_CLIENT_WRITE_KEY_CONST +/* + * client write key + */ +# define TLS_MD_CLIENT_WRITE_KEY_CONST "\x63\x6c\x69\x65\x6e\x74\x20\x77\x72\x69\x74\x65\x20\x6b\x65\x79" + +# undef TLS_MD_SERVER_WRITE_KEY_CONST +/* + * server write key + */ +# define TLS_MD_SERVER_WRITE_KEY_CONST "\x73\x65\x72\x76\x65\x72\x20\x77\x72\x69\x74\x65\x20\x6b\x65\x79" + +# undef TLS_MD_IV_BLOCK_CONST +/* + * IV block + */ +# define TLS_MD_IV_BLOCK_CONST "\x49\x56\x20\x62\x6c\x6f\x63\x6b" + +# undef TLS_MD_MASTER_SECRET_CONST +/* + * master secret + */ +# define TLS_MD_MASTER_SECRET_CONST "\x6d\x61\x73\x74\x65\x72\x20\x73\x65\x63\x72\x65\x74" +# undef TLS_MD_EXTENDED_MASTER_SECRET_CONST +/* + * extended master secret + */ +# define TLS_MD_EXTENDED_MASTER_SECRET_CONST "\x65\x78\x74\x65\x6e\x64\x65\x64\x20\x6d\x61\x73\x74\x65\x72\x20\x73\x65\x63\x72\x65\x74" +# endif + +/* TLS Session Ticket extension struct */ +struct tls_session_ticket_ext_st { + unsigned short length; + void *data; +}; + +#ifdef __cplusplus +} +#endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ts.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ts.h new file mode 100644 index 00000000..3b58aa52 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ts.h @@ -0,0 +1,559 @@ +/* + * Copyright 2006-2018 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_TS_H +# define HEADER_TS_H + +# include + +# ifndef OPENSSL_NO_TS +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# ifdef __cplusplus +extern "C" { +# endif + +# include +# include + +typedef struct TS_msg_imprint_st TS_MSG_IMPRINT; +typedef struct TS_req_st TS_REQ; +typedef struct TS_accuracy_st TS_ACCURACY; +typedef struct TS_tst_info_st TS_TST_INFO; + +/* Possible values for status. */ +# define TS_STATUS_GRANTED 0 +# define TS_STATUS_GRANTED_WITH_MODS 1 +# define TS_STATUS_REJECTION 2 +# define TS_STATUS_WAITING 3 +# define TS_STATUS_REVOCATION_WARNING 4 +# define TS_STATUS_REVOCATION_NOTIFICATION 5 + +/* Possible values for failure_info. */ +# define TS_INFO_BAD_ALG 0 +# define TS_INFO_BAD_REQUEST 2 +# define TS_INFO_BAD_DATA_FORMAT 5 +# define TS_INFO_TIME_NOT_AVAILABLE 14 +# define TS_INFO_UNACCEPTED_POLICY 15 +# define TS_INFO_UNACCEPTED_EXTENSION 16 +# define TS_INFO_ADD_INFO_NOT_AVAILABLE 17 +# define TS_INFO_SYSTEM_FAILURE 25 + + +typedef struct TS_status_info_st TS_STATUS_INFO; +typedef struct ESS_issuer_serial ESS_ISSUER_SERIAL; +typedef struct ESS_cert_id ESS_CERT_ID; +typedef struct ESS_signing_cert ESS_SIGNING_CERT; + +DEFINE_STACK_OF(ESS_CERT_ID) + +typedef struct ESS_cert_id_v2_st ESS_CERT_ID_V2; +typedef struct ESS_signing_cert_v2_st ESS_SIGNING_CERT_V2; + +DEFINE_STACK_OF(ESS_CERT_ID_V2) + +typedef struct TS_resp_st TS_RESP; + +TS_REQ *TS_REQ_new(void); +void TS_REQ_free(TS_REQ *a); +int i2d_TS_REQ(const TS_REQ *a, unsigned char **pp); +TS_REQ *d2i_TS_REQ(TS_REQ **a, const unsigned char **pp, long length); + +TS_REQ *TS_REQ_dup(TS_REQ *a); + +#ifndef OPENSSL_NO_STDIO +TS_REQ *d2i_TS_REQ_fp(FILE *fp, TS_REQ **a); +int i2d_TS_REQ_fp(FILE *fp, TS_REQ *a); +#endif +TS_REQ *d2i_TS_REQ_bio(BIO *fp, TS_REQ **a); +int i2d_TS_REQ_bio(BIO *fp, TS_REQ *a); + +TS_MSG_IMPRINT *TS_MSG_IMPRINT_new(void); +void TS_MSG_IMPRINT_free(TS_MSG_IMPRINT *a); +int i2d_TS_MSG_IMPRINT(const TS_MSG_IMPRINT *a, unsigned char **pp); +TS_MSG_IMPRINT *d2i_TS_MSG_IMPRINT(TS_MSG_IMPRINT **a, + const unsigned char **pp, long length); + +TS_MSG_IMPRINT *TS_MSG_IMPRINT_dup(TS_MSG_IMPRINT *a); + +#ifndef OPENSSL_NO_STDIO +TS_MSG_IMPRINT *d2i_TS_MSG_IMPRINT_fp(FILE *fp, TS_MSG_IMPRINT **a); +int i2d_TS_MSG_IMPRINT_fp(FILE *fp, TS_MSG_IMPRINT *a); +#endif +TS_MSG_IMPRINT *d2i_TS_MSG_IMPRINT_bio(BIO *bio, TS_MSG_IMPRINT **a); +int i2d_TS_MSG_IMPRINT_bio(BIO *bio, TS_MSG_IMPRINT *a); + +TS_RESP *TS_RESP_new(void); +void TS_RESP_free(TS_RESP *a); +int i2d_TS_RESP(const TS_RESP *a, unsigned char **pp); +TS_RESP *d2i_TS_RESP(TS_RESP **a, const unsigned char **pp, long length); +TS_TST_INFO *PKCS7_to_TS_TST_INFO(PKCS7 *token); +TS_RESP *TS_RESP_dup(TS_RESP *a); + +#ifndef OPENSSL_NO_STDIO +TS_RESP *d2i_TS_RESP_fp(FILE *fp, TS_RESP **a); +int i2d_TS_RESP_fp(FILE *fp, TS_RESP *a); +#endif +TS_RESP *d2i_TS_RESP_bio(BIO *bio, TS_RESP **a); +int i2d_TS_RESP_bio(BIO *bio, TS_RESP *a); + +TS_STATUS_INFO *TS_STATUS_INFO_new(void); +void TS_STATUS_INFO_free(TS_STATUS_INFO *a); +int i2d_TS_STATUS_INFO(const TS_STATUS_INFO *a, unsigned char **pp); +TS_STATUS_INFO *d2i_TS_STATUS_INFO(TS_STATUS_INFO **a, + const unsigned char **pp, long length); +TS_STATUS_INFO *TS_STATUS_INFO_dup(TS_STATUS_INFO *a); + +TS_TST_INFO *TS_TST_INFO_new(void); +void TS_TST_INFO_free(TS_TST_INFO *a); +int i2d_TS_TST_INFO(const TS_TST_INFO *a, unsigned char **pp); +TS_TST_INFO *d2i_TS_TST_INFO(TS_TST_INFO **a, const unsigned char **pp, + long length); +TS_TST_INFO *TS_TST_INFO_dup(TS_TST_INFO *a); + +#ifndef OPENSSL_NO_STDIO +TS_TST_INFO *d2i_TS_TST_INFO_fp(FILE *fp, TS_TST_INFO **a); +int i2d_TS_TST_INFO_fp(FILE *fp, TS_TST_INFO *a); +#endif +TS_TST_INFO *d2i_TS_TST_INFO_bio(BIO *bio, TS_TST_INFO **a); +int i2d_TS_TST_INFO_bio(BIO *bio, TS_TST_INFO *a); + +TS_ACCURACY *TS_ACCURACY_new(void); +void TS_ACCURACY_free(TS_ACCURACY *a); +int i2d_TS_ACCURACY(const TS_ACCURACY *a, unsigned char **pp); +TS_ACCURACY *d2i_TS_ACCURACY(TS_ACCURACY **a, const unsigned char **pp, + long length); +TS_ACCURACY *TS_ACCURACY_dup(TS_ACCURACY *a); + +ESS_ISSUER_SERIAL *ESS_ISSUER_SERIAL_new(void); +void ESS_ISSUER_SERIAL_free(ESS_ISSUER_SERIAL *a); +int i2d_ESS_ISSUER_SERIAL(const ESS_ISSUER_SERIAL *a, unsigned char **pp); +ESS_ISSUER_SERIAL *d2i_ESS_ISSUER_SERIAL(ESS_ISSUER_SERIAL **a, + const unsigned char **pp, + long length); +ESS_ISSUER_SERIAL *ESS_ISSUER_SERIAL_dup(ESS_ISSUER_SERIAL *a); + +ESS_CERT_ID *ESS_CERT_ID_new(void); +void ESS_CERT_ID_free(ESS_CERT_ID *a); +int i2d_ESS_CERT_ID(const ESS_CERT_ID *a, unsigned char **pp); +ESS_CERT_ID *d2i_ESS_CERT_ID(ESS_CERT_ID **a, const unsigned char **pp, + long length); +ESS_CERT_ID *ESS_CERT_ID_dup(ESS_CERT_ID *a); + +ESS_SIGNING_CERT *ESS_SIGNING_CERT_new(void); +void ESS_SIGNING_CERT_free(ESS_SIGNING_CERT *a); +int i2d_ESS_SIGNING_CERT(const ESS_SIGNING_CERT *a, unsigned char **pp); +ESS_SIGNING_CERT *d2i_ESS_SIGNING_CERT(ESS_SIGNING_CERT **a, + const unsigned char **pp, long length); +ESS_SIGNING_CERT *ESS_SIGNING_CERT_dup(ESS_SIGNING_CERT *a); + +ESS_CERT_ID_V2 *ESS_CERT_ID_V2_new(void); +void ESS_CERT_ID_V2_free(ESS_CERT_ID_V2 *a); +int i2d_ESS_CERT_ID_V2(const ESS_CERT_ID_V2 *a, unsigned char **pp); +ESS_CERT_ID_V2 *d2i_ESS_CERT_ID_V2(ESS_CERT_ID_V2 **a, + const unsigned char **pp, long length); +ESS_CERT_ID_V2 *ESS_CERT_ID_V2_dup(ESS_CERT_ID_V2 *a); + +ESS_SIGNING_CERT_V2 *ESS_SIGNING_CERT_V2_new(void); +void ESS_SIGNING_CERT_V2_free(ESS_SIGNING_CERT_V2 *a); +int i2d_ESS_SIGNING_CERT_V2(const ESS_SIGNING_CERT_V2 *a, unsigned char **pp); +ESS_SIGNING_CERT_V2 *d2i_ESS_SIGNING_CERT_V2(ESS_SIGNING_CERT_V2 **a, + const unsigned char **pp, + long length); +ESS_SIGNING_CERT_V2 *ESS_SIGNING_CERT_V2_dup(ESS_SIGNING_CERT_V2 *a); + +int TS_REQ_set_version(TS_REQ *a, long version); +long TS_REQ_get_version(const TS_REQ *a); + +int TS_STATUS_INFO_set_status(TS_STATUS_INFO *a, int i); +const ASN1_INTEGER *TS_STATUS_INFO_get0_status(const TS_STATUS_INFO *a); + +const STACK_OF(ASN1_UTF8STRING) * +TS_STATUS_INFO_get0_text(const TS_STATUS_INFO *a); + +const ASN1_BIT_STRING * +TS_STATUS_INFO_get0_failure_info(const TS_STATUS_INFO *a); + +int TS_REQ_set_msg_imprint(TS_REQ *a, TS_MSG_IMPRINT *msg_imprint); +TS_MSG_IMPRINT *TS_REQ_get_msg_imprint(TS_REQ *a); + +int TS_MSG_IMPRINT_set_algo(TS_MSG_IMPRINT *a, X509_ALGOR *alg); +X509_ALGOR *TS_MSG_IMPRINT_get_algo(TS_MSG_IMPRINT *a); + +int TS_MSG_IMPRINT_set_msg(TS_MSG_IMPRINT *a, unsigned char *d, int len); +ASN1_OCTET_STRING *TS_MSG_IMPRINT_get_msg(TS_MSG_IMPRINT *a); + +int TS_REQ_set_policy_id(TS_REQ *a, const ASN1_OBJECT *policy); +ASN1_OBJECT *TS_REQ_get_policy_id(TS_REQ *a); + +int TS_REQ_set_nonce(TS_REQ *a, const ASN1_INTEGER *nonce); +const ASN1_INTEGER *TS_REQ_get_nonce(const TS_REQ *a); + +int TS_REQ_set_cert_req(TS_REQ *a, int cert_req); +int TS_REQ_get_cert_req(const TS_REQ *a); + +STACK_OF(X509_EXTENSION) *TS_REQ_get_exts(TS_REQ *a); +void TS_REQ_ext_free(TS_REQ *a); +int TS_REQ_get_ext_count(TS_REQ *a); +int TS_REQ_get_ext_by_NID(TS_REQ *a, int nid, int lastpos); +int TS_REQ_get_ext_by_OBJ(TS_REQ *a, const ASN1_OBJECT *obj, int lastpos); +int TS_REQ_get_ext_by_critical(TS_REQ *a, int crit, int lastpos); +X509_EXTENSION *TS_REQ_get_ext(TS_REQ *a, int loc); +X509_EXTENSION *TS_REQ_delete_ext(TS_REQ *a, int loc); +int TS_REQ_add_ext(TS_REQ *a, X509_EXTENSION *ex, int loc); +void *TS_REQ_get_ext_d2i(TS_REQ *a, int nid, int *crit, int *idx); + +/* Function declarations for TS_REQ defined in ts/ts_req_print.c */ + +int TS_REQ_print_bio(BIO *bio, TS_REQ *a); + +/* Function declarations for TS_RESP defined in ts/ts_resp_utils.c */ + +int TS_RESP_set_status_info(TS_RESP *a, TS_STATUS_INFO *info); +TS_STATUS_INFO *TS_RESP_get_status_info(TS_RESP *a); + +/* Caller loses ownership of PKCS7 and TS_TST_INFO objects. */ +void TS_RESP_set_tst_info(TS_RESP *a, PKCS7 *p7, TS_TST_INFO *tst_info); +PKCS7 *TS_RESP_get_token(TS_RESP *a); +TS_TST_INFO *TS_RESP_get_tst_info(TS_RESP *a); + +int TS_TST_INFO_set_version(TS_TST_INFO *a, long version); +long TS_TST_INFO_get_version(const TS_TST_INFO *a); + +int TS_TST_INFO_set_policy_id(TS_TST_INFO *a, ASN1_OBJECT *policy_id); +ASN1_OBJECT *TS_TST_INFO_get_policy_id(TS_TST_INFO *a); + +int TS_TST_INFO_set_msg_imprint(TS_TST_INFO *a, TS_MSG_IMPRINT *msg_imprint); +TS_MSG_IMPRINT *TS_TST_INFO_get_msg_imprint(TS_TST_INFO *a); + +int TS_TST_INFO_set_serial(TS_TST_INFO *a, const ASN1_INTEGER *serial); +const ASN1_INTEGER *TS_TST_INFO_get_serial(const TS_TST_INFO *a); + +int TS_TST_INFO_set_time(TS_TST_INFO *a, const ASN1_GENERALIZEDTIME *gtime); +const ASN1_GENERALIZEDTIME *TS_TST_INFO_get_time(const TS_TST_INFO *a); + +int TS_TST_INFO_set_accuracy(TS_TST_INFO *a, TS_ACCURACY *accuracy); +TS_ACCURACY *TS_TST_INFO_get_accuracy(TS_TST_INFO *a); + +int TS_ACCURACY_set_seconds(TS_ACCURACY *a, const ASN1_INTEGER *seconds); +const ASN1_INTEGER *TS_ACCURACY_get_seconds(const TS_ACCURACY *a); + +int TS_ACCURACY_set_millis(TS_ACCURACY *a, const ASN1_INTEGER *millis); +const ASN1_INTEGER *TS_ACCURACY_get_millis(const TS_ACCURACY *a); + +int TS_ACCURACY_set_micros(TS_ACCURACY *a, const ASN1_INTEGER *micros); +const ASN1_INTEGER *TS_ACCURACY_get_micros(const TS_ACCURACY *a); + +int TS_TST_INFO_set_ordering(TS_TST_INFO *a, int ordering); +int TS_TST_INFO_get_ordering(const TS_TST_INFO *a); + +int TS_TST_INFO_set_nonce(TS_TST_INFO *a, const ASN1_INTEGER *nonce); +const ASN1_INTEGER *TS_TST_INFO_get_nonce(const TS_TST_INFO *a); + +int TS_TST_INFO_set_tsa(TS_TST_INFO *a, GENERAL_NAME *tsa); +GENERAL_NAME *TS_TST_INFO_get_tsa(TS_TST_INFO *a); + +STACK_OF(X509_EXTENSION) *TS_TST_INFO_get_exts(TS_TST_INFO *a); +void TS_TST_INFO_ext_free(TS_TST_INFO *a); +int TS_TST_INFO_get_ext_count(TS_TST_INFO *a); +int TS_TST_INFO_get_ext_by_NID(TS_TST_INFO *a, int nid, int lastpos); +int TS_TST_INFO_get_ext_by_OBJ(TS_TST_INFO *a, const ASN1_OBJECT *obj, + int lastpos); +int TS_TST_INFO_get_ext_by_critical(TS_TST_INFO *a, int crit, int lastpos); +X509_EXTENSION *TS_TST_INFO_get_ext(TS_TST_INFO *a, int loc); +X509_EXTENSION *TS_TST_INFO_delete_ext(TS_TST_INFO *a, int loc); +int TS_TST_INFO_add_ext(TS_TST_INFO *a, X509_EXTENSION *ex, int loc); +void *TS_TST_INFO_get_ext_d2i(TS_TST_INFO *a, int nid, int *crit, int *idx); + +/* + * Declarations related to response generation, defined in ts/ts_resp_sign.c. + */ + +/* Optional flags for response generation. */ + +/* Don't include the TSA name in response. */ +# define TS_TSA_NAME 0x01 + +/* Set ordering to true in response. */ +# define TS_ORDERING 0x02 + +/* + * Include the signer certificate and the other specified certificates in + * the ESS signing certificate attribute beside the PKCS7 signed data. + * Only the signer certificates is included by default. + */ +# define TS_ESS_CERT_ID_CHAIN 0x04 + +/* Forward declaration. */ +struct TS_resp_ctx; + +/* This must return a unique number less than 160 bits long. */ +typedef ASN1_INTEGER *(*TS_serial_cb) (struct TS_resp_ctx *, void *); + +/* + * This must return the seconds and microseconds since Jan 1, 1970 in the sec + * and usec variables allocated by the caller. Return non-zero for success + * and zero for failure. + */ +typedef int (*TS_time_cb) (struct TS_resp_ctx *, void *, long *sec, + long *usec); + +/* + * This must process the given extension. It can modify the TS_TST_INFO + * object of the context. Return values: !0 (processed), 0 (error, it must + * set the status info/failure info of the response). + */ +typedef int (*TS_extension_cb) (struct TS_resp_ctx *, X509_EXTENSION *, + void *); + +typedef struct TS_resp_ctx TS_RESP_CTX; + +DEFINE_STACK_OF_CONST(EVP_MD) + +/* Creates a response context that can be used for generating responses. */ +TS_RESP_CTX *TS_RESP_CTX_new(void); +void TS_RESP_CTX_free(TS_RESP_CTX *ctx); + +/* This parameter must be set. */ +int TS_RESP_CTX_set_signer_cert(TS_RESP_CTX *ctx, X509 *signer); + +/* This parameter must be set. */ +int TS_RESP_CTX_set_signer_key(TS_RESP_CTX *ctx, EVP_PKEY *key); + +int TS_RESP_CTX_set_signer_digest(TS_RESP_CTX *ctx, + const EVP_MD *signer_digest); +int TS_RESP_CTX_set_ess_cert_id_digest(TS_RESP_CTX *ctx, const EVP_MD *md); + +/* This parameter must be set. */ +int TS_RESP_CTX_set_def_policy(TS_RESP_CTX *ctx, const ASN1_OBJECT *def_policy); + +/* No additional certs are included in the response by default. */ +int TS_RESP_CTX_set_certs(TS_RESP_CTX *ctx, STACK_OF(X509) *certs); + +/* + * Adds a new acceptable policy, only the default policy is accepted by + * default. + */ +int TS_RESP_CTX_add_policy(TS_RESP_CTX *ctx, const ASN1_OBJECT *policy); + +/* + * Adds a new acceptable message digest. Note that no message digests are + * accepted by default. The md argument is shared with the caller. + */ +int TS_RESP_CTX_add_md(TS_RESP_CTX *ctx, const EVP_MD *md); + +/* Accuracy is not included by default. */ +int TS_RESP_CTX_set_accuracy(TS_RESP_CTX *ctx, + int secs, int millis, int micros); + +/* + * Clock precision digits, i.e. the number of decimal digits: '0' means sec, + * '3' msec, '6' usec, and so on. Default is 0. + */ +int TS_RESP_CTX_set_clock_precision_digits(TS_RESP_CTX *ctx, + unsigned clock_precision_digits); +/* At most we accept usec precision. */ +# define TS_MAX_CLOCK_PRECISION_DIGITS 6 + +/* Maximum status message length */ +# define TS_MAX_STATUS_LENGTH (1024 * 1024) + +/* No flags are set by default. */ +void TS_RESP_CTX_add_flags(TS_RESP_CTX *ctx, int flags); + +/* Default callback always returns a constant. */ +void TS_RESP_CTX_set_serial_cb(TS_RESP_CTX *ctx, TS_serial_cb cb, void *data); + +/* Default callback uses the gettimeofday() and gmtime() system calls. */ +void TS_RESP_CTX_set_time_cb(TS_RESP_CTX *ctx, TS_time_cb cb, void *data); + +/* + * Default callback rejects all extensions. The extension callback is called + * when the TS_TST_INFO object is already set up and not signed yet. + */ +/* FIXME: extension handling is not tested yet. */ +void TS_RESP_CTX_set_extension_cb(TS_RESP_CTX *ctx, + TS_extension_cb cb, void *data); + +/* The following methods can be used in the callbacks. */ +int TS_RESP_CTX_set_status_info(TS_RESP_CTX *ctx, + int status, const char *text); + +/* Sets the status info only if it is still TS_STATUS_GRANTED. */ +int TS_RESP_CTX_set_status_info_cond(TS_RESP_CTX *ctx, + int status, const char *text); + +int TS_RESP_CTX_add_failure_info(TS_RESP_CTX *ctx, int failure); + +/* The get methods below can be used in the extension callback. */ +TS_REQ *TS_RESP_CTX_get_request(TS_RESP_CTX *ctx); + +TS_TST_INFO *TS_RESP_CTX_get_tst_info(TS_RESP_CTX *ctx); + +/* + * Creates the signed TS_TST_INFO and puts it in TS_RESP. + * In case of errors it sets the status info properly. + * Returns NULL only in case of memory allocation/fatal error. + */ +TS_RESP *TS_RESP_create_response(TS_RESP_CTX *ctx, BIO *req_bio); + +/* + * Declarations related to response verification, + * they are defined in ts/ts_resp_verify.c. + */ + +int TS_RESP_verify_signature(PKCS7 *token, STACK_OF(X509) *certs, + X509_STORE *store, X509 **signer_out); + +/* Context structure for the generic verify method. */ + +/* Verify the signer's certificate and the signature of the response. */ +# define TS_VFY_SIGNATURE (1u << 0) +/* Verify the version number of the response. */ +# define TS_VFY_VERSION (1u << 1) +/* Verify if the policy supplied by the user matches the policy of the TSA. */ +# define TS_VFY_POLICY (1u << 2) +/* + * Verify the message imprint provided by the user. This flag should not be + * specified with TS_VFY_DATA. + */ +# define TS_VFY_IMPRINT (1u << 3) +/* + * Verify the message imprint computed by the verify method from the user + * provided data and the MD algorithm of the response. This flag should not + * be specified with TS_VFY_IMPRINT. + */ +# define TS_VFY_DATA (1u << 4) +/* Verify the nonce value. */ +# define TS_VFY_NONCE (1u << 5) +/* Verify if the TSA name field matches the signer certificate. */ +# define TS_VFY_SIGNER (1u << 6) +/* Verify if the TSA name field equals to the user provided name. */ +# define TS_VFY_TSA_NAME (1u << 7) + +/* You can use the following convenience constants. */ +# define TS_VFY_ALL_IMPRINT (TS_VFY_SIGNATURE \ + | TS_VFY_VERSION \ + | TS_VFY_POLICY \ + | TS_VFY_IMPRINT \ + | TS_VFY_NONCE \ + | TS_VFY_SIGNER \ + | TS_VFY_TSA_NAME) +# define TS_VFY_ALL_DATA (TS_VFY_SIGNATURE \ + | TS_VFY_VERSION \ + | TS_VFY_POLICY \ + | TS_VFY_DATA \ + | TS_VFY_NONCE \ + | TS_VFY_SIGNER \ + | TS_VFY_TSA_NAME) + +typedef struct TS_verify_ctx TS_VERIFY_CTX; + +int TS_RESP_verify_response(TS_VERIFY_CTX *ctx, TS_RESP *response); +int TS_RESP_verify_token(TS_VERIFY_CTX *ctx, PKCS7 *token); + +/* + * Declarations related to response verification context, + */ +TS_VERIFY_CTX *TS_VERIFY_CTX_new(void); +void TS_VERIFY_CTX_init(TS_VERIFY_CTX *ctx); +void TS_VERIFY_CTX_free(TS_VERIFY_CTX *ctx); +void TS_VERIFY_CTX_cleanup(TS_VERIFY_CTX *ctx); +int TS_VERIFY_CTX_set_flags(TS_VERIFY_CTX *ctx, int f); +int TS_VERIFY_CTX_add_flags(TS_VERIFY_CTX *ctx, int f); +BIO *TS_VERIFY_CTX_set_data(TS_VERIFY_CTX *ctx, BIO *b); +unsigned char *TS_VERIFY_CTX_set_imprint(TS_VERIFY_CTX *ctx, + unsigned char *hexstr, long len); +X509_STORE *TS_VERIFY_CTX_set_store(TS_VERIFY_CTX *ctx, X509_STORE *s); +STACK_OF(X509) *TS_VERIFY_CTS_set_certs(TS_VERIFY_CTX *ctx, STACK_OF(X509) *certs); + +/*- + * If ctx is NULL, it allocates and returns a new object, otherwise + * it returns ctx. It initialises all the members as follows: + * flags = TS_VFY_ALL_IMPRINT & ~(TS_VFY_TSA_NAME | TS_VFY_SIGNATURE) + * certs = NULL + * store = NULL + * policy = policy from the request or NULL if absent (in this case + * TS_VFY_POLICY is cleared from flags as well) + * md_alg = MD algorithm from request + * imprint, imprint_len = imprint from request + * data = NULL + * nonce, nonce_len = nonce from the request or NULL if absent (in this case + * TS_VFY_NONCE is cleared from flags as well) + * tsa_name = NULL + * Important: after calling this method TS_VFY_SIGNATURE should be added! + */ +TS_VERIFY_CTX *TS_REQ_to_TS_VERIFY_CTX(TS_REQ *req, TS_VERIFY_CTX *ctx); + +/* Function declarations for TS_RESP defined in ts/ts_resp_print.c */ + +int TS_RESP_print_bio(BIO *bio, TS_RESP *a); +int TS_STATUS_INFO_print_bio(BIO *bio, TS_STATUS_INFO *a); +int TS_TST_INFO_print_bio(BIO *bio, TS_TST_INFO *a); + +/* Common utility functions defined in ts/ts_lib.c */ + +int TS_ASN1_INTEGER_print_bio(BIO *bio, const ASN1_INTEGER *num); +int TS_OBJ_print_bio(BIO *bio, const ASN1_OBJECT *obj); +int TS_ext_print_bio(BIO *bio, const STACK_OF(X509_EXTENSION) *extensions); +int TS_X509_ALGOR_print_bio(BIO *bio, const X509_ALGOR *alg); +int TS_MSG_IMPRINT_print_bio(BIO *bio, TS_MSG_IMPRINT *msg); + +/* + * Function declarations for handling configuration options, defined in + * ts/ts_conf.c + */ + +X509 *TS_CONF_load_cert(const char *file); +STACK_OF(X509) *TS_CONF_load_certs(const char *file); +EVP_PKEY *TS_CONF_load_key(const char *file, const char *pass); +const char *TS_CONF_get_tsa_section(CONF *conf, const char *section); +int TS_CONF_set_serial(CONF *conf, const char *section, TS_serial_cb cb, + TS_RESP_CTX *ctx); +#ifndef OPENSSL_NO_ENGINE +int TS_CONF_set_crypto_device(CONF *conf, const char *section, + const char *device); +int TS_CONF_set_default_engine(const char *name); +#endif +int TS_CONF_set_signer_cert(CONF *conf, const char *section, + const char *cert, TS_RESP_CTX *ctx); +int TS_CONF_set_certs(CONF *conf, const char *section, const char *certs, + TS_RESP_CTX *ctx); +int TS_CONF_set_signer_key(CONF *conf, const char *section, + const char *key, const char *pass, + TS_RESP_CTX *ctx); +int TS_CONF_set_signer_digest(CONF *conf, const char *section, + const char *md, TS_RESP_CTX *ctx); +int TS_CONF_set_def_policy(CONF *conf, const char *section, + const char *policy, TS_RESP_CTX *ctx); +int TS_CONF_set_policies(CONF *conf, const char *section, TS_RESP_CTX *ctx); +int TS_CONF_set_digests(CONF *conf, const char *section, TS_RESP_CTX *ctx); +int TS_CONF_set_accuracy(CONF *conf, const char *section, TS_RESP_CTX *ctx); +int TS_CONF_set_clock_precision_digits(CONF *conf, const char *section, + TS_RESP_CTX *ctx); +int TS_CONF_set_ordering(CONF *conf, const char *section, TS_RESP_CTX *ctx); +int TS_CONF_set_tsa_name(CONF *conf, const char *section, TS_RESP_CTX *ctx); +int TS_CONF_set_ess_cert_id_chain(CONF *conf, const char *section, + TS_RESP_CTX *ctx); +int TS_CONF_set_ess_cert_id_digest(CONF *conf, const char *section, + TS_RESP_CTX *ctx); + +# ifdef __cplusplus +} +# endif +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/tserr.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/tserr.h new file mode 100644 index 00000000..07f23339 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/tserr.h @@ -0,0 +1,132 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2019 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_TSERR_H +# define HEADER_TSERR_H + +# ifndef HEADER_SYMHACKS_H +# include +# endif + +# include + +# ifndef OPENSSL_NO_TS + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_TS_strings(void); + +/* + * TS function codes. + */ +# define TS_F_DEF_SERIAL_CB 110 +# define TS_F_DEF_TIME_CB 111 +# define TS_F_ESS_ADD_SIGNING_CERT 112 +# define TS_F_ESS_ADD_SIGNING_CERT_V2 147 +# define TS_F_ESS_CERT_ID_NEW_INIT 113 +# define TS_F_ESS_CERT_ID_V2_NEW_INIT 156 +# define TS_F_ESS_SIGNING_CERT_NEW_INIT 114 +# define TS_F_ESS_SIGNING_CERT_V2_NEW_INIT 157 +# define TS_F_INT_TS_RESP_VERIFY_TOKEN 149 +# define TS_F_PKCS7_TO_TS_TST_INFO 148 +# define TS_F_TS_ACCURACY_SET_MICROS 115 +# define TS_F_TS_ACCURACY_SET_MILLIS 116 +# define TS_F_TS_ACCURACY_SET_SECONDS 117 +# define TS_F_TS_CHECK_IMPRINTS 100 +# define TS_F_TS_CHECK_NONCES 101 +# define TS_F_TS_CHECK_POLICY 102 +# define TS_F_TS_CHECK_SIGNING_CERTS 103 +# define TS_F_TS_CHECK_STATUS_INFO 104 +# define TS_F_TS_COMPUTE_IMPRINT 145 +# define TS_F_TS_CONF_INVALID 151 +# define TS_F_TS_CONF_LOAD_CERT 153 +# define TS_F_TS_CONF_LOAD_CERTS 154 +# define TS_F_TS_CONF_LOAD_KEY 155 +# define TS_F_TS_CONF_LOOKUP_FAIL 152 +# define TS_F_TS_CONF_SET_DEFAULT_ENGINE 146 +# define TS_F_TS_GET_STATUS_TEXT 105 +# define TS_F_TS_MSG_IMPRINT_SET_ALGO 118 +# define TS_F_TS_REQ_SET_MSG_IMPRINT 119 +# define TS_F_TS_REQ_SET_NONCE 120 +# define TS_F_TS_REQ_SET_POLICY_ID 121 +# define TS_F_TS_RESP_CREATE_RESPONSE 122 +# define TS_F_TS_RESP_CREATE_TST_INFO 123 +# define TS_F_TS_RESP_CTX_ADD_FAILURE_INFO 124 +# define TS_F_TS_RESP_CTX_ADD_MD 125 +# define TS_F_TS_RESP_CTX_ADD_POLICY 126 +# define TS_F_TS_RESP_CTX_NEW 127 +# define TS_F_TS_RESP_CTX_SET_ACCURACY 128 +# define TS_F_TS_RESP_CTX_SET_CERTS 129 +# define TS_F_TS_RESP_CTX_SET_DEF_POLICY 130 +# define TS_F_TS_RESP_CTX_SET_SIGNER_CERT 131 +# define TS_F_TS_RESP_CTX_SET_STATUS_INFO 132 +# define TS_F_TS_RESP_GET_POLICY 133 +# define TS_F_TS_RESP_SET_GENTIME_WITH_PRECISION 134 +# define TS_F_TS_RESP_SET_STATUS_INFO 135 +# define TS_F_TS_RESP_SET_TST_INFO 150 +# define TS_F_TS_RESP_SIGN 136 +# define TS_F_TS_RESP_VERIFY_SIGNATURE 106 +# define TS_F_TS_TST_INFO_SET_ACCURACY 137 +# define TS_F_TS_TST_INFO_SET_MSG_IMPRINT 138 +# define TS_F_TS_TST_INFO_SET_NONCE 139 +# define TS_F_TS_TST_INFO_SET_POLICY_ID 140 +# define TS_F_TS_TST_INFO_SET_SERIAL 141 +# define TS_F_TS_TST_INFO_SET_TIME 142 +# define TS_F_TS_TST_INFO_SET_TSA 143 +# define TS_F_TS_VERIFY 108 +# define TS_F_TS_VERIFY_CERT 109 +# define TS_F_TS_VERIFY_CTX_NEW 144 + +/* + * TS reason codes. + */ +# define TS_R_BAD_PKCS7_TYPE 132 +# define TS_R_BAD_TYPE 133 +# define TS_R_CANNOT_LOAD_CERT 137 +# define TS_R_CANNOT_LOAD_KEY 138 +# define TS_R_CERTIFICATE_VERIFY_ERROR 100 +# define TS_R_COULD_NOT_SET_ENGINE 127 +# define TS_R_COULD_NOT_SET_TIME 115 +# define TS_R_DETACHED_CONTENT 134 +# define TS_R_ESS_ADD_SIGNING_CERT_ERROR 116 +# define TS_R_ESS_ADD_SIGNING_CERT_V2_ERROR 139 +# define TS_R_ESS_SIGNING_CERTIFICATE_ERROR 101 +# define TS_R_INVALID_NULL_POINTER 102 +# define TS_R_INVALID_SIGNER_CERTIFICATE_PURPOSE 117 +# define TS_R_MESSAGE_IMPRINT_MISMATCH 103 +# define TS_R_NONCE_MISMATCH 104 +# define TS_R_NONCE_NOT_RETURNED 105 +# define TS_R_NO_CONTENT 106 +# define TS_R_NO_TIME_STAMP_TOKEN 107 +# define TS_R_PKCS7_ADD_SIGNATURE_ERROR 118 +# define TS_R_PKCS7_ADD_SIGNED_ATTR_ERROR 119 +# define TS_R_PKCS7_TO_TS_TST_INFO_FAILED 129 +# define TS_R_POLICY_MISMATCH 108 +# define TS_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE 120 +# define TS_R_RESPONSE_SETUP_ERROR 121 +# define TS_R_SIGNATURE_FAILURE 109 +# define TS_R_THERE_MUST_BE_ONE_SIGNER 110 +# define TS_R_TIME_SYSCALL_ERROR 122 +# define TS_R_TOKEN_NOT_PRESENT 130 +# define TS_R_TOKEN_PRESENT 131 +# define TS_R_TSA_NAME_MISMATCH 111 +# define TS_R_TSA_UNTRUSTED 112 +# define TS_R_TST_INFO_SETUP_ERROR 123 +# define TS_R_TS_DATASIGN 124 +# define TS_R_UNACCEPTABLE_POLICY 125 +# define TS_R_UNSUPPORTED_MD_ALGORITHM 126 +# define TS_R_UNSUPPORTED_VERSION 113 +# define TS_R_VAR_BAD_VALUE 135 +# define TS_R_VAR_LOOKUP_FAILURE 136 +# define TS_R_WRONG_CONTENT_TYPE 114 + +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/txt_db.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/txt_db.h new file mode 100644 index 00000000..ec981a43 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/txt_db.h @@ -0,0 +1,57 @@ +/* + * Copyright 1995-2017 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_TXT_DB_H +# define HEADER_TXT_DB_H + +# include +# include +# include +# include + +# define DB_ERROR_OK 0 +# define DB_ERROR_MALLOC 1 +# define DB_ERROR_INDEX_CLASH 2 +# define DB_ERROR_INDEX_OUT_OF_RANGE 3 +# define DB_ERROR_NO_INDEX 4 +# define DB_ERROR_INSERT_INDEX_CLASH 5 +# define DB_ERROR_WRONG_NUM_FIELDS 6 + +#ifdef __cplusplus +extern "C" { +#endif + +typedef OPENSSL_STRING *OPENSSL_PSTRING; +DEFINE_SPECIAL_STACK_OF(OPENSSL_PSTRING, OPENSSL_STRING) + +typedef struct txt_db_st { + int num_fields; + STACK_OF(OPENSSL_PSTRING) *data; + LHASH_OF(OPENSSL_STRING) **index; + int (**qual) (OPENSSL_STRING *); + long error; + long arg1; + long arg2; + OPENSSL_STRING *arg_row; +} TXT_DB; + +TXT_DB *TXT_DB_read(BIO *in, int num); +long TXT_DB_write(BIO *out, TXT_DB *db); +int TXT_DB_create_index(TXT_DB *db, int field, int (*qual) (OPENSSL_STRING *), + OPENSSL_LH_HASHFUNC hash, OPENSSL_LH_COMPFUNC cmp); +void TXT_DB_free(TXT_DB *db); +OPENSSL_STRING *TXT_DB_get_by_index(TXT_DB *db, int idx, + OPENSSL_STRING *value); +int TXT_DB_insert(TXT_DB *db, OPENSSL_STRING *value); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ui.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ui.h new file mode 100644 index 00000000..7c721ec8 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ui.h @@ -0,0 +1,368 @@ +/* + * Copyright 2001-2018 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_UI_H +# define HEADER_UI_H + +# include + +# if OPENSSL_API_COMPAT < 0x10100000L +# include +# endif +# include +# include +# include +# include + +/* For compatibility reasons, the macro OPENSSL_NO_UI is currently retained */ +# if OPENSSL_API_COMPAT < 0x10200000L +# ifdef OPENSSL_NO_UI_CONSOLE +# define OPENSSL_NO_UI +# endif +# endif + +# ifdef __cplusplus +extern "C" { +# endif + +/* + * All the following functions return -1 or NULL on error and in some cases + * (UI_process()) -2 if interrupted or in some other way cancelled. When + * everything is fine, they return 0, a positive value or a non-NULL pointer, + * all depending on their purpose. + */ + +/* Creators and destructor. */ +UI *UI_new(void); +UI *UI_new_method(const UI_METHOD *method); +void UI_free(UI *ui); + +/*- + The following functions are used to add strings to be printed and prompt + strings to prompt for data. The names are UI_{add,dup}__string + and UI_{add,dup}_input_boolean. + + UI_{add,dup}__string have the following meanings: + add add a text or prompt string. The pointers given to these + functions are used verbatim, no copying is done. + dup make a copy of the text or prompt string, then add the copy + to the collection of strings in the user interface. + + The function is a name for the functionality that the given + string shall be used for. It can be one of: + input use the string as data prompt. + verify use the string as verification prompt. This + is used to verify a previous input. + info use the string for informational output. + error use the string for error output. + Honestly, there's currently no difference between info and error for the + moment. + + UI_{add,dup}_input_boolean have the same semantics for "add" and "dup", + and are typically used when one wants to prompt for a yes/no response. + + All of the functions in this group take a UI and a prompt string. + The string input and verify addition functions also take a flag argument, + a buffer for the result to end up with, a minimum input size and a maximum + input size (the result buffer MUST be large enough to be able to contain + the maximum number of characters). Additionally, the verify addition + functions takes another buffer to compare the result against. + The boolean input functions take an action description string (which should + be safe to ignore if the expected user action is obvious, for example with + a dialog box with an OK button and a Cancel button), a string of acceptable + characters to mean OK and to mean Cancel. The two last strings are checked + to make sure they don't have common characters. Additionally, the same + flag argument as for the string input is taken, as well as a result buffer. + The result buffer is required to be at least one byte long. Depending on + the answer, the first character from the OK or the Cancel character strings + will be stored in the first byte of the result buffer. No NUL will be + added, so the result is *not* a string. + + On success, the all return an index of the added information. That index + is useful when retrieving results with UI_get0_result(). */ +int UI_add_input_string(UI *ui, const char *prompt, int flags, + char *result_buf, int minsize, int maxsize); +int UI_dup_input_string(UI *ui, const char *prompt, int flags, + char *result_buf, int minsize, int maxsize); +int UI_add_verify_string(UI *ui, const char *prompt, int flags, + char *result_buf, int minsize, int maxsize, + const char *test_buf); +int UI_dup_verify_string(UI *ui, const char *prompt, int flags, + char *result_buf, int minsize, int maxsize, + const char *test_buf); +int UI_add_input_boolean(UI *ui, const char *prompt, const char *action_desc, + const char *ok_chars, const char *cancel_chars, + int flags, char *result_buf); +int UI_dup_input_boolean(UI *ui, const char *prompt, const char *action_desc, + const char *ok_chars, const char *cancel_chars, + int flags, char *result_buf); +int UI_add_info_string(UI *ui, const char *text); +int UI_dup_info_string(UI *ui, const char *text); +int UI_add_error_string(UI *ui, const char *text); +int UI_dup_error_string(UI *ui, const char *text); + +/* These are the possible flags. They can be or'ed together. */ +/* Use to have echoing of input */ +# define UI_INPUT_FLAG_ECHO 0x01 +/* + * Use a default password. Where that password is found is completely up to + * the application, it might for example be in the user data set with + * UI_add_user_data(). It is not recommended to have more than one input in + * each UI being marked with this flag, or the application might get + * confused. + */ +# define UI_INPUT_FLAG_DEFAULT_PWD 0x02 + +/*- + * The user of these routines may want to define flags of their own. The core + * UI won't look at those, but will pass them on to the method routines. They + * must use higher bits so they don't get confused with the UI bits above. + * UI_INPUT_FLAG_USER_BASE tells which is the lowest bit to use. A good + * example of use is this: + * + * #define MY_UI_FLAG1 (0x01 << UI_INPUT_FLAG_USER_BASE) + * +*/ +# define UI_INPUT_FLAG_USER_BASE 16 + +/*- + * The following function helps construct a prompt. object_desc is a + * textual short description of the object, for example "pass phrase", + * and object_name is the name of the object (might be a card name or + * a file name. + * The returned string shall always be allocated on the heap with + * OPENSSL_malloc(), and need to be free'd with OPENSSL_free(). + * + * If the ui_method doesn't contain a pointer to a user-defined prompt + * constructor, a default string is built, looking like this: + * + * "Enter {object_desc} for {object_name}:" + * + * So, if object_desc has the value "pass phrase" and object_name has + * the value "foo.key", the resulting string is: + * + * "Enter pass phrase for foo.key:" +*/ +char *UI_construct_prompt(UI *ui_method, + const char *object_desc, const char *object_name); + +/* + * The following function is used to store a pointer to user-specific data. + * Any previous such pointer will be returned and replaced. + * + * For callback purposes, this function makes a lot more sense than using + * ex_data, since the latter requires that different parts of OpenSSL or + * applications share the same ex_data index. + * + * Note that the UI_OpenSSL() method completely ignores the user data. Other + * methods may not, however. + */ +void *UI_add_user_data(UI *ui, void *user_data); +/* + * Alternatively, this function is used to duplicate the user data. + * This uses the duplicator method function. The destroy function will + * be used to free the user data in this case. + */ +int UI_dup_user_data(UI *ui, void *user_data); +/* We need a user data retrieving function as well. */ +void *UI_get0_user_data(UI *ui); + +/* Return the result associated with a prompt given with the index i. */ +const char *UI_get0_result(UI *ui, int i); +int UI_get_result_length(UI *ui, int i); + +/* When all strings have been added, process the whole thing. */ +int UI_process(UI *ui); + +/* + * Give a user interface parameterised control commands. This can be used to + * send down an integer, a data pointer or a function pointer, as well as be + * used to get information from a UI. + */ +int UI_ctrl(UI *ui, int cmd, long i, void *p, void (*f) (void)); + +/* The commands */ +/* + * Use UI_CONTROL_PRINT_ERRORS with the value 1 to have UI_process print the + * OpenSSL error stack before printing any info or added error messages and + * before any prompting. + */ +# define UI_CTRL_PRINT_ERRORS 1 +/* + * Check if a UI_process() is possible to do again with the same instance of + * a user interface. This makes UI_ctrl() return 1 if it is redoable, and 0 + * if not. + */ +# define UI_CTRL_IS_REDOABLE 2 + +/* Some methods may use extra data */ +# define UI_set_app_data(s,arg) UI_set_ex_data(s,0,arg) +# define UI_get_app_data(s) UI_get_ex_data(s,0) + +# define UI_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_UI, l, p, newf, dupf, freef) +int UI_set_ex_data(UI *r, int idx, void *arg); +void *UI_get_ex_data(UI *r, int idx); + +/* Use specific methods instead of the built-in one */ +void UI_set_default_method(const UI_METHOD *meth); +const UI_METHOD *UI_get_default_method(void); +const UI_METHOD *UI_get_method(UI *ui); +const UI_METHOD *UI_set_method(UI *ui, const UI_METHOD *meth); + +# ifndef OPENSSL_NO_UI_CONSOLE + +/* The method with all the built-in thingies */ +UI_METHOD *UI_OpenSSL(void); + +# endif + +/* + * NULL method. Literally does nothing, but may serve as a placeholder + * to avoid internal default. + */ +const UI_METHOD *UI_null(void); + +/* ---------- For method writers ---------- */ +/*- + A method contains a number of functions that implement the low level + of the User Interface. The functions are: + + an opener This function starts a session, maybe by opening + a channel to a tty, or by opening a window. + a writer This function is called to write a given string, + maybe to the tty, maybe as a field label in a + window. + a flusher This function is called to flush everything that + has been output so far. It can be used to actually + display a dialog box after it has been built. + a reader This function is called to read a given prompt, + maybe from the tty, maybe from a field in a + window. Note that it's called with all string + structures, not only the prompt ones, so it must + check such things itself. + a closer This function closes the session, maybe by closing + the channel to the tty, or closing the window. + + All these functions are expected to return: + + 0 on error. + 1 on success. + -1 on out-of-band events, for example if some prompting has + been canceled (by pressing Ctrl-C, for example). This is + only checked when returned by the flusher or the reader. + + The way this is used, the opener is first called, then the writer for all + strings, then the flusher, then the reader for all strings and finally the + closer. Note that if you want to prompt from a terminal or other command + line interface, the best is to have the reader also write the prompts + instead of having the writer do it. If you want to prompt from a dialog + box, the writer can be used to build up the contents of the box, and the + flusher to actually display the box and run the event loop until all data + has been given, after which the reader only grabs the given data and puts + them back into the UI strings. + + All method functions take a UI as argument. Additionally, the writer and + the reader take a UI_STRING. +*/ + +/* + * The UI_STRING type is the data structure that contains all the needed info + * about a string or a prompt, including test data for a verification prompt. + */ +typedef struct ui_string_st UI_STRING; +DEFINE_STACK_OF(UI_STRING) + +/* + * The different types of strings that are currently supported. This is only + * needed by method authors. + */ +enum UI_string_types { + UIT_NONE = 0, + UIT_PROMPT, /* Prompt for a string */ + UIT_VERIFY, /* Prompt for a string and verify */ + UIT_BOOLEAN, /* Prompt for a yes/no response */ + UIT_INFO, /* Send info to the user */ + UIT_ERROR /* Send an error message to the user */ +}; + +/* Create and manipulate methods */ +UI_METHOD *UI_create_method(const char *name); +void UI_destroy_method(UI_METHOD *ui_method); +int UI_method_set_opener(UI_METHOD *method, int (*opener) (UI *ui)); +int UI_method_set_writer(UI_METHOD *method, + int (*writer) (UI *ui, UI_STRING *uis)); +int UI_method_set_flusher(UI_METHOD *method, int (*flusher) (UI *ui)); +int UI_method_set_reader(UI_METHOD *method, + int (*reader) (UI *ui, UI_STRING *uis)); +int UI_method_set_closer(UI_METHOD *method, int (*closer) (UI *ui)); +int UI_method_set_data_duplicator(UI_METHOD *method, + void *(*duplicator) (UI *ui, void *ui_data), + void (*destructor)(UI *ui, void *ui_data)); +int UI_method_set_prompt_constructor(UI_METHOD *method, + char *(*prompt_constructor) (UI *ui, + const char + *object_desc, + const char + *object_name)); +int UI_method_set_ex_data(UI_METHOD *method, int idx, void *data); +int (*UI_method_get_opener(const UI_METHOD *method)) (UI *); +int (*UI_method_get_writer(const UI_METHOD *method)) (UI *, UI_STRING *); +int (*UI_method_get_flusher(const UI_METHOD *method)) (UI *); +int (*UI_method_get_reader(const UI_METHOD *method)) (UI *, UI_STRING *); +int (*UI_method_get_closer(const UI_METHOD *method)) (UI *); +char *(*UI_method_get_prompt_constructor(const UI_METHOD *method)) + (UI *, const char *, const char *); +void *(*UI_method_get_data_duplicator(const UI_METHOD *method)) (UI *, void *); +void (*UI_method_get_data_destructor(const UI_METHOD *method)) (UI *, void *); +const void *UI_method_get_ex_data(const UI_METHOD *method, int idx); + +/* + * The following functions are helpers for method writers to access relevant + * data from a UI_STRING. + */ + +/* Return type of the UI_STRING */ +enum UI_string_types UI_get_string_type(UI_STRING *uis); +/* Return input flags of the UI_STRING */ +int UI_get_input_flags(UI_STRING *uis); +/* Return the actual string to output (the prompt, info or error) */ +const char *UI_get0_output_string(UI_STRING *uis); +/* + * Return the optional action string to output (the boolean prompt + * instruction) + */ +const char *UI_get0_action_string(UI_STRING *uis); +/* Return the result of a prompt */ +const char *UI_get0_result_string(UI_STRING *uis); +int UI_get_result_string_length(UI_STRING *uis); +/* + * Return the string to test the result against. Only useful with verifies. + */ +const char *UI_get0_test_string(UI_STRING *uis); +/* Return the required minimum size of the result */ +int UI_get_result_minsize(UI_STRING *uis); +/* Return the required maximum size of the result */ +int UI_get_result_maxsize(UI_STRING *uis); +/* Set the result of a UI_STRING. */ +int UI_set_result(UI *ui, UI_STRING *uis, const char *result); +int UI_set_result_ex(UI *ui, UI_STRING *uis, const char *result, int len); + +/* A couple of popular utility functions */ +int UI_UTIL_read_pw_string(char *buf, int length, const char *prompt, + int verify); +int UI_UTIL_read_pw(char *buf, char *buff, int size, const char *prompt, + int verify); +UI_METHOD *UI_UTIL_wrap_read_pem_callback(pem_password_cb *cb, int rwflag); + + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/uierr.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/uierr.h new file mode 100644 index 00000000..bd68864d --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/uierr.h @@ -0,0 +1,65 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2019 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_UIERR_H +# define HEADER_UIERR_H + +# ifndef HEADER_SYMHACKS_H +# include +# endif + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_UI_strings(void); + +/* + * UI function codes. + */ +# define UI_F_CLOSE_CONSOLE 115 +# define UI_F_ECHO_CONSOLE 116 +# define UI_F_GENERAL_ALLOCATE_BOOLEAN 108 +# define UI_F_GENERAL_ALLOCATE_PROMPT 109 +# define UI_F_NOECHO_CONSOLE 117 +# define UI_F_OPEN_CONSOLE 114 +# define UI_F_UI_CONSTRUCT_PROMPT 121 +# define UI_F_UI_CREATE_METHOD 112 +# define UI_F_UI_CTRL 111 +# define UI_F_UI_DUP_ERROR_STRING 101 +# define UI_F_UI_DUP_INFO_STRING 102 +# define UI_F_UI_DUP_INPUT_BOOLEAN 110 +# define UI_F_UI_DUP_INPUT_STRING 103 +# define UI_F_UI_DUP_USER_DATA 118 +# define UI_F_UI_DUP_VERIFY_STRING 106 +# define UI_F_UI_GET0_RESULT 107 +# define UI_F_UI_GET_RESULT_LENGTH 119 +# define UI_F_UI_NEW_METHOD 104 +# define UI_F_UI_PROCESS 113 +# define UI_F_UI_SET_RESULT 105 +# define UI_F_UI_SET_RESULT_EX 120 + +/* + * UI reason codes. + */ +# define UI_R_COMMON_OK_AND_CANCEL_CHARACTERS 104 +# define UI_R_INDEX_TOO_LARGE 102 +# define UI_R_INDEX_TOO_SMALL 103 +# define UI_R_NO_RESULT_BUFFER 105 +# define UI_R_PROCESSING_ERROR 107 +# define UI_R_RESULT_TOO_LARGE 100 +# define UI_R_RESULT_TOO_SMALL 101 +# define UI_R_SYSASSIGN_ERROR 109 +# define UI_R_SYSDASSGN_ERROR 110 +# define UI_R_SYSQIOW_ERROR 111 +# define UI_R_UNKNOWN_CONTROL_COMMAND 106 +# define UI_R_UNKNOWN_TTYGET_ERRNO_VALUE 108 +# define UI_R_USER_DATA_DUPLICATION_UNSUPPORTED 112 + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/whrlpool.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/whrlpool.h new file mode 100644 index 00000000..20ea3503 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/whrlpool.h @@ -0,0 +1,48 @@ +/* + * Copyright 2005-2016 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_WHRLPOOL_H +# define HEADER_WHRLPOOL_H + +#include + +# ifndef OPENSSL_NO_WHIRLPOOL +# include +# include +# ifdef __cplusplus +extern "C" { +# endif + +# define WHIRLPOOL_DIGEST_LENGTH (512/8) +# define WHIRLPOOL_BBLOCK 512 +# define WHIRLPOOL_COUNTER (256/8) + +typedef struct { + union { + unsigned char c[WHIRLPOOL_DIGEST_LENGTH]; + /* double q is here to ensure 64-bit alignment */ + double q[WHIRLPOOL_DIGEST_LENGTH / sizeof(double)]; + } H; + unsigned char data[WHIRLPOOL_BBLOCK / 8]; + unsigned int bitoff; + size_t bitlen[WHIRLPOOL_COUNTER / sizeof(size_t)]; +} WHIRLPOOL_CTX; + +int WHIRLPOOL_Init(WHIRLPOOL_CTX *c); +int WHIRLPOOL_Update(WHIRLPOOL_CTX *c, const void *inp, size_t bytes); +void WHIRLPOOL_BitUpdate(WHIRLPOOL_CTX *c, const void *inp, size_t bits); +int WHIRLPOOL_Final(unsigned char *md, WHIRLPOOL_CTX *c); +unsigned char *WHIRLPOOL(const void *inp, size_t bytes, unsigned char *md); + +# ifdef __cplusplus +} +# endif +# endif + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509.h new file mode 100644 index 00000000..39ca0ba5 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509.h @@ -0,0 +1,1047 @@ +/* + * Copyright 1995-2018 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 + * 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 + */ + +#ifndef HEADER_X509_H +# define HEADER_X509_H + +# include +# include +# include +# include +# include +# include +# include +# include +# include + +# if OPENSSL_API_COMPAT < 0x10100000L +# include +# include +# include +# endif + +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Flags for X509_get_signature_info() */ +/* Signature info is valid */ +# define X509_SIG_INFO_VALID 0x1 +/* Signature is suitable for TLS use */ +# define X509_SIG_INFO_TLS 0x2 + +# define X509_FILETYPE_PEM 1 +# define X509_FILETYPE_ASN1 2 +# define X509_FILETYPE_DEFAULT 3 + +# define X509v3_KU_DIGITAL_SIGNATURE 0x0080 +# define X509v3_KU_NON_REPUDIATION 0x0040 +# define X509v3_KU_KEY_ENCIPHERMENT 0x0020 +# define X509v3_KU_DATA_ENCIPHERMENT 0x0010 +# define X509v3_KU_KEY_AGREEMENT 0x0008 +# define X509v3_KU_KEY_CERT_SIGN 0x0004 +# define X509v3_KU_CRL_SIGN 0x0002 +# define X509v3_KU_ENCIPHER_ONLY 0x0001 +# define X509v3_KU_DECIPHER_ONLY 0x8000 +# define X509v3_KU_UNDEF 0xffff + +struct X509_algor_st { + ASN1_OBJECT *algorithm; + ASN1_TYPE *parameter; +} /* X509_ALGOR */ ; + +typedef STACK_OF(X509_ALGOR) X509_ALGORS; + +typedef struct X509_val_st { + ASN1_TIME *notBefore; + ASN1_TIME *notAfter; +} X509_VAL; + +typedef struct X509_sig_st X509_SIG; + +typedef struct X509_name_entry_st X509_NAME_ENTRY; + +DEFINE_STACK_OF(X509_NAME_ENTRY) + +DEFINE_STACK_OF(X509_NAME) + +# define X509_EX_V_NETSCAPE_HACK 0x8000 +# define X509_EX_V_INIT 0x0001 +typedef struct X509_extension_st X509_EXTENSION; + +typedef STACK_OF(X509_EXTENSION) X509_EXTENSIONS; + +DEFINE_STACK_OF(X509_EXTENSION) + +typedef struct x509_attributes_st X509_ATTRIBUTE; + +DEFINE_STACK_OF(X509_ATTRIBUTE) + +typedef struct X509_req_info_st X509_REQ_INFO; + +typedef struct X509_req_st X509_REQ; + +typedef struct x509_cert_aux_st X509_CERT_AUX; + +typedef struct x509_cinf_st X509_CINF; + +DEFINE_STACK_OF(X509) + +/* This is used for a table of trust checking functions */ + +typedef struct x509_trust_st { + int trust; + int flags; + int (*check_trust) (struct x509_trust_st *, X509 *, int); + char *name; + int arg1; + void *arg2; +} X509_TRUST; + +DEFINE_STACK_OF(X509_TRUST) + +/* standard trust ids */ + +# define X509_TRUST_DEFAULT 0 /* Only valid in purpose settings */ + +# define X509_TRUST_COMPAT 1 +# define X509_TRUST_SSL_CLIENT 2 +# define X509_TRUST_SSL_SERVER 3 +# define X509_TRUST_EMAIL 4 +# define X509_TRUST_OBJECT_SIGN 5 +# define X509_TRUST_OCSP_SIGN 6 +# define X509_TRUST_OCSP_REQUEST 7 +# define X509_TRUST_TSA 8 + +/* Keep these up to date! */ +# define X509_TRUST_MIN 1 +# define X509_TRUST_MAX 8 + +/* trust_flags values */ +# define X509_TRUST_DYNAMIC (1U << 0) +# define X509_TRUST_DYNAMIC_NAME (1U << 1) +/* No compat trust if self-signed, preempts "DO_SS" */ +# define X509_TRUST_NO_SS_COMPAT (1U << 2) +/* Compat trust if no explicit accepted trust EKUs */ +# define X509_TRUST_DO_SS_COMPAT (1U << 3) +/* Accept "anyEKU" as a wildcard trust OID */ +# define X509_TRUST_OK_ANY_EKU (1U << 4) + +/* check_trust return codes */ + +# define X509_TRUST_TRUSTED 1 +# define X509_TRUST_REJECTED 2 +# define X509_TRUST_UNTRUSTED 3 + +/* Flags for X509_print_ex() */ + +# define X509_FLAG_COMPAT 0 +# define X509_FLAG_NO_HEADER 1L +# define X509_FLAG_NO_VERSION (1L << 1) +# define X509_FLAG_NO_SERIAL (1L << 2) +# define X509_FLAG_NO_SIGNAME (1L << 3) +# define X509_FLAG_NO_ISSUER (1L << 4) +# define X509_FLAG_NO_VALIDITY (1L << 5) +# define X509_FLAG_NO_SUBJECT (1L << 6) +# define X509_FLAG_NO_PUBKEY (1L << 7) +# define X509_FLAG_NO_EXTENSIONS (1L << 8) +# define X509_FLAG_NO_SIGDUMP (1L << 9) +# define X509_FLAG_NO_AUX (1L << 10) +# define X509_FLAG_NO_ATTRIBUTES (1L << 11) +# define X509_FLAG_NO_IDS (1L << 12) + +/* Flags specific to X509_NAME_print_ex() */ + +/* The field separator information */ + +# define XN_FLAG_SEP_MASK (0xf << 16) + +# define XN_FLAG_COMPAT 0/* Traditional; use old X509_NAME_print */ +# define XN_FLAG_SEP_COMMA_PLUS (1 << 16)/* RFC2253 ,+ */ +# define XN_FLAG_SEP_CPLUS_SPC (2 << 16)/* ,+ spaced: more readable */ +# define XN_FLAG_SEP_SPLUS_SPC (3 << 16)/* ;+ spaced */ +# define XN_FLAG_SEP_MULTILINE (4 << 16)/* One line per field */ + +# define XN_FLAG_DN_REV (1 << 20)/* Reverse DN order */ + +/* How the field name is shown */ + +# define XN_FLAG_FN_MASK (0x3 << 21) + +# define XN_FLAG_FN_SN 0/* Object short name */ +# define XN_FLAG_FN_LN (1 << 21)/* Object long name */ +# define XN_FLAG_FN_OID (2 << 21)/* Always use OIDs */ +# define XN_FLAG_FN_NONE (3 << 21)/* No field names */ + +# define XN_FLAG_SPC_EQ (1 << 23)/* Put spaces round '=' */ + +/* + * This determines if we dump fields we don't recognise: RFC2253 requires + * this. + */ + +# define XN_FLAG_DUMP_UNKNOWN_FIELDS (1 << 24) + +# define XN_FLAG_FN_ALIGN (1 << 25)/* Align field names to 20 + * characters */ + +/* Complete set of RFC2253 flags */ + +# define XN_FLAG_RFC2253 (ASN1_STRFLGS_RFC2253 | \ + XN_FLAG_SEP_COMMA_PLUS | \ + XN_FLAG_DN_REV | \ + XN_FLAG_FN_SN | \ + XN_FLAG_DUMP_UNKNOWN_FIELDS) + +/* readable oneline form */ + +# define XN_FLAG_ONELINE (ASN1_STRFLGS_RFC2253 | \ + ASN1_STRFLGS_ESC_QUOTE | \ + XN_FLAG_SEP_CPLUS_SPC | \ + XN_FLAG_SPC_EQ | \ + XN_FLAG_FN_SN) + +/* readable multiline form */ + +# define XN_FLAG_MULTILINE (ASN1_STRFLGS_ESC_CTRL | \ + ASN1_STRFLGS_ESC_MSB | \ + XN_FLAG_SEP_MULTILINE | \ + XN_FLAG_SPC_EQ | \ + XN_FLAG_FN_LN | \ + XN_FLAG_FN_ALIGN) + +DEFINE_STACK_OF(X509_REVOKED) + +typedef struct X509_crl_info_st X509_CRL_INFO; + +DEFINE_STACK_OF(X509_CRL) + +typedef struct private_key_st { + int version; + /* The PKCS#8 data types */ + X509_ALGOR *enc_algor; + ASN1_OCTET_STRING *enc_pkey; /* encrypted pub key */ + /* When decrypted, the following will not be NULL */ + EVP_PKEY *dec_pkey; + /* used to encrypt and decrypt */ + int key_length; + char *key_data; + int key_free; /* true if we should auto free key_data */ + /* expanded version of 'enc_algor' */ + EVP_CIPHER_INFO cipher; +} X509_PKEY; + +typedef struct X509_info_st { + X509 *x509; + X509_CRL *crl; + X509_PKEY *x_pkey; + EVP_CIPHER_INFO enc_cipher; + int enc_len; + char *enc_data; +} X509_INFO; + +DEFINE_STACK_OF(X509_INFO) + +/* + * The next 2 structures and their 8 routines are used to manipulate Netscape's + * spki structures - useful if you are writing a CA web page + */ +typedef struct Netscape_spkac_st { + X509_PUBKEY *pubkey; + ASN1_IA5STRING *challenge; /* challenge sent in atlas >= PR2 */ +} NETSCAPE_SPKAC; + +typedef struct Netscape_spki_st { + NETSCAPE_SPKAC *spkac; /* signed public key and challenge */ + X509_ALGOR sig_algor; + ASN1_BIT_STRING *signature; +} NETSCAPE_SPKI; + +/* Netscape certificate sequence structure */ +typedef struct Netscape_certificate_sequence { + ASN1_OBJECT *type; + STACK_OF(X509) *certs; +} NETSCAPE_CERT_SEQUENCE; + +/*- Unused (and iv length is wrong) +typedef struct CBCParameter_st + { + unsigned char iv[8]; + } CBC_PARAM; +*/ + +/* Password based encryption structure */ + +typedef struct PBEPARAM_st { + ASN1_OCTET_STRING *salt; + ASN1_INTEGER *iter; +} PBEPARAM; + +/* Password based encryption V2 structures */ + +typedef struct PBE2PARAM_st { + X509_ALGOR *keyfunc; + X509_ALGOR *encryption; +} PBE2PARAM; + +typedef struct PBKDF2PARAM_st { +/* Usually OCTET STRING but could be anything */ + ASN1_TYPE *salt; + ASN1_INTEGER *iter; + ASN1_INTEGER *keylength; + X509_ALGOR *prf; +} PBKDF2PARAM; + +#ifndef OPENSSL_NO_SCRYPT +typedef struct SCRYPT_PARAMS_st { + ASN1_OCTET_STRING *salt; + ASN1_INTEGER *costParameter; + ASN1_INTEGER *blockSize; + ASN1_INTEGER *parallelizationParameter; + ASN1_INTEGER *keyLength; +} SCRYPT_PARAMS; +#endif + +#ifdef __cplusplus +} +#endif + +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +# define X509_EXT_PACK_UNKNOWN 1 +# define X509_EXT_PACK_STRING 2 + +# define X509_extract_key(x) X509_get_pubkey(x)/*****/ +# define X509_REQ_extract_key(a) X509_REQ_get_pubkey(a) +# define X509_name_cmp(a,b) X509_NAME_cmp((a),(b)) + +void X509_CRL_set_default_method(const X509_CRL_METHOD *meth); +X509_CRL_METHOD *X509_CRL_METHOD_new(int (*crl_init) (X509_CRL *crl), + int (*crl_free) (X509_CRL *crl), + int (*crl_lookup) (X509_CRL *crl, + X509_REVOKED **ret, + ASN1_INTEGER *ser, + X509_NAME *issuer), + int (*crl_verify) (X509_CRL *crl, + EVP_PKEY *pk)); +void X509_CRL_METHOD_free(X509_CRL_METHOD *m); + +void X509_CRL_set_meth_data(X509_CRL *crl, void *dat); +void *X509_CRL_get_meth_data(X509_CRL *crl); + +const char *X509_verify_cert_error_string(long n); + +int X509_verify(X509 *a, EVP_PKEY *r); + +int X509_REQ_verify(X509_REQ *a, EVP_PKEY *r); +int X509_CRL_verify(X509_CRL *a, EVP_PKEY *r); +int NETSCAPE_SPKI_verify(NETSCAPE_SPKI *a, EVP_PKEY *r); + +NETSCAPE_SPKI *NETSCAPE_SPKI_b64_decode(const char *str, int len); +char *NETSCAPE_SPKI_b64_encode(NETSCAPE_SPKI *x); +EVP_PKEY *NETSCAPE_SPKI_get_pubkey(NETSCAPE_SPKI *x); +int NETSCAPE_SPKI_set_pubkey(NETSCAPE_SPKI *x, EVP_PKEY *pkey); + +int NETSCAPE_SPKI_print(BIO *out, NETSCAPE_SPKI *spki); + +int X509_signature_dump(BIO *bp, const ASN1_STRING *sig, int indent); +int X509_signature_print(BIO *bp, const X509_ALGOR *alg, + const ASN1_STRING *sig); + +int X509_sign(X509 *x, EVP_PKEY *pkey, const EVP_MD *md); +int X509_sign_ctx(X509 *x, EVP_MD_CTX *ctx); +# ifndef OPENSSL_NO_OCSP +int X509_http_nbio(OCSP_REQ_CTX *rctx, X509 **pcert); +# endif +int X509_REQ_sign(X509_REQ *x, EVP_PKEY *pkey, const EVP_MD *md); +int X509_REQ_sign_ctx(X509_REQ *x, EVP_MD_CTX *ctx); +int X509_CRL_sign(X509_CRL *x, EVP_PKEY *pkey, const EVP_MD *md); +int X509_CRL_sign_ctx(X509_CRL *x, EVP_MD_CTX *ctx); +# ifndef OPENSSL_NO_OCSP +int X509_CRL_http_nbio(OCSP_REQ_CTX *rctx, X509_CRL **pcrl); +# endif +int NETSCAPE_SPKI_sign(NETSCAPE_SPKI *x, EVP_PKEY *pkey, const EVP_MD *md); + +int X509_pubkey_digest(const X509 *data, const EVP_MD *type, + unsigned char *md, unsigned int *len); +int X509_digest(const X509 *data, const EVP_MD *type, + unsigned char *md, unsigned int *len); +int X509_CRL_digest(const X509_CRL *data, const EVP_MD *type, + unsigned char *md, unsigned int *len); +int X509_REQ_digest(const X509_REQ *data, const EVP_MD *type, + unsigned char *md, unsigned int *len); +int X509_NAME_digest(const X509_NAME *data, const EVP_MD *type, + unsigned char *md, unsigned int *len); + +# ifndef OPENSSL_NO_STDIO +X509 *d2i_X509_fp(FILE *fp, X509 **x509); +int i2d_X509_fp(FILE *fp, X509 *x509); +X509_CRL *d2i_X509_CRL_fp(FILE *fp, X509_CRL **crl); +int i2d_X509_CRL_fp(FILE *fp, X509_CRL *crl); +X509_REQ *d2i_X509_REQ_fp(FILE *fp, X509_REQ **req); +int i2d_X509_REQ_fp(FILE *fp, X509_REQ *req); +# ifndef OPENSSL_NO_RSA +RSA *d2i_RSAPrivateKey_fp(FILE *fp, RSA **rsa); +int i2d_RSAPrivateKey_fp(FILE *fp, RSA *rsa); +RSA *d2i_RSAPublicKey_fp(FILE *fp, RSA **rsa); +int i2d_RSAPublicKey_fp(FILE *fp, RSA *rsa); +RSA *d2i_RSA_PUBKEY_fp(FILE *fp, RSA **rsa); +int i2d_RSA_PUBKEY_fp(FILE *fp, RSA *rsa); +# endif +# ifndef OPENSSL_NO_DSA +DSA *d2i_DSA_PUBKEY_fp(FILE *fp, DSA **dsa); +int i2d_DSA_PUBKEY_fp(FILE *fp, DSA *dsa); +DSA *d2i_DSAPrivateKey_fp(FILE *fp, DSA **dsa); +int i2d_DSAPrivateKey_fp(FILE *fp, DSA *dsa); +# endif +# ifndef OPENSSL_NO_EC +EC_KEY *d2i_EC_PUBKEY_fp(FILE *fp, EC_KEY **eckey); +int i2d_EC_PUBKEY_fp(FILE *fp, EC_KEY *eckey); +EC_KEY *d2i_ECPrivateKey_fp(FILE *fp, EC_KEY **eckey); +int i2d_ECPrivateKey_fp(FILE *fp, EC_KEY *eckey); +# endif +X509_SIG *d2i_PKCS8_fp(FILE *fp, X509_SIG **p8); +int i2d_PKCS8_fp(FILE *fp, X509_SIG *p8); +PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_fp(FILE *fp, + PKCS8_PRIV_KEY_INFO **p8inf); +int i2d_PKCS8_PRIV_KEY_INFO_fp(FILE *fp, PKCS8_PRIV_KEY_INFO *p8inf); +int i2d_PKCS8PrivateKeyInfo_fp(FILE *fp, EVP_PKEY *key); +int i2d_PrivateKey_fp(FILE *fp, EVP_PKEY *pkey); +EVP_PKEY *d2i_PrivateKey_fp(FILE *fp, EVP_PKEY **a); +int i2d_PUBKEY_fp(FILE *fp, EVP_PKEY *pkey); +EVP_PKEY *d2i_PUBKEY_fp(FILE *fp, EVP_PKEY **a); +# endif + +X509 *d2i_X509_bio(BIO *bp, X509 **x509); +int i2d_X509_bio(BIO *bp, X509 *x509); +X509_CRL *d2i_X509_CRL_bio(BIO *bp, X509_CRL **crl); +int i2d_X509_CRL_bio(BIO *bp, X509_CRL *crl); +X509_REQ *d2i_X509_REQ_bio(BIO *bp, X509_REQ **req); +int i2d_X509_REQ_bio(BIO *bp, X509_REQ *req); +# ifndef OPENSSL_NO_RSA +RSA *d2i_RSAPrivateKey_bio(BIO *bp, RSA **rsa); +int i2d_RSAPrivateKey_bio(BIO *bp, RSA *rsa); +RSA *d2i_RSAPublicKey_bio(BIO *bp, RSA **rsa); +int i2d_RSAPublicKey_bio(BIO *bp, RSA *rsa); +RSA *d2i_RSA_PUBKEY_bio(BIO *bp, RSA **rsa); +int i2d_RSA_PUBKEY_bio(BIO *bp, RSA *rsa); +# endif +# ifndef OPENSSL_NO_DSA +DSA *d2i_DSA_PUBKEY_bio(BIO *bp, DSA **dsa); +int i2d_DSA_PUBKEY_bio(BIO *bp, DSA *dsa); +DSA *d2i_DSAPrivateKey_bio(BIO *bp, DSA **dsa); +int i2d_DSAPrivateKey_bio(BIO *bp, DSA *dsa); +# endif +# ifndef OPENSSL_NO_EC +EC_KEY *d2i_EC_PUBKEY_bio(BIO *bp, EC_KEY **eckey); +int i2d_EC_PUBKEY_bio(BIO *bp, EC_KEY *eckey); +EC_KEY *d2i_ECPrivateKey_bio(BIO *bp, EC_KEY **eckey); +int i2d_ECPrivateKey_bio(BIO *bp, EC_KEY *eckey); +# endif +X509_SIG *d2i_PKCS8_bio(BIO *bp, X509_SIG **p8); +int i2d_PKCS8_bio(BIO *bp, X509_SIG *p8); +PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, + PKCS8_PRIV_KEY_INFO **p8inf); +int i2d_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, PKCS8_PRIV_KEY_INFO *p8inf); +int i2d_PKCS8PrivateKeyInfo_bio(BIO *bp, EVP_PKEY *key); +int i2d_PrivateKey_bio(BIO *bp, EVP_PKEY *pkey); +EVP_PKEY *d2i_PrivateKey_bio(BIO *bp, EVP_PKEY **a); +int i2d_PUBKEY_bio(BIO *bp, EVP_PKEY *pkey); +EVP_PKEY *d2i_PUBKEY_bio(BIO *bp, EVP_PKEY **a); + +X509 *X509_dup(X509 *x509); +X509_ATTRIBUTE *X509_ATTRIBUTE_dup(X509_ATTRIBUTE *xa); +X509_EXTENSION *X509_EXTENSION_dup(X509_EXTENSION *ex); +X509_CRL *X509_CRL_dup(X509_CRL *crl); +X509_REVOKED *X509_REVOKED_dup(X509_REVOKED *rev); +X509_REQ *X509_REQ_dup(X509_REQ *req); +X509_ALGOR *X509_ALGOR_dup(X509_ALGOR *xn); +int X509_ALGOR_set0(X509_ALGOR *alg, ASN1_OBJECT *aobj, int ptype, + void *pval); +void X509_ALGOR_get0(const ASN1_OBJECT **paobj, int *pptype, + const void **ppval, const X509_ALGOR *algor); +void X509_ALGOR_set_md(X509_ALGOR *alg, const EVP_MD *md); +int X509_ALGOR_cmp(const X509_ALGOR *a, const X509_ALGOR *b); + +X509_NAME *X509_NAME_dup(X509_NAME *xn); +X509_NAME_ENTRY *X509_NAME_ENTRY_dup(X509_NAME_ENTRY *ne); + +int X509_cmp_time(const ASN1_TIME *s, time_t *t); +int X509_cmp_current_time(const ASN1_TIME *s); +ASN1_TIME *X509_time_adj(ASN1_TIME *s, long adj, time_t *t); +ASN1_TIME *X509_time_adj_ex(ASN1_TIME *s, + int offset_day, long offset_sec, time_t *t); +ASN1_TIME *X509_gmtime_adj(ASN1_TIME *s, long adj); + +const char *X509_get_default_cert_area(void); +const char *X509_get_default_cert_dir(void); +const char *X509_get_default_cert_file(void); +const char *X509_get_default_cert_dir_env(void); +const char *X509_get_default_cert_file_env(void); +const char *X509_get_default_private_dir(void); + +X509_REQ *X509_to_X509_REQ(X509 *x, EVP_PKEY *pkey, const EVP_MD *md); +X509 *X509_REQ_to_X509(X509_REQ *r, int days, EVP_PKEY *pkey); + +DECLARE_ASN1_FUNCTIONS(X509_ALGOR) +DECLARE_ASN1_ENCODE_FUNCTIONS(X509_ALGORS, X509_ALGORS, X509_ALGORS) +DECLARE_ASN1_FUNCTIONS(X509_VAL) + +DECLARE_ASN1_FUNCTIONS(X509_PUBKEY) + +int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey); +EVP_PKEY *X509_PUBKEY_get0(X509_PUBKEY *key); +EVP_PKEY *X509_PUBKEY_get(X509_PUBKEY *key); +int X509_get_pubkey_parameters(EVP_PKEY *pkey, STACK_OF(X509) *chain); +long X509_get_pathlen(X509 *x); +int i2d_PUBKEY(EVP_PKEY *a, unsigned char **pp); +EVP_PKEY *d2i_PUBKEY(EVP_PKEY **a, const unsigned char **pp, long length); +# ifndef OPENSSL_NO_RSA +int i2d_RSA_PUBKEY(RSA *a, unsigned char **pp); +RSA *d2i_RSA_PUBKEY(RSA **a, const unsigned char **pp, long length); +# endif +# ifndef OPENSSL_NO_DSA +int i2d_DSA_PUBKEY(DSA *a, unsigned char **pp); +DSA *d2i_DSA_PUBKEY(DSA **a, const unsigned char **pp, long length); +# endif +# ifndef OPENSSL_NO_EC +int i2d_EC_PUBKEY(EC_KEY *a, unsigned char **pp); +EC_KEY *d2i_EC_PUBKEY(EC_KEY **a, const unsigned char **pp, long length); +# endif + +DECLARE_ASN1_FUNCTIONS(X509_SIG) +void X509_SIG_get0(const X509_SIG *sig, const X509_ALGOR **palg, + const ASN1_OCTET_STRING **pdigest); +void X509_SIG_getm(X509_SIG *sig, X509_ALGOR **palg, + ASN1_OCTET_STRING **pdigest); + +DECLARE_ASN1_FUNCTIONS(X509_REQ_INFO) +DECLARE_ASN1_FUNCTIONS(X509_REQ) + +DECLARE_ASN1_FUNCTIONS(X509_ATTRIBUTE) +X509_ATTRIBUTE *X509_ATTRIBUTE_create(int nid, int atrtype, void *value); + +DECLARE_ASN1_FUNCTIONS(X509_EXTENSION) +DECLARE_ASN1_ENCODE_FUNCTIONS(X509_EXTENSIONS, X509_EXTENSIONS, X509_EXTENSIONS) + +DECLARE_ASN1_FUNCTIONS(X509_NAME_ENTRY) + +DECLARE_ASN1_FUNCTIONS(X509_NAME) + +int X509_NAME_set(X509_NAME **xn, X509_NAME *name); + +DECLARE_ASN1_FUNCTIONS(X509_CINF) + +DECLARE_ASN1_FUNCTIONS(X509) +DECLARE_ASN1_FUNCTIONS(X509_CERT_AUX) + +#define X509_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509, l, p, newf, dupf, freef) +int X509_set_ex_data(X509 *r, int idx, void *arg); +void *X509_get_ex_data(X509 *r, int idx); +int i2d_X509_AUX(X509 *a, unsigned char **pp); +X509 *d2i_X509_AUX(X509 **a, const unsigned char **pp, long length); + +int i2d_re_X509_tbs(X509 *x, unsigned char **pp); + +int X509_SIG_INFO_get(const X509_SIG_INFO *siginf, int *mdnid, int *pknid, + int *secbits, uint32_t *flags); +void X509_SIG_INFO_set(X509_SIG_INFO *siginf, int mdnid, int pknid, + int secbits, uint32_t flags); + +int X509_get_signature_info(X509 *x, int *mdnid, int *pknid, int *secbits, + uint32_t *flags); + +void X509_get0_signature(const ASN1_BIT_STRING **psig, + const X509_ALGOR **palg, const X509 *x); +int X509_get_signature_nid(const X509 *x); + +int X509_trusted(const X509 *x); +int X509_alias_set1(X509 *x, const unsigned char *name, int len); +int X509_keyid_set1(X509 *x, const unsigned char *id, int len); +unsigned char *X509_alias_get0(X509 *x, int *len); +unsigned char *X509_keyid_get0(X509 *x, int *len); +int (*X509_TRUST_set_default(int (*trust) (int, X509 *, int))) (int, X509 *, + int); +int X509_TRUST_set(int *t, int trust); +int X509_add1_trust_object(X509 *x, const ASN1_OBJECT *obj); +int X509_add1_reject_object(X509 *x, const ASN1_OBJECT *obj); +void X509_trust_clear(X509 *x); +void X509_reject_clear(X509 *x); + +STACK_OF(ASN1_OBJECT) *X509_get0_trust_objects(X509 *x); +STACK_OF(ASN1_OBJECT) *X509_get0_reject_objects(X509 *x); + +DECLARE_ASN1_FUNCTIONS(X509_REVOKED) +DECLARE_ASN1_FUNCTIONS(X509_CRL_INFO) +DECLARE_ASN1_FUNCTIONS(X509_CRL) + +int X509_CRL_add0_revoked(X509_CRL *crl, X509_REVOKED *rev); +int X509_CRL_get0_by_serial(X509_CRL *crl, + X509_REVOKED **ret, ASN1_INTEGER *serial); +int X509_CRL_get0_by_cert(X509_CRL *crl, X509_REVOKED **ret, X509 *x); + +X509_PKEY *X509_PKEY_new(void); +void X509_PKEY_free(X509_PKEY *a); + +DECLARE_ASN1_FUNCTIONS(NETSCAPE_SPKI) +DECLARE_ASN1_FUNCTIONS(NETSCAPE_SPKAC) +DECLARE_ASN1_FUNCTIONS(NETSCAPE_CERT_SEQUENCE) + +X509_INFO *X509_INFO_new(void); +void X509_INFO_free(X509_INFO *a); +char *X509_NAME_oneline(const X509_NAME *a, char *buf, int size); + +int ASN1_verify(i2d_of_void *i2d, X509_ALGOR *algor1, + ASN1_BIT_STRING *signature, char *data, EVP_PKEY *pkey); + +int ASN1_digest(i2d_of_void *i2d, const EVP_MD *type, char *data, + unsigned char *md, unsigned int *len); + +int ASN1_sign(i2d_of_void *i2d, X509_ALGOR *algor1, + X509_ALGOR *algor2, ASN1_BIT_STRING *signature, + char *data, EVP_PKEY *pkey, const EVP_MD *type); + +int ASN1_item_digest(const ASN1_ITEM *it, const EVP_MD *type, void *data, + unsigned char *md, unsigned int *len); + +int ASN1_item_verify(const ASN1_ITEM *it, X509_ALGOR *algor1, + ASN1_BIT_STRING *signature, void *data, EVP_PKEY *pkey); + +int ASN1_item_sign(const ASN1_ITEM *it, X509_ALGOR *algor1, + X509_ALGOR *algor2, ASN1_BIT_STRING *signature, void *data, + EVP_PKEY *pkey, const EVP_MD *type); +int ASN1_item_sign_ctx(const ASN1_ITEM *it, X509_ALGOR *algor1, + X509_ALGOR *algor2, ASN1_BIT_STRING *signature, + void *asn, EVP_MD_CTX *ctx); + +long X509_get_version(const X509 *x); +int X509_set_version(X509 *x, long version); +int X509_set_serialNumber(X509 *x, ASN1_INTEGER *serial); +ASN1_INTEGER *X509_get_serialNumber(X509 *x); +const ASN1_INTEGER *X509_get0_serialNumber(const X509 *x); +int X509_set_issuer_name(X509 *x, X509_NAME *name); +X509_NAME *X509_get_issuer_name(const X509 *a); +int X509_set_subject_name(X509 *x, X509_NAME *name); +X509_NAME *X509_get_subject_name(const X509 *a); +const ASN1_TIME * X509_get0_notBefore(const X509 *x); +ASN1_TIME *X509_getm_notBefore(const X509 *x); +int X509_set1_notBefore(X509 *x, const ASN1_TIME *tm); +const ASN1_TIME *X509_get0_notAfter(const X509 *x); +ASN1_TIME *X509_getm_notAfter(const X509 *x); +int X509_set1_notAfter(X509 *x, const ASN1_TIME *tm); +int X509_set_pubkey(X509 *x, EVP_PKEY *pkey); +int X509_up_ref(X509 *x); +int X509_get_signature_type(const X509 *x); + +# if OPENSSL_API_COMPAT < 0x10100000L +# define X509_get_notBefore X509_getm_notBefore +# define X509_get_notAfter X509_getm_notAfter +# define X509_set_notBefore X509_set1_notBefore +# define X509_set_notAfter X509_set1_notAfter +#endif + + +/* + * This one is only used so that a binary form can output, as in + * i2d_X509_PUBKEY(X509_get_X509_PUBKEY(x), &buf) + */ +X509_PUBKEY *X509_get_X509_PUBKEY(const X509 *x); +const STACK_OF(X509_EXTENSION) *X509_get0_extensions(const X509 *x); +void X509_get0_uids(const X509 *x, const ASN1_BIT_STRING **piuid, + const ASN1_BIT_STRING **psuid); +const X509_ALGOR *X509_get0_tbs_sigalg(const X509 *x); + +EVP_PKEY *X509_get0_pubkey(const X509 *x); +EVP_PKEY *X509_get_pubkey(X509 *x); +ASN1_BIT_STRING *X509_get0_pubkey_bitstr(const X509 *x); +int X509_certificate_type(const X509 *x, const EVP_PKEY *pubkey); + +long X509_REQ_get_version(const X509_REQ *req); +int X509_REQ_set_version(X509_REQ *x, long version); +X509_NAME *X509_REQ_get_subject_name(const X509_REQ *req); +int X509_REQ_set_subject_name(X509_REQ *req, X509_NAME *name); +void X509_REQ_get0_signature(const X509_REQ *req, const ASN1_BIT_STRING **psig, + const X509_ALGOR **palg); +int X509_REQ_get_signature_nid(const X509_REQ *req); +int i2d_re_X509_REQ_tbs(X509_REQ *req, unsigned char **pp); +int X509_REQ_set_pubkey(X509_REQ *x, EVP_PKEY *pkey); +EVP_PKEY *X509_REQ_get_pubkey(X509_REQ *req); +EVP_PKEY *X509_REQ_get0_pubkey(X509_REQ *req); +X509_PUBKEY *X509_REQ_get_X509_PUBKEY(X509_REQ *req); +int X509_REQ_extension_nid(int nid); +int *X509_REQ_get_extension_nids(void); +void X509_REQ_set_extension_nids(int *nids); +STACK_OF(X509_EXTENSION) *X509_REQ_get_extensions(X509_REQ *req); +int X509_REQ_add_extensions_nid(X509_REQ *req, STACK_OF(X509_EXTENSION) *exts, + int nid); +int X509_REQ_add_extensions(X509_REQ *req, STACK_OF(X509_EXTENSION) *exts); +int X509_REQ_get_attr_count(const X509_REQ *req); +int X509_REQ_get_attr_by_NID(const X509_REQ *req, int nid, int lastpos); +int X509_REQ_get_attr_by_OBJ(const X509_REQ *req, const ASN1_OBJECT *obj, + int lastpos); +X509_ATTRIBUTE *X509_REQ_get_attr(const X509_REQ *req, int loc); +X509_ATTRIBUTE *X509_REQ_delete_attr(X509_REQ *req, int loc); +int X509_REQ_add1_attr(X509_REQ *req, X509_ATTRIBUTE *attr); +int X509_REQ_add1_attr_by_OBJ(X509_REQ *req, + const ASN1_OBJECT *obj, int type, + const unsigned char *bytes, int len); +int X509_REQ_add1_attr_by_NID(X509_REQ *req, + int nid, int type, + const unsigned char *bytes, int len); +int X509_REQ_add1_attr_by_txt(X509_REQ *req, + const char *attrname, int type, + const unsigned char *bytes, int len); + +int X509_CRL_set_version(X509_CRL *x, long version); +int X509_CRL_set_issuer_name(X509_CRL *x, X509_NAME *name); +int X509_CRL_set1_lastUpdate(X509_CRL *x, const ASN1_TIME *tm); +int X509_CRL_set1_nextUpdate(X509_CRL *x, const ASN1_TIME *tm); +int X509_CRL_sort(X509_CRL *crl); +int X509_CRL_up_ref(X509_CRL *crl); + +# if OPENSSL_API_COMPAT < 0x10100000L +# define X509_CRL_set_lastUpdate X509_CRL_set1_lastUpdate +# define X509_CRL_set_nextUpdate X509_CRL_set1_nextUpdate +#endif + +long X509_CRL_get_version(const X509_CRL *crl); +const ASN1_TIME *X509_CRL_get0_lastUpdate(const X509_CRL *crl); +const ASN1_TIME *X509_CRL_get0_nextUpdate(const X509_CRL *crl); +DEPRECATEDIN_1_1_0(ASN1_TIME *X509_CRL_get_lastUpdate(X509_CRL *crl)) +DEPRECATEDIN_1_1_0(ASN1_TIME *X509_CRL_get_nextUpdate(X509_CRL *crl)) +X509_NAME *X509_CRL_get_issuer(const X509_CRL *crl); +const STACK_OF(X509_EXTENSION) *X509_CRL_get0_extensions(const X509_CRL *crl); +STACK_OF(X509_REVOKED) *X509_CRL_get_REVOKED(X509_CRL *crl); +void X509_CRL_get0_signature(const X509_CRL *crl, const ASN1_BIT_STRING **psig, + const X509_ALGOR **palg); +int X509_CRL_get_signature_nid(const X509_CRL *crl); +int i2d_re_X509_CRL_tbs(X509_CRL *req, unsigned char **pp); + +const ASN1_INTEGER *X509_REVOKED_get0_serialNumber(const X509_REVOKED *x); +int X509_REVOKED_set_serialNumber(X509_REVOKED *x, ASN1_INTEGER *serial); +const ASN1_TIME *X509_REVOKED_get0_revocationDate(const X509_REVOKED *x); +int X509_REVOKED_set_revocationDate(X509_REVOKED *r, ASN1_TIME *tm); +const STACK_OF(X509_EXTENSION) * +X509_REVOKED_get0_extensions(const X509_REVOKED *r); + +X509_CRL *X509_CRL_diff(X509_CRL *base, X509_CRL *newer, + EVP_PKEY *skey, const EVP_MD *md, unsigned int flags); + +int X509_REQ_check_private_key(X509_REQ *x509, EVP_PKEY *pkey); + +int X509_check_private_key(const X509 *x509, const EVP_PKEY *pkey); +int X509_chain_check_suiteb(int *perror_depth, + X509 *x, STACK_OF(X509) *chain, + unsigned long flags); +int X509_CRL_check_suiteb(X509_CRL *crl, EVP_PKEY *pk, unsigned long flags); +STACK_OF(X509) *X509_chain_up_ref(STACK_OF(X509) *chain); + +int X509_issuer_and_serial_cmp(const X509 *a, const X509 *b); +unsigned long X509_issuer_and_serial_hash(X509 *a); + +int X509_issuer_name_cmp(const X509 *a, const X509 *b); +unsigned long X509_issuer_name_hash(X509 *a); + +int X509_subject_name_cmp(const X509 *a, const X509 *b); +unsigned long X509_subject_name_hash(X509 *x); + +# ifndef OPENSSL_NO_MD5 +unsigned long X509_issuer_name_hash_old(X509 *a); +unsigned long X509_subject_name_hash_old(X509 *x); +# endif + +int X509_cmp(const X509 *a, const X509 *b); +int X509_NAME_cmp(const X509_NAME *a, const X509_NAME *b); +unsigned long X509_NAME_hash(X509_NAME *x); +unsigned long X509_NAME_hash_old(X509_NAME *x); + +int X509_CRL_cmp(const X509_CRL *a, const X509_CRL *b); +int X509_CRL_match(const X509_CRL *a, const X509_CRL *b); +int X509_aux_print(BIO *out, X509 *x, int indent); +# ifndef OPENSSL_NO_STDIO +int X509_print_ex_fp(FILE *bp, X509 *x, unsigned long nmflag, + unsigned long cflag); +int X509_print_fp(FILE *bp, X509 *x); +int X509_CRL_print_fp(FILE *bp, X509_CRL *x); +int X509_REQ_print_fp(FILE *bp, X509_REQ *req); +int X509_NAME_print_ex_fp(FILE *fp, const X509_NAME *nm, int indent, + unsigned long flags); +# endif + +int X509_NAME_print(BIO *bp, const X509_NAME *name, int obase); +int X509_NAME_print_ex(BIO *out, const X509_NAME *nm, int indent, + unsigned long flags); +int X509_print_ex(BIO *bp, X509 *x, unsigned long nmflag, + unsigned long cflag); +int X509_print(BIO *bp, X509 *x); +int X509_ocspid_print(BIO *bp, X509 *x); +int X509_CRL_print_ex(BIO *out, X509_CRL *x, unsigned long nmflag); +int X509_CRL_print(BIO *bp, X509_CRL *x); +int X509_REQ_print_ex(BIO *bp, X509_REQ *x, unsigned long nmflag, + unsigned long cflag); +int X509_REQ_print(BIO *bp, X509_REQ *req); + +int X509_NAME_entry_count(const X509_NAME *name); +int X509_NAME_get_text_by_NID(X509_NAME *name, int nid, char *buf, int len); +int X509_NAME_get_text_by_OBJ(X509_NAME *name, const ASN1_OBJECT *obj, + char *buf, int len); + +/* + * NOTE: you should be passing -1, not 0 as lastpos. The functions that use + * lastpos, search after that position on. + */ +int X509_NAME_get_index_by_NID(X509_NAME *name, int nid, int lastpos); +int X509_NAME_get_index_by_OBJ(X509_NAME *name, const ASN1_OBJECT *obj, + int lastpos); +X509_NAME_ENTRY *X509_NAME_get_entry(const X509_NAME *name, int loc); +X509_NAME_ENTRY *X509_NAME_delete_entry(X509_NAME *name, int loc); +int X509_NAME_add_entry(X509_NAME *name, const X509_NAME_ENTRY *ne, + int loc, int set); +int X509_NAME_add_entry_by_OBJ(X509_NAME *name, const ASN1_OBJECT *obj, int type, + const unsigned char *bytes, int len, int loc, + int set); +int X509_NAME_add_entry_by_NID(X509_NAME *name, int nid, int type, + const unsigned char *bytes, int len, int loc, + int set); +X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_txt(X509_NAME_ENTRY **ne, + const char *field, int type, + const unsigned char *bytes, + int len); +X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_NID(X509_NAME_ENTRY **ne, int nid, + int type, + const unsigned char *bytes, + int len); +int X509_NAME_add_entry_by_txt(X509_NAME *name, const char *field, int type, + const unsigned char *bytes, int len, int loc, + int set); +X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_OBJ(X509_NAME_ENTRY **ne, + const ASN1_OBJECT *obj, int type, + const unsigned char *bytes, + int len); +int X509_NAME_ENTRY_set_object(X509_NAME_ENTRY *ne, const ASN1_OBJECT *obj); +int X509_NAME_ENTRY_set_data(X509_NAME_ENTRY *ne, int type, + const unsigned char *bytes, int len); +ASN1_OBJECT *X509_NAME_ENTRY_get_object(const X509_NAME_ENTRY *ne); +ASN1_STRING * X509_NAME_ENTRY_get_data(const X509_NAME_ENTRY *ne); +int X509_NAME_ENTRY_set(const X509_NAME_ENTRY *ne); + +int X509_NAME_get0_der(X509_NAME *nm, const unsigned char **pder, + size_t *pderlen); + +int X509v3_get_ext_count(const STACK_OF(X509_EXTENSION) *x); +int X509v3_get_ext_by_NID(const STACK_OF(X509_EXTENSION) *x, + int nid, int lastpos); +int X509v3_get_ext_by_OBJ(const STACK_OF(X509_EXTENSION) *x, + const ASN1_OBJECT *obj, int lastpos); +int X509v3_get_ext_by_critical(const STACK_OF(X509_EXTENSION) *x, + int crit, int lastpos); +X509_EXTENSION *X509v3_get_ext(const STACK_OF(X509_EXTENSION) *x, int loc); +X509_EXTENSION *X509v3_delete_ext(STACK_OF(X509_EXTENSION) *x, int loc); +STACK_OF(X509_EXTENSION) *X509v3_add_ext(STACK_OF(X509_EXTENSION) **x, + X509_EXTENSION *ex, int loc); + +int X509_get_ext_count(const X509 *x); +int X509_get_ext_by_NID(const X509 *x, int nid, int lastpos); +int X509_get_ext_by_OBJ(const X509 *x, const ASN1_OBJECT *obj, int lastpos); +int X509_get_ext_by_critical(const X509 *x, int crit, int lastpos); +X509_EXTENSION *X509_get_ext(const X509 *x, int loc); +X509_EXTENSION *X509_delete_ext(X509 *x, int loc); +int X509_add_ext(X509 *x, X509_EXTENSION *ex, int loc); +void *X509_get_ext_d2i(const X509 *x, int nid, int *crit, int *idx); +int X509_add1_ext_i2d(X509 *x, int nid, void *value, int crit, + unsigned long flags); + +int X509_CRL_get_ext_count(const X509_CRL *x); +int X509_CRL_get_ext_by_NID(const X509_CRL *x, int nid, int lastpos); +int X509_CRL_get_ext_by_OBJ(const X509_CRL *x, const ASN1_OBJECT *obj, + int lastpos); +int X509_CRL_get_ext_by_critical(const X509_CRL *x, int crit, int lastpos); +X509_EXTENSION *X509_CRL_get_ext(const X509_CRL *x, int loc); +X509_EXTENSION *X509_CRL_delete_ext(X509_CRL *x, int loc); +int X509_CRL_add_ext(X509_CRL *x, X509_EXTENSION *ex, int loc); +void *X509_CRL_get_ext_d2i(const X509_CRL *x, int nid, int *crit, int *idx); +int X509_CRL_add1_ext_i2d(X509_CRL *x, int nid, void *value, int crit, + unsigned long flags); + +int X509_REVOKED_get_ext_count(const X509_REVOKED *x); +int X509_REVOKED_get_ext_by_NID(const X509_REVOKED *x, int nid, int lastpos); +int X509_REVOKED_get_ext_by_OBJ(const X509_REVOKED *x, const ASN1_OBJECT *obj, + int lastpos); +int X509_REVOKED_get_ext_by_critical(const X509_REVOKED *x, int crit, + int lastpos); +X509_EXTENSION *X509_REVOKED_get_ext(const X509_REVOKED *x, int loc); +X509_EXTENSION *X509_REVOKED_delete_ext(X509_REVOKED *x, int loc); +int X509_REVOKED_add_ext(X509_REVOKED *x, X509_EXTENSION *ex, int loc); +void *X509_REVOKED_get_ext_d2i(const X509_REVOKED *x, int nid, int *crit, + int *idx); +int X509_REVOKED_add1_ext_i2d(X509_REVOKED *x, int nid, void *value, int crit, + unsigned long flags); + +X509_EXTENSION *X509_EXTENSION_create_by_NID(X509_EXTENSION **ex, + int nid, int crit, + ASN1_OCTET_STRING *data); +X509_EXTENSION *X509_EXTENSION_create_by_OBJ(X509_EXTENSION **ex, + const ASN1_OBJECT *obj, int crit, + ASN1_OCTET_STRING *data); +int X509_EXTENSION_set_object(X509_EXTENSION *ex, const ASN1_OBJECT *obj); +int X509_EXTENSION_set_critical(X509_EXTENSION *ex, int crit); +int X509_EXTENSION_set_data(X509_EXTENSION *ex, ASN1_OCTET_STRING *data); +ASN1_OBJECT *X509_EXTENSION_get_object(X509_EXTENSION *ex); +ASN1_OCTET_STRING *X509_EXTENSION_get_data(X509_EXTENSION *ne); +int X509_EXTENSION_get_critical(const X509_EXTENSION *ex); + +int X509at_get_attr_count(const STACK_OF(X509_ATTRIBUTE) *x); +int X509at_get_attr_by_NID(const STACK_OF(X509_ATTRIBUTE) *x, int nid, + int lastpos); +int X509at_get_attr_by_OBJ(const STACK_OF(X509_ATTRIBUTE) *sk, + const ASN1_OBJECT *obj, int lastpos); +X509_ATTRIBUTE *X509at_get_attr(const STACK_OF(X509_ATTRIBUTE) *x, int loc); +X509_ATTRIBUTE *X509at_delete_attr(STACK_OF(X509_ATTRIBUTE) *x, int loc); +STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr(STACK_OF(X509_ATTRIBUTE) **x, + X509_ATTRIBUTE *attr); +STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_OBJ(STACK_OF(X509_ATTRIBUTE) + **x, const ASN1_OBJECT *obj, + int type, + const unsigned char *bytes, + int len); +STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_NID(STACK_OF(X509_ATTRIBUTE) + **x, int nid, int type, + const unsigned char *bytes, + int len); +STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_txt(STACK_OF(X509_ATTRIBUTE) + **x, const char *attrname, + int type, + const unsigned char *bytes, + int len); +void *X509at_get0_data_by_OBJ(STACK_OF(X509_ATTRIBUTE) *x, + const ASN1_OBJECT *obj, int lastpos, int type); +X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_NID(X509_ATTRIBUTE **attr, int nid, + int atrtype, const void *data, + int len); +X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_OBJ(X509_ATTRIBUTE **attr, + const ASN1_OBJECT *obj, + int atrtype, const void *data, + int len); +X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_txt(X509_ATTRIBUTE **attr, + const char *atrname, int type, + const unsigned char *bytes, + int len); +int X509_ATTRIBUTE_set1_object(X509_ATTRIBUTE *attr, const ASN1_OBJECT *obj); +int X509_ATTRIBUTE_set1_data(X509_ATTRIBUTE *attr, int attrtype, + const void *data, int len); +void *X509_ATTRIBUTE_get0_data(X509_ATTRIBUTE *attr, int idx, int atrtype, + void *data); +int X509_ATTRIBUTE_count(const X509_ATTRIBUTE *attr); +ASN1_OBJECT *X509_ATTRIBUTE_get0_object(X509_ATTRIBUTE *attr); +ASN1_TYPE *X509_ATTRIBUTE_get0_type(X509_ATTRIBUTE *attr, int idx); + +int EVP_PKEY_get_attr_count(const EVP_PKEY *key); +int EVP_PKEY_get_attr_by_NID(const EVP_PKEY *key, int nid, int lastpos); +int EVP_PKEY_get_attr_by_OBJ(const EVP_PKEY *key, const ASN1_OBJECT *obj, + int lastpos); +X509_ATTRIBUTE *EVP_PKEY_get_attr(const EVP_PKEY *key, int loc); +X509_ATTRIBUTE *EVP_PKEY_delete_attr(EVP_PKEY *key, int loc); +int EVP_PKEY_add1_attr(EVP_PKEY *key, X509_ATTRIBUTE *attr); +int EVP_PKEY_add1_attr_by_OBJ(EVP_PKEY *key, + const ASN1_OBJECT *obj, int type, + const unsigned char *bytes, int len); +int EVP_PKEY_add1_attr_by_NID(EVP_PKEY *key, + int nid, int type, + const unsigned char *bytes, int len); +int EVP_PKEY_add1_attr_by_txt(EVP_PKEY *key, + const char *attrname, int type, + const unsigned char *bytes, int len); + +int X509_verify_cert(X509_STORE_CTX *ctx); + +/* lookup a cert from a X509 STACK */ +X509 *X509_find_by_issuer_and_serial(STACK_OF(X509) *sk, X509_NAME *name, + ASN1_INTEGER *serial); +X509 *X509_find_by_subject(STACK_OF(X509) *sk, X509_NAME *name); + +DECLARE_ASN1_FUNCTIONS(PBEPARAM) +DECLARE_ASN1_FUNCTIONS(PBE2PARAM) +DECLARE_ASN1_FUNCTIONS(PBKDF2PARAM) +#ifndef OPENSSL_NO_SCRYPT +DECLARE_ASN1_FUNCTIONS(SCRYPT_PARAMS) +#endif + +int PKCS5_pbe_set0_algor(X509_ALGOR *algor, int alg, int iter, + const unsigned char *salt, int saltlen); + +X509_ALGOR *PKCS5_pbe_set(int alg, int iter, + const unsigned char *salt, int saltlen); +X509_ALGOR *PKCS5_pbe2_set(const EVP_CIPHER *cipher, int iter, + unsigned char *salt, int saltlen); +X509_ALGOR *PKCS5_pbe2_set_iv(const EVP_CIPHER *cipher, int iter, + unsigned char *salt, int saltlen, + unsigned char *aiv, int prf_nid); + +#ifndef OPENSSL_NO_SCRYPT +X509_ALGOR *PKCS5_pbe2_set_scrypt(const EVP_CIPHER *cipher, + const unsigned char *salt, int saltlen, + unsigned char *aiv, uint64_t N, uint64_t r, + uint64_t p); +#endif + +X509_ALGOR *PKCS5_pbkdf2_set(int iter, unsigned char *salt, int saltlen, + int prf_nid, int keylen); + +/* PKCS#8 utilities */ + +DECLARE_ASN1_FUNCTIONS(PKCS8_PRIV_KEY_INFO) + +EVP_PKEY *EVP_PKCS82PKEY(const PKCS8_PRIV_KEY_INFO *p8); +PKCS8_PRIV_KEY_INFO *EVP_PKEY2PKCS8(EVP_PKEY *pkey); + +int PKCS8_pkey_set0(PKCS8_PRIV_KEY_INFO *priv, ASN1_OBJECT *aobj, + int version, int ptype, void *pval, + unsigned char *penc, int penclen); +int PKCS8_pkey_get0(const ASN1_OBJECT **ppkalg, + const unsigned char **pk, int *ppklen, + const X509_ALGOR **pa, const PKCS8_PRIV_KEY_INFO *p8); + +const STACK_OF(X509_ATTRIBUTE) * +PKCS8_pkey_get0_attrs(const PKCS8_PRIV_KEY_INFO *p8); +int PKCS8_pkey_add1_attr_by_NID(PKCS8_PRIV_KEY_INFO *p8, int nid, int type, + const unsigned char *bytes, int len); + +int X509_PUBKEY_set0_param(X509_PUBKEY *pub, ASN1_OBJECT *aobj, + int ptype, void *pval, + unsigned char *penc, int penclen); +int X509_PUBKEY_get0_param(ASN1_OBJECT **ppkalg, + const unsigned char **pk, int *ppklen, + X509_ALGOR **pa, X509_PUBKEY *pub); + +int X509_check_trust(X509 *x, int id, int flags); +int X509_TRUST_get_count(void); +X509_TRUST *X509_TRUST_get0(int idx); +int X509_TRUST_get_by_id(int id); +int X509_TRUST_add(int id, int flags, int (*ck) (X509_TRUST *, X509 *, int), + const char *name, int arg1, void *arg2); +void X509_TRUST_cleanup(void); +int X509_TRUST_get_flags(const X509_TRUST *xp); +char *X509_TRUST_get0_name(const X509_TRUST *xp); +int X509_TRUST_get_trust(const X509_TRUST *xp); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509_vfy.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509_vfy.h new file mode 100644 index 00000000..adb8bce7 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509_vfy.h @@ -0,0 +1,628 @@ +/* + * Copyright 1995-2019 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_X509_VFY_H +# define HEADER_X509_VFY_H + +/* + * Protect against recursion, x509.h and x509_vfy.h each include the other. + */ +# ifndef HEADER_X509_H +# include +# endif + +# include +# include +# include +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +/*- +SSL_CTX -> X509_STORE + -> X509_LOOKUP + ->X509_LOOKUP_METHOD + -> X509_LOOKUP + ->X509_LOOKUP_METHOD + +SSL -> X509_STORE_CTX + ->X509_STORE + +The X509_STORE holds the tables etc for verification stuff. +A X509_STORE_CTX is used while validating a single certificate. +The X509_STORE has X509_LOOKUPs for looking up certs. +The X509_STORE then calls a function to actually verify the +certificate chain. +*/ + +typedef enum { + X509_LU_NONE = 0, + X509_LU_X509, X509_LU_CRL +} X509_LOOKUP_TYPE; + +#if OPENSSL_API_COMPAT < 0x10100000L +#define X509_LU_RETRY -1 +#define X509_LU_FAIL 0 +#endif + +DEFINE_STACK_OF(X509_LOOKUP) +DEFINE_STACK_OF(X509_OBJECT) +DEFINE_STACK_OF(X509_VERIFY_PARAM) + +int X509_STORE_set_depth(X509_STORE *store, int depth); + +typedef int (*X509_STORE_CTX_verify_cb)(int, X509_STORE_CTX *); +typedef int (*X509_STORE_CTX_verify_fn)(X509_STORE_CTX *); +typedef int (*X509_STORE_CTX_get_issuer_fn)(X509 **issuer, + X509_STORE_CTX *ctx, X509 *x); +typedef int (*X509_STORE_CTX_check_issued_fn)(X509_STORE_CTX *ctx, + X509 *x, X509 *issuer); +typedef int (*X509_STORE_CTX_check_revocation_fn)(X509_STORE_CTX *ctx); +typedef int (*X509_STORE_CTX_get_crl_fn)(X509_STORE_CTX *ctx, + X509_CRL **crl, X509 *x); +typedef int (*X509_STORE_CTX_check_crl_fn)(X509_STORE_CTX *ctx, X509_CRL *crl); +typedef int (*X509_STORE_CTX_cert_crl_fn)(X509_STORE_CTX *ctx, + X509_CRL *crl, X509 *x); +typedef int (*X509_STORE_CTX_check_policy_fn)(X509_STORE_CTX *ctx); +typedef STACK_OF(X509) *(*X509_STORE_CTX_lookup_certs_fn)(X509_STORE_CTX *ctx, + X509_NAME *nm); +typedef STACK_OF(X509_CRL) *(*X509_STORE_CTX_lookup_crls_fn)(X509_STORE_CTX *ctx, + X509_NAME *nm); +typedef int (*X509_STORE_CTX_cleanup_fn)(X509_STORE_CTX *ctx); + + +void X509_STORE_CTX_set_depth(X509_STORE_CTX *ctx, int depth); + +# define X509_STORE_CTX_set_app_data(ctx,data) \ + X509_STORE_CTX_set_ex_data(ctx,0,data) +# define X509_STORE_CTX_get_app_data(ctx) \ + X509_STORE_CTX_get_ex_data(ctx,0) + +# define X509_L_FILE_LOAD 1 +# define X509_L_ADD_DIR 2 + +# define X509_LOOKUP_load_file(x,name,type) \ + X509_LOOKUP_ctrl((x),X509_L_FILE_LOAD,(name),(long)(type),NULL) + +# define X509_LOOKUP_add_dir(x,name,type) \ + X509_LOOKUP_ctrl((x),X509_L_ADD_DIR,(name),(long)(type),NULL) + +# define X509_V_OK 0 +# define X509_V_ERR_UNSPECIFIED 1 +# define X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT 2 +# define X509_V_ERR_UNABLE_TO_GET_CRL 3 +# define X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE 4 +# define X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE 5 +# define X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY 6 +# define X509_V_ERR_CERT_SIGNATURE_FAILURE 7 +# define X509_V_ERR_CRL_SIGNATURE_FAILURE 8 +# define X509_V_ERR_CERT_NOT_YET_VALID 9 +# define X509_V_ERR_CERT_HAS_EXPIRED 10 +# define X509_V_ERR_CRL_NOT_YET_VALID 11 +# define X509_V_ERR_CRL_HAS_EXPIRED 12 +# define X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD 13 +# define X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD 14 +# define X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD 15 +# define X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD 16 +# define X509_V_ERR_OUT_OF_MEM 17 +# define X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT 18 +# define X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN 19 +# define X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY 20 +# define X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE 21 +# define X509_V_ERR_CERT_CHAIN_TOO_LONG 22 +# define X509_V_ERR_CERT_REVOKED 23 +# define X509_V_ERR_INVALID_CA 24 +# define X509_V_ERR_PATH_LENGTH_EXCEEDED 25 +# define X509_V_ERR_INVALID_PURPOSE 26 +# define X509_V_ERR_CERT_UNTRUSTED 27 +# define X509_V_ERR_CERT_REJECTED 28 +/* These are 'informational' when looking for issuer cert */ +# define X509_V_ERR_SUBJECT_ISSUER_MISMATCH 29 +# define X509_V_ERR_AKID_SKID_MISMATCH 30 +# define X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH 31 +# define X509_V_ERR_KEYUSAGE_NO_CERTSIGN 32 +# define X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER 33 +# define X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION 34 +# define X509_V_ERR_KEYUSAGE_NO_CRL_SIGN 35 +# define X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION 36 +# define X509_V_ERR_INVALID_NON_CA 37 +# define X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED 38 +# define X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE 39 +# define X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED 40 +# define X509_V_ERR_INVALID_EXTENSION 41 +# define X509_V_ERR_INVALID_POLICY_EXTENSION 42 +# define X509_V_ERR_NO_EXPLICIT_POLICY 43 +# define X509_V_ERR_DIFFERENT_CRL_SCOPE 44 +# define X509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE 45 +# define X509_V_ERR_UNNESTED_RESOURCE 46 +# define X509_V_ERR_PERMITTED_VIOLATION 47 +# define X509_V_ERR_EXCLUDED_VIOLATION 48 +# define X509_V_ERR_SUBTREE_MINMAX 49 +/* The application is not happy */ +# define X509_V_ERR_APPLICATION_VERIFICATION 50 +# define X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE 51 +# define X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX 52 +# define X509_V_ERR_UNSUPPORTED_NAME_SYNTAX 53 +# define X509_V_ERR_CRL_PATH_VALIDATION_ERROR 54 +/* Another issuer check debug option */ +# define X509_V_ERR_PATH_LOOP 55 +/* Suite B mode algorithm violation */ +# define X509_V_ERR_SUITE_B_INVALID_VERSION 56 +# define X509_V_ERR_SUITE_B_INVALID_ALGORITHM 57 +# define X509_V_ERR_SUITE_B_INVALID_CURVE 58 +# define X509_V_ERR_SUITE_B_INVALID_SIGNATURE_ALGORITHM 59 +# define X509_V_ERR_SUITE_B_LOS_NOT_ALLOWED 60 +# define X509_V_ERR_SUITE_B_CANNOT_SIGN_P_384_WITH_P_256 61 +/* Host, email and IP check errors */ +# define X509_V_ERR_HOSTNAME_MISMATCH 62 +# define X509_V_ERR_EMAIL_MISMATCH 63 +# define X509_V_ERR_IP_ADDRESS_MISMATCH 64 +/* DANE TLSA errors */ +# define X509_V_ERR_DANE_NO_MATCH 65 +/* security level errors */ +# define X509_V_ERR_EE_KEY_TOO_SMALL 66 +# define X509_V_ERR_CA_KEY_TOO_SMALL 67 +# define X509_V_ERR_CA_MD_TOO_WEAK 68 +/* Caller error */ +# define X509_V_ERR_INVALID_CALL 69 +/* Issuer lookup error */ +# define X509_V_ERR_STORE_LOOKUP 70 +/* Certificate transparency */ +# define X509_V_ERR_NO_VALID_SCTS 71 + +# define X509_V_ERR_PROXY_SUBJECT_NAME_VIOLATION 72 +/* OCSP status errors */ +# define X509_V_ERR_OCSP_VERIFY_NEEDED 73 /* Need OCSP verification */ +# define X509_V_ERR_OCSP_VERIFY_FAILED 74 /* Couldn't verify cert through OCSP */ +# define X509_V_ERR_OCSP_CERT_UNKNOWN 75 /* Certificate wasn't recognized by the OCSP responder */ + +/* Certificate verify flags */ + +# if OPENSSL_API_COMPAT < 0x10100000L +# define X509_V_FLAG_CB_ISSUER_CHECK 0x0 /* Deprecated */ +# endif +/* Use check time instead of current time */ +# define X509_V_FLAG_USE_CHECK_TIME 0x2 +/* Lookup CRLs */ +# define X509_V_FLAG_CRL_CHECK 0x4 +/* Lookup CRLs for whole chain */ +# define X509_V_FLAG_CRL_CHECK_ALL 0x8 +/* Ignore unhandled critical extensions */ +# define X509_V_FLAG_IGNORE_CRITICAL 0x10 +/* Disable workarounds for broken certificates */ +# define X509_V_FLAG_X509_STRICT 0x20 +/* Enable proxy certificate validation */ +# define X509_V_FLAG_ALLOW_PROXY_CERTS 0x40 +/* Enable policy checking */ +# define X509_V_FLAG_POLICY_CHECK 0x80 +/* Policy variable require-explicit-policy */ +# define X509_V_FLAG_EXPLICIT_POLICY 0x100 +/* Policy variable inhibit-any-policy */ +# define X509_V_FLAG_INHIBIT_ANY 0x200 +/* Policy variable inhibit-policy-mapping */ +# define X509_V_FLAG_INHIBIT_MAP 0x400 +/* Notify callback that policy is OK */ +# define X509_V_FLAG_NOTIFY_POLICY 0x800 +/* Extended CRL features such as indirect CRLs, alternate CRL signing keys */ +# define X509_V_FLAG_EXTENDED_CRL_SUPPORT 0x1000 +/* Delta CRL support */ +# define X509_V_FLAG_USE_DELTAS 0x2000 +/* Check self-signed CA signature */ +# define X509_V_FLAG_CHECK_SS_SIGNATURE 0x4000 +/* Use trusted store first */ +# define X509_V_FLAG_TRUSTED_FIRST 0x8000 +/* Suite B 128 bit only mode: not normally used */ +# define X509_V_FLAG_SUITEB_128_LOS_ONLY 0x10000 +/* Suite B 192 bit only mode */ +# define X509_V_FLAG_SUITEB_192_LOS 0x20000 +/* Suite B 128 bit mode allowing 192 bit algorithms */ +# define X509_V_FLAG_SUITEB_128_LOS 0x30000 +/* Allow partial chains if at least one certificate is in trusted store */ +# define X509_V_FLAG_PARTIAL_CHAIN 0x80000 +/* + * If the initial chain is not trusted, do not attempt to build an alternative + * chain. Alternate chain checking was introduced in 1.1.0. Setting this flag + * will force the behaviour to match that of previous versions. + */ +# define X509_V_FLAG_NO_ALT_CHAINS 0x100000 +/* Do not check certificate/CRL validity against current time */ +# define X509_V_FLAG_NO_CHECK_TIME 0x200000 + +# define X509_VP_FLAG_DEFAULT 0x1 +# define X509_VP_FLAG_OVERWRITE 0x2 +# define X509_VP_FLAG_RESET_FLAGS 0x4 +# define X509_VP_FLAG_LOCKED 0x8 +# define X509_VP_FLAG_ONCE 0x10 + +/* Internal use: mask of policy related options */ +# define X509_V_FLAG_POLICY_MASK (X509_V_FLAG_POLICY_CHECK \ + | X509_V_FLAG_EXPLICIT_POLICY \ + | X509_V_FLAG_INHIBIT_ANY \ + | X509_V_FLAG_INHIBIT_MAP) + +int X509_OBJECT_idx_by_subject(STACK_OF(X509_OBJECT) *h, X509_LOOKUP_TYPE type, + X509_NAME *name); +X509_OBJECT *X509_OBJECT_retrieve_by_subject(STACK_OF(X509_OBJECT) *h, + X509_LOOKUP_TYPE type, + X509_NAME *name); +X509_OBJECT *X509_OBJECT_retrieve_match(STACK_OF(X509_OBJECT) *h, + X509_OBJECT *x); +int X509_OBJECT_up_ref_count(X509_OBJECT *a); +X509_OBJECT *X509_OBJECT_new(void); +void X509_OBJECT_free(X509_OBJECT *a); +X509_LOOKUP_TYPE X509_OBJECT_get_type(const X509_OBJECT *a); +X509 *X509_OBJECT_get0_X509(const X509_OBJECT *a); +int X509_OBJECT_set1_X509(X509_OBJECT *a, X509 *obj); +X509_CRL *X509_OBJECT_get0_X509_CRL(X509_OBJECT *a); +int X509_OBJECT_set1_X509_CRL(X509_OBJECT *a, X509_CRL *obj); +X509_STORE *X509_STORE_new(void); +void X509_STORE_free(X509_STORE *v); +int X509_STORE_lock(X509_STORE *ctx); +int X509_STORE_unlock(X509_STORE *ctx); +int X509_STORE_up_ref(X509_STORE *v); +STACK_OF(X509_OBJECT) *X509_STORE_get0_objects(X509_STORE *v); + +STACK_OF(X509) *X509_STORE_CTX_get1_certs(X509_STORE_CTX *st, X509_NAME *nm); +STACK_OF(X509_CRL) *X509_STORE_CTX_get1_crls(X509_STORE_CTX *st, X509_NAME *nm); +int X509_STORE_set_flags(X509_STORE *ctx, unsigned long flags); +int X509_STORE_set_purpose(X509_STORE *ctx, int purpose); +int X509_STORE_set_trust(X509_STORE *ctx, int trust); +int X509_STORE_set1_param(X509_STORE *ctx, X509_VERIFY_PARAM *pm); +X509_VERIFY_PARAM *X509_STORE_get0_param(X509_STORE *ctx); + +void X509_STORE_set_verify(X509_STORE *ctx, X509_STORE_CTX_verify_fn verify); +#define X509_STORE_set_verify_func(ctx, func) \ + X509_STORE_set_verify((ctx),(func)) +void X509_STORE_CTX_set_verify(X509_STORE_CTX *ctx, + X509_STORE_CTX_verify_fn verify); +X509_STORE_CTX_verify_fn X509_STORE_get_verify(X509_STORE *ctx); +void X509_STORE_set_verify_cb(X509_STORE *ctx, + X509_STORE_CTX_verify_cb verify_cb); +# define X509_STORE_set_verify_cb_func(ctx,func) \ + X509_STORE_set_verify_cb((ctx),(func)) +X509_STORE_CTX_verify_cb X509_STORE_get_verify_cb(X509_STORE *ctx); +void X509_STORE_set_get_issuer(X509_STORE *ctx, + X509_STORE_CTX_get_issuer_fn get_issuer); +X509_STORE_CTX_get_issuer_fn X509_STORE_get_get_issuer(X509_STORE *ctx); +void X509_STORE_set_check_issued(X509_STORE *ctx, + X509_STORE_CTX_check_issued_fn check_issued); +X509_STORE_CTX_check_issued_fn X509_STORE_get_check_issued(X509_STORE *ctx); +void X509_STORE_set_check_revocation(X509_STORE *ctx, + X509_STORE_CTX_check_revocation_fn check_revocation); +X509_STORE_CTX_check_revocation_fn X509_STORE_get_check_revocation(X509_STORE *ctx); +void X509_STORE_set_get_crl(X509_STORE *ctx, + X509_STORE_CTX_get_crl_fn get_crl); +X509_STORE_CTX_get_crl_fn X509_STORE_get_get_crl(X509_STORE *ctx); +void X509_STORE_set_check_crl(X509_STORE *ctx, + X509_STORE_CTX_check_crl_fn check_crl); +X509_STORE_CTX_check_crl_fn X509_STORE_get_check_crl(X509_STORE *ctx); +void X509_STORE_set_cert_crl(X509_STORE *ctx, + X509_STORE_CTX_cert_crl_fn cert_crl); +X509_STORE_CTX_cert_crl_fn X509_STORE_get_cert_crl(X509_STORE *ctx); +void X509_STORE_set_check_policy(X509_STORE *ctx, + X509_STORE_CTX_check_policy_fn check_policy); +X509_STORE_CTX_check_policy_fn X509_STORE_get_check_policy(X509_STORE *ctx); +void X509_STORE_set_lookup_certs(X509_STORE *ctx, + X509_STORE_CTX_lookup_certs_fn lookup_certs); +X509_STORE_CTX_lookup_certs_fn X509_STORE_get_lookup_certs(X509_STORE *ctx); +void X509_STORE_set_lookup_crls(X509_STORE *ctx, + X509_STORE_CTX_lookup_crls_fn lookup_crls); +#define X509_STORE_set_lookup_crls_cb(ctx, func) \ + X509_STORE_set_lookup_crls((ctx), (func)) +X509_STORE_CTX_lookup_crls_fn X509_STORE_get_lookup_crls(X509_STORE *ctx); +void X509_STORE_set_cleanup(X509_STORE *ctx, + X509_STORE_CTX_cleanup_fn cleanup); +X509_STORE_CTX_cleanup_fn X509_STORE_get_cleanup(X509_STORE *ctx); + +#define X509_STORE_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509_STORE, l, p, newf, dupf, freef) +int X509_STORE_set_ex_data(X509_STORE *ctx, int idx, void *data); +void *X509_STORE_get_ex_data(X509_STORE *ctx, int idx); + +X509_STORE_CTX *X509_STORE_CTX_new(void); + +int X509_STORE_CTX_get1_issuer(X509 **issuer, X509_STORE_CTX *ctx, X509 *x); + +void X509_STORE_CTX_free(X509_STORE_CTX *ctx); +int X509_STORE_CTX_init(X509_STORE_CTX *ctx, X509_STORE *store, + X509 *x509, STACK_OF(X509) *chain); +void X509_STORE_CTX_set0_trusted_stack(X509_STORE_CTX *ctx, STACK_OF(X509) *sk); +void X509_STORE_CTX_cleanup(X509_STORE_CTX *ctx); + +X509_STORE *X509_STORE_CTX_get0_store(X509_STORE_CTX *ctx); +X509 *X509_STORE_CTX_get0_cert(X509_STORE_CTX *ctx); +STACK_OF(X509)* X509_STORE_CTX_get0_untrusted(X509_STORE_CTX *ctx); +void X509_STORE_CTX_set0_untrusted(X509_STORE_CTX *ctx, STACK_OF(X509) *sk); +void X509_STORE_CTX_set_verify_cb(X509_STORE_CTX *ctx, + X509_STORE_CTX_verify_cb verify); +X509_STORE_CTX_verify_cb X509_STORE_CTX_get_verify_cb(X509_STORE_CTX *ctx); +X509_STORE_CTX_verify_fn X509_STORE_CTX_get_verify(X509_STORE_CTX *ctx); +X509_STORE_CTX_get_issuer_fn X509_STORE_CTX_get_get_issuer(X509_STORE_CTX *ctx); +X509_STORE_CTX_check_issued_fn X509_STORE_CTX_get_check_issued(X509_STORE_CTX *ctx); +X509_STORE_CTX_check_revocation_fn X509_STORE_CTX_get_check_revocation(X509_STORE_CTX *ctx); +X509_STORE_CTX_get_crl_fn X509_STORE_CTX_get_get_crl(X509_STORE_CTX *ctx); +X509_STORE_CTX_check_crl_fn X509_STORE_CTX_get_check_crl(X509_STORE_CTX *ctx); +X509_STORE_CTX_cert_crl_fn X509_STORE_CTX_get_cert_crl(X509_STORE_CTX *ctx); +X509_STORE_CTX_check_policy_fn X509_STORE_CTX_get_check_policy(X509_STORE_CTX *ctx); +X509_STORE_CTX_lookup_certs_fn X509_STORE_CTX_get_lookup_certs(X509_STORE_CTX *ctx); +X509_STORE_CTX_lookup_crls_fn X509_STORE_CTX_get_lookup_crls(X509_STORE_CTX *ctx); +X509_STORE_CTX_cleanup_fn X509_STORE_CTX_get_cleanup(X509_STORE_CTX *ctx); + +#if OPENSSL_API_COMPAT < 0x10100000L +# define X509_STORE_CTX_get_chain X509_STORE_CTX_get0_chain +# define X509_STORE_CTX_set_chain X509_STORE_CTX_set0_untrusted +# define X509_STORE_CTX_trusted_stack X509_STORE_CTX_set0_trusted_stack +# define X509_STORE_get_by_subject X509_STORE_CTX_get_by_subject +# define X509_STORE_get1_certs X509_STORE_CTX_get1_certs +# define X509_STORE_get1_crls X509_STORE_CTX_get1_crls +/* the following macro is misspelled; use X509_STORE_get1_certs instead */ +# define X509_STORE_get1_cert X509_STORE_CTX_get1_certs +/* the following macro is misspelled; use X509_STORE_get1_crls instead */ +# define X509_STORE_get1_crl X509_STORE_CTX_get1_crls +#endif + +X509_LOOKUP *X509_STORE_add_lookup(X509_STORE *v, X509_LOOKUP_METHOD *m); +X509_LOOKUP_METHOD *X509_LOOKUP_hash_dir(void); +X509_LOOKUP_METHOD *X509_LOOKUP_file(void); + +typedef int (*X509_LOOKUP_ctrl_fn)(X509_LOOKUP *ctx, int cmd, const char *argc, + long argl, char **ret); +typedef int (*X509_LOOKUP_get_by_subject_fn)(X509_LOOKUP *ctx, + X509_LOOKUP_TYPE type, + X509_NAME *name, + X509_OBJECT *ret); +typedef int (*X509_LOOKUP_get_by_issuer_serial_fn)(X509_LOOKUP *ctx, + X509_LOOKUP_TYPE type, + X509_NAME *name, + ASN1_INTEGER *serial, + X509_OBJECT *ret); +typedef int (*X509_LOOKUP_get_by_fingerprint_fn)(X509_LOOKUP *ctx, + X509_LOOKUP_TYPE type, + const unsigned char* bytes, + int len, + X509_OBJECT *ret); +typedef int (*X509_LOOKUP_get_by_alias_fn)(X509_LOOKUP *ctx, + X509_LOOKUP_TYPE type, + const char *str, + int len, + X509_OBJECT *ret); + +X509_LOOKUP_METHOD *X509_LOOKUP_meth_new(const char *name); +void X509_LOOKUP_meth_free(X509_LOOKUP_METHOD *method); + +int X509_LOOKUP_meth_set_new_item(X509_LOOKUP_METHOD *method, + int (*new_item) (X509_LOOKUP *ctx)); +int (*X509_LOOKUP_meth_get_new_item(const X509_LOOKUP_METHOD* method)) + (X509_LOOKUP *ctx); + +int X509_LOOKUP_meth_set_free(X509_LOOKUP_METHOD *method, + void (*free_fn) (X509_LOOKUP *ctx)); +void (*X509_LOOKUP_meth_get_free(const X509_LOOKUP_METHOD* method)) + (X509_LOOKUP *ctx); + +int X509_LOOKUP_meth_set_init(X509_LOOKUP_METHOD *method, + int (*init) (X509_LOOKUP *ctx)); +int (*X509_LOOKUP_meth_get_init(const X509_LOOKUP_METHOD* method)) + (X509_LOOKUP *ctx); + +int X509_LOOKUP_meth_set_shutdown(X509_LOOKUP_METHOD *method, + int (*shutdown) (X509_LOOKUP *ctx)); +int (*X509_LOOKUP_meth_get_shutdown(const X509_LOOKUP_METHOD* method)) + (X509_LOOKUP *ctx); + +int X509_LOOKUP_meth_set_ctrl(X509_LOOKUP_METHOD *method, + X509_LOOKUP_ctrl_fn ctrl_fn); +X509_LOOKUP_ctrl_fn X509_LOOKUP_meth_get_ctrl(const X509_LOOKUP_METHOD *method); + +int X509_LOOKUP_meth_set_get_by_subject(X509_LOOKUP_METHOD *method, + X509_LOOKUP_get_by_subject_fn fn); +X509_LOOKUP_get_by_subject_fn X509_LOOKUP_meth_get_get_by_subject( + const X509_LOOKUP_METHOD *method); + +int X509_LOOKUP_meth_set_get_by_issuer_serial(X509_LOOKUP_METHOD *method, + X509_LOOKUP_get_by_issuer_serial_fn fn); +X509_LOOKUP_get_by_issuer_serial_fn X509_LOOKUP_meth_get_get_by_issuer_serial( + const X509_LOOKUP_METHOD *method); + +int X509_LOOKUP_meth_set_get_by_fingerprint(X509_LOOKUP_METHOD *method, + X509_LOOKUP_get_by_fingerprint_fn fn); +X509_LOOKUP_get_by_fingerprint_fn X509_LOOKUP_meth_get_get_by_fingerprint( + const X509_LOOKUP_METHOD *method); + +int X509_LOOKUP_meth_set_get_by_alias(X509_LOOKUP_METHOD *method, + X509_LOOKUP_get_by_alias_fn fn); +X509_LOOKUP_get_by_alias_fn X509_LOOKUP_meth_get_get_by_alias( + const X509_LOOKUP_METHOD *method); + + +int X509_STORE_add_cert(X509_STORE *ctx, X509 *x); +int X509_STORE_add_crl(X509_STORE *ctx, X509_CRL *x); + +int X509_STORE_CTX_get_by_subject(X509_STORE_CTX *vs, X509_LOOKUP_TYPE type, + X509_NAME *name, X509_OBJECT *ret); +X509_OBJECT *X509_STORE_CTX_get_obj_by_subject(X509_STORE_CTX *vs, + X509_LOOKUP_TYPE type, + X509_NAME *name); + +int X509_LOOKUP_ctrl(X509_LOOKUP *ctx, int cmd, const char *argc, + long argl, char **ret); + +int X509_load_cert_file(X509_LOOKUP *ctx, const char *file, int type); +int X509_load_crl_file(X509_LOOKUP *ctx, const char *file, int type); +int X509_load_cert_crl_file(X509_LOOKUP *ctx, const char *file, int type); + +X509_LOOKUP *X509_LOOKUP_new(X509_LOOKUP_METHOD *method); +void X509_LOOKUP_free(X509_LOOKUP *ctx); +int X509_LOOKUP_init(X509_LOOKUP *ctx); +int X509_LOOKUP_by_subject(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, + X509_NAME *name, X509_OBJECT *ret); +int X509_LOOKUP_by_issuer_serial(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, + X509_NAME *name, ASN1_INTEGER *serial, + X509_OBJECT *ret); +int X509_LOOKUP_by_fingerprint(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, + const unsigned char *bytes, int len, + X509_OBJECT *ret); +int X509_LOOKUP_by_alias(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, + const char *str, int len, X509_OBJECT *ret); +int X509_LOOKUP_set_method_data(X509_LOOKUP *ctx, void *data); +void *X509_LOOKUP_get_method_data(const X509_LOOKUP *ctx); +X509_STORE *X509_LOOKUP_get_store(const X509_LOOKUP *ctx); +int X509_LOOKUP_shutdown(X509_LOOKUP *ctx); + +int X509_STORE_load_locations(X509_STORE *ctx, + const char *file, const char *dir); +int X509_STORE_set_default_paths(X509_STORE *ctx); + +#define X509_STORE_CTX_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509_STORE_CTX, l, p, newf, dupf, freef) +int X509_STORE_CTX_set_ex_data(X509_STORE_CTX *ctx, int idx, void *data); +void *X509_STORE_CTX_get_ex_data(X509_STORE_CTX *ctx, int idx); +int X509_STORE_CTX_get_error(X509_STORE_CTX *ctx); +void X509_STORE_CTX_set_error(X509_STORE_CTX *ctx, int s); +int X509_STORE_CTX_get_error_depth(X509_STORE_CTX *ctx); +void X509_STORE_CTX_set_error_depth(X509_STORE_CTX *ctx, int depth); +X509 *X509_STORE_CTX_get_current_cert(X509_STORE_CTX *ctx); +void X509_STORE_CTX_set_current_cert(X509_STORE_CTX *ctx, X509 *x); +X509 *X509_STORE_CTX_get0_current_issuer(X509_STORE_CTX *ctx); +X509_CRL *X509_STORE_CTX_get0_current_crl(X509_STORE_CTX *ctx); +X509_STORE_CTX *X509_STORE_CTX_get0_parent_ctx(X509_STORE_CTX *ctx); +STACK_OF(X509) *X509_STORE_CTX_get0_chain(X509_STORE_CTX *ctx); +STACK_OF(X509) *X509_STORE_CTX_get1_chain(X509_STORE_CTX *ctx); +void X509_STORE_CTX_set_cert(X509_STORE_CTX *c, X509 *x); +void X509_STORE_CTX_set0_verified_chain(X509_STORE_CTX *c, STACK_OF(X509) *sk); +void X509_STORE_CTX_set0_crls(X509_STORE_CTX *c, STACK_OF(X509_CRL) *sk); +int X509_STORE_CTX_set_purpose(X509_STORE_CTX *ctx, int purpose); +int X509_STORE_CTX_set_trust(X509_STORE_CTX *ctx, int trust); +int X509_STORE_CTX_purpose_inherit(X509_STORE_CTX *ctx, int def_purpose, + int purpose, int trust); +void X509_STORE_CTX_set_flags(X509_STORE_CTX *ctx, unsigned long flags); +void X509_STORE_CTX_set_time(X509_STORE_CTX *ctx, unsigned long flags, + time_t t); + +X509_POLICY_TREE *X509_STORE_CTX_get0_policy_tree(X509_STORE_CTX *ctx); +int X509_STORE_CTX_get_explicit_policy(X509_STORE_CTX *ctx); +int X509_STORE_CTX_get_num_untrusted(X509_STORE_CTX *ctx); + +X509_VERIFY_PARAM *X509_STORE_CTX_get0_param(X509_STORE_CTX *ctx); +void X509_STORE_CTX_set0_param(X509_STORE_CTX *ctx, X509_VERIFY_PARAM *param); +int X509_STORE_CTX_set_default(X509_STORE_CTX *ctx, const char *name); + +/* + * Bridge opacity barrier between libcrypt and libssl, also needed to support + * offline testing in test/danetest.c + */ +void X509_STORE_CTX_set0_dane(X509_STORE_CTX *ctx, SSL_DANE *dane); +#define DANE_FLAG_NO_DANE_EE_NAMECHECKS (1L << 0) + +/* X509_VERIFY_PARAM functions */ + +X509_VERIFY_PARAM *X509_VERIFY_PARAM_new(void); +void X509_VERIFY_PARAM_free(X509_VERIFY_PARAM *param); +int X509_VERIFY_PARAM_inherit(X509_VERIFY_PARAM *to, + const X509_VERIFY_PARAM *from); +int X509_VERIFY_PARAM_set1(X509_VERIFY_PARAM *to, + const X509_VERIFY_PARAM *from); +int X509_VERIFY_PARAM_set1_name(X509_VERIFY_PARAM *param, const char *name); +int X509_VERIFY_PARAM_set_flags(X509_VERIFY_PARAM *param, + unsigned long flags); +int X509_VERIFY_PARAM_clear_flags(X509_VERIFY_PARAM *param, + unsigned long flags); +unsigned long X509_VERIFY_PARAM_get_flags(X509_VERIFY_PARAM *param); +int X509_VERIFY_PARAM_set_purpose(X509_VERIFY_PARAM *param, int purpose); +int X509_VERIFY_PARAM_set_trust(X509_VERIFY_PARAM *param, int trust); +void X509_VERIFY_PARAM_set_depth(X509_VERIFY_PARAM *param, int depth); +void X509_VERIFY_PARAM_set_auth_level(X509_VERIFY_PARAM *param, int auth_level); +time_t X509_VERIFY_PARAM_get_time(const X509_VERIFY_PARAM *param); +void X509_VERIFY_PARAM_set_time(X509_VERIFY_PARAM *param, time_t t); +int X509_VERIFY_PARAM_add0_policy(X509_VERIFY_PARAM *param, + ASN1_OBJECT *policy); +int X509_VERIFY_PARAM_set1_policies(X509_VERIFY_PARAM *param, + STACK_OF(ASN1_OBJECT) *policies); + +int X509_VERIFY_PARAM_set_inh_flags(X509_VERIFY_PARAM *param, + uint32_t flags); +uint32_t X509_VERIFY_PARAM_get_inh_flags(const X509_VERIFY_PARAM *param); + +int X509_VERIFY_PARAM_set1_host(X509_VERIFY_PARAM *param, + const char *name, size_t namelen); +int X509_VERIFY_PARAM_add1_host(X509_VERIFY_PARAM *param, + const char *name, size_t namelen); +void X509_VERIFY_PARAM_set_hostflags(X509_VERIFY_PARAM *param, + unsigned int flags); +unsigned int X509_VERIFY_PARAM_get_hostflags(const X509_VERIFY_PARAM *param); +char *X509_VERIFY_PARAM_get0_peername(X509_VERIFY_PARAM *); +void X509_VERIFY_PARAM_move_peername(X509_VERIFY_PARAM *, X509_VERIFY_PARAM *); +int X509_VERIFY_PARAM_set1_email(X509_VERIFY_PARAM *param, + const char *email, size_t emaillen); +int X509_VERIFY_PARAM_set1_ip(X509_VERIFY_PARAM *param, + const unsigned char *ip, size_t iplen); +int X509_VERIFY_PARAM_set1_ip_asc(X509_VERIFY_PARAM *param, + const char *ipasc); + +int X509_VERIFY_PARAM_get_depth(const X509_VERIFY_PARAM *param); +int X509_VERIFY_PARAM_get_auth_level(const X509_VERIFY_PARAM *param); +const char *X509_VERIFY_PARAM_get0_name(const X509_VERIFY_PARAM *param); + +int X509_VERIFY_PARAM_add0_table(X509_VERIFY_PARAM *param); +int X509_VERIFY_PARAM_get_count(void); +const X509_VERIFY_PARAM *X509_VERIFY_PARAM_get0(int id); +const X509_VERIFY_PARAM *X509_VERIFY_PARAM_lookup(const char *name); +void X509_VERIFY_PARAM_table_cleanup(void); + +/* Non positive return values are errors */ +#define X509_PCY_TREE_FAILURE -2 /* Failure to satisfy explicit policy */ +#define X509_PCY_TREE_INVALID -1 /* Inconsistent or invalid extensions */ +#define X509_PCY_TREE_INTERNAL 0 /* Internal error, most likely malloc */ + +/* + * Positive return values form a bit mask, all but the first are internal to + * the library and don't appear in results from X509_policy_check(). + */ +#define X509_PCY_TREE_VALID 1 /* The policy tree is valid */ +#define X509_PCY_TREE_EMPTY 2 /* The policy tree is empty */ +#define X509_PCY_TREE_EXPLICIT 4 /* Explicit policy required */ + +int X509_policy_check(X509_POLICY_TREE **ptree, int *pexplicit_policy, + STACK_OF(X509) *certs, + STACK_OF(ASN1_OBJECT) *policy_oids, unsigned int flags); + +void X509_policy_tree_free(X509_POLICY_TREE *tree); + +int X509_policy_tree_level_count(const X509_POLICY_TREE *tree); +X509_POLICY_LEVEL *X509_policy_tree_get0_level(const X509_POLICY_TREE *tree, + int i); + +STACK_OF(X509_POLICY_NODE) *X509_policy_tree_get0_policies(const + X509_POLICY_TREE + *tree); + +STACK_OF(X509_POLICY_NODE) *X509_policy_tree_get0_user_policies(const + X509_POLICY_TREE + *tree); + +int X509_policy_level_node_count(X509_POLICY_LEVEL *level); + +X509_POLICY_NODE *X509_policy_level_get0_node(X509_POLICY_LEVEL *level, + int i); + +const ASN1_OBJECT *X509_policy_node_get0_policy(const X509_POLICY_NODE *node); + +STACK_OF(POLICYQUALINFO) *X509_policy_node_get0_qualifiers(const + X509_POLICY_NODE + *node); +const X509_POLICY_NODE *X509_policy_node_get0_parent(const X509_POLICY_NODE + *node); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509err.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509err.h new file mode 100644 index 00000000..02738531 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509err.h @@ -0,0 +1,130 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2019 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_X509ERR_H +# define HEADER_X509ERR_H + +# ifndef HEADER_SYMHACKS_H +# include +# endif + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_X509_strings(void); + +/* + * X509 function codes. + */ +# define X509_F_ADD_CERT_DIR 100 +# define X509_F_BUILD_CHAIN 106 +# define X509_F_BY_FILE_CTRL 101 +# define X509_F_CHECK_NAME_CONSTRAINTS 149 +# define X509_F_CHECK_POLICY 145 +# define X509_F_DANE_I2D 107 +# define X509_F_DIR_CTRL 102 +# define X509_F_GET_CERT_BY_SUBJECT 103 +# define X509_F_I2D_X509_AUX 151 +# define X509_F_LOOKUP_CERTS_SK 152 +# define X509_F_NETSCAPE_SPKI_B64_DECODE 129 +# define X509_F_NETSCAPE_SPKI_B64_ENCODE 130 +# define X509_F_NEW_DIR 153 +# define X509_F_X509AT_ADD1_ATTR 135 +# define X509_F_X509V3_ADD_EXT 104 +# define X509_F_X509_ATTRIBUTE_CREATE_BY_NID 136 +# define X509_F_X509_ATTRIBUTE_CREATE_BY_OBJ 137 +# define X509_F_X509_ATTRIBUTE_CREATE_BY_TXT 140 +# define X509_F_X509_ATTRIBUTE_GET0_DATA 139 +# define X509_F_X509_ATTRIBUTE_SET1_DATA 138 +# define X509_F_X509_CHECK_PRIVATE_KEY 128 +# define X509_F_X509_CRL_DIFF 105 +# define X509_F_X509_CRL_METHOD_NEW 154 +# define X509_F_X509_CRL_PRINT_FP 147 +# define X509_F_X509_EXTENSION_CREATE_BY_NID 108 +# define X509_F_X509_EXTENSION_CREATE_BY_OBJ 109 +# define X509_F_X509_GET_PUBKEY_PARAMETERS 110 +# define X509_F_X509_LOAD_CERT_CRL_FILE 132 +# define X509_F_X509_LOAD_CERT_FILE 111 +# define X509_F_X509_LOAD_CRL_FILE 112 +# define X509_F_X509_LOOKUP_METH_NEW 160 +# define X509_F_X509_LOOKUP_NEW 155 +# define X509_F_X509_NAME_ADD_ENTRY 113 +# define X509_F_X509_NAME_CANON 156 +# define X509_F_X509_NAME_ENTRY_CREATE_BY_NID 114 +# define X509_F_X509_NAME_ENTRY_CREATE_BY_TXT 131 +# define X509_F_X509_NAME_ENTRY_SET_OBJECT 115 +# define X509_F_X509_NAME_ONELINE 116 +# define X509_F_X509_NAME_PRINT 117 +# define X509_F_X509_OBJECT_NEW 150 +# define X509_F_X509_PRINT_EX_FP 118 +# define X509_F_X509_PUBKEY_DECODE 148 +# define X509_F_X509_PUBKEY_GET0 119 +# define X509_F_X509_PUBKEY_SET 120 +# define X509_F_X509_REQ_CHECK_PRIVATE_KEY 144 +# define X509_F_X509_REQ_PRINT_EX 121 +# define X509_F_X509_REQ_PRINT_FP 122 +# define X509_F_X509_REQ_TO_X509 123 +# define X509_F_X509_STORE_ADD_CERT 124 +# define X509_F_X509_STORE_ADD_CRL 125 +# define X509_F_X509_STORE_ADD_LOOKUP 157 +# define X509_F_X509_STORE_CTX_GET1_ISSUER 146 +# define X509_F_X509_STORE_CTX_INIT 143 +# define X509_F_X509_STORE_CTX_NEW 142 +# define X509_F_X509_STORE_CTX_PURPOSE_INHERIT 134 +# define X509_F_X509_STORE_NEW 158 +# define X509_F_X509_TO_X509_REQ 126 +# define X509_F_X509_TRUST_ADD 133 +# define X509_F_X509_TRUST_SET 141 +# define X509_F_X509_VERIFY_CERT 127 +# define X509_F_X509_VERIFY_PARAM_NEW 159 + +/* + * X509 reason codes. + */ +# define X509_R_AKID_MISMATCH 110 +# define X509_R_BAD_SELECTOR 133 +# define X509_R_BAD_X509_FILETYPE 100 +# define X509_R_BASE64_DECODE_ERROR 118 +# define X509_R_CANT_CHECK_DH_KEY 114 +# define X509_R_CERT_ALREADY_IN_HASH_TABLE 101 +# define X509_R_CRL_ALREADY_DELTA 127 +# define X509_R_CRL_VERIFY_FAILURE 131 +# define X509_R_IDP_MISMATCH 128 +# define X509_R_INVALID_ATTRIBUTES 138 +# define X509_R_INVALID_DIRECTORY 113 +# define X509_R_INVALID_FIELD_NAME 119 +# define X509_R_INVALID_TRUST 123 +# define X509_R_ISSUER_MISMATCH 129 +# define X509_R_KEY_TYPE_MISMATCH 115 +# define X509_R_KEY_VALUES_MISMATCH 116 +# define X509_R_LOADING_CERT_DIR 103 +# define X509_R_LOADING_DEFAULTS 104 +# define X509_R_METHOD_NOT_SUPPORTED 124 +# define X509_R_NAME_TOO_LONG 134 +# define X509_R_NEWER_CRL_NOT_NEWER 132 +# define X509_R_NO_CERTIFICATE_FOUND 135 +# define X509_R_NO_CERTIFICATE_OR_CRL_FOUND 136 +# define X509_R_NO_CERT_SET_FOR_US_TO_VERIFY 105 +# define X509_R_NO_CRL_FOUND 137 +# define X509_R_NO_CRL_NUMBER 130 +# define X509_R_PUBLIC_KEY_DECODE_ERROR 125 +# define X509_R_PUBLIC_KEY_ENCODE_ERROR 126 +# define X509_R_SHOULD_RETRY 106 +# define X509_R_UNABLE_TO_FIND_PARAMETERS_IN_CHAIN 107 +# define X509_R_UNABLE_TO_GET_CERTS_PUBLIC_KEY 108 +# define X509_R_UNKNOWN_KEY_TYPE 117 +# define X509_R_UNKNOWN_NID 109 +# define X509_R_UNKNOWN_PURPOSE_ID 121 +# define X509_R_UNKNOWN_TRUST_ID 120 +# define X509_R_UNSUPPORTED_ALGORITHM 111 +# define X509_R_WRONG_LOOKUP_TYPE 112 +# define X509_R_WRONG_TYPE 122 + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509v3.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509v3.h new file mode 100644 index 00000000..6c6eca38 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509v3.h @@ -0,0 +1,937 @@ +/* + * Copyright 1999-2019 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_X509V3_H +# define HEADER_X509V3_H + +# include +# include +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward reference */ +struct v3_ext_method; +struct v3_ext_ctx; + +/* Useful typedefs */ + +typedef void *(*X509V3_EXT_NEW)(void); +typedef void (*X509V3_EXT_FREE) (void *); +typedef void *(*X509V3_EXT_D2I)(void *, const unsigned char **, long); +typedef int (*X509V3_EXT_I2D) (void *, unsigned char **); +typedef STACK_OF(CONF_VALUE) * + (*X509V3_EXT_I2V) (const struct v3_ext_method *method, void *ext, + STACK_OF(CONF_VALUE) *extlist); +typedef void *(*X509V3_EXT_V2I)(const struct v3_ext_method *method, + struct v3_ext_ctx *ctx, + STACK_OF(CONF_VALUE) *values); +typedef char *(*X509V3_EXT_I2S)(const struct v3_ext_method *method, + void *ext); +typedef void *(*X509V3_EXT_S2I)(const struct v3_ext_method *method, + struct v3_ext_ctx *ctx, const char *str); +typedef int (*X509V3_EXT_I2R) (const struct v3_ext_method *method, void *ext, + BIO *out, int indent); +typedef void *(*X509V3_EXT_R2I)(const struct v3_ext_method *method, + struct v3_ext_ctx *ctx, const char *str); + +/* V3 extension structure */ + +struct v3_ext_method { + int ext_nid; + int ext_flags; +/* If this is set the following four fields are ignored */ + ASN1_ITEM_EXP *it; +/* Old style ASN1 calls */ + X509V3_EXT_NEW ext_new; + X509V3_EXT_FREE ext_free; + X509V3_EXT_D2I d2i; + X509V3_EXT_I2D i2d; +/* The following pair is used for string extensions */ + X509V3_EXT_I2S i2s; + X509V3_EXT_S2I s2i; +/* The following pair is used for multi-valued extensions */ + X509V3_EXT_I2V i2v; + X509V3_EXT_V2I v2i; +/* The following are used for raw extensions */ + X509V3_EXT_I2R i2r; + X509V3_EXT_R2I r2i; + void *usr_data; /* Any extension specific data */ +}; + +typedef struct X509V3_CONF_METHOD_st { + char *(*get_string) (void *db, const char *section, const char *value); + STACK_OF(CONF_VALUE) *(*get_section) (void *db, const char *section); + void (*free_string) (void *db, char *string); + void (*free_section) (void *db, STACK_OF(CONF_VALUE) *section); +} X509V3_CONF_METHOD; + +/* Context specific info */ +struct v3_ext_ctx { +# define CTX_TEST 0x1 +# define X509V3_CTX_REPLACE 0x2 + int flags; + X509 *issuer_cert; + X509 *subject_cert; + X509_REQ *subject_req; + X509_CRL *crl; + X509V3_CONF_METHOD *db_meth; + void *db; +/* Maybe more here */ +}; + +typedef struct v3_ext_method X509V3_EXT_METHOD; + +DEFINE_STACK_OF(X509V3_EXT_METHOD) + +/* ext_flags values */ +# define X509V3_EXT_DYNAMIC 0x1 +# define X509V3_EXT_CTX_DEP 0x2 +# define X509V3_EXT_MULTILINE 0x4 + +typedef BIT_STRING_BITNAME ENUMERATED_NAMES; + +typedef struct BASIC_CONSTRAINTS_st { + int ca; + ASN1_INTEGER *pathlen; +} BASIC_CONSTRAINTS; + +typedef struct PKEY_USAGE_PERIOD_st { + ASN1_GENERALIZEDTIME *notBefore; + ASN1_GENERALIZEDTIME *notAfter; +} PKEY_USAGE_PERIOD; + +typedef struct otherName_st { + ASN1_OBJECT *type_id; + ASN1_TYPE *value; +} OTHERNAME; + +typedef struct EDIPartyName_st { + ASN1_STRING *nameAssigner; + ASN1_STRING *partyName; +} EDIPARTYNAME; + +typedef struct GENERAL_NAME_st { +# define GEN_OTHERNAME 0 +# define GEN_EMAIL 1 +# define GEN_DNS 2 +# define GEN_X400 3 +# define GEN_DIRNAME 4 +# define GEN_EDIPARTY 5 +# define GEN_URI 6 +# define GEN_IPADD 7 +# define GEN_RID 8 + int type; + union { + char *ptr; + OTHERNAME *otherName; /* otherName */ + ASN1_IA5STRING *rfc822Name; + ASN1_IA5STRING *dNSName; + ASN1_TYPE *x400Address; + X509_NAME *directoryName; + EDIPARTYNAME *ediPartyName; + ASN1_IA5STRING *uniformResourceIdentifier; + ASN1_OCTET_STRING *iPAddress; + ASN1_OBJECT *registeredID; + /* Old names */ + ASN1_OCTET_STRING *ip; /* iPAddress */ + X509_NAME *dirn; /* dirn */ + ASN1_IA5STRING *ia5; /* rfc822Name, dNSName, + * uniformResourceIdentifier */ + ASN1_OBJECT *rid; /* registeredID */ + ASN1_TYPE *other; /* x400Address */ + } d; +} GENERAL_NAME; + +typedef struct ACCESS_DESCRIPTION_st { + ASN1_OBJECT *method; + GENERAL_NAME *location; +} ACCESS_DESCRIPTION; + +typedef STACK_OF(ACCESS_DESCRIPTION) AUTHORITY_INFO_ACCESS; + +typedef STACK_OF(ASN1_OBJECT) EXTENDED_KEY_USAGE; + +typedef STACK_OF(ASN1_INTEGER) TLS_FEATURE; + +DEFINE_STACK_OF(GENERAL_NAME) +typedef STACK_OF(GENERAL_NAME) GENERAL_NAMES; +DEFINE_STACK_OF(GENERAL_NAMES) + +DEFINE_STACK_OF(ACCESS_DESCRIPTION) + +typedef struct DIST_POINT_NAME_st { + int type; + union { + GENERAL_NAMES *fullname; + STACK_OF(X509_NAME_ENTRY) *relativename; + } name; +/* If relativename then this contains the full distribution point name */ + X509_NAME *dpname; +} DIST_POINT_NAME; +/* All existing reasons */ +# define CRLDP_ALL_REASONS 0x807f + +# define CRL_REASON_NONE -1 +# define CRL_REASON_UNSPECIFIED 0 +# define CRL_REASON_KEY_COMPROMISE 1 +# define CRL_REASON_CA_COMPROMISE 2 +# define CRL_REASON_AFFILIATION_CHANGED 3 +# define CRL_REASON_SUPERSEDED 4 +# define CRL_REASON_CESSATION_OF_OPERATION 5 +# define CRL_REASON_CERTIFICATE_HOLD 6 +# define CRL_REASON_REMOVE_FROM_CRL 8 +# define CRL_REASON_PRIVILEGE_WITHDRAWN 9 +# define CRL_REASON_AA_COMPROMISE 10 + +struct DIST_POINT_st { + DIST_POINT_NAME *distpoint; + ASN1_BIT_STRING *reasons; + GENERAL_NAMES *CRLissuer; + int dp_reasons; +}; + +typedef STACK_OF(DIST_POINT) CRL_DIST_POINTS; + +DEFINE_STACK_OF(DIST_POINT) + +struct AUTHORITY_KEYID_st { + ASN1_OCTET_STRING *keyid; + GENERAL_NAMES *issuer; + ASN1_INTEGER *serial; +}; + +/* Strong extranet structures */ + +typedef struct SXNET_ID_st { + ASN1_INTEGER *zone; + ASN1_OCTET_STRING *user; +} SXNETID; + +DEFINE_STACK_OF(SXNETID) + +typedef struct SXNET_st { + ASN1_INTEGER *version; + STACK_OF(SXNETID) *ids; +} SXNET; + +typedef struct NOTICEREF_st { + ASN1_STRING *organization; + STACK_OF(ASN1_INTEGER) *noticenos; +} NOTICEREF; + +typedef struct USERNOTICE_st { + NOTICEREF *noticeref; + ASN1_STRING *exptext; +} USERNOTICE; + +typedef struct POLICYQUALINFO_st { + ASN1_OBJECT *pqualid; + union { + ASN1_IA5STRING *cpsuri; + USERNOTICE *usernotice; + ASN1_TYPE *other; + } d; +} POLICYQUALINFO; + +DEFINE_STACK_OF(POLICYQUALINFO) + +typedef struct POLICYINFO_st { + ASN1_OBJECT *policyid; + STACK_OF(POLICYQUALINFO) *qualifiers; +} POLICYINFO; + +typedef STACK_OF(POLICYINFO) CERTIFICATEPOLICIES; + +DEFINE_STACK_OF(POLICYINFO) + +typedef struct POLICY_MAPPING_st { + ASN1_OBJECT *issuerDomainPolicy; + ASN1_OBJECT *subjectDomainPolicy; +} POLICY_MAPPING; + +DEFINE_STACK_OF(POLICY_MAPPING) + +typedef STACK_OF(POLICY_MAPPING) POLICY_MAPPINGS; + +typedef struct GENERAL_SUBTREE_st { + GENERAL_NAME *base; + ASN1_INTEGER *minimum; + ASN1_INTEGER *maximum; +} GENERAL_SUBTREE; + +DEFINE_STACK_OF(GENERAL_SUBTREE) + +struct NAME_CONSTRAINTS_st { + STACK_OF(GENERAL_SUBTREE) *permittedSubtrees; + STACK_OF(GENERAL_SUBTREE) *excludedSubtrees; +}; + +typedef struct POLICY_CONSTRAINTS_st { + ASN1_INTEGER *requireExplicitPolicy; + ASN1_INTEGER *inhibitPolicyMapping; +} POLICY_CONSTRAINTS; + +/* Proxy certificate structures, see RFC 3820 */ +typedef struct PROXY_POLICY_st { + ASN1_OBJECT *policyLanguage; + ASN1_OCTET_STRING *policy; +} PROXY_POLICY; + +typedef struct PROXY_CERT_INFO_EXTENSION_st { + ASN1_INTEGER *pcPathLengthConstraint; + PROXY_POLICY *proxyPolicy; +} PROXY_CERT_INFO_EXTENSION; + +DECLARE_ASN1_FUNCTIONS(PROXY_POLICY) +DECLARE_ASN1_FUNCTIONS(PROXY_CERT_INFO_EXTENSION) + +struct ISSUING_DIST_POINT_st { + DIST_POINT_NAME *distpoint; + int onlyuser; + int onlyCA; + ASN1_BIT_STRING *onlysomereasons; + int indirectCRL; + int onlyattr; +}; + +/* Values in idp_flags field */ +/* IDP present */ +# define IDP_PRESENT 0x1 +/* IDP values inconsistent */ +# define IDP_INVALID 0x2 +/* onlyuser true */ +# define IDP_ONLYUSER 0x4 +/* onlyCA true */ +# define IDP_ONLYCA 0x8 +/* onlyattr true */ +# define IDP_ONLYATTR 0x10 +/* indirectCRL true */ +# define IDP_INDIRECT 0x20 +/* onlysomereasons present */ +# define IDP_REASONS 0x40 + +# define X509V3_conf_err(val) ERR_add_error_data(6, \ + "section:", (val)->section, \ + ",name:", (val)->name, ",value:", (val)->value) + +# define X509V3_set_ctx_test(ctx) \ + X509V3_set_ctx(ctx, NULL, NULL, NULL, NULL, CTX_TEST) +# define X509V3_set_ctx_nodb(ctx) (ctx)->db = NULL; + +# define EXT_BITSTRING(nid, table) { nid, 0, ASN1_ITEM_ref(ASN1_BIT_STRING), \ + 0,0,0,0, \ + 0,0, \ + (X509V3_EXT_I2V)i2v_ASN1_BIT_STRING, \ + (X509V3_EXT_V2I)v2i_ASN1_BIT_STRING, \ + NULL, NULL, \ + table} + +# define EXT_IA5STRING(nid) { nid, 0, ASN1_ITEM_ref(ASN1_IA5STRING), \ + 0,0,0,0, \ + (X509V3_EXT_I2S)i2s_ASN1_IA5STRING, \ + (X509V3_EXT_S2I)s2i_ASN1_IA5STRING, \ + 0,0,0,0, \ + NULL} + +# define EXT_END { -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} + +/* X509_PURPOSE stuff */ + +# define EXFLAG_BCONS 0x1 +# define EXFLAG_KUSAGE 0x2 +# define EXFLAG_XKUSAGE 0x4 +# define EXFLAG_NSCERT 0x8 + +# define EXFLAG_CA 0x10 +/* Really self issued not necessarily self signed */ +# define EXFLAG_SI 0x20 +# define EXFLAG_V1 0x40 +# define EXFLAG_INVALID 0x80 +/* EXFLAG_SET is set to indicate that some values have been precomputed */ +# define EXFLAG_SET 0x100 +# define EXFLAG_CRITICAL 0x200 +# define EXFLAG_PROXY 0x400 + +# define EXFLAG_INVALID_POLICY 0x800 +# define EXFLAG_FRESHEST 0x1000 +/* Self signed */ +# define EXFLAG_SS 0x2000 + +# define KU_DIGITAL_SIGNATURE 0x0080 +# define KU_NON_REPUDIATION 0x0040 +# define KU_KEY_ENCIPHERMENT 0x0020 +# define KU_DATA_ENCIPHERMENT 0x0010 +# define KU_KEY_AGREEMENT 0x0008 +# define KU_KEY_CERT_SIGN 0x0004 +# define KU_CRL_SIGN 0x0002 +# define KU_ENCIPHER_ONLY 0x0001 +# define KU_DECIPHER_ONLY 0x8000 + +# define NS_SSL_CLIENT 0x80 +# define NS_SSL_SERVER 0x40 +# define NS_SMIME 0x20 +# define NS_OBJSIGN 0x10 +# define NS_SSL_CA 0x04 +# define NS_SMIME_CA 0x02 +# define NS_OBJSIGN_CA 0x01 +# define NS_ANY_CA (NS_SSL_CA|NS_SMIME_CA|NS_OBJSIGN_CA) + +# define XKU_SSL_SERVER 0x1 +# define XKU_SSL_CLIENT 0x2 +# define XKU_SMIME 0x4 +# define XKU_CODE_SIGN 0x8 +# define XKU_SGC 0x10 +# define XKU_OCSP_SIGN 0x20 +# define XKU_TIMESTAMP 0x40 +# define XKU_DVCS 0x80 +# define XKU_ANYEKU 0x100 + +# define X509_PURPOSE_DYNAMIC 0x1 +# define X509_PURPOSE_DYNAMIC_NAME 0x2 + +typedef struct x509_purpose_st { + int purpose; + int trust; /* Default trust ID */ + int flags; + int (*check_purpose) (const struct x509_purpose_st *, const X509 *, int); + char *name; + char *sname; + void *usr_data; +} X509_PURPOSE; + +# define X509_PURPOSE_SSL_CLIENT 1 +# define X509_PURPOSE_SSL_SERVER 2 +# define X509_PURPOSE_NS_SSL_SERVER 3 +# define X509_PURPOSE_SMIME_SIGN 4 +# define X509_PURPOSE_SMIME_ENCRYPT 5 +# define X509_PURPOSE_CRL_SIGN 6 +# define X509_PURPOSE_ANY 7 +# define X509_PURPOSE_OCSP_HELPER 8 +# define X509_PURPOSE_TIMESTAMP_SIGN 9 + +# define X509_PURPOSE_MIN 1 +# define X509_PURPOSE_MAX 9 + +/* Flags for X509V3_EXT_print() */ + +# define X509V3_EXT_UNKNOWN_MASK (0xfL << 16) +/* Return error for unknown extensions */ +# define X509V3_EXT_DEFAULT 0 +/* Print error for unknown extensions */ +# define X509V3_EXT_ERROR_UNKNOWN (1L << 16) +/* ASN1 parse unknown extensions */ +# define X509V3_EXT_PARSE_UNKNOWN (2L << 16) +/* BIO_dump unknown extensions */ +# define X509V3_EXT_DUMP_UNKNOWN (3L << 16) + +/* Flags for X509V3_add1_i2d */ + +# define X509V3_ADD_OP_MASK 0xfL +# define X509V3_ADD_DEFAULT 0L +# define X509V3_ADD_APPEND 1L +# define X509V3_ADD_REPLACE 2L +# define X509V3_ADD_REPLACE_EXISTING 3L +# define X509V3_ADD_KEEP_EXISTING 4L +# define X509V3_ADD_DELETE 5L +# define X509V3_ADD_SILENT 0x10 + +DEFINE_STACK_OF(X509_PURPOSE) + +DECLARE_ASN1_FUNCTIONS(BASIC_CONSTRAINTS) + +DECLARE_ASN1_FUNCTIONS(SXNET) +DECLARE_ASN1_FUNCTIONS(SXNETID) + +int SXNET_add_id_asc(SXNET **psx, const char *zone, const char *user, int userlen); +int SXNET_add_id_ulong(SXNET **psx, unsigned long lzone, const char *user, + int userlen); +int SXNET_add_id_INTEGER(SXNET **psx, ASN1_INTEGER *izone, const char *user, + int userlen); + +ASN1_OCTET_STRING *SXNET_get_id_asc(SXNET *sx, const char *zone); +ASN1_OCTET_STRING *SXNET_get_id_ulong(SXNET *sx, unsigned long lzone); +ASN1_OCTET_STRING *SXNET_get_id_INTEGER(SXNET *sx, ASN1_INTEGER *zone); + +DECLARE_ASN1_FUNCTIONS(AUTHORITY_KEYID) + +DECLARE_ASN1_FUNCTIONS(PKEY_USAGE_PERIOD) + +DECLARE_ASN1_FUNCTIONS(GENERAL_NAME) +GENERAL_NAME *GENERAL_NAME_dup(GENERAL_NAME *a); +int GENERAL_NAME_cmp(GENERAL_NAME *a, GENERAL_NAME *b); + +ASN1_BIT_STRING *v2i_ASN1_BIT_STRING(X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, + STACK_OF(CONF_VALUE) *nval); +STACK_OF(CONF_VALUE) *i2v_ASN1_BIT_STRING(X509V3_EXT_METHOD *method, + ASN1_BIT_STRING *bits, + STACK_OF(CONF_VALUE) *extlist); +char *i2s_ASN1_IA5STRING(X509V3_EXT_METHOD *method, ASN1_IA5STRING *ia5); +ASN1_IA5STRING *s2i_ASN1_IA5STRING(X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, const char *str); + +STACK_OF(CONF_VALUE) *i2v_GENERAL_NAME(X509V3_EXT_METHOD *method, + GENERAL_NAME *gen, + STACK_OF(CONF_VALUE) *ret); +int GENERAL_NAME_print(BIO *out, GENERAL_NAME *gen); + +DECLARE_ASN1_FUNCTIONS(GENERAL_NAMES) + +STACK_OF(CONF_VALUE) *i2v_GENERAL_NAMES(X509V3_EXT_METHOD *method, + GENERAL_NAMES *gen, + STACK_OF(CONF_VALUE) *extlist); +GENERAL_NAMES *v2i_GENERAL_NAMES(const X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *nval); + +DECLARE_ASN1_FUNCTIONS(OTHERNAME) +DECLARE_ASN1_FUNCTIONS(EDIPARTYNAME) +int OTHERNAME_cmp(OTHERNAME *a, OTHERNAME *b); +void GENERAL_NAME_set0_value(GENERAL_NAME *a, int type, void *value); +void *GENERAL_NAME_get0_value(const GENERAL_NAME *a, int *ptype); +int GENERAL_NAME_set0_othername(GENERAL_NAME *gen, + ASN1_OBJECT *oid, ASN1_TYPE *value); +int GENERAL_NAME_get0_otherName(const GENERAL_NAME *gen, + ASN1_OBJECT **poid, ASN1_TYPE **pvalue); + +char *i2s_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method, + const ASN1_OCTET_STRING *ia5); +ASN1_OCTET_STRING *s2i_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, const char *str); + +DECLARE_ASN1_FUNCTIONS(EXTENDED_KEY_USAGE) +int i2a_ACCESS_DESCRIPTION(BIO *bp, const ACCESS_DESCRIPTION *a); + +DECLARE_ASN1_ALLOC_FUNCTIONS(TLS_FEATURE) + +DECLARE_ASN1_FUNCTIONS(CERTIFICATEPOLICIES) +DECLARE_ASN1_FUNCTIONS(POLICYINFO) +DECLARE_ASN1_FUNCTIONS(POLICYQUALINFO) +DECLARE_ASN1_FUNCTIONS(USERNOTICE) +DECLARE_ASN1_FUNCTIONS(NOTICEREF) + +DECLARE_ASN1_FUNCTIONS(CRL_DIST_POINTS) +DECLARE_ASN1_FUNCTIONS(DIST_POINT) +DECLARE_ASN1_FUNCTIONS(DIST_POINT_NAME) +DECLARE_ASN1_FUNCTIONS(ISSUING_DIST_POINT) + +int DIST_POINT_set_dpname(DIST_POINT_NAME *dpn, X509_NAME *iname); + +int NAME_CONSTRAINTS_check(X509 *x, NAME_CONSTRAINTS *nc); +int NAME_CONSTRAINTS_check_CN(X509 *x, NAME_CONSTRAINTS *nc); + +DECLARE_ASN1_FUNCTIONS(ACCESS_DESCRIPTION) +DECLARE_ASN1_FUNCTIONS(AUTHORITY_INFO_ACCESS) + +DECLARE_ASN1_ITEM(POLICY_MAPPING) +DECLARE_ASN1_ALLOC_FUNCTIONS(POLICY_MAPPING) +DECLARE_ASN1_ITEM(POLICY_MAPPINGS) + +DECLARE_ASN1_ITEM(GENERAL_SUBTREE) +DECLARE_ASN1_ALLOC_FUNCTIONS(GENERAL_SUBTREE) + +DECLARE_ASN1_ITEM(NAME_CONSTRAINTS) +DECLARE_ASN1_ALLOC_FUNCTIONS(NAME_CONSTRAINTS) + +DECLARE_ASN1_ALLOC_FUNCTIONS(POLICY_CONSTRAINTS) +DECLARE_ASN1_ITEM(POLICY_CONSTRAINTS) + +GENERAL_NAME *a2i_GENERAL_NAME(GENERAL_NAME *out, + const X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, int gen_type, + const char *value, int is_nc); + +# ifdef HEADER_CONF_H +GENERAL_NAME *v2i_GENERAL_NAME(const X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, CONF_VALUE *cnf); +GENERAL_NAME *v2i_GENERAL_NAME_ex(GENERAL_NAME *out, + const X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, CONF_VALUE *cnf, + int is_nc); +void X509V3_conf_free(CONF_VALUE *val); + +X509_EXTENSION *X509V3_EXT_nconf_nid(CONF *conf, X509V3_CTX *ctx, int ext_nid, + const char *value); +X509_EXTENSION *X509V3_EXT_nconf(CONF *conf, X509V3_CTX *ctx, const char *name, + const char *value); +int X509V3_EXT_add_nconf_sk(CONF *conf, X509V3_CTX *ctx, const char *section, + STACK_OF(X509_EXTENSION) **sk); +int X509V3_EXT_add_nconf(CONF *conf, X509V3_CTX *ctx, const char *section, + X509 *cert); +int X509V3_EXT_REQ_add_nconf(CONF *conf, X509V3_CTX *ctx, const char *section, + X509_REQ *req); +int X509V3_EXT_CRL_add_nconf(CONF *conf, X509V3_CTX *ctx, const char *section, + X509_CRL *crl); + +X509_EXTENSION *X509V3_EXT_conf_nid(LHASH_OF(CONF_VALUE) *conf, + X509V3_CTX *ctx, int ext_nid, + const char *value); +X509_EXTENSION *X509V3_EXT_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, + const char *name, const char *value); +int X509V3_EXT_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, + const char *section, X509 *cert); +int X509V3_EXT_REQ_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, + const char *section, X509_REQ *req); +int X509V3_EXT_CRL_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, + const char *section, X509_CRL *crl); + +int X509V3_add_value_bool_nf(const char *name, int asn1_bool, + STACK_OF(CONF_VALUE) **extlist); +int X509V3_get_value_bool(const CONF_VALUE *value, int *asn1_bool); +int X509V3_get_value_int(const CONF_VALUE *value, ASN1_INTEGER **aint); +void X509V3_set_nconf(X509V3_CTX *ctx, CONF *conf); +void X509V3_set_conf_lhash(X509V3_CTX *ctx, LHASH_OF(CONF_VALUE) *lhash); +# endif + +char *X509V3_get_string(X509V3_CTX *ctx, const char *name, const char *section); +STACK_OF(CONF_VALUE) *X509V3_get_section(X509V3_CTX *ctx, const char *section); +void X509V3_string_free(X509V3_CTX *ctx, char *str); +void X509V3_section_free(X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *section); +void X509V3_set_ctx(X509V3_CTX *ctx, X509 *issuer, X509 *subject, + X509_REQ *req, X509_CRL *crl, int flags); + +int X509V3_add_value(const char *name, const char *value, + STACK_OF(CONF_VALUE) **extlist); +int X509V3_add_value_uchar(const char *name, const unsigned char *value, + STACK_OF(CONF_VALUE) **extlist); +int X509V3_add_value_bool(const char *name, int asn1_bool, + STACK_OF(CONF_VALUE) **extlist); +int X509V3_add_value_int(const char *name, const ASN1_INTEGER *aint, + STACK_OF(CONF_VALUE) **extlist); +char *i2s_ASN1_INTEGER(X509V3_EXT_METHOD *meth, const ASN1_INTEGER *aint); +ASN1_INTEGER *s2i_ASN1_INTEGER(X509V3_EXT_METHOD *meth, const char *value); +char *i2s_ASN1_ENUMERATED(X509V3_EXT_METHOD *meth, const ASN1_ENUMERATED *aint); +char *i2s_ASN1_ENUMERATED_TABLE(X509V3_EXT_METHOD *meth, + const ASN1_ENUMERATED *aint); +int X509V3_EXT_add(X509V3_EXT_METHOD *ext); +int X509V3_EXT_add_list(X509V3_EXT_METHOD *extlist); +int X509V3_EXT_add_alias(int nid_to, int nid_from); +void X509V3_EXT_cleanup(void); + +const X509V3_EXT_METHOD *X509V3_EXT_get(X509_EXTENSION *ext); +const X509V3_EXT_METHOD *X509V3_EXT_get_nid(int nid); +int X509V3_add_standard_extensions(void); +STACK_OF(CONF_VALUE) *X509V3_parse_list(const char *line); +void *X509V3_EXT_d2i(X509_EXTENSION *ext); +void *X509V3_get_d2i(const STACK_OF(X509_EXTENSION) *x, int nid, int *crit, + int *idx); + +X509_EXTENSION *X509V3_EXT_i2d(int ext_nid, int crit, void *ext_struc); +int X509V3_add1_i2d(STACK_OF(X509_EXTENSION) **x, int nid, void *value, + int crit, unsigned long flags); + +#if OPENSSL_API_COMPAT < 0x10100000L +/* The new declarations are in crypto.h, but the old ones were here. */ +# define hex_to_string OPENSSL_buf2hexstr +# define string_to_hex OPENSSL_hexstr2buf +#endif + +void X509V3_EXT_val_prn(BIO *out, STACK_OF(CONF_VALUE) *val, int indent, + int ml); +int X509V3_EXT_print(BIO *out, X509_EXTENSION *ext, unsigned long flag, + int indent); +#ifndef OPENSSL_NO_STDIO +int X509V3_EXT_print_fp(FILE *out, X509_EXTENSION *ext, int flag, int indent); +#endif +int X509V3_extensions_print(BIO *out, const char *title, + const STACK_OF(X509_EXTENSION) *exts, + unsigned long flag, int indent); + +int X509_check_ca(X509 *x); +int X509_check_purpose(X509 *x, int id, int ca); +int X509_supported_extension(X509_EXTENSION *ex); +int X509_PURPOSE_set(int *p, int purpose); +int X509_check_issued(X509 *issuer, X509 *subject); +int X509_check_akid(X509 *issuer, AUTHORITY_KEYID *akid); +void X509_set_proxy_flag(X509 *x); +void X509_set_proxy_pathlen(X509 *x, long l); +long X509_get_proxy_pathlen(X509 *x); + +uint32_t X509_get_extension_flags(X509 *x); +uint32_t X509_get_key_usage(X509 *x); +uint32_t X509_get_extended_key_usage(X509 *x); +const ASN1_OCTET_STRING *X509_get0_subject_key_id(X509 *x); +const ASN1_OCTET_STRING *X509_get0_authority_key_id(X509 *x); +const GENERAL_NAMES *X509_get0_authority_issuer(X509 *x); +const ASN1_INTEGER *X509_get0_authority_serial(X509 *x); + +int X509_PURPOSE_get_count(void); +X509_PURPOSE *X509_PURPOSE_get0(int idx); +int X509_PURPOSE_get_by_sname(const char *sname); +int X509_PURPOSE_get_by_id(int id); +int X509_PURPOSE_add(int id, int trust, int flags, + int (*ck) (const X509_PURPOSE *, const X509 *, int), + const char *name, const char *sname, void *arg); +char *X509_PURPOSE_get0_name(const X509_PURPOSE *xp); +char *X509_PURPOSE_get0_sname(const X509_PURPOSE *xp); +int X509_PURPOSE_get_trust(const X509_PURPOSE *xp); +void X509_PURPOSE_cleanup(void); +int X509_PURPOSE_get_id(const X509_PURPOSE *); + +STACK_OF(OPENSSL_STRING) *X509_get1_email(X509 *x); +STACK_OF(OPENSSL_STRING) *X509_REQ_get1_email(X509_REQ *x); +void X509_email_free(STACK_OF(OPENSSL_STRING) *sk); +STACK_OF(OPENSSL_STRING) *X509_get1_ocsp(X509 *x); +/* Flags for X509_check_* functions */ + +/* + * Always check subject name for host match even if subject alt names present + */ +# define X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT 0x1 +/* Disable wildcard matching for dnsName fields and common name. */ +# define X509_CHECK_FLAG_NO_WILDCARDS 0x2 +/* Wildcards must not match a partial label. */ +# define X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS 0x4 +/* Allow (non-partial) wildcards to match multiple labels. */ +# define X509_CHECK_FLAG_MULTI_LABEL_WILDCARDS 0x8 +/* Constraint verifier subdomain patterns to match a single labels. */ +# define X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS 0x10 +/* Never check the subject CN */ +# define X509_CHECK_FLAG_NEVER_CHECK_SUBJECT 0x20 +/* + * Match reference identifiers starting with "." to any sub-domain. + * This is a non-public flag, turned on implicitly when the subject + * reference identity is a DNS name. + */ +# define _X509_CHECK_FLAG_DOT_SUBDOMAINS 0x8000 + +int X509_check_host(X509 *x, const char *chk, size_t chklen, + unsigned int flags, char **peername); +int X509_check_email(X509 *x, const char *chk, size_t chklen, + unsigned int flags); +int X509_check_ip(X509 *x, const unsigned char *chk, size_t chklen, + unsigned int flags); +int X509_check_ip_asc(X509 *x, const char *ipasc, unsigned int flags); + +ASN1_OCTET_STRING *a2i_IPADDRESS(const char *ipasc); +ASN1_OCTET_STRING *a2i_IPADDRESS_NC(const char *ipasc); +int X509V3_NAME_from_section(X509_NAME *nm, STACK_OF(CONF_VALUE) *dn_sk, + unsigned long chtype); + +void X509_POLICY_NODE_print(BIO *out, X509_POLICY_NODE *node, int indent); +DEFINE_STACK_OF(X509_POLICY_NODE) + +#ifndef OPENSSL_NO_RFC3779 +typedef struct ASRange_st { + ASN1_INTEGER *min, *max; +} ASRange; + +# define ASIdOrRange_id 0 +# define ASIdOrRange_range 1 + +typedef struct ASIdOrRange_st { + int type; + union { + ASN1_INTEGER *id; + ASRange *range; + } u; +} ASIdOrRange; + +typedef STACK_OF(ASIdOrRange) ASIdOrRanges; +DEFINE_STACK_OF(ASIdOrRange) + +# define ASIdentifierChoice_inherit 0 +# define ASIdentifierChoice_asIdsOrRanges 1 + +typedef struct ASIdentifierChoice_st { + int type; + union { + ASN1_NULL *inherit; + ASIdOrRanges *asIdsOrRanges; + } u; +} ASIdentifierChoice; + +typedef struct ASIdentifiers_st { + ASIdentifierChoice *asnum, *rdi; +} ASIdentifiers; + +DECLARE_ASN1_FUNCTIONS(ASRange) +DECLARE_ASN1_FUNCTIONS(ASIdOrRange) +DECLARE_ASN1_FUNCTIONS(ASIdentifierChoice) +DECLARE_ASN1_FUNCTIONS(ASIdentifiers) + +typedef struct IPAddressRange_st { + ASN1_BIT_STRING *min, *max; +} IPAddressRange; + +# define IPAddressOrRange_addressPrefix 0 +# define IPAddressOrRange_addressRange 1 + +typedef struct IPAddressOrRange_st { + int type; + union { + ASN1_BIT_STRING *addressPrefix; + IPAddressRange *addressRange; + } u; +} IPAddressOrRange; + +typedef STACK_OF(IPAddressOrRange) IPAddressOrRanges; +DEFINE_STACK_OF(IPAddressOrRange) + +# define IPAddressChoice_inherit 0 +# define IPAddressChoice_addressesOrRanges 1 + +typedef struct IPAddressChoice_st { + int type; + union { + ASN1_NULL *inherit; + IPAddressOrRanges *addressesOrRanges; + } u; +} IPAddressChoice; + +typedef struct IPAddressFamily_st { + ASN1_OCTET_STRING *addressFamily; + IPAddressChoice *ipAddressChoice; +} IPAddressFamily; + +typedef STACK_OF(IPAddressFamily) IPAddrBlocks; +DEFINE_STACK_OF(IPAddressFamily) + +DECLARE_ASN1_FUNCTIONS(IPAddressRange) +DECLARE_ASN1_FUNCTIONS(IPAddressOrRange) +DECLARE_ASN1_FUNCTIONS(IPAddressChoice) +DECLARE_ASN1_FUNCTIONS(IPAddressFamily) + +/* + * API tag for elements of the ASIdentifer SEQUENCE. + */ +# define V3_ASID_ASNUM 0 +# define V3_ASID_RDI 1 + +/* + * AFI values, assigned by IANA. It'd be nice to make the AFI + * handling code totally generic, but there are too many little things + * that would need to be defined for other address families for it to + * be worth the trouble. + */ +# define IANA_AFI_IPV4 1 +# define IANA_AFI_IPV6 2 + +/* + * Utilities to construct and extract values from RFC3779 extensions, + * since some of the encodings (particularly for IP address prefixes + * and ranges) are a bit tedious to work with directly. + */ +int X509v3_asid_add_inherit(ASIdentifiers *asid, int which); +int X509v3_asid_add_id_or_range(ASIdentifiers *asid, int which, + ASN1_INTEGER *min, ASN1_INTEGER *max); +int X509v3_addr_add_inherit(IPAddrBlocks *addr, + const unsigned afi, const unsigned *safi); +int X509v3_addr_add_prefix(IPAddrBlocks *addr, + const unsigned afi, const unsigned *safi, + unsigned char *a, const int prefixlen); +int X509v3_addr_add_range(IPAddrBlocks *addr, + const unsigned afi, const unsigned *safi, + unsigned char *min, unsigned char *max); +unsigned X509v3_addr_get_afi(const IPAddressFamily *f); +int X509v3_addr_get_range(IPAddressOrRange *aor, const unsigned afi, + unsigned char *min, unsigned char *max, + const int length); + +/* + * Canonical forms. + */ +int X509v3_asid_is_canonical(ASIdentifiers *asid); +int X509v3_addr_is_canonical(IPAddrBlocks *addr); +int X509v3_asid_canonize(ASIdentifiers *asid); +int X509v3_addr_canonize(IPAddrBlocks *addr); + +/* + * Tests for inheritance and containment. + */ +int X509v3_asid_inherits(ASIdentifiers *asid); +int X509v3_addr_inherits(IPAddrBlocks *addr); +int X509v3_asid_subset(ASIdentifiers *a, ASIdentifiers *b); +int X509v3_addr_subset(IPAddrBlocks *a, IPAddrBlocks *b); + +/* + * Check whether RFC 3779 extensions nest properly in chains. + */ +int X509v3_asid_validate_path(X509_STORE_CTX *); +int X509v3_addr_validate_path(X509_STORE_CTX *); +int X509v3_asid_validate_resource_set(STACK_OF(X509) *chain, + ASIdentifiers *ext, + int allow_inheritance); +int X509v3_addr_validate_resource_set(STACK_OF(X509) *chain, + IPAddrBlocks *ext, int allow_inheritance); + +#endif /* OPENSSL_NO_RFC3779 */ + +DEFINE_STACK_OF(ASN1_STRING) + +/* + * Admission Syntax + */ +typedef struct NamingAuthority_st NAMING_AUTHORITY; +typedef struct ProfessionInfo_st PROFESSION_INFO; +typedef struct Admissions_st ADMISSIONS; +typedef struct AdmissionSyntax_st ADMISSION_SYNTAX; +DECLARE_ASN1_FUNCTIONS(NAMING_AUTHORITY) +DECLARE_ASN1_FUNCTIONS(PROFESSION_INFO) +DECLARE_ASN1_FUNCTIONS(ADMISSIONS) +DECLARE_ASN1_FUNCTIONS(ADMISSION_SYNTAX) +DEFINE_STACK_OF(ADMISSIONS) +DEFINE_STACK_OF(PROFESSION_INFO) +typedef STACK_OF(PROFESSION_INFO) PROFESSION_INFOS; + +const ASN1_OBJECT *NAMING_AUTHORITY_get0_authorityId( + const NAMING_AUTHORITY *n); +const ASN1_IA5STRING *NAMING_AUTHORITY_get0_authorityURL( + const NAMING_AUTHORITY *n); +const ASN1_STRING *NAMING_AUTHORITY_get0_authorityText( + const NAMING_AUTHORITY *n); +void NAMING_AUTHORITY_set0_authorityId(NAMING_AUTHORITY *n, + ASN1_OBJECT* namingAuthorityId); +void NAMING_AUTHORITY_set0_authorityURL(NAMING_AUTHORITY *n, + ASN1_IA5STRING* namingAuthorityUrl); +void NAMING_AUTHORITY_set0_authorityText(NAMING_AUTHORITY *n, + ASN1_STRING* namingAuthorityText); + +const GENERAL_NAME *ADMISSION_SYNTAX_get0_admissionAuthority( + const ADMISSION_SYNTAX *as); +void ADMISSION_SYNTAX_set0_admissionAuthority( + ADMISSION_SYNTAX *as, GENERAL_NAME *aa); +const STACK_OF(ADMISSIONS) *ADMISSION_SYNTAX_get0_contentsOfAdmissions( + const ADMISSION_SYNTAX *as); +void ADMISSION_SYNTAX_set0_contentsOfAdmissions( + ADMISSION_SYNTAX *as, STACK_OF(ADMISSIONS) *a); +const GENERAL_NAME *ADMISSIONS_get0_admissionAuthority(const ADMISSIONS *a); +void ADMISSIONS_set0_admissionAuthority(ADMISSIONS *a, GENERAL_NAME *aa); +const NAMING_AUTHORITY *ADMISSIONS_get0_namingAuthority(const ADMISSIONS *a); +void ADMISSIONS_set0_namingAuthority(ADMISSIONS *a, NAMING_AUTHORITY *na); +const PROFESSION_INFOS *ADMISSIONS_get0_professionInfos(const ADMISSIONS *a); +void ADMISSIONS_set0_professionInfos(ADMISSIONS *a, PROFESSION_INFOS *pi); +const ASN1_OCTET_STRING *PROFESSION_INFO_get0_addProfessionInfo( + const PROFESSION_INFO *pi); +void PROFESSION_INFO_set0_addProfessionInfo( + PROFESSION_INFO *pi, ASN1_OCTET_STRING *aos); +const NAMING_AUTHORITY *PROFESSION_INFO_get0_namingAuthority( + const PROFESSION_INFO *pi); +void PROFESSION_INFO_set0_namingAuthority( + PROFESSION_INFO *pi, NAMING_AUTHORITY *na); +const STACK_OF(ASN1_STRING) *PROFESSION_INFO_get0_professionItems( + const PROFESSION_INFO *pi); +void PROFESSION_INFO_set0_professionItems( + PROFESSION_INFO *pi, STACK_OF(ASN1_STRING) *as); +const STACK_OF(ASN1_OBJECT) *PROFESSION_INFO_get0_professionOIDs( + const PROFESSION_INFO *pi); +void PROFESSION_INFO_set0_professionOIDs( + PROFESSION_INFO *pi, STACK_OF(ASN1_OBJECT) *po); +const ASN1_PRINTABLESTRING *PROFESSION_INFO_get0_registrationNumber( + const PROFESSION_INFO *pi); +void PROFESSION_INFO_set0_registrationNumber( + PROFESSION_INFO *pi, ASN1_PRINTABLESTRING *rn); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509v3err.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509v3err.h new file mode 100644 index 00000000..5f25442f --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509v3err.h @@ -0,0 +1,162 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2019 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 + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_X509V3ERR_H +# define HEADER_X509V3ERR_H + +# ifndef HEADER_SYMHACKS_H +# include +# endif + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_X509V3_strings(void); + +/* + * X509V3 function codes. + */ +# define X509V3_F_A2I_GENERAL_NAME 164 +# define X509V3_F_ADDR_VALIDATE_PATH_INTERNAL 166 +# define X509V3_F_ASIDENTIFIERCHOICE_CANONIZE 161 +# define X509V3_F_ASIDENTIFIERCHOICE_IS_CANONICAL 162 +# define X509V3_F_BIGNUM_TO_STRING 167 +# define X509V3_F_COPY_EMAIL 122 +# define X509V3_F_COPY_ISSUER 123 +# define X509V3_F_DO_DIRNAME 144 +# define X509V3_F_DO_EXT_I2D 135 +# define X509V3_F_DO_EXT_NCONF 151 +# define X509V3_F_GNAMES_FROM_SECTNAME 156 +# define X509V3_F_I2S_ASN1_ENUMERATED 121 +# define X509V3_F_I2S_ASN1_IA5STRING 149 +# define X509V3_F_I2S_ASN1_INTEGER 120 +# define X509V3_F_I2V_AUTHORITY_INFO_ACCESS 138 +# define X509V3_F_LEVEL_ADD_NODE 168 +# define X509V3_F_NOTICE_SECTION 132 +# define X509V3_F_NREF_NOS 133 +# define X509V3_F_POLICY_CACHE_CREATE 169 +# define X509V3_F_POLICY_CACHE_NEW 170 +# define X509V3_F_POLICY_DATA_NEW 171 +# define X509V3_F_POLICY_SECTION 131 +# define X509V3_F_PROCESS_PCI_VALUE 150 +# define X509V3_F_R2I_CERTPOL 130 +# define X509V3_F_R2I_PCI 155 +# define X509V3_F_S2I_ASN1_IA5STRING 100 +# define X509V3_F_S2I_ASN1_INTEGER 108 +# define X509V3_F_S2I_ASN1_OCTET_STRING 112 +# define X509V3_F_S2I_SKEY_ID 115 +# define X509V3_F_SET_DIST_POINT_NAME 158 +# define X509V3_F_SXNET_ADD_ID_ASC 125 +# define X509V3_F_SXNET_ADD_ID_INTEGER 126 +# define X509V3_F_SXNET_ADD_ID_ULONG 127 +# define X509V3_F_SXNET_GET_ID_ASC 128 +# define X509V3_F_SXNET_GET_ID_ULONG 129 +# define X509V3_F_TREE_INIT 172 +# define X509V3_F_V2I_ASIDENTIFIERS 163 +# define X509V3_F_V2I_ASN1_BIT_STRING 101 +# define X509V3_F_V2I_AUTHORITY_INFO_ACCESS 139 +# define X509V3_F_V2I_AUTHORITY_KEYID 119 +# define X509V3_F_V2I_BASIC_CONSTRAINTS 102 +# define X509V3_F_V2I_CRLD 134 +# define X509V3_F_V2I_EXTENDED_KEY_USAGE 103 +# define X509V3_F_V2I_GENERAL_NAMES 118 +# define X509V3_F_V2I_GENERAL_NAME_EX 117 +# define X509V3_F_V2I_IDP 157 +# define X509V3_F_V2I_IPADDRBLOCKS 159 +# define X509V3_F_V2I_ISSUER_ALT 153 +# define X509V3_F_V2I_NAME_CONSTRAINTS 147 +# define X509V3_F_V2I_POLICY_CONSTRAINTS 146 +# define X509V3_F_V2I_POLICY_MAPPINGS 145 +# define X509V3_F_V2I_SUBJECT_ALT 154 +# define X509V3_F_V2I_TLS_FEATURE 165 +# define X509V3_F_V3_GENERIC_EXTENSION 116 +# define X509V3_F_X509V3_ADD1_I2D 140 +# define X509V3_F_X509V3_ADD_VALUE 105 +# define X509V3_F_X509V3_EXT_ADD 104 +# define X509V3_F_X509V3_EXT_ADD_ALIAS 106 +# define X509V3_F_X509V3_EXT_I2D 136 +# define X509V3_F_X509V3_EXT_NCONF 152 +# define X509V3_F_X509V3_GET_SECTION 142 +# define X509V3_F_X509V3_GET_STRING 143 +# define X509V3_F_X509V3_GET_VALUE_BOOL 110 +# define X509V3_F_X509V3_PARSE_LIST 109 +# define X509V3_F_X509_PURPOSE_ADD 137 +# define X509V3_F_X509_PURPOSE_SET 141 + +/* + * X509V3 reason codes. + */ +# define X509V3_R_BAD_IP_ADDRESS 118 +# define X509V3_R_BAD_OBJECT 119 +# define X509V3_R_BN_DEC2BN_ERROR 100 +# define X509V3_R_BN_TO_ASN1_INTEGER_ERROR 101 +# define X509V3_R_DIRNAME_ERROR 149 +# define X509V3_R_DISTPOINT_ALREADY_SET 160 +# define X509V3_R_DUPLICATE_ZONE_ID 133 +# define X509V3_R_ERROR_CONVERTING_ZONE 131 +# define X509V3_R_ERROR_CREATING_EXTENSION 144 +# define X509V3_R_ERROR_IN_EXTENSION 128 +# define X509V3_R_EXPECTED_A_SECTION_NAME 137 +# define X509V3_R_EXTENSION_EXISTS 145 +# define X509V3_R_EXTENSION_NAME_ERROR 115 +# define X509V3_R_EXTENSION_NOT_FOUND 102 +# define X509V3_R_EXTENSION_SETTING_NOT_SUPPORTED 103 +# define X509V3_R_EXTENSION_VALUE_ERROR 116 +# define X509V3_R_ILLEGAL_EMPTY_EXTENSION 151 +# define X509V3_R_INCORRECT_POLICY_SYNTAX_TAG 152 +# define X509V3_R_INVALID_ASNUMBER 162 +# define X509V3_R_INVALID_ASRANGE 163 +# define X509V3_R_INVALID_BOOLEAN_STRING 104 +# define X509V3_R_INVALID_EXTENSION_STRING 105 +# define X509V3_R_INVALID_INHERITANCE 165 +# define X509V3_R_INVALID_IPADDRESS 166 +# define X509V3_R_INVALID_MULTIPLE_RDNS 161 +# define X509V3_R_INVALID_NAME 106 +# define X509V3_R_INVALID_NULL_ARGUMENT 107 +# define X509V3_R_INVALID_NULL_NAME 108 +# define X509V3_R_INVALID_NULL_VALUE 109 +# define X509V3_R_INVALID_NUMBER 140 +# define X509V3_R_INVALID_NUMBERS 141 +# define X509V3_R_INVALID_OBJECT_IDENTIFIER 110 +# define X509V3_R_INVALID_OPTION 138 +# define X509V3_R_INVALID_POLICY_IDENTIFIER 134 +# define X509V3_R_INVALID_PROXY_POLICY_SETTING 153 +# define X509V3_R_INVALID_PURPOSE 146 +# define X509V3_R_INVALID_SAFI 164 +# define X509V3_R_INVALID_SECTION 135 +# define X509V3_R_INVALID_SYNTAX 143 +# define X509V3_R_ISSUER_DECODE_ERROR 126 +# define X509V3_R_MISSING_VALUE 124 +# define X509V3_R_NEED_ORGANIZATION_AND_NUMBERS 142 +# define X509V3_R_NO_CONFIG_DATABASE 136 +# define X509V3_R_NO_ISSUER_CERTIFICATE 121 +# define X509V3_R_NO_ISSUER_DETAILS 127 +# define X509V3_R_NO_POLICY_IDENTIFIER 139 +# define X509V3_R_NO_PROXY_CERT_POLICY_LANGUAGE_DEFINED 154 +# define X509V3_R_NO_PUBLIC_KEY 114 +# define X509V3_R_NO_SUBJECT_DETAILS 125 +# define X509V3_R_OPERATION_NOT_DEFINED 148 +# define X509V3_R_OTHERNAME_ERROR 147 +# define X509V3_R_POLICY_LANGUAGE_ALREADY_DEFINED 155 +# define X509V3_R_POLICY_PATH_LENGTH 156 +# define X509V3_R_POLICY_PATH_LENGTH_ALREADY_DEFINED 157 +# define X509V3_R_POLICY_WHEN_PROXY_LANGUAGE_REQUIRES_NO_POLICY 159 +# define X509V3_R_SECTION_NOT_FOUND 150 +# define X509V3_R_UNABLE_TO_GET_ISSUER_DETAILS 122 +# define X509V3_R_UNABLE_TO_GET_ISSUER_KEYID 123 +# define X509V3_R_UNKNOWN_BIT_STRING_ARGUMENT 111 +# define X509V3_R_UNKNOWN_EXTENSION 129 +# define X509V3_R_UNKNOWN_EXTENSION_NAME 130 +# define X509V3_R_UNKNOWN_OPTION 120 +# define X509V3_R_UNSUPPORTED_OPTION 117 +# define X509V3_R_UNSUPPORTED_TYPE 167 +# define X509V3_R_USER_TOO_LONG 132 + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/lib/pkgconfig/libcrypto.pc b/deps/openssl/android/arm64-v8a/usr/local/lib/pkgconfig/libcrypto.pc new file mode 100644 index 00000000..8ad5521b --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/lib/pkgconfig/libcrypto.pc @@ -0,0 +1,12 @@ +prefix=/usr/local +exec_prefix=${prefix} +libdir=${exec_prefix}/lib +includedir=${prefix}/include +enginesdir=${libdir}/engines-1.1 + +Name: OpenSSL-libcrypto +Description: OpenSSL cryptography library +Version: 1.1.1g +Libs: -L${libdir} -lcrypto +Libs.private: -ldl -pthread +Cflags: -I${includedir} diff --git a/deps/openssl/android/arm64-v8a/usr/local/lib/pkgconfig/libssl.pc b/deps/openssl/android/arm64-v8a/usr/local/lib/pkgconfig/libssl.pc new file mode 100644 index 00000000..556e6a1e --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/lib/pkgconfig/libssl.pc @@ -0,0 +1,11 @@ +prefix=/usr/local +exec_prefix=${prefix} +libdir=${exec_prefix}/lib +includedir=${prefix}/include + +Name: OpenSSL-libssl +Description: Secure Sockets Layer and cryptography libraries +Version: 1.1.1g +Requires.private: libcrypto +Libs: -L${libdir} -lssl +Cflags: -I${includedir} diff --git a/deps/openssl/android/arm64-v8a/usr/local/lib/pkgconfig/openssl.pc b/deps/openssl/android/arm64-v8a/usr/local/lib/pkgconfig/openssl.pc new file mode 100644 index 00000000..551cf717 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/lib/pkgconfig/openssl.pc @@ -0,0 +1,9 @@ +prefix=/usr/local +exec_prefix=${prefix} +libdir=${exec_prefix}/lib +includedir=${prefix}/include + +Name: OpenSSL +Description: Secure Sockets Layer and cryptography libraries and tools +Version: 1.1.1g +Requires: libssl libcrypto diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/CA.pl.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/CA.pl.html new file mode 100644 index 00000000..be1293ff --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/CA.pl.html @@ -0,0 +1,198 @@ + + + + +CA.pl + + + + + + + + +

+ +

NAME

+ +

CA.pl - friendlier interface for OpenSSL certificate programs

+ +

SYNOPSIS

+ +

CA.pl -? | -h | -help

+ +

CA.pl -newcert | -newreq | -newreq-nodes | -xsign | -sign | -signCA | -signcert | -crl | -newca [-extra-cmd extra-params]

+ +

CA.pl -pkcs12 [-extra-pkcs12 extra-params] [certname]

+ +

CA.pl -verify [-extra-verify extra-params] certfile...

+ +

CA.pl -revoke [-extra-ca extra-params] certfile [reason]

+ +

DESCRIPTION

+ +

The CA.pl script is a perl script that supplies the relevant command line arguments to the openssl command for some common certificate operations. It is intended to simplify the process of certificate creation and management by the use of some simple options.

+ +

OPTIONS

+ +
+ +
?, -h, -help
+
+ +

Prints a usage message.

+ +
+
-newcert
+
+ +

Creates a new self signed certificate. The private key is written to the file "newkey.pem" and the request written to the file "newreq.pem". This argument invokes openssl req command.

+ +
+
-newreq
+
+ +

Creates a new certificate request. The private key is written to the file "newkey.pem" and the request written to the file "newreq.pem". Executes openssl req command below the hood.

+ +
+
-newreq-nodes
+
+ +

Is like -newreq except that the private key will not be encrypted. Uses openssl req command.

+ +
+
-newca
+
+ +

Creates a new CA hierarchy for use with the ca program (or the -signcert and -xsign options). The user is prompted to enter the filename of the CA certificates (which should also contain the private key) or by hitting ENTER details of the CA will be prompted for. The relevant files and directories are created in a directory called "demoCA" in the current directory. openssl req and openssl ca commands are get invoked.

+ +
+
-pkcs12
+
+ +

Create a PKCS#12 file containing the user certificate, private key and CA certificate. It expects the user certificate and private key to be in the file "newcert.pem" and the CA certificate to be in the file demoCA/cacert.pem, it creates a file "newcert.p12". This command can thus be called after the -sign option. The PKCS#12 file can be imported directly into a browser. If there is an additional argument on the command line it will be used as the "friendly name" for the certificate (which is typically displayed in the browser list box), otherwise the name "My Certificate" is used. Delegates work to openssl pkcs12 command.

+ +
+
-sign, -signcert, -xsign
+
+ +

Calls the ca program to sign a certificate request. It expects the request to be in the file "newreq.pem". The new certificate is written to the file "newcert.pem" except in the case of the -xsign option when it is written to standard output. Leverages openssl ca command.

+ +
+
-signCA
+
+ +

This option is the same as the -signreq option except it uses the configuration file section 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 openssl ca command.

+ +
+
-signcert
+
+ +

This option is the same as -sign except it expects a self signed certificate to be present in the file "newreq.pem". Extra params are passed on to openssl x509 and openssl ca commands.

+ +
+
-crl
+
+ +

Generate a CRL. Executes openssl ca command.

+ +
+
-revoke certfile [reason]
+
+ +

Revoke the certificate contained in the specified certfile. An optional reason may be specified, and must be one of: unspecified, keyCompromise, CACompromise, affiliationChanged, superseded, cessationOfOperation, certificateHold, or removeFromCRL. Leverages openssl ca command.

+ +
+
-verify
+
+ +

Verifies certificates against the CA certificate for "demoCA". If no certificates are specified on the command line it tries to verify the file "newcert.pem". Invokes openssl verify command.

+ +
+
-extra-req | -extra-ca | -extra-pkcs12 | -extra-x509 | -extra-verify <extra-params>
+
+ +

The purpose of these parameters is to allow optional parameters to be supplied to openssl that this command executes. The -extra-cmd are specific to the option being used and the openssl command getting invoked. For example when this command invokes openssl req extra parameters can be passed on with the -extra-req parameter. The openssl commands being invoked per option are documented below. Users should consult openssl command documentation for more information.

+ +
+
+ +

EXAMPLES

+ +

Create a CA hierarchy:

+ +
CA.pl -newca
+ +

Complete certificate creation example: create a CA, create a request, sign the request and finally create a PKCS#12 file containing it.

+ +
CA.pl -newca
+CA.pl -newreq
+CA.pl -signreq
+CA.pl -pkcs12 "My Test Certificate"
+ +

DSA CERTIFICATES

+ +

Although the CA.pl creates RSA CAs and requests it is still possible to use it with DSA certificates and requests using the req(1) command directly. The following example shows the steps that would typically be taken.

+ +

Create some DSA parameters:

+ +
openssl dsaparam -out dsap.pem 1024
+ +

Create a DSA CA certificate and private key:

+ +
openssl req -x509 -newkey dsa:dsap.pem -keyout cacert.pem -out cacert.pem
+ +

Create the CA directories and files:

+ +
CA.pl -newca
+ +

enter cacert.pem when prompted for the CA file name.

+ +

Create a DSA certificate request and private key (a different set of parameters can optionally be created first):

+ +
openssl req -out newreq.pem -newkey dsa:dsap.pem
+ +

Sign the request:

+ +
CA.pl -signreq
+ +

NOTES

+ +

Most of the filenames mentioned can be modified by editing the CA.pl script.

+ +

If the demoCA directory already exists then the -newca command will not overwrite it and will do nothing. This can happen if a previous call using the -newca option terminated abnormally. To get the correct behaviour delete the demoCA directory if it already exists.

+ +

Under some environments it may not be possible to run the CA.pl script directly (for example Win32) and the default configuration file location may be wrong. In this case the command:

+ +
perl -S CA.pl
+ +

can be used and the OPENSSL_CONF environment variable changed to point to the correct path of the configuration file.

+ +

The script is intended as a simple front end for the openssl program for use by a beginner. Its behaviour isn't always what is wanted. For more control over the behaviour of the certificate commands call the openssl command directly.

+ +

SEE ALSO

+ +

x509(1), ca(1), req(1), pkcs12(1), config(5)

+ +

COPYRIGHT

+ +

Copyright 2000-2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/asn1parse.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/asn1parse.html new file mode 100644 index 00000000..d7b6f514 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/asn1parse.html @@ -0,0 +1,227 @@ + + + + +asn1parse + + + + + + + + + + +

NAME

+ +

openssl-asn1parse, asn1parse - ASN.1 parsing tool

+ +

SYNOPSIS

+ +

openssl asn1parse [-help] [-inform PEM|DER] [-in filename] [-out filename] [-noout] [-offset number] [-length number] [-i] [-oid filename] [-dump] [-dlimit num] [-strparse offset] [-genstr string] [-genconf file] [-strictpem] [-item name]

+ +

DESCRIPTION

+ +

The asn1parse command is a diagnostic utility that can parse ASN.1 structures. It can also be used to extract data from ASN.1 formatted data.

+ +

OPTIONS

+ +
+ +
-help
+
+ +

Print out a usage message.

+ +
+
-inform DER|PEM
+
+ +

The input format. DER is binary format and PEM (the default) is base64 encoded.

+ +
+
-in filename
+
+ +

The input file, default is standard input.

+ +
+
-out filename
+
+ +

Output file to place the DER encoded data into. If this option is not present then no data will be output. This is most useful when combined with the -strparse option.

+ +
+
-noout
+
+ +

Don't output the parsed version of the input file.

+ +
+
-offset number
+
+ +

Starting offset to begin parsing, default is start of file.

+ +
+
-length number
+
+ +

Number of bytes to parse, default is until end of file.

+ +
+
-i
+
+ +

Indents the output according to the "depth" of the structures.

+ +
+
-oid filename
+
+ +

A file containing additional OBJECT IDENTIFIERs (OIDs). The format of this file is described in the NOTES section below.

+ +
+
-dump
+
+ +

Dump unknown data in hex format.

+ +
+
-dlimit num
+
+ +

Like -dump, but only the first num bytes are output.

+ +
+
-strparse offset
+
+ +

Parse the contents octets of the ASN.1 object starting at offset. This option can be used multiple times to "drill down" into a nested structure.

+ +
+
-genstr string, -genconf file
+
+ +

Generate encoded data based on string, file or both using ASN1_generate_nconf(3) format. If file only is present then the string is obtained from the default section using the name asn1. The encoded data is passed through the ASN1 parser and printed out as though it came from a file, the contents can thus be examined and written to a file using the out option.

+ +
+
-strictpem
+
+ +

If this option is used then -inform will be ignored. Without this option any data in a PEM format input file will be treated as being base64 encoded and processed whether it has the normal PEM BEGIN and END markers or not. This option will ignore any data prior to the start of the BEGIN marker, or after an END marker in a PEM file.

+ +
+
-item name
+
+ +

Attempt to decode and print the data as ASN1_ITEM name. This can be used to print out the fields of any supported ASN.1 structure if the type is known.

+ +
+
+ +

Output

+ +

The output will typically contain lines like this:

+ +
0:d=0  hl=4 l= 681 cons: SEQUENCE
+ +

.....

+ +
229:d=3  hl=3 l= 141 prim: BIT STRING
+373:d=2  hl=3 l= 162 cons: cont [ 3 ]
+376:d=3  hl=3 l= 159 cons: SEQUENCE
+379:d=4  hl=2 l=  29 cons: SEQUENCE
+381:d=5  hl=2 l=   3 prim: OBJECT            :X509v3 Subject Key Identifier
+386:d=5  hl=2 l=  22 prim: OCTET STRING
+410:d=4  hl=2 l= 112 cons: SEQUENCE
+412:d=5  hl=2 l=   3 prim: OBJECT            :X509v3 Authority Key Identifier
+417:d=5  hl=2 l= 105 prim: OCTET STRING
+524:d=4  hl=2 l=  12 cons: SEQUENCE
+ +

.....

+ +

This example is part of a self-signed certificate. Each line starts with the offset in decimal. d=XX specifies the current depth. The depth is increased within the scope of any SET or SEQUENCE. hl=XX gives the header length (tag and length octets) of the current type. l=XX gives the length of the contents octets.

+ +

The -i option can be used to make the output more readable.

+ +

Some knowledge of the ASN.1 structure is needed to interpret the output.

+ +

In this example the BIT STRING at offset 229 is the certificate public key. The contents octets of this will contain the public key information. This can be examined using the option -strparse 229 to yield:

+ +
  0:d=0  hl=3 l= 137 cons: SEQUENCE
+  3:d=1  hl=3 l= 129 prim: INTEGER           :E5D21E1F5C8D208EA7A2166C7FAF9F6BDF2059669C60876DDB70840F1A5AAFA59699FE471F379F1DD6A487E7D5409AB6A88D4A9746E24B91D8CF55DB3521015460C8EDE44EE8A4189F7A7BE77D6CD3A9AF2696F486855CF58BF0EDF2B4068058C7A947F52548DDF7E15E96B385F86422BEA9064A3EE9E1158A56E4A6F47E5897
+135:d=1  hl=2 l=   3 prim: INTEGER           :010001
+ +

NOTES

+ +

If an OID is not part of OpenSSL's internal table it will be represented in numerical form (for example 1.2.3.4). The file passed to the -oid option allows additional OIDs to be included. Each line consists of three columns, the first column is the OID in numerical format and should be followed by white space. The second column is the "short name" which is a single word followed by white space. The final column is the rest of the line and is the "long name". asn1parse displays the long name. Example:

+ +

1.2.3.4 shortName A long name

+ +

EXAMPLES

+ +

Parse a file:

+ +
openssl asn1parse -in file.pem
+ +

Parse a DER file:

+ +
openssl asn1parse -inform DER -in file.der
+ +

Generate a simple UTF8String:

+ +
openssl asn1parse -genstr 'UTF8:Hello World'
+ +

Generate and write out a UTF8String, don't print parsed output:

+ +
openssl asn1parse -genstr 'UTF8:Hello World' -noout -out utf8.der
+ +

Generate using a config file:

+ +
openssl asn1parse -genconf asn1.cnf -noout -out asn1.der
+ +

Example config file:

+ +
asn1=SEQUENCE:seq_sect
+
+[seq_sect]
+
+field1=BOOL:TRUE
+field2=EXP:0, UTF8:some random string
+ +

BUGS

+ +

There should be options to change the format of output lines. The output of some ASN.1 types is not well handled (if at all).

+ +

SEE ALSO

+ +

ASN1_generate_nconf(3)

+ +

COPYRIGHT

+ +

Copyright 2000-2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/ca.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/ca.html new file mode 100644 index 00000000..7f277476 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/ca.html @@ -0,0 +1,671 @@ + + + + +ca + + + + + + + + + + +

NAME

+ +

openssl-ca, ca - sample minimal CA application

+ +

SYNOPSIS

+ +

openssl ca [-help] [-verbose] [-config filename] [-name section] [-gencrl] [-revoke file] [-valid file] [-status serial] [-updatedb] [-crl_reason reason] [-crl_hold instruction] [-crl_compromise time] [-crl_CA_compromise time] [-crldays days] [-crlhours hours] [-crlexts section] [-startdate date] [-enddate date] [-days arg] [-md arg] [-policy arg] [-keyfile arg] [-keyform PEM|DER] [-key arg] [-passin arg] [-cert file] [-selfsign] [-in file] [-out file] [-notext] [-outdir dir] [-infiles] [-spkac file] [-ss_cert file] [-preserveDN] [-noemailDN] [-batch] [-msie_hack] [-extensions section] [-extfile section] [-engine id] [-subj arg] [-utf8] [-sigopt nm:v] [-create_serial] [-rand_serial] [-multivalue-rdn] [-rand file...] [-writerand file]

+ +

DESCRIPTION

+ +

The ca command is a minimal CA application. It can be used to sign certificate requests in a variety of forms and generate CRLs it also maintains a text database of issued certificates and their status.

+ +

The options descriptions will be divided into each purpose.

+ +

OPTIONS

+ +
+ +
-help
+
+ +

Print out a usage message.

+ +
+
-verbose
+
+ +

This prints extra details about the operations being performed.

+ +
+
-config filename
+
+ +

Specifies the configuration file to use. Optional; for a description of the default value, see "COMMAND SUMMARY" in openssl(1).

+ +
+
-name section
+
+ +

Specifies the configuration file section to use (overrides default_ca in the ca section).

+ +
+
-in filename
+
+ +

An input filename containing a single certificate request to be signed by the CA.

+ +
+
-ss_cert filename
+
+ +

A single self-signed certificate to be signed by the CA.

+ +
+
-spkac filename
+
+ +

A file containing a single Netscape signed public key and challenge and additional field values to be signed by the CA. See the SPKAC FORMAT section for information on the required input and output format.

+ +
+
-infiles
+
+ +

If present this should be the last option, all subsequent arguments are taken as the names of files containing certificate requests.

+ +
+
-out filename
+
+ +

The output file to output certificates to. The default is standard output. The certificate details will also be printed out to this file in PEM format (except that -spkac outputs DER format).

+ +
+
-outdir directory
+
+ +

The directory to output certificates to. The certificate will be written to a filename consisting of the serial number in hex with ".pem" appended.

+ +
+
-cert
+
+ +

The CA certificate file.

+ +
+
-keyfile filename
+
+ +

The private key to sign requests with.

+ +
+
-keyform PEM|DER
+
+ +

The format of the data in the private key file. The default is PEM.

+ +
+
-sigopt nm:v
+
+ +

Pass options to the signature algorithm during sign or verify operations. Names and values of these options are algorithm-specific.

+ +
+
-key password
+
+ +

The password used to encrypt the private key. Since on some systems the command line arguments are visible (e.g. Unix with the 'ps' utility) this option should be used with caution.

+ +
+
-selfsign
+
+ +

Indicates the issued certificates are to be signed with the key the certificate requests were signed with (given with -keyfile). Certificate requests signed with a different key are ignored. If -spkac, -ss_cert or -gencrl are given, -selfsign is ignored.

+ +

A consequence of using -selfsign is that the self-signed certificate appears among the entries in the certificate database (see the configuration option database), and uses the same serial number counter as all other certificates sign with the self-signed certificate.

+ +
+
-passin arg
+
+ +

The key password source. For more information about the format of arg see the PASS PHRASE ARGUMENTS section in openssl(1).

+ +
+
-notext
+
+ +

Don't output the text form of a certificate to the output file.

+ +
+
-startdate date
+
+ +

This allows the start date to be explicitly set. The format of the date is YYMMDDHHMMSSZ (the same as an ASN1 UTCTime structure), or YYYYMMDDHHMMSSZ (the same as an ASN1 GeneralizedTime structure). In both formats, seconds SS and timezone Z must be present.

+ +
+
-enddate date
+
+ +

This allows the expiry date to be explicitly set. The format of the date is YYMMDDHHMMSSZ (the same as an ASN1 UTCTime structure), or YYYYMMDDHHMMSSZ (the same as an ASN1 GeneralizedTime structure). In both formats, seconds SS and timezone Z must be present.

+ +
+
-days arg
+
+ +

The number of days to certify the certificate for.

+ +
+
-md alg
+
+ +

The message digest to use. Any digest supported by the OpenSSL dgst command can be used. For signing algorithms that do not support a digest (i.e. Ed25519 and Ed448) any message digest that is set is ignored. This option also applies to CRLs.

+ +
+
-policy arg
+
+ +

This option defines the CA "policy" to use. This is a section in the configuration file which decides which fields should be mandatory or match the CA certificate. Check out the POLICY FORMAT section for more information.

+ +
+
-msie_hack
+
+ +

This is a deprecated option to make ca work with very old versions of the IE certificate enrollment control "certenr3". It used UniversalStrings for almost everything. Since the old control has various security bugs its use is strongly discouraged.

+ +
+
-preserveDN
+
+ +

Normally the DN order of a certificate is the same as the order of the fields in the relevant policy section. When this option is set the order is the same as the request. This is largely for compatibility with the older IE enrollment control which would only accept certificates if their DNs match the order of the request. This is not needed for Xenroll.

+ +
+
-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 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 email_in_dn keyword can be used in the configuration file to enable this behaviour.

+ +
+
-batch
+
+ +

This sets the batch mode. In this mode no questions will be asked and all certificates will be certified automatically.

+ +
+
-extensions section
+
+ +

The section of the configuration file containing certificate extensions to be added when a certificate is issued (defaults to x509_extensions unless the -extfile option is used). If no extension section is present then, a V1 certificate is created. If the extension section is present (even if it is empty), then a V3 certificate is created. See the x509v3_config(5) manual page for details of the extension section format.

+ +
+
-extfile file
+
+ +

An additional configuration file to read certificate extensions from (using the default section unless the -extensions option is also used).

+ +
+
-engine id
+
+ +

Specifying an engine (by its unique id string) will cause ca to attempt to obtain a functional reference to the specified engine, thus initialising it if needed. The engine will then be set as the default for all available algorithms.

+ +
+
-subj arg
+
+ +

Supersedes subject name given in the request. The arg must be formatted as /type0=value0/type1=value1/type2=.... Keyword characters may be escaped by \ (backslash), and whitespace is retained. Empty values are permitted, but the corresponding type will not be included in the resulting certificate.

+ +
+
-utf8
+
+ +

This option causes field values to be interpreted as UTF8 strings, by default they are interpreted as ASCII. This means that the field values, whether prompted from a terminal or obtained from a configuration file, must be valid UTF8 strings.

+ +
+
-create_serial
+
+ +

If reading serial from the text file as specified in the configuration fails, specifying this option creates a new random serial to be used as next serial number. To get random serial numbers, use the -rand_serial flag instead; this should only be used for simple error-recovery.

+ +
+
-rand_serial
+
+ +

Generate a large random number to use as the serial number. This overrides any option or configuration to use a serial number file.

+ +
+
-multivalue-rdn
+
+ +

This option causes the -subj argument to be interpreted with full support for multivalued RDNs. Example:

+ +

/DC=org/DC=OpenSSL/DC=users/UID=123456+CN=John Doe

+ +

If -multi-rdn is not used then the UID value is 123456+CN=John Doe.

+ +
+
-rand file...
+
+ +

A file or files containing random data used to seed the random number generator. Multiple files can be specified separated by an OS-dependent character. The separator is ; for MS-Windows, , for OpenVMS, and : for all others.

+ +
+
[-writerand file]
+
+ +

Writes random data to the specified file upon exit. This can be used with a subsequent -rand flag.

+ +
+
+ +

CRL OPTIONS

+ +
+ +
-gencrl
+
+ +

This option generates a CRL based on information in the index file.

+ +
+
-crldays num
+
+ +

The number of days before the next CRL is due. That is the days from now to place in the CRL nextUpdate field.

+ +
+
-crlhours num
+
+ +

The number of hours before the next CRL is due.

+ +
+
-revoke filename
+
+ +

A filename containing a certificate to revoke.

+ +
+
-valid filename
+
+ +

A filename containing a certificate to add a Valid certificate entry.

+ +
+
-status serial
+
+ +

Displays the revocation status of the certificate with the specified serial number and exits.

+ +
+
-updatedb
+
+ +

Updates the database index to purge expired certificates.

+ +
+
-crl_reason reason
+
+ +

Revocation reason, where reason is one of: unspecified, keyCompromise, CACompromise, affiliationChanged, superseded, cessationOfOperation, certificateHold or removeFromCRL. The matching of reason is case insensitive. Setting any revocation reason will make the CRL v2.

+ +

In practice removeFromCRL is not particularly useful because it is only used in delta CRLs which are not currently implemented.

+ +
+
-crl_hold instruction
+
+ +

This sets the CRL revocation reason code to certificateHold and the hold instruction to instruction which must be an OID. Although any OID can be used only holdInstructionNone (the use of which is discouraged by RFC2459) holdInstructionCallIssuer or holdInstructionReject will normally be used.

+ +
+
-crl_compromise time
+
+ +

This sets the revocation reason to keyCompromise and the compromise time to time. time should be in GeneralizedTime format that is YYYYMMDDHHMMSSZ.

+ +
+
-crl_CA_compromise time
+
+ +

This is the same as crl_compromise except the revocation reason is set to CACompromise.

+ +
+
-crlexts section
+
+ +

The section of the configuration file containing CRL extensions to include. If no CRL extension section is present then a V1 CRL is created, if the CRL extension section is present (even if it is empty) then a V2 CRL is created. The CRL extensions specified are CRL extensions and not CRL entry extensions. It should be noted that some software (for example Netscape) can't handle V2 CRLs. See x509v3_config(5) manual page for details of the extension section format.

+ +
+
+ +

CONFIGURATION FILE OPTIONS

+ +

The section of the configuration file containing options for ca is found as follows: If the -name command line option is used, then it names the section to be used. Otherwise the section to be used must be named in the default_ca option of the ca section of the configuration file (or in the default section of the configuration file). Besides default_ca, the following options are read directly from the ca section: RANDFILE preserve msie_hack With the exception of RANDFILE, this is probably a bug and may change in future releases.

+ +

Many of the configuration file options are identical to command line options. Where the option is present in the configuration file and the command line the command line value is used. Where an option is described as mandatory then it must be present in the configuration file or the command line equivalent (if any) used.

+ +
+ +
oid_file
+
+ +

This specifies a file containing additional OBJECT IDENTIFIERS. Each line of the file should consist of the numerical form of the object identifier followed by white space then the short name followed by white space and finally the long name.

+ +
+
oid_section
+
+ +

This specifies a section in the configuration file containing extra object identifiers. Each line should consist of the short name of the object identifier followed by = and the numerical form. The short and long names are the same when this option is used.

+ +
+
new_certs_dir
+
+ +

The same as the -outdir command line option. It specifies the directory where new certificates will be placed. Mandatory.

+ +
+
certificate
+
+ +

The same as -cert. It gives the file containing the CA certificate. Mandatory.

+ +
+
private_key
+
+ +

Same as the -keyfile option. The file containing the CA private key. Mandatory.

+ +
+
RANDFILE
+
+ +

At startup the specified file is loaded into the random number generator, and at exit 256 bytes will be written to it.

+ +
+
default_days
+
+ +

The same as the -days option. The number of days to certify a certificate for.

+ +
+
default_startdate
+
+ +

The same as the -startdate option. The start date to certify a certificate for. If not set the current time is used.

+ +
+
default_enddate
+
+ +

The same as the -enddate option. Either this option or default_days (or the command line equivalents) must be present.

+ +
+
default_crl_hours default_crl_days
+
+ +

The same as the -crlhours and the -crldays options. These will only be used if neither command line option is present. At least one of these must be present to generate a CRL.

+ +
+
default_md
+
+ +

The same as the -md option. Mandatory except where the signing algorithm does not require a digest (i.e. Ed25519 and Ed448).

+ +
+
database
+
+ +

The text database file to use. Mandatory. This file must be present though initially it will be empty.

+ +
+
unique_subject
+
+ +

If the value yes is given, the valid certificate entries in the database must have unique subjects. if the value no is given, several valid certificate entries may have the exact same subject. The default value is yes, to be compatible with older (pre 0.9.8) versions of OpenSSL. However, to make CA certificate roll-over easier, it's recommended to use the value no, especially if combined with the -selfsign command line option.

+ +

Note that it is valid in some circumstances for certificates to be created without any subject. In the case where there are multiple certificates without subjects this does not count as a duplicate.

+ +
+
serial
+
+ +

A text file containing the next serial number to use in hex. Mandatory. This file must be present and contain a valid serial number.

+ +
+
crlnumber
+
+ +

A text file containing the next CRL number to use in hex. The crl number will be inserted in the CRLs only if this file exists. If this file is present, it must contain a valid CRL number.

+ +
+
x509_extensions
+
+ +

The same as -extensions.

+ +
+
crl_extensions
+
+ +

The same as -crlexts.

+ +
+
preserve
+
+ +

The same as -preserveDN

+ +
+
email_in_dn
+
+ +

The same as -noemailDN. If you want the EMAIL field to be removed from the DN of the certificate simply set this to 'no'. If not present the default is to allow for the EMAIL filed in the certificate's DN.

+ +
+
msie_hack
+
+ +

The same as -msie_hack

+ +
+
policy
+
+ +

The same as -policy. Mandatory. See the POLICY FORMAT section for more information.

+ +
+
name_opt, cert_opt
+
+ +

These options allow the format used to display the certificate details when asking the user to confirm signing. All the options supported by the x509 utilities -nameopt and -certopt switches can be used here, except the no_signame and no_sigdump are permanently set and cannot be disabled (this is because the certificate signature cannot be displayed because the certificate has not been signed at this point).

+ +

For convenience the values ca_default are accepted by both to produce a reasonable output.

+ +

If neither option is present the format used in earlier versions of OpenSSL is used. Use of the old format is strongly discouraged because it only displays fields mentioned in the policy section, mishandles multicharacter string types and does not display extensions.

+ +
+
copy_extensions
+
+ +

Determines how extensions in certificate requests should be handled. If set to none or this option is not present then extensions are ignored and not copied to the certificate. If set to copy then any extensions present in the request that are not already present are copied to the certificate. If set to copyall then all extensions in the request are copied to the certificate: if the extension is already present in the certificate it is deleted first. See the WARNINGS section before using this option.

+ +

The main use of this option is to allow a certificate request to supply values for certain extensions such as subjectAltName.

+ +
+
+ +

POLICY FORMAT

+ +

The policy section consists of a set of variables corresponding to certificate DN fields. If the value is "match" then the field value must match the same field in the CA certificate. If the value is "supplied" then it must be present. If the value is "optional" then it may be present. Any fields not mentioned in the policy section are silently deleted, unless the -preserveDN option is set but this can be regarded more of a quirk than intended behaviour.

+ +

SPKAC FORMAT

+ +

The input to the -spkac command line option is a Netscape signed public key and challenge. This will usually come from the KEYGEN tag in an HTML form to create a new private key. It is however possible to create SPKACs using the spkac utility.

+ +

The file should contain the variable SPKAC set to the value of the SPKAC and also the required DN components as name value pairs. If you need to include the same component twice then it can be preceded by a number and a '.'.

+ +

When processing SPKAC format, the output is DER if the -out flag is used, but PEM format if sending to stdout or the -outdir flag is used.

+ +

EXAMPLES

+ +

Note: these examples assume that the ca directory structure is already set up and the relevant files already exist. This usually involves creating a CA certificate and private key with req, a serial number file and an empty index file and placing them in the relevant directories.

+ +

To use the sample configuration file below the directories demoCA, demoCA/private and demoCA/newcerts would be created. The CA certificate would be copied to demoCA/cacert.pem and its private key to demoCA/private/cakey.pem. A file demoCA/serial would be created containing for example "01" and the empty index file demoCA/index.txt.

+ +

Sign a certificate request:

+ +
openssl ca -in req.pem -out newcert.pem
+ +

Sign a certificate request, using CA extensions:

+ +
openssl ca -in req.pem -extensions v3_ca -out newcert.pem
+ +

Generate a CRL

+ +
openssl ca -gencrl -out crl.pem
+ +

Sign several requests:

+ +
openssl ca -infiles req1.pem req2.pem req3.pem
+ +

Certify a Netscape SPKAC:

+ +
openssl ca -spkac spkac.txt
+ +

A sample SPKAC file (the SPKAC line has been truncated for clarity):

+ +
SPKAC=MIG0MGAwXDANBgkqhkiG9w0BAQEFAANLADBIAkEAn7PDhCeV/xIxUg8V70YRxK2A5
+CN=Steve Test
+emailAddress=steve@openssl.org
+0.OU=OpenSSL Group
+1.OU=Another Group
+ +

A sample configuration file with the relevant sections for ca:

+ +
[ ca ]
+default_ca      = CA_default            # The default ca section
+
+[ CA_default ]
+
+dir            = ./demoCA              # top dir
+database       = $dir/index.txt        # index file.
+new_certs_dir  = $dir/newcerts         # new certs dir
+
+certificate    = $dir/cacert.pem       # The CA cert
+serial         = $dir/serial           # serial no file
+#rand_serial    = yes                  # for random serial#'s
+private_key    = $dir/private/cakey.pem# CA private key
+RANDFILE       = $dir/private/.rand    # random number file
+
+default_days   = 365                   # how long to certify for
+default_crl_days= 30                   # how long before next CRL
+default_md     = md5                   # md to use
+
+policy         = policy_any            # default policy
+email_in_dn    = no                    # Don't add the email into cert DN
+
+name_opt       = ca_default            # Subject name display option
+cert_opt       = ca_default            # Certificate display option
+copy_extensions = none                 # Don't copy extensions from request
+
+[ policy_any ]
+countryName            = supplied
+stateOrProvinceName    = optional
+organizationName       = optional
+organizationalUnitName = optional
+commonName             = supplied
+emailAddress           = optional
+ +

FILES

+ +

Note: the location of all files can change either by compile time options, configuration file entries, environment variables or command line options. The values below reflect the default values.

+ +
/usr/local/ssl/lib/openssl.cnf - master configuration file
+./demoCA                       - main CA directory
+./demoCA/cacert.pem            - CA certificate
+./demoCA/private/cakey.pem     - CA private key
+./demoCA/serial                - CA serial number file
+./demoCA/serial.old            - CA serial number backup file
+./demoCA/index.txt             - CA text database file
+./demoCA/index.txt.old         - CA text database backup file
+./demoCA/certs                 - certificate output file
+./demoCA/.rnd                  - CA random seed information
+ +

RESTRICTIONS

+ +

The text database index file is a critical part of the process and if corrupted it can be difficult to fix. It is theoretically possible to rebuild the index file from all the issued certificates and a current CRL: however there is no option to do this.

+ +

V2 CRL features like delta CRLs are not currently supported.

+ +

Although several requests can be input and handled at once it is only possible to include one SPKAC or self-signed certificate.

+ +

BUGS

+ +

The use of an in-memory text database can cause problems when large numbers of certificates are present because, as the name implies the database has to be kept in memory.

+ +

The ca command really needs rewriting or the required functionality exposed at either a command or interface level so a more friendly utility (perl script or GUI) can handle things properly. The script CA.pl helps a little but not very much.

+ +

Any fields in a request that are not present in a policy are silently deleted. This does not happen if the -preserveDN option is used. To enforce the absence of the EMAIL field within the DN, as suggested by RFCs, regardless the contents of the request' subject the -noemailDN option can be used. The behaviour should be more friendly and configurable.

+ +

Canceling some commands by refusing to certify a certificate can create an empty file.

+ +

WARNINGS

+ +

The ca command is quirky and at times downright unfriendly.

+ +

The ca utility was originally meant as an example of how to do things in a CA. It was not supposed to be used as a full blown CA itself: nevertheless some people are using it for this purpose.

+ +

The ca command is effectively a single user command: no locking is done on the various files and attempts to run more than one ca command on the same database can have unpredictable results.

+ +

The copy_extensions option should be used with caution. If care is not taken then it can be a security risk. For example if a certificate request contains a basicConstraints extension with CA:TRUE and the copy_extensions value is set to copyall and the user does not spot this when the certificate is displayed then this will hand the requester a valid CA certificate.

+ +

This situation can be avoided by setting copy_extensions to copy and including basicConstraints with CA:FALSE in the configuration file. Then if the request contains a basicConstraints extension it will be ignored.

+ +

It is advisable to also include values for other extensions such as keyUsage to prevent a request supplying its own values.

+ +

Additional restrictions can be placed on the CA certificate itself. For example if the CA certificate has:

+ +
basicConstraints = CA:TRUE, pathlen:0
+ +

then even if a certificate is issued with CA:TRUE it will not be valid.

+ +

HISTORY

+ +

Since OpenSSL 1.1.1, the program follows RFC5280. Specifically, certificate validity period (specified by any of -startdate, -enddate and -days) will be encoded as UTCTime if the dates are earlier than year 2049 (included), and as GeneralizedTime if the dates are in year 2050 or later.

+ +

SEE ALSO

+ +

req(1), spkac(1), x509(1), CA.pl(1), config(5), x509v3_config(5)

+ +

COPYRIGHT

+ +

Copyright 2000-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/ciphers.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/ciphers.html new file mode 100644 index 00000000..98131fc7 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/ciphers.html @@ -0,0 +1,811 @@ + + + + +ciphers + + + + + + + + + + +

NAME

+ +

openssl-ciphers, ciphers - SSL cipher display and cipher list tool

+ +

SYNOPSIS

+ +

openssl ciphers [-help] [-s] [-v] [-V] [-ssl3] [-tls1] [-tls1_1] [-tls1_2] [-tls1_3] [-s] [-psk] [-srp] [-stdname] [-convert name] [-ciphersuites val] [cipherlist]

+ +

DESCRIPTION

+ +

The ciphers command converts textual OpenSSL cipher lists into ordered SSL cipher preference lists. It can be used as a test tool to determine the appropriate cipherlist.

+ +

OPTIONS

+ +
+ +
-help
+
+ +

Print a usage message.

+ +
+
-s
+
+ +

Only list supported ciphers: those consistent with the security level, and minimum and maximum protocol version. This is closer to the actual cipher list an application will support.

+ +

PSK and SRP ciphers are not enabled by default: they require -psk or -srp to enable them.

+ +

It also does not change the default list of supported signature algorithms.

+ +

On a server the list of supported ciphers might also exclude other ciphers depending on the configured certificates and presence of DH parameters.

+ +

If this option is not used then all ciphers that match the cipherlist will be listed.

+ +
+
-psk
+
+ +

When combined with -s includes cipher suites which require PSK.

+ +
+
-srp
+
+ +

When combined with -s includes cipher suites which require SRP.

+ +
+
-v
+
+ +

Verbose output: For each cipher suite, list details as provided by SSL_CIPHER_description(3).

+ +
+
-V
+
+ +

Like -v, but include the official cipher suite values in hex.

+ +
+
-tls1_3, -tls1_2, -tls1_1, -tls1, -ssl3
+
+ +

In combination with the -s option, list the ciphers which could be used if the specified protocol were negotiated. Note that not all protocols and flags may be available, depending on how OpenSSL was built.

+ +
+
-stdname
+
+ +

Precede each cipher suite by its standard name.

+ +
+
-convert name
+
+ +

Convert a standard cipher name to its OpenSSL name.

+ +
+
-ciphersuites val
+
+ +

Sets the list of TLSv1.3 ciphersuites. This list will be combined with any TLSv1.2 and below ciphersuites that have been configured. The format for this list is a simple colon (":") separated list of TLSv1.3 ciphersuite names. By default this value is:

+ +
TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256
+ +
+
cipherlist
+
+ +

A cipher list of TLSv1.2 and below ciphersuites to convert to a cipher preference list. This list will be combined with any TLSv1.3 ciphersuites that have been configured. If it is not included then the default cipher list will be used. The format is described below.

+ +
+
+ +

CIPHER LIST FORMAT

+ +

The cipher list consists of one or more cipher strings separated by colons. Commas or spaces are also acceptable separators but colons are normally used.

+ +

The actual cipher string can take several different forms.

+ +

It can consist of a single cipher suite such as RC4-SHA.

+ +

It can represent a list of cipher suites containing a certain algorithm, or cipher suites of a certain type. For example SHA1 represents all ciphers suites using the digest algorithm SHA1 and SSLv3 represents all SSL v3 algorithms.

+ +

Lists of cipher suites can be combined in a single cipher string using the + character. This is used as a logical and operation. For example SHA1+DES represents all cipher suites containing the SHA1 and the DES algorithms.

+ +

Each cipher string can be optionally preceded by the characters !, - or +.

+ +

If ! is used then the ciphers are permanently deleted from the list. The ciphers deleted can never reappear in the list even if they are explicitly stated.

+ +

If - is used then the ciphers are deleted from the list, but some or all of the ciphers can be added again by later options.

+ +

If + is used then the ciphers are moved to the end of the list. This option doesn't add any new ciphers it just moves matching existing ones.

+ +

If none of these characters is present then the string is just interpreted as a list of ciphers to be appended to the current preference list. If the list includes any ciphers already present they will be ignored: that is they will not moved to the end of the list.

+ +

The cipher string @STRENGTH can be used at any point to sort the current cipher list in order of encryption algorithm key length.

+ +

The cipher string @SECLEVEL=n can be used at any point to set the security level to n, which should be a number between zero and five, inclusive. See SSL_CTX_set_security_level for a description of what each level means.

+ +

The cipher list can be prefixed with the DEFAULT keyword, which enables the default cipher list as defined below. Unlike cipher strings, this prefix may not be combined with other strings using + character. For example, DEFAULT+DES is not valid.

+ +

The content of the default list is determined at compile time and normally corresponds to ALL:!COMPLEMENTOFDEFAULT:!eNULL.

+ +

CIPHER STRINGS

+ +

The following is a list of all permitted cipher strings and their meanings.

+ +
+ +
COMPLEMENTOFDEFAULT
+
+ +

The ciphers included in ALL, but not enabled by default. Currently this includes all RC4 and anonymous ciphers. Note that this rule does not cover eNULL, which is not included by ALL (use COMPLEMENTOFALL if necessary). Note that RC4 based cipher suites are not built into OpenSSL by default (see the enable-weak-ssl-ciphers option to Configure).

+ +
+
ALL
+
+ +

All cipher suites except the eNULL ciphers (which must be explicitly enabled if needed). As of OpenSSL 1.0.0, the ALL cipher suites are sensibly ordered by default.

+ +
+
COMPLEMENTOFALL
+
+ +

The cipher suites not enabled by ALL, currently eNULL.

+ +
+
HIGH
+
+ +

"High" encryption cipher suites. This currently means those with key lengths larger than 128 bits, and some cipher suites with 128-bit keys.

+ +
+
MEDIUM
+
+ +

"Medium" encryption cipher suites, currently some of those using 128 bit encryption.

+ +
+
LOW
+
+ +

"Low" encryption cipher suites, currently those using 64 or 56 bit encryption algorithms but excluding export cipher suites. All these cipher suites have been removed as of OpenSSL 1.1.0.

+ +
+
eNULL, NULL
+
+ +

The "NULL" ciphers that is those offering no encryption. Because these offer no encryption at all and are a security risk they are not enabled via either the DEFAULT or ALL cipher strings. Be careful when building cipherlists out of lower-level primitives such as kRSA or aECDSA as these do overlap with the eNULL ciphers. When in doubt, include !eNULL in your cipherlist.

+ +
+
aNULL
+
+ +

The cipher suites offering no authentication. This is currently the anonymous DH algorithms and anonymous ECDH algorithms. These cipher suites are vulnerable to "man in the middle" attacks and so their use is discouraged. These are excluded from the DEFAULT ciphers, but included in the ALL ciphers. Be careful when building cipherlists out of lower-level primitives such as kDHE or AES as these do overlap with the aNULL ciphers. When in doubt, include !aNULL in your cipherlist.

+ +
+
kRSA, aRSA, RSA
+
+ +

Cipher suites using RSA key exchange or authentication. RSA is an alias for kRSA.

+ +
+
kDHr, kDHd, kDH
+
+ +

Cipher suites using static DH key agreement and DH certificates signed by CAs with RSA and DSS keys or either respectively. All these cipher suites have been removed in OpenSSL 1.1.0.

+ +
+
kDHE, kEDH, DH
+
+ +

Cipher suites using ephemeral DH key agreement, including anonymous cipher suites.

+ +
+
DHE, EDH
+
+ +

Cipher suites using authenticated ephemeral DH key agreement.

+ +
+
ADH
+
+ +

Anonymous DH cipher suites, note that this does not include anonymous Elliptic Curve DH (ECDH) cipher suites.

+ +
+
kEECDH, kECDHE, ECDH
+
+ +

Cipher suites using ephemeral ECDH key agreement, including anonymous cipher suites.

+ +
+
ECDHE, EECDH
+
+ +

Cipher suites using authenticated ephemeral ECDH key agreement.

+ +
+
AECDH
+
+ +

Anonymous Elliptic Curve Diffie-Hellman cipher suites.

+ +
+
aDSS, DSS
+
+ +

Cipher suites using DSS authentication, i.e. the certificates carry DSS keys.

+ +
+
aDH
+
+ +

Cipher suites effectively using DH authentication, i.e. the certificates carry DH keys. All these cipher suites have been removed in OpenSSL 1.1.0.

+ +
+
aECDSA, ECDSA
+
+ +

Cipher suites using ECDSA authentication, i.e. the certificates carry ECDSA keys.

+ +
+
TLSv1.2, TLSv1.0, SSLv3
+
+ +

Lists cipher suites which are only supported in at least TLS v1.2, TLS v1.0 or SSL v3.0 respectively. Note: there are no cipher suites specific to TLS v1.1. Since this is only the minimum version, if, for example, TLSv1.0 is negotiated then both TLSv1.0 and SSLv3.0 cipher suites are available.

+ +

Note: these cipher strings do not change the negotiated version of SSL or TLS, they only affect the list of available cipher suites.

+ +
+
AES128, AES256, AES
+
+ +

cipher suites using 128 bit AES, 256 bit AES or either 128 or 256 bit AES.

+ +
+
AESGCM
+
+ +

AES in Galois Counter Mode (GCM): these cipher suites are only supported in TLS v1.2.

+ +
+
AESCCM, AESCCM8
+
+ +

AES in Cipher Block Chaining - Message Authentication Mode (CCM): these cipher suites are only supported in TLS v1.2. AESCCM references CCM cipher suites using both 16 and 8 octet Integrity Check Value (ICV) while AESCCM8 only references 8 octet ICV.

+ +
+
ARIA128, ARIA256, ARIA
+
+ +

Cipher suites using 128 bit ARIA, 256 bit ARIA or either 128 or 256 bit ARIA.

+ +
+
CAMELLIA128, CAMELLIA256, CAMELLIA
+
+ +

Cipher suites using 128 bit CAMELLIA, 256 bit CAMELLIA or either 128 or 256 bit CAMELLIA.

+ +
+
CHACHA20
+
+ +

Cipher suites using ChaCha20.

+ +
+
3DES
+
+ +

Cipher suites using triple DES.

+ +
+
DES
+
+ +

Cipher suites using DES (not triple DES). All these cipher suites have been removed in OpenSSL 1.1.0.

+ +
+
RC4
+
+ +

Cipher suites using RC4.

+ +
+
RC2
+
+ +

Cipher suites using RC2.

+ +
+
IDEA
+
+ +

Cipher suites using IDEA.

+ +
+
SEED
+
+ +

Cipher suites using SEED.

+ +
+
MD5
+
+ +

Cipher suites using MD5.

+ +
+
SHA1, SHA
+
+ +

Cipher suites using SHA1.

+ +
+
SHA256, SHA384
+
+ +

Cipher suites using SHA256 or SHA384.

+ +
+
aGOST
+
+ +

Cipher suites using GOST R 34.10 (either 2001 or 94) for authentication (needs an engine supporting GOST algorithms).

+ +
+
aGOST01
+
+ +

Cipher suites using GOST R 34.10-2001 authentication.

+ +
+
kGOST
+
+ +

Cipher suites, using VKO 34.10 key exchange, specified in the RFC 4357.

+ +
+
GOST94
+
+ +

Cipher suites, using HMAC based on GOST R 34.11-94.

+ +
+
GOST89MAC
+
+ +

Cipher suites using GOST 28147-89 MAC instead of HMAC.

+ +
+
PSK
+
+ +

All cipher suites using pre-shared keys (PSK).

+ +
+
kPSK, kECDHEPSK, kDHEPSK, kRSAPSK
+
+ +

Cipher suites using PSK key exchange, ECDHE_PSK, DHE_PSK or RSA_PSK.

+ +
+
aPSK
+
+ +

Cipher suites using PSK authentication (currently all PSK modes apart from RSA_PSK).

+ +
+
SUITEB128, SUITEB128ONLY, SUITEB192
+
+ +

Enables suite B mode of operation using 128 (permitting 192 bit mode by peer) 128 bit (not permitting 192 bit by peer) or 192 bit level of security respectively. If used these cipherstrings should appear first in the cipher list and anything after them is ignored. Setting Suite B mode has additional consequences required to comply with RFC6460. In particular the supported signature algorithms is reduced to support only ECDSA and SHA256 or SHA384, only the elliptic curves P-256 and P-384 can be used and only the two suite B compliant cipher suites (ECDHE-ECDSA-AES128-GCM-SHA256 and ECDHE-ECDSA-AES256-GCM-SHA384) are permissible.

+ +
+
+ +

CIPHER SUITE NAMES

+ +

The following lists give the SSL or TLS cipher suites names from the relevant specification and their OpenSSL equivalents. It should be noted, that several cipher suite names do not include the authentication used, e.g. DES-CBC3-SHA. In these cases, RSA authentication is used.

+ +

SSL v3.0 cipher suites

+ +
SSL_RSA_WITH_NULL_MD5                   NULL-MD5
+SSL_RSA_WITH_NULL_SHA                   NULL-SHA
+SSL_RSA_WITH_RC4_128_MD5                RC4-MD5
+SSL_RSA_WITH_RC4_128_SHA                RC4-SHA
+SSL_RSA_WITH_IDEA_CBC_SHA               IDEA-CBC-SHA
+SSL_RSA_WITH_3DES_EDE_CBC_SHA           DES-CBC3-SHA
+
+SSL_DH_DSS_WITH_3DES_EDE_CBC_SHA        DH-DSS-DES-CBC3-SHA
+SSL_DH_RSA_WITH_3DES_EDE_CBC_SHA        DH-RSA-DES-CBC3-SHA
+SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA       DHE-DSS-DES-CBC3-SHA
+SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA       DHE-RSA-DES-CBC3-SHA
+
+SSL_DH_anon_WITH_RC4_128_MD5            ADH-RC4-MD5
+SSL_DH_anon_WITH_3DES_EDE_CBC_SHA       ADH-DES-CBC3-SHA
+
+SSL_FORTEZZA_KEA_WITH_NULL_SHA          Not implemented.
+SSL_FORTEZZA_KEA_WITH_FORTEZZA_CBC_SHA  Not implemented.
+SSL_FORTEZZA_KEA_WITH_RC4_128_SHA       Not implemented.
+ +

TLS v1.0 cipher suites

+ +
TLS_RSA_WITH_NULL_MD5                   NULL-MD5
+TLS_RSA_WITH_NULL_SHA                   NULL-SHA
+TLS_RSA_WITH_RC4_128_MD5                RC4-MD5
+TLS_RSA_WITH_RC4_128_SHA                RC4-SHA
+TLS_RSA_WITH_IDEA_CBC_SHA               IDEA-CBC-SHA
+TLS_RSA_WITH_3DES_EDE_CBC_SHA           DES-CBC3-SHA
+
+TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA        Not implemented.
+TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA        Not implemented.
+TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA       DHE-DSS-DES-CBC3-SHA
+TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA       DHE-RSA-DES-CBC3-SHA
+
+TLS_DH_anon_WITH_RC4_128_MD5            ADH-RC4-MD5
+TLS_DH_anon_WITH_3DES_EDE_CBC_SHA       ADH-DES-CBC3-SHA
+ +

AES cipher suites from RFC3268, extending TLS v1.0

+ +
TLS_RSA_WITH_AES_128_CBC_SHA            AES128-SHA
+TLS_RSA_WITH_AES_256_CBC_SHA            AES256-SHA
+
+TLS_DH_DSS_WITH_AES_128_CBC_SHA         DH-DSS-AES128-SHA
+TLS_DH_DSS_WITH_AES_256_CBC_SHA         DH-DSS-AES256-SHA
+TLS_DH_RSA_WITH_AES_128_CBC_SHA         DH-RSA-AES128-SHA
+TLS_DH_RSA_WITH_AES_256_CBC_SHA         DH-RSA-AES256-SHA
+
+TLS_DHE_DSS_WITH_AES_128_CBC_SHA        DHE-DSS-AES128-SHA
+TLS_DHE_DSS_WITH_AES_256_CBC_SHA        DHE-DSS-AES256-SHA
+TLS_DHE_RSA_WITH_AES_128_CBC_SHA        DHE-RSA-AES128-SHA
+TLS_DHE_RSA_WITH_AES_256_CBC_SHA        DHE-RSA-AES256-SHA
+
+TLS_DH_anon_WITH_AES_128_CBC_SHA        ADH-AES128-SHA
+TLS_DH_anon_WITH_AES_256_CBC_SHA        ADH-AES256-SHA
+ +

Camellia cipher suites from RFC4132, extending TLS v1.0

+ +
TLS_RSA_WITH_CAMELLIA_128_CBC_SHA      CAMELLIA128-SHA
+TLS_RSA_WITH_CAMELLIA_256_CBC_SHA      CAMELLIA256-SHA
+
+TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA   DH-DSS-CAMELLIA128-SHA
+TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA   DH-DSS-CAMELLIA256-SHA
+TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA   DH-RSA-CAMELLIA128-SHA
+TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA   DH-RSA-CAMELLIA256-SHA
+
+TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA  DHE-DSS-CAMELLIA128-SHA
+TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA  DHE-DSS-CAMELLIA256-SHA
+TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA  DHE-RSA-CAMELLIA128-SHA
+TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA  DHE-RSA-CAMELLIA256-SHA
+
+TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA  ADH-CAMELLIA128-SHA
+TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA  ADH-CAMELLIA256-SHA
+ +

SEED cipher suites from RFC4162, extending TLS v1.0

+ +
TLS_RSA_WITH_SEED_CBC_SHA              SEED-SHA
+
+TLS_DH_DSS_WITH_SEED_CBC_SHA           DH-DSS-SEED-SHA
+TLS_DH_RSA_WITH_SEED_CBC_SHA           DH-RSA-SEED-SHA
+
+TLS_DHE_DSS_WITH_SEED_CBC_SHA          DHE-DSS-SEED-SHA
+TLS_DHE_RSA_WITH_SEED_CBC_SHA          DHE-RSA-SEED-SHA
+
+TLS_DH_anon_WITH_SEED_CBC_SHA          ADH-SEED-SHA
+ +

GOST cipher suites from draft-chudov-cryptopro-cptls, extending TLS v1.0

+ +

Note: these ciphers require an engine which including GOST cryptographic algorithms, such as the ccgost engine, included in the OpenSSL distribution.

+ +
TLS_GOSTR341094_WITH_28147_CNT_IMIT GOST94-GOST89-GOST89
+TLS_GOSTR341001_WITH_28147_CNT_IMIT GOST2001-GOST89-GOST89
+TLS_GOSTR341094_WITH_NULL_GOSTR3411 GOST94-NULL-GOST94
+TLS_GOSTR341001_WITH_NULL_GOSTR3411 GOST2001-NULL-GOST94
+ +

Additional Export 1024 and other cipher suites

+ +

Note: these ciphers can also be used in SSL v3.

+ +
TLS_DHE_DSS_WITH_RC4_128_SHA            DHE-DSS-RC4-SHA
+ +

Elliptic curve cipher suites.

+ +
TLS_ECDHE_RSA_WITH_NULL_SHA             ECDHE-RSA-NULL-SHA
+TLS_ECDHE_RSA_WITH_RC4_128_SHA          ECDHE-RSA-RC4-SHA
+TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA     ECDHE-RSA-DES-CBC3-SHA
+TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA      ECDHE-RSA-AES128-SHA
+TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA      ECDHE-RSA-AES256-SHA
+
+TLS_ECDHE_ECDSA_WITH_NULL_SHA           ECDHE-ECDSA-NULL-SHA
+TLS_ECDHE_ECDSA_WITH_RC4_128_SHA        ECDHE-ECDSA-RC4-SHA
+TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA   ECDHE-ECDSA-DES-CBC3-SHA
+TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA    ECDHE-ECDSA-AES128-SHA
+TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA    ECDHE-ECDSA-AES256-SHA
+
+TLS_ECDH_anon_WITH_NULL_SHA             AECDH-NULL-SHA
+TLS_ECDH_anon_WITH_RC4_128_SHA          AECDH-RC4-SHA
+TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA     AECDH-DES-CBC3-SHA
+TLS_ECDH_anon_WITH_AES_128_CBC_SHA      AECDH-AES128-SHA
+TLS_ECDH_anon_WITH_AES_256_CBC_SHA      AECDH-AES256-SHA
+ +

TLS v1.2 cipher suites

+ +
TLS_RSA_WITH_NULL_SHA256                  NULL-SHA256
+
+TLS_RSA_WITH_AES_128_CBC_SHA256           AES128-SHA256
+TLS_RSA_WITH_AES_256_CBC_SHA256           AES256-SHA256
+TLS_RSA_WITH_AES_128_GCM_SHA256           AES128-GCM-SHA256
+TLS_RSA_WITH_AES_256_GCM_SHA384           AES256-GCM-SHA384
+
+TLS_DH_RSA_WITH_AES_128_CBC_SHA256        DH-RSA-AES128-SHA256
+TLS_DH_RSA_WITH_AES_256_CBC_SHA256        DH-RSA-AES256-SHA256
+TLS_DH_RSA_WITH_AES_128_GCM_SHA256        DH-RSA-AES128-GCM-SHA256
+TLS_DH_RSA_WITH_AES_256_GCM_SHA384        DH-RSA-AES256-GCM-SHA384
+
+TLS_DH_DSS_WITH_AES_128_CBC_SHA256        DH-DSS-AES128-SHA256
+TLS_DH_DSS_WITH_AES_256_CBC_SHA256        DH-DSS-AES256-SHA256
+TLS_DH_DSS_WITH_AES_128_GCM_SHA256        DH-DSS-AES128-GCM-SHA256
+TLS_DH_DSS_WITH_AES_256_GCM_SHA384        DH-DSS-AES256-GCM-SHA384
+
+TLS_DHE_RSA_WITH_AES_128_CBC_SHA256       DHE-RSA-AES128-SHA256
+TLS_DHE_RSA_WITH_AES_256_CBC_SHA256       DHE-RSA-AES256-SHA256
+TLS_DHE_RSA_WITH_AES_128_GCM_SHA256       DHE-RSA-AES128-GCM-SHA256
+TLS_DHE_RSA_WITH_AES_256_GCM_SHA384       DHE-RSA-AES256-GCM-SHA384
+
+TLS_DHE_DSS_WITH_AES_128_CBC_SHA256       DHE-DSS-AES128-SHA256
+TLS_DHE_DSS_WITH_AES_256_CBC_SHA256       DHE-DSS-AES256-SHA256
+TLS_DHE_DSS_WITH_AES_128_GCM_SHA256       DHE-DSS-AES128-GCM-SHA256
+TLS_DHE_DSS_WITH_AES_256_GCM_SHA384       DHE-DSS-AES256-GCM-SHA384
+
+TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256     ECDHE-RSA-AES128-SHA256
+TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384     ECDHE-RSA-AES256-SHA384
+TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256     ECDHE-RSA-AES128-GCM-SHA256
+TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384     ECDHE-RSA-AES256-GCM-SHA384
+
+TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256   ECDHE-ECDSA-AES128-SHA256
+TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384   ECDHE-ECDSA-AES256-SHA384
+TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256   ECDHE-ECDSA-AES128-GCM-SHA256
+TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384   ECDHE-ECDSA-AES256-GCM-SHA384
+
+TLS_DH_anon_WITH_AES_128_CBC_SHA256       ADH-AES128-SHA256
+TLS_DH_anon_WITH_AES_256_CBC_SHA256       ADH-AES256-SHA256
+TLS_DH_anon_WITH_AES_128_GCM_SHA256       ADH-AES128-GCM-SHA256
+TLS_DH_anon_WITH_AES_256_GCM_SHA384       ADH-AES256-GCM-SHA384
+
+RSA_WITH_AES_128_CCM                      AES128-CCM
+RSA_WITH_AES_256_CCM                      AES256-CCM
+DHE_RSA_WITH_AES_128_CCM                  DHE-RSA-AES128-CCM
+DHE_RSA_WITH_AES_256_CCM                  DHE-RSA-AES256-CCM
+RSA_WITH_AES_128_CCM_8                    AES128-CCM8
+RSA_WITH_AES_256_CCM_8                    AES256-CCM8
+DHE_RSA_WITH_AES_128_CCM_8                DHE-RSA-AES128-CCM8
+DHE_RSA_WITH_AES_256_CCM_8                DHE-RSA-AES256-CCM8
+ECDHE_ECDSA_WITH_AES_128_CCM              ECDHE-ECDSA-AES128-CCM
+ECDHE_ECDSA_WITH_AES_256_CCM              ECDHE-ECDSA-AES256-CCM
+ECDHE_ECDSA_WITH_AES_128_CCM_8            ECDHE-ECDSA-AES128-CCM8
+ECDHE_ECDSA_WITH_AES_256_CCM_8            ECDHE-ECDSA-AES256-CCM8
+ +

ARIA cipher suites from RFC6209, extending TLS v1.2

+ +

Note: the CBC modes mentioned in this RFC are not supported.

+ +
TLS_RSA_WITH_ARIA_128_GCM_SHA256          ARIA128-GCM-SHA256
+TLS_RSA_WITH_ARIA_256_GCM_SHA384          ARIA256-GCM-SHA384
+TLS_DHE_RSA_WITH_ARIA_128_GCM_SHA256      DHE-RSA-ARIA128-GCM-SHA256
+TLS_DHE_RSA_WITH_ARIA_256_GCM_SHA384      DHE-RSA-ARIA256-GCM-SHA384
+TLS_DHE_DSS_WITH_ARIA_128_GCM_SHA256      DHE-DSS-ARIA128-GCM-SHA256
+TLS_DHE_DSS_WITH_ARIA_256_GCM_SHA384      DHE-DSS-ARIA256-GCM-SHA384
+TLS_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256  ECDHE-ECDSA-ARIA128-GCM-SHA256
+TLS_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384  ECDHE-ECDSA-ARIA256-GCM-SHA384
+TLS_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256    ECDHE-ARIA128-GCM-SHA256
+TLS_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384    ECDHE-ARIA256-GCM-SHA384
+TLS_PSK_WITH_ARIA_128_GCM_SHA256          PSK-ARIA128-GCM-SHA256
+TLS_PSK_WITH_ARIA_256_GCM_SHA384          PSK-ARIA256-GCM-SHA384
+TLS_DHE_PSK_WITH_ARIA_128_GCM_SHA256      DHE-PSK-ARIA128-GCM-SHA256
+TLS_DHE_PSK_WITH_ARIA_256_GCM_SHA384      DHE-PSK-ARIA256-GCM-SHA384
+TLS_RSA_PSK_WITH_ARIA_128_GCM_SHA256      RSA-PSK-ARIA128-GCM-SHA256
+TLS_RSA_PSK_WITH_ARIA_256_GCM_SHA384      RSA-PSK-ARIA256-GCM-SHA384
+ +

Camellia HMAC-Based cipher suites from RFC6367, extending TLS v1.2

+ +
TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 ECDHE-ECDSA-CAMELLIA128-SHA256
+TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 ECDHE-ECDSA-CAMELLIA256-SHA384
+TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256   ECDHE-RSA-CAMELLIA128-SHA256
+TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384   ECDHE-RSA-CAMELLIA256-SHA384
+ +

Pre-shared keying (PSK) cipher suites

+ +
PSK_WITH_NULL_SHA                         PSK-NULL-SHA
+DHE_PSK_WITH_NULL_SHA                     DHE-PSK-NULL-SHA
+RSA_PSK_WITH_NULL_SHA                     RSA-PSK-NULL-SHA
+
+PSK_WITH_RC4_128_SHA                      PSK-RC4-SHA
+PSK_WITH_3DES_EDE_CBC_SHA                 PSK-3DES-EDE-CBC-SHA
+PSK_WITH_AES_128_CBC_SHA                  PSK-AES128-CBC-SHA
+PSK_WITH_AES_256_CBC_SHA                  PSK-AES256-CBC-SHA
+
+DHE_PSK_WITH_RC4_128_SHA                  DHE-PSK-RC4-SHA
+DHE_PSK_WITH_3DES_EDE_CBC_SHA             DHE-PSK-3DES-EDE-CBC-SHA
+DHE_PSK_WITH_AES_128_CBC_SHA              DHE-PSK-AES128-CBC-SHA
+DHE_PSK_WITH_AES_256_CBC_SHA              DHE-PSK-AES256-CBC-SHA
+
+RSA_PSK_WITH_RC4_128_SHA                  RSA-PSK-RC4-SHA
+RSA_PSK_WITH_3DES_EDE_CBC_SHA             RSA-PSK-3DES-EDE-CBC-SHA
+RSA_PSK_WITH_AES_128_CBC_SHA              RSA-PSK-AES128-CBC-SHA
+RSA_PSK_WITH_AES_256_CBC_SHA              RSA-PSK-AES256-CBC-SHA
+
+PSK_WITH_AES_128_GCM_SHA256               PSK-AES128-GCM-SHA256
+PSK_WITH_AES_256_GCM_SHA384               PSK-AES256-GCM-SHA384
+DHE_PSK_WITH_AES_128_GCM_SHA256           DHE-PSK-AES128-GCM-SHA256
+DHE_PSK_WITH_AES_256_GCM_SHA384           DHE-PSK-AES256-GCM-SHA384
+RSA_PSK_WITH_AES_128_GCM_SHA256           RSA-PSK-AES128-GCM-SHA256
+RSA_PSK_WITH_AES_256_GCM_SHA384           RSA-PSK-AES256-GCM-SHA384
+
+PSK_WITH_AES_128_CBC_SHA256               PSK-AES128-CBC-SHA256
+PSK_WITH_AES_256_CBC_SHA384               PSK-AES256-CBC-SHA384
+PSK_WITH_NULL_SHA256                      PSK-NULL-SHA256
+PSK_WITH_NULL_SHA384                      PSK-NULL-SHA384
+DHE_PSK_WITH_AES_128_CBC_SHA256           DHE-PSK-AES128-CBC-SHA256
+DHE_PSK_WITH_AES_256_CBC_SHA384           DHE-PSK-AES256-CBC-SHA384
+DHE_PSK_WITH_NULL_SHA256                  DHE-PSK-NULL-SHA256
+DHE_PSK_WITH_NULL_SHA384                  DHE-PSK-NULL-SHA384
+RSA_PSK_WITH_AES_128_CBC_SHA256           RSA-PSK-AES128-CBC-SHA256
+RSA_PSK_WITH_AES_256_CBC_SHA384           RSA-PSK-AES256-CBC-SHA384
+RSA_PSK_WITH_NULL_SHA256                  RSA-PSK-NULL-SHA256
+RSA_PSK_WITH_NULL_SHA384                  RSA-PSK-NULL-SHA384
+PSK_WITH_AES_128_GCM_SHA256               PSK-AES128-GCM-SHA256
+PSK_WITH_AES_256_GCM_SHA384               PSK-AES256-GCM-SHA384
+
+ECDHE_PSK_WITH_RC4_128_SHA                ECDHE-PSK-RC4-SHA
+ECDHE_PSK_WITH_3DES_EDE_CBC_SHA           ECDHE-PSK-3DES-EDE-CBC-SHA
+ECDHE_PSK_WITH_AES_128_CBC_SHA            ECDHE-PSK-AES128-CBC-SHA
+ECDHE_PSK_WITH_AES_256_CBC_SHA            ECDHE-PSK-AES256-CBC-SHA
+ECDHE_PSK_WITH_AES_128_CBC_SHA256         ECDHE-PSK-AES128-CBC-SHA256
+ECDHE_PSK_WITH_AES_256_CBC_SHA384         ECDHE-PSK-AES256-CBC-SHA384
+ECDHE_PSK_WITH_NULL_SHA                   ECDHE-PSK-NULL-SHA
+ECDHE_PSK_WITH_NULL_SHA256                ECDHE-PSK-NULL-SHA256
+ECDHE_PSK_WITH_NULL_SHA384                ECDHE-PSK-NULL-SHA384
+
+PSK_WITH_CAMELLIA_128_CBC_SHA256          PSK-CAMELLIA128-SHA256
+PSK_WITH_CAMELLIA_256_CBC_SHA384          PSK-CAMELLIA256-SHA384
+
+DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256      DHE-PSK-CAMELLIA128-SHA256
+DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384      DHE-PSK-CAMELLIA256-SHA384
+
+RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256      RSA-PSK-CAMELLIA128-SHA256
+RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384      RSA-PSK-CAMELLIA256-SHA384
+
+ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256    ECDHE-PSK-CAMELLIA128-SHA256
+ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384    ECDHE-PSK-CAMELLIA256-SHA384
+
+PSK_WITH_AES_128_CCM                      PSK-AES128-CCM
+PSK_WITH_AES_256_CCM                      PSK-AES256-CCM
+DHE_PSK_WITH_AES_128_CCM                  DHE-PSK-AES128-CCM
+DHE_PSK_WITH_AES_256_CCM                  DHE-PSK-AES256-CCM
+PSK_WITH_AES_128_CCM_8                    PSK-AES128-CCM8
+PSK_WITH_AES_256_CCM_8                    PSK-AES256-CCM8
+DHE_PSK_WITH_AES_128_CCM_8                DHE-PSK-AES128-CCM8
+DHE_PSK_WITH_AES_256_CCM_8                DHE-PSK-AES256-CCM8
+ +

ChaCha20-Poly1305 cipher suites, extending TLS v1.2

+ +
TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256      ECDHE-RSA-CHACHA20-POLY1305
+TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256    ECDHE-ECDSA-CHACHA20-POLY1305
+TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256        DHE-RSA-CHACHA20-POLY1305
+TLS_PSK_WITH_CHACHA20_POLY1305_SHA256            PSK-CHACHA20-POLY1305
+TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256      ECDHE-PSK-CHACHA20-POLY1305
+TLS_DHE_PSK_WITH_CHACHA20_POLY1305_SHA256        DHE-PSK-CHACHA20-POLY1305
+TLS_RSA_PSK_WITH_CHACHA20_POLY1305_SHA256        RSA-PSK-CHACHA20-POLY1305
+ +

TLS v1.3 cipher suites

+ +
TLS_AES_128_GCM_SHA256                     TLS_AES_128_GCM_SHA256
+TLS_AES_256_GCM_SHA384                     TLS_AES_256_GCM_SHA384
+TLS_CHACHA20_POLY1305_SHA256               TLS_CHACHA20_POLY1305_SHA256
+TLS_AES_128_CCM_SHA256                     TLS_AES_128_CCM_SHA256
+TLS_AES_128_CCM_8_SHA256                   TLS_AES_128_CCM_8_SHA256
+ +

Older names used by OpenSSL

+ +

The following names are accepted by older releases:

+ +
SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA    EDH-RSA-DES-CBC3-SHA (DHE-RSA-DES-CBC3-SHA)
+SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA    EDH-DSS-DES-CBC3-SHA (DHE-DSS-DES-CBC3-SHA)
+ +

NOTES

+ +

Some compiled versions of OpenSSL may not include all the ciphers listed here because some ciphers were excluded at compile time.

+ +

EXAMPLES

+ +

Verbose listing of all OpenSSL ciphers including NULL ciphers:

+ +
openssl ciphers -v 'ALL:eNULL'
+ +

Include all ciphers except NULL and anonymous DH then sort by strength:

+ +
openssl ciphers -v 'ALL:!ADH:@STRENGTH'
+ +

Include all ciphers except ones with no encryption (eNULL) or no authentication (aNULL):

+ +
openssl ciphers -v 'ALL:!aNULL'
+ +

Include only 3DES ciphers and then place RSA ciphers last:

+ +
openssl ciphers -v '3DES:+RSA'
+ +

Include all RC4 ciphers but leave out those without authentication:

+ +
openssl ciphers -v 'RC4:!COMPLEMENTOFDEFAULT'
+ +

Include all ciphers with RSA authentication but leave out ciphers without encryption.

+ +
openssl ciphers -v 'RSA:!COMPLEMENTOFALL'
+ +

Set security level to 2 and display all ciphers consistent with level 2:

+ +
openssl ciphers -s -v 'ALL:@SECLEVEL=2'
+ +

SEE ALSO

+ +

s_client(1), s_server(1), ssl(7)

+ +

HISTORY

+ +

The -V option for the ciphers command was added in OpenSSL 1.0.0.

+ +

The -stdname is only available if OpenSSL is built with tracing enabled (enable-ssl-trace argument to Configure) before OpenSSL 1.1.1.

+ +

The -convert option was added in OpenSSL 1.1.1.

+ +

COPYRIGHT

+ +

Copyright 2000-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/cms.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/cms.html new file mode 100644 index 00000000..28ef380c --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/cms.html @@ -0,0 +1,636 @@ + + + + +cms + + + + + + + + + + +

NAME

+ +

openssl-cms, cms - CMS utility

+ +

SYNOPSIS

+ +

openssl cms [-help] [-encrypt] [-decrypt] [-sign] [-verify] [-cmsout] [-resign] [-data_create] [-data_out] [-digest_create] [-digest_verify] [-compress] [-uncompress] [-EncryptedData_encrypt] [-sign_receipt] [-verify_receipt receipt] [-in filename] [-inform SMIME|PEM|DER] [-rctform SMIME|PEM|DER] [-out filename] [-outform SMIME|PEM|DER] [-stream -indef -noindef] [-noindef] [-content filename] [-text] [-noout] [-print] [-CAfile file] [-CApath dir] [-no-CAfile] [-no-CApath] [-attime timestamp] [-check_ss_sig] [-crl_check] [-crl_check_all] [-explicit_policy] [-extended_crl] [-ignore_critical] [-inhibit_any] [-inhibit_map] [-no_check_time] [-partial_chain] [-policy arg] [-policy_check] [-policy_print] [-purpose purpose] [-suiteB_128] [-suiteB_128_only] [-suiteB_192] [-trusted_first] [-no_alt_chains] [-use_deltas] [-auth_level num] [-verify_depth num] [-verify_email email] [-verify_hostname hostname] [-verify_ip ip] [-verify_name name] [-x509_strict] [-md digest] [-cipher] [-nointern] [-noverify] [-nocerts] [-noattr] [-nosmimecap] [-binary] [-crlfeol] [-asciicrlf] [-nodetach] [-certfile file] [-certsout file] [-signer file] [-recip file] [-keyid] [-receipt_request_all] [-receipt_request_first] [-receipt_request_from emailaddress] [-receipt_request_to emailaddress] [-receipt_request_print] [-secretkey key] [-secretkeyid id] [-econtent_type type] [-inkey file] [-keyopt name:parameter] [-passin arg] [-rand file...] [-writerand file] [cert.pem...] [-to addr] [-from addr] [-subject subj] [cert.pem]...

+ +

DESCRIPTION

+ +

The cms command handles S/MIME v3.1 mail. It can encrypt, decrypt, sign and verify, compress and uncompress S/MIME messages.

+ +

OPTIONS

+ +

There are fourteen operation options that set the type of operation to be performed. The meaning of the other options varies according to the operation type.

+ +
+ +
-help
+
+ +

Print out a usage message.

+ +
+
-encrypt
+
+ +

Encrypt mail for the given recipient certificates. Input file is the message to be encrypted. The output file is the encrypted mail in MIME format. The actual CMS type is <B>EnvelopedData<B>.

+ +

Note that no revocation check is done for the recipient cert, so if that key has been compromised, others may be able to decrypt the text.

+ +
+
-decrypt
+
+ +

Decrypt mail using the supplied certificate and private key. Expects an encrypted mail message in MIME format for the input file. The decrypted mail is written to the output file.

+ +
+
-debug_decrypt
+
+ +

This option sets the CMS_DEBUG_DECRYPT flag. This option should be used with caution: see the notes section below.

+ +
+
-sign
+
+ +

Sign mail using the supplied certificate and private key. Input file is the message to be signed. The signed message in MIME format is written to the output file.

+ +
+
-verify
+
+ +

Verify signed mail. Expects a signed mail message on input and outputs the signed data. Both clear text and opaque signing is supported.

+ +
+
-cmsout
+
+ +

Takes an input message and writes out a PEM encoded CMS structure.

+ +
+
-resign
+
+ +

Resign a message: take an existing message and one or more new signers.

+ +
+
-data_create
+
+ +

Create a CMS Data type.

+ +
+
-data_out
+
+ +

Data type and output the content.

+ +
+
-digest_create
+
+ +

Create a CMS DigestedData type.

+ +
+
-digest_verify
+
+ +

Verify a CMS DigestedData type and output the content.

+ +
+
-compress
+
+ +

Create a CMS CompressedData type. OpenSSL must be compiled with zlib support for this option to work, otherwise it will output an error.

+ +
+
-uncompress
+
+ +

Uncompress a CMS CompressedData type and output the content. OpenSSL must be compiled with zlib support for this option to work, otherwise it will output an error.

+ +
+
-EncryptedData_encrypt
+
+ +

Encrypt content using supplied symmetric key and algorithm using a CMS EncryptedData type and output the content.

+ +
+
-sign_receipt
+
+ +

Generate and output a signed receipt for the supplied message. The input message must contain a signed receipt request. Functionality is otherwise similar to the -sign operation.

+ +
+
-verify_receipt receipt
+
+ +

Verify a signed receipt in filename receipt. The input message must contain the original receipt request. Functionality is otherwise similar to the -verify operation.

+ +
+
-in filename
+
+ +

The input message to be encrypted or signed or the message to be decrypted or verified.

+ +
+
-inform SMIME|PEM|DER
+
+ +

This specifies the input format for the CMS structure. The default is SMIME which reads an S/MIME format message. PEM and DER format change this to expect PEM and DER format CMS structures instead. This currently only affects the input format of the CMS structure, if no CMS structure is being input (for example with -encrypt or -sign) this option has no effect.

+ +
+
-rctform SMIME|PEM|DER
+
+ +

Specify the format for a signed receipt for use with the -receipt_verify operation.

+ +
+
-out filename
+
+ +

The message text that has been decrypted or verified or the output MIME format message that has been signed or verified.

+ +
+
-outform SMIME|PEM|DER
+
+ +

This specifies the output format for the CMS structure. The default is SMIME which writes an S/MIME format message. PEM and DER format change this to write PEM and DER format CMS structures instead. This currently only affects the output format of the CMS structure, if no CMS structure is being output (for example with -verify or -decrypt) this option has no effect.

+ +
+
-stream -indef -noindef
+
+ +

The -stream and -indef options are equivalent and enable streaming I/O for encoding operations. This permits single pass processing of data without the need to hold the entire contents in memory, potentially supporting very large files. Streaming is automatically set for S/MIME signing with detached data if the output format is SMIME it is currently off by default for all other operations.

+ +
+
-noindef
+
+ +

Disable streaming I/O where it would produce and indefinite length constructed encoding. This option currently has no effect. In future streaming will be enabled by default on all relevant operations and this option will disable it.

+ +
+
-content filename
+
+ +

This specifies a file containing the detached content, this is only useful with the -verify command. This is only usable if the CMS structure is using the detached signature form where the content is not included. This option will override any content if the input format is S/MIME and it uses the multipart/signed MIME content type.

+ +
+
-text
+
+ +

This option adds plain text (text/plain) MIME headers to the supplied message if encrypting or signing. If decrypting or verifying it strips off text headers: if the decrypted or verified message is not of MIME type text/plain then an error occurs.

+ +
+
-noout
+
+ +

For the -cmsout operation do not output the parsed CMS structure. This is useful when combined with the -print option or if the syntax of the CMS structure is being checked.

+ +
+
-print
+
+ +

For the -cmsout operation print out all fields of the CMS structure. This is mainly useful for testing purposes.

+ +
+
-CAfile file
+
+ +

A file containing trusted CA certificates, only used with -verify.

+ +
+
-CApath dir
+
+ +

A directory containing trusted CA certificates, only used with -verify. This directory must be a standard certificate directory: that is a hash of each subject name (using x509 -hash) should be linked to each certificate.

+ +
+
-no-CAfile
+
+ +

Do not load the trusted CA certificates from the default file location

+ +
+
-no-CApath
+
+ +

Do not load the trusted CA certificates from the default directory location

+ +
+
-md digest
+
+ +

Digest algorithm to use when signing or resigning. If not present then the default digest algorithm for the signing key will be used (usually SHA1).

+ +
+
-cipher
+
+ +

The encryption algorithm to use. For example triple DES (168 bits) - -des3 or 256 bit AES - -aes256. Any standard algorithm name (as used by the EVP_get_cipherbyname() function) can also be used preceded by a dash, for example -aes-128-cbc. See enc(1) for a list of ciphers supported by your version of OpenSSL.

+ +

If not specified triple DES is used. Only used with -encrypt and -EncryptedData_create commands.

+ +
+
-nointern
+
+ +

When verifying a message normally certificates (if any) included in the message are searched for the signing certificate. With this option only the certificates specified in the -certfile option are used. The supplied certificates can still be used as untrusted CAs however.

+ +
+
-noverify
+
+ +

Do not verify the signers certificate of a signed message.

+ +
+
-nocerts
+
+ +

When signing a message the signer's certificate is normally included with this option it is excluded. This will reduce the size of the signed message but the verifier must have a copy of the signers certificate available locally (passed using the -certfile option for example).

+ +
+
-noattr
+
+ +

Normally when a message is signed a set of attributes are included which include the signing time and supported symmetric algorithms. With this option they are not included.

+ +
+
-nosmimecap
+
+ +

Exclude the list of supported algorithms from signed attributes, other options such as signing time and content type are still included.

+ +
+
-binary
+
+ +

Normally the input message is converted to "canonical" format which is effectively using CR and LF as end of line: as required by the S/MIME specification. When this option is present no translation occurs. This is useful when handling binary data which may not be in MIME format.

+ +
+
-crlfeol
+
+ +

Normally the output file uses a single LF as end of line. When this option is present CRLF is used instead.

+ +
+
-asciicrlf
+
+ +

When signing use ASCII CRLF format canonicalisation. This strips trailing whitespace from all lines, deletes trailing blank lines at EOF and sets the encapsulated content type. This option is normally used with detached content and an output signature format of DER. This option is not normally needed when verifying as it is enabled automatically if the encapsulated content format is detected.

+ +
+
-nodetach
+
+ +

When signing a message use opaque signing: this form is more resistant to translation by mail relays but it cannot be read by mail agents that do not support S/MIME. Without this option cleartext signing with the MIME type multipart/signed is used.

+ +
+
-certfile file
+
+ +

Allows additional certificates to be specified. When signing these will be included with the message. When verifying these will be searched for the signers certificates. The certificates should be in PEM format.

+ +
+
-certsout file
+
+ +

Any certificates contained in the message are written to file.

+ +
+
-signer file
+
+ +

A signing certificate when signing or resigning a message, this option can be used multiple times if more than one signer is required. If a message is being verified then the signers certificates will be written to this file if the verification was successful.

+ +
+
-recip file
+
+ +

When decrypting a message this specifies the recipients certificate. The certificate must match one of the recipients of the message or an error occurs.

+ +

When encrypting a message this option may be used multiple times to specify each recipient. This form must be used if customised parameters are required (for example to specify RSA-OAEP).

+ +

Only certificates carrying RSA, Diffie-Hellman or EC keys are supported by this option.

+ +
+
-keyid
+
+ +

Use subject key identifier to identify certificates instead of issuer name and serial number. The supplied certificate must include a subject key identifier extension. Supported by -sign and -encrypt options.

+ +
+
-receipt_request_all, -receipt_request_first
+
+ +

For -sign option include a signed receipt request. Indicate requests should be provided by all recipient or first tier recipients (those mailed directly and not from a mailing list). Ignored it -receipt_request_from is included.

+ +
+
-receipt_request_from emailaddress
+
+ +

For -sign option include a signed receipt request. Add an explicit email address where receipts should be supplied.

+ +
+
-receipt_request_to emailaddress
+
+ +

Add an explicit email address where signed receipts should be sent to. This option must but supplied if a signed receipt it requested.

+ +
+
-receipt_request_print
+
+ +

For the -verify operation print out the contents of any signed receipt requests.

+ +
+
-secretkey key
+
+ +

Specify symmetric key to use. The key must be supplied in hex format and be consistent with the algorithm used. Supported by the -EncryptedData_encrypt -EncryptedData_decrypt, -encrypt and -decrypt options. When used with -encrypt or -decrypt the supplied key is used to wrap or unwrap the content encryption key using an AES key in the KEKRecipientInfo type.

+ +
+
-secretkeyid id
+
+ +

The key identifier for the supplied symmetric key for KEKRecipientInfo type. This option must be present if the -secretkey option is used with -encrypt. With -decrypt operations the id is used to locate the relevant key if it is not supplied then an attempt is used to decrypt any KEKRecipientInfo structures.

+ +
+
-econtent_type type
+
+ +

Set the encapsulated content type to type if not supplied the Data type is used. The type argument can be any valid OID name in either text or numerical format.

+ +
+
-inkey file
+
+ +

The private key to use when signing or decrypting. This must match the corresponding certificate. If this option is not specified then the private key must be included in the certificate file specified with the -recip or -signer file. When signing this option can be used multiple times to specify successive keys.

+ +
+
-keyopt name:opt
+
+ +

For signing and encryption this option can be used multiple times to set customised parameters for the preceding key or certificate. It can currently be used to set RSA-PSS for signing, RSA-OAEP for encryption or to modify default parameters for ECDH.

+ +
+
-passin arg
+
+ +

The private key password source. For more information about the format of arg see the PASS PHRASE ARGUMENTS section in openssl(1).

+ +
+
-rand file...
+
+ +

A file or files containing random data used to seed the random number generator. Multiple files can be specified separated by an OS-dependent character. The separator is ; for MS-Windows, , for OpenVMS, and : for all others.

+ +
+
[-writerand file]
+
+ +

Writes random data to the specified file upon exit. This can be used with a subsequent -rand flag.

+ +
+
cert.pem...
+
+ +

One or more certificates of message recipients: used when encrypting a message.

+ +
+
-to, -from, -subject
+
+ +

The relevant mail headers. These are included outside the signed portion of a message so they may be included manually. If signing then many S/MIME mail clients check the signers certificate's email address matches that specified in the From: address.

+ +
+
-attime, -check_ss_sig, -crl_check, -crl_check_all, -explicit_policy, -extended_crl, -ignore_critical, -inhibit_any, -inhibit_map, -no_alt_chains, -no_check_time, -partial_chain, -policy, -policy_check, -policy_print, -purpose, -suiteB_128, -suiteB_128_only, -suiteB_192, -trusted_first, -use_deltas, -auth_level, -verify_depth, -verify_email, -verify_hostname, -verify_ip, -verify_name, -x509_strict
+
+ +

Set various certificate chain validation options. See the verify(1) manual page for details.

+ +
+
+ +

NOTES

+ +

The MIME message must be sent without any blank lines between the headers and the output. Some mail programs will automatically add a blank line. Piping the mail directly to sendmail is one way to achieve the correct format.

+ +

The supplied message to be signed or encrypted must include the necessary MIME headers or many S/MIME clients won't display it properly (if at all). You can use the -text option to automatically add plain text headers.

+ +

A "signed and encrypted" message is one where a signed message is then encrypted. This can be produced by encrypting an already signed message: see the examples section.

+ +

This version of the program only allows one signer per message but it will verify multiple signers on received messages. Some S/MIME clients choke if a message contains multiple signers. It is possible to sign messages "in parallel" by signing an already signed message.

+ +

The options -encrypt and -decrypt reflect common usage in S/MIME clients. Strictly speaking these process CMS enveloped data: CMS encrypted data is used for other purposes.

+ +

The -resign option uses an existing message digest when adding a new signer. This means that attributes must be present in at least one existing signer using the same message digest or this operation will fail.

+ +

The -stream and -indef options enable streaming I/O support. As a result the encoding is BER using indefinite length constructed encoding and no longer DER. Streaming is supported for the -encrypt operation and the -sign operation if the content is not detached.

+ +

Streaming is always used for the -sign operation with detached data but since the content is no longer part of the CMS structure the encoding remains DER.

+ +

If the -decrypt option is used without a recipient certificate then an attempt is made to locate the recipient by trying each potential recipient in turn using the supplied private key. To thwart the MMA attack (Bleichenbacher's attack on PKCS #1 v1.5 RSA padding) all recipients are tried whether they succeed or not and if no recipients match the message is "decrypted" using a random key which will typically output garbage. The -debug_decrypt option can be used to disable the MMA attack protection and return an error if no recipient can be found: this option should be used with caution. For a fuller description see CMS_decrypt(3)).

+ +

EXIT CODES

+ +
+ +
0
+
+ +

The operation was completely successfully.

+ +
+
1
+
+ +

An error occurred parsing the command options.

+ +
+
2
+
+ +

One of the input files could not be read.

+ +
+
3
+
+ +

An error occurred creating the CMS file or when reading the MIME message.

+ +
+
4
+
+ +

An error occurred decrypting or verifying the message.

+ +
+
5
+
+ +

The message was verified correctly but an error occurred writing out the signers certificates.

+ +
+
+ +

COMPATIBILITY WITH PKCS#7 format.

+ +

The smime utility can only process the older PKCS#7 format. The cms utility supports Cryptographic Message Syntax format. Use of some features will result in messages which cannot be processed by applications which only support the older format. These are detailed below.

+ +

The use of the -keyid option with -sign or -encrypt.

+ +

The -outform PEM option uses different headers.

+ +

The -compress option.

+ +

The -secretkey option when used with -encrypt.

+ +

The use of PSS with -sign.

+ +

The use of OAEP or non-RSA keys with -encrypt.

+ +

Additionally the -EncryptedData_create and -data_create type cannot be processed by the older smime command.

+ +

EXAMPLES

+ +

Create a cleartext signed message:

+ +
openssl cms -sign -in message.txt -text -out mail.msg \
+       -signer mycert.pem
+ +

Create an opaque signed message

+ +
openssl cms -sign -in message.txt -text -out mail.msg -nodetach \
+       -signer mycert.pem
+ +

Create a signed message, include some additional certificates and read the private key from another file:

+ +
openssl cms -sign -in in.txt -text -out mail.msg \
+       -signer mycert.pem -inkey mykey.pem -certfile mycerts.pem
+ +

Create a signed message with two signers, use key identifier:

+ +
openssl cms -sign -in message.txt -text -out mail.msg \
+       -signer mycert.pem -signer othercert.pem -keyid
+ +

Send a signed message under Unix directly to sendmail, including headers:

+ +
openssl cms -sign -in in.txt -text -signer mycert.pem \
+       -from steve@openssl.org -to someone@somewhere \
+       -subject "Signed message" | sendmail someone@somewhere
+ +

Verify a message and extract the signer's certificate if successful:

+ +
openssl cms -verify -in mail.msg -signer user.pem -out signedtext.txt
+ +

Send encrypted mail using triple DES:

+ +
openssl cms -encrypt -in in.txt -from steve@openssl.org \
+       -to someone@somewhere -subject "Encrypted message" \
+       -des3 user.pem -out mail.msg
+ +

Sign and encrypt mail:

+ +
openssl cms -sign -in ml.txt -signer my.pem -text \
+       | openssl cms -encrypt -out mail.msg \
+       -from steve@openssl.org -to someone@somewhere \
+       -subject "Signed and Encrypted message" -des3 user.pem
+ +

Note: the encryption command does not include the -text option because the message being encrypted already has MIME headers.

+ +

Decrypt mail:

+ +
openssl cms -decrypt -in mail.msg -recip mycert.pem -inkey key.pem
+ +

The output from Netscape form signing is a PKCS#7 structure with the detached signature format. You can use this program to verify the signature by line wrapping the base64 encoded structure and surrounding it with:

+ +
-----BEGIN PKCS7-----
+-----END PKCS7-----
+ +

and using the command,

+ +
openssl cms -verify -inform PEM -in signature.pem -content content.txt
+ +

alternatively you can base64 decode the signature and use

+ +
openssl cms -verify -inform DER -in signature.der -content content.txt
+ +

Create an encrypted message using 128 bit Camellia:

+ +
openssl cms -encrypt -in plain.txt -camellia128 -out mail.msg cert.pem
+ +

Add a signer to an existing message:

+ +
openssl cms -resign -in mail.msg -signer newsign.pem -out mail2.msg
+ +

Sign mail using RSA-PSS:

+ +
openssl cms -sign -in message.txt -text -out mail.msg \
+       -signer mycert.pem -keyopt rsa_padding_mode:pss
+ +

Create encrypted mail using RSA-OAEP:

+ +
openssl cms -encrypt -in plain.txt -out mail.msg \
+       -recip cert.pem -keyopt rsa_padding_mode:oaep
+ +

Use SHA256 KDF with an ECDH certificate:

+ +
openssl cms -encrypt -in plain.txt -out mail.msg \
+       -recip ecdhcert.pem -keyopt ecdh_kdf_md:sha256
+ +

BUGS

+ +

The MIME parser isn't very clever: it seems to handle most messages that I've thrown at it but it may choke on others.

+ +

The code currently will only write out the signer's certificate to a file: if the signer has a separate encryption certificate this must be manually extracted. There should be some heuristic that determines the correct encryption certificate.

+ +

Ideally a database should be maintained of a certificates for each email address.

+ +

The code doesn't currently take note of the permitted symmetric encryption algorithms as supplied in the SMIMECapabilities signed attribute. this means the user has to manually include the correct encryption algorithm. It should store the list of permitted ciphers in a database and only use those.

+ +

No revocation checking is done on the signer's certificate.

+ +

HISTORY

+ +

The use of multiple -signer options and the -resign command were first added in OpenSSL 1.0.0.

+ +

The keyopt option was added in OpenSSL 1.0.2.

+ +

Support for RSA-OAEP and RSA-PSS was added in OpenSSL 1.0.2.

+ +

The use of non-RSA keys with -encrypt and -decrypt was added in OpenSSL 1.0.2.

+ +

The -no_alt_chains option was added in OpenSSL 1.0.2b.

+ +

COPYRIGHT

+ +

Copyright 2008-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/crl.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/crl.html new file mode 100644 index 00000000..c2280be5 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/crl.html @@ -0,0 +1,170 @@ + + + + +crl + + + + + + + + + + +

NAME

+ +

openssl-crl, crl - CRL utility

+ +

SYNOPSIS

+ +

openssl crl [-help] [-inform PEM|DER] [-outform PEM|DER] [-text] [-in filename] [-out filename] [-nameopt option] [-noout] [-hash] [-issuer] [-lastupdate] [-nextupdate] [-CAfile file] [-CApath dir]

+ +

DESCRIPTION

+ +

The crl command processes CRL files in DER or PEM format.

+ +

OPTIONS

+ +
+ +
-help
+
+ +

Print out a usage message.

+ +
+
-inform DER|PEM
+
+ +

This specifies the input format. DER format is DER encoded CRL structure. PEM (the default) is a base64 encoded version of the DER form with header and footer lines.

+ +
+
-outform DER|PEM
+
+ +

This specifies the output format, the options have the same meaning and default as the -inform option.

+ +
+
-in filename
+
+ +

This specifies the input filename to read from or standard input if this option is not specified.

+ +
+
-out filename
+
+ +

Specifies the output filename to write to or standard output by default.

+ +
+
-text
+
+ +

Print out the CRL in text form.

+ +
+
-nameopt option
+
+ +

Option which determines how the subject or issuer names are displayed. See the description of -nameopt in x509(1).

+ +
+
-noout
+
+ +

Don't output the encoded version of the CRL.

+ +
+
-hash
+
+ +

Output a hash of the issuer name. This can be use to lookup CRLs in a directory by issuer name.

+ +
+
-hash_old
+
+ +

Outputs the "hash" of the CRL issuer name using the older algorithm as used by OpenSSL before version 1.0.0.

+ +
+
-issuer
+
+ +

Output the issuer name.

+ +
+
-lastupdate
+
+ +

Output the lastUpdate field.

+ +
+
-nextupdate
+
+ +

Output the nextUpdate field.

+ +
+
-CAfile file
+
+ +

Verify the signature on a CRL by looking up the issuing certificate in file.

+ +
+
-CApath dir
+
+ +

Verify the signature on a CRL by looking up the issuing certificate in dir. This directory must be a standard certificate directory: that is a hash of each subject name (using x509 -hash) should be linked to each certificate.

+ +
+
+ +

NOTES

+ +

The PEM CRL format uses the header and footer lines:

+ +
-----BEGIN X509 CRL-----
+-----END X509 CRL-----
+ +

EXAMPLES

+ +

Convert a CRL file from PEM to DER:

+ +
openssl crl -in crl.pem -outform DER -out crl.der
+ +

Output the text form of a DER encoded certificate:

+ +
openssl crl -in crl.der -inform DER -text -noout
+ +

BUGS

+ +

Ideally it should be possible to create a CRL using appropriate options and files too.

+ +

SEE ALSO

+ +

crl2pkcs7(1), ca(1), x509(1)

+ +

COPYRIGHT

+ +

Copyright 2000-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/crl2pkcs7.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/crl2pkcs7.html new file mode 100644 index 00000000..82157935 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/crl2pkcs7.html @@ -0,0 +1,119 @@ + + + + +crl2pkcs7 + + + + + + + + + + +

NAME

+ +

openssl-crl2pkcs7, crl2pkcs7 - Create a PKCS#7 structure from a CRL and certificates

+ +

SYNOPSIS

+ +

openssl crl2pkcs7 [-help] [-inform PEM|DER] [-outform PEM|DER] [-in filename] [-out filename] [-certfile filename] [-nocrl]

+ +

DESCRIPTION

+ +

The crl2pkcs7 command takes an optional CRL and one or more certificates and converts them into a PKCS#7 degenerate "certificates only" structure.

+ +

OPTIONS

+ +
+ +
-help
+
+ +

Print out a usage message.

+ +
+
-inform DER|PEM
+
+ +

This specifies the CRL input format. DER format is DER encoded CRL structure.PEM (the default) is a base64 encoded version of the DER form with header and footer lines. The default format is PEM.

+ +
+
-outform DER|PEM
+
+ +

This specifies the PKCS#7 structure output format. DER format is DER encoded PKCS#7 structure.PEM (the default) is a base64 encoded version of the DER form with header and footer lines. The default format is PEM.

+ +
+
-in filename
+
+ +

This specifies the input filename to read a CRL from or standard input if this option is not specified.

+ +
+
-out filename
+
+ +

Specifies the output filename to write the PKCS#7 structure to or standard output by default.

+ +
+
-certfile filename
+
+ +

Specifies a filename containing one or more certificates in PEM format. All certificates in the file will be added to the PKCS#7 structure. This option can be used more than once to read certificates form multiple files.

+ +
+
-nocrl
+
+ +

Normally a CRL is included in the output file. With this option no CRL is included in the output file and a CRL is not read from the input file.

+ +
+
+ +

EXAMPLES

+ +

Create a PKCS#7 structure from a certificate and CRL:

+ +
openssl crl2pkcs7 -in crl.pem -certfile cert.pem -out p7.pem
+ +

Creates a PKCS#7 structure in DER format with no CRL from several different certificates:

+ +
openssl crl2pkcs7 -nocrl -certfile newcert.pem
+       -certfile demoCA/cacert.pem -outform DER -out p7.der
+ +

NOTES

+ +

The output file is a PKCS#7 signed data structure containing no signers and just certificates and an optional CRL.

+ +

This utility can be used to send certificates and CAs to Netscape as part of the certificate enrollment process. This involves sending the DER encoded output as MIME type application/x-x509-user-cert.

+ +

The PEM encoded form with the header and footer lines removed can be used to install user certificates and CAs in MSIE using the Xenroll control.

+ +

SEE ALSO

+ +

pkcs7(1)

+ +

COPYRIGHT

+ +

Copyright 2000-2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/dgst.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/dgst.html new file mode 100644 index 00000000..ed3dcce8 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/dgst.html @@ -0,0 +1,250 @@ + + + + +dgst + + + + + + + + + + +

NAME

+ +

openssl-dgst, dgst - perform digest operations

+ +

SYNOPSIS

+ +

openssl dgst [-digest] [-help] [-c] [-d] [-list] [-hex] [-binary] [-r] [-out filename] [-sign filename] [-keyform arg] [-passin arg] [-verify filename] [-prverify filename] [-signature filename] [-sigopt nm:v] [-hmac key] [-fips-fingerprint] [-rand file...] [-engine id] [-engine_impl] [file...]

+ +

openssl digest [...]

+ +

DESCRIPTION

+ +

The digest functions output the message digest of a supplied file or files in hexadecimal. The digest functions also generate and verify digital signatures using message digests.

+ +

The generic name, dgst, may be used with an option specifying the algorithm to be used. The default digest is sha256. A supported digest name may also be used as the command name. To see the list of supported algorithms, use the list --digest-commands command.

+ +

OPTIONS

+ +
+ +
-help
+
+ +

Print out a usage message.

+ +
+
-digest
+
+ +

Specifies name of a supported digest to be used. To see the list of supported digests, use the command list --digest-commands.

+ +
+
-c
+
+ +

Print out the digest in two digit groups separated by colons, only relevant if hex format output is used.

+ +
+
-d
+
+ +

Print out BIO debugging information.

+ +
+
-list
+
+ +

Prints out a list of supported message digests.

+ +
+
-hex
+
+ +

Digest is to be output as a hex dump. This is the default case for a "normal" digest as opposed to a digital signature. See NOTES below for digital signatures using -hex.

+ +
+
-binary
+
+ +

Output the digest or signature in binary form.

+ +
+
-r
+
+ +

Output the digest in the "coreutils" format, including newlines. Used by programs like sha1sum.

+ +
+
-out filename
+
+ +

Filename to output to, or standard output by default.

+ +
+
-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 pkeyutl command instead for this.

+ +
+
-keyform arg
+
+ +

Specifies the key format to sign digest with. The DER, PEM, P12, and ENGINE formats are supported.

+ +
+
-sigopt nm:v
+
+ +

Pass options to the signature algorithm during sign or verify operations. Names and values of these options are algorithm-specific.

+ +
+
-passin arg
+
+ +

The private key password source. For more information about the format of arg see the PASS PHRASE ARGUMENTS section in openssl(1).

+ +
+
-verify filename
+
+ +

Verify the signature using the public key in "filename". The output is either "Verification OK" or "Verification Failure".

+ +
+
-prverify filename
+
+ +

Verify the signature using the private key in "filename".

+ +
+
-signature filename
+
+ +

The actual signature to verify.

+ +
+
-hmac key
+
+ +

Create a hashed MAC using "key".

+ +
+
-mac alg
+
+ +

Create MAC (keyed Message Authentication Code). The most popular MAC algorithm is HMAC (hash-based MAC), but there are other MAC algorithms which are not based on hash, for instance gost-mac algorithm, supported by ccgost engine. MAC keys and other options should be set via -macopt parameter.

+ +
+
-macopt nm:v
+
+ +

Passes options to MAC algorithm, specified by -mac key. Following options are supported by both by HMAC and gost-mac:

+ +
+ +
key:string
+
+ +

Specifies MAC key as alphanumeric string (use if key contain printable characters only). String length must conform to any restrictions of the MAC algorithm for example exactly 32 chars for gost-mac.

+ +
+
hexkey:string
+
+ +

Specifies MAC key in hexadecimal form (two hex digits per byte). Key length must conform to any restrictions of the MAC algorithm for example exactly 32 chars for gost-mac.

+ +
+
+ +
+
-rand file...
+
+ +

A file or files containing random data used to seed the random number generator. Multiple files can be specified separated by an OS-dependent character. The separator is ; for MS-Windows, , for OpenVMS, and : for all others.

+ +
+
[-writerand file]
+
+ +

Writes random data to the specified file upon exit. This can be used with a subsequent -rand flag.

+ +
+
-fips-fingerprint
+
+ +

Compute HMAC using a specific key for certain OpenSSL-FIPS operations.

+ +
+
-engine id
+
+ +

Use engine id for operations (including private key storage). This engine is not used as source for digest algorithms, unless it is also specified in the configuration file or -engine_impl is also specified.

+ +
+
-engine_impl
+
+ +

When used with the -engine option, it specifies to also use engine id for digest operations.

+ +
+
file...
+
+ +

File or files to digest. If no files are specified then standard input is used.

+ +
+
+ +

EXAMPLES

+ +

To create a hex-encoded message digest of a file: openssl dgst -md5 -hex file.txt

+ +

To sign a file using SHA-256 with binary file output: openssl dgst -sha256 -sign privatekey.pem -out signature.sign file.txt

+ +

To verify a signature: openssl dgst -sha256 -verify publickey.pem \ -signature signature.sign \ file.txt

+ +

NOTES

+ +

The digest mechanisms that are available will depend on the options used when building OpenSSL. The list digest-commands command can be used to list them.

+ +

New or agile applications should use probably use SHA-256. Other digests, particularly SHA-1 and MD5, are still widely used for interoperating with existing formats and protocols.

+ +

When signing a file, dgst will automatically determine the algorithm (RSA, ECC, etc) to use for signing based on the private key's ASN.1 info. When verifying signatures, it only handles the RSA, DSA, or ECDSA signature itself, not the related data to identify the signer and algorithm used in formats such as x.509, CMS, and S/MIME.

+ +

A source of random numbers is required for certain signing algorithms, in particular ECDSA and DSA.

+ +

The signing and verify options should only be used if a single file is being signed or verified.

+ +

Hex signatures cannot be verified using openssl. Instead, use "xxd -r" or similar program to transform the hex signature into a binary signature prior to verification.

+ +

HISTORY

+ +

The default digest was changed from MD5 to SHA256 in OpenSSL 1.1.0. The FIPS-related options were removed in OpenSSL 1.1.0.

+ +

COPYRIGHT

+ +

Copyright 2000-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/dhparam.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/dhparam.html new file mode 100644 index 00000000..10947929 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/dhparam.html @@ -0,0 +1,170 @@ + + + + +dhparam + + + + + + + + + + +

NAME

+ +

openssl-dhparam, dhparam - DH parameter manipulation and generation

+ +

SYNOPSIS

+ +

openssl dhparam [-help] [-inform DER|PEM] [-outform DER|PEM] [-in filename] [-out filename] [-dsaparam] [-check] [-noout] [-text] [-C] [-2] [-5] [-rand file...] [-writerand file] [-engine id] [numbits]

+ +

DESCRIPTION

+ +

This command is used to manipulate DH parameter files.

+ +

OPTIONS

+ +
+ +
-help
+
+ +

Print out a usage message.

+ +
+
-inform DER|PEM
+
+ +

This specifies the input format. The DER option uses an ASN1 DER encoded form compatible with the PKCS#3 DHparameter structure. The PEM form is the default format: it consists of the DER format base64 encoded with additional header and footer lines.

+ +
+
-outform DER|PEM
+
+ +

This specifies the output format, the options have the same meaning and default as the -inform option.

+ +
+
-in filename
+
+ +

This specifies the input filename to read parameters from or standard input if this option is not specified.

+ +
+
-out filename
+
+ +

This specifies the output filename parameters to. Standard output is used if this option is not present. The output filename should not be the same as the input filename.

+ +
+
-dsaparam
+
+ +

If this option is used, DSA rather than DH parameters are read or created; they are converted to DH format. Otherwise, "strong" primes (such that (p-1)/2 is also prime) will be used for DH parameter generation.

+ +

DH parameter generation with the -dsaparam option is much faster, and the recommended exponent length is shorter, which makes DH key exchange more efficient. Beware that with such DSA-style DH parameters, a fresh DH key should be created for each use to avoid small-subgroup attacks that may be possible otherwise.

+ +
+
-check
+
+ +

Performs numerous checks to see if the supplied parameters are valid and displays a warning if not.

+ +
+
-2, -5
+
+ +

The generator to use, either 2 or 5. If present then the input file is ignored and parameters are generated instead. If not present but numbits is present, parameters are generated with the default generator 2.

+ +
+
-rand file...
+
+ +

A file or files containing random data used to seed the random number generator. Multiple files can be specified separated by an OS-dependent character. The separator is ; for MS-Windows, , for OpenVMS, and : for all others.

+ +
+
[-writerand file]
+
+ +

Writes random data to the specified file upon exit. This can be used with a subsequent -rand flag.

+ +
+
numbits
+
+ +

This option specifies that a parameter set should be generated of size numbits. It must be the last option. If this option is present then the input file is ignored and parameters are generated instead. If this option is not present but a generator (-2 or -5) is present, parameters are generated with a default length of 2048 bits.

+ +
+
-noout
+
+ +

This option inhibits the output of the encoded version of the parameters.

+ +
+
-text
+
+ +

This option prints out the DH parameters in human readable form.

+ +
+
-C
+
+ +

This option converts the parameters into C code. The parameters can then be loaded by calling the get_dhNNNN() function.

+ +
+
-engine id
+
+ +

Specifying an engine (by its unique id string) will cause dhparam to attempt to obtain a functional reference to the specified engine, thus initialising it if needed. The engine will then be set as the default for all available algorithms.

+ +
+
+ +

WARNINGS

+ +

The program dhparam combines the functionality of the programs dh and gendh in previous versions of OpenSSL. The dh and gendh programs are retained for now but may have different purposes in future versions of OpenSSL.

+ +

NOTES

+ +

PEM format DH parameters use the header and footer lines:

+ +
-----BEGIN DH PARAMETERS-----
+-----END DH PARAMETERS-----
+ +

OpenSSL currently only supports the older PKCS#3 DH, not the newer X9.42 DH.

+ +

This program manipulates DH parameters not keys.

+ +

BUGS

+ +

There should be a way to generate and manipulate DH keys.

+ +

SEE ALSO

+ +

dsaparam(1)

+ +

COPYRIGHT

+ +

Copyright 2000-2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/dsa.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/dsa.html new file mode 100644 index 00000000..55891a02 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/dsa.html @@ -0,0 +1,178 @@ + + + + +dsa + + + + + + + + + + +

NAME

+ +

openssl-dsa, dsa - DSA key processing

+ +

SYNOPSIS

+ +

openssl dsa [-help] [-inform PEM|DER] [-outform PEM|DER] [-in filename] [-passin arg] [-out filename] [-passout arg] [-aes128] [-aes192] [-aes256] [-aria128] [-aria192] [-aria256] [-camellia128] [-camellia192] [-camellia256] [-des] [-des3] [-idea] [-text] [-noout] [-modulus] [-pubin] [-pubout] [-engine id]

+ +

DESCRIPTION

+ +

The dsa command processes DSA keys. They can be converted between various forms and their components printed out. Note This command uses the traditional SSLeay compatible format for private key encryption: newer applications should use the more secure PKCS#8 format using the pkcs8

+ +

OPTIONS

+ +
+ +
-help
+
+ +

Print out a usage message.

+ +
+
-inform DER|PEM
+
+ +

This specifies the input format. The DER option with a private key uses an ASN1 DER encoded form of an ASN.1 SEQUENCE consisting of the values of version (currently zero), p, q, g, the public and private key components respectively as ASN.1 INTEGERs. When used with a public key it uses a SubjectPublicKeyInfo structure: it is an error if the key is not DSA.

+ +

The PEM form is the default format: it consists of the DER format base64 encoded with additional header and footer lines. In the case of a private key PKCS#8 format is also accepted.

+ +
+
-outform DER|PEM
+
+ +

This specifies the output format, the options have the same meaning and default as the -inform option.

+ +
+
-in filename
+
+ +

This specifies the input filename to read a key from or standard input if this option is not specified. If the key is encrypted a pass phrase will be prompted for.

+ +
+
-passin arg
+
+ +

The input file password source. For more information about the format of arg see the PASS PHRASE ARGUMENTS section in openssl(1).

+ +
+
-out filename
+
+ +

This specifies the output filename to write a key to or standard output by is not specified. If any encryption options are set then a pass phrase will be prompted for. The output filename should not be the same as the input filename.

+ +
+
-passout arg
+
+ +

The output file password source. For more information about the format of arg see the PASS PHRASE ARGUMENTS section in openssl(1).

+ +
+
-aes128, -aes192, -aes256, -aria128, -aria192, -aria256, -camellia128, -camellia192, -camellia256, -des, -des3, -idea
+
+ +

These options encrypt the private key with the specified cipher before outputting it. A pass phrase is prompted for. If none of these options is specified the key is written in plain text. This means that using the dsa utility to read in an encrypted key with no encryption option can be used to remove the pass phrase from a key, or by setting the encryption options it can be use to add or change the pass phrase. These options can only be used with PEM format output files.

+ +
+
-text
+
+ +

Prints out the public, private key components and parameters.

+ +
+
-noout
+
+ +

This option prevents output of the encoded version of the key.

+ +
+
-modulus
+
+ +

This option prints out the value of the public key component of the key.

+ +
+
-pubin
+
+ +

By default, a private key is read from the input file. With this option a public key is read instead.

+ +
+
-pubout
+
+ +

By default, a private key is output. With this option a public key will be output instead. This option is automatically set if the input is a public key.

+ +
+
-engine id
+
+ +

Specifying an engine (by its unique id string) will cause dsa to attempt to obtain a functional reference to the specified engine, thus initialising it if needed. The engine will then be set as the default for all available algorithms.

+ +
+
+ +

NOTES

+ +

The PEM private key format uses the header and footer lines:

+ +
-----BEGIN DSA PRIVATE KEY-----
+-----END DSA PRIVATE KEY-----
+ +

The PEM public key format uses the header and footer lines:

+ +
-----BEGIN PUBLIC KEY-----
+-----END PUBLIC KEY-----
+ +

EXAMPLES

+ +

To remove the pass phrase on a DSA private key:

+ +
openssl dsa -in key.pem -out keyout.pem
+ +

To encrypt a private key using triple DES:

+ +
openssl dsa -in key.pem -des3 -out keyout.pem
+ +

To convert a private key from PEM to DER format:

+ +
openssl dsa -in key.pem -outform DER -out keyout.der
+ +

To print out the components of a private key to standard output:

+ +
openssl dsa -in key.pem -text -noout
+ +

To just output the public part of a private key:

+ +
openssl dsa -in key.pem -pubout -out pubkey.pem
+ +

SEE ALSO

+ +

dsaparam(1), gendsa(1), rsa(1), genrsa(1)

+ +

COPYRIGHT

+ +

Copyright 2000-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/dsaparam.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/dsaparam.html new file mode 100644 index 00000000..418e2646 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/dsaparam.html @@ -0,0 +1,144 @@ + + + + +dsaparam + + + + + + + + + + +

NAME

+ +

openssl-dsaparam, dsaparam - DSA parameter manipulation and generation

+ +

SYNOPSIS

+ +

openssl dsaparam [-help] [-inform DER|PEM] [-outform DER|PEM] [-in filename] [-out filename] [-noout] [-text] [-C] [-rand file...] [-writerand file] [-genkey] [-engine id] [numbits]

+ +

DESCRIPTION

+ +

This command is used to manipulate or generate DSA parameter files.

+ +

OPTIONS

+ +
+ +
-help
+
+ +

Print out a usage message.

+ +
+
-inform DER|PEM
+
+ +

This specifies the input format. The DER option uses an ASN1 DER encoded form compatible with RFC2459 (PKIX) DSS-Parms that is a SEQUENCE consisting of p, q and g respectively. The PEM form is the default format: it consists of the DER format base64 encoded with additional header and footer lines.

+ +
+
-outform DER|PEM
+
+ +

This specifies the output format, the options have the same meaning and default as the -inform option.

+ +
+
-in filename
+
+ +

This specifies the input filename to read parameters from or standard input if this option is not specified. If the numbits parameter is included then this option will be ignored.

+ +
+
-out filename
+
+ +

This specifies the output filename parameters to. Standard output is used if this option is not present. The output filename should not be the same as the input filename.

+ +
+
-noout
+
+ +

This option inhibits the output of the encoded version of the parameters.

+ +
+
-text
+
+ +

This option prints out the DSA parameters in human readable form.

+ +
+
-C
+
+ +

This option converts the parameters into C code. The parameters can then be loaded by calling the get_dsaXXX() function.

+ +
+
-genkey
+
+ +

This option will generate a DSA either using the specified or generated parameters.

+ +
+
-rand file...
+
+ +

A file or files containing random data used to seed the random number generator. Multiple files can be specified separated by an OS-dependent character. The separator is ; for MS-Windows, , for OpenVMS, and : for all others.

+ +
+
[-writerand file]
+
+ +

Writes random data to the specified file upon exit. This can be used with a subsequent -rand flag.

+ +
+
numbits
+
+ +

This option specifies that a parameter set should be generated of size numbits. It must be the last option. If this option is included then the input file (if any) is ignored.

+ +
+
-engine id
+
+ +

Specifying an engine (by its unique id string) will cause dsaparam to attempt to obtain a functional reference to the specified engine, thus initialising it if needed. The engine will then be set as the default for all available algorithms.

+ +
+
+ +

NOTES

+ +

PEM format DSA parameters use the header and footer lines:

+ +
-----BEGIN DSA PARAMETERS-----
+-----END DSA PARAMETERS-----
+ +

DSA parameter generation is a slow process and as a result the same set of DSA parameters is often used to generate several distinct keys.

+ +

SEE ALSO

+ +

gendsa(1), dsa(1), genrsa(1), rsa(1)

+ +

COPYRIGHT

+ +

Copyright 2000-2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/ec.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/ec.html new file mode 100644 index 00000000..864feca4 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/ec.html @@ -0,0 +1,198 @@ + + + + +ec + + + + + + + + + + +

NAME

+ +

openssl-ec, ec - EC key processing

+ +

SYNOPSIS

+ +

openssl ec [-help] [-inform PEM|DER] [-outform PEM|DER] [-in filename] [-passin arg] [-out filename] [-passout arg] [-des] [-des3] [-idea] [-text] [-noout] [-param_out] [-pubin] [-pubout] [-conv_form arg] [-param_enc arg] [-no_public] [-check] [-engine id]

+ +

DESCRIPTION

+ +

The ec command processes EC keys. They can be converted between various forms and their components printed out. Note OpenSSL uses the private key format specified in 'SEC 1: Elliptic Curve Cryptography' (http://www.secg.org/). To convert an OpenSSL EC private key into the PKCS#8 private key format use the pkcs8 command.

+ +

OPTIONS

+ +
+ +
-help
+
+ +

Print out a usage message.

+ +
+
-inform DER|PEM
+
+ +

This specifies the input format. The DER option with a private key uses an ASN.1 DER encoded SEC1 private key. When used with a public key it uses the SubjectPublicKeyInfo structure as specified in RFC 3280. The PEM form is the default format: it consists of the DER format base64 encoded with additional header and footer lines. In the case of a private key PKCS#8 format is also accepted.

+ +
+
-outform DER|PEM
+
+ +

This specifies the output format, the options have the same meaning and default as the -inform option.

+ +
+
-in filename
+
+ +

This specifies the input filename to read a key from or standard input if this option is not specified. If the key is encrypted a pass phrase will be prompted for.

+ +
+
-passin arg
+
+ +

The input file password source. For more information about the format of arg see the PASS PHRASE ARGUMENTS section in openssl(1).

+ +
+
-out filename
+
+ +

This specifies the output filename to write a key to or standard output by is not specified. If any encryption options are set then a pass phrase will be prompted for. The output filename should not be the same as the input filename.

+ +
+
-passout arg
+
+ +

The output file password source. For more information about the format of arg see the PASS PHRASE ARGUMENTS section in openssl(1).

+ +
+
-des|-des3|-idea
+
+ +

These options encrypt the private key with the DES, triple DES, IDEA or any other cipher supported by OpenSSL before outputting it. A pass phrase is prompted for. If none of these options is specified the key is written in plain text. This means that using the ec utility to read in an encrypted key with no encryption option can be used to remove the pass phrase from a key, or by setting the encryption options it can be use to add or change the pass phrase. These options can only be used with PEM format output files.

+ +
+
-text
+
+ +

Prints out the public, private key components and parameters.

+ +
+
-noout
+
+ +

This option prevents output of the encoded version of the key.

+ +
+
-pubin
+
+ +

By default, a private key is read from the input file. With this option a public key is read instead.

+ +
+
-pubout
+
+ +

By default a private key is output. With this option a public key will be output instead. This option is automatically set if the input is a public key.

+ +
+
-conv_form
+
+ +

This specifies how the points on the elliptic curve are converted into octet strings. Possible values are: compressed (the default value), uncompressed and hybrid. For more information regarding the point conversion forms please read the X9.62 standard. Note Due to patent issues the compressed option is disabled by default for binary curves and can be enabled by defining the preprocessor macro OPENSSL_EC_BIN_PT_COMP at compile time.

+ +
+
-param_enc arg
+
+ +

This specifies how the elliptic curve parameters are encoded. Possible value are: named_curve, i.e. the ec parameters are specified by an OID, or explicit where the ec parameters are explicitly given (see RFC 3279 for the definition of the EC parameters structures). The default value is named_curve. Note the implicitlyCA alternative, as specified in RFC 3279, is currently not implemented in OpenSSL.

+ +
+
-no_public
+
+ +

This option omits the public key components from the private key output.

+ +
+
-check
+
+ +

This option checks the consistency of an EC private or public key.

+ +
+
-engine id
+
+ +

Specifying an engine (by its unique id string) will cause ec to attempt to obtain a functional reference to the specified engine, thus initialising it if needed. The engine will then be set as the default for all available algorithms.

+ +
+
+ +

NOTES

+ +

The PEM private key format uses the header and footer lines:

+ +
-----BEGIN EC PRIVATE KEY-----
+-----END EC PRIVATE KEY-----
+ +

The PEM public key format uses the header and footer lines:

+ +
-----BEGIN PUBLIC KEY-----
+-----END PUBLIC KEY-----
+ +

EXAMPLES

+ +

To encrypt a private key using triple DES:

+ +
openssl ec -in key.pem -des3 -out keyout.pem
+ +

To convert a private key from PEM to DER format:

+ +
openssl ec -in key.pem -outform DER -out keyout.der
+ +

To print out the components of a private key to standard output:

+ +
openssl ec -in key.pem -text -noout
+ +

To just output the public part of a private key:

+ +
openssl ec -in key.pem -pubout -out pubkey.pem
+ +

To change the parameters encoding to explicit:

+ +
openssl ec -in key.pem -param_enc explicit -out keyout.pem
+ +

To change the point conversion form to compressed:

+ +
openssl ec -in key.pem -conv_form compressed -out keyout.pem
+ +

SEE ALSO

+ +

ecparam(1), dsa(1), rsa(1)

+ +

COPYRIGHT

+ +

Copyright 2003-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/ecparam.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/ecparam.html new file mode 100644 index 00000000..440835d3 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/ecparam.html @@ -0,0 +1,201 @@ + + + + +ecparam + + + + + + + + + + +

NAME

+ +

openssl-ecparam, ecparam - EC parameter manipulation and generation

+ +

SYNOPSIS

+ +

openssl ecparam [-help] [-inform DER|PEM] [-outform DER|PEM] [-in filename] [-out filename] [-noout] [-text] [-C] [-check] [-name arg] [-list_curves] [-conv_form arg] [-param_enc arg] [-no_seed] [-rand file...] [-writerand file] [-genkey] [-engine id]

+ +

DESCRIPTION

+ +

This command is used to manipulate or generate EC parameter files.

+ +

OPTIONS

+ +
+ +
-help
+
+ +

Print out a usage message.

+ +
+
-inform DER|PEM
+
+ +

This specifies the input format. The DER option uses an ASN.1 DER encoded form compatible with RFC 3279 EcpkParameters. The PEM form is the default format: it consists of the DER format base64 encoded with additional header and footer lines.

+ +
+
-outform DER|PEM
+
+ +

This specifies the output format, the options have the same meaning and default as the -inform option.

+ +
+
-in filename
+
+ +

This specifies the input filename to read parameters from or standard input if this option is not specified.

+ +
+
-out filename
+
+ +

This specifies the output filename parameters to. Standard output is used if this option is not present. The output filename should not be the same as the input filename.

+ +
+
-noout
+
+ +

This option inhibits the output of the encoded version of the parameters.

+ +
+
-text
+
+ +

This option prints out the EC parameters in human readable form.

+ +
+
-C
+
+ +

This option converts the EC parameters into C code. The parameters can then be loaded by calling the get_ec_group_XXX() function.

+ +
+
-check
+
+ +

Validate the elliptic curve parameters.

+ +
+
-name arg
+
+ +

Use the EC parameters with the specified 'short' name. Use -list_curves to get a list of all currently implemented EC parameters.

+ +
+
-list_curves
+
+ +

If this options is specified ecparam will print out a list of all currently implemented EC parameters names and exit.

+ +
+
-conv_form
+
+ +

This specifies how the points on the elliptic curve are converted into octet strings. Possible values are: compressed, uncompressed (the default value) and hybrid. For more information regarding the point conversion forms please read the X9.62 standard. Note Due to patent issues the compressed option is disabled by default for binary curves and can be enabled by defining the preprocessor macro OPENSSL_EC_BIN_PT_COMP at compile time.

+ +
+
-param_enc arg
+
+ +

This specifies how the elliptic curve parameters are encoded. Possible value are: named_curve, i.e. the ec parameters are specified by an OID, or explicit where the ec parameters are explicitly given (see RFC 3279 for the definition of the EC parameters structures). The default value is named_curve. Note the implicitlyCA alternative, as specified in RFC 3279, is currently not implemented in OpenSSL.

+ +
+
-no_seed
+
+ +

This option inhibits that the 'seed' for the parameter generation is included in the ECParameters structure (see RFC 3279).

+ +
+
-genkey
+
+ +

This option will generate an EC private key using the specified parameters.

+ +
+
-rand file...
+
+ +

A file or files containing random data used to seed the random number generator. Multiple files can be specified separated by an OS-dependent character. The separator is ; for MS-Windows, , for OpenVMS, and : for all others.

+ +
+
[-writerand file]
+
+ +

Writes random data to the specified file upon exit. This can be used with a subsequent -rand flag.

+ +
+
-engine id
+
+ +

Specifying an engine (by its unique id string) will cause ecparam to attempt to obtain a functional reference to the specified engine, thus initialising it if needed. The engine will then be set as the default for all available algorithms.

+ +
+
+ +

NOTES

+ +

PEM format EC parameters use the header and footer lines:

+ +
-----BEGIN EC PARAMETERS-----
+-----END EC PARAMETERS-----
+ +

OpenSSL is currently not able to generate new groups and therefore ecparam can only create EC parameters from known (named) curves.

+ +

EXAMPLES

+ +

To create EC parameters with the group 'prime192v1':

+ +
openssl ecparam -out ec_param.pem -name prime192v1
+ +

To create EC parameters with explicit parameters:

+ +
openssl ecparam -out ec_param.pem -name prime192v1 -param_enc explicit
+ +

To validate given EC parameters:

+ +
openssl ecparam -in ec_param.pem -check
+ +

To create EC parameters and a private key:

+ +
openssl ecparam -out ec_key.pem -name prime192v1 -genkey
+ +

To change the point encoding to 'compressed':

+ +
openssl ecparam -in ec_in.pem -out ec_out.pem -conv_form compressed
+ +

To print out the EC parameters to standard output:

+ +
openssl ecparam -in ec_param.pem -noout -text
+ +

SEE ALSO

+ +

ec(1), dsaparam(1)

+ +

COPYRIGHT

+ +

Copyright 2003-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/enc.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/enc.html new file mode 100644 index 00000000..ce215fe4 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/enc.html @@ -0,0 +1,412 @@ + + + + +enc + + + + + + + + + + +

NAME

+ +

openssl-enc, enc - symmetric cipher routines

+ +

SYNOPSIS

+ +

openssl enc -cipher [-help] [-list] [-ciphers] [-in filename] [-out filename] [-pass arg] [-e] [-d] [-a] [-base64] [-A] [-k password] [-kfile filename] [-K key] [-iv IV] [-S salt] [-salt] [-nosalt] [-z] [-md digest] [-iter count] [-pbkdf2] [-p] [-P] [-bufsize number] [-nopad] [-debug] [-none] [-rand file...] [-writerand file] [-engine id]

+ +

openssl [cipher] [...]

+ +

DESCRIPTION

+ +

The symmetric cipher commands allow data to be encrypted or decrypted using various block and stream ciphers using keys based on passwords or explicitly provided. Base64 encoding or decoding can also be performed either by itself or in addition to the encryption or decryption.

+ +

OPTIONS

+ +
+ +
-help
+
+ +

Print out a usage message.

+ +
+
-list
+
+ +

List all supported ciphers.

+ +
+
-ciphers
+
+ +

Alias of -list to display all supported ciphers.

+ +
+
-in filename
+
+ +

The input filename, standard input by default.

+ +
+
-out filename
+
+ +

The output filename, standard output by default.

+ +
+
-pass arg
+
+ +

The password source. For more information about the format of arg see the PASS PHRASE ARGUMENTS section in openssl(1).

+ +
+
-e
+
+ +

Encrypt the input data: this is the default.

+ +
+
-d
+
+ +

Decrypt the input data.

+ +
+
-a
+
+ +

Base64 process the data. This means that if encryption is taking place the data is base64 encoded after encryption. If decryption is set then the input data is base64 decoded before being decrypted.

+ +
+
-base64
+
+ +

Same as -a

+ +
+
-A
+
+ +

If the -a option is set then base64 process the data on one line.

+ +
+
-k password
+
+ +

The password to derive the key from. This is for compatibility with previous versions of OpenSSL. Superseded by the -pass argument.

+ +
+
-kfile filename
+
+ +

Read the password to derive the key from the first line of filename. This is for compatibility with previous versions of OpenSSL. Superseded by the -pass argument.

+ +
+
-md digest
+
+ +

Use the specified digest to create the key from the passphrase. The default algorithm is sha-256.

+ +
+
-iter count
+
+ +

Use a given number of iterations on the password in deriving the encryption key. High values increase the time required to brute-force the resulting file. This option enables the use of PBKDF2 algorithm to derive the key.

+ +
+
-pbkdf2
+
+ +

Use PBKDF2 algorithm with default iteration count unless otherwise specified.

+ +
+
-nosalt
+
+ +

Don't use a salt in the key derivation routines. This option SHOULD NOT be used except for test purposes or compatibility with ancient versions of OpenSSL.

+ +
+
-salt
+
+ +

Use salt (randomly generated or provide with -S option) when encrypting, this is the default.

+ +
+
-S salt
+
+ +

The actual salt to use: this must be represented as a string of hex digits.

+ +
+
-K key
+
+ +

The actual key to use: this must be represented as a string comprised only of hex digits. If only the key is specified, the IV must additionally specified using the -iv option. When both a key and a password are specified, the key given with the -K option will be used and the IV generated from the password will be taken. It does not make much sense to specify both key and password.

+ +
+
-iv IV
+
+ +

The actual IV to use: this must be represented as a string comprised only of hex digits. When only the key is specified using the -K option, the IV must explicitly be defined. When a password is being specified using one of the other options, the IV is generated from this password.

+ +
+
-p
+
+ +

Print out the key and IV used.

+ +
+
-P
+
+ +

Print out the key and IV used then immediately exit: don't do any encryption or decryption.

+ +
+
-bufsize number
+
+ +

Set the buffer size for I/O.

+ +
+
-nopad
+
+ +

Disable standard block padding.

+ +
+
-debug
+
+ +

Debug the BIOs used for I/O.

+ +
+
-z
+
+ +

Compress or decompress clear text using zlib before encryption or after decryption. This option exists only if OpenSSL with compiled with zlib or zlib-dynamic option.

+ +
+
-none
+
+ +

Use NULL cipher (no encryption or decryption of input).

+ +
+
-rand file...
+
+ +

A file or files containing random data used to seed the random number generator. Multiple files can be specified separated by an OS-dependent character. The separator is ; for MS-Windows, , for OpenVMS, and : for all others.

+ +
+
[-writerand file]
+
+ +

Writes random data to the specified file upon exit. This can be used with a subsequent -rand flag.

+ +
+
+ +

NOTES

+ +

The program can be called either as openssl cipher or openssl enc -cipher. The first form doesn't work with engine-provided ciphers, because this form is processed before the configuration file is read and any ENGINEs loaded. Use the list command to get a list of supported ciphers.

+ +

Engines which provide entirely new encryption algorithms (such as the ccgost engine which provides gost89 algorithm) should be configured in the configuration file. Engines specified on the command line using -engine options can only be used for hardware-assisted implementations of ciphers which are supported by the OpenSSL core or another engine specified in the configuration file.

+ +

When the enc command lists supported ciphers, ciphers provided by engines, specified in the configuration files are listed too.

+ +

A password will be prompted for to derive the key and IV if necessary.

+ +

The -salt option should ALWAYS be used if the key is being derived from a password unless you want compatibility with previous versions of OpenSSL.

+ +

Without the -salt option it is possible to perform efficient dictionary attacks on the password and to attack stream cipher encrypted data. The reason for this is that without the salt the same password always generates the same encryption key. When the salt is being used the first eight bytes of the encrypted data are reserved for the salt: it is generated at random when encrypting a file and read from the encrypted file when it is decrypted.

+ +

Some of the ciphers do not have large keys and others have security implications if not used correctly. A beginner is advised to just use 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 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 block length.

+ +

All RC2 ciphers have the same key and effective key length.

+ +

Blowfish and RC5 algorithms use a 128 bit key.

+ +

SUPPORTED CIPHERS

+ +

Note that some of these ciphers can be disabled at compile time and some are available only if an appropriate engine is configured in the configuration file. The output of the enc command run with the -ciphers option (that is openssl enc -ciphers) produces a list of ciphers, supported by your version of OpenSSL, including ones provided by configured engines.

+ +

The enc program does not support authenticated encryption modes like CCM and GCM, and will not support such modes in the future. The enc interface by necessity must begin streaming output (e.g., to standard output when -out is not used) before the authentication tag could be validated, leading to the usage of enc in pipelines that begin processing untrusted data and are not capable of rolling back upon authentication failure. The AEAD modes currently in common use also suffer from catastrophic failure of confidentiality and/or integrity upon reuse of key/iv/nonce, and since enc places the entire burden of key/iv/nonce management upon the user, the risk of exposing AEAD modes is too great to allow. These key/iv/nonce management issues also affect other modes currently exposed in enc, but the failure modes are less extreme in these cases, and the functionality cannot be removed with a stable release branch. For bulk encryption of data, whether using authenticated encryption modes or other modes, cms(1) is recommended, as it provides a standard data format and performs the needed key/iv/nonce management.

+ +
base64             Base 64
+
+bf-cbc             Blowfish in CBC mode
+bf                 Alias for bf-cbc
+blowfish           Alias for bf-cbc
+bf-cfb             Blowfish in CFB mode
+bf-ecb             Blowfish in ECB mode
+bf-ofb             Blowfish in OFB mode
+
+cast-cbc           CAST in CBC mode
+cast               Alias for cast-cbc
+cast5-cbc          CAST5 in CBC mode
+cast5-cfb          CAST5 in CFB mode
+cast5-ecb          CAST5 in ECB mode
+cast5-ofb          CAST5 in OFB mode
+
+chacha20           ChaCha20 algorithm
+
+des-cbc            DES in CBC mode
+des                Alias for des-cbc
+des-cfb            DES in CFB mode
+des-ofb            DES in OFB mode
+des-ecb            DES in ECB mode
+
+des-ede-cbc        Two key triple DES EDE in CBC mode
+des-ede            Two key triple DES EDE in ECB mode
+des-ede-cfb        Two key triple DES EDE in CFB mode
+des-ede-ofb        Two key triple DES EDE in OFB mode
+
+des-ede3-cbc       Three key triple DES EDE in CBC mode
+des-ede3           Three key triple DES EDE in ECB mode
+des3               Alias for des-ede3-cbc
+des-ede3-cfb       Three key triple DES EDE CFB mode
+des-ede3-ofb       Three key triple DES EDE in OFB mode
+
+desx               DESX algorithm.
+
+gost89             GOST 28147-89 in CFB mode (provided by ccgost engine)
+gost89-cnt        `GOST 28147-89 in CNT mode (provided by ccgost engine)
+
+idea-cbc           IDEA algorithm in CBC mode
+idea               same as idea-cbc
+idea-cfb           IDEA in CFB mode
+idea-ecb           IDEA in ECB mode
+idea-ofb           IDEA in OFB mode
+
+rc2-cbc            128 bit RC2 in CBC mode
+rc2                Alias for rc2-cbc
+rc2-cfb            128 bit RC2 in CFB mode
+rc2-ecb            128 bit RC2 in ECB mode
+rc2-ofb            128 bit RC2 in OFB mode
+rc2-64-cbc         64 bit RC2 in CBC mode
+rc2-40-cbc         40 bit RC2 in CBC mode
+
+rc4                128 bit RC4
+rc4-64             64 bit RC4
+rc4-40             40 bit RC4
+
+rc5-cbc            RC5 cipher in CBC mode
+rc5                Alias for rc5-cbc
+rc5-cfb            RC5 cipher in CFB mode
+rc5-ecb            RC5 cipher in ECB mode
+rc5-ofb            RC5 cipher in OFB mode
+
+seed-cbc           SEED cipher in CBC mode
+seed               Alias for seed-cbc
+seed-cfb           SEED cipher in CFB mode
+seed-ecb           SEED cipher in ECB mode
+seed-ofb           SEED cipher in OFB mode
+
+sm4-cbc            SM4 cipher in CBC mode
+sm4                Alias for sm4-cbc
+sm4-cfb            SM4 cipher in CFB mode
+sm4-ctr            SM4 cipher in CTR mode
+sm4-ecb            SM4 cipher in ECB mode
+sm4-ofb            SM4 cipher in OFB mode
+
+aes-[128|192|256]-cbc  128/192/256 bit AES in CBC mode
+aes[128|192|256]       Alias for aes-[128|192|256]-cbc
+aes-[128|192|256]-cfb  128/192/256 bit AES in 128 bit CFB mode
+aes-[128|192|256]-cfb1 128/192/256 bit AES in 1 bit CFB mode
+aes-[128|192|256]-cfb8 128/192/256 bit AES in 8 bit CFB mode
+aes-[128|192|256]-ctr  128/192/256 bit AES in CTR mode
+aes-[128|192|256]-ecb  128/192/256 bit AES in ECB mode
+aes-[128|192|256]-ofb  128/192/256 bit AES in OFB mode
+
+aria-[128|192|256]-cbc  128/192/256 bit ARIA in CBC mode
+aria[128|192|256]       Alias for aria-[128|192|256]-cbc
+aria-[128|192|256]-cfb  128/192/256 bit ARIA in 128 bit CFB mode
+aria-[128|192|256]-cfb1 128/192/256 bit ARIA in 1 bit CFB mode
+aria-[128|192|256]-cfb8 128/192/256 bit ARIA in 8 bit CFB mode
+aria-[128|192|256]-ctr  128/192/256 bit ARIA in CTR mode
+aria-[128|192|256]-ecb  128/192/256 bit ARIA in ECB mode
+aria-[128|192|256]-ofb  128/192/256 bit ARIA in OFB mode
+
+camellia-[128|192|256]-cbc  128/192/256 bit Camellia in CBC mode
+camellia[128|192|256]       Alias for camellia-[128|192|256]-cbc
+camellia-[128|192|256]-cfb  128/192/256 bit Camellia in 128 bit CFB mode
+camellia-[128|192|256]-cfb1 128/192/256 bit Camellia in 1 bit CFB mode
+camellia-[128|192|256]-cfb8 128/192/256 bit Camellia in 8 bit CFB mode
+camellia-[128|192|256]-ctr  128/192/256 bit Camellia in CTR mode
+camellia-[128|192|256]-ecb  128/192/256 bit Camellia in ECB mode
+camellia-[128|192|256]-ofb  128/192/256 bit Camellia in OFB mode
+ +

EXAMPLES

+ +

Just base64 encode a binary file:

+ +
openssl base64 -in file.bin -out file.b64
+ +

Decode the same file

+ +
openssl base64 -d -in file.b64 -out file.bin
+ +

Encrypt a file using AES-128 using a prompted password and PBKDF2 key derivation:

+ +
openssl enc -aes128 -pbkdf2 -in file.txt -out file.aes128
+ +

Decrypt a file using a supplied password:

+ +
openssl enc -aes128 -pbkdf2 -d -in file.aes128 -out file.txt \
+   -pass pass:<password>
+ +

Encrypt a file then base64 encode it (so it can be sent via mail for example) using AES-256 in CTR mode and PBKDF2 key derivation:

+ +
openssl enc -aes-256-ctr -pbkdf2 -a -in file.txt -out file.aes256
+ +

Base64 decode a file then decrypt it using a password supplied in a file:

+ +
openssl enc -aes-256-ctr -pbkdf2 -d -a -in file.aes256 -out file.txt \
+   -pass file:<passfile>
+ +

BUGS

+ +

The -A option when used with large files doesn't work properly.

+ +

The enc program only supports a fixed number of algorithms with certain parameters. So if, for example, you want to use RC2 with a 76 bit key or RC4 with an 84 bit key you can't use this program.

+ +

HISTORY

+ +

The default digest was changed from MD5 to SHA256 in OpenSSL 1.1.0.

+ +

The -list option was added in OpenSSL 1.1.1e.

+ +

COPYRIGHT

+ +

Copyright 2000-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/engine.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/engine.html new file mode 100644 index 00000000..b40fb1c5 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/engine.html @@ -0,0 +1,133 @@ + + + + +engine + + + + + + + + + + +

NAME

+ +

openssl-engine, engine - load and query engines

+ +

SYNOPSIS

+ +

openssl engine [ engine... ] [-v] [-vv] [-vvv] [-vvv] [-vvv] [-c] [-t] [-tt] [-pre command] [-post command] [ engine... ]

+ +

DESCRIPTION

+ +

The engine command is used to query the status and capabilities of the specified engine's. Engines may be specified before and after all other command-line flags. Only those specified are queried.

+ +

OPTIONS

+ +
+ +
-v -vv -vvv -vvvv
+
+ +

Provides information about each specified engine. The first flag lists all the possible run-time control commands; the second adds a description of each command; the third adds the input flags, and the final option adds the internal input flags.

+ +
+
-c
+
+ +

Lists the capabilities of each engine.

+ +
+
-t
+
+ +

Tests if each specified engine is available, and displays the answer.

+ +
+
-tt
+
+ +

Displays an error trace for any unavailable engine.

+ +
+
-pre command
+
+ +
+
-post command
+
+ +

Command-line configuration of engines. The -pre command is given to the engine before it is loaded and the -post command is given after the engine is loaded. The command is of the form cmd:val where cmd is the command, and val is the value for the command. See the example below.

+ +
+
+ +

EXAMPLES

+ +

To list all the commands available to a dynamic engine:

+ +
$ openssl engine -t -tt -vvvv dynamic
+(dynamic) Dynamic engine loading support
+     [ unavailable ]
+     SO_PATH: Specifies the path to the new ENGINE shared library
+          (input flags): STRING
+     NO_VCHECK: Specifies to continue even if version checking fails (boolean)
+          (input flags): NUMERIC
+     ID: Specifies an ENGINE id name for loading
+          (input flags): STRING
+     LIST_ADD: Whether to add a loaded ENGINE to the internal list (0=no,1=yes,2=mandatory)
+          (input flags): NUMERIC
+     DIR_LOAD: Specifies whether to load from 'DIR_ADD' directories (0=no,1=yes,2=mandatory)
+          (input flags): NUMERIC
+     DIR_ADD: Adds a directory from which ENGINEs can be loaded
+          (input flags): STRING
+     LOAD: Load up the ENGINE specified by other settings
+          (input flags): NO_INPUT
+ +

To list the capabilities of the rsax engine:

+ +
$ openssl engine -c
+(rsax) RSAX engine support
+ [RSA]
+(dynamic) Dynamic engine loading support
+ +

ENVIRONMENT

+ +
+ +
OPENSSL_ENGINES
+
+ +

The path to the engines directory.

+ +
+
+ +

SEE ALSO

+ +

config(5)

+ +

COPYRIGHT

+ +

Copyright 2016-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/errstr.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/errstr.html new file mode 100644 index 00000000..0d4868cb --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/errstr.html @@ -0,0 +1,64 @@ + + + + +errstr + + + + + + + + + + +

NAME

+ +

openssl-errstr, errstr - lookup error codes

+ +

SYNOPSIS

+ +

openssl errstr error_code

+ +

DESCRIPTION

+ +

Sometimes an application will not load error message and only numerical forms will be available. The errstr utility can be used to display the meaning of the hex code. The hex code is the hex digits after the second colon.

+ +

OPTIONS

+ +

None.

+ +

EXAMPLES

+ +

The error code:

+ +
27594:error:2006D080:lib(32):func(109):reason(128):bss_file.c:107:
+ +

can be displayed with:

+ +
openssl errstr 2006D080
+ +

to produce the error message:

+ +
error:2006D080:BIO routines:BIO_new_file:no such file
+ +

COPYRIGHT

+ +

Copyright 2004-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/gendsa.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/gendsa.html new file mode 100644 index 00000000..7a2dd65a --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/gendsa.html @@ -0,0 +1,103 @@ + + + + +gendsa + + + + + + + + + + +

NAME

+ +

openssl-gendsa, gendsa - generate a DSA private key from a set of parameters

+ +

SYNOPSIS

+ +

openssl gendsa [-help] [-out filename] [-aes128] [-aes192] [-aes256] [-aria128] [-aria192] [-aria256] [-camellia128] [-camellia192] [-camellia256] [-des] [-des3] [-idea] [-rand file...] [-writerand file] [-engine id] [paramfile]

+ +

DESCRIPTION

+ +

The gendsa command generates a DSA private key from a DSA parameter file (which will be typically generated by the openssl dsaparam command).

+ +

OPTIONS

+ +
+ +
-help
+
+ +

Print out a usage message.

+ +
+
-out filename
+
+ +

Output the key to the specified file. If this argument is not specified then standard output is used.

+ +
+
-aes128, -aes192, -aes256, -aria128, -aria192, -aria256, -camellia128, -camellia192, -camellia256, -des, -des3, -idea
+
+ +

These options encrypt the private key with specified cipher before outputting it. A pass phrase is prompted for. If none of these options is specified no encryption is used.

+ +
+
-rand file...
+
+ +

A file or files containing random data used to seed the random number generator. Multiple files can be specified separated by an OS-dependent character. The separator is ; for MS-Windows, , for OpenVMS, and : for all others.

+ +
+
[-writerand file]
+
+ +

Writes random data to the specified file upon exit. This can be used with a subsequent -rand flag.

+ +
+
-engine id
+
+ +

Specifying an engine (by its unique id string) will cause gendsa to attempt to obtain a functional reference to the specified engine, thus initialising it if needed. The engine will then be set as the default for all available algorithms.

+ +
+
paramfile
+
+ +

This option specifies the DSA parameter file to use. The parameters in this file determine the size of the private key. DSA parameters can be generated and examined using the openssl dsaparam command.

+ +
+
+ +

NOTES

+ +

DSA key generation is little more than random number generation so it is much quicker that RSA key generation for example.

+ +

SEE ALSO

+ +

dsaparam(1), dsa(1), genrsa(1), rsa(1)

+ +

COPYRIGHT

+ +

Copyright 2000-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/genpkey.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/genpkey.html new file mode 100644 index 00000000..453fdde1 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/genpkey.html @@ -0,0 +1,363 @@ + + + + +genpkey + + + + + + + + + + +

NAME

+ +

openssl-genpkey, genpkey - generate a private key

+ +

SYNOPSIS

+ +

openssl genpkey [-help] [-out filename] [-outform PEM|DER] [-pass arg] [-cipher] [-engine id] [-paramfile file] [-algorithm alg] [-pkeyopt opt:value] [-genparam] [-text]

+ +

DESCRIPTION

+ +

The genpkey command generates a private key.

+ +

OPTIONS

+ +
+ +
-help
+
+ +

Print out a usage message.

+ +
+
-out filename
+
+ +

Output the key to the specified file. If this argument is not specified then standard output is used.

+ +
+
-outform DER|PEM
+
+ +

This specifies the output format DER or PEM. The default format is PEM.

+ +
+
-pass arg
+
+ +

The output file password source. For more information about the format of arg see the PASS PHRASE ARGUMENTS section in openssl(1).

+ +
+
-cipher
+
+ +

This option encrypts the private key with the supplied cipher. Any algorithm name accepted by EVP_get_cipherbyname() is acceptable such as des3.

+ +
+
-engine id
+
+ +

Specifying an engine (by its unique id string) will cause genpkey to attempt to obtain a functional reference to the specified engine, thus initialising it if needed. The engine will then be set as the default for all available algorithms. If used this option should precede all other options.

+ +
+
-algorithm alg
+
+ +

Public key algorithm to use such as RSA, DSA or DH. If used this option must precede any -pkeyopt options. The options -paramfile and -algorithm are mutually exclusive. Engines may add algorithms in addition to the standard built-in ones.

+ +

Valid built-in algorithm names for private key generation are RSA, RSA-PSS, EC, X25519, X448, ED25519 and ED448.

+ +

Valid built-in algorithm names for parameter generation (see the -genparam option) are DH, DSA and EC.

+ +

Note that the algorithm name X9.42 DH may be used as a synonym for the DH algorithm. These are identical and do not indicate the type of parameters that will be generated. Use the dh_paramgen_type option to indicate whether PKCS#3 or X9.42 DH parameters are required. See "DH Parameter Generation Options" below for more details.

+ +
+
-pkeyopt opt:value
+
+ +

Set the public key algorithm option opt to value. The precise set of options supported depends on the public key algorithm used and its implementation. See "KEY GENERATION OPTIONS" and "PARAMETER GENERATION OPTIONS" below for more details.

+ +
+
-genparam
+
+ +

Generate a set of parameters instead of a private key. If used this option must precede any -algorithm, -paramfile or -pkeyopt options.

+ +
+
-paramfile filename
+
+ +

Some public key algorithms generate a private key based on a set of parameters. They can be supplied using this option. If this option is used the public key algorithm used is determined by the parameters. If used this option must precede any -pkeyopt options. The options -paramfile and -algorithm are mutually exclusive.

+ +
+
-text
+
+ +

Print an (unencrypted) text representation of private and public keys and parameters along with the PEM or DER structure.

+ +
+
+ +

KEY GENERATION OPTIONS

+ +

The options supported by each algorithm and indeed each implementation of an algorithm can vary. The options for the OpenSSL implementations are detailed below. There are no key generation options defined for the X25519, X448, ED25519 or ED448 algorithms.

+ +

RSA Key Generation Options

+ +
+ +
rsa_keygen_bits:numbits
+
+ +

The number of bits in the generated key. If not specified 2048 is used.

+ +
+
rsa_keygen_primes:numprimes
+
+ +

The number of primes in the generated key. If not specified 2 is used.

+ +
+
rsa_keygen_pubexp:value
+
+ +

The RSA public exponent value. This can be a large decimal or hexadecimal value if preceded by 0x. Default value is 65537.

+ +
+
+ +

RSA-PSS Key Generation Options

+ +

Note: by default an RSA-PSS key has no parameter restrictions.

+ +
+ +
rsa_keygen_bits:numbits, rsa_keygen_primes:numprimes, rsa_keygen_pubexp:value
+
+ +

These options have the same meaning as the RSA algorithm.

+ +
+
rsa_pss_keygen_md:digest
+
+ +

If set the key is restricted and can only use digest for signing.

+ +
+
rsa_pss_keygen_mgf1_md:digest
+
+ +

If set the key is restricted and can only use digest as it's MGF1 parameter.

+ +
+
rsa_pss_keygen_saltlen:len
+
+ +

If set the key is restricted and len specifies the minimum salt length.

+ +
+
+ +

EC Key Generation Options

+ +

The EC key generation options can also be used for parameter generation.

+ +
+ +
ec_paramgen_curve:curve
+
+ +

The EC curve to use. OpenSSL supports NIST curve names such as "P-256".

+ +
+
ec_param_enc:encoding
+
+ +

The encoding to use for parameters. The "encoding" parameter must be either "named_curve" or "explicit". The default value is "named_curve".

+ +
+
+ +

PARAMETER GENERATION OPTIONS

+ +

The options supported by each algorithm and indeed each implementation of an algorithm can vary. The options for the OpenSSL implementations are detailed below.

+ +

DSA Parameter Generation Options

+ +
+ +
dsa_paramgen_bits:numbits
+
+ +

The number of bits in the generated prime. If not specified 2048 is used.

+ +
+
dsa_paramgen_q_bits:numbits
+
+ +

The number of bits in the q parameter. Must be one of 160, 224 or 256. If not specified 224 is used.

+ +
+
dsa_paramgen_md:digest
+
+ +

The digest to use during parameter generation. Must be one of sha1, sha224 or sha256. If set, then the number of bits in q will match the output size of the specified digest and the dsa_paramgen_q_bits parameter will be ignored. If not set, then a digest will be used that gives an output matching the number of bits in q, i.e. sha1 if q length is 160, sha224 if it 224 or sha256 if it is 256.

+ +
+
+ +

DH Parameter Generation Options

+ +
+ +
dh_paramgen_prime_len:numbits
+
+ +

The number of bits in the prime parameter p. The default is 2048.

+ +
+
dh_paramgen_subprime_len:numbits
+
+ +

The number of bits in the sub prime parameter q. The default is 256 if the prime is at least 2048 bits long or 160 otherwise. Only relevant if used in conjunction with the dh_paramgen_type option to generate X9.42 DH parameters.

+ +
+
dh_paramgen_generator:value
+
+ +

The value to use for the generator g. The default is 2.

+ +
+
dh_paramgen_type:value
+
+ +

The type of DH parameters to generate. Use 0 for PKCS#3 DH and 1 for X9.42 DH. The default is 0.

+ +
+
dh_rfc5114:num
+
+ +

If this option is set, then the appropriate RFC5114 parameters are used instead of generating new parameters. The value num can take the values 1, 2 or 3 corresponding to RFC5114 DH parameters consisting of 1024 bit group with 160 bit subgroup, 2048 bit group with 224 bit subgroup and 2048 bit group with 256 bit subgroup as mentioned in RFC5114 sections 2.1, 2.2 and 2.3 respectively. If present this overrides all other DH parameter options.

+ +
+
+ +

EC Parameter Generation Options

+ +

The EC parameter generation options are the same as for key generation. See "EC Key Generation Options" above.

+ +

NOTES

+ +

The use of the genpkey program is encouraged over the algorithm specific utilities because additional algorithm options and ENGINE provided algorithms can be used.

+ +

EXAMPLES

+ +

Generate an RSA private key using default parameters:

+ +
openssl genpkey -algorithm RSA -out key.pem
+ +

Encrypt output private key using 128 bit AES and the passphrase "hello":

+ +
openssl genpkey -algorithm RSA -out key.pem -aes-128-cbc -pass pass:hello
+ +

Generate a 2048 bit RSA key using 3 as the public exponent:

+ +
openssl genpkey -algorithm RSA -out key.pem \
+    -pkeyopt rsa_keygen_bits:2048 -pkeyopt rsa_keygen_pubexp:3
+ +

Generate 2048 bit DSA parameters:

+ +
openssl genpkey -genparam -algorithm DSA -out dsap.pem \
+    -pkeyopt dsa_paramgen_bits:2048
+ +

Generate DSA key from parameters:

+ +
openssl genpkey -paramfile dsap.pem -out dsakey.pem
+ +

Generate 2048 bit DH parameters:

+ +
openssl genpkey -genparam -algorithm DH -out dhp.pem \
+    -pkeyopt dh_paramgen_prime_len:2048
+ +

Generate 2048 bit X9.42 DH parameters:

+ +
openssl genpkey -genparam -algorithm DH -out dhpx.pem \
+    -pkeyopt dh_paramgen_prime_len:2048 \
+    -pkeyopt dh_paramgen_type:1
+ +

Output RFC5114 2048 bit DH parameters with 224 bit subgroup:

+ +
openssl genpkey -genparam -algorithm DH -out dhp.pem -pkeyopt dh_rfc5114:2
+ +

Generate DH key from parameters:

+ +
openssl genpkey -paramfile dhp.pem -out dhkey.pem
+ +

Generate EC parameters:

+ +
openssl genpkey -genparam -algorithm EC -out ecp.pem \
+       -pkeyopt ec_paramgen_curve:secp384r1 \
+       -pkeyopt ec_param_enc:named_curve
+ +

Generate EC key from parameters:

+ +
openssl genpkey -paramfile ecp.pem -out eckey.pem
+ +

Generate EC key directly:

+ +
openssl genpkey -algorithm EC -out eckey.pem \
+       -pkeyopt ec_paramgen_curve:P-384 \
+       -pkeyopt ec_param_enc:named_curve
+ +

Generate an X25519 private key:

+ +
openssl genpkey -algorithm X25519 -out xkey.pem
+ +

Generate an ED448 private key:

+ +
openssl genpkey -algorithm ED448 -out xkey.pem
+ +

HISTORY

+ +

The ability to use NIST curve names, and to generate an EC key directly, were added in OpenSSL 1.0.2. The ability to generate X25519 keys was added in OpenSSL 1.1.0. The ability to generate X448, ED25519 and ED448 keys was added in OpenSSL 1.1.1.

+ +

COPYRIGHT

+ +

Copyright 2006-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/genrsa.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/genrsa.html new file mode 100644 index 00000000..80ad33de --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/genrsa.html @@ -0,0 +1,123 @@ + + + + +genrsa + + + + + + + + + + +

NAME

+ +

openssl-genrsa, genrsa - generate an RSA private key

+ +

SYNOPSIS

+ +

openssl genrsa [-help] [-out filename] [-passout arg] [-aes128] [-aes192] [-aes256] [-aria128] [-aria192] [-aria256] [-camellia128] [-camellia192] [-camellia256] [-des] [-des3] [-idea] [-f4] [-3] [-rand file...] [-writerand file] [-engine id] [-primes num] [numbits]

+ +

DESCRIPTION

+ +

The genrsa command generates an RSA private key.

+ +

OPTIONS

+ +
+ +
-help
+
+ +

Print out a usage message.

+ +
+
-out filename
+
+ +

Output the key to the specified file. If this argument is not specified then standard output is used.

+ +
+
-passout arg
+
+ +

The output file password source. For more information about the format of arg see the PASS PHRASE ARGUMENTS section in openssl(1).

+ +
+
-aes128, -aes192, -aes256, -aria128, -aria192, -aria256, -camellia128, -camellia192, -camellia256, -des, -des3, -idea
+
+ +

These options encrypt the private key with specified cipher before outputting it. If none of these options is specified no encryption is used. If encryption is used a pass phrase is prompted for if it is not supplied via the -passout argument.

+ +
+
-F4|-3
+
+ +

The public exponent to use, either 65537 or 3. The default is 65537.

+ +
+
-rand file...
+
+ +

A file or files containing random data used to seed the random number generator. Multiple files can be specified separated by an OS-dependent character. The separator is ; for MS-Windows, , for OpenVMS, and : for all others.

+ +
+
[-writerand file]
+
+ +

Writes random data to the specified file upon exit. This can be used with a subsequent -rand flag.

+ +
+
-engine id
+
+ +

Specifying an engine (by its unique id string) will cause genrsa to attempt to obtain a functional reference to the specified engine, thus initialising it if needed. The engine will then be set as the default for all available algorithms.

+ +
+
-primes num
+
+ +

Specify the number of primes to use while generating the RSA key. The num parameter must be a positive integer that is greater than 1 and less than 16. If num is greater than 2, then the generated key is called a 'multi-prime' RSA key, which is defined in RFC 8017.

+ +
+
numbits
+
+ +

The size of the private key to generate in bits. This must be the last option specified. The default is 2048 and values less than 512 are not allowed.

+ +
+
+ +

NOTES

+ +

RSA private key generation essentially involves the generation of two or more prime numbers. When generating a private key various symbols will be output to indicate the progress of the generation. A . represents each number which has passed an initial sieve test, + means a number has passed a single round of the Miller-Rabin primality test, * means the current prime starts a regenerating progress due to some failed tests. A newline means that the number has passed all the prime tests (the actual number depends on the key size).

+ +

Because key generation is a random process the time taken to generate a key may vary somewhat. But in general, more primes lead to less generation time of a key.

+ +

SEE ALSO

+ +

gendsa(1)

+ +

COPYRIGHT

+ +

Copyright 2000-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/list.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/list.html new file mode 100644 index 00000000..f0c5e04b --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/list.html @@ -0,0 +1,111 @@ + + + + +list + + + + + + + + + + +

NAME

+ +

openssl-list, list - list algorithms and features

+ +

SYNOPSIS

+ +

openssl list [-help] [-1] [-commands] [-digest-commands] [-digest-algorithms] [-cipher-commands] [-cipher-algorithms] [-public-key-algorithms] [-public-key-methods] [-disabled]

+ +

DESCRIPTION

+ +

This command is used to generate list of algorithms or disabled features.

+ +

OPTIONS

+ +
+ +
-help
+
+ +

Display a usage message.

+ +
+
-1
+
+ +

List the commands, digest-commands, or cipher-commands in a single column. If used, this option must be given first.

+ +
+
-commands
+
+ +

Display a list of standard commands.

+ +
+
-digest-commands
+
+ +

Display a list of message digest commands, which are typically used as input to the dgst(1) or speed(1) commands.

+ +
+
-digest-algorithms
+
+ +

Display a list of message digest algorithms. If a line is of the form foo => bar then foo is an alias for the official algorithm name, bar.

+ +
+
-cipher-commands
+
+ +

Display a list of cipher commands, which are typically used as input to the dgst(1) or speed(1) commands.

+ +
+
-cipher-algorithms
+
+ +

Display a list of cipher algorithms. If a line is of the form foo => bar then foo is an alias for the official algorithm name, bar.

+ +
+
-public-key-algorithms
+
+ +

Display a list of public key algorithms, with each algorithm as a block of multiple lines, all but the first are indented.

+ +
+
-public-key-methods
+
+ +

Display a list of public key method OIDs: this also includes public key methods without an associated ASN.1 method, for example, KDF algorithms.

+ +
+
-disabled
+
+ +

Display a list of disabled features, those that were compiled out of the installation.

+ +
+
+ +

COPYRIGHT

+ +

Copyright 2016-2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/nseq.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/nseq.html new file mode 100644 index 00000000..3983f48a --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/nseq.html @@ -0,0 +1,101 @@ + + + + +nseq + + + + + + + + + + +

NAME

+ +

openssl-nseq, nseq - create or examine a Netscape certificate sequence

+ +

SYNOPSIS

+ +

openssl nseq [-help] [-in filename] [-out filename] [-toseq]

+ +

DESCRIPTION

+ +

The nseq command takes a file containing a Netscape certificate sequence and prints out the certificates contained in it or takes a file of certificates and converts it into a Netscape certificate sequence.

+ +

OPTIONS

+ +
+ +
-help
+
+ +

Print out a usage message.

+ +
+
-in filename
+
+ +

This specifies the input filename to read or standard input if this option is not specified.

+ +
+
-out filename
+
+ +

Specifies the output filename or standard output by default.

+ +
+
-toseq
+
+ +

Normally a Netscape certificate sequence will be input and the output is the certificates contained in it. With the -toseq option the situation is reversed: a Netscape certificate sequence is created from a file of certificates.

+ +
+
+ +

EXAMPLES

+ +

Output the certificates in a Netscape certificate sequence

+ +
openssl nseq -in nseq.pem -out certs.pem
+ +

Create a Netscape certificate sequence

+ +
openssl nseq -in certs.pem -toseq -out nseq.pem
+ +

NOTES

+ +

The PEM encoded form uses the same headers and footers as a certificate:

+ +
-----BEGIN CERTIFICATE-----
+-----END CERTIFICATE-----
+ +

A Netscape certificate sequence is a Netscape specific format that can be sent to browsers as an alternative to the standard PKCS#7 format when several certificates are sent to the browser: for example during certificate enrollment. It is used by Netscape certificate server for example.

+ +

BUGS

+ +

This program needs a few more options: like allowing DER or PEM input and output files and allowing multiple certificate files to be used.

+ +

COPYRIGHT

+ +

Copyright 2000-2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/ocsp.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/ocsp.html new file mode 100644 index 00000000..d8d27273 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/ocsp.html @@ -0,0 +1,415 @@ + + + + +ocsp + + + + + + + + + + +

NAME

+ +

openssl-ocsp, ocsp - Online Certificate Status Protocol utility

+ +

SYNOPSIS

+ +

openssl ocsp [-help] [-out file] [-issuer file] [-cert file] [-serial n] [-signer file] [-signkey file] [-sign_other file] [-no_certs] [-req_text] [-resp_text] [-text] [-reqout file] [-respout file] [-reqin file] [-respin file] [-nonce] [-no_nonce] [-url URL] [-host host:port] [-multi process-count] [-header] [-path] [-CApath dir] [-CAfile file] [-no-CAfile] [-no-CApath] [-attime timestamp] [-check_ss_sig] [-crl_check] [-crl_check_all] [-explicit_policy] [-extended_crl] [-ignore_critical] [-inhibit_any] [-inhibit_map] [-no_check_time] [-partial_chain] [-policy arg] [-policy_check] [-policy_print] [-purpose purpose] [-suiteB_128] [-suiteB_128_only] [-suiteB_192] [-trusted_first] [-no_alt_chains] [-use_deltas] [-auth_level num] [-verify_depth num] [-verify_email email] [-verify_hostname hostname] [-verify_ip ip] [-verify_name name] [-x509_strict] [-VAfile file] [-validity_period n] [-status_age n] [-noverify] [-verify_other file] [-trust_other] [-no_intern] [-no_signature_verify] [-no_cert_verify] [-no_chain] [-no_cert_checks] [-no_explicit] [-port num] [-ignore_err] [-index file] [-CA file] [-rsigner file] [-rkey file] [-rother file] [-rsigopt nm:v] [-resp_no_certs] [-nmin n] [-ndays n] [-resp_key_id] [-nrequest n] [-digest]

+ +

DESCRIPTION

+ +

The Online Certificate Status Protocol (OCSP) enables applications to determine the (revocation) state of an identified certificate (RFC 2560).

+ +

The ocsp command performs many common OCSP tasks. It can be used to print out requests and responses, create requests and send queries to an OCSP responder and behave like a mini OCSP server itself.

+ +

OPTIONS

+ +

This command operates as either a client or a server. The options are described below, divided into those two modes.

+ +

OCSP Client Options

+ +
+ +
-help
+
+ +

Print out a usage message.

+ +
+
-out filename
+
+ +

specify output filename, default is standard output.

+ +
+
-issuer filename
+
+ +

This specifies the current issuer certificate. This option can be used multiple times. The certificate specified in filename must be in PEM format. This option MUST come before any -cert options.

+ +
+
-cert filename
+
+ +

Add the certificate filename to the request. The issuer certificate is taken from the previous issuer option, or an error occurs if no issuer certificate is specified.

+ +
+
-serial num
+
+ +

Same as the cert option except the certificate with serial number num is added to the request. The serial number is interpreted as a decimal integer unless preceded by 0x. Negative integers can also be specified by preceding the value by a - sign.

+ +
+
-signer filename, -signkey filename
+
+ +

Sign the OCSP request using the certificate specified in the signer option and the private key specified by the signkey option. If the signkey option is not present then the private key is read from the same file as the certificate. If neither option is specified then the OCSP request is not signed.

+ +
+
-sign_other filename
+
+ +

Additional certificates to include in the signed request.

+ +
+
-nonce, -no_nonce
+
+ +

Add an OCSP nonce extension to a request or disable OCSP nonce addition. Normally if an OCSP request is input using the reqin option no nonce is added: using the nonce option will force addition of a nonce. If an OCSP request is being created (using cert and serial options) a nonce is automatically added specifying no_nonce overrides this.

+ +
+
-req_text, -resp_text, -text
+
+ +

Print out the text form of the OCSP request, response or both respectively.

+ +
+
-reqout file, -respout file
+
+ +

Write out the DER encoded certificate request or response to file.

+ +
+
-reqin file, -respin file
+
+ +

Read OCSP request or response file from file. These option are ignored if OCSP request or response creation is implied by other options (for example with serial, cert and host options).

+ +
+
-url responder_url
+
+ +

Specify the responder URL. Both HTTP and HTTPS (SSL/TLS) URLs can be specified.

+ +
+
-host hostname:port, -path pathname
+
+ +

If the host option is present then the OCSP request is sent to the host hostname on port port. path specifies the HTTP path name to use or "/" by default. This is equivalent to specifying -url with scheme http:// and the given hostname, port, and pathname.

+ +
+
-header name=value
+
+ +

Adds the header name with the specified value to the OCSP request that is sent to the responder. This may be repeated.

+ +
+
-timeout seconds
+
+ +

Connection timeout to the OCSP responder in seconds. On POSIX systems, when running as an OCSP responder, this option also limits the time that the responder is willing to wait for the client request. This time is measured from the time the responder accepts the connection until the complete request is received.

+ +
+
-multi process-count
+
+ +

Run the specified number of OCSP responder child processes, with the parent process respawning child processes as needed. Child processes will detect changes in the CA index file and automatically reload it. When running as a responder -timeout option is recommended to limit the time each child is willing to wait for the client's OCSP response. This option is available on POSIX systems (that support the fork() and other required unix system-calls).

+ +
+
-CAfile file, -CApath pathname
+
+ +

File or pathname containing trusted CA certificates. These are used to verify the signature on the OCSP response.

+ +
+
-no-CAfile
+
+ +

Do not load the trusted CA certificates from the default file location

+ +
+
-no-CApath
+
+ +

Do not load the trusted CA certificates from the default directory location

+ +
+
-attime, -check_ss_sig, -crl_check, -crl_check_all, -explicit_policy, -extended_crl, -ignore_critical, -inhibit_any, -inhibit_map, -no_alt_chains, -no_check_time, -partial_chain, -policy, -policy_check, -policy_print, -purpose, -suiteB_128, -suiteB_128_only, -suiteB_192, -trusted_first, -use_deltas, -auth_level, -verify_depth, -verify_email, -verify_hostname, -verify_ip, -verify_name, -x509_strict
+
+ +

Set different certificate verification options. See verify(1) manual page for details.

+ +
+
-verify_other file
+
+ +

File containing additional certificates to search when attempting to locate the OCSP response signing certificate. Some responders omit the actual signer's certificate from the response: this option can be used to supply the necessary certificate in such cases.

+ +
+
-trust_other
+
+ +

The certificates specified by the -verify_other option should be explicitly trusted and no additional checks will be performed on them. This is useful when the complete responder certificate chain is not available or trusting a root CA is not appropriate.

+ +
+
-VAfile file
+
+ +

File containing explicitly trusted responder certificates. Equivalent to the -verify_other and -trust_other options.

+ +
+
-noverify
+
+ +

Don't attempt to verify the OCSP response signature or the nonce values. This option will normally only be used for debugging since it disables all verification of the responders certificate.

+ +
+
-no_intern
+
+ +

Ignore certificates contained in the OCSP response when searching for the signers certificate. With this option the signers certificate must be specified with either the -verify_other or -VAfile options.

+ +
+
-no_signature_verify
+
+ +

Don't check the signature on the OCSP response. Since this option tolerates invalid signatures on OCSP responses it will normally only be used for testing purposes.

+ +
+
-no_cert_verify
+
+ +

Don't verify the OCSP response signers certificate at all. Since this option allows the OCSP response to be signed by any certificate it should only be used for testing purposes.

+ +
+
-no_chain
+
+ +

Do not use certificates in the response as additional untrusted CA certificates.

+ +
+
-no_explicit
+
+ +

Do not explicitly trust the root CA if it is set to be trusted for OCSP signing.

+ +
+
-no_cert_checks
+
+ +

Don't perform any additional checks on the OCSP response signers certificate. That is do not make any checks to see if the signers certificate is authorised to provide the necessary status information: as a result this option should only be used for testing purposes.

+ +
+
-validity_period nsec, -status_age age
+
+ +

These options specify the range of times, in seconds, which will be tolerated in an OCSP response. Each certificate status response includes a notBefore time and an optional notAfter time. The current time should fall between these two values, but the interval between the two times may be only a few seconds. In practice the OCSP responder and clients clocks may not be precisely synchronised and so such a check may fail. To avoid this the -validity_period option can be used to specify an acceptable error range in seconds, the default value is 5 minutes.

+ +

If the notAfter time is omitted from a response then this means that new status information is immediately available. In this case the age of the notBefore field is checked to see it is not older than age seconds old. By default this additional check is not performed.

+ +
+
-digest
+
+ +

This option sets digest algorithm to use for certificate identification in the OCSP request. Any digest supported by the OpenSSL dgst command can be used. The default is SHA-1. This option may be used multiple times to specify the digest used by subsequent certificate identifiers.

+ +
+
+ +

OCSP Server Options

+ +
+ +
-index indexfile
+
+ +

The indexfile parameter is the name of a text index file in ca format containing certificate revocation information.

+ +

If the index option is specified the ocsp utility is in responder mode, otherwise it is in client mode. The request(s) the responder processes can be either specified on the command line (using issuer and serial options), supplied in a file (using the reqin option) or via external OCSP clients (if port or url is specified).

+ +

If the index option is present then the CA and rsigner options must also be present.

+ +
+
-CA file
+
+ +

CA certificate corresponding to the revocation information in indexfile.

+ +
+
-rsigner file
+
+ +

The certificate to sign OCSP responses with.

+ +
+
-rother file
+
+ +

Additional certificates to include in the OCSP response.

+ +
+
-resp_no_certs
+
+ +

Don't include any certificates in the OCSP response.

+ +
+
-resp_key_id
+
+ +

Identify the signer certificate using the key ID, default is to use the subject name.

+ +
+
-rkey file
+
+ +

The private key to sign OCSP responses with: if not present the file specified in the rsigner option is used.

+ +
+
-rsigopt nm:v
+
+ +

Pass options to the signature algorithm when signing OCSP responses. Names and values of these options are algorithm-specific.

+ +
+
-port portnum
+
+ +

Port to listen for OCSP requests on. The port may also be specified using the url option.

+ +
+
-ignore_err
+
+ +

Ignore malformed requests or responses: When acting as an OCSP client, retry if a malformed response is received. When acting as an OCSP responder, continue running instead of terminating upon receiving a malformed request.

+ +
+
-nrequest number
+
+ +

The OCSP server will exit after receiving number requests, default unlimited.

+ +
+
-nmin minutes, -ndays days
+
+ +

Number of minutes or days when fresh revocation information is available: used in the nextUpdate field. If neither option is present then the nextUpdate field is omitted meaning fresh revocation information is immediately available.

+ +
+
+ +

OCSP Response verification.

+ +

OCSP Response follows the rules specified in RFC2560.

+ +

Initially the OCSP responder certificate is located and the signature on the OCSP request checked using the responder certificate's public key.

+ +

Then a normal certificate verify is performed on the OCSP responder certificate building up a certificate chain in the process. The locations of the trusted certificates used to build the chain can be specified by the CAfile and CApath options or they will be looked for in the standard OpenSSL certificates directory.

+ +

If the initial verify fails then the OCSP verify process halts with an error.

+ +

Otherwise the issuing CA certificate in the request is compared to the OCSP responder certificate: if there is a match then the OCSP verify succeeds.

+ +

Otherwise the OCSP responder certificate's CA is checked against the issuing CA certificate in the request. If there is a match and the OCSPSigning extended key usage is present in the OCSP responder certificate then the OCSP verify succeeds.

+ +

Otherwise, if -no_explicit is not set the root CA of the OCSP responders CA is checked to see if it is trusted for OCSP signing. If it is the OCSP verify succeeds.

+ +

If none of these checks is successful then the OCSP verify fails.

+ +

What this effectively means if that if the OCSP responder certificate is authorised directly by the CA it is issuing revocation information about (and it is correctly configured) then verification will succeed.

+ +

If the OCSP responder is a "global responder" which can give details about multiple CAs and has its own separate certificate chain then its root CA can be trusted for OCSP signing. For example:

+ +
openssl x509 -in ocspCA.pem -addtrust OCSPSigning -out trustedCA.pem
+ +

Alternatively the responder certificate itself can be explicitly trusted with the -VAfile option.

+ +

NOTES

+ +

As noted, most of the verify options are for testing or debugging purposes. Normally only the -CApath, -CAfile and (if the responder is a 'global VA') -VAfile options need to be used.

+ +

The OCSP server is only useful for test and demonstration purposes: it is not really usable as a full OCSP responder. It contains only a very simple HTTP request handling and can only handle the POST form of OCSP queries. It also handles requests serially meaning it cannot respond to new requests until it has processed the current one. The text index file format of revocation is also inefficient for large quantities of revocation data.

+ +

It is possible to run the ocsp application in responder mode via a CGI script using the reqin and respout options.

+ +

EXAMPLES

+ +

Create an OCSP request and write it to a file:

+ +
openssl ocsp -issuer issuer.pem -cert c1.pem -cert c2.pem -reqout req.der
+ +

Send a query to an OCSP responder with URL http://ocsp.myhost.com/ save the response to a file, print it out in text form, and verify the response:

+ +
openssl ocsp -issuer issuer.pem -cert c1.pem -cert c2.pem \
+    -url http://ocsp.myhost.com/ -resp_text -respout resp.der
+ +

Read in an OCSP response and print out text form:

+ +
openssl ocsp -respin resp.der -text -noverify
+ +

OCSP server on port 8888 using a standard ca configuration, and a separate responder certificate. All requests and responses are printed to a file.

+ +
openssl ocsp -index demoCA/index.txt -port 8888 -rsigner rcert.pem -CA demoCA/cacert.pem
+       -text -out log.txt
+ +

As above but exit after processing one request:

+ +
openssl ocsp -index demoCA/index.txt -port 8888 -rsigner rcert.pem -CA demoCA/cacert.pem
+    -nrequest 1
+ +

Query status information using an internally generated request:

+ +
openssl ocsp -index demoCA/index.txt -rsigner rcert.pem -CA demoCA/cacert.pem
+    -issuer demoCA/cacert.pem -serial 1
+ +

Query status information using request read from a file, and write the response to a second file.

+ +
openssl ocsp -index demoCA/index.txt -rsigner rcert.pem -CA demoCA/cacert.pem
+    -reqin req.der -respout resp.der
+ +

HISTORY

+ +

The -no_alt_chains option was added in OpenSSL 1.1.0.

+ +

COPYRIGHT

+ +

Copyright 2001-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/openssl.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/openssl.html new file mode 100644 index 00000000..f90b19ce --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/openssl.html @@ -0,0 +1,712 @@ + + + + +openssl + + + + + + + + + + +

NAME

+ +

openssl - OpenSSL command line tool

+ +

SYNOPSIS

+ +

openssl command [ command_opts ] [ command_args ]

+ +

openssl list [ standard-commands | digest-commands | cipher-commands | cipher-algorithms | digest-algorithms | public-key-algorithms]

+ +

openssl no-XXX [ arbitrary options ]

+ +

DESCRIPTION

+ +

OpenSSL is a cryptography toolkit implementing the Secure Sockets Layer (SSL v2/v3) and Transport Layer Security (TLS v1) network protocols and related cryptography standards required by them.

+ +

The openssl program is a command line tool for using the various cryptography functions of OpenSSL's crypto library from the shell. It can be used for

+ +
o  Creation and management of private keys, public keys and parameters
+o  Public key cryptographic operations
+o  Creation of X.509 certificates, CSRs and CRLs
+o  Calculation of Message Digests
+o  Encryption and Decryption with Ciphers
+o  SSL/TLS Client and Server Tests
+o  Handling of S/MIME signed or encrypted mail
+o  Time Stamp requests, generation and verification
+ +

COMMAND SUMMARY

+ +

The openssl program provides a rich variety of commands (command in the SYNOPSIS above), each of which often has a wealth of options and arguments (command_opts and command_args in the SYNOPSIS).

+ +

Detailed documentation and use cases for most standard subcommands are available (e.g., x509(1) or openssl-x509(1)).

+ +

Many commands use an external configuration file for some or all of their arguments and have a -config option to specify that file. The environment variable OPENSSL_CONF can be used to specify the location of the file. If the environment variable is not specified, then the file is named openssl.cnf in the default certificate storage area, whose value depends on the configuration flags specified when the OpenSSL was built.

+ +

The list parameters standard-commands, digest-commands, and cipher-commands output a list (one entry per line) of the names of all standard commands, message digest commands, or cipher commands, respectively, that are available in the present openssl utility.

+ +

The list parameters cipher-algorithms and digest-algorithms list all cipher and message digest names, one entry per line. Aliases are listed as:

+ +
from => to
+ +

The list parameter public-key-algorithms lists all supported public key algorithms.

+ +

The command no-XXX tests whether a command of the specified name is available. If no command named XXX exists, it returns 0 (success) and prints no-XXX; otherwise it returns 1 and prints XXX. In both cases, the output goes to stdout and nothing is printed to stderr. Additional command line arguments are always ignored. Since for each cipher there is a command of the same name, this provides an easy way for shell scripts to test for the availability of ciphers in the openssl program. (no-XXX is not able to detect pseudo-commands such as quit, list, or no-XXX itself.)

+ +

Standard Commands

+ +
+ +
asn1parse
+
+ +

Parse an ASN.1 sequence.

+ +
+
ca
+
+ +

Certificate Authority (CA) Management.

+ +
+
ciphers
+
+ +

Cipher Suite Description Determination.

+ +
+
cms
+
+ +

CMS (Cryptographic Message Syntax) utility.

+ +
+
crl
+
+ +

Certificate Revocation List (CRL) Management.

+ +
+
crl2pkcs7
+
+ +

CRL to PKCS#7 Conversion.

+ +
+
dgst
+
+ +

Message Digest Calculation.

+ +
+
dh
+
+ +

Diffie-Hellman Parameter Management. Obsoleted by dhparam(1).

+ +
+
dhparam
+
+ +

Generation and Management of Diffie-Hellman Parameters. Superseded by genpkey(1) and pkeyparam(1).

+ +
+
dsa
+
+ +

DSA Data Management.

+ +
+
dsaparam
+
+ +

DSA Parameter Generation and Management. Superseded by genpkey(1) and pkeyparam(1).

+ +
+
ec
+
+ +

EC (Elliptic curve) key processing.

+ +
+
ecparam
+
+ +

EC parameter manipulation and generation.

+ +
+
enc
+
+ +

Encoding with Ciphers.

+ +
+
engine
+
+ +

Engine (loadable module) information and manipulation.

+ +
+
errstr
+
+ +

Error Number to Error String Conversion.

+ +
+
gendh
+
+ +

Generation of Diffie-Hellman Parameters. Obsoleted by dhparam(1).

+ +
+
gendsa
+
+ +

Generation of DSA Private Key from Parameters. Superseded by genpkey(1) and pkey(1).

+ +
+
genpkey
+
+ +

Generation of Private Key or Parameters.

+ +
+
genrsa
+
+ +

Generation of RSA Private Key. Superseded by genpkey(1).

+ +
+
nseq
+
+ +

Create or examine a Netscape certificate sequence.

+ +
+
ocsp
+
+ +

Online Certificate Status Protocol utility.

+ +
+
passwd
+
+ +

Generation of hashed passwords.

+ +
+
pkcs12
+
+ +

PKCS#12 Data Management.

+ +
+
pkcs7
+
+ +

PKCS#7 Data Management.

+ +
+
pkcs8
+
+ +

PKCS#8 format private key conversion tool.

+ +
+
pkey
+
+ +

Public and private key management.

+ +
+
pkeyparam
+
+ +

Public key algorithm parameter management.

+ +
+
pkeyutl
+
+ +

Public key algorithm cryptographic operation utility.

+ +
+
prime
+
+ +

Compute prime numbers.

+ +
+
rand
+
+ +

Generate pseudo-random bytes.

+ +
+
rehash
+
+ +

Create symbolic links to certificate and CRL files named by the hash values.

+ +
+
req
+
+ +

PKCS#10 X.509 Certificate Signing Request (CSR) Management.

+ +
+
rsa
+
+ +

RSA key management.

+ +
+
rsautl
+
+ +

RSA utility for signing, verification, encryption, and decryption. Superseded by pkeyutl(1).

+ +
+
s_client
+
+ +

This implements a generic SSL/TLS client which can establish a transparent connection to a remote server speaking SSL/TLS. It's intended for testing purposes only and provides only rudimentary interface functionality but internally uses mostly all functionality of the OpenSSL ssl library.

+ +
+
s_server
+
+ +

This implements a generic SSL/TLS server which accepts connections from remote clients speaking SSL/TLS. It's intended for testing purposes only and provides only rudimentary interface functionality but internally uses mostly all functionality of the OpenSSL ssl library. It provides both an own command line oriented protocol for testing SSL functions and a simple HTTP response facility to emulate an SSL/TLS-aware webserver.

+ +
+
s_time
+
+ +

SSL Connection Timer.

+ +
+
sess_id
+
+ +

SSL Session Data Management.

+ +
+
smime
+
+ +

S/MIME mail processing.

+ +
+
speed
+
+ +

Algorithm Speed Measurement.

+ +
+
spkac
+
+ +

SPKAC printing and generating utility.

+ +
+
srp
+
+ +

Maintain SRP password file.

+ +
+
storeutl
+
+ +

Utility to list and display certificates, keys, CRLs, etc.

+ +
+
ts
+
+ +

Time Stamping Authority tool (client/server).

+ +
+
verify
+
+ +

X.509 Certificate Verification.

+ +
+
version
+
+ +

OpenSSL Version Information.

+ +
+
x509
+
+ +

X.509 Certificate Data Management.

+ +
+
+ +

Message Digest Commands

+ +
+ +
blake2b512
+
+ +

BLAKE2b-512 Digest

+ +
+
blake2s256
+
+ +

BLAKE2s-256 Digest

+ +
+
md2
+
+ +

MD2 Digest

+ +
+
md4
+
+ +

MD4 Digest

+ +
+
md5
+
+ +

MD5 Digest

+ +
+
mdc2
+
+ +

MDC2 Digest

+ +
+
rmd160
+
+ +

RMD-160 Digest

+ +
+
sha1
+
+ +

SHA-1 Digest

+ +
+
sha224
+
+ +

SHA-2 224 Digest

+ +
+
sha256
+
+ +

SHA-2 256 Digest

+ +
+
sha384
+
+ +

SHA-2 384 Digest

+ +
+
sha512
+
+ +

SHA-2 512 Digest

+ +
+
sha3-224
+
+ +

SHA-3 224 Digest

+ +
+
sha3-256
+
+ +

SHA-3 256 Digest

+ +
+
sha3-384
+
+ +

SHA-3 384 Digest

+ +
+
sha3-512
+
+ +

SHA-3 512 Digest

+ +
+
shake128
+
+ +

SHA-3 SHAKE128 Digest

+ +
+
shake256
+
+ +

SHA-3 SHAKE256 Digest

+ +
+
sm3
+
+ +

SM3 Digest

+ +
+
+ +

Encoding and Cipher Commands

+ +

The following aliases provide convenient access to the most used encodings and ciphers.

+ +

Depending on how OpenSSL was configured and built, not all ciphers listed here may be present. See enc(1) for more information and command usage.

+ +
+ +
aes128, aes-128-cbc, aes-128-cfb, aes-128-ctr, aes-128-ecb, aes-128-ofb
+
+ +

AES-128 Cipher

+ +
+
aes192, aes-192-cbc, aes-192-cfb, aes-192-ctr, aes-192-ecb, aes-192-ofb
+
+ +

AES-192 Cipher

+ +
+
aes256, aes-256-cbc, aes-256-cfb, aes-256-ctr, aes-256-ecb, aes-256-ofb
+
+ +

AES-256 Cipher

+ +
+
aria128, aria-128-cbc, aria-128-cfb, aria-128-ctr, aria-128-ecb, aria-128-ofb
+
+ +

Aria-128 Cipher

+ +
+
aria192, aria-192-cbc, aria-192-cfb, aria-192-ctr, aria-192-ecb, aria-192-ofb
+
+ +

Aria-192 Cipher

+ +
+
aria256, aria-256-cbc, aria-256-cfb, aria-256-ctr, aria-256-ecb, aria-256-ofb
+
+ +

Aria-256 Cipher

+ +
+
base64
+
+ +

Base64 Encoding

+ +
+
bf, bf-cbc, bf-cfb, bf-ecb, bf-ofb
+
+ +

Blowfish Cipher

+ +
+
camellia128, camellia-128-cbc, camellia-128-cfb, camellia-128-ctr, camellia-128-ecb, camellia-128-ofb
+
+ +

Camellia-128 Cipher

+ +
+
camellia192, camellia-192-cbc, camellia-192-cfb, camellia-192-ctr, camellia-192-ecb, camellia-192-ofb
+
+ +

Camellia-192 Cipher

+ +
+
camellia256, camellia-256-cbc, camellia-256-cfb, camellia-256-ctr, camellia-256-ecb, camellia-256-ofb
+
+ +

Camellia-256 Cipher

+ +
+
cast, cast-cbc
+
+ +

CAST Cipher

+ +
+
cast5-cbc, cast5-cfb, cast5-ecb, cast5-ofb
+
+ +

CAST5 Cipher

+ +
+
chacha20
+
+ +

Chacha20 Cipher

+ +
+
des, des-cbc, des-cfb, des-ecb, des-ede, des-ede-cbc, des-ede-cfb, des-ede-ofb, des-ofb
+
+ +

DES Cipher

+ +
+
des3, desx, des-ede3, des-ede3-cbc, des-ede3-cfb, des-ede3-ofb
+
+ +

Triple-DES Cipher

+ +
+
idea, idea-cbc, idea-cfb, idea-ecb, idea-ofb
+
+ +

IDEA Cipher

+ +
+
rc2, rc2-cbc, rc2-cfb, rc2-ecb, rc2-ofb
+
+ +

RC2 Cipher

+ +
+
rc4
+
+ +

RC4 Cipher

+ +
+
rc5, rc5-cbc, rc5-cfb, rc5-ecb, rc5-ofb
+
+ +

RC5 Cipher

+ +
+
seed, seed-cbc, seed-cfb, seed-ecb, seed-ofb
+
+ +

SEED Cipher

+ +
+
sm4, sm4-cbc, sm4-cfb, sm4-ctr, sm4-ecb, sm4-ofb
+
+ +

SM4 Cipher

+ +
+
+ +

OPTIONS

+ +

Details of which options are available depend on the specific command. This section describes some common options with common behavior.

+ +

Common Options

+ +
+ +
-help
+
+ +

Provides a terse summary of all options.

+ +
+
+ +

Pass Phrase Options

+ +

Several commands accept password arguments, typically using -passin and -passout for input and output passwords respectively. These allow the password to be obtained from a variety of sources. Both of these options take a single argument whose format is described below. If no password argument is given and a password is required then the user is prompted to enter one: this will typically be read from the current terminal with echoing turned off.

+ +

Note that character encoding may be relevant, please see passphrase-encoding(7).

+ +
+ +
pass:password
+
+ +

The actual password is password. Since the password is visible to utilities (like 'ps' under Unix) this form should only be used where security is not important.

+ +
+
env:var
+
+ +

Obtain the password from the environment variable var. Since the environment of other processes is visible on certain platforms (e.g. ps under certain Unix OSes) this option should be used with caution.

+ +
+
file:pathname
+
+ +

The first line of pathname is the password. If the same pathname argument is supplied to -passin and -passout arguments then the first line will be used for the input password and the next line for the output password. pathname need not refer to a regular file: it could for example refer to a device or named pipe.

+ +
+
fd:number
+
+ +

Read the password from the file descriptor number. This can be used to send the data via a pipe for example.

+ +
+
stdin
+
+ +

Read the password from standard input.

+ +
+
+ +

SEE ALSO

+ +

asn1parse(1), ca(1), ciphers(1), cms(1), config(5), crl(1), crl2pkcs7(1), dgst(1), dhparam(1), dsa(1), dsaparam(1), ec(1), ecparam(1), enc(1), engine(1), errstr(1), gendsa(1), genpkey(1), genrsa(1), nseq(1), ocsp(1), passwd(1), pkcs12(1), pkcs7(1), pkcs8(1), pkey(1), pkeyparam(1), pkeyutl(1), prime(1), rand(1), rehash(1), req(1), rsa(1), rsautl(1), s_client(1), s_server(1), s_time(1), sess_id(1), smime(1), speed(1), spkac(1), srp(1), storeutl(1), ts(1), verify(1), version(1), x509(1), crypto(7), ssl(7), x509v3_config(5)

+ +

HISTORY

+ +

The list-XXX-algorithms pseudo-commands were added in OpenSSL 1.0.0; For notes on the availability of other commands, see their individual manual pages.

+ +

COPYRIGHT

+ +

Copyright 2000-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/passwd.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/passwd.html new file mode 100644 index 00000000..30e8706a --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/passwd.html @@ -0,0 +1,154 @@ + + + + +passwd + + + + + + + + + + +

NAME

+ +

openssl-passwd, passwd - compute password hashes

+ +

SYNOPSIS

+ +

openssl passwd [-help] [-crypt] [-1] [-apr1] [-aixmd5] [-5] [-6] [-salt string] [-in file] [-stdin] [-noverify] [-quiet] [-table] [-rand file...] [-writerand file] {password}

+ +

DESCRIPTION

+ +

The passwd command computes the hash of a password typed at run-time or the hash of each password in a list. The password list is taken from the named file for option -in file, from stdin for option -stdin, or from the command line, or from the terminal otherwise. The Unix standard algorithm crypt and the MD5-based BSD password algorithm 1, its Apache variant apr1, and its AIX variant are available.

+ +

OPTIONS

+ +
+ +
-help
+
+ +

Print out a usage message.

+ +
+
-crypt
+
+ +

Use the crypt algorithm (default).

+ +
+
-1
+
+ +

Use the MD5 based BSD password algorithm 1.

+ +
+
-apr1
+
+ +

Use the apr1 algorithm (Apache variant of the BSD algorithm).

+ +
+
-aixmd5
+
+ +

Use the AIX MD5 algorithm (AIX variant of the BSD algorithm).

+ +
+
-5
+
+ +
+
-6
+
+ +

Use the SHA256 / SHA512 based algorithms defined by Ulrich Drepper. See https://www.akkadia.org/drepper/SHA-crypt.txt.

+ +
+
-salt string
+
+ +

Use the specified salt. When reading a password from the terminal, this implies -noverify.

+ +
+
-in file
+
+ +

Read passwords from file.

+ +
+
-stdin
+
+ +

Read passwords from stdin.

+ +
+
-noverify
+
+ +

Don't verify when reading a password from the terminal.

+ +
+
-quiet
+
+ +

Don't output warnings when passwords given at the command line are truncated.

+ +
+
-table
+
+ +

In the output list, prepend the cleartext password and a TAB character to each password hash.

+ +
+
-rand file...
+
+ +

A file or files containing random data used to seed the random number generator. Multiple files can be specified separated by an OS-dependent character. The separator is ; for MS-Windows, , for OpenVMS, and : for all others.

+ +
+
[-writerand file]
+
+ +

Writes random data to the specified file upon exit. This can be used with a subsequent -rand flag.

+ +
+
+ +

EXAMPLES

+ +
% openssl passwd -crypt -salt xx password
+xxj31ZMTZzkVA
+
+% openssl passwd -1 -salt xxxxxxxx password
+$1$xxxxxxxx$UYCIxa628.9qXjpQCjM4a.
+
+% openssl passwd -apr1 -salt xxxxxxxx password
+$apr1$xxxxxxxx$dxHfLAsjHkDRmG83UXe8K0
+
+% openssl passwd -aixmd5 -salt xxxxxxxx password
+xxxxxxxx$8Oaipk/GPKhC64w/YVeFD/
+ +

COPYRIGHT

+ +

Copyright 2000-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/pkcs12.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/pkcs12.html new file mode 100644 index 00000000..4a8cf87c --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/pkcs12.html @@ -0,0 +1,379 @@ + + + + +pkcs12 + + + + + + + + + + +

NAME

+ +

openssl-pkcs12, pkcs12 - PKCS#12 file utility

+ +

SYNOPSIS

+ +

openssl pkcs12 [-help] [-export] [-chain] [-inkey file_or_id] [-certfile filename] [-name name] [-caname name] [-in filename] [-out filename] [-noout] [-nomacver] [-nocerts] [-clcerts] [-cacerts] [-nokeys] [-info] [-des | -des3 | -idea | -aes128 | -aes192 | -aes256 | -aria128 | -aria192 | -aria256 | -camellia128 | -camellia192 | -camellia256 | -nodes] [-noiter] [-maciter | -nomaciter | -nomac] [-twopass] [-descert] [-certpbe cipher] [-keypbe cipher] [-macalg digest] [-keyex] [-keysig] [-password arg] [-passin arg] [-passout arg] [-rand file...] [-writerand file] [-CAfile file] [-CApath dir] [-no-CAfile] [-no-CApath] [-CSP name]

+ +

DESCRIPTION

+ +

The pkcs12 command allows PKCS#12 files (sometimes referred to as PFX files) to be created and parsed. PKCS#12 files are used by several programs including Netscape, MSIE and MS Outlook.

+ +

OPTIONS

+ +

There are a lot of options the meaning of some depends of whether a PKCS#12 file is being created or parsed. By default a PKCS#12 file is parsed. A PKCS#12 file can be created by using the -export option (see below).

+ +

PARSING OPTIONS

+ +
+ +
-help
+
+ +

Print out a usage message.

+ +
+
-in filename
+
+ +

This specifies filename of the PKCS#12 file to be parsed. Standard input is used by default.

+ +
+
-out filename
+
+ +

The filename to write certificates and private keys to, standard output by default. They are all written in PEM format.

+ +
+
-passin arg
+
+ +

The PKCS#12 file (i.e. input file) password source. For more information about the format of arg see the PASS PHRASE ARGUMENTS section in openssl(1).

+ +
+
-passout arg
+
+ +

Pass phrase source to encrypt any outputted private keys with. For more information about the format of arg see the PASS PHRASE ARGUMENTS section in openssl(1).

+ +
+
-password arg
+
+ +

With -export, -password is equivalent to -passout. Otherwise, -password is equivalent to -passin.

+ +
+
-noout
+
+ +

This option inhibits output of the keys and certificates to the output file version of the PKCS#12 file.

+ +
+
-clcerts
+
+ +

Only output client certificates (not CA certificates).

+ +
+
-cacerts
+
+ +

Only output CA certificates (not client certificates).

+ +
+
-nocerts
+
+ +

No certificates at all will be output.

+ +
+
-nokeys
+
+ +

No private keys will be output.

+ +
+
-info
+
+ +

Output additional information about the PKCS#12 file structure, algorithms used and iteration counts.

+ +
+
-des
+
+ +

Use DES to encrypt private keys before outputting.

+ +
+
-des3
+
+ +

Use triple DES to encrypt private keys before outputting, this is the default.

+ +
+
-idea
+
+ +

Use IDEA to encrypt private keys before outputting.

+ +
+
-aes128, -aes192, -aes256
+
+ +

Use AES to encrypt private keys before outputting.

+ +
+
-aria128, -aria192, -aria256
+
+ +

Use ARIA to encrypt private keys before outputting.

+ +
+
-camellia128, -camellia192, -camellia256
+
+ +

Use Camellia to encrypt private keys before outputting.

+ +
+
-nodes
+
+ +

Don't encrypt the private keys at all.

+ +
+
-nomacver
+
+ +

Don't attempt to verify the integrity MAC before reading the file.

+ +
+
-twopass
+
+ +

Prompt for separate integrity and encryption passwords: most software always assumes these are the same so this option will render such PKCS#12 files unreadable. Cannot be used in combination with the options -password, -passin (if importing) or -passout (if exporting).

+ +
+
+ +

FILE CREATION OPTIONS

+ +
+ +
-export
+
+ +

This option specifies that a PKCS#12 file will be created rather than parsed.

+ +
+
-out filename
+
+ +

This specifies filename to write the PKCS#12 file to. Standard output is used by default.

+ +
+
-in filename
+
+ +

The filename to read certificates and private keys from, standard input by default. They must all be in PEM format. The order doesn't matter but one private key and its corresponding certificate should be present. If additional certificates are present they will also be included in the PKCS#12 file.

+ +
+
-inkey file_or_id
+
+ +

File to read private key from. If not present then a private key must be present in the input file. If no engine is used, the argument is taken as a file; if an engine is specified, the argument is given to the engine as a key identifier.

+ +
+
-name friendlyname
+
+ +

This specifies the "friendly name" for the certificate and private key. This name is typically displayed in list boxes by software importing the file.

+ +
+
-certfile filename
+
+ +

A filename to read additional certificates from.

+ +
+
-caname friendlyname
+
+ +

This specifies the "friendly name" for other certificates. This option may be used multiple times to specify names for all certificates in the order they appear. Netscape ignores friendly names on other certificates whereas MSIE displays them.

+ +
+
-pass arg, -passout arg
+
+ +

The PKCS#12 file (i.e. output file) password source. For more information about the format of arg see the PASS PHRASE ARGUMENTS section in openssl(1).

+ +
+
-passin password
+
+ +

Pass phrase source to decrypt any input private keys with. For more information about the format of arg see the PASS PHRASE ARGUMENTS section in openssl(1).

+ +
+
-chain
+
+ +

If this option is present then an attempt is made to include the entire certificate chain of the user certificate. The standard CA store is used for this search. If the search fails it is considered a fatal error.

+ +
+
-descert
+
+ +

Encrypt the certificate using triple DES, this may render the PKCS#12 file unreadable by some "export grade" software. By default the private key is encrypted using triple DES and the certificate using 40 bit RC2 unless RC2 is disabled in which case triple DES is used.

+ +
+
-keypbe alg, -certpbe alg
+
+ +

These options allow the algorithm used to encrypt the private key and certificates to be selected. Any PKCS#5 v1.5 or PKCS#12 PBE algorithm name can be used (see NOTES section for more information). If a cipher name (as output by the list-cipher-algorithms command is specified then it is used with PKCS#5 v2.0. For interoperability reasons it is advisable to only use PKCS#12 algorithms.

+ +
+
-keyex|-keysig
+
+ +

Specifies that the private key is to be used for key exchange or just signing. This option is only interpreted by MSIE and similar MS software. Normally "export grade" software will only allow 512 bit RSA keys to be used for encryption purposes but arbitrary length keys for signing. The -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 the use of signing only keys for SSL client authentication.

+ +
+
-macalg digest
+
+ +

Specify the MAC digest algorithm. If not included them SHA1 will be used.

+ +
+
-nomaciter, -noiter
+
+ +

These options affect the iteration counts on the MAC and key algorithms. Unless you wish to produce files compatible with MSIE 4.0 you should leave these options alone.

+ +

To discourage attacks by using large dictionaries of common passwords the algorithm that derives keys from passwords can have an iteration count applied to it: this causes a certain part of the algorithm to be repeated and slows it down. The MAC is used to check the file integrity but since it will normally have the same password as the keys and certificates it could also be attacked. By default both MAC and encryption iteration counts are set to 2048, using these options the MAC and encryption iteration counts can be set to 1, since this reduces the file security you should not use these options unless you really have to. Most software supports both MAC and key iteration counts. MSIE 4.0 doesn't support MAC iteration counts so it needs the -nomaciter option.

+ +
+
-maciter
+
+ +

This option is included for compatibility with previous versions, it used to be needed to use MAC iterations counts but they are now used by default.

+ +
+
-nomac
+
+ +

Don't attempt to provide the MAC integrity.

+ +
+
-rand file...
+
+ +

A file or files containing random data used to seed the random number generator. Multiple files can be specified separated by an OS-dependent character. The separator is ; for MS-Windows, , for OpenVMS, and : for all others.

+ +
+
[-writerand file]
+
+ +

Writes random data to the specified file upon exit. This can be used with a subsequent -rand flag.

+ +
+
-CAfile file
+
+ +

CA storage as a file.

+ +
+
-CApath dir
+
+ +

CA storage as a directory. This directory must be a standard certificate directory: that is a hash of each subject name (using x509 -hash) should be linked to each certificate.

+ +
+
-no-CAfile
+
+ +

Do not load the trusted CA certificates from the default file location.

+ +
+
-no-CApath
+
+ +

Do not load the trusted CA certificates from the default directory location.

+ +
+
-CSP name
+
+ +

Write name as a Microsoft CSP name.

+ +
+
+ +

NOTES

+ +

Although there are a large number of options most of them are very rarely used. For PKCS#12 file parsing only -in and -out need to be used for PKCS#12 file creation -export and -name are also used.

+ +

If none of the -clcerts, -cacerts or -nocerts options are present then all certificates will be output in the order they appear in the input PKCS#12 files. There is no guarantee that the first certificate present is the one corresponding to the private key. Certain software which requires a private key and certificate and assumes the first certificate in the file is the one corresponding to the private key: this may not always be the case. Using the -clcerts option will solve this problem by only outputting the certificate corresponding to the private key. If the CA certificates are required then they can be output to a separate file using the -nokeys -cacerts options to just output CA certificates.

+ +

The -keypbe and -certpbe algorithms allow the precise encryption algorithms for private keys and certificates to be specified. Normally the defaults are fine but occasionally software can't handle triple DES encrypted private keys, then the option -keypbe PBE-SHA1-RC2-40 can be used to reduce the private key encryption to 40 bit RC2. A complete description of all algorithms is contained in the pkcs8 manual page.

+ +

Prior 1.1 release passwords containing non-ASCII characters were encoded in non-compliant manner, which limited interoperability, in first hand with Windows. But switching to standard-compliant password encoding poses problem accessing old data protected with broken encoding. For this reason even legacy encodings is attempted when reading the data. If you use PKCS#12 files in production application you are advised to convert the data, because implemented heuristic approach is not MT-safe, its sole goal is to facilitate the data upgrade with this utility.

+ +

EXAMPLES

+ +

Parse a PKCS#12 file and output it to a file:

+ +
openssl pkcs12 -in file.p12 -out file.pem
+ +

Output only client certificates to a file:

+ +
openssl pkcs12 -in file.p12 -clcerts -out file.pem
+ +

Don't encrypt the private key:

+ +
openssl pkcs12 -in file.p12 -out file.pem -nodes
+ +

Print some info about a PKCS#12 file:

+ +
openssl pkcs12 -in file.p12 -info -noout
+ +

Create a PKCS#12 file:

+ +
openssl pkcs12 -export -in file.pem -out file.p12 -name "My Certificate"
+ +

Include some extra certificates:

+ +
openssl pkcs12 -export -in file.pem -out file.p12 -name "My Certificate" \
+ -certfile othercerts.pem
+ +

SEE ALSO

+ +

pkcs8(1)

+ +

COPYRIGHT

+ +

Copyright 2000-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/pkcs7.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/pkcs7.html new file mode 100644 index 00000000..1bebd969 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/pkcs7.html @@ -0,0 +1,141 @@ + + + + +pkcs7 + + + + + + + + + + +

NAME

+ +

openssl-pkcs7, pkcs7 - PKCS#7 utility

+ +

SYNOPSIS

+ +

openssl pkcs7 [-help] [-inform PEM|DER] [-outform PEM|DER] [-in filename] [-out filename] [-print_certs] [-text] [-noout] [-engine id]

+ +

DESCRIPTION

+ +

The pkcs7 command processes PKCS#7 files in DER or PEM format.

+ +

OPTIONS

+ +
+ +
-help
+
+ +

Print out a usage message.

+ +
+
-inform DER|PEM
+
+ +

This specifies the input format. DER format is DER encoded PKCS#7 v1.5 structure.PEM (the default) is a base64 encoded version of the DER form with header and footer lines.

+ +
+
-outform DER|PEM
+
+ +

This specifies the output format, the options have the same meaning and default as the -inform option.

+ +
+
-in filename
+
+ +

This specifies the input filename to read from or standard input if this option is not specified.

+ +
+
-out filename
+
+ +

Specifies the output filename to write to or standard output by default.

+ +
+ +
+ +

Prints out any certificates or CRLs contained in the file. They are preceded by their subject and issuer names in one line format.

+ +
+
-text
+
+ +

Prints out certificates details in full rather than just subject and issuer names.

+ +
+
-noout
+
+ +

Don't output the encoded version of the PKCS#7 structure (or certificates is -print_certs is set).

+ +
+
-engine id
+
+ +

Specifying an engine (by its unique id string) will cause pkcs7 to attempt to obtain a functional reference to the specified engine, thus initialising it if needed. The engine will then be set as the default for all available algorithms.

+ +
+
+ +

EXAMPLES

+ +

Convert a PKCS#7 file from PEM to DER:

+ +
openssl pkcs7 -in file.pem -outform DER -out file.der
+ +

Output all certificates in a file:

+ +
openssl pkcs7 -in file.pem -print_certs -out certs.pem
+ +

NOTES

+ +

The PEM PKCS#7 format uses the header and footer lines:

+ +
-----BEGIN PKCS7-----
+-----END PKCS7-----
+ +

For compatibility with some CAs it will also accept:

+ +
-----BEGIN CERTIFICATE-----
+-----END CERTIFICATE-----
+ +

RESTRICTIONS

+ +

There is no option to print out all the fields of a PKCS#7 file.

+ +

This PKCS#7 routines only understand PKCS#7 v 1.5 as specified in RFC2315 they cannot currently parse, for example, the new CMS as described in RFC2630.

+ +

SEE ALSO

+ +

crl2pkcs7(1)

+ +

COPYRIGHT

+ +

Copyright 2000-2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/pkcs8.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/pkcs8.html new file mode 100644 index 00000000..be9b789b --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/pkcs8.html @@ -0,0 +1,291 @@ + + + + +pkcs8 + + + + + + + + + + +

NAME

+ +

openssl-pkcs8, pkcs8 - PKCS#8 format private key conversion tool

+ +

SYNOPSIS

+ +

openssl pkcs8 [-help] [-topk8] [-inform PEM|DER] [-outform PEM|DER] [-in filename] [-passin arg] [-out filename] [-passout arg] [-iter count] [-noiter] [-rand file...] [-writerand file] [-nocrypt] [-traditional] [-v2 alg] [-v2prf alg] [-v1 alg] [-engine id] [-scrypt] [-scrypt_N N] [-scrypt_r r] [-scrypt_p p]

+ +

DESCRIPTION

+ +

The pkcs8 command processes private keys in PKCS#8 format. It can handle both unencrypted PKCS#8 PrivateKeyInfo format and EncryptedPrivateKeyInfo format with a variety of PKCS#5 (v1.5 and v2.0) and PKCS#12 algorithms.

+ +

OPTIONS

+ +
+ +
-help
+
+ +

Print out a usage message.

+ +
+
-topk8
+
+ +

Normally a PKCS#8 private key is expected on input and a private key will be written to the output file. With the -topk8 option the situation is reversed: it reads a private key and writes a PKCS#8 format key.

+ +
+
-inform DER|PEM
+
+ +

This specifies the input format: see "KEY FORMATS" for more details. The default format is PEM.

+ +
+
-outform DER|PEM
+
+ +

This specifies the output format: see "KEY FORMATS" for more details. The default format is PEM.

+ +
+
-traditional
+
+ +

When this option is present and -topk8 is not a traditional format private key is written.

+ +
+
-in filename
+
+ +

This specifies the input filename to read a key from or standard input if this option is not specified. If the key is encrypted a pass phrase will be prompted for.

+ +
+
-passin arg
+
+ +

The input file password source. For more information about the format of arg see the PASS PHRASE ARGUMENTS section in openssl(1).

+ +
+
-out filename
+
+ +

This specifies the output filename to write a key to or standard output by default. If any encryption options are set then a pass phrase will be prompted for. The output filename should not be the same as the input filename.

+ +
+
-passout arg
+
+ +

The output file password source. For more information about the format of arg see the PASS PHRASE ARGUMENTS section in openssl(1).

+ +
+
-iter count
+
+ +

When creating new PKCS#8 containers, use a given number of iterations on the password in deriving the encryption key for the PKCS#8 output. High values increase the time required to brute-force a PKCS#8 container.

+ +
+
-nocrypt
+
+ +

PKCS#8 keys generated or input are normally PKCS#8 EncryptedPrivateKeyInfo structures using an appropriate password based encryption algorithm. With this option an unencrypted PrivateKeyInfo structure is expected or output. This option does not encrypt private keys at all and should only be used when absolutely necessary. Certain software such as some versions of Java code signing software used unencrypted private keys.

+ +
+
-rand file...
+
+ +

A file or files containing random data used to seed the random number generator. Multiple files can be specified separated by an OS-dependent character. The separator is ; for MS-Windows, , for OpenVMS, and : for all others.

+ +
+
[-writerand file]
+
+ +

Writes random data to the specified file upon exit. This can be used with a subsequent -rand flag.

+ +
+
-v2 alg
+
+ +

This option sets the PKCS#5 v2.0 algorithm.

+ +

The alg argument is the encryption algorithm to use, valid values include aes128, aes256 and des3. If this option isn't specified then aes256 is used.

+ +
+
-v2prf alg
+
+ +

This option sets the PRF algorithm to use with PKCS#5 v2.0. A typical value value would be hmacWithSHA256. If this option isn't set then the default for the cipher is used or hmacWithSHA256 if there is no default.

+ +

Some implementations may not support custom PRF algorithms and may require the hmacWithSHA1 option to work.

+ +
+
-v1 alg
+
+ +

This option indicates a PKCS#5 v1.5 or PKCS#12 algorithm should be used. Some older implementations may not support PKCS#5 v2.0 and may require this option. If not specified PKCS#5 v2.0 form is used.

+ +
+
-engine id
+
+ +

Specifying an engine (by its unique id string) will cause pkcs8 to attempt to obtain a functional reference to the specified engine, thus initialising it if needed. The engine will then be set as the default for all available algorithms.

+ +
+
-scrypt
+
+ +

Uses the scrypt algorithm for private key encryption using default parameters: currently N=16384, r=8 and p=1 and AES in CBC mode with a 256 bit key. These parameters can be modified using the -scrypt_N, -scrypt_r, -scrypt_p and -v2 options.

+ +
+
-scrypt_N N -scrypt_r r -scrypt_p p
+
+ +

Sets the scrypt N, r or p parameters.

+ +
+
+ +

KEY FORMATS

+ +

Various different formats are used by the pkcs8 utility. These are detailed below.

+ +

If a key is being converted from PKCS#8 form (i.e. the -topk8 option is not used) then the input file must be in PKCS#8 format. An encrypted key is expected unless -nocrypt is included.

+ +

If -topk8 is not used and PEM mode is set the output file will be an unencrypted private key in PKCS#8 format. If the -traditional option is used then a traditional format private key is written instead.

+ +

If -topk8 is not used and DER mode is set the output file will be an unencrypted private key in traditional DER format.

+ +

If -topk8 is used then any supported private key can be used for the input file in a format specified by -inform. The output file will be encrypted PKCS#8 format using the specified encryption parameters unless -nocrypt is included.

+ +

NOTES

+ +

By default, when converting a key to PKCS#8 format, PKCS#5 v2.0 using 256 bit AES with HMAC and SHA256 is used.

+ +

Some older implementations do not support PKCS#5 v2.0 format and require the older PKCS#5 v1.5 form instead, possibly also requiring insecure weak encryption algorithms such as 56 bit DES.

+ +

The encrypted form of a PEM encode PKCS#8 files uses the following headers and footers:

+ +
-----BEGIN ENCRYPTED PRIVATE KEY-----
+-----END ENCRYPTED PRIVATE KEY-----
+ +

The unencrypted form uses:

+ +
-----BEGIN PRIVATE KEY-----
+-----END PRIVATE KEY-----
+ +

Private keys encrypted using PKCS#5 v2.0 algorithms and high iteration counts are more secure that those encrypted using the traditional SSLeay compatible formats. So if additional security is considered important the keys should be converted.

+ +

It is possible to write out DER encoded encrypted private keys in PKCS#8 format because the encryption details are included at an ASN1 level whereas the traditional format includes them at a PEM level.

+ +

PKCS#5 v1.5 and PKCS#12 algorithms.

+ +

Various algorithms can be used with the -v1 command line option, including PKCS#5 v1.5 and PKCS#12. These are described in more detail below.

+ +
+ +
PBE-MD2-DES PBE-MD5-DES
+
+ +

These algorithms were included in the original PKCS#5 v1.5 specification. They only offer 56 bits of protection since they both use DES.

+ +
+
PBE-SHA1-RC2-64, PBE-MD2-RC2-64, PBE-MD5-RC2-64, PBE-SHA1-DES
+
+ +

These algorithms are not mentioned in the original PKCS#5 v1.5 specification but they use the same key derivation algorithm and are supported by some software. They are mentioned in PKCS#5 v2.0. They use either 64 bit RC2 or 56 bit DES.

+ +
+
PBE-SHA1-RC4-128, PBE-SHA1-RC4-40, PBE-SHA1-3DES, PBE-SHA1-2DES, PBE-SHA1-RC2-128, PBE-SHA1-RC2-40
+
+ +

These algorithms use the PKCS#12 password based encryption algorithm and allow strong encryption algorithms like triple DES or 128 bit RC2 to be used.

+ +
+
+ +

EXAMPLES

+ +

Convert a private key to PKCS#8 format using default parameters (AES with 256 bit key and hmacWithSHA256):

+ +
openssl pkcs8 -in key.pem -topk8 -out enckey.pem
+ +

Convert a private key to PKCS#8 unencrypted format:

+ +
openssl pkcs8 -in key.pem -topk8 -nocrypt -out enckey.pem
+ +

Convert a private key to PKCS#5 v2.0 format using triple DES:

+ +
openssl pkcs8 -in key.pem -topk8 -v2 des3 -out enckey.pem
+ +

Convert a private key to PKCS#5 v2.0 format using AES with 256 bits in CBC mode and hmacWithSHA512 PRF:

+ +
openssl pkcs8 -in key.pem -topk8 -v2 aes-256-cbc -v2prf hmacWithSHA512 -out enckey.pem
+ +

Convert a private key to PKCS#8 using a PKCS#5 1.5 compatible algorithm (DES):

+ +
openssl pkcs8 -in key.pem -topk8 -v1 PBE-MD5-DES -out enckey.pem
+ +

Convert a private key to PKCS#8 using a PKCS#12 compatible algorithm (3DES):

+ +
openssl pkcs8 -in key.pem -topk8 -out enckey.pem -v1 PBE-SHA1-3DES
+ +

Read a DER unencrypted PKCS#8 format private key:

+ +
openssl pkcs8 -inform DER -nocrypt -in key.der -out key.pem
+ +

Convert a private key from any PKCS#8 encrypted format to traditional format:

+ +
openssl pkcs8 -in pk8.pem -traditional -out key.pem
+ +

Convert a private key to PKCS#8 format, encrypting with AES-256 and with one million iterations of the password:

+ +
openssl pkcs8 -in key.pem -topk8 -v2 aes-256-cbc -iter 1000000 -out pk8.pem
+ +

STANDARDS

+ +

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 implementation is reasonably accurate at least as far as these algorithms are concerned.

+ +

The format of PKCS#8 DSA (and other) private keys is not well documented: it is hidden away in PKCS#11 v2.01, section 11.9. OpenSSL's default DSA PKCS#8 private key format complies with this standard.

+ +

BUGS

+ +

There should be an option that prints out the encryption algorithm in use and other details such as the iteration count.

+ +

SEE ALSO

+ +

dsa(1), rsa(1), genrsa(1), gendsa(1)

+ +

HISTORY

+ +

The -iter option was added in OpenSSL 1.1.0.

+ +

COPYRIGHT

+ +

Copyright 2000-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/pkey.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/pkey.html new file mode 100644 index 00000000..9ee24a3b --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/pkey.html @@ -0,0 +1,185 @@ + + + + +pkey + + + + + + + + + + +

NAME

+ +

openssl-pkey, pkey - public or private key processing tool

+ +

SYNOPSIS

+ +

openssl pkey [-help] [-inform PEM|DER] [-outform PEM|DER] [-in filename] [-passin arg] [-out filename] [-passout arg] [-traditional] [-cipher] [-text] [-text_pub] [-noout] [-pubin] [-pubout] [-engine id] [-check] [-pubcheck]

+ +

DESCRIPTION

+ +

The pkey command processes public or private keys. They can be converted between various forms and their components printed out.

+ +

OPTIONS

+ +
+ +
-help
+
+ +

Print out a usage message.

+ +
+
-inform DER|PEM
+
+ +

This specifies the input format DER or PEM. The default format is PEM.

+ +
+
-outform DER|PEM
+
+ +

This specifies the output format, the options have the same meaning and default as the -inform option.

+ +
+
-in filename
+
+ +

This specifies the input filename to read a key from or standard input if this option is not specified. If the key is encrypted a pass phrase will be prompted for.

+ +
+
-passin arg
+
+ +

The input file password source. For more information about the format of arg see the PASS PHRASE ARGUMENTS section in openssl(1).

+ +
+
-out filename
+
+ +

This specifies the output filename to write a key to or standard output if this option is not specified. If any encryption options are set then a pass phrase will be prompted for. The output filename should not be the same as the input filename.

+ +
+
-passout password
+
+ +

The output file password source. For more information about the format of arg see the PASS PHRASE ARGUMENTS section in openssl(1).

+ +
+
-traditional
+
+ +

Normally a private key is written using standard format: this is PKCS#8 form with the appropriate encryption algorithm (if any). If the -traditional option is specified then the older "traditional" format is used instead.

+ +
+
-cipher
+
+ +

These options encrypt the private key with the supplied cipher. Any algorithm name accepted by EVP_get_cipherbyname() is acceptable such as des3.

+ +
+
-text
+
+ +

Prints out the various public or private key components in plain text in addition to the encoded version.

+ +
+
-text_pub
+
+ +

Print out only public key components even if a private key is being processed.

+ +
+
-noout
+
+ +

Do not output the encoded version of the key.

+ +
+
-pubin
+
+ +

By default a private key is read from the input file: with this option a public key is read instead.

+ +
+
-pubout
+
+ +

By default a private key is output: with this option a public key will be output instead. This option is automatically set if the input is a public key.

+ +
+
-engine id
+
+ +

Specifying an engine (by its unique id string) will cause pkey to attempt to obtain a functional reference to the specified engine, thus initialising it if needed. The engine will then be set as the default for all available algorithms.

+ +
+
-check
+
+ +

This option checks the consistency of a key pair for both public and private components.

+ +
+
-pubcheck
+
+ +

This option checks the correctness of either a public key or the public component of a key pair.

+ +
+
+ +

EXAMPLES

+ +

To remove the pass phrase on an RSA private key:

+ +
openssl pkey -in key.pem -out keyout.pem
+ +

To encrypt a private key using triple DES:

+ +
openssl pkey -in key.pem -des3 -out keyout.pem
+ +

To convert a private key from PEM to DER format:

+ +
openssl pkey -in key.pem -outform DER -out keyout.der
+ +

To print out the components of a private key to standard output:

+ +
openssl pkey -in key.pem -text -noout
+ +

To print out the public components of a private key to standard output:

+ +
openssl pkey -in key.pem -text_pub -noout
+ +

To just output the public part of a private key:

+ +
openssl pkey -in key.pem -pubout -out pubkey.pem
+ +

SEE ALSO

+ +

genpkey(1), rsa(1), pkcs8(1), dsa(1), genrsa(1), gendsa(1)

+ +

COPYRIGHT

+ +

Copyright 2006-2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/pkeyparam.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/pkeyparam.html new file mode 100644 index 00000000..0e763dac --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/pkeyparam.html @@ -0,0 +1,110 @@ + + + + +pkeyparam + + + + + + + + + + +

NAME

+ +

openssl-pkeyparam, pkeyparam - public key algorithm parameter processing tool

+ +

SYNOPSIS

+ +

openssl pkeyparam [-help] [-in filename] [-out filename] [-text] [-noout] [-engine id] [-check]

+ +

DESCRIPTION

+ +

The pkeyparam command processes public key algorithm parameters. They can be checked for correctness and their components printed out.

+ +

OPTIONS

+ +
+ +
-help
+
+ +

Print out a usage message.

+ +
+
-in filename
+
+ +

This specifies the input filename to read parameters from or standard input if this option is not specified.

+ +
+
-out filename
+
+ +

This specifies the output filename to write parameters to or standard output if this option is not specified.

+ +
+
-text
+
+ +

Prints out the parameters in plain text in addition to the encoded version.

+ +
+
-noout
+
+ +

Do not output the encoded version of the parameters.

+ +
+
-engine id
+
+ +

Specifying an engine (by its unique id string) will cause pkeyparam to attempt to obtain a functional reference to the specified engine, thus initialising it if needed. The engine will then be set as the default for all available algorithms.

+ +
+
-check
+
+ +

This option checks the correctness of parameters.

+ +
+
+ +

EXAMPLES

+ +

Print out text version of parameters:

+ +
openssl pkeyparam -in param.pem -text
+ +

NOTES

+ +

There are no -inform or -outform options for this command because only PEM format is supported because the key type is determined by the PEM headers.

+ +

SEE ALSO

+ +

genpkey(1), rsa(1), pkcs8(1), dsa(1), genrsa(1), gendsa(1)

+ +

COPYRIGHT

+ +

Copyright 2006-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/pkeyutl.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/pkeyutl.html new file mode 100644 index 00000000..9a7e88c7 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/pkeyutl.html @@ -0,0 +1,331 @@ + + + + +pkeyutl + + + + + + + + + + +

NAME

+ +

openssl-pkeyutl, pkeyutl - public key algorithm utility

+ +

SYNOPSIS

+ +

openssl pkeyutl [-help] [-in file] [-out file] [-sigfile file] [-inkey file] [-keyform PEM|DER|ENGINE] [-passin arg] [-peerkey file] [-peerform PEM|DER|ENGINE] [-pubin] [-certin] [-rev] [-sign] [-verify] [-verifyrecover] [-encrypt] [-decrypt] [-derive] [-kdf algorithm] [-kdflen length] [-pkeyopt opt:value] [-hexdump] [-asn1parse] [-rand file...] [-writerand file] [-engine id] [-engine_impl]

+ +

DESCRIPTION

+ +

The pkeyutl command can be used to perform low level public key operations using any supported algorithm.

+ +

OPTIONS

+ +
+ +
-help
+
+ +

Print out a usage message.

+ +
+
-in filename
+
+ +

This specifies the input filename to read data from or standard input if this option is not specified.

+ +
+
-out filename
+
+ +

Specifies the output filename to write to or standard output by default.

+ +
+
-sigfile file
+
+ +

Signature file, required for verify operations only

+ +
+
-inkey file
+
+ +

The input key file, by default it should be a private key.

+ +
+
-keyform PEM|DER|ENGINE
+
+ +

The key format PEM, DER or ENGINE. Default is PEM.

+ +
+
-passin arg
+
+ +

The input key password source. For more information about the format of arg see the PASS PHRASE ARGUMENTS section in openssl(1).

+ +
+
-peerkey file
+
+ +

The peer key file, used by key derivation (agreement) operations.

+ +
+
-peerform PEM|DER|ENGINE
+
+ +

The peer key format PEM, DER or ENGINE. Default is PEM.

+ +
+
-pubin
+
+ +

The input file is a public key.

+ +
+
-certin
+
+ +

The input is a certificate containing a public key.

+ +
+
-rev
+
+ +

Reverse the order of the input buffer. This is useful for some libraries (such as CryptoAPI) which represent the buffer in little endian format.

+ +
+
-sign
+
+ +

Sign the input data (which must be a hash) and output the signed result. This requires a private key.

+ +
+
-verify
+
+ +

Verify the input data (which must be a hash) against the signature file and indicate if the verification succeeded or failed.

+ +
+
-verifyrecover
+
+ +

Verify the input data (which must be a hash) and output the recovered data.

+ +
+
-encrypt
+
+ +

Encrypt the input data using a public key.

+ +
+
-decrypt
+
+ +

Decrypt the input data using a private key.

+ +
+
-derive
+
+ +

Derive a shared secret using the peer key.

+ +
+
-kdf algorithm
+
+ +

Use key derivation function algorithm. The supported algorithms are at present TLS1-PRF and HKDF. Note: additional parameters and the KDF output length will normally have to be set for this to work. See EVP_PKEY_CTX_set_hkdf_md(3) and EVP_PKEY_CTX_set_tls1_prf_md(3) for the supported string parameters of each algorithm.

+ +
+
-kdflen length
+
+ +

Set the output length for KDF.

+ +
+
-pkeyopt opt:value
+
+ +

Public key options specified as opt:value. See NOTES below for more details.

+ +
+
-hexdump
+
+ +

hex dump the output data.

+ +
+
-asn1parse
+
+ +

Parse the ASN.1 output data, this is useful when combined with the -verifyrecover option when an ASN1 structure is signed.

+ +
+
-rand file...
+
+ +

A file or files containing random data used to seed the random number generator. Multiple files can be specified separated by an OS-dependent character. The separator is ; for MS-Windows, , for OpenVMS, and : for all others.

+ +
+
[-writerand file]
+
+ +

Writes random data to the specified file upon exit. This can be used with a subsequent -rand flag.

+ +
+
-engine id
+
+ +

Specifying an engine (by its unique id string) will cause pkeyutl to attempt to obtain a functional reference to the specified engine, thus initialising it if needed. The engine will then be set as the default for all available algorithms.

+ +
+
-engine_impl
+
+ +

When used with the -engine option, it specifies to also use engine id for crypto operations.

+ +
+
+ +

NOTES

+ +

The operations and options supported vary according to the key algorithm and its implementation. The OpenSSL operations and options are indicated below.

+ +

Unless otherwise mentioned all algorithms support the digest:alg option which specifies the digest in use for sign, verify and verifyrecover operations. The value alg should represent a digest name as used in the EVP_get_digestbyname() function for example sha1. This value is not used to hash the input data. It is used (by some algorithms) for sanity-checking the lengths of data passed in to the pkeyutl and for creating the structures that make up the signature (e.g. DigestInfo in RSASSA PKCS#1 v1.5 signatures).

+ +

This utility does not hash the input data but rather it will use the data directly as input to the signature algorithm. Depending on the key type, signature type, and mode of padding, the maximum acceptable lengths of input data differ. The signed data can't be longer than the key modulus with RSA. In case of ECDSA and DSA the data shouldn't be longer than the field size, otherwise it will be silently truncated to the field size. In any event the input size must not be larger than the largest supported digest size.

+ +

In other words, if the value of digest is sha1 the input should be the 20 bytes long binary encoding of the SHA-1 hash function output.

+ +

The Ed25519 and Ed448 signature algorithms are not supported by this utility. They accept non-hashed input, but this utility can only be used to sign hashed input.

+ +

RSA ALGORITHM

+ +

The RSA algorithm generally supports the encrypt, decrypt, sign, verify and verifyrecover operations. However, some padding modes support only a subset of these operations. The following additional pkeyopt values are supported:

+ +
+ +
rsa_padding_mode:mode
+
+ +

This sets the RSA padding mode. Acceptable values for mode are pkcs1 for PKCS#1 padding, sslv23 for SSLv23 padding, none for no padding, oaep for OAEP mode, x931 for X9.31 mode and pss for PSS.

+ +

In PKCS#1 padding if the message digest is not set then the supplied data is signed or verified directly instead of using a DigestInfo structure. If a digest is set then the a DigestInfo structure is used and its the length must correspond to the digest type.

+ +

For oaep mode only encryption and decryption is supported.

+ +

For x931 if the digest type is set it is used to format the block data otherwise the first byte is used to specify the X9.31 digest ID. Sign, verify and verifyrecover are can be performed in this mode.

+ +

For pss mode only sign and verify are supported and the digest type must be specified.

+ +
+
rsa_pss_saltlen:len
+
+ +

For pss mode only this option specifies the salt length. Three special values are supported: "digest" sets the salt length to the digest length, "max" sets the salt length to the maximum permissible value. When verifying "auto" causes the salt length to be automatically determined based on the PSS block structure.

+ +
+
rsa_mgf1_md:digest
+
+ +

For PSS and OAEP padding sets the MGF1 digest. If the MGF1 digest is not explicitly set in PSS mode then the signing digest is used.

+ +
+
+ +

RSA-PSS ALGORITHM

+ +

The RSA-PSS algorithm is a restricted version of the RSA algorithm which only supports the sign and verify operations with PSS padding. The following additional pkeyopt values are supported:

+ +
+ +
rsa_padding_mode:mode, rsa_pss_saltlen:len, rsa_mgf1_md:digest
+
+ +

These have the same meaning as the RSA algorithm with some additional restrictions. The padding mode can only be set to pss which is the default value.

+ +

If the key has parameter restrictions than the digest, MGF1 digest and salt length are set to the values specified in the parameters. The digest and MG cannot be changed and the salt length cannot be set to a value less than the minimum restriction.

+ +
+
+ +

DSA ALGORITHM

+ +

The DSA algorithm supports signing and verification operations only. Currently there are no additional -pkeyopt options other than digest. The SHA1 digest is assumed by default.

+ +

DH ALGORITHM

+ +

The DH algorithm only supports the derivation operation and no additional -pkeyopt options.

+ +

EC ALGORITHM

+ +

The EC algorithm supports sign, verify and derive operations. The sign and verify operations use ECDSA and derive uses ECDH. SHA1 is assumed by default for the -pkeyopt digest option.

+ +

X25519 and X448 ALGORITHMS

+ +

The X25519 and X448 algorithms support key derivation only. Currently there are no additional options.

+ +

EXAMPLES

+ +

Sign some data using a private key:

+ +
openssl pkeyutl -sign -in file -inkey key.pem -out sig
+ +

Recover the signed data (e.g. if an RSA key is used):

+ +
openssl pkeyutl -verifyrecover -in sig -inkey key.pem
+ +

Verify the signature (e.g. a DSA key):

+ +
openssl pkeyutl -verify -in file -sigfile sig -inkey key.pem
+ +

Sign data using a message digest value (this is currently only valid for RSA):

+ +
openssl pkeyutl -sign -in file -inkey key.pem -out sig -pkeyopt digest:sha256
+ +

Derive a shared secret value:

+ +
openssl pkeyutl -derive -inkey key.pem -peerkey pubkey.pem -out secret
+ +

Hexdump 48 bytes of TLS1 PRF using digest SHA256 and shared secret and seed consisting of the single byte 0xFF:

+ +
openssl pkeyutl -kdf TLS1-PRF -kdflen 48 -pkeyopt md:SHA256 \
+   -pkeyopt hexsecret:ff -pkeyopt hexseed:ff -hexdump
+ +

SEE ALSO

+ +

genpkey(1), pkey(1), rsautl(1) dgst(1), rsa(1), genrsa(1), EVP_PKEY_CTX_set_hkdf_md(3), EVP_PKEY_CTX_set_tls1_prf_md(3)

+ +

COPYRIGHT

+ +

Copyright 2006-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/prime.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/prime.html new file mode 100644 index 00000000..243eade4 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/prime.html @@ -0,0 +1,89 @@ + + + + +prime + + + + + + + + + + +

NAME

+ +

openssl-prime, prime - compute prime numbers

+ +

SYNOPSIS

+ +

openssl prime [-help] [-hex] [-generate] [-bits] [-safe] [-checks] [number...]

+ +

DESCRIPTION

+ +

The prime command checks if the specified numbers are prime.

+ +

If no numbers are given on the command line, the -generate flag should be used to generate primes according to the requirements specified by the rest of the flags.

+ +

OPTIONS

+ +
+ +
[-help]
+
+ +

Display an option summary.

+ +
+
[-hex]
+
+ +

Generate hex output.

+ +
+
[-generate]
+
+ +

Generate a prime number.

+ +
+
[-bits num]
+
+ +

Generate a prime with num bits.

+ +
+
[-safe]
+
+ +

When used with -generate, generates a "safe" prime. If the number generated is n, then check that (n-1)/2 is also prime.

+ +
+
[-checks num]
+
+ +

Perform the checks num times to see that the generated number is prime. The default is 20.

+ +
+
+ +

COPYRIGHT

+ +

Copyright 2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/rand.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/rand.html new file mode 100644 index 00000000..ba233d99 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/rand.html @@ -0,0 +1,101 @@ + + + + +rand + + + + + + + + + + +

NAME

+ +

openssl-rand, rand - generate pseudo-random bytes

+ +

SYNOPSIS

+ +

openssl rand [-help] [-out file] [-rand file...] [-writerand file] [-base64] [-hex] num

+ +

DESCRIPTION

+ +

This command generates num random bytes using a cryptographically secure pseudo random number generator (CSPRNG).

+ +

The random bytes are generated using the RAND_bytes(3) function, which provides a security level of 256 bits, provided it managed to seed itself successfully from a trusted operating system entropy source. Otherwise, the command will fail with a nonzero error code. For more details, see RAND_bytes(3), RAND(7), and RAND_DRBG(7).

+ +

OPTIONS

+ +
+ +
-help
+
+ +

Print out a usage message.

+ +
+
-out file
+
+ +

Write to file instead of standard output.

+ +
+
-rand file...
+
+ +

A file or files containing random data used to seed the random number generator. Multiple files can be specified separated by an OS-dependent character. The separator is ; for MS-Windows, , for OpenVMS, and : for all others. Explicitly specifying a seed file is in general not necessary, see the "NOTES" section for more information.

+ +
+
[-writerand file]
+
+ +

Writes random data to the specified file upon exit. This can be used with a subsequent -rand flag.

+ +
+
-base64
+
+ +

Perform base64 encoding on the output.

+ +
+
-hex
+
+ +

Show the output as a hex string.

+ +
+
+ +

NOTES

+ +

Prior to OpenSSL 1.1.1, it was common for applications to store information about the state of the random-number generator in a file that was loaded at startup and rewritten upon exit. On modern operating systems, this is generally no longer necessary as OpenSSL will seed itself from a trusted entropy source provided by the operating system. The -rand and -writerand flags are still supported for special platforms or circumstances that might require them.

+ +

It is generally an error to use the same seed file more than once and every use of -rand should be paired with -writerand.

+ +

SEE ALSO

+ +

RAND_bytes(3), RAND(7), RAND_DRBG(7)

+ +

COPYRIGHT

+ +

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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/rehash.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/rehash.html new file mode 100644 index 00000000..e14b3f7e --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/rehash.html @@ -0,0 +1,132 @@ + + + + +rehash + + + + + + + + + + +

NAME

+ +

openssl-c_rehash, openssl-rehash, c_rehash, rehash - Create symbolic links to files named by the hash values

+ +

SYNOPSIS

+ +

openssl rehash [-h] [-help] [-old] [-n] [-v] [ directory...]

+ +

c_rehash flags...

+ +

DESCRIPTION

+ +

On some platforms, the OpenSSL rehash command is available as an external script called c_rehash. They are functionally equivalent, except for minor differences noted below.

+ +

rehash scans directories and calculates a hash value of each .pem, .crt, .cer, or .crl file in the specified directory list and creates symbolic links for each file, where the name of the link is the hash value. (If the platform does not support symbolic links, a copy is made.) This utility is useful as many programs that use OpenSSL require directories to be set up like this in order to find certificates.

+ +

If any directories are named on the command line, then those are processed in turn. If not, then the SSL_CERT_DIR environment variable is consulted; this should be a colon-separated list of directories, like the Unix PATH variable. If that is not set then the default directory (installation-specific but often /usr/local/ssl/certs) is processed.

+ +

In order for a directory to be processed, the user must have write permissions on that directory, otherwise an error will be generated.

+ +

The links created are of the form HHHHHHHH.D, where each H is a hexadecimal character and D is a single decimal digit. When processing a directory, rehash will first remove all links that have a name in that syntax, even if they are being used for some other purpose. To skip the removal step, use the -n flag. Hashes for CRL's look similar except the letter r appears after the period, like this: HHHHHHHH.rD.

+ +

Multiple objects may have the same hash; they will be indicated by incrementing the D value. Duplicates are found by comparing the full SHA-1 fingerprint. A warning will be displayed if a duplicate is found.

+ +

A warning will also be displayed if there are files that cannot be parsed as either a certificate or a CRL or if more than one such object appears in the file.

+ +

Script Configuration

+ +

The c_rehash script uses the openssl program to compute the hashes and fingerprints. If not found in the user's PATH, then set the OPENSSL environment variable to the full pathname. Any program can be used, it will be invoked as follows for either a certificate or CRL:

+ +
$OPENSSL x509 -hash -fingerprint -noout -in FILENAME
+$OPENSSL crl -hash -fingerprint -noout -in FILENAME
+ +

where FILENAME is the filename. It must output the hash of the file on the first line, and the fingerprint on the second, optionally prefixed with some text and an equals sign.

+ +

OPTIONS

+ +
+ +
-help -h
+
+ +

Display a brief usage message.

+ +
+
-old
+
+ +

Use old-style hashing (MD5, as opposed to SHA-1) for generating links to be used for releases before 1.0.0. Note that current versions will not use the old style.

+ +
+
-n
+
+ +

Do not remove existing links. This is needed when keeping new and old-style links in the same directory.

+ +
+
-compat
+
+ +

Generate links for both old-style (MD5) and new-style (SHA1) hashing. This allows releases before 1.0.0 to use these links along-side newer releases.

+ +
+
-v
+
+ +

Print messages about old links removed and new links created. By default, rehash only lists each directory as it is processed.

+ +
+
+ +

ENVIRONMENT

+ +
+ +
OPENSSL
+
+ +

The path to an executable to use to generate hashes and fingerprints (see above).

+ +
+
SSL_CERT_DIR
+
+ +

Colon separated list of directories to operate on. Ignored if directories are listed on the command line.

+ +
+
+ +

SEE ALSO

+ +

openssl(1), crl(1). x509(1).

+ +

COPYRIGHT

+ +

Copyright 2015-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/req.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/req.html new file mode 100644 index 00000000..3494c087 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/req.html @@ -0,0 +1,612 @@ + + + + +req + + + + + + + + + + +

NAME

+ +

openssl-req, req - PKCS#10 certificate request and certificate generating utility

+ +

SYNOPSIS

+ +

openssl req [-help] [-inform PEM|DER] [-outform PEM|DER] [-in filename] [-passin arg] [-out filename] [-passout arg] [-text] [-pubkey] [-noout] [-verify] [-modulus] [-new] [-rand file...] [-writerand file] [-newkey rsa:bits] [-newkey alg:file] [-nodes] [-key filename] [-keyform PEM|DER] [-keyout filename] [-keygen_engine id] [-digest] [-config filename] [-multivalue-rdn] [-x509] [-days n] [-set_serial n] [-newhdr] [-addext ext] [-extensions section] [-reqexts section] [-precert] [-utf8] [-nameopt] [-reqopt] [-subject] [-subj arg] [-sigopt nm:v] [-batch] [-verbose] [-engine id]

+ +

DESCRIPTION

+ +

The req command primarily creates and processes certificate requests in PKCS#10 format. It can additionally create self signed certificates for use as root CAs for example.

+ +

OPTIONS

+ +
+ +
-help
+
+ +

Print out a usage message.

+ +
+
-inform DER|PEM
+
+ +

This specifies the input format. The DER option uses an ASN1 DER encoded form compatible with the PKCS#10. The PEM form is the default format: it consists of the DER format base64 encoded with additional header and footer lines.

+ +
+
-outform DER|PEM
+
+ +

This specifies the output format, the options have the same meaning and default as the -inform option.

+ +
+
-in filename
+
+ +

This specifies the input filename to read a request from or standard input if this option is not specified. A request is only read if the creation options (-new and -newkey) are not specified.

+ +
+
-sigopt nm:v
+
+ +

Pass options to the signature algorithm during sign or verify operations. Names and values of these options are algorithm-specific.

+ +
+
-passin arg
+
+ +

The input file password source. For more information about the format of arg see the PASS PHRASE ARGUMENTS section in openssl(1).

+ +
+
-out filename
+
+ +

This specifies the output filename to write to or standard output by default.

+ +
+
-passout arg
+
+ +

The output file password source. For more information about the format of arg see the PASS PHRASE ARGUMENTS section in openssl(1).

+ +
+
-text
+
+ +

Prints out the certificate request in text form.

+ +
+
-subject
+
+ +

Prints out the request subject (or certificate subject if -x509 is specified)

+ +
+
-pubkey
+
+ +

Outputs the public key.

+ +
+
-noout
+
+ +

This option prevents output of the encoded version of the request.

+ +
+
-modulus
+
+ +

This option prints out the value of the modulus of the public key contained in the request.

+ +
+
-verify
+
+ +

Verifies the signature on the request.

+ +
+
-new
+
+ +

This option generates a new certificate request. It will prompt the user for the relevant field values. The actual fields prompted for and their maximum and minimum sizes are specified in the configuration file and any requested extensions.

+ +

If the -key option is not used it will generate a new RSA private key using information specified in the configuration file.

+ +
+
-rand file...
+
+ +

A file or files containing random data used to seed the random number generator. Multiple files can be specified separated by an OS-dependent character. The separator is ; for MS-Windows, , for OpenVMS, and : for all others.

+ +
+
[-writerand file]
+
+ +

Writes random data to the specified file upon exit. This can be used with a subsequent -rand flag.

+ +
+
-newkey arg
+
+ +

This option creates a new certificate request and a new private key. The argument takes one of several forms. rsa:nbits, where nbits is the number of bits, generates an RSA key nbits in size. If nbits is omitted, i.e. -newkey rsa specified, the default key size, specified in the configuration file is used.

+ +

All other algorithms support the -newkey alg:file form, where file may be an algorithm parameter file, created by the genpkey -genparam command or and X.509 certificate for a key with appropriate algorithm.

+ +

param:file generates a key using the parameter file or certificate file, the algorithm is determined by the parameters. algname:file use algorithm algname and parameter file file: the two algorithms must match or an error occurs. algname just uses algorithm algname, and parameters, if necessary should be specified via -pkeyopt parameter.

+ +

dsa:filename generates a DSA key using the parameters in the file filename. ec:filename generates EC key (usable both with ECDSA or ECDH algorithms), gost2001:filename generates GOST R 34.10-2001 key (requires ccgost engine configured in the configuration file). If just gost2001 is specified a parameter set should be specified by -pkeyopt paramset:X

+ +
+
-pkeyopt opt:value
+
+ +

Set the public key algorithm option opt to value. The precise set of options supported depends on the public key algorithm used and its implementation. See KEY GENERATION OPTIONS in the genpkey manual page for more details.

+ +
+
-key filename
+
+ +

This specifies the file to read the private key from. It also accepts PKCS#8 format private keys for PEM format files.

+ +
+
-keyform PEM|DER
+
+ +

The format of the private key file specified in the -key argument. PEM is the default.

+ +
+
-keyout filename
+
+ +

This gives the filename to write the newly created private key to. If this option is not specified then the filename present in the configuration file is used.

+ +
+
-nodes
+
+ +

If this option is specified then if a private key is created it will not be encrypted.

+ +
+
-digest
+
+ +

This specifies the message digest to sign the request. Any digest supported by the OpenSSL dgst command can be used. This overrides the digest algorithm specified in the configuration file.

+ +

Some public key algorithms may override this choice. For instance, DSA signatures always use SHA1, GOST R 34.10 signatures always use GOST R 34.11-94 (-md_gost94), Ed25519 and Ed448 never use any digest.

+ +
+
-config filename
+
+ +

This allows an alternative configuration file to be specified. Optional; for a description of the default value, see "COMMAND SUMMARY" in openssl(1).

+ +
+
-subj arg
+
+ +

Sets subject name for new request or supersedes the subject name when processing a request. The arg must be formatted as /type0=value0/type1=value1/type2=.... Keyword characters may be escaped by \ (backslash), and whitespace is retained. Empty values are permitted, but the corresponding type will not be included in the request.

+ +
+
-multivalue-rdn
+
+ +

This option causes the -subj argument to be interpreted with full support for multivalued RDNs. Example:

+ +

/DC=org/DC=OpenSSL/DC=users/UID=123456+CN=John Doe

+ +

If -multi-rdn is not used then the UID value is 123456+CN=John Doe.

+ +
+
-x509
+
+ +

This option outputs a self signed certificate instead of a certificate request. This is typically used to generate a test certificate or a self signed root CA. The extensions added to the certificate (if any) are specified in the configuration file. Unless specified using the set_serial option, a large random number will be used for the serial number.

+ +

If existing request is specified with the -in option, it is converted to the self signed certificate otherwise new request is created.

+ +
+
-days n
+
+ +

When the -x509 option is being used this specifies the number of days to certify the certificate for, otherwise it is ignored. n should be a positive integer. The default is 30 days.

+ +
+
-set_serial n
+
+ +

Serial number to use when outputting a self signed certificate. This may be specified as a decimal value or a hex value if preceded by 0x.

+ +
+
-addext ext
+
+ +

Add a specific extension to the certificate (if the -x509 option is present) or certificate request. The argument must have the form of a key=value pair as it would appear in a config file.

+ +

This option can be given multiple times.

+ +
+
-extensions section
+
+ +
+
-reqexts section
+
+ +

These options specify alternative sections to include certificate extensions (if the -x509 option is present) or certificate request extensions. This allows several different sections to be used in the same configuration file to specify requests for a variety of purposes.

+ +
+
-precert
+
+ +

A poison extension will be added to the certificate, making it a "pre-certificate" (see RFC6962). This can be submitted to Certificate Transparency logs in order to obtain signed certificate timestamps (SCTs). These SCTs can then be embedded into the pre-certificate as an extension, before removing the poison and signing the certificate.

+ +

This implies the -new flag.

+ +
+
-utf8
+
+ +

This option causes field values to be interpreted as UTF8 strings, by default they are interpreted as ASCII. This means that the field values, whether prompted from a terminal or obtained from a configuration file, must be valid UTF8 strings.

+ +
+
-nameopt option
+
+ +

Option which determines how the subject or issuer names are displayed. The option argument can be a single option or multiple options separated by commas. Alternatively the -nameopt switch may be used more than once to set multiple options. See the x509(1) manual page for details.

+ +
+
-reqopt
+
+ +

Customise the output format used with -text. The option argument can be a single option or multiple options separated by commas.

+ +

See discussion of the -certopt parameter in the x509(1) command.

+ +
+
-newhdr
+
+ +

Adds the word NEW to the PEM file header and footer lines on the outputted request. Some software (Netscape certificate server) and some CAs need this.

+ +
+
-batch
+
+ +

Non-interactive mode.

+ +
+
-verbose
+
+ +

Print extra details about the operations being performed.

+ +
+
-engine id
+
+ +

Specifying an engine (by its unique id string) will cause req to attempt to obtain a functional reference to the specified engine, thus initialising it if needed. The engine will then be set as the default for all available algorithms.

+ +
+
-keygen_engine id
+
+ +

Specifies an engine (by its unique id string) which would be used for key generation operations.

+ +
+
+ +

CONFIGURATION FILE FORMAT

+ +

The configuration options are specified in the req section of the configuration file. As with all configuration files if no value is specified in the specific section (i.e. req) then the initial unnamed or default section is searched too.

+ +

The options available are described in detail below.

+ +
+ +
input_password output_password
+
+ +

The passwords for the input private key file (if present) and the output private key file (if one will be created). The command line options passin and passout override the configuration file values.

+ +
+
default_bits
+
+ +

Specifies the default key size in bits.

+ +

This option is used in conjunction with the -new option to generate a new key. It can be overridden by specifying an explicit key size in the -newkey option. The smallest accepted key size is 512 bits. If no key size is specified then 2048 bits is used.

+ +
+
default_keyfile
+
+ +

This is the default filename to write a private key to. If not specified the key is written to standard output. This can be overridden by the -keyout option.

+ +
+
oid_file
+
+ +

This specifies a file containing additional OBJECT IDENTIFIERS. Each line of the file should consist of the numerical form of the object identifier followed by white space then the short name followed by white space and finally the long name.

+ +
+
oid_section
+
+ +

This specifies a section in the configuration file containing extra object identifiers. Each line should consist of the short name of the object identifier followed by = and the numerical form. The short and long names are the same when this option is used.

+ +
+
RANDFILE
+
+ +

At startup the specified file is loaded into the random number generator, and at exit 256 bytes will be written to it. It is used for private key generation.

+ +
+
encrypt_key
+
+ +

If this is set to no then if a private key is generated it is not encrypted. This is equivalent to the -nodes command line option. For compatibility encrypt_rsa_key is an equivalent option.

+ +
+
default_md
+
+ +

This option specifies the digest algorithm to use. Any digest supported by the OpenSSL dgst command can be used. This option can be overridden on the command line. Certain signing algorithms (i.e. Ed25519 and Ed448) will ignore any digest that has been set.

+ +
+
string_mask
+
+ +

This option masks out the use of certain string types in certain fields. Most users will not need to change this option.

+ +

It can be set to several values default which is also the default option uses PrintableStrings, T61Strings and BMPStrings if the pkix value is used then only PrintableStrings and BMPStrings will be used. This follows the PKIX recommendation in RFC2459. If the utf8only option is used then only UTF8Strings will be used: this is the PKIX recommendation in RFC2459 after 2003. Finally the nombstr option just uses PrintableStrings and T61Strings: certain software has problems with BMPStrings and UTF8Strings: in particular Netscape.

+ +
+
req_extensions
+
+ +

This specifies the configuration file section containing a list of extensions to add to the certificate request. It can be overridden by the -reqexts command line switch. See the x509v3_config(5) manual page for details of the extension section format.

+ +
+
x509_extensions
+
+ +

This specifies the configuration file section containing a list of extensions to add to certificate generated when the -x509 switch is used. It can be overridden by the -extensions command line switch.

+ +
+
prompt
+
+ +

If set to the value no this disables prompting of certificate fields and just takes values from the config file directly. It also changes the expected format of the distinguished_name and attributes sections.

+ +
+
utf8
+
+ +

If set to the value yes then field values to be interpreted as UTF8 strings, by default they are interpreted as ASCII. This means that the field values, whether prompted from a terminal or obtained from a configuration file, must be valid UTF8 strings.

+ +
+
attributes
+
+ +

This specifies the section containing any request attributes: its format is the same as distinguished_name. Typically these may contain the challengePassword or unstructuredName types. They are currently ignored by OpenSSL's request signing utilities but some CAs might want them.

+ +
+
distinguished_name
+
+ +

This specifies the section containing the distinguished name fields to prompt for when generating a certificate or certificate request. The format is described in the next section.

+ +
+
+ +

DISTINGUISHED NAME AND ATTRIBUTE SECTION FORMAT

+ +

There are two separate formats for the distinguished name and attribute sections. If the prompt option is set to no then these sections just consist of field names and values: for example,

+ +
CN=My Name
+OU=My Organization
+emailAddress=someone@somewhere.org
+ +

This allows external programs (e.g. GUI based) to generate a template file with all the field names and values and just pass it to req. An example of this kind of configuration file is contained in the EXAMPLES section.

+ +

Alternatively if the prompt option is absent or not set to no then the file contains field prompting information. It consists of lines of the form:

+ +
fieldName="prompt"
+fieldName_default="default field value"
+fieldName_min= 2
+fieldName_max= 4
+ +

"fieldName" is the field name being used, for example commonName (or CN). The "prompt" string is used to ask the user to enter the relevant details. If the user enters nothing then the default value is used if no default value is present then the field is omitted. A field can still be omitted if a default value is present if the user just enters the '.' character.

+ +

The number of characters entered must be between the fieldName_min and fieldName_max limits: there may be additional restrictions based on the field being used (for example countryName can only ever be two characters long and must fit in a PrintableString).

+ +

Some fields (such as organizationName) can be used more than once in a DN. This presents a problem because configuration files will not recognize the same name occurring twice. To avoid this problem if the fieldName contains some characters followed by a full stop they will be ignored. So for example a second organizationName can be input by calling it "1.organizationName".

+ +

The actual permitted field names are any object identifier short or long names. These are compiled into OpenSSL and include the usual values such as commonName, countryName, localityName, organizationName, organizationalUnitName, stateOrProvinceName. Additionally emailAddress is included as well as name, surname, givenName, initials, and dnQualifier.

+ +

Additional object identifiers can be defined with the oid_file or oid_section options in the configuration file. Any additional fields will be treated as though they were a DirectoryString.

+ +

EXAMPLES

+ +

Examine and verify certificate request:

+ +
openssl req -in req.pem -text -verify -noout
+ +

Create a private key and then generate a certificate request from it:

+ +
openssl genrsa -out key.pem 2048
+openssl req -new -key key.pem -out req.pem
+ +

The same but just using req:

+ +
openssl req -newkey rsa:2048 -keyout key.pem -out req.pem
+ +

Generate a self signed root certificate:

+ +
openssl req -x509 -newkey rsa:2048 -keyout key.pem -out req.pem
+ +

Example of a file pointed to by the oid_file option:

+ +
1.2.3.4        shortName       A longer Name
+1.2.3.6        otherName       Other longer Name
+ +

Example of a section pointed to by oid_section making use of variable expansion:

+ +
testoid1=1.2.3.5
+testoid2=${testoid1}.6
+ +

Sample configuration file prompting for field values:

+ +
[ req ]
+default_bits           = 2048
+default_keyfile        = privkey.pem
+distinguished_name     = req_distinguished_name
+attributes             = req_attributes
+req_extensions         = v3_ca
+
+dirstring_type = nobmp
+
+[ req_distinguished_name ]
+countryName                    = Country Name (2 letter code)
+countryName_default            = AU
+countryName_min                = 2
+countryName_max                = 2
+
+localityName                   = Locality Name (eg, city)
+
+organizationalUnitName         = Organizational Unit Name (eg, section)
+
+commonName                     = Common Name (eg, YOUR name)
+commonName_max                 = 64
+
+emailAddress                   = Email Address
+emailAddress_max               = 40
+
+[ req_attributes ]
+challengePassword              = A challenge password
+challengePassword_min          = 4
+challengePassword_max          = 20
+
+[ v3_ca ]
+
+subjectKeyIdentifier=hash
+authorityKeyIdentifier=keyid:always,issuer:always
+basicConstraints = critical, CA:true
+ +

Sample configuration containing all field values:

+ +
RANDFILE               = $ENV::HOME/.rnd
+
+[ req ]
+default_bits           = 2048
+default_keyfile        = keyfile.pem
+distinguished_name     = req_distinguished_name
+attributes             = req_attributes
+prompt                 = no
+output_password        = mypass
+
+[ req_distinguished_name ]
+C                      = GB
+ST                     = Test State or Province
+L                      = Test Locality
+O                      = Organization Name
+OU                     = Organizational Unit Name
+CN                     = Common Name
+emailAddress           = test@email.address
+
+[ req_attributes ]
+challengePassword              = A challenge password
+ +

Example of giving the most common attributes (subject and extensions) on the command line:

+ +
openssl req -new -subj "/C=GB/CN=foo" \
+                 -addext "subjectAltName = DNS:foo.co.uk" \
+                 -addext "certificatePolicies = 1.2.3.4" \
+                 -newkey rsa:2048 -keyout key.pem -out req.pem
+ +

NOTES

+ +

The header and footer lines in the PEM format are normally:

+ +
-----BEGIN CERTIFICATE REQUEST-----
+-----END CERTIFICATE REQUEST-----
+ +

some software (some versions of Netscape certificate server) instead needs:

+ +
-----BEGIN NEW CERTIFICATE REQUEST-----
+-----END NEW CERTIFICATE REQUEST-----
+ +

which is produced with the -newhdr option but is otherwise compatible. Either form is accepted transparently on input.

+ +

The certificate requests generated by Xenroll with MSIE have extensions added. It includes the keyUsage extension which determines the type of key (signature only or general purpose) and any additional OIDs entered by the script in an extendedKeyUsage extension.

+ +

DIAGNOSTICS

+ +

The following messages are frequently asked about:

+ +
Using configuration from /some/path/openssl.cnf
+Unable to load config info
+ +

This is followed some time later by...

+ +
unable to find 'distinguished_name' in config
+problems making Certificate Request
+ +

The first error message is the clue: it can't find the configuration file! Certain operations (like examining a certificate request) don't need a configuration file so its use isn't enforced. Generation of certificates or requests however does need a configuration file. This could be regarded as a bug.

+ +

Another puzzling message is this:

+ +
Attributes:
+    a0:00
+ +

this is displayed when no attributes are present and the request includes the correct empty SET OF structure (the DER encoding of which is 0xa0 0x00). If you just see:

+ +
Attributes:
+ +

then the SET OF is missing and the encoding is technically invalid (but it is tolerated). See the description of the command line option -asn1-kludge for more information.

+ +

BUGS

+ +

OpenSSL's handling of T61Strings (aka TeletexStrings) is broken: it effectively treats them as ISO-8859-1 (Latin 1), Netscape and MSIE have similar behaviour. This can cause problems if you need characters that aren't available in PrintableStrings and you don't want to or can't use BMPStrings.

+ +

As a consequence of the T61String handling the only correct way to represent accented characters in OpenSSL is to use a BMPString: unfortunately Netscape currently chokes on these. If you have to use accented characters with Netscape and MSIE then you currently need to use the invalid T61String form.

+ +

The current prompting is not very friendly. It doesn't allow you to confirm what you've just entered. Other things like extensions in certificate requests are statically defined in the configuration file. Some of these: like an email address in subjectAltName should be input by the user.

+ +

SEE ALSO

+ +

x509(1), ca(1), genrsa(1), gendsa(1), config(5), x509v3_config(5)

+ +

COPYRIGHT

+ +

Copyright 2000-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/rsa.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/rsa.html new file mode 100644 index 00000000..b5a0ba9f --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/rsa.html @@ -0,0 +1,202 @@ + + + + +rsa + + + + + + + + + + +

NAME

+ +

openssl-rsa, rsa - RSA key processing tool

+ +

SYNOPSIS

+ +

openssl rsa [-help] [-inform PEM|DER] [-outform PEM|DER] [-in filename] [-passin arg] [-out filename] [-passout arg] [-aes128] [-aes192] [-aes256] [-aria128] [-aria192] [-aria256] [-camellia128] [-camellia192] [-camellia256] [-des] [-des3] [-idea] [-text] [-noout] [-modulus] [-check] [-pubin] [-pubout] [-RSAPublicKey_in] [-RSAPublicKey_out] [-engine id]

+ +

DESCRIPTION

+ +

The rsa command processes RSA keys. They can be converted between various forms and their components printed out. Note this command uses the traditional SSLeay compatible format for private key encryption: newer applications should use the more secure PKCS#8 format using the pkcs8 utility.

+ +

OPTIONS

+ +
+ +
-help
+
+ +

Print out a usage message.

+ +
+
-inform DER|PEM
+
+ +

This specifies the input format. The DER option uses an ASN1 DER encoded form compatible with the PKCS#1 RSAPrivateKey or SubjectPublicKeyInfo format. The PEM form is the default format: it consists of the DER format base64 encoded with additional header and footer lines. On input PKCS#8 format private keys are also accepted.

+ +
+
-outform DER|PEM
+
+ +

This specifies the output format, the options have the same meaning and default as the -inform option.

+ +
+
-in filename
+
+ +

This specifies the input filename to read a key from or standard input if this option is not specified. If the key is encrypted a pass phrase will be prompted for.

+ +
+
-passin arg
+
+ +

The input file password source. For more information about the format of arg see the PASS PHRASE ARGUMENTS section in openssl(1).

+ +
+
-out filename
+
+ +

This specifies the output filename to write a key to or standard output if this option is not specified. If any encryption options are set then a pass phrase will be prompted for. The output filename should not be the same as the input filename.

+ +
+
-passout password
+
+ +

The output file password source. For more information about the format of arg see the PASS PHRASE ARGUMENTS section in openssl(1).

+ +
+
-aes128, -aes192, -aes256, -aria128, -aria192, -aria256, -camellia128, -camellia192, -camellia256, -des, -des3, -idea
+
+ +

These options encrypt the private key with the specified cipher before outputting it. A pass phrase is prompted for. If none of these options is specified the key is written in plain text. This means that using the rsa utility to read in an encrypted key with no encryption option can be used to remove the pass phrase from a key, or by setting the encryption options it can be use to add or change the pass phrase. These options can only be used with PEM format output files.

+ +
+
-text
+
+ +

Prints out the various public or private key components in plain text in addition to the encoded version.

+ +
+
-noout
+
+ +

This option prevents output of the encoded version of the key.

+ +
+
-modulus
+
+ +

This option prints out the value of the modulus of the key.

+ +
+
-check
+
+ +

This option checks the consistency of an RSA private key.

+ +
+
-pubin
+
+ +

By default a private key is read from the input file: with this option a public key is read instead.

+ +
+
-pubout
+
+ +

By default a private key is output: with this option a public key will be output instead. This option is automatically set if the input is a public key.

+ +
+
-RSAPublicKey_in, -RSAPublicKey_out
+
+ +

Like -pubin and -pubout except RSAPublicKey format is used instead.

+ +
+
-engine id
+
+ +

Specifying an engine (by its unique id string) will cause rsa to attempt to obtain a functional reference to the specified engine, thus initialising it if needed. The engine will then be set as the default for all available algorithms.

+ +
+
+ +

NOTES

+ +

The PEM private key format uses the header and footer lines:

+ +
-----BEGIN RSA PRIVATE KEY-----
+-----END RSA PRIVATE KEY-----
+ +

The PEM public key format uses the header and footer lines:

+ +
-----BEGIN PUBLIC KEY-----
+-----END PUBLIC KEY-----
+ +

The PEM RSAPublicKey format uses the header and footer lines:

+ +
-----BEGIN RSA PUBLIC KEY-----
+-----END RSA PUBLIC KEY-----
+ +

EXAMPLES

+ +

To remove the pass phrase on an RSA private key:

+ +
openssl rsa -in key.pem -out keyout.pem
+ +

To encrypt a private key using triple DES:

+ +
openssl rsa -in key.pem -des3 -out keyout.pem
+ +

To convert a private key from PEM to DER format:

+ +
openssl rsa -in key.pem -outform DER -out keyout.der
+ +

To print out the components of a private key to standard output:

+ +
openssl rsa -in key.pem -text -noout
+ +

To just output the public part of a private key:

+ +
openssl rsa -in key.pem -pubout -out pubkey.pem
+ +

Output the public part of a private key in RSAPublicKey format:

+ +
openssl rsa -in key.pem -RSAPublicKey_out -out pubkey.pem
+ +

BUGS

+ +

There should be an option that automatically handles .key files, without having to manually edit them.

+ +

SEE ALSO

+ +

pkcs8(1), dsa(1), genrsa(1), gendsa(1)

+ +

COPYRIGHT

+ +

Copyright 2000-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/rsautl.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/rsautl.html new file mode 100644 index 00000000..c922ee05 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/rsautl.html @@ -0,0 +1,236 @@ + + + + +rsautl + + + + + + + + + + +

NAME

+ +

openssl-rsautl, rsautl - RSA utility

+ +

SYNOPSIS

+ +

openssl rsautl [-help] [-in file] [-out file] [-inkey file] [-keyform PEM|DER|ENGINE] [-pubin] [-certin] [-sign] [-verify] [-encrypt] [-decrypt] [-rand file...] [-writerand file] [-pkcs] [-ssl] [-raw] [-hexdump] [-asn1parse]

+ +

DESCRIPTION

+ +

The rsautl command can be used to sign, verify, encrypt and decrypt data using the RSA algorithm.

+ +

OPTIONS

+ +
+ +
-help
+
+ +

Print out a usage message.

+ +
+
-in filename
+
+ +

This specifies the input filename to read data from or standard input if this option is not specified.

+ +
+
-out filename
+
+ +

Specifies the output filename to write to or standard output by default.

+ +
+
-inkey file
+
+ +

The input key file, by default it should be an RSA private key.

+ +
+
-keyform PEM|DER|ENGINE
+
+ +

The key format PEM, DER or ENGINE.

+ +
+
-pubin
+
+ +

The input file is an RSA public key.

+ +
+
-certin
+
+ +

The input is a certificate containing an RSA public key.

+ +
+
-sign
+
+ +

Sign the input data and output the signed result. This requires an RSA private key.

+ +
+
-verify
+
+ +

Verify the input data and output the recovered data.

+ +
+
-encrypt
+
+ +

Encrypt the input data using an RSA public key.

+ +
+
-decrypt
+
+ +

Decrypt the input data using an RSA private key.

+ +
+
-rand file...
+
+ +

A file or files containing random data used to seed the random number generator. Multiple files can be specified separated by an OS-dependent character. The separator is ; for MS-Windows, , for OpenVMS, and : for all others.

+ +
+
[-writerand file]
+
+ +

Writes random data to the specified file upon exit. This can be used with a subsequent -rand flag.

+ +
+
-pkcs, -oaep, -ssl, -raw
+
+ +

The padding to use: PKCS#1 v1.5 (the default), PKCS#1 OAEP, special padding used in SSL v2 backwards compatible handshakes, or no padding, respectively. For signatures, only -pkcs and -raw can be used.

+ +
+
-hexdump
+
+ +

Hex dump the output data.

+ +
+
-asn1parse
+
+ +

Parse the ASN.1 output data, this is useful when combined with the -verify option.

+ +
+
+ +

NOTES

+ +

rsautl because it uses the RSA algorithm directly can only be used to sign or verify small pieces of data.

+ +

EXAMPLES

+ +

Sign some data using a private key:

+ +
openssl rsautl -sign -in file -inkey key.pem -out sig
+ +

Recover the signed data

+ +
openssl rsautl -verify -in sig -inkey key.pem
+ +

Examine the raw signed data:

+ +
openssl rsautl -verify -in sig -inkey key.pem -raw -hexdump
+
+0000 - 00 01 ff ff ff ff ff ff-ff ff ff ff ff ff ff ff   ................
+0010 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff   ................
+0020 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff   ................
+0030 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff   ................
+0040 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff   ................
+0050 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff   ................
+0060 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff   ................
+0070 - ff ff ff ff 00 68 65 6c-6c 6f 20 77 6f 72 6c 64   .....hello world
+ +

The PKCS#1 block formatting is evident from this. If this was done using encrypt and decrypt the block would have been of type 2 (the second byte) and random padding data visible instead of the 0xff bytes.

+ +

It is possible to analyse the signature of certificates using this utility in conjunction with asn1parse. Consider the self signed example in certs/pca-cert.pem . Running asn1parse as follows yields:

+ +
openssl asn1parse -in pca-cert.pem
+
+   0:d=0  hl=4 l= 742 cons: SEQUENCE
+   4:d=1  hl=4 l= 591 cons:  SEQUENCE
+   8:d=2  hl=2 l=   3 cons:   cont [ 0 ]
+  10:d=3  hl=2 l=   1 prim:    INTEGER           :02
+  13:d=2  hl=2 l=   1 prim:   INTEGER           :00
+  16:d=2  hl=2 l=  13 cons:   SEQUENCE
+  18:d=3  hl=2 l=   9 prim:    OBJECT            :md5WithRSAEncryption
+  29:d=3  hl=2 l=   0 prim:    NULL
+  31:d=2  hl=2 l=  92 cons:   SEQUENCE
+  33:d=3  hl=2 l=  11 cons:    SET
+  35:d=4  hl=2 l=   9 cons:     SEQUENCE
+  37:d=5  hl=2 l=   3 prim:      OBJECT            :countryName
+  42:d=5  hl=2 l=   2 prim:      PRINTABLESTRING   :AU
+ ....
+ 599:d=1  hl=2 l=  13 cons:  SEQUENCE
+ 601:d=2  hl=2 l=   9 prim:   OBJECT            :md5WithRSAEncryption
+ 612:d=2  hl=2 l=   0 prim:   NULL
+ 614:d=1  hl=3 l= 129 prim:  BIT STRING
+ +

The final BIT STRING contains the actual signature. It can be extracted with:

+ +
openssl asn1parse -in pca-cert.pem -out sig -noout -strparse 614
+ +

The certificate public key can be extracted with:

+ +
openssl x509 -in test/testx509.pem -pubkey -noout >pubkey.pem
+ +

The signature can be analysed with:

+ +
openssl rsautl -in sig -verify -asn1parse -inkey pubkey.pem -pubin
+
+   0:d=0  hl=2 l=  32 cons: SEQUENCE
+   2:d=1  hl=2 l=  12 cons:  SEQUENCE
+   4:d=2  hl=2 l=   8 prim:   OBJECT            :md5
+  14:d=2  hl=2 l=   0 prim:   NULL
+  16:d=1  hl=2 l=  16 prim:  OCTET STRING
+     0000 - f3 46 9e aa 1a 4a 73 c9-37 ea 93 00 48 25 08 b5   .F...Js.7...H%..
+ +

This is the parsed version of an ASN1 DigestInfo structure. It can be seen that the digest used was md5. The actual part of the certificate that was signed can be extracted with:

+ +
openssl asn1parse -in pca-cert.pem -out tbs -noout -strparse 4
+ +

and its digest computed with:

+ +
openssl md5 -c tbs
+MD5(tbs)= f3:46:9e:aa:1a:4a:73:c9:37:ea:93:00:48:25:08:b5
+ +

which it can be seen agrees with the recovered value above.

+ +

SEE ALSO

+ +

dgst(1), rsa(1), genrsa(1)

+ +

COPYRIGHT

+ +

Copyright 2000-2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/s_client.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/s_client.html new file mode 100644 index 00000000..11617c97 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/s_client.html @@ -0,0 +1,681 @@ + + + + +s_client + + + + + + + + + + +

NAME

+ +

openssl-s_client, s_client - SSL/TLS client program

+ +

SYNOPSIS

+ +

openssl s_client [-help] [-connect host:port] [-bind host:port] [-proxy host:port] [-unix path] [-4] [-6] [-servername name] [-noservername] [-verify depth] [-verify_return_error] [-cert filename] [-certform DER|PEM] [-key filename] [-keyform DER|PEM] [-cert_chain filename] [-build_chain] [-xkey] [-xcert] [-xchain] [-xchain_build] [-xcertform PEM|DER] [-xkeyform PEM|DER] [-pass arg] [-CApath directory] [-CAfile filename] [-chainCApath directory] [-chainCAfile filename] [-no-CAfile] [-no-CApath] [-requestCAfile filename] [-dane_tlsa_domain domain] [-dane_tlsa_rrdata rrdata] [-dane_ee_no_namechecks] [-attime timestamp] [-check_ss_sig] [-crl_check] [-crl_check_all] [-explicit_policy] [-extended_crl] [-ignore_critical] [-inhibit_any] [-inhibit_map] [-no_check_time] [-partial_chain] [-policy arg] [-policy_check] [-policy_print] [-purpose purpose] [-suiteB_128] [-suiteB_128_only] [-suiteB_192] [-trusted_first] [-no_alt_chains] [-use_deltas] [-auth_level num] [-nameopt option] [-verify_depth num] [-verify_email email] [-verify_hostname hostname] [-verify_ip ip] [-verify_name name] [-build_chain] [-x509_strict] [-reconnect] [-showcerts] [-debug] [-msg] [-nbio_test] [-state] [-nbio] [-crlf] [-ign_eof] [-no_ign_eof] [-psk_identity identity] [-psk key] [-psk_session file] [-quiet] [-ssl3] [-tls1] [-tls1_1] [-tls1_2] [-tls1_3] [-no_ssl3] [-no_tls1] [-no_tls1_1] [-no_tls1_2] [-no_tls1_3] [-dtls] [-dtls1] [-dtls1_2] [-sctp] [-sctp_label_bug] [-fallback_scsv] [-async] [-max_send_frag] [-split_send_frag] [-max_pipelines] [-read_buf] [-bugs] [-comp] [-no_comp] [-allow_no_dhe_kex] [-sigalgs sigalglist] [-curves curvelist] [-cipher cipherlist] [-ciphersuites val] [-serverpref] [-starttls protocol] [-xmpphost hostname] [-name hostname] [-engine id] [-tlsextdebug] [-no_ticket] [-sess_out filename] [-sess_in filename] [-rand file...] [-writerand file] [-serverinfo types] [-status] [-alpn protocols] [-nextprotoneg protocols] [-ct] [-noct] [-ctlogfile] [-keylogfile file] [-early_data file] [-enable_pha] [target]

+ +

DESCRIPTION

+ +

The s_client command implements a generic SSL/TLS client which connects to a remote host using SSL/TLS. It is a very useful diagnostic tool for SSL servers.

+ +

OPTIONS

+ +

In addition to the options below the s_client utility also supports the common and client only options documented in the "Supported Command Line Commands" section of the SSL_CONF_cmd(3) manual page.

+ +
+ +
-help
+
+ +

Print out a usage message.

+ +
+
-connect host:port
+
+ +

This specifies the host and optional port to connect to. It is possible to select the host and port using the optional target positional argument instead. If neither this nor the target positional argument are specified then an attempt is made to connect to the local host on port 4433.

+ +
+
-bind host:port]
+
+ +

This specifies the host address and or port to bind as the source for the connection. For Unix-domain sockets the port is ignored and the host is used as the source socket address.

+ +
+
-proxy host:port
+
+ +

When used with the -connect flag, the program uses the host and port specified with this flag and issues an HTTP CONNECT command to connect to the desired server.

+ +
+
-unix path
+
+ +

Connect over the specified Unix-domain socket.

+ +
+
-4
+
+ +

Use IPv4 only.

+ +
+
-6
+
+ +

Use IPv6 only.

+ +
+
-servername name
+
+ +

Set the TLS SNI (Server Name Indication) extension in the ClientHello message to the given value. If -servername is not provided, the TLS SNI extension will be populated with the name given to -connect if it follows a DNS name format. If -connect is not provided either, the SNI is set to "localhost". This is the default since OpenSSL 1.1.1.

+ +

Even though SNI should normally be a DNS name and not an IP address, if -servername is provided then that name will be sent, regardless of whether it is a DNS name or not.

+ +

This option cannot be used in conjunction with -noservername.

+ +
+
-noservername
+
+ +

Suppresses sending of the SNI (Server Name Indication) extension in the ClientHello message. Cannot be used in conjunction with the -servername or <-dane_tlsa_domain> options.

+ +
+
-cert certname
+
+ +

The certificate to use, if one is requested by the server. The default is not to use a certificate.

+ +
+
-certform format
+
+ +

The certificate format to use: DER or PEM. PEM is the default.

+ +
+
-key keyfile
+
+ +

The private key to use. If not specified then the certificate file will be used.

+ +
+
-keyform format
+
+ +

The private format to use: DER or PEM. PEM is the default.

+ +
+
-cert_chain
+
+ +

A file containing trusted certificates to use when attempting to build the client/server certificate chain related to the certificate specified via the -cert option.

+ +
+
-build_chain
+
+ +

Specify whether the application should build the certificate chain to be provided to the server.

+ +
+
-xkey infile, -xcert infile, -xchain
+
+ +

Specify an extra certificate, private key and certificate chain. These behave in the same manner as the -cert, -key and -cert_chain options. When specified, the callback returning the first valid chain will be in use by the client.

+ +
+
-xchain_build
+
+ +

Specify whether the application should build the certificate chain to be provided to the server for the extra certificates provided via -xkey infile, -xcert infile, -xchain options.

+ +
+
-xcertform PEM|DER, -xkeyform PEM|DER
+
+ +

Extra certificate and private key format respectively.

+ +
+
-pass arg
+
+ +

the private key password source. For more information about the format of arg see the PASS PHRASE ARGUMENTS section in openssl(1).

+ +
+
-verify depth
+
+ +

The verify depth to use. This specifies the maximum length of the server certificate chain and turns on server certificate verification. Currently the verify operation continues after errors so all the problems with a certificate chain can be seen. As a side effect the connection will never fail due to a server certificate verify failure.

+ +
+
-verify_return_error
+
+ +

Return verification errors instead of continuing. This will typically abort the handshake with a fatal error.

+ +
+
-nameopt option
+
+ +

Option which determines how the subject or issuer names are displayed. The option argument can be a single option or multiple options separated by commas. Alternatively the -nameopt switch may be used more than once to set multiple options. See the x509(1) manual page for details.

+ +
+
-CApath directory
+
+ +

The directory to use for server certificate verification. This directory must be in "hash format", see verify(1) for more information. These are also used when building the client certificate chain.

+ +
+
-CAfile file
+
+ +

A file containing trusted certificates to use during server authentication and to use when attempting to build the client certificate chain.

+ +
+
-chainCApath directory
+
+ +

The directory to use for building the chain provided to the server. This directory must be in "hash format", see verify(1) for more information.

+ +
+
-chainCAfile file
+
+ +

A file containing trusted certificates to use when attempting to build the client certificate chain.

+ +
+
-no-CAfile
+
+ +

Do not load the trusted CA certificates from the default file location

+ +
+
-no-CApath
+
+ +

Do not load the trusted CA certificates from the default directory location

+ +
+
-requestCAfile file
+
+ +

A file containing a list of certificates whose subject names will be sent to the server in the certificate_authorities extension. Only supported for TLS 1.3

+ +
+
-dane_tlsa_domain domain
+
+ +

Enable RFC6698/RFC7671 DANE TLSA authentication and specify the TLSA base domain which becomes the default SNI hint and the primary reference identifier for hostname checks. This must be used in combination with at least one instance of the -dane_tlsa_rrdata option below.

+ +

When DANE authentication succeeds, the diagnostic output will include the lowest (closest to 0) depth at which a TLSA record authenticated a chain certificate. When that TLSA record is a "2 1 0" trust anchor public key that signed (rather than matched) the top-most certificate of the chain, the result is reported as "TA public key verified". Otherwise, either the TLSA record "matched TA certificate" at a positive depth or else "matched EE certificate" at depth 0.

+ +
+
-dane_tlsa_rrdata rrdata
+
+ +

Use one or more times to specify the RRDATA fields of the DANE TLSA RRset associated with the target service. The rrdata value is specified in "presentation form", that is four whitespace separated fields that specify the usage, selector, matching type and associated data, with the last of these encoded in hexadecimal. Optional whitespace is ignored in the associated data field. For example:

+ +
$ openssl s_client -brief -starttls smtp \
+  -connect smtp.example.com:25 \
+  -dane_tlsa_domain smtp.example.com \
+  -dane_tlsa_rrdata "2 1 1
+    B111DD8A1C2091A89BD4FD60C57F0716CCE50FEEFF8137CDBEE0326E 02CF362B" \
+  -dane_tlsa_rrdata "2 1 1
+    60B87575447DCBA2A36B7D11AC09FB24A9DB406FEE12D2CC90180517 616E8A18"
+...
+Verification: OK
+Verified peername: smtp.example.com
+DANE TLSA 2 1 1 ...ee12d2cc90180517616e8a18 matched TA certificate at depth 1
+...
+ +
+
-dane_ee_no_namechecks
+
+ +

This disables server name checks when authenticating via DANE-EE(3) TLSA records. For some applications, primarily web browsers, it is not safe to disable name checks due to "unknown key share" attacks, in which a malicious server can convince a client that a connection to a victim server is instead a secure connection to the malicious server. The malicious server may then be able to violate cross-origin scripting restrictions. Thus, despite the text of RFC7671, name checks are by default enabled for DANE-EE(3) TLSA records, and can be disabled in applications where it is safe to do so. In particular, SMTP and XMPP clients should set this option as SRV and MX records already make it possible for a remote domain to redirect client connections to any server of its choice, and in any case SMTP and XMPP clients do not execute scripts downloaded from remote servers.

+ +
+
-attime, -check_ss_sig, -crl_check, -crl_check_all, -explicit_policy, -extended_crl, -ignore_critical, -inhibit_any, -inhibit_map, -no_alt_chains, -no_check_time, -partial_chain, -policy, -policy_check, -policy_print, -purpose, -suiteB_128, -suiteB_128_only, -suiteB_192, -trusted_first, -use_deltas, -auth_level, -verify_depth, -verify_email, -verify_hostname, -verify_ip, -verify_name, -x509_strict
+
+ +

Set various certificate chain validation options. See the verify(1) manual page for details.

+ +
+
-reconnect
+
+ +

Reconnects to the same server 5 times using the same session ID, this can be used as a test that session caching is working.

+ +
+
-showcerts
+
+ +

Displays the server certificate list as sent by the server: it only consists of certificates the server has sent (in the order the server has sent them). It is not a verified chain.

+ +
+
-prexit
+
+ +

Print session information when the program exits. This will always attempt to print out information even if the connection fails. Normally information will only be printed out once if the connection succeeds. This option is useful because the cipher in use may be renegotiated or the connection may fail because a client certificate is required or is requested only after an attempt is made to access a certain URL. Note: the output produced by this option is not always accurate because a connection might never have been established.

+ +
+
-state
+
+ +

Prints out the SSL session states.

+ +
+
-debug
+
+ +

Print extensive debugging information including a hex dump of all traffic.

+ +
+
-msg
+
+ +

Show all protocol messages with hex dump.

+ +
+
-trace
+
+ +

Show verbose trace output of protocol messages. OpenSSL needs to be compiled with enable-ssl-trace for this option to work.

+ +
+
-msgfile
+
+ +

File to send output of -msg or -trace to, default standard output.

+ +
+
-nbio_test
+
+ +

Tests non-blocking I/O

+ +
+
-nbio
+
+ +

Turns on non-blocking I/O

+ +
+
-crlf
+
+ +

This option translated a line feed from the terminal into CR+LF as required by some servers.

+ +
+
-ign_eof
+
+ +

Inhibit shutting down the connection when end of file is reached in the input.

+ +
+
-quiet
+
+ +

Inhibit printing of session and certificate information. This implicitly turns on -ign_eof as well.

+ +
+
-no_ign_eof
+
+ +

Shut down the connection when end of file is reached in the input. Can be used to override the implicit -ign_eof after -quiet.

+ +
+
-psk_identity identity
+
+ +

Use the PSK identity identity when using a PSK cipher suite. The default value is "Client_identity" (without the quotes).

+ +
+
-psk key
+
+ +

Use the PSK key key when using a PSK cipher suite. The key is given as a hexadecimal number without leading 0x, for example -psk 1a2b3c4d. This option must be provided in order to use a PSK cipher.

+ +
+
-psk_session file
+
+ +

Use the pem encoded SSL_SESSION data stored in file as the basis of a PSK. Note that this will only work if TLSv1.3 is negotiated.

+ +
+
-ssl3, -tls1, -tls1_1, -tls1_2, -tls1_3, -no_ssl3, -no_tls1, -no_tls1_1, -no_tls1_2, -no_tls1_3
+
+ +

These options require or disable the use of the specified SSL or TLS protocols. By default s_client will negotiate the highest mutually supported protocol version. When a specific TLS version is required, only that version will be offered to and accepted from the server. Note that not all protocols and flags may be available, depending on how OpenSSL was built.

+ +
+
-dtls, -dtls1, -dtls1_2
+
+ +

These options make s_client use DTLS protocols instead of TLS. With -dtls, s_client will negotiate any supported DTLS protocol version, whilst -dtls1 and -dtls1_2 will only support DTLS1.0 and DTLS1.2 respectively.

+ +
+
-sctp
+
+ +

Use SCTP for the transport protocol instead of UDP in DTLS. Must be used in conjunction with -dtls, -dtls1 or -dtls1_2. This option is only available where OpenSSL has support for SCTP enabled.

+ +
+
-sctp_label_bug
+
+ +

Use the incorrect behaviour of older OpenSSL implementations when computing endpoint-pair shared secrets for DTLS/SCTP. This allows communication with older broken implementations but breaks interoperability with correct implementations. Must be used in conjunction with -sctp. This option is only available where OpenSSL has support for SCTP enabled.

+ +
+
-fallback_scsv
+
+ +

Send TLS_FALLBACK_SCSV in the ClientHello.

+ +
+
-async
+
+ +

Switch on asynchronous mode. Cryptographic operations will be performed asynchronously. This will only have an effect if an asynchronous capable engine is also used via the -engine option. For test purposes the dummy async engine (dasync) can be used (if available).

+ +
+
-max_send_frag int
+
+ +

The maximum size of data fragment to send. See SSL_CTX_set_max_send_fragment(3) for further information.

+ +
+
-split_send_frag int
+
+ +

The size used to split data for encrypt pipelines. If more data is written in one go than this value then it will be split into multiple pipelines, up to the maximum number of pipelines defined by max_pipelines. This only has an effect if a suitable cipher suite has been negotiated, an engine that supports pipelining has been loaded, and max_pipelines is greater than 1. See SSL_CTX_set_split_send_fragment(3) for further information.

+ +
+
-max_pipelines int
+
+ +

The maximum number of encrypt/decrypt pipelines to be used. This will only have an effect if an engine has been loaded that supports pipelining (e.g. the dasync engine) and a suitable cipher suite has been negotiated. The default value is 1. See SSL_CTX_set_max_pipelines(3) for further information.

+ +
+
-read_buf int
+
+ +

The default read buffer size to be used for connections. This will only have an effect if the buffer size is larger than the size that would otherwise be used and pipelining is in use (see SSL_CTX_set_default_read_buffer_len(3) for further information).

+ +
+
-bugs
+
+ +

There are several known bugs in SSL and TLS implementations. Adding this option enables various workarounds.

+ +
+
-comp
+
+ +

Enables support for SSL/TLS compression. This option was introduced in OpenSSL 1.1.0. TLS compression is not recommended and is off by default as of OpenSSL 1.1.0.

+ +
+
-no_comp
+
+ +

Disables support for SSL/TLS compression. TLS compression is not recommended and is off by default as of OpenSSL 1.1.0.

+ +
+
-brief
+
+ +

Only provide a brief summary of connection parameters instead of the normal verbose output.

+ +
+
-sigalgs sigalglist
+
+ +

Specifies the list of signature algorithms that are sent by the client. The server selects one entry in the list based on its preferences. For example strings, see SSL_CTX_set1_sigalgs(3)

+ +
+
-curves curvelist
+
+ +

Specifies the list of supported curves to be sent by the client. The curve is ultimately selected by the server. For a list of all curves, use:

+ +
$ openssl ecparam -list_curves
+ +
+
-cipher cipherlist
+
+ +

This allows the TLSv1.2 and below cipher list sent by the client to be modified. This list will be combined with any TLSv1.3 ciphersuites that have been configured. Although the server determines which ciphersuite is used it should take the first supported cipher in the list sent by the client. See the ciphers command for more information.

+ +
+
-ciphersuites val
+
+ +

This allows the TLSv1.3 ciphersuites sent by the client to be modified. This list will be combined with any TLSv1.2 and below ciphersuites that have been configured. Although the server determines which cipher suite is used it should take the first supported cipher in the list sent by the client. See the ciphers command for more information. The format for this list is a simple colon (":") separated list of TLSv1.3 ciphersuite names.

+ +
+
-starttls protocol
+
+ +

Send the protocol-specific message(s) to switch to TLS for communication. protocol is a keyword for the intended protocol. Currently, the only supported keywords are "smtp", "pop3", "imap", "ftp", "xmpp", "xmpp-server", "irc", "postgres", "mysql", "lmtp", "nntp", "sieve" and "ldap".

+ +
+
-xmpphost hostname
+
+ +

This option, when used with "-starttls xmpp" or "-starttls xmpp-server", specifies the host for the "to" attribute of the stream element. If this option is not specified, then the host specified with "-connect" will be used.

+ +

This option is an alias of the -name option for "xmpp" and "xmpp-server".

+ +
+
-name hostname
+
+ +

This option is used to specify hostname information for various protocols used with -starttls option. Currently only "xmpp", "xmpp-server", "smtp" and "lmtp" can utilize this -name option.

+ +

If this option is used with "-starttls xmpp" or "-starttls xmpp-server", if specifies the host for the "to" attribute of the stream element. If this option is not specified, then the host specified with "-connect" will be used.

+ +

If this option is used with "-starttls lmtp" or "-starttls smtp", it specifies the name to use in the "LMTP LHLO" or "SMTP EHLO" message, respectively. If this option is not specified, then "mail.example.com" will be used.

+ +
+
-tlsextdebug
+
+ +

Print out a hex dump of any TLS extensions received from the server.

+ +
+
-no_ticket
+
+ +

Disable RFC4507bis session ticket support.

+ +
+
-sess_out filename
+
+ +

Output SSL session to filename.

+ +
+
-sess_in sess.pem
+
+ +

Load SSL session from filename. The client will attempt to resume a connection from this session.

+ +
+
-engine id
+
+ +

Specifying an engine (by its unique id string) will cause s_client to attempt to obtain a functional reference to the specified engine, thus initialising it if needed. The engine will then be set as the default for all available algorithms.

+ +
+
-rand file...
+
+ +

A file or files containing random data used to seed the random number generator. Multiple files can be specified separated by an OS-dependent character. The separator is ; for MS-Windows, , for OpenVMS, and : for all others.

+ +
+
[-writerand file]
+
+ +

Writes random data to the specified file upon exit. This can be used with a subsequent -rand flag.

+ +
+
-serverinfo types
+
+ +

A list of comma-separated TLS Extension Types (numbers between 0 and 65535). Each type will be sent as an empty ClientHello TLS Extension. The server's response (if any) will be encoded and displayed as a PEM file.

+ +
+
-status
+
+ +

Sends a certificate status request to the server (OCSP stapling). The server response (if any) is printed out.

+ +
+
-alpn protocols, -nextprotoneg protocols
+
+ +

These flags enable the Enable the Application-Layer Protocol Negotiation or Next Protocol Negotiation (NPN) extension, respectively. ALPN is the IETF standard and replaces NPN. The protocols list is a comma-separated list of protocol names that the client should advertise support for. The list should contain the most desirable protocols first. Protocol names are printable ASCII strings, for example "http/1.1" or "spdy/3". An empty list of protocols is treated specially and will cause the client to advertise support for the TLS extension but disconnect just after receiving ServerHello with a list of server supported protocols. The flag -nextprotoneg cannot be specified if -tls1_3 is used.

+ +
+
-ct, -noct
+
+ +

Use one of these two options to control whether Certificate Transparency (CT) is enabled (-ct) or disabled (-noct). If CT is enabled, signed certificate timestamps (SCTs) will be requested from the server and reported at handshake completion.

+ +

Enabling CT also enables OCSP stapling, as this is one possible delivery method for SCTs.

+ +
+
-ctlogfile
+
+ +

A file containing a list of known Certificate Transparency logs. See SSL_CTX_set_ctlog_list_file(3) for the expected file format.

+ +
+
-keylogfile file
+
+ +

Appends TLS secrets to the specified keylog file such that external programs (like Wireshark) can decrypt TLS connections.

+ +
+
-early_data file
+
+ +

Reads the contents of the specified file and attempts to send it as early data to the server. This will only work with resumed sessions that support early data and when the server accepts the early data.

+ +
+
-enable_pha
+
+ +

For TLSv1.3 only, send the Post-Handshake Authentication extension. This will happen whether or not a certificate has been provided via -cert.

+ +
+
[target]
+
+ +

Rather than providing -connect, the target hostname and optional port may be provided as a single positional argument after all options. If neither this nor -connect are provided, falls back to attempting to connect to localhost on port 4433.

+ +
+
+ +

CONNECTED COMMANDS

+ +

If a connection is established with an SSL server then any data received from the server is displayed and any key presses will be sent to the server. If end of file is reached then the connection will be closed down. When used interactively (which means neither -quiet nor -ign_eof have been given), then certain commands are also recognized which perform special operations. These commands are a letter which must appear at the start of a line. They are listed below.

+ +
+ +
Q
+
+ +

End the current SSL connection and exit.

+ +
+
R
+
+ +

Renegotiate the SSL session (TLSv1.2 and below only).

+ +
+
B
+
+ +

Send a heartbeat message to the server (DTLS only)

+ +
+
k
+
+ +

Send a key update message to the server (TLSv1.3 only)

+ +
+
K
+
+ +

Send a key update message to the server and request one back (TLSv1.3 only)

+ +
+
+ +

NOTES

+ +

s_client can be used to debug SSL servers. To connect to an SSL HTTP server the command:

+ +
openssl s_client -connect servername:443
+ +

would typically be used (https uses port 443). If the connection succeeds then an HTTP command can be given such as "GET /" to retrieve a web page.

+ +

If the handshake fails then there are several possible causes, if it is nothing obvious like no client certificate then the -bugs, -ssl3, -tls1, -no_ssl3, -no_tls1 options can be tried in case it is a buggy server. In particular you should play with these options before submitting a bug report to an OpenSSL mailing list.

+ +

A frequent problem when attempting to get client certificates working 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 s_client the CA list can be 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 -prexit option and send an HTTP request for an appropriate page.

+ +

If a certificate is specified on the command line using the -cert option it will not be used unless the server specifically requests a client certificate. Therefor 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 -showcerts option can be used to show all the certificates sent by the server.

+ +

The s_client utility is a test tool and is designed to continue the handshake after any certificate verification errors. As a result it will accept any certificate chain (trusted or not) sent by the peer. None test applications should not do this as it makes them vulnerable to a MITM attack. This behaviour can be changed by with the -verify_return_error option: any verify errors are then returned aborting the handshake.

+ +

The -bind option may be useful if the server or a firewall requires connections to come from some particular address and or port.

+ +

BUGS

+ +

Because this program has a lot of options and also because some of the techniques used are rather old, the C source of s_client is rather hard to read and not a model of how things should be done. A typical SSL client program would be much simpler.

+ +

The -prexit option is a bit of a hack. We should really report information whenever a session is renegotiated.

+ +

SEE ALSO

+ +

SSL_CONF_cmd(3), sess_id(1), s_server(1), ciphers(1), SSL_CTX_set_max_send_fragment(3), SSL_CTX_set_split_send_fragment(3), SSL_CTX_set_max_pipelines(3)

+ +

HISTORY

+ +

The -no_alt_chains option was added in OpenSSL 1.1.0. The -name option was added in OpenSSL 1.1.1.

+ +

COPYRIGHT

+ +

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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/s_server.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/s_server.html new file mode 100644 index 00000000..8dfa0356 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/s_server.html @@ -0,0 +1,714 @@ + + + + +s_server + + + + + + + + + + +

NAME

+ +

openssl-s_server, s_server - SSL/TLS server program

+ +

SYNOPSIS

+ +

openssl s_server [-help] [-port +int] [-accept val] [-unix val] [-4] [-6] [-unlink] [-context val] [-verify int] [-Verify int] [-cert infile] [-nameopt val] [-naccept +int] [-serverinfo val] [-certform PEM|DER] [-key infile] [-keyform format] [-pass val] [-dcert infile] [-dcertform PEM|DER] [-dkey infile] [-dkeyform PEM|DER] [-dpass val] [-nbio_test] [-crlf] [-debug] [-msg] [-msgfile outfile] [-state] [-CAfile infile] [-CApath dir] [-no-CAfile] [-no-CApath] [-nocert] [-quiet] [-no_resume_ephemeral] [-www] [-WWW] [-servername] [-servername_fatal] [-cert2 infile] [-key2 infile] [-tlsextdebug] [-HTTP] [-id_prefix val] [-rand file...] [-writerand file] [-keymatexport val] [-keymatexportlen +int] [-CRL infile] [-crl_download] [-cert_chain infile] [-dcert_chain infile] [-chainCApath dir] [-verifyCApath dir] [-no_cache] [-ext_cache] [-CRLform PEM|DER] [-verify_return_error] [-verify_quiet] [-build_chain] [-chainCAfile infile] [-verifyCAfile infile] [-ign_eof] [-no_ign_eof] [-status] [-status_verbose] [-status_timeout int] [-status_url val] [-status_file infile] [-trace] [-security_debug] [-security_debug_verbose] [-brief] [-rev] [-async] [-ssl_config val] [-max_send_frag +int] [-split_send_frag +int] [-max_pipelines +int] [-read_buf +int] [-no_ssl3] [-no_tls1] [-no_tls1_1] [-no_tls1_2] [-no_tls1_3] [-bugs] [-no_comp] [-comp] [-no_ticket] [-num_tickets] [-serverpref] [-legacy_renegotiation] [-no_renegotiation] [-legacy_server_connect] [-no_resumption_on_reneg] [-no_legacy_server_connect] [-allow_no_dhe_kex] [-prioritize_chacha] [-strict] [-sigalgs val] [-client_sigalgs val] [-groups val] [-curves val] [-named_curve val] [-cipher val] [-ciphersuites val] [-dhparam infile] [-record_padding val] [-debug_broken_protocol] [-policy val] [-purpose val] [-verify_name val] [-verify_depth int] [-auth_level int] [-attime intmax] [-verify_hostname val] [-verify_email val] [-verify_ip] [-ignore_critical] [-issuer_checks] [-crl_check] [-crl_check_all] [-policy_check] [-explicit_policy] [-inhibit_any] [-inhibit_map] [-x509_strict] [-extended_crl] [-use_deltas] [-policy_print] [-check_ss_sig] [-trusted_first] [-suiteB_128_only] [-suiteB_128] [-suiteB_192] [-partial_chain] [-no_alt_chains] [-no_check_time] [-allow_proxy_certs] [-xkey] [-xcert] [-xchain] [-xchain_build] [-xcertform PEM|DER] [-xkeyform PEM|DER] [-nbio] [-psk_identity val] [-psk_hint val] [-psk val] [-psk_session file] [-srpvfile infile] [-srpuserseed val] [-ssl3] [-tls1] [-tls1_1] [-tls1_2] [-tls1_3] [-dtls] [-timeout] [-mtu +int] [-listen] [-dtls1] [-dtls1_2] [-sctp] [-sctp_label_bug] [-no_dhe] [-nextprotoneg val] [-use_srtp val] [-alpn val] [-engine val] [-keylogfile outfile] [-max_early_data int] [-early_data] [-anti_replay] [-no_anti_replay]

+ +

DESCRIPTION

+ +

The s_server command implements a generic SSL/TLS server which listens for connections on a given port using SSL/TLS.

+ +

OPTIONS

+ +

In addition to the options below the s_server utility also supports the common and server only options documented in the "Supported Command Line Commands" section of the SSL_CONF_cmd(3) manual page.

+ +
+ +
-help
+
+ +

Print out a usage message.

+ +
+
-port +int
+
+ +

The TCP port to listen on for connections. If not specified 4433 is used.

+ +
+
-accept val
+
+ +

The optional TCP host and port to listen on for connections. If not specified, *:4433 is used.

+ +
+
-unix val
+
+ +

Unix domain socket to accept on.

+ +
+
-4
+
+ +

Use IPv4 only.

+ +
+
-6
+
+ +

Use IPv6 only.

+ +
+ +
+ +

For -unix, unlink any existing socket first.

+ +
+
-context val
+
+ +

Sets the SSL context id. It can be given any string value. If this option is not present a default value will be used.

+ +
+
-verify int, -Verify int
+
+ +

The verify depth to use. This specifies the maximum length of the client certificate chain and makes the server request a certificate from the client. With the -verify option a certificate is requested but the client does not have to send one, with the -Verify option the client must supply a certificate or an error occurs.

+ +

If the cipher suite cannot request a client certificate (for example an anonymous cipher suite or PSK) this option has no effect.

+ +
+
-cert infile
+
+ +

The certificate to use, most servers cipher suites require the use of a certificate and some require a certificate with a certain public key type: for example the DSS cipher suites require a certificate containing a DSS (DSA) key. If not specified then the filename "server.pem" will be used.

+ +
+
-cert_chain
+
+ +

A file containing trusted certificates to use when attempting to build the client/server certificate chain related to the certificate specified via the -cert option.

+ +
+
-build_chain
+
+ +

Specify whether the application should build the certificate chain to be provided to the client.

+ +
+
-nameopt val
+
+ +

Option which determines how the subject or issuer names are displayed. The val argument can be a single option or multiple options separated by commas. Alternatively the -nameopt switch may be used more than once to set multiple options. See the x509(1) manual page for details.

+ +
+
-naccept +int
+
+ +

The server will exit after receiving the specified number of connections, default unlimited.

+ +
+
-serverinfo val
+
+ +

A file containing one or more blocks of PEM data. Each PEM block must encode a TLS ServerHello extension (2 bytes type, 2 bytes length, followed by "length" bytes of extension data). If the client sends an empty TLS ClientHello extension matching the type, the corresponding ServerHello extension will be returned.

+ +
+
-certform PEM|DER
+
+ +

The certificate format to use: DER or PEM. PEM is the default.

+ +
+
-key infile
+
+ +

The private key to use. If not specified then the certificate file will be used.

+ +
+
-keyform format
+
+ +

The private format to use: DER or PEM. PEM is the default.

+ +
+
-pass val
+
+ +

The private key password source. For more information about the format of val see the PASS PHRASE ARGUMENTS section in openssl(1).

+ +
+
-dcert infile, -dkey infile
+
+ +

Specify an additional certificate and private key, these behave in the same manner as the -cert and -key options except there is no default if they are not specified (no additional certificate and key is used). As noted above some cipher suites require a certificate containing a key of a certain type. Some cipher suites need a certificate carrying an RSA key and some a DSS (DSA) key. By using RSA and DSS certificates and keys a server can support clients which only support RSA or DSS cipher suites by using an appropriate certificate.

+ +
+
-dcert_chain
+
+ +

A file containing trusted certificates to use when attempting to build the server certificate chain when a certificate specified via the -dcert option is in use.

+ +
+
-dcertform PEM|DER, -dkeyform PEM|DER, -dpass val
+
+ +

Additional certificate and private key format and passphrase respectively.

+ +
+
-xkey infile, -xcert infile, -xchain
+
+ +

Specify an extra certificate, private key and certificate chain. These behave in the same manner as the -cert, -key and -cert_chain options. When specified, the callback returning the first valid chain will be in use by the server.

+ +
+
-xchain_build
+
+ +

Specify whether the application should build the certificate chain to be provided to the client for the extra certificates provided via -xkey infile, -xcert infile, -xchain options.

+ +
+
-xcertform PEM|DER, -xkeyform PEM|DER
+
+ +

Extra certificate and private key format respectively.

+ +
+
-nbio_test
+
+ +

Tests non blocking I/O.

+ +
+
-crlf
+
+ +

This option translated a line feed from the terminal into CR+LF.

+ +
+
-debug
+
+ +

Print extensive debugging information including a hex dump of all traffic.

+ +
+
-msg
+
+ +

Show all protocol messages with hex dump.

+ +
+
-msgfile outfile
+
+ +

File to send output of -msg or -trace to, default standard output.

+ +
+
-state
+
+ +

Prints the SSL session states.

+ +
+
-CAfile infile
+
+ +

A file containing trusted certificates to use during client authentication and to use when attempting to build the server certificate chain. The list is also used in the list of acceptable client CAs passed to the client when a certificate is requested.

+ +
+
-CApath dir
+
+ +

The directory to use for client certificate verification. This directory must be in "hash format", see verify(1) for more information. These are also used when building the server certificate chain.

+ +
+
-chainCApath dir
+
+ +

The directory to use for building the chain provided to the client. This directory must be in "hash format", see verify(1) for more information.

+ +
+
-chainCAfile file
+
+ +

A file containing trusted certificates to use when attempting to build the server certificate chain.

+ +
+
-no-CAfile
+
+ +

Do not load the trusted CA certificates from the default file location.

+ +
+
-no-CApath
+
+ +

Do not load the trusted CA certificates from the default directory location.

+ +
+
-nocert
+
+ +

If this option is set then no certificate is used. This restricts the cipher suites available to the anonymous ones (currently just anonymous DH).

+ +
+
-quiet
+
+ +

Inhibit printing of session and certificate information.

+ +
+
-www
+
+ +

Sends a status message back to the client when it connects. This includes information about the ciphers used and various session parameters. The output is in HTML format so this option will normally be used with a web browser. Cannot be used in conjunction with -early_data.

+ +
+
-WWW
+
+ +

Emulates a simple web server. Pages will be resolved relative to the current directory, for example if the URL https://myhost/page.html is requested the file ./page.html will be loaded. Cannot be used in conjunction with -early_data.

+ +
+
-tlsextdebug
+
+ +

Print a hex dump of any TLS extensions received from the server.

+ +
+
-HTTP
+
+ +

Emulates a simple web server. Pages will be resolved relative to the current directory, for example if the URL https://myhost/page.html is requested the file ./page.html will be loaded. The files loaded are assumed to contain a complete and correct HTTP response (lines that are part of the HTTP response line and headers must end with CRLF). Cannot be used in conjunction with -early_data.

+ +
+
-id_prefix val
+
+ +

Generate SSL/TLS session IDs prefixed by val. This is mostly useful for testing any SSL/TLS code (eg. 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).

+ +
+
-rand file...
+
+ +

A file or files containing random data used to seed the random number generator. Multiple files can be specified separated by an OS-dependent character. The separator is ; for MS-Windows, , for OpenVMS, and : for all others.

+ +
+
[-writerand file]
+
+ +

Writes random data to the specified file upon exit. This can be used with a subsequent -rand flag.

+ +
+
-verify_return_error
+
+ +

Verification errors normally just print a message but allow the connection to continue, for debugging purposes. If this option is used, then verification errors close the connection.

+ +
+
-status
+
+ +

Enables certificate status request support (aka OCSP stapling).

+ +
+
-status_verbose
+
+ +

Enables certificate status request support (aka OCSP stapling) and gives a verbose printout of the OCSP response.

+ +
+
-status_timeout int
+
+ +

Sets the timeout for OCSP response to int seconds.

+ +
+
-status_url val
+
+ +

Sets a fallback responder URL to use if no responder URL is present in the server certificate. Without this option an error is returned if the server certificate does not contain a responder address.

+ +
+
-status_file infile
+
+ +

Overrides any OCSP responder URLs from the certificate and always provides the OCSP Response stored in the file. The file must be in DER format.

+ +
+
-trace
+
+ +

Show verbose trace output of protocol messages. OpenSSL needs to be compiled with enable-ssl-trace for this option to work.

+ +
+
-brief
+
+ +

Provide a brief summary of connection parameters instead of the normal verbose output.

+ +
+
-rev
+
+ +

Simple test server which just reverses the text received from the client and sends it back to the server. Also sets -brief. Cannot be used in conjunction with -early_data.

+ +
+
-async
+
+ +

Switch on asynchronous mode. Cryptographic operations will be performed asynchronously. This will only have an effect if an asynchronous capable engine is also used via the -engine option. For test purposes the dummy async engine (dasync) can be used (if available).

+ +
+
-max_send_frag +int
+
+ +

The maximum size of data fragment to send. See SSL_CTX_set_max_send_fragment(3) for further information.

+ +
+
-split_send_frag +int
+
+ +

The size used to split data for encrypt pipelines. If more data is written in one go than this value then it will be split into multiple pipelines, up to the maximum number of pipelines defined by max_pipelines. This only has an effect if a suitable cipher suite has been negotiated, an engine that supports pipelining has been loaded, and max_pipelines is greater than 1. See SSL_CTX_set_split_send_fragment(3) for further information.

+ +
+
-max_pipelines +int
+
+ +

The maximum number of encrypt/decrypt pipelines to be used. This will only have an effect if an engine has been loaded that supports pipelining (e.g. the dasync engine) and a suitable cipher suite has been negotiated. The default value is 1. See SSL_CTX_set_max_pipelines(3) for further information.

+ +
+
-read_buf +int
+
+ +

The default read buffer size to be used for connections. This will only have an effect if the buffer size is larger than the size that would otherwise be used and pipelining is in use (see SSL_CTX_set_default_read_buffer_len(3) for further information).

+ +
+
-ssl2, -ssl3, -tls1, -tls1_1, -tls1_2, -tls1_3, -no_ssl2, -no_ssl3, -no_tls1, -no_tls1_1, -no_tls1_2, -no_tls1_3
+
+ +

These options require or disable the use of the specified SSL or TLS protocols. By default s_server will negotiate the highest mutually supported protocol version. When a specific TLS version is required, only that version will be accepted from the client. Note that not all protocols and flags may be available, depending on how OpenSSL was built.

+ +
+
-bugs
+
+ +

There are several known bugs in SSL and TLS implementations. Adding this option enables various workarounds.

+ +
+
-no_comp
+
+ +

Disable negotiation of TLS compression. TLS compression is not recommended and is off by default as of OpenSSL 1.1.0.

+ +
+
-comp
+
+ +

Enable negotiation of TLS compression. This option was introduced in OpenSSL 1.1.0. TLS compression is not recommended and is off by default as of OpenSSL 1.1.0.

+ +
+
-no_ticket
+
+ +

Disable RFC4507bis session ticket support. This option has no effect if TLSv1.3 is negotiated. See -num_tickets.

+ +
+
-num_tickets
+
+ +

Control the number of tickets that will be sent to the client after a full handshake in TLSv1.3. The default number of tickets is 2. This option does not affect the number of tickets sent after a resumption handshake.

+ +
+
-serverpref
+
+ +

Use the server's cipher preferences, rather than the client's preferences.

+ +
+
-prioritize_chacha
+
+ +

Prioritize ChaCha ciphers when preferred by clients. Requires -serverpref.

+ +
+
-no_resumption_on_reneg
+
+ +

Set the SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION option.

+ +
+
-client_sigalgs val
+
+ +

Signature algorithms to support for client certificate authentication (colon-separated list).

+ +
+
-named_curve val
+
+ +

Specifies the elliptic curve to use. NOTE: this is single curve, not a list. For a list of all possible curves, use:

+ +
$ openssl ecparam -list_curves
+ +
+
-cipher val
+
+ +

This allows the list of TLSv1.2 and below ciphersuites used by the server to be modified. This list is combined with any TLSv1.3 ciphersuites that have been configured. When the client sends a list of supported ciphers the first client cipher also included in the server list is used. Because the client specifies the preference order, the order of the server cipherlist is irrelevant. See the ciphers command for more information.

+ +
+
-ciphersuites val
+
+ +

This allows the list of TLSv1.3 ciphersuites used by the server to be modified. This list is combined with any TLSv1.2 and below ciphersuites that have been configured. When the client sends a list of supported ciphers the first client cipher also included in the server list is used. Because the client specifies the preference order, the order of the server cipherlist is irrelevant. See the ciphers command for more information. The format for this list is a simple colon (":") separated list of TLSv1.3 ciphersuite names.

+ +
+
-dhparam infile
+
+ +

The DH parameter file to use. The ephemeral DH cipher suites generate keys using a set of DH parameters. If not specified then an attempt is made to load the parameters from the server certificate file. If this fails then a static set of parameters hard coded into the s_server program will be used.

+ +
+
-attime, -check_ss_sig, -crl_check, -crl_check_all, -explicit_policy, -extended_crl, -ignore_critical, -inhibit_any, -inhibit_map, -no_alt_chains, -no_check_time, -partial_chain, -policy, -policy_check, -policy_print, -purpose, -suiteB_128, -suiteB_128_only, -suiteB_192, -trusted_first, -use_deltas, -auth_level, -verify_depth, -verify_email, -verify_hostname, -verify_ip, -verify_name, -x509_strict
+
+ +

Set different peer certificate verification options. See the verify(1) manual page for details.

+ +
+
-crl_check, -crl_check_all
+
+ +

Check the peer certificate has not been revoked by its CA. The CRL(s) are appended to the certificate file. With the -crl_check_all option all CRLs of all CAs in the chain are checked.

+ +
+
-nbio
+
+ +

Turns on non blocking I/O.

+ +
+
-psk_identity val
+
+ +

Expect the client to send PSK identity val when using a PSK cipher suite, and warn if they do not. By default, the expected PSK identity is the string "Client_identity".

+ +
+
-psk_hint val
+
+ +

Use the PSK identity hint val when using a PSK cipher suite.

+ +
+
-psk val
+
+ +

Use the PSK key val when using a PSK cipher suite. The key is given as a hexadecimal number without leading 0x, for example -psk 1a2b3c4d. This option must be provided in order to use a PSK cipher.

+ +
+
-psk_session file
+
+ +

Use the pem encoded SSL_SESSION data stored in file as the basis of a PSK. Note that this will only work if TLSv1.3 is negotiated.

+ +
+
-listen
+
+ +

This option can only be used in conjunction with one of the DTLS options above. With this option s_server will listen on a UDP port for incoming connections. Any ClientHellos that arrive will be checked to see if they have a cookie in them or not. Any without a cookie will be responded to with a HelloVerifyRequest. If a ClientHello with a cookie is received then s_server will connect to that peer and complete the handshake.

+ +
+
-dtls, -dtls1, -dtls1_2
+
+ +

These options make s_server use DTLS protocols instead of TLS. With -dtls, s_server will negotiate any supported DTLS protocol version, whilst -dtls1 and -dtls1_2 will only support DTLSv1.0 and DTLSv1.2 respectively.

+ +
+
-sctp
+
+ +

Use SCTP for the transport protocol instead of UDP in DTLS. Must be used in conjunction with -dtls, -dtls1 or -dtls1_2. This option is only available where OpenSSL has support for SCTP enabled.

+ +
+
-sctp_label_bug
+
+ +

Use the incorrect behaviour of older OpenSSL implementations when computing endpoint-pair shared secrets for DTLS/SCTP. This allows communication with older broken implementations but breaks interoperability with correct implementations. Must be used in conjunction with -sctp. This option is only available where OpenSSL has support for SCTP enabled.

+ +
+
-no_dhe
+
+ +

If this option is set then no DH parameters will be loaded effectively disabling the ephemeral DH cipher suites.

+ +
+
-alpn val, -nextprotoneg val
+
+ +

These flags enable the Enable the Application-Layer Protocol Negotiation or Next Protocol Negotiation (NPN) extension, respectively. ALPN is the IETF standard and replaces NPN. The val list is a comma-separated list of supported protocol names. The list should contain the most desirable protocols first. Protocol names are printable ASCII strings, for example "http/1.1" or "spdy/3". The flag -nextprotoneg cannot be specified if -tls1_3 is used.

+ +
+
-engine val
+
+ +

Specifying an engine (by its unique id string in val) will cause s_server to attempt to obtain a functional reference to the specified engine, thus initialising it if needed. The engine will then be set as the default for all available algorithms.

+ +
+
-keylogfile outfile
+
+ +

Appends TLS secrets to the specified keylog file such that external programs (like Wireshark) can decrypt TLS connections.

+ +
+
-max_early_data int
+
+ +

Change the default maximum early data bytes that are specified for new sessions and any incoming early data (when used in conjunction with the -early_data flag). The default value is approximately 16k. The argument must be an integer greater than or equal to 0.

+ +
+
-early_data
+
+ +

Accept early data where possible. Cannot be used in conjunction with -www, -WWW, -HTTP or -rev.

+ +
+
-anti_replay, -no_anti_replay
+
+ +

Switches replay protection on or off, respectively. Replay protection is on by default unless overridden by a configuration file. When it is on, OpenSSL will automatically detect if a session ticket has been used more than once, TLSv1.3 has been negotiated, and early data is enabled on the server. A full handshake is forced if a session ticket is used a second or subsequent time. Any early data that was sent will be rejected.

+ +
+
+ +

CONNECTED COMMANDS

+ +

If a connection request is established with an SSL client and neither the -www nor the -WWW option has been used then normally any data received from the client is displayed and any key presses will be sent to the client.

+ +

Certain commands are also recognized which perform special operations. These commands are a letter which must appear at the start of a line. They are listed below.

+ +
+ +
q
+
+ +

End the current SSL connection but still accept new connections.

+ +
+
Q
+
+ +

End the current SSL connection and exit.

+ +
+
r
+
+ +

Renegotiate the SSL session (TLSv1.2 and below only).

+ +
+
R
+
+ +

Renegotiate the SSL session and request a client certificate (TLSv1.2 and below only).

+ +
+
P
+
+ +

Send some plain text down the underlying TCP connection: this should cause the client to disconnect due to a protocol violation.

+ +
+
S
+
+ +

Print out some session cache status information.

+ +
+
B
+
+ +

Send a heartbeat message to the client (DTLS only)

+ +
+
k
+
+ +

Send a key update message to the client (TLSv1.3 only)

+ +
+
K
+
+ +

Send a key update message to the client and request one back (TLSv1.3 only)

+ +
+
c
+
+ +

Send a certificate request to the client (TLSv1.3 only)

+ +
+
+ +

NOTES

+ +

s_server can be used to debug SSL clients. To accept connections from a web browser the command:

+ +
openssl s_server -accept 443 -www
+ +

can be used for example.

+ +

Although specifying an empty list of CAs when requesting a client certificate is strictly speaking a protocol violation, some SSL clients interpret this to mean any CA is acceptable. This is useful for debugging purposes.

+ +

The session parameters can printed out using the sess_id program.

+ +

BUGS

+ +

Because this program has a lot of options and also because some of the techniques used are rather old, the C source of s_server is rather hard to read and not a model of how things should be done. A typical SSL server program would be much simpler.

+ +

The output of common ciphers is wrong: it just gives the list of ciphers that OpenSSL recognizes and the client supports.

+ +

There should be a way for the s_server program to print out details of any unknown cipher suites a client says it supports.

+ +

SEE ALSO

+ +

SSL_CONF_cmd(3), sess_id(1), s_client(1), ciphers(1) SSL_CTX_set_max_send_fragment(3), SSL_CTX_set_split_send_fragment(3), SSL_CTX_set_max_pipelines(3)

+ +

HISTORY

+ +

The -no_alt_chains option was added in OpenSSL 1.1.0.

+ +

The -allow-no-dhe-kex and -prioritize_chacha options were added in OpenSSL 1.1.1.

+ +

COPYRIGHT

+ +

Copyright 2000-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/s_time.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/s_time.html new file mode 100644 index 00000000..81cd2961 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/s_time.html @@ -0,0 +1,190 @@ + + + + +s_time + + + + + + + + + + +

NAME

+ +

openssl-s_time, s_time - SSL/TLS performance timing program

+ +

SYNOPSIS

+ +

openssl s_time [-help] [-connect host:port] [-www page] [-cert filename] [-key filename] [-CApath directory] [-CAfile filename] [-no-CAfile] [-no-CApath] [-reuse] [-new] [-verify depth] [-nameopt option] [-time seconds] [-ssl3] [-bugs] [-cipher cipherlist] [-ciphersuites val]

+ +

DESCRIPTION

+ +

The s_time command implements a generic SSL/TLS client which connects to a remote host using SSL/TLS. It can request a page from the server and includes the time to transfer the payload data in its timing measurements. It measures the number of connections within a given timeframe, the amount of data transferred (if any), and calculates the average time spent for one connection.

+ +

OPTIONS

+ +
+ +
-help
+
+ +

Print out a usage message.

+ +
+
-connect host:port
+
+ +

This specifies the host and optional port to connect to.

+ +
+
-www page
+
+ +

This specifies the page to GET from the server. A value of '/' gets the index.htm[l] page. If this parameter is not specified, then s_time will only perform the handshake to establish SSL connections but not transfer any payload data.

+ +
+
-cert certname
+
+ +

The certificate to use, if one is requested by the server. The default is not to use a certificate. The file is in PEM format.

+ +
+
-key keyfile
+
+ +

The private key to use. If not specified then the certificate file will be used. The file is in PEM format.

+ +
+
-verify depth
+
+ +

The verify depth to use. This specifies the maximum length of the server certificate chain and turns on server certificate verification. Currently the verify operation continues after errors so all the problems with a certificate chain can be seen. As a side effect the connection will never fail due to a server certificate verify failure.

+ +
+
-nameopt option
+
+ +

Option which determines how the subject or issuer names are displayed. The option argument can be a single option or multiple options separated by commas. Alternatively the -nameopt switch may be used more than once to set multiple options. See the x509(1) manual page for details.

+ +
+
-CApath directory
+
+ +

The directory to use for server certificate verification. This directory must be in "hash format", see verify for more information. These are also used when building the client certificate chain.

+ +
+
-CAfile file
+
+ +

A file containing trusted certificates to use during server authentication and to use when attempting to build the client certificate chain.

+ +
+
-no-CAfile
+
+ +

Do not load the trusted CA certificates from the default file location

+ +
+
-no-CApath
+
+ +

Do not load the trusted CA certificates from the default directory location

+ +
+
-new
+
+ +

Performs the timing test using a new session ID for each connection. If neither -new nor -reuse are specified, they are both on by default and executed in sequence.

+ +
+
-reuse
+
+ +

Performs the timing test using the same session ID; this can be used as a test that session caching is working. If neither -new nor -reuse are specified, they are both on by default and executed in sequence.

+ +
+
-ssl3
+
+ +

This option disables the use of SSL version 3. By default the initial handshake uses a method which should be compatible with all servers and permit them to use SSL v3 or TLS as appropriate.

+ +

The timing program is not as rich in options to turn protocols on and off as the s_client(1) program and may not connect to all servers. Unfortunately there are a lot of ancient and broken servers in use which cannot handle this technique and will fail to connect. Some servers only work if TLS is turned off with the -ssl3 option.

+ +

Note that this option may not be available, depending on how OpenSSL was built.

+ +
+
-bugs
+
+ +

There are several known bugs in SSL and TLS implementations. Adding this option enables various workarounds.

+ +
+
-cipher cipherlist
+
+ +

This allows the TLSv1.2 and below cipher list sent by the client to be modified. This list will be combined with any TLSv1.3 ciphersuites that have been configured. Although the server determines which cipher suite is used it should take the first supported cipher in the list sent by the client. See ciphers(1) for more information.

+ +
+
-ciphersuites val
+
+ +

This allows the TLSv1.3 ciphersuites sent by the client to be modified. This list will be combined with any TLSv1.2 and below ciphersuites that have been configured. Although the server determines which cipher suite is used it should take the first supported cipher in the list sent by the client. See ciphers(1) for more information. The format for this list is a simple colon (":") separated list of TLSv1.3 ciphersuite names.

+ +
+
-time length
+
+ +

Specifies how long (in seconds) s_time should establish connections and optionally transfer payload data from a server. Server and client performance and the link speed determine how many connections s_time can establish.

+ +
+
+ +

NOTES

+ +

s_time can be used to measure the performance of an SSL connection. To connect to an SSL HTTP server and get the default page the command

+ +
openssl s_time -connect servername:443 -www / -CApath yourdir -CAfile yourfile.pem -cipher commoncipher [-ssl3]
+ +

would typically be used (https uses port 443). 'commoncipher' is a cipher to which both client and server can agree, see the ciphers(1) command for details.

+ +

If the handshake fails then there are several possible causes, if it is nothing obvious like no client certificate then the -bugs and -ssl3 options can be tried in case it is a buggy server. In particular you should play with these options before submitting a bug report to an OpenSSL mailing list.

+ +

A frequent problem when attempting to get client certificates working 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 s_client(1) the CA list can be 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 -prexit option of s_client(1) and send an HTTP request for an appropriate page.

+ +

If a certificate is specified on the command line using the -cert option it will not be used unless the server specifically requests a client certificate. Therefor merely including a client certificate on the command line is no guarantee that the certificate works.

+ +

BUGS

+ +

Because this program does not have all the options of the s_client(1) program to turn protocols on and off, you may not be able to measure the performance of all protocols with all servers.

+ +

The -verify option should really exit if the server verification fails.

+ +

SEE ALSO

+ +

s_client(1), s_server(1), ciphers(1)

+ +

COPYRIGHT

+ +

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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/sess_id.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/sess_id.html new file mode 100644 index 00000000..c2ae674e --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/sess_id.html @@ -0,0 +1,195 @@ + + + + +sess_id + + + + + + + + + + +

NAME

+ +

openssl-sess_id, sess_id - SSL/TLS session handling utility

+ +

SYNOPSIS

+ +

openssl sess_id [-help] [-inform PEM|DER] [-outform PEM|DER|NSS] [-in filename] [-out filename] [-text] [-noout] [-context ID]

+ +

DESCRIPTION

+ +

The sess_id process the encoded version of the SSL session structure and optionally prints out SSL session details (for example the SSL session master key) in human readable format. Since this is a diagnostic tool that needs some knowledge of the SSL protocol to use properly, most users will not need to use it.

+ +

OPTIONS

+ +
+ +
-help
+
+ +

Print out a usage message.

+ +
+
-inform DER|PEM
+
+ +

This specifies the input format. The DER option uses an ASN1 DER encoded format containing session details. The precise format can vary from one version to the next. The PEM form is the default format: it consists of the DER format base64 encoded with additional header and footer lines.

+ +
+
-outform DER|PEM|NSS
+
+ +

This specifies the output format. The PEM and DER options have the same meaning and default as the -inform option. The NSS option outputs the session id and the master key in NSS keylog format.

+ +
+
-in filename
+
+ +

This specifies the input filename to read session information from or standard input by default.

+ +
+
-out filename
+
+ +

This specifies the output filename to write session information to or standard output if this option is not specified.

+ +
+
-text
+
+ +

Prints out the various public or private key components in plain text in addition to the encoded version.

+ +
+
-cert
+
+ +

If a certificate is present in the session it will be output using this option, if the -text option is also present then it will be printed out in text form.

+ +
+
-noout
+
+ +

This option prevents output of the encoded version of the session.

+ +
+
-context ID
+
+ +

This option can set the session id so the output session information uses the supplied ID. The ID can be any string of characters. This option won't normally be used.

+ +
+
+ +

OUTPUT

+ +

Typical output:

+ +
SSL-Session:
+    Protocol  : TLSv1
+    Cipher    : 0016
+    Session-ID: 871E62626C554CE95488823752CBD5F3673A3EF3DCE9C67BD916C809914B40ED
+    Session-ID-ctx: 01000000
+    Master-Key: A7CEFC571974BE02CAC305269DC59F76EA9F0B180CB6642697A68251F2D2BB57E51DBBB4C7885573192AE9AEE220FACD
+    Key-Arg   : None
+    Start Time: 948459261
+    Timeout   : 300 (sec)
+    Verify return code 0 (ok)
+ +

These are described below in more detail.

+ +
+ +
Protocol
+
+ +

This is the protocol in use TLSv1.3, TLSv1.2, TLSv1.1, TLSv1 or SSLv3.

+ +
+
Cipher
+
+ +

The cipher used this is the actual raw SSL or TLS cipher code, see the SSL or TLS specifications for more information.

+ +
+
Session-ID
+
+ +

The SSL session ID in hex format.

+ +
+
Session-ID-ctx
+
+ +

The session ID context in hex format.

+ +
+
Master-Key
+
+ +

This is the SSL session master key.

+ +
+
Start Time
+
+ +

This is the session start time represented as an integer in standard Unix format.

+ +
+
Timeout
+
+ +

The timeout in seconds.

+ +
+
Verify return code
+
+ +

This is the return code when an SSL client certificate is verified.

+ +
+
+ +

NOTES

+ +

The PEM encoded session format uses the header and footer lines:

+ +
-----BEGIN SSL SESSION PARAMETERS-----
+-----END SSL SESSION PARAMETERS-----
+ +

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 the information is being output by a "real" application. This is however strongly discouraged and should only be used for debugging purposes.

+ +

BUGS

+ +

The cipher and start time should be printed out in human readable form.

+ +

SEE ALSO

+ +

ciphers(1), s_server(1)

+ +

COPYRIGHT

+ +

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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/smime.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/smime.html new file mode 100644 index 00000000..5e78ea5f --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/smime.html @@ -0,0 +1,454 @@ + + + + +smime + + + + + + + + + + +

NAME

+ +

openssl-smime, smime - S/MIME utility

+ +

SYNOPSIS

+ +

openssl smime [-help] [-encrypt] [-decrypt] [-sign] [-resign] [-verify] [-pk7out] [-binary] [-crlfeol] [-cipher] [-in file] [-CAfile file] [-CApath dir] [-no-CAfile] [-no-CApath] [-attime timestamp] [-check_ss_sig] [-crl_check] [-crl_check_all] [-explicit_policy] [-extended_crl] [-ignore_critical] [-inhibit_any] [-inhibit_map] [-partial_chain] [-policy arg] [-policy_check] [-policy_print] [-purpose purpose] [-suiteB_128] [-suiteB_128_only] [-suiteB_192] [-trusted_first] [-no_alt_chains] [-use_deltas] [-auth_level num] [-verify_depth num] [-verify_email email] [-verify_hostname hostname] [-verify_ip ip] [-verify_name name] [-x509_strict] [-certfile file] [-signer file] [-recip file] [-inform SMIME|PEM|DER] [-passin arg] [-inkey file_or_id] [-out file] [-outform SMIME|PEM|DER] [-content file] [-to addr] [-from ad] [-subject s] [-text] [-indef] [-noindef] [-stream] [-rand file...] [-writerand file] [-md digest] [cert.pem]...

+ +

DESCRIPTION

+ +

The smime command handles S/MIME mail. It can encrypt, decrypt, sign and verify S/MIME messages.

+ +

OPTIONS

+ +

There are six operation options that set the type of operation to be performed. The meaning of the other options varies according to the operation type.

+ +
+ +
-help
+
+ +

Print out a usage message.

+ +
+
-encrypt
+
+ +

Encrypt mail for the given recipient certificates. Input file is the message to be encrypted. The output file is the encrypted mail in MIME format.

+ +

Note that no revocation check is done for the recipient cert, so if that key has been compromised, others may be able to decrypt the text.

+ +
+
-decrypt
+
+ +

Decrypt mail using the supplied certificate and private key. Expects an encrypted mail message in MIME format for the input file. The decrypted mail is written to the output file.

+ +
+
-sign
+
+ +

Sign mail using the supplied certificate and private key. Input file is the message to be signed. The signed message in MIME format is written to the output file.

+ +
+
-verify
+
+ +

Verify signed mail. Expects a signed mail message on input and outputs the signed data. Both clear text and opaque signing is supported.

+ +
+
-pk7out
+
+ +

Takes an input message and writes out a PEM encoded PKCS#7 structure.

+ +
+
-resign
+
+ +

Resign a message: take an existing message and one or more new signers.

+ +
+
-in filename
+
+ +

The input message to be encrypted or signed or the MIME message to be decrypted or verified.

+ +
+
-inform SMIME|PEM|DER
+
+ +

This specifies the input format for the PKCS#7 structure. The default is SMIME which reads an S/MIME format message. PEM and DER format change this to expect PEM and DER format PKCS#7 structures instead. This currently only affects the input format of the PKCS#7 structure, if no PKCS#7 structure is being input (for example with -encrypt or -sign) this option has no effect.

+ +
+
-out filename
+
+ +

The message text that has been decrypted or verified or the output MIME format message that has been signed or verified.

+ +
+
-outform SMIME|PEM|DER
+
+ +

This specifies the output format for the PKCS#7 structure. The default is SMIME which write an S/MIME format message. PEM and DER format change this to write PEM and DER format PKCS#7 structures instead. This currently only affects the output format of the PKCS#7 structure, if no PKCS#7 structure is being output (for example with -verify or -decrypt) this option has no effect.

+ +
+
-stream -indef -noindef
+
+ +

The -stream and -indef options are equivalent and enable streaming I/O for encoding operations. This permits single pass processing of data without the need to hold the entire contents in memory, potentially supporting very large files. Streaming is automatically set for S/MIME signing with detached data if the output format is SMIME it is currently off by default for all other operations.

+ +
+
-noindef
+
+ +

Disable streaming I/O where it would produce and indefinite length constructed encoding. This option currently has no effect. In future streaming will be enabled by default on all relevant operations and this option will disable it.

+ +
+
-content filename
+
+ +

This specifies a file containing the detached content, this is only useful with the -verify command. This is only usable if the PKCS#7 structure is using the detached signature form where the content is not included. This option will override any content if the input format is S/MIME and it uses the multipart/signed MIME content type.

+ +
+
-text
+
+ +

This option adds plain text (text/plain) MIME headers to the supplied message if encrypting or signing. If decrypting or verifying it strips off text headers: if the decrypted or verified message is not of MIME type text/plain then an error occurs.

+ +
+
-CAfile file
+
+ +

A file containing trusted CA certificates, only used with -verify.

+ +
+
-CApath dir
+
+ +

A directory containing trusted CA certificates, only used with -verify. This directory must be a standard certificate directory: that is a hash of each subject name (using x509 -hash) should be linked to each certificate.

+ +
+
-no-CAfile
+
+ +

Do not load the trusted CA certificates from the default file location.

+ +
+
-no-CApath
+
+ +

Do not load the trusted CA certificates from the default directory location.

+ +
+
-md digest
+
+ +

Digest algorithm to use when signing or resigning. If not present then the default digest algorithm for the signing key will be used (usually SHA1).

+ +
+
-cipher
+
+ +

The encryption algorithm to use. For example DES (56 bits) - -des, triple DES (168 bits) - -des3, EVP_get_cipherbyname() function) can also be used preceded by a dash, for example -aes-128-cbc. See enc for list of ciphers supported by your version of OpenSSL.

+ +

If not specified triple DES is used. Only used with -encrypt.

+ +
+
-nointern
+
+ +

When verifying a message normally certificates (if any) included in the message are searched for the signing certificate. With this option only the certificates specified in the -certfile option are used. The supplied certificates can still be used as untrusted CAs however.

+ +
+
-noverify
+
+ +

Do not verify the signers certificate of a signed message.

+ +
+
-nochain
+
+ +

Do not do chain verification of signers certificates: that is don't use the certificates in the signed message as untrusted CAs.

+ +
+
-nosigs
+
+ +

Don't try to verify the signatures on the message.

+ +
+
-nocerts
+
+ +

When signing a message the signer's certificate is normally included with this option it is excluded. This will reduce the size of the signed message but the verifier must have a copy of the signers certificate available locally (passed using the -certfile option for example).

+ +
+
-noattr
+
+ +

Normally when a message is signed a set of attributes are included which include the signing time and supported symmetric algorithms. With this option they are not included.

+ +
+
-binary
+
+ +

Normally the input message is converted to "canonical" format which is effectively using CR and LF as end of line: as required by the S/MIME specification. When this option is present no translation occurs. This is useful when handling binary data which may not be in MIME format.

+ +
+
-crlfeol
+
+ +

Normally the output file uses a single LF as end of line. When this option is present CRLF is used instead.

+ +
+
-nodetach
+
+ +

When signing a message use opaque signing: this form is more resistant to translation by mail relays but it cannot be read by mail agents that do not support S/MIME. Without this option cleartext signing with the MIME type multipart/signed is used.

+ +
+
-certfile file
+
+ +

Allows additional certificates to be specified. When signing these will be included with the message. When verifying these will be searched for the signers certificates. The certificates should be in PEM format.

+ +
+
-signer file
+
+ +

A signing certificate when signing or resigning a message, this option can be used multiple times if more than one signer is required. If a message is being verified then the signers certificates will be written to this file if the verification was successful.

+ +
+
-recip file
+
+ +

The recipients certificate when decrypting a message. This certificate must match one of the recipients of the message or an error occurs.

+ +
+
-inkey file_or_id
+
+ +

The private key to use when signing or decrypting. This must match the corresponding certificate. If this option is not specified then the private key must be included in the certificate file specified with the -recip or -signer file. When signing this option can be used multiple times to specify successive keys. If no engine is used, the argument is taken as a file; if an engine is specified, the argument is given to the engine as a key identifier.

+ +
+
-passin arg
+
+ +

The private key password source. For more information about the format of arg see the PASS PHRASE ARGUMENTS section in openssl(1).

+ +
+
-rand file...
+
+ +

A file or files containing random data used to seed the random number generator. Multiple files can be specified separated by an OS-dependent character. The separator is ; for MS-Windows, , for OpenVMS, and : for all others.

+ +
+
[-writerand file]
+
+ +

Writes random data to the specified file upon exit. This can be used with a subsequent -rand flag.

+ +
+
cert.pem...
+
+ +

One or more certificates of message recipients: used when encrypting a message.

+ +
+
-to, -from, -subject
+
+ +

The relevant mail headers. These are included outside the signed portion of a message so they may be included manually. If signing then many S/MIME mail clients check the signers certificate's email address matches that specified in the From: address.

+ +
+
-attime, -check_ss_sig, -crl_check, -crl_check_all, -explicit_policy, -extended_crl, -ignore_critical, -inhibit_any, -inhibit_map, -no_alt_chains, -partial_chain, -policy, -policy_check, -policy_print, -purpose, -suiteB_128, -suiteB_128_only, -suiteB_192, -trusted_first, -use_deltas, -auth_level, -verify_depth, -verify_email, -verify_hostname, -verify_ip, -verify_name, -x509_strict
+
+ +

Set various options of certificate chain verification. See verify(1) manual page for details.

+ +
+
+ +

NOTES

+ +

The MIME message must be sent without any blank lines between the headers and the output. Some mail programs will automatically add a blank line. Piping the mail directly to sendmail is one way to achieve the correct format.

+ +

The supplied message to be signed or encrypted must include the necessary MIME headers or many S/MIME clients won't display it properly (if at all). You can use the -text option to automatically add plain text headers.

+ +

A "signed and encrypted" message is one where a signed message is then encrypted. This can be produced by encrypting an already signed message: see the examples section.

+ +

This version of the program only allows one signer per message but it will verify multiple signers on received messages. Some S/MIME clients choke if a message contains multiple signers. It is possible to sign messages "in parallel" by signing an already signed message.

+ +

The options -encrypt and -decrypt reflect common usage in S/MIME clients. Strictly speaking these process PKCS#7 enveloped data: PKCS#7 encrypted data is used for other purposes.

+ +

The -resign option uses an existing message digest when adding a new signer. This means that attributes must be present in at least one existing signer using the same message digest or this operation will fail.

+ +

The -stream and -indef options enable streaming I/O support. As a result the encoding is BER using indefinite length constructed encoding and no longer DER. Streaming is supported for the -encrypt operation and the -sign operation if the content is not detached.

+ +

Streaming is always used for the -sign operation with detached data but since the content is no longer part of the PKCS#7 structure the encoding remains DER.

+ +

EXIT CODES

+ +
+ +
0
+
+ +

The operation was completely successfully.

+ +
+
1
+
+ +

An error occurred parsing the command options.

+ +
+
2
+
+ +

One of the input files could not be read.

+ +
+
3
+
+ +

An error occurred creating the PKCS#7 file or when reading the MIME message.

+ +
+
4
+
+ +

An error occurred decrypting or verifying the message.

+ +
+
5
+
+ +

The message was verified correctly but an error occurred writing out the signers certificates.

+ +
+
+ +

EXAMPLES

+ +

Create a cleartext signed message:

+ +
openssl smime -sign -in message.txt -text -out mail.msg \
+       -signer mycert.pem
+ +

Create an opaque signed message:

+ +
openssl smime -sign -in message.txt -text -out mail.msg -nodetach \
+       -signer mycert.pem
+ +

Create a signed message, include some additional certificates and read the private key from another file:

+ +
openssl smime -sign -in in.txt -text -out mail.msg \
+       -signer mycert.pem -inkey mykey.pem -certfile mycerts.pem
+ +

Create a signed message with two signers:

+ +
openssl smime -sign -in message.txt -text -out mail.msg \
+       -signer mycert.pem -signer othercert.pem
+ +

Send a signed message under Unix directly to sendmail, including headers:

+ +
openssl smime -sign -in in.txt -text -signer mycert.pem \
+       -from steve@openssl.org -to someone@somewhere \
+       -subject "Signed message" | sendmail someone@somewhere
+ +

Verify a message and extract the signer's certificate if successful:

+ +
openssl smime -verify -in mail.msg -signer user.pem -out signedtext.txt
+ +

Send encrypted mail using triple DES:

+ +
openssl smime -encrypt -in in.txt -from steve@openssl.org \
+       -to someone@somewhere -subject "Encrypted message" \
+       -des3 user.pem -out mail.msg
+ +

Sign and encrypt mail:

+ +
openssl smime -sign -in ml.txt -signer my.pem -text \
+       | openssl smime -encrypt -out mail.msg \
+       -from steve@openssl.org -to someone@somewhere \
+       -subject "Signed and Encrypted message" -des3 user.pem
+ +

Note: the encryption command does not include the -text option because the message being encrypted already has MIME headers.

+ +

Decrypt mail:

+ +
openssl smime -decrypt -in mail.msg -recip mycert.pem -inkey key.pem
+ +

The output from Netscape form signing is a PKCS#7 structure with the detached signature format. You can use this program to verify the signature by line wrapping the base64 encoded structure and surrounding it with:

+ +
-----BEGIN PKCS7-----
+-----END PKCS7-----
+ +

and using the command:

+ +
openssl smime -verify -inform PEM -in signature.pem -content content.txt
+ +

Alternatively you can base64 decode the signature and use:

+ +
openssl smime -verify -inform DER -in signature.der -content content.txt
+ +

Create an encrypted message using 128 bit Camellia:

+ +
openssl smime -encrypt -in plain.txt -camellia128 -out mail.msg cert.pem
+ +

Add a signer to an existing message:

+ +
openssl smime -resign -in mail.msg -signer newsign.pem -out mail2.msg
+ +

BUGS

+ +

The MIME parser isn't very clever: it seems to handle most messages that I've thrown at it but it may choke on others.

+ +

The code currently will only write out the signer's certificate to a file: if the signer has a separate encryption certificate this must be manually extracted. There should be some heuristic that determines the correct encryption certificate.

+ +

Ideally a database should be maintained of a certificates for each email address.

+ +

The code doesn't currently take note of the permitted symmetric encryption algorithms as supplied in the SMIMECapabilities signed attribute. This means the user has to manually include the correct encryption algorithm. It should store the list of permitted ciphers in a database and only use those.

+ +

No revocation checking is done on the signer's certificate.

+ +

The current code can only handle S/MIME v2 messages, the more complex S/MIME v3 structures may cause parsing errors.

+ +

HISTORY

+ +

The use of multiple -signer options and the -resign command were first added in OpenSSL 1.0.0

+ +

The -no_alt_chains option was added in OpenSSL 1.1.0.

+ +

COPYRIGHT

+ +

Copyright 2000-2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/speed.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/speed.html new file mode 100644 index 00000000..c1c2d44d --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/speed.html @@ -0,0 +1,117 @@ + + + + +speed + + + + + + + + + + +

NAME

+ +

openssl-speed, speed - test library performance

+ +

SYNOPSIS

+ +

openssl speed [-help] [-engine id] [-elapsed] [-evp algo] [-decrypt] [-rand file...] [-writerand file] [-primes num] [-seconds num] [-bytes num] [algorithm...]

+ +

DESCRIPTION

+ +

This command is used to test the performance of cryptographic algorithms. To see the list of supported algorithms, use the list --digest-commands or list --cipher-commands command. The global CSPRNG is denoted by the rand algorithm name.

+ +

OPTIONS

+ +
+ +
-help
+
+ +

Print out a usage message.

+ +
+
-engine id
+
+ +

Specifying an engine (by its unique id string) will cause speed to attempt to obtain a functional reference to the specified engine, thus initialising it if needed. The engine will then be set as the default for all available algorithms.

+ +
+
-elapsed
+
+ +

When calculating operations- or bytes-per-second, use wall-clock time instead of CPU user time as divisor. It can be useful when testing speed of hardware engines.

+ +
+
-evp algo
+
+ +

Use the specified cipher or message digest algorithm via the EVP interface. If algo is an AEAD cipher, then you can pass <-aead> to benchmark a TLS-like sequence. And if algo is a multi-buffer capable cipher, e.g. aes-128-cbc-hmac-sha1, then -mb will time multi-buffer operation.

+ +
+
-decrypt
+
+ +

Time the decryption instead of encryption. Affects only the EVP testing.

+ +
+
-rand file...
+
+ +

A file or files containing random data used to seed the random number generator. Multiple files can be specified separated by an OS-dependent character. The separator is ; for MS-Windows, , for OpenVMS, and : for all others.

+ +
+
[-writerand file]
+
+ +

Writes random data to the specified file upon exit. This can be used with a subsequent -rand flag.

+ +
+
-primes num
+
+ +

Generate a num-prime RSA key and use it to run the benchmarks. This option is only effective if RSA algorithm is specified to test.

+ +
+
-seconds num
+
+ +

Run benchmarks for num seconds.

+ +
+
-bytes num
+
+ +

Run benchmarks on num-byte buffers. Affects ciphers, digests and the CSPRNG.

+ +
+
[zero or more test algorithms]
+
+ +

If any options are given, speed tests those algorithms, otherwise a pre-compiled grand selection is tested.

+ +
+
+ +

COPYRIGHT

+ +

Copyright 2000-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/spkac.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/spkac.html new file mode 100644 index 00000000..40fbd64a --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/spkac.html @@ -0,0 +1,167 @@ + + + + +spkac + + + + + + + + + + +

NAME

+ +

openssl-spkac, spkac - SPKAC printing and generating utility

+ +

SYNOPSIS

+ +

openssl spkac [-help] [-in filename] [-out filename] [-key keyfile] [-keyform PEM|DER|ENGINE] [-passin arg] [-challenge string] [-pubkey] [-spkac spkacname] [-spksect section] [-noout] [-verify] [-engine id]

+ +

DESCRIPTION

+ +

The spkac command processes Netscape signed public key and challenge (SPKAC) files. It can print out their contents, verify the signature and produce its own SPKACs from a supplied private key.

+ +

OPTIONS

+ +
+ +
-help
+
+ +

Print out a usage message.

+ +
+
-in filename
+
+ +

This specifies the input filename to read from or standard input if this option is not specified. Ignored if the -key option is used.

+ +
+
-out filename
+
+ +

Specifies the output filename to write to or standard output by default.

+ +
+
-key keyfile
+
+ +

Create an SPKAC file using the private key in keyfile. The -in, -noout, -spksect and -verify options are ignored if present.

+ +
+
-keyform PEM|DER|ENGINE
+
+ +

Whether the key format is PEM, DER, or an engine-backed key. The default is PEM.

+ +
+
-passin password
+
+ +

The input file password source. For more information about the format of arg see the PASS PHRASE ARGUMENTS section in openssl(1).

+ +
+
-challenge string
+
+ +

Specifies the challenge string if an SPKAC is being created.

+ +
+
-spkac spkacname
+
+ +

Allows an alternative name form the variable containing the SPKAC. The default is "SPKAC". This option affects both generated and input SPKAC files.

+ +
+
-spksect section
+
+ +

Allows an alternative name form the section containing the SPKAC. The default is the default section.

+ +
+
-noout
+
+ +

Don't output the text version of the SPKAC (not used if an SPKAC is being created).

+ +
+
-pubkey
+
+ +

Output the public key of an SPKAC (not used if an SPKAC is being created).

+ +
+
-verify
+
+ +

Verifies the digital signature on the supplied SPKAC.

+ +
+
-engine id
+
+ +

Specifying an engine (by its unique id string) will cause spkac to attempt to obtain a functional reference to the specified engine, thus initialising it if needed. The engine will then be set as the default for all available algorithms.

+ +
+
+ +

EXAMPLES

+ +

Print out the contents of an SPKAC:

+ +
openssl spkac -in spkac.cnf
+ +

Verify the signature of an SPKAC:

+ +
openssl spkac -in spkac.cnf -noout -verify
+ +

Create an SPKAC using the challenge string "hello":

+ +
openssl spkac -key key.pem -challenge hello -out spkac.cnf
+ +

Example of an SPKAC, (long lines split up for clarity):

+ +
SPKAC=MIG5MGUwXDANBgkqhkiG9w0BAQEFAANLADBIAkEA\
+1cCoq2Wa3Ixs47uI7FPVwHVIPDx5yso105Y6zpozam135a\
+8R0CpoRvkkigIyXfcCjiVi5oWk+6FfPaD03uPFoQIDAQAB\
+FgVoZWxsbzANBgkqhkiG9w0BAQQFAANBAFpQtY/FojdwkJ\
+h1bEIYuc2EeM2KHTWPEepWYeawvHD0gQ3DngSC75YCWnnD\
+dq+NQ3F+X4deMx9AaEglZtULwV4=
+ +

NOTES

+ +

A created SPKAC with suitable DN components appended can be fed into the ca utility.

+ +

SPKACs are typically generated by Netscape when a form is submitted containing the KEYGEN tag as part of the certificate enrollment process.

+ +

The challenge string permits a primitive form of proof of possession of private key. By checking the SPKAC signature and a random challenge string some guarantee is given that the user knows the private key corresponding to the public key being certified. This is important in some applications. Without this it is possible for a previous SPKAC to be used in a "replay attack".

+ +

SEE ALSO

+ +

ca(1)

+ +

COPYRIGHT

+ +

Copyright 2000-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/srp.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/srp.html new file mode 100644 index 00000000..4fb653c9 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/srp.html @@ -0,0 +1,71 @@ + + + + +srp + + + + + + + + + + +

NAME

+ +

openssl-srp, srp - maintain SRP password file

+ +

SYNOPSIS

+ +

openssl srp [-help] [-verbose] [-add] [-modify] [-delete] [-list] [-name section] [-config file] [-srpvfile file] [-gn identifier] [-userinfo text...] [-passin arg] [-passout arg] [user...]

+ +

DESCRIPTION

+ +

The srp command is user to maintain an SRP (secure remote password) file. At most one of the -add, -modify, -delete, and -list options can be specified. These options take zero or more usernames as parameters and perform the appropriate operation on the SRP file. For -list, if no user is given then all users are displayed.

+ +

The configuration file to use, and the section within the file, can be specified with the -config and -name flags, respectively. If the config file is not specified, the -srpvfile can be used to just specify the file to operate on.

+ +

The -userinfo option specifies additional information to add when adding or modifying a user.

+ +

The -gn flag specifies the g and N values, using one of the strengths defined in IETF RFC 5054.

+ +

The -passin and -passout arguments are parsed as described in the openssl(1) command.

+ +

OPTIONS

+ +
+ +
[-help]
+
+ +

Display an option summary.

+ +
+
[-verbose]
+
+ +

Generate verbose output while processing.

+ +
+
+ +

COPYRIGHT

+ +

Copyright 2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/storeutl.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/storeutl.html new file mode 100644 index 00000000..27ed22e6 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/storeutl.html @@ -0,0 +1,151 @@ + + + + +storeutl + + + + + + + + + + +

NAME

+ +

openssl-storeutl, storeutl - STORE utility

+ +

SYNOPSIS

+ +

openssl storeutl [-help] [-out file] [-noout] [-passin arg] [-text arg] [-engine id] [-r] [-certs] [-keys] [-crls] [-subject arg] [-issuer arg] [-serial arg] [-alias arg] [-fingerprint arg] [-digest] uri ...

+ +

DESCRIPTION

+ +

The storeutl command can be used to display the contents (after decryption as the case may be) fetched from the given URIs.

+ +

OPTIONS

+ +
+ +
-help
+
+ +

Print out a usage message.

+ +
+
-out filename
+
+ +

specifies the output filename to write to or standard output by default.

+ +
+
-noout
+
+ +

this option prevents output of the PEM data.

+ +
+
-passin arg
+
+ +

the key password source. For more information about the format of arg see the PASS PHRASE ARGUMENTS section in openssl(1).

+ +
+
-text
+
+ +

Prints out the objects in text form, similarly to the -text output from openssl x509, openssl pkey, etc.

+ +
+
-engine id
+
+ +

specifying an engine (by its unique id string) will cause storeutl to attempt to obtain a functional reference to the specified engine, thus initialising it if needed. The engine will then be set as the default for all available algorithms.

+ +
+
-r
+
+ +

Fetch objects recursively when possible.

+ +
+
-certs
+
+ +
+
-keys
+
+ +
+
-crls
+
+ +

Only select the certificates, keys or CRLs from the given URI. However, if this URI would return a set of names (URIs), those are always returned.

+ +
+
-subject arg
+
+ +

Search for an object having the subject name arg. The arg must be formatted as /type0=value0/type1=value1/type2=.... Keyword characters may be escaped by \ (backslash), and whitespace is retained. Empty values are permitted but are ignored for the search. That is, a search with an empty value will have the same effect as not specifying the type at all.

+ +
+
-issuer arg
+
+ +
+
-serial arg
+
+ +

Search for an object having the given issuer name and serial number. These two options must be used together. The issuer arg must be formatted as /type0=value0/type1=value1/type2=..., characters may be escaped by \ (backslash), no spaces are skipped. The serial arg may be specified as a decimal value or a hex value if preceded by 0x.

+ +
+
-alias arg
+
+ +

Search for an object having the given alias.

+ +
+
-fingerprint arg
+
+ +

Search for an object having the given fingerprint.

+ +
+
-digest
+
+ +

The digest that was used to compute the fingerprint given with -fingerprint.

+ +
+
+ +

SEE ALSO

+ +

openssl(1)

+ +

HISTORY

+ +

The openssl storeutl app was added in OpenSSL 1.1.1.

+ +

COPYRIGHT

+ +

Copyright 2016-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/ts.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/ts.html new file mode 100644 index 00000000..b8d5a619 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/ts.html @@ -0,0 +1,555 @@ + + + + +ts + + + + + + + + + + +

NAME

+ +

openssl-ts, ts - Time Stamping Authority tool (client/server)

+ +

SYNOPSIS

+ +

openssl ts -query [-rand file...] [-writerand file] [-config configfile] [-data file_to_hash] [-digest digest_bytes] [-digest] [-tspolicy object_id] [-no_nonce] [-cert] [-in request.tsq] [-out request.tsq] [-text]

+ +

openssl ts -reply [-config configfile] [-section tsa_section] [-queryfile request.tsq] [-passin password_src] [-signer tsa_cert.pem] [-inkey file_or_id] [-digest] [-chain certs_file.pem] [-tspolicy object_id] [-in response.tsr] [-token_in] [-out response.tsr] [-token_out] [-text] [-engine id]

+ +

openssl ts -verify [-data file_to_hash] [-digest digest_bytes] [-queryfile request.tsq] [-in response.tsr] [-token_in] [-CApath trusted_cert_path] [-CAfile trusted_certs.pem] [-untrusted cert_file.pem] [verify options]

+ +

verify options: [-attime timestamp] [-check_ss_sig] [-crl_check] [-crl_check_all] [-explicit_policy] [-extended_crl] [-ignore_critical] [-inhibit_any] [-inhibit_map] [-issuer_checks] [-no_alt_chains] [-no_check_time] [-partial_chain] [-policy arg] [-policy_check] [-policy_print] [-purpose purpose] [-suiteB_128] [-suiteB_128_only] [-suiteB_192] [-trusted_first] [-use_deltas] [-auth_level num] [-verify_depth num] [-verify_email email] [-verify_hostname hostname] [-verify_ip ip] [-verify_name name] [-x509_strict]

+ +

DESCRIPTION

+ +

The ts command is a basic Time Stamping Authority (TSA) client and server application as specified in RFC 3161 (Time-Stamp Protocol, TSP). A TSA can be part of a PKI deployment and its role is to provide long term proof of the existence of a certain datum before a particular time. Here is a brief description of the protocol:

+ +
    + +
  1. The TSA client computes a one-way hash value for a data file and sends the hash to the TSA.

    + +
  2. +
  3. 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 creating this token the TSA certifies the existence of the original data file at the time of response generation.

    + +
  4. +
  5. The TSA client receives the time stamp 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.

    + +
  6. +
+ +

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 back to the client. The 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 response corresponds to a particular request or a data file.

+ +

There is no support for sending the requests/responses automatically over HTTP or TCP yet as suggested in RFC 3161. The users must send the requests either by ftp or e-mail.

+ +

OPTIONS

+ +

Time Stamp Request generation

+ +

The -query switch can be used for creating and printing a time stamp request with the following options:

+ +
+ +
-rand file...
+
+ +

A file or files containing random data used to seed the random number generator. Multiple files can be specified separated by an OS-dependent character. The separator is ; for MS-Windows, , for OpenVMS, and : for all others.

+ +
+
[-writerand file]
+
+ +

Writes random data to the specified file upon exit. This can be used with a subsequent -rand flag.

+ +
+
-config configfile
+
+ +

The configuration file to use. Optional; for a description of the default value, see "COMMAND SUMMARY" in openssl(1).

+ +
+
-data file_to_hash
+
+ +

The data file for which the time stamp request needs to be created. stdin is the default if neither the -data nor the -digest parameter is specified. (Optional)

+ +
+
-digest digest_bytes
+
+ +

It is possible to specify the message imprint explicitly without the data file. The imprint must be specified in a hexadecimal format, two characters per byte, the bytes optionally separated by colons (e.g. 1A:F6:01:... or 1AF601...). The number of bytes must match the message digest algorithm in use. (Optional)

+ +
+
-digest
+
+ +

The message digest to apply to the data file. Any digest supported by the OpenSSL dgst command can be used. The default is SHA-1. (Optional)

+ +
+
-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 in the config file can be used. If no policy is requested the TSA will use its own default policy. (Optional)

+ +
+
-no_nonce
+
+ +

No nonce is specified in the request if this option is given. Otherwise a 64 bit long pseudo-random none is included in the request. It is recommended to use nonce to protect against replay-attacks. (Optional)

+ +
+
-cert
+
+ +

The TSA is expected to include its signing certificate in the response. (Optional)

+ +
+
-in request.tsq
+
+ +

This option specifies a previously created time stamp 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)

+ +
+
-out request.tsq
+
+ +

Name of the output file to which the request will be written. Default is stdout. (Optional)

+ +
+
-text
+
+ +

If this option is specified the output is human-readable text format instead of DER. (Optional)

+ +
+
+ +

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 -reply command is for creating a time stamp response or time stamp token based on a request and printing the response/token in human-readable format. If -token_out is not specified the output is always a time stamp response (TimeStampResp), otherwise it is a time stamp token (ContentInfo).

+ +
+ +
-config configfile
+
+ +

The configuration file to use. Optional; for a description of the default value, see "COMMAND SUMMARY" in openssl(1). See CONFIGURATION FILE OPTIONS for configurable variables.

+ +
+
-section tsa_section
+
+ +

The name of the config file section containing the settings for the response generation. If not specified the default TSA section is used, see CONFIGURATION FILE OPTIONS for details. (Optional)

+ +
+
-queryfile request.tsq
+
+ +

The name of the file containing a DER encoded time stamp request. (Optional)

+ +
+
-passin password_src
+
+ +

Specifies the password source for the private key of the TSA. See PASS PHRASE ARGUMENTS in openssl(1). (Optional)

+ +
+
-signer tsa_cert.pem
+
+ +

The signer certificate of the TSA in PEM format. The TSA signing certificate must have exactly one extended key usage assigned to it: timeStamping. The extended key usage must also be critical, otherwise the certificate is going to be refused. Overrides the signer_cert variable of the config file. (Optional)

+ +
+
-inkey file_or_id
+
+ +

The signer private key of the TSA in PEM format. Overrides the signer_key config file option. (Optional) If no engine is used, the argument is taken as a file; if an engine is specified, the argument is given to the engine as a key identifier.

+ +
+
-digest
+
+ +

Signing digest to use. Overrides the signer_digest config file option. (Mandatory unless specified in the config file)

+ +
+
-chain certs_file.pem
+
+ +

The collection of certificates in PEM format that will all be included in the response in addition to the signer certificate if the -cert option was used for the request. This file is supposed to contain the certificate chain for the signer certificate from its issuer upwards. The -reply command does not build a certificate chain automatically. (Optional)

+ +
+
-tspolicy object_id
+
+ +

The default policy to use for the response unless the client explicitly requires a particular TSA policy. The OID can be specified either in dotted notation or with its name. Overrides the default_policy config file option. (Optional)

+ +
+
-in response.tsr
+
+ +

Specifies a previously created time stamp response or time stamp token (if -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 'granted' status info is added to the token. (Optional)

+ +
+
-token_in
+
+ +

This flag can be used together with the -in option and indicates that the input is a DER encoded time stamp token (ContentInfo) instead of a time stamp response (TimeStampResp). (Optional)

+ +
+
-out response.tsr
+
+ +

The response is written to this file. The format and content of the file depends on other options (see -text, -token_out). The default is stdout. (Optional)

+ +
+
-token_out
+
+ +

The output is a time stamp token (ContentInfo) instead of time stamp response (TimeStampResp). (Optional)

+ +
+
-text
+
+ +

If this option is specified the output is human-readable text format instead of DER. (Optional)

+ +
+
-engine id
+
+ +

Specifying an engine (by its unique id string) will cause ts to attempt to obtain a functional reference to the specified engine, thus initialising it if needed. The engine will then be set as the default for all available algorithms. Default is builtin. (Optional)

+ +
+
+ +

Time Stamp Response verification

+ +

The -verify command is for verifying if a time stamp response or time stamp token is valid and matches a particular time stamp request or data file. The -verify command does not use the configuration file.

+ +
+ +
-data file_to_hash
+
+ +

The response or token must be verified against file_to_hash. The file is hashed with the message digest algorithm specified in the token. The -digest and -queryfile options must not be specified with this one. (Optional)

+ +
+
-digest digest_bytes
+
+ +

The response or token must be verified against the message digest specified with this option. The number of bytes must match the message digest algorithm specified in the token. The -data and -queryfile options must not be specified with this one. (Optional)

+ +
+
-queryfile request.tsq
+
+ +

The original time stamp request in DER format. The -data and -digest options must not be specified with this one. (Optional)

+ +
+
-in response.tsr
+
+ +

The time stamp response that needs to be verified in DER format. (Mandatory)

+ +
+
-token_in
+
+ +

This flag can be used together with the -in option and indicates that the input is a DER encoded time stamp token (ContentInfo) instead of a time stamp response (TimeStampResp). (Optional)

+ +
+
-CApath trusted_cert_path
+
+ +

The name of the directory containing the trusted CA certificates of the client. See the similar option of verify(1) for additional details. Either this option or -CAfile must be specified. (Optional)

+ +
+
-CAfile trusted_certs.pem
+
+ +

The name of the file containing a set of trusted self-signed CA certificates in PEM format. See the similar option of verify(1) for additional details. Either this option or -CApath must be specified. (Optional)

+ +
+
-untrusted cert_file.pem
+
+ +

Set of additional untrusted certificates in PEM format which may be needed when building the certificate chain for the TSA's signing certificate. This file must contain the TSA signing certificate and all intermediate CA certificates unless the response includes them. (Optional)

+ +
+
verify options
+
+ +

The options -attime timestamp, -check_ss_sig, -crl_check, -crl_check_all, -explicit_policy, -extended_crl, -ignore_critical, -inhibit_any, -inhibit_map, -issuer_checks, -no_alt_chains, -no_check_time, -partial_chain, -policy, -policy_check, -policy_print, -purpose, -suiteB_128, -suiteB_128_only, -suiteB_192, -trusted_first, -use_deltas, -auth_level, -verify_depth, -verify_email, -verify_hostname, -verify_ip, -verify_name, and -x509_strict can be used to control timestamp verification. See verify(1).

+ +
+
+ +

CONFIGURATION FILE OPTIONS

+ +

The -query and -reply commands make use of a configuration file. See config(5) for a general description of the syntax of the config file. The -query command uses only the symbolic OID names section and it can work without it. However, the -reply command needs the config file for its operation.

+ +

When there is a command line switch equivalent of a variable the switch always overrides the settings in the config file.

+ +
+ +
tsa section, default_tsa
+
+ +

This is the main section and it specifies the name of another section that contains all the options for the -reply command. This default section can be overridden with the -section command line switch. (Optional)

+ +
+
oid_file
+
+ +

See ca(1) for description. (Optional)

+ +
+
oid_section
+
+ +

See ca(1) for description. (Optional)

+ +
+
RANDFILE
+
+ +

See ca(1) for description. (Optional)

+ +
+
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 each response. If the file does not exist at the time of response generation a new file is created with serial number 1. (Mandatory)

+ +
+
crypto_device
+
+ +

Specifies the OpenSSL engine that will be set as the default for all available algorithms. The default value is builtin, you can specify any other engines supported by OpenSSL (e.g. use chil for the NCipher HSM). (Optional)

+ +
+
signer_cert
+
+ +

TSA signing certificate in PEM format. The same as the -signer command line option. (Optional)

+ +
+
certs
+
+ +

A file containing a set of PEM encoded certificates that need to be included in the response. The same as the -chain command line option. (Optional)

+ +
+
signer_key
+
+ +

The private key of the TSA in PEM format. The same as the -inkey command line option. (Optional)

+ +
+
signer_digest
+
+ +

Signing digest to use. The same as the -digest command line option. (Mandatory unless specified on the command line)

+ +
+
default_policy
+
+ +

The default policy to use when the request does not mandate any policy. The same as the -tspolicy command line option. (Optional)

+ +
+
other_policies
+
+ +

Comma separated list of policies that are also acceptable by the TSA and used only if the request explicitly specifies one of them. (Optional)

+ +
+
digests
+
+ +

The list of message digest algorithms that the TSA accepts. At least one algorithm must be specified. (Mandatory)

+ +
+
accuracy
+
+ +

The accuracy of the time source of the TSA in seconds, milliseconds and microseconds. E.g. secs:1, millisecs:500, microsecs:100. If any of the components is missing zero is assumed for that field. (Optional)

+ +
+
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 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. (Optional)

+ +
+
ordering
+
+ +

If this option is yes the responses generated by this TSA can always be ordered, even if the time difference between two responses is less than the sum of their accuracies. Default is no. (Optional)

+ +
+
tsa_name
+
+ +

Set this option to yes if the subject name of the TSA must be included in the TSA name field of the response. Default is no. (Optional)

+ +
+
ess_cert_id_chain
+
+ +

The SignedData objects created by the TSA always contain the certificate identifier of the signing certificate in a signed attribute (see RFC 2634, Enhanced Security Services). If this option is set to yes and either the certs variable or the -chain option is specified then the certificate identifiers of the chain will also be included in the SigningCertificate signed attribute. If this variable is set to no, only the signing certificate identifier is included. Default is no. (Optional)

+ +
+
ess_cert_id_alg
+
+ +

This option specifies the hash function to be used to calculate the TSA's public key certificate identifier. Default is sha1. (Optional)

+ +
+
+ +

EXAMPLES

+ +

All the examples below presume that OPENSSL_CONF is set to a proper configuration file, e.g. the example configuration file openssl/apps/openssl.cnf will do.

+ +

Time Stamp Request

+ +

To create a time stamp 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 explicitly:

+ +
openssl ts -query -digest b7e5d3f93198b38379852f2c04e78d73abdd0f4b \
+       -no_nonce -out design1.tsq
+ +

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 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):

+ +
openssl ts -query -data design2.txt -md5 \
+      -tspolicy tsa_policy1 -cert -out design2.tsq
+ +

Time Stamp Response

+ +

Before generating a response a signing certificate must be created for the TSA that contains the timeStamping critical extended key usage extension without any other key usage extensions. You can add this line to the user certificate section of the config file to generate a proper certificate;

+ +
extendedKeyUsage = critical,timeStamping
+ +

See req(1), ca(1), and x509(1) for instructions. The examples 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:

+ +
openssl ts -reply -queryfile design1.tsq -inkey tsakey.pem \
+      -signer tsacert.pem -out design1.tsr
+ +

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:

+ +
openssl ts -reply -in design1.tsr -text
+ +

To create a time stamp token instead of time stamp 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:

+ +
openssl ts -reply -in design1_token.der -token_in -text -token_out
+ +

To extract the time stamp 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 valid response:

+ +
openssl ts -reply -in design1_token.der -token_in -out design1.tsr
+ +

Time Stamp Verification

+ +

To verify a time stamp 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:

+ +
openssl ts -verify -queryfile design2.tsq -in design2.tsr \
+      -CAfile cacert.pem
+ +

To verify a time stamp 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: openssl ts -verify -digest b7e5d3f93198b38379852f2c04e78d73abdd0f4b \ -in design2.tsr -CAfile cacert.pem

+ +

You could also look at the 'test' directory for more examples.

+ +

BUGS

+ +
    + +
  • No support for time stamps over SMTP, though it is quite easy to implement an automatic e-mail based TSA with procmail(1) and perl(1). HTTP server support is provided in the form of a separate apache module. HTTP client support is provided by 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 openssl(1) is trying to create a time stamp response at the same time. This is not an issue when using the apache server module, it does proper locking.

    + +
  • +
  • Look for the FIXME word in the source files.

    + +
  • +
  • The source code should really be reviewed by somebody else, too.

    + +
  • +
  • More testing is needed, I have done only some basic tests (see test/testtsa).

    + +
  • +
+ +

SEE ALSO

+ +

tsget(1), openssl(1), req(1), x509(1), ca(1), genrsa(1), config(5)

+ +

COPYRIGHT

+ +

Copyright 2006-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/tsget.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/tsget.html new file mode 100644 index 00000000..ed6c7bdc --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/tsget.html @@ -0,0 +1,190 @@ + + + + +tsget + + + + + + + + + + +

NAME

+ +

openssl-tsget, tsget - Time Stamping HTTP/HTTPS client

+ +

SYNOPSIS

+ +

tsget -h server_url [-e extension] [-o output] [-v] [-d] [-k private_key.pem] [-p key_password] [-c client_cert.pem] [-C CA_certs.pem] [-P CA_path] [-r file:file...] [-g EGD_socket] [request]...

+ +

DESCRIPTION

+ +

The tsget command can be used for sending a time stamp request, as specified in 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 requests and verifying responses, you can use the OpenSSL ts(1) command to do that. 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:

+ +
POST url HTTP/1.1
+User-Agent: OpenTSA tsget.pl/<version>
+Host: <host>:<port>
+Pragma: no-cache
+Content-Type: application/timestamp-query
+Accept: application/timestamp-reply
+Content-Length: length of body
+
+...binary request specified by the user...
+ +

tsget expects a response of type application/timestamp-reply, which is written to a file without any interpretation.

+ +

OPTIONS

+ +
+ +
-h server_url
+
+ +

The URL of the HTTP/HTTPS server listening for time stamp requests.

+ +
+
-e extension
+
+ +

If the -o option is not given this argument specifies the extension of the output files. The base name of the output file will be the same as those of the input files. Default extension is '.tsr'. (Optional)

+ +
+
-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 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)

+ +
+
-v
+
+ +

The name of the currently processed request is printed on standard error. (Optional)

+ +
+
-d
+
+ +

Switches on verbose mode for the underlying curl library. You can see detailed debug messages for the connection. (Optional)

+ +
+
-k private_key.pem
+
+ +

(HTTPS) In case of certificate-based client authentication over HTTPS <private_key.pem> must contain the private key of the user. The private key file can optionally be protected by a passphrase. The -c option must also be specified. (Optional)

+ +
+
-p key_password
+
+ +

(HTTPS) Specifies the passphrase for the private key specified by the -k argument. If this option is omitted and the key is passphrase protected tsget will ask for it. (Optional)

+ +
+
-c client_cert.pem
+
+ +

(HTTPS) In case of certificate-based client authentication over HTTPS <client_cert.pem> must contain the X.509 certificate of the user. The -k option must also be specified. If this option is not specified no certificate-based client authentication will take place. (Optional)

+ +
+
-C CA_certs.pem
+
+ +

(HTTPS) The trusted CA certificate store. The certificate chain of the peer's certificate must include one of the CA certificates specified in this file. Either option -C or option -P must be given in case of HTTPS. (Optional)

+ +
+
-P CA_path
+
+ +

(HTTPS) The path containing the trusted CA certificates to verify the peer's certificate. The directory must be prepared with the c_rehash OpenSSL utility. Either option -C or option -P must be given in case of HTTPS. (Optional)

+ +
+
-rand file:file...
+
+ +

The files containing random data for seeding the random number generator. Multiple files can be specified, the separator is ; for MS-Windows, , for VMS and : for all other platforms. (Optional)

+ +
+
-g EGD_socket
+
+ +

The name of an EGD socket to get random data from. (Optional)

+ +
+
[request]...
+
+ +

List of files containing RFC 3161 DER-encoded time stamp 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)

+ +
+
+ +

ENVIRONMENT VARIABLES

+ +

The TSGET environment variable can optionally contain default arguments. The content of this variable is added to the list of command line arguments.

+ +

EXAMPLES

+ +

The examples below presume that file1.tsq and file2.tsq contain valid time stamp 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 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 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 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 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 client authentication (it will ask for the passphrase if client_key.pem is protected):

+ +
tsget -h https://tsa.opentsa.org:8443/tsa -C cacerts.pem \
+      -k client_key.pem -c client_cert.pem file1.tsq
+ +

You can shorten the previous command line if you make use of the TSGET environment variable. The following commands do the same as the previous example:

+ +
TSGET='-h https://tsa.opentsa.org:8443/tsa -C cacerts.pem \
+      -k client_key.pem -c client_cert.pem'
+export TSGET
+tsget file1.tsq
+ +

SEE ALSO

+ +

openssl(1), ts(1), curl(1), RFC 3161

+ +

COPYRIGHT

+ +

Copyright 2006-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/verify.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/verify.html new file mode 100644 index 00000000..da3e6252 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/verify.html @@ -0,0 +1,825 @@ + + + + +verify + + + + + + + + + + +

NAME

+ +

openssl-verify, verify - Utility to verify certificates

+ +

SYNOPSIS

+ +

openssl verify [-help] [-CAfile file] [-CApath directory] [-no-CAfile] [-no-CApath] [-allow_proxy_certs] [-attime timestamp] [-check_ss_sig] [-CRLfile file] [-crl_download] [-crl_check] [-crl_check_all] [-engine id] [-explicit_policy] [-extended_crl] [-ignore_critical] [-inhibit_any] [-inhibit_map] [-nameopt option] [-no_check_time] [-partial_chain] [-policy arg] [-policy_check] [-policy_print] [-purpose purpose] [-suiteB_128] [-suiteB_128_only] [-suiteB_192] [-trusted_first] [-no_alt_chains] [-untrusted file] [-trusted file] [-use_deltas] [-verbose] [-auth_level level] [-verify_depth num] [-verify_email email] [-verify_hostname hostname] [-verify_ip ip] [-verify_name name] [-x509_strict] [-show_chain] [-] [certificates]

+ +

DESCRIPTION

+ +

The verify command verifies certificate chains.

+ +

OPTIONS

+ +
+ +
-help
+
+ +

Print out a usage message.

+ +
+
-CAfile file
+
+ +

A file of trusted certificates. The file should contain one or more certificates in PEM format.

+ +
+
-CApath directory
+
+ +

A directory of trusted certificates. The certificates should have names of the form: hash.0 or have symbolic links to them of this form ("hash" is the hashed certificate subject name: see the -hash option of the x509 utility). Under Unix the c_rehash script will automatically create symbolic links to a directory of certificates.

+ +
+
-no-CAfile
+
+ +

Do not load the trusted CA certificates from the default file location.

+ +
+
-no-CApath
+
+ +

Do not load the trusted CA certificates from the default directory location.

+ +
+
-allow_proxy_certs
+
+ +

Allow the verification of proxy certificates.

+ +
+
-attime timestamp
+
+ +

Perform validation checks using time specified by timestamp and not current system time. timestamp is the number of seconds since 01.01.1970 (UNIX time).

+ +
+
-check_ss_sig
+
+ +

Verify the signature on the self-signed root CA. This is disabled by default because it doesn't add any security.

+ +
+
-CRLfile file
+
+ +

The file should contain one or more CRLs in PEM format. This option can be specified more than once to include CRLs from multiple files.

+ +
+
-crl_download
+
+ +

Attempt to download CRL information for this certificate.

+ +
+
-crl_check
+
+ +

Checks end entity certificate validity by attempting to look up a valid CRL. If a valid CRL cannot be found an error occurs.

+ +
+
-crl_check_all
+
+ +

Checks the validity of all certificates in the chain by attempting to look up valid CRLs.

+ +
+
-engine id
+
+ +

Specifying an engine id will cause verify(1) to attempt to load the specified engine. The engine will then be set as the default for all its supported algorithms. If you want to load certificates or CRLs that require engine support via any of the -trusted, -untrusted or -CRLfile options, the -engine option must be specified before those options.

+ +
+
-explicit_policy
+
+ +

Set policy variable require-explicit-policy (see RFC5280).

+ +
+
-extended_crl
+
+ +

Enable extended CRL features such as indirect CRLs and alternate CRL signing keys.

+ +
+
-ignore_critical
+
+ +

Normally if an unhandled critical extension is present which is not supported by OpenSSL the certificate is rejected (as required by RFC5280). If this option is set critical extensions are ignored.

+ +
+
-inhibit_any
+
+ +

Set policy variable inhibit-any-policy (see RFC5280).

+ +
+
-inhibit_map
+
+ +

Set policy variable inhibit-policy-mapping (see RFC5280).

+ +
+
-nameopt option
+
+ +

Option which determines how the subject or issuer names are displayed. The option argument can be a single option or multiple options separated by commas. Alternatively the -nameopt switch may be used more than once to set multiple options. See the x509(1) manual page for details.

+ +
+
-no_check_time
+
+ +

This option suppresses checking the validity period of certificates and CRLs against the current time. If option -attime timestamp is used to specify a verification time, the check is not suppressed.

+ +
+
-partial_chain
+
+ +

Allow verification to succeed even if a complete chain cannot be built to a self-signed trust-anchor, provided it is possible to construct a chain to a trusted certificate that might not be self-signed.

+ +
+
-policy arg
+
+ +

Enable policy processing and add arg to the user-initial-policy-set (see RFC5280). The policy arg can be an object name an OID in numeric form. This argument can appear more than once.

+ +
+
-policy_check
+
+ +

Enables certificate policy processing.

+ +
+
-policy_print
+
+ +

Print out diagnostics related to policy processing.

+ +
+
-purpose purpose
+
+ +

The intended use for the certificate. If this option is not specified, verify will not consider certificate purpose during chain verification. Currently accepted uses are sslclient, sslserver, nssslserver, smimesign, smimeencrypt. See the VERIFY OPERATION section for more information.

+ +
+
-suiteB_128_only, -suiteB_128, -suiteB_192
+
+ +

Enable the Suite B mode operation at 128 bit Level of Security, 128 bit or 192 bit, or only 192 bit Level of Security respectively. See RFC6460 for details. In particular the supported signature algorithms are reduced to support only ECDSA and SHA256 or SHA384 and only the elliptic curves P-256 and P-384.

+ +
+
-trusted_first
+
+ +

When constructing the certificate chain, use the trusted certificates specified via -CAfile, -CApath or -trusted before any certificates specified via -untrusted. This can be useful in environments with Bridge or Cross-Certified CAs. As of OpenSSL 1.1.0 this option is on by default and cannot be disabled.

+ +
+
-no_alt_chains
+
+ +

By default, unless -trusted_first is specified, when building a certificate chain, if the first certificate chain found is not trusted, then OpenSSL will attempt to replace untrusted issuer certificates with certificates from the trust store to see if an alternative chain can be found that is trusted. As of OpenSSL 1.1.0, with -trusted_first always on, this option has no effect.

+ +
+
-untrusted file
+
+ +

A file of additional untrusted certificates (intermediate issuer CAs) used to construct a certificate chain from the subject certificate to a trust-anchor. The file should contain one or more certificates in PEM format. This option can be specified more than once to include untrusted certificates from multiple files.

+ +
+
-trusted file
+
+ +

A file of trusted certificates, which must be self-signed, unless the -partial_chain option is specified. The file contains one or more certificates in PEM format. With this option, no additional (e.g., default) certificate lists are consulted. That is, the only trust-anchors are those listed in file. This option can be specified more than once to include trusted certificates from multiple files. This option implies the -no-CAfile and -no-CApath options. This option cannot be used in combination with either of the -CAfile or -CApath options.

+ +
+
-use_deltas
+
+ +

Enable support for delta CRLs.

+ +
+
-verbose
+
+ +

Print extra information about the operations being performed.

+ +
+
-auth_level level
+
+ +

Set the certificate chain authentication security level to level. The authentication security level determines the acceptable signature and public key strength when verifying certificate chains. For a certificate chain to validate, the public keys of all the certificates must meet the specified security level. The signature algorithm security level is enforced for all the certificates in the chain except for the chain's trust anchor, which is either directly trusted or validated by means other than its signature. See SSL_CTX_set_security_level(3) for the definitions of the available levels. The default security level is -1, or "not set". At security level 0 or lower all algorithms are acceptable. Security level 1 requires at least 80-bit-equivalent security and is broadly interoperable, though it will, for example, reject MD5 signatures or RSA keys shorter than 1024 bits.

+ +
+
-verify_depth num
+
+ +

Limit the certificate chain to num intermediate CA certificates. A maximal depth chain can have up to num+2 certificates, since neither the end-entity certificate nor the trust-anchor certificate count against the -verify_depth limit.

+ +
+
-verify_email email
+
+ +

Verify if the email matches the email address in Subject Alternative Name or the email in the subject Distinguished Name.

+ +
+
-verify_hostname hostname
+
+ +

Verify if the hostname matches DNS name in Subject Alternative Name or Common Name in the subject certificate.

+ +
+
-verify_ip ip
+
+ +

Verify if the ip matches the IP address in Subject Alternative Name of the subject certificate.

+ +
+
-verify_name name
+
+ +

Use default verification policies like trust model and required certificate policies identified by name. The trust model determines which auxiliary trust or reject OIDs are applicable to verifying the given certificate chain. See the -addtrust and -addreject options of the x509(1) command-line utility. Supported policy names include: default, pkcs7, smime_sign, ssl_client, ssl_server. These mimics the combinations of purpose and trust settings used in SSL, CMS and S/MIME. As of OpenSSL 1.1.0, the trust model is inferred from the purpose when not specified, so the -verify_name options are functionally equivalent to the corresponding -purpose settings.

+ +
+
-x509_strict
+
+ +

For strict X.509 compliance, disable non-compliant workarounds for broken certificates.

+ +
+
-show_chain
+
+ +

Display information about the certificate chain that has been built (if successful). Certificates in the chain that came from the untrusted list will be flagged as "untrusted".

+ +
+
-
+
+ +

Indicates the last option. All arguments following this are assumed to be certificate files. This is useful if the first certificate filename begins with a -.

+ +
+
certificates
+
+ +

One or more certificates to verify. If no certificates are given, verify will attempt to read a certificate from standard input. Certificates must be in PEM format.

+ +
+
+ +

VERIFY OPERATION

+ +

The verify program uses the same functions as the internal SSL and S/MIME verification, therefore this description applies to these verify operations too.

+ +

There is one crucial difference between the verify operations performed by the verify program: wherever possible an attempt is made to continue after an error whereas normally the verify operation would halt on the first error. This allows all the problems with a certificate chain to be determined.

+ +

The verify operation consists of a number of separate steps.

+ +

Firstly a certificate chain is built up starting from the supplied certificate and ending in the root CA. It is an error if the whole chain cannot be built up. The chain is built up by looking up the issuers certificate of the current certificate. If a certificate is found which is its own issuer it is assumed to be the root CA.

+ +

The process of 'looking up the issuers certificate' itself involves a number of steps. After all certificates whose subject name matches the issuer name of the current certificate are subject to further tests. The relevant authority key identifier components of the current certificate (if present) must match the subject key identifier (if present) and issuer and serial number of the candidate issuer, in addition the keyUsage extension of the candidate issuer (if present) must permit certificate signing.

+ +

The lookup first looks in the list of untrusted certificates and if no match is found the remaining lookups are from the trusted certificates. The root CA is always looked up in the trusted certificate list: if the certificate to verify is a root certificate then an exact match must be found in the trusted list.

+ +

The second operation is to check every untrusted certificate's extensions for consistency with the supplied purpose. If the -purpose option is not included then no checks are done. The supplied or "leaf" certificate must have extensions compatible with the supplied purpose and all other certificates must also be valid CA certificates. The precise extensions required are described in more detail in the CERTIFICATE EXTENSIONS section of the x509 utility.

+ +

The third operation is to check the trust settings on the root CA. The root CA should be trusted for the supplied purpose. For compatibility with previous versions of OpenSSL, a certificate with no trust settings is considered to be valid for all purposes.

+ +

The final operation is to check the validity of the certificate chain. The validity period is checked against the current system time and the notBefore and notAfter dates in the certificate. The certificate signatures are also checked at this point.

+ +

If all operations complete successfully then certificate is considered valid. If any operation fails then the certificate is not valid.

+ +

DIAGNOSTICS

+ +

When a verify operation fails the output messages can be somewhat cryptic. The general form of the error message is:

+ +
server.pem: /C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test CA (1024 bit)
+error 24 at 1 depth lookup:invalid CA certificate
+ +

The first line contains the name of the certificate being verified followed by the subject name of the certificate. The second line contains the error number and the depth. The depth is number of the certificate being verified when a problem was detected starting with zero for the certificate being verified itself then 1 for the CA that signed the certificate and so on. Finally a text version of the error number is presented.

+ +

A partial list of the error codes and messages is shown below, this also includes the name of the error code as defined in the header file x509_vfy.h Some of the error codes are defined but never returned: these are described as "unused".

+ +
+ +
X509_V_OK
+
+ +

The operation was successful.

+ +
+
X509_V_ERR_UNSPECIFIED
+
+ +

Unspecified error; should not happen.

+ +
+
X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT
+
+ +

The issuer certificate of a looked up certificate could not be found. This normally means the list of trusted certificates is not complete.

+ +
+
X509_V_ERR_UNABLE_TO_GET_CRL
+
+ +

The CRL of a certificate could not be found.

+ +
+
X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE
+
+ +

The certificate signature could not be decrypted. This means that the actual signature value could not be determined rather than it not matching the expected value, this is only meaningful for RSA keys.

+ +
+
X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE
+
+ +

The CRL signature could not be decrypted: this means that the actual signature value could not be determined rather than it not matching the expected value. Unused.

+ +
+
X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY
+
+ +

The public key in the certificate SubjectPublicKeyInfo could not be read.

+ +
+
X509_V_ERR_CERT_SIGNATURE_FAILURE
+
+ +

The signature of the certificate is invalid.

+ +
+
X509_V_ERR_CRL_SIGNATURE_FAILURE
+
+ +

The signature of the certificate is invalid.

+ +
+
X509_V_ERR_CERT_NOT_YET_VALID
+
+ +

The certificate is not yet valid: the notBefore date is after the current time.

+ +
+
X509_V_ERR_CERT_HAS_EXPIRED
+
+ +

The certificate has expired: that is the notAfter date is before the current time.

+ +
+
X509_V_ERR_CRL_NOT_YET_VALID
+
+ +

The CRL is not yet valid.

+ +
+
X509_V_ERR_CRL_HAS_EXPIRED
+
+ +

The CRL has expired.

+ +
+
X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD
+
+ +

The certificate notBefore field contains an invalid time.

+ +
+
X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD
+
+ +

The certificate notAfter field contains an invalid time.

+ +
+
X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD
+
+ +

The CRL lastUpdate field contains an invalid time.

+ +
+
X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD
+
+ +

The CRL nextUpdate field contains an invalid time.

+ +
+
X509_V_ERR_OUT_OF_MEM
+
+ +

An error occurred trying to allocate memory. This should never happen.

+ +
+
X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT
+
+ +

The passed certificate is self-signed and the same certificate cannot be found in the list of trusted certificates.

+ +
+
X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN
+
+ +

The certificate chain could be built up using the untrusted certificates but the root could not be found locally.

+ +
+
X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY
+
+ +

The issuer certificate could not be found: this occurs if the issuer certificate of an untrusted certificate cannot be found.

+ +
+
X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE
+
+ +

No signatures could be verified because the chain contains only one certificate and it is not self signed.

+ +
+
X509_V_ERR_CERT_CHAIN_TOO_LONG
+
+ +

The certificate chain length is greater than the supplied maximum depth. Unused.

+ +
+
X509_V_ERR_CERT_REVOKED
+
+ +

The certificate has been revoked.

+ +
+
X509_V_ERR_INVALID_CA
+
+ +

A CA certificate is invalid. Either it is not a CA or its extensions are not consistent with the supplied purpose.

+ +
+
X509_V_ERR_PATH_LENGTH_EXCEEDED
+
+ +

The basicConstraints pathlength parameter has been exceeded.

+ +
+
X509_V_ERR_INVALID_PURPOSE
+
+ +

The supplied certificate cannot be used for the specified purpose.

+ +
+
X509_V_ERR_CERT_UNTRUSTED
+
+ +

The root CA is not marked as trusted for the specified purpose.

+ +
+
X509_V_ERR_CERT_REJECTED
+
+ +

The root CA is marked to reject the specified purpose.

+ +
+
X509_V_ERR_SUBJECT_ISSUER_MISMATCH
+
+ +

Not used as of OpenSSL 1.1.0 as a result of the deprecation of the -issuer_checks option.

+ +
+
X509_V_ERR_AKID_SKID_MISMATCH
+
+ +

Not used as of OpenSSL 1.1.0 as a result of the deprecation of the -issuer_checks option.

+ +
+
X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH
+
+ +

Not used as of OpenSSL 1.1.0 as a result of the deprecation of the -issuer_checks option.

+ +
+
X509_V_ERR_KEYUSAGE_NO_CERTSIGN
+
+ +

Not used as of OpenSSL 1.1.0 as a result of the deprecation of the -issuer_checks option.

+ +
+
X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER
+
+ +

Unable to get CRL issuer certificate.

+ +
+
X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION
+
+ +

Unhandled critical extension.

+ +
+
X509_V_ERR_KEYUSAGE_NO_CRL_SIGN
+
+ +

Key usage does not include CRL signing.

+ +
+
X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION
+
+ +

Unhandled critical CRL extension.

+ +
+
X509_V_ERR_INVALID_NON_CA
+
+ +

Invalid non-CA certificate has CA markings.

+ +
+
X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED
+
+ +

Proxy path length constraint exceeded.

+ +
+
X509_V_ERR_PROXY_SUBJECT_INVALID
+
+ +

Proxy certificate subject is invalid. It MUST be the same as the issuer with a single CN component added.

+ +
+
X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE
+
+ +

Key usage does not include digital signature.

+ +
+
X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED
+
+ +

Proxy certificates not allowed, please use -allow_proxy_certs.

+ +
+
X509_V_ERR_INVALID_EXTENSION
+
+ +

Invalid or inconsistent certificate extension.

+ +
+
X509_V_ERR_INVALID_POLICY_EXTENSION
+
+ +

Invalid or inconsistent certificate policy extension.

+ +
+
X509_V_ERR_NO_EXPLICIT_POLICY
+
+ +

No explicit policy.

+ +
+
X509_V_ERR_DIFFERENT_CRL_SCOPE
+
+ +

Different CRL scope.

+ +
+
X509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE
+
+ +

Unsupported extension feature.

+ +
+
X509_V_ERR_UNNESTED_RESOURCE
+
+ +

RFC 3779 resource not subset of parent's resources.

+ +
+
X509_V_ERR_PERMITTED_VIOLATION
+
+ +

Permitted subtree violation.

+ +
+
X509_V_ERR_EXCLUDED_VIOLATION
+
+ +

Excluded subtree violation.

+ +
+
X509_V_ERR_SUBTREE_MINMAX
+
+ +

Name constraints minimum and maximum not supported.

+ +
+
X509_V_ERR_APPLICATION_VERIFICATION
+
+ +

Application verification failure. Unused.

+ +
+
X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE
+
+ +

Unsupported name constraint type.

+ +
+
X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX
+
+ +

Unsupported or invalid name constraint syntax.

+ +
+
X509_V_ERR_UNSUPPORTED_NAME_SYNTAX
+
+ +

Unsupported or invalid name syntax.

+ +
+
X509_V_ERR_CRL_PATH_VALIDATION_ERROR
+
+ +

CRL path validation error.

+ +
+
X509_V_ERR_PATH_LOOP
+
+ +

Path loop.

+ +
+
X509_V_ERR_SUITE_B_INVALID_VERSION
+
+ +

Suite B: certificate version invalid.

+ +
+
X509_V_ERR_SUITE_B_INVALID_ALGORITHM
+
+ +

Suite B: invalid public key algorithm.

+ +
+
X509_V_ERR_SUITE_B_INVALID_CURVE
+
+ +

Suite B: invalid ECC curve.

+ +
+
X509_V_ERR_SUITE_B_INVALID_SIGNATURE_ALGORITHM
+
+ +

Suite B: invalid signature algorithm.

+ +
+
X509_V_ERR_SUITE_B_LOS_NOT_ALLOWED
+
+ +

Suite B: curve not allowed for this LOS.

+ +
+
X509_V_ERR_SUITE_B_CANNOT_SIGN_P_384_WITH_P_256
+
+ +

Suite B: cannot sign P-384 with P-256.

+ +
+
X509_V_ERR_HOSTNAME_MISMATCH
+
+ +

Hostname mismatch.

+ +
+
X509_V_ERR_EMAIL_MISMATCH
+
+ +

Email address mismatch.

+ +
+
X509_V_ERR_IP_ADDRESS_MISMATCH
+
+ +

IP address mismatch.

+ +
+
X509_V_ERR_DANE_NO_MATCH
+
+ +

DANE TLSA authentication is enabled, but no TLSA records matched the certificate chain. This error is only possible in s_client(1).

+ +
+
X509_V_ERR_EE_KEY_TOO_SMALL
+
+ +

EE certificate key too weak.

+ +
+
X509_ERR_CA_KEY_TOO_SMALL
+
+ +

CA certificate key too weak.

+ +
+
X509_ERR_CA_MD_TOO_WEAK
+
+ +

CA signature digest algorithm too weak.

+ +
+
X509_V_ERR_INVALID_CALL
+
+ +

nvalid certificate verification context.

+ +
+
X509_V_ERR_STORE_LOOKUP
+
+ +

Issuer certificate lookup error.

+ +
+
X509_V_ERR_NO_VALID_SCTS
+
+ +

Certificate Transparency required, but no valid SCTs found.

+ +
+
X509_V_ERR_PROXY_SUBJECT_NAME_VIOLATION
+
+ +

Proxy subject name violation.

+ +
+
X509_V_ERR_OCSP_VERIFY_NEEDED
+
+ +

Returned by the verify callback to indicate an OCSP verification is needed.

+ +
+
X509_V_ERR_OCSP_VERIFY_FAILED
+
+ +

Returned by the verify callback to indicate OCSP verification failed.

+ +
+
X509_V_ERR_OCSP_CERT_UNKNOWN
+
+ +

Returned by the verify callback to indicate that the certificate is not recognized by the OCSP responder.

+ +
+
+ +

BUGS

+ +

Although the issuer checks are a considerable improvement over the old technique they still suffer from limitations in the underlying X509_LOOKUP API. One consequence of this is that trusted certificates with matching subject name must either appear in a file (as specified by the -CAfile option) or a directory (as specified by -CApath). If they occur in both then only the certificates in the file will be recognised.

+ +

Previous versions of OpenSSL assume certificates with matching subject name are identical and mishandled them.

+ +

Previous versions of this documentation swapped the meaning of the X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT and X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY error codes.

+ +

SEE ALSO

+ +

x509(1)

+ +

HISTORY

+ +

The -show_chain option was added in OpenSSL 1.1.0.

+ +

The -issuer_checks option is deprecated as of OpenSSL 1.1.0 and is silently ignored.

+ +

COPYRIGHT

+ +

Copyright 2000-2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/version.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/version.html new file mode 100644 index 00000000..0d36c192 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/version.html @@ -0,0 +1,110 @@ + + + + +version + + + + + + + + + + +

NAME

+ +

openssl-version, version - print OpenSSL version information

+ +

SYNOPSIS

+ +

openssl version [-help] [-a] [-v] [-b] [-o] [-f] [-p] [-d] [-e]

+ +

DESCRIPTION

+ +

This command is used to print out version information about OpenSSL.

+ +

OPTIONS

+ +
+ +
-help
+
+ +

Print out a usage message.

+ +
+
-a
+
+ +

All information, this is the same as setting all the other flags.

+ +
+
-v
+
+ +

The current OpenSSL version.

+ +
+
-b
+
+ +

The date the current version of OpenSSL was built.

+ +
+
-o
+
+ +

Option information: various options set when the library was built.

+ +
+
-f
+
+ +

Compilation flags.

+ +
+
-p
+
+ +

Platform setting.

+ +
+
-d
+
+ +

OPENSSLDIR setting.

+ +
+
-e
+
+ +

ENGINESDIR setting.

+ +
+
+ +

NOTES

+ +

The output of openssl version -a would typically be used when sending in a bug report.

+ +

COPYRIGHT

+ +

Copyright 2000-2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/x509.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/x509.html new file mode 100644 index 00000000..a1482747 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man1/x509.html @@ -0,0 +1,892 @@ + + + + +x509 + + + + + + + + + + +

NAME

+ +

openssl-x509, x509 - Certificate display and signing utility

+ +

SYNOPSIS

+ +

openssl x509 [-help] [-inform DER|PEM] [-outform DER|PEM] [-keyform DER|PEM|ENGINE] [-CAform DER|PEM] [-CAkeyform DER|PEM] [-in filename] [-out filename] [-serial] [-hash] [-subject_hash] [-issuer_hash] [-ocspid] [-subject] [-issuer] [-nameopt option] [-email] [-ocsp_uri] [-startdate] [-enddate] [-purpose] [-dates] [-checkend num] [-modulus] [-pubkey] [-fingerprint] [-alias] [-noout] [-trustout] [-clrtrust] [-clrreject] [-addtrust arg] [-addreject arg] [-setalias arg] [-days arg] [-set_serial n] [-signkey arg] [-passin arg] [-x509toreq] [-req] [-CA filename] [-CAkey filename] [-CAcreateserial] [-CAserial filename] [-force_pubkey key] [-text] [-ext extensions] [-certopt option] [-C] [-digest] [-clrext] [-extfile filename] [-extensions section] [-sigopt nm:v] [-rand file...] [-writerand file] [-engine id] [-preserve_dates]

+ +

DESCRIPTION

+ +

The x509 command is a multi purpose certificate utility. It can be used to display certificate information, convert certificates to various forms, sign certificate requests like a "mini CA" or edit certificate trust settings.

+ +

Since there are a large number of options they will split up into various sections.

+ +

OPTIONS

+ +

Input, Output, and General Purpose Options

+ +
+ +
-help
+
+ +

Print out a usage message.

+ +
+
-inform DER|PEM
+
+ +

This specifies the input format normally the command will expect an X509 certificate but this can change if other options such as -req are present. The DER format is the DER encoding of the certificate and PEM is the base64 encoding of the DER encoding with header and footer lines added. The default format is PEM.

+ +
+
-outform DER|PEM
+
+ +

This specifies the output format, the options have the same meaning and default as the -inform option.

+ +
+
-in filename
+
+ +

This specifies the input filename to read a certificate from or standard input if this option is not specified.

+ +
+
-out filename
+
+ +

This specifies the output filename to write to or standard output by default.

+ +
+
-digest
+
+ +

The digest to use. This affects any signing or display option that uses a message digest, such as the -fingerprint, -signkey and -CA options. Any digest supported by the OpenSSL dgst command can be used. If not specified then SHA1 is used with -fingerprint or the default digest for the signing algorithm is used, typically SHA256.

+ +
+
-rand file...
+
+ +

A file or files containing random data used to seed the random number generator. Multiple files can be specified separated by an OS-dependent character. The separator is ; for MS-Windows, , for OpenVMS, and : for all others.

+ +
+
[-writerand file]
+
+ +

Writes random data to the specified file upon exit. This can be used with a subsequent -rand flag.

+ +
+
-engine id
+
+ +

Specifying an engine (by its unique id string) will cause x509 to attempt to obtain a functional reference to the specified engine, thus initialising it if needed. The engine will then be set as the default for all available algorithms.

+ +
+
-preserve_dates
+
+ +

When signing a certificate, preserve the "notBefore" and "notAfter" dates instead of adjusting them to current time and duration. Cannot be used with the -days option.

+ +
+
+ +

Display Options

+ +

Note: the -alias and -purpose options are also display options but are described in the TRUST SETTINGS section.

+ +
+ +
-text
+
+ +

Prints out the certificate in text form. Full details are output including the public key, signature algorithms, issuer and subject names, serial number any extensions present and any trust settings.

+ +
+
-ext extensions
+
+ +

Prints out the certificate extensions in text form. Extensions are specified with a comma separated string, e.g., "subjectAltName,subjectKeyIdentifier". See the x509v3_config(5) manual page for the extension names.

+ +
+
-certopt option
+
+ +

Customise the output format used with -text. The option argument can be a single option or multiple options separated by commas. The -certopt switch may be also be used more than once to set multiple options. See the TEXT OPTIONS section for more information.

+ +
+
-noout
+
+ +

This option prevents output of the encoded version of the certificate.

+ +
+
-pubkey
+
+ +

Outputs the certificate's SubjectPublicKeyInfo block in PEM format.

+ +
+
-modulus
+
+ +

This option prints out the value of the modulus of the public key contained in the certificate.

+ +
+
-serial
+
+ +

Outputs the certificate serial number.

+ +
+
-subject_hash
+
+ +

Outputs the "hash" of the certificate subject name. This is used in OpenSSL to form an index to allow certificates in a directory to be looked up by subject name.

+ +
+
-issuer_hash
+
+ +

Outputs the "hash" of the certificate issuer name.

+ +
+
-ocspid
+
+ +

Outputs the OCSP hash values for the subject name and public key.

+ +
+
-hash
+
+ +

Synonym for "-subject_hash" for backward compatibility reasons.

+ +
+
-subject_hash_old
+
+ +

Outputs the "hash" of the certificate subject name using the older algorithm as used by OpenSSL before version 1.0.0.

+ +
+
-issuer_hash_old
+
+ +

Outputs the "hash" of the certificate issuer name using the older algorithm as used by OpenSSL before version 1.0.0.

+ +
+
-subject
+
+ +

Outputs the subject name.

+ +
+
-issuer
+
+ +

Outputs the issuer name.

+ +
+
-nameopt option
+
+ +

Option which determines how the subject or issuer names are displayed. The option argument can be a single option or multiple options separated by commas. Alternatively the -nameopt switch may be used more than once to set multiple options. See the NAME OPTIONS section for more information.

+ +
+
-email
+
+ +

Outputs the email address(es) if any.

+ +
+
-ocsp_uri
+
+ +

Outputs the OCSP responder address(es) if any.

+ +
+
-startdate
+
+ +

Prints out the start date of the certificate, that is the notBefore date.

+ +
+
-enddate
+
+ +

Prints out the expiry date of the certificate, that is the notAfter date.

+ +
+
-dates
+
+ +

Prints out the start and expiry dates of a certificate.

+ +
+
-checkend arg
+
+ +

Checks if the certificate expires within the next arg seconds and exits non-zero if yes it will expire or zero if not.

+ +
+
-fingerprint
+
+ +

Calculates and outputs the digest of the DER encoded version of the entire certificate (see digest options). This is commonly called a "fingerprint". Because of the nature of message digests, the fingerprint of a certificate is unique to that certificate and two certificates with the same fingerprint can be considered to be the same.

+ +
+
-C
+
+ +

This outputs the certificate in the form of a C source file.

+ +
+
+ +

Trust Settings

+ +

A trusted certificate is an ordinary certificate which has several additional pieces of information attached to it such as the permitted and prohibited uses of the certificate and an "alias".

+ +

Normally when a certificate is being verified at least one certificate must be "trusted". By default a trusted certificate must be stored locally and must be a root CA: any certificate chain ending in this CA is then usable for any purpose.

+ +

Trust settings currently are only used with a root CA. They allow a finer control over the purposes the root CA can be used for. For example a CA may be trusted for SSL client but not SSL server use.

+ +

See the description of the verify utility for more information on the meaning of trust settings.

+ +

Future versions of OpenSSL will recognize trust settings on any certificate: not just root CAs.

+ +
+ +
-trustout
+
+ +

This causes x509 to output a trusted certificate. An ordinary or trusted certificate can be input but by default an ordinary certificate is output and any trust settings are discarded. With the -trustout option a trusted certificate is output. A trusted certificate is automatically output if any trust settings are modified.

+ +
+
-setalias arg
+
+ +

Sets the alias of the certificate. This will allow the certificate to be referred to using a nickname for example "Steve's Certificate".

+ +
+
-alias
+
+ +

Outputs the certificate alias, if any.

+ +
+
-clrtrust
+
+ +

Clears all the permitted or trusted uses of the certificate.

+ +
+
-clrreject
+
+ +

Clears all the prohibited or rejected uses of the certificate.

+ +
+
-addtrust arg
+
+ +

Adds a trusted certificate use. Any object name can be used here but currently only clientAuth (SSL client use), serverAuth (SSL server use), emailProtection (S/MIME email) and anyExtendedKeyUsage are used. As of OpenSSL 1.1.0, the last of these blocks all purposes when rejected or enables all purposes when trusted. Other OpenSSL applications may define additional uses.

+ +
+
-addreject arg
+
+ +

Adds a prohibited use. It accepts the same values as the -addtrust option.

+ +
+
-purpose
+
+ +

This option performs tests on the certificate extensions and outputs the results. For a more complete description see the CERTIFICATE EXTENSIONS section.

+ +
+
+ +

Signing Options

+ +

The x509 utility can be used to sign certificates and requests: it can thus behave like a "mini CA".

+ +
+ +
-signkey arg
+
+ +

This option causes the input file to be self signed using the supplied private key or engine. The private key's format is specified with the -keyform option.

+ +

If the input file is a certificate it sets the issuer name to the subject name (i.e. makes it self signed) changes the public key to the supplied value and changes the start and end dates. The start date is set to the current time and the end date is set to a value determined by the -days option. Any certificate extensions are retained unless the -clrext option is supplied; this includes, for example, any existing key identifier extensions.

+ +

If the input is a certificate request then a self signed certificate is created using the supplied private key using the subject name in the request.

+ +
+
-sigopt nm:v
+
+ +

Pass options to the signature algorithm during sign or verify operations. Names and values of these options are algorithm-specific.

+ +
+
-passin arg
+
+ +

The key password source. For more information about the format of arg see the PASS PHRASE ARGUMENTS section in openssl(1).

+ +
+
-clrext
+
+ +

Delete any extensions from a certificate. This option is used when a certificate is being created from another certificate (for example with the -signkey or the -CA options). Normally all extensions are retained.

+ +
+
-keyform PEM|DER|ENGINE
+
+ +

Specifies the format (DER or PEM) of the private key file used in the -signkey option.

+ +
+
-days arg
+
+ +

Specifies the number of days to make a certificate valid for. The default is 30 days. Cannot be used with the -preserve_dates option.

+ +
+
-x509toreq
+
+ +

Converts a certificate into a certificate request. The -signkey option is used to pass the required private key.

+ +
+
-req
+
+ +

By default a certificate is expected on input. With this option a certificate request is expected instead.

+ +
+
-set_serial n
+
+ +

Specifies the serial number to use. This option can be used with either the -signkey or -CA options. If used in conjunction with the -CA option the serial number file (as specified by the -CAserial or -CAcreateserial options) is not used.

+ +

The serial number can be decimal or hex (if preceded by 0x).

+ +
+
-CA filename
+
+ +

Specifies the CA certificate to be used for signing. When this option is present x509 behaves like a "mini CA". The input file is signed by this CA using this option: that is its issuer name is set to the subject name of the CA and it is digitally signed using the CAs private key.

+ +

This option is normally combined with the -req option. Without the -req option the input is a certificate which must be self signed.

+ +
+
-CAkey filename
+
+ +

Sets the CA private key to sign a certificate with. If this option is not specified then it is assumed that the CA private key is present in the CA certificate file.

+ +
+
-CAserial filename
+
+ +

Sets the CA serial number file to use.

+ +

When the -CA option is used to sign a certificate it uses a serial number specified in a file. This file consists of one line containing an even number of hex digits with the serial number to use. After each use the serial number is incremented and written out to the file again.

+ +

The default filename consists of the CA certificate file base name with ".srl" appended. For example if the CA certificate file is called "mycacert.pem" it expects to find a serial number file called "mycacert.srl".

+ +
+
-CAcreateserial
+
+ +

With this option the CA serial number file is created if it does not exist: it will contain the serial number "02" and the certificate being signed will have the 1 as its serial number. If the -CA option is specified and the serial number file does not exist a random number is generated; this is the recommended practice.

+ +
+
-extfile filename
+
+ +

File containing certificate extensions to use. If not specified then no extensions are added to the certificate.

+ +
+
-extensions section
+
+ +

The section to add certificate extensions from. If this option is not specified then the extensions should either be contained in the unnamed (default) section or the default section should contain a variable called "extensions" which contains the section to use. See the x509v3_config(5) manual page for details of the extension section format.

+ +
+
-force_pubkey key
+
+ +

When a certificate is created set its public key to key instead of the key in the certificate or certificate request. This option is useful for creating certificates where the algorithm can't normally sign requests, for example DH.

+ +

The format or key can be specified using the -keyform option.

+ +
+
+ +

Name Options

+ +

The nameopt command line switch determines how the subject and issuer names are displayed. If no nameopt switch is present the default "oneline" format is used which is compatible with previous versions of OpenSSL. Each option is described in detail below, all options can be preceded by a - to turn the option off. Only the first four will normally be used.

+ +
+ +
compat
+
+ +

Use the old format.

+ +
+
RFC2253
+
+ +

Displays names compatible with RFC2253 equivalent to esc_2253, esc_ctrl, esc_msb, utf8, dump_nostr, dump_unknown, dump_der, sep_comma_plus, dn_rev and sname.

+ +
+
oneline
+
+ +

A oneline format which is more readable than RFC2253. It is equivalent to specifying the esc_2253, esc_ctrl, esc_msb, utf8, dump_nostr, dump_der, use_quote, sep_comma_plus_space, space_eq and sname options. This is the default of no name options are given explicitly.

+ +
+
multiline
+
+ +

A multiline format. It is equivalent esc_ctrl, esc_msb, sep_multiline, space_eq, lname and align.

+ +
+
esc_2253
+
+ +

Escape the "special" characters required by RFC2253 in a field. That is ,+"<>;. Additionally # is escaped at the beginning of a string and a space character at the beginning or end of a string.

+ +
+
esc_2254
+
+ +

Escape the "special" characters required by RFC2254 in a field. That is the NUL character as well as and ()*.

+ +
+
esc_ctrl
+
+ +

Escape control characters. That is those with ASCII values less than 0x20 (space) and the delete (0x7f) character. They are escaped using the RFC2253 \XX notation (where XX are two hex digits representing the character value).

+ +
+
esc_msb
+
+ +

Escape characters with the MSB set, that is with ASCII values larger than 127.

+ +
+
use_quote
+
+ +

Escapes some characters by surrounding the whole string with " characters, without the option all escaping is done with the \ character.

+ +
+
utf8
+
+ +

Convert all strings to UTF8 format first. This is required by RFC2253. If you are lucky enough to have a UTF8 compatible terminal then the use of this option (and not setting esc_msb) may result in the correct display of multibyte (international) characters. Is this option is not present then multibyte characters larger than 0xff will be represented using the format \UXXXX for 16 bits and \WXXXXXXXX for 32 bits. Also if this option is off any UTF8Strings will be converted to their character form first.

+ +
+
ignore_type
+
+ +

This option does not attempt to interpret multibyte characters in any way. That is their content octets are merely dumped as though one octet represents each character. This is useful for diagnostic purposes but will result in rather odd looking output.

+ +
+
show_type
+
+ +

Show the type of the ASN1 character string. The type precedes the field contents. For example "BMPSTRING: Hello World".

+ +
+
dump_der
+
+ +

When this option is set any fields that need to be hexdumped will be dumped using the DER encoding of the field. Otherwise just the content octets will be displayed. Both options use the RFC2253 #XXXX... format.

+ +
+
dump_nostr
+
+ +

Dump non character string types (for example OCTET STRING) if this option is not set then non character string types will be displayed as though each content octet represents a single character.

+ +
+
dump_all
+
+ +

Dump all fields. This option when used with dump_der allows the DER encoding of the structure to be unambiguously determined.

+ +
+
dump_unknown
+
+ +

Dump any field whose OID is not recognised by OpenSSL.

+ +
+
sep_comma_plus, sep_comma_plus_space, sep_semi_plus_space, sep_multiline
+
+ +

These options determine the field separators. The first character is between RDNs and the second between multiple AVAs (multiple AVAs are very rare and their use is discouraged). The options ending in "space" additionally place a space after the separator to make it more readable. The sep_multiline uses a linefeed character for the RDN separator and a spaced + for the AVA separator. It also indents the fields by four characters. If no field separator is specified then sep_comma_plus_space is used by default.

+ +
+
dn_rev
+
+ +

Reverse the fields of the DN. This is required by RFC2253. As a side effect this also reverses the order of multiple AVAs but this is permissible.

+ +
+
nofname, sname, lname, oid
+
+ +

These options alter how the field name is displayed. nofname does not display the field at all. sname uses the "short name" form (CN for commonName for example). lname uses the long form. oid represents the OID in numerical form and is useful for diagnostic purpose.

+ +
+
align
+
+ +

Align field values for a more readable output. Only usable with sep_multiline.

+ +
+
space_eq
+
+ +

Places spaces round the = character which follows the field name.

+ +
+
+ +

Text Options

+ +

As well as customising the name output format, it is also possible to customise the actual fields printed using the certopt options when the text option is present. The default behaviour is to print all fields.

+ +
+ +
compatible
+
+ +

Use the old format. This is equivalent to specifying no output options at all.

+ +
+
no_header
+
+ +

Don't print header information: that is the lines saying "Certificate" and "Data".

+ +
+
no_version
+
+ +

Don't print out the version number.

+ +
+
no_serial
+
+ +

Don't print out the serial number.

+ +
+
no_signame
+
+ +

Don't print out the signature algorithm used.

+ +
+
no_validity
+
+ +

Don't print the validity, that is the notBefore and notAfter fields.

+ +
+
no_subject
+
+ +

Don't print out the subject name.

+ +
+
no_issuer
+
+ +

Don't print out the issuer name.

+ +
+
no_pubkey
+
+ +

Don't print out the public key.

+ +
+
no_sigdump
+
+ +

Don't give a hexadecimal dump of the certificate signature.

+ +
+
no_aux
+
+ +

Don't print out certificate trust information.

+ +
+
no_extensions
+
+ +

Don't print out any X509V3 extensions.

+ +
+
ext_default
+
+ +

Retain default extension behaviour: attempt to print out unsupported certificate extensions.

+ +
+
ext_error
+
+ +

Print an error message for unsupported certificate extensions.

+ +
+
ext_parse
+
+ +

ASN1 parse unsupported extensions.

+ +
+
ext_dump
+
+ +

Hex dump unsupported extensions.

+ +
+
ca_default
+
+ +

The value used by the ca utility, equivalent to no_issuer, no_pubkey, no_header, and no_version.

+ +
+
+ +

EXAMPLES

+ +

Note: in these examples the '\' means the example should be all on one line.

+ +

Display the contents of a certificate:

+ +
openssl x509 -in cert.pem -noout -text
+ +

Display the "Subject Alternative Name" extension of a certificate:

+ +
openssl x509 -in cert.pem -noout -ext subjectAltName
+ +

Display more extensions of a certificate:

+ +
openssl x509 -in cert.pem -noout -ext subjectAltName,nsCertType
+ +

Display the certificate serial number:

+ +
openssl x509 -in cert.pem -noout -serial
+ +

Display the certificate subject name:

+ +
openssl x509 -in cert.pem -noout -subject
+ +

Display the certificate subject name in RFC2253 form:

+ +
openssl x509 -in cert.pem -noout -subject -nameopt RFC2253
+ +

Display the certificate subject name in oneline form on a terminal supporting UTF8:

+ +
openssl x509 -in cert.pem -noout -subject -nameopt oneline,-esc_msb
+ +

Display the certificate SHA1 fingerprint:

+ +
openssl x509 -sha1 -in cert.pem -noout -fingerprint
+ +

Convert a certificate from PEM to DER format:

+ +
openssl x509 -in cert.pem -inform PEM -out cert.der -outform DER
+ +

Convert a certificate to a certificate request:

+ +
openssl x509 -x509toreq -in cert.pem -out req.pem -signkey key.pem
+ +

Convert a certificate request into a self signed certificate using extensions for a CA:

+ +
openssl x509 -req -in careq.pem -extfile openssl.cnf -extensions v3_ca \
+       -signkey key.pem -out cacert.pem
+ +

Sign a certificate request using the CA certificate above and add user certificate extensions:

+ +
openssl x509 -req -in req.pem -extfile openssl.cnf -extensions v3_usr \
+       -CA cacert.pem -CAkey key.pem -CAcreateserial
+ +

Set a certificate to be trusted for SSL client use and change set its alias to "Steve's Class 1 CA"

+ +
openssl x509 -in cert.pem -addtrust clientAuth \
+       -setalias "Steve's Class 1 CA" -out trust.pem
+ +

NOTES

+ +

The PEM format uses the header and footer lines:

+ +
-----BEGIN CERTIFICATE-----
+-----END CERTIFICATE-----
+ +

it will also handle files containing:

+ +
-----BEGIN X509 CERTIFICATE-----
+-----END X509 CERTIFICATE-----
+ +

Trusted certificates have the lines

+ +
-----BEGIN TRUSTED CERTIFICATE-----
+-----END TRUSTED CERTIFICATE-----
+ +

The conversion to UTF8 format used with the name options assumes that T61Strings use the ISO8859-1 character set. This is wrong but Netscape and MSIE do this as do many certificates. So although this is incorrect it is more likely to display the majority of certificates correctly.

+ +

The -email option searches the subject name and the subject alternative name extension. Only unique email addresses will be printed out: it will not print the same address more than once.

+ +

CERTIFICATE EXTENSIONS

+ +

The -purpose option checks the certificate extensions and determines what the certificate can be used for. The actual checks done are rather complex and include various hacks and workarounds to handle broken certificates and software.

+ +

The same code is used when verifying untrusted certificates in chains so this section is useful if a chain is rejected by the verify code.

+ +

The basicConstraints extension CA flag is used to determine whether the certificate can be used as a CA. If the CA flag is true then it is a CA, if the CA flag is false then it is not a CA. All CAs should have the CA flag set to true.

+ +

If the basicConstraints extension is absent then the certificate is considered to be a "possible CA" other extensions are checked according to the intended use of the certificate. A warning is given in this case because the certificate should really not be regarded as a CA: however it is allowed to be a CA to work around some broken software.

+ +

If the certificate is a V1 certificate (and thus has no extensions) and it is self signed it is also assumed to be a CA but a warning is again given: this is to work around the problem of Verisign roots which are V1 self signed certificates.

+ +

If the keyUsage extension is present then additional restraints are made on the uses of the certificate. A CA certificate must have the keyCertSign bit set if the keyUsage extension is present.

+ +

The extended key usage extension places additional restrictions on the certificate uses. If this extension is present (whether critical or not) the key can only be used for the purposes specified.

+ +

A complete description of each test is given below. The comments about basicConstraints and keyUsage and V1 certificates above apply to all CA certificates.

+ +
+ +
SSL Client
+
+ +

The extended key usage extension must be absent or include the "web client authentication" OID. keyUsage must be absent or it must have the digitalSignature bit set. Netscape certificate type must be absent or it must have the SSL client bit set.

+ +
+
SSL Client CA
+
+ +

The extended key usage extension must be absent or include the "web client authentication" OID. Netscape certificate type must be absent or it must have the SSL CA bit set: this is used as a work around if the basicConstraints extension is absent.

+ +
+
SSL Server
+
+ +

The extended key usage extension must be absent or include the "web server authentication" and/or one of the SGC OIDs. keyUsage must be absent or it must have the digitalSignature, the keyEncipherment set or both bits set. Netscape certificate type must be absent or have the SSL server bit set.

+ +
+
SSL Server CA
+
+ +

The extended key usage extension must be absent or include the "web server authentication" and/or one of the SGC OIDs. Netscape certificate type must be absent or the SSL CA bit must be set: this is used as a work around if the basicConstraints extension is absent.

+ +
+
Netscape SSL Server
+
+ +

For Netscape SSL clients to connect to an SSL server it must have the keyEncipherment bit set if the keyUsage extension is present. This isn't always valid because some cipher suites use the key for digital signing. Otherwise it is the same as a normal SSL server.

+ +
+
Common S/MIME Client Tests
+
+ +

The extended key usage extension must be absent or include the "email protection" OID. Netscape certificate type must be absent or should have the S/MIME bit set. If the S/MIME bit is not set in Netscape certificate type then the SSL client bit is tolerated as an alternative but a warning is shown: this is because some Verisign certificates don't set the S/MIME bit.

+ +
+
S/MIME Signing
+
+ +

In addition to the common S/MIME client tests the digitalSignature bit or the nonRepudiation bit must be set if the keyUsage extension is present.

+ +
+
S/MIME Encryption
+
+ +

In addition to the common S/MIME tests the keyEncipherment bit must be set if the keyUsage extension is present.

+ +
+
S/MIME CA
+
+ +

The extended key usage extension must be absent or include the "email protection" OID. Netscape certificate type must be absent or must have the S/MIME CA bit set: this is used as a work around if the basicConstraints extension is absent.

+ +
+
CRL Signing
+
+ +

The keyUsage extension must be absent or it must have the CRL signing bit set.

+ +
+
CRL Signing CA
+
+ +

The normal CA tests apply. Except in this case the basicConstraints extension must be present.

+ +
+
+ +

BUGS

+ +

Extensions in certificates are not transferred to certificate requests and vice versa.

+ +

It is possible to produce invalid certificates or requests by specifying the wrong private key or using inconsistent options in some cases: these should be checked.

+ +

There should be options to explicitly set such things as start and end dates rather than an offset from the current time.

+ +

SEE ALSO

+ +

req(1), ca(1), genrsa(1), gendsa(1), verify(1), x509v3_config(5)

+ +

HISTORY

+ +

The hash algorithm used in the -subject_hash and -issuer_hash options before OpenSSL 1.0.0 was based on the deprecated MD5 algorithm and the encoding of the distinguished name. In OpenSSL 1.0.0 and later it is based on a canonical version of the DN using SHA1. This means that any directories using the old form must have their links rebuilt using c_rehash or similar.

+ +

COPYRIGHT

+ +

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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ADMISSIONS.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ADMISSIONS.html new file mode 100644 index 00000000..75b33cf0 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ADMISSIONS.html @@ -0,0 +1,120 @@ + + + + +ADMISSIONS + + + + + + + + + + +

NAME

+ +

ADMISSIONS, ADMISSIONS_get0_admissionAuthority, ADMISSIONS_get0_namingAuthority, ADMISSIONS_get0_professionInfos, ADMISSIONS_set0_admissionAuthority, ADMISSIONS_set0_namingAuthority, ADMISSIONS_set0_professionInfos, ADMISSION_SYNTAX, ADMISSION_SYNTAX_get0_admissionAuthority, ADMISSION_SYNTAX_get0_contentsOfAdmissions, ADMISSION_SYNTAX_set0_admissionAuthority, ADMISSION_SYNTAX_set0_contentsOfAdmissions, NAMING_AUTHORITY, NAMING_AUTHORITY_get0_authorityId, NAMING_AUTHORITY_get0_authorityURL, NAMING_AUTHORITY_get0_authorityText, NAMING_AUTHORITY_set0_authorityId, NAMING_AUTHORITY_set0_authorityURL, NAMING_AUTHORITY_set0_authorityText, PROFESSION_INFO, PROFESSION_INFOS, PROFESSION_INFO_get0_addProfessionInfo, PROFESSION_INFO_get0_namingAuthority, PROFESSION_INFO_get0_professionItems, PROFESSION_INFO_get0_professionOIDs, PROFESSION_INFO_get0_registrationNumber, PROFESSION_INFO_set0_addProfessionInfo, PROFESSION_INFO_set0_namingAuthority, PROFESSION_INFO_set0_professionItems, PROFESSION_INFO_set0_professionOIDs, PROFESSION_INFO_set0_registrationNumber - Accessors and settors for ADMISSION_SYNTAX

+ +

SYNOPSIS

+ +
typedef struct NamingAuthority_st NAMING_AUTHORITY;
+typedef struct ProfessionInfo_st PROFESSION_INFO;
+typedef STACK_OF(PROFESSION_INFO) PROFESSION_INFOS;
+typedef struct Admissions_st ADMISSIONS;
+typedef struct AdmissionSyntax_st ADMISSION_SYNTAX;
+
+const ASN1_OBJECT *NAMING_AUTHORITY_get0_authorityId(
+    const NAMING_AUTHORITY *n);
+void NAMING_AUTHORITY_set0_authorityId(NAMING_AUTHORITY *n,
+    ASN1_OBJECT* namingAuthorityId);
+const ASN1_IA5STRING *NAMING_AUTHORITY_get0_authorityURL(
+    const NAMING_AUTHORITY *n);
+void NAMING_AUTHORITY_set0_authorityURL(NAMING_AUTHORITY *n,
+    ASN1_IA5STRING* namingAuthorityUrl);
+const ASN1_STRING *NAMING_AUTHORITY_get0_authorityText(
+    const NAMING_AUTHORITY *n);
+void NAMING_AUTHORITY_set0_authorityText(NAMING_AUTHORITY *n,
+    ASN1_STRING* namingAuthorityText);
+
+const GENERAL_NAME *ADMISSION_SYNTAX_get0_admissionAuthority(
+    const ADMISSION_SYNTAX *as);
+void ADMISSION_SYNTAX_set0_admissionAuthority(
+    ADMISSION_SYNTAX *as, GENERAL_NAME *aa);
+const STACK_OF(ADMISSIONS) *ADMISSION_SYNTAX_get0_contentsOfAdmissions(
+    const ADMISSION_SYNTAX *as);
+void ADMISSION_SYNTAX_set0_contentsOfAdmissions(
+    ADMISSION_SYNTAX *as, STACK_OF(ADMISSIONS) *a);
+
+const GENERAL_NAME *ADMISSIONS_get0_admissionAuthority(const ADMISSIONS *a);
+void ADMISSIONS_set0_admissionAuthority(ADMISSIONS *a, GENERAL_NAME *aa);
+const NAMING_AUTHORITY *ADMISSIONS_get0_namingAuthority(const ADMISSIONS *a);
+void ADMISSIONS_set0_namingAuthority(ADMISSIONS *a, NAMING_AUTHORITY *na);
+const PROFESSION_INFOS *ADMISSIONS_get0_professionInfos(const ADMISSIONS *a);
+void ADMISSIONS_set0_professionInfos(ADMISSIONS *a, PROFESSION_INFOS *pi);
+
+const ASN1_OCTET_STRING *PROFESSION_INFO_get0_addProfessionInfo(
+    const PROFESSION_INFO *pi);
+void PROFESSION_INFO_set0_addProfessionInfo(
+    PROFESSION_INFO *pi, ASN1_OCTET_STRING *aos);
+const NAMING_AUTHORITY *PROFESSION_INFO_get0_namingAuthority(
+    const PROFESSION_INFO *pi);
+void PROFESSION_INFO_set0_namingAuthority(
+    PROFESSION_INFO *pi, NAMING_AUTHORITY *na);
+const STACK_OF(ASN1_STRING) *PROFESSION_INFO_get0_professionItems(
+    const PROFESSION_INFO *pi);
+void PROFESSION_INFO_set0_professionItems(
+    PROFESSION_INFO *pi, STACK_OF(ASN1_STRING) *as);
+const STACK_OF(ASN1_OBJECT) *PROFESSION_INFO_get0_professionOIDs(
+    const PROFESSION_INFO *pi);
+void PROFESSION_INFO_set0_professionOIDs(
+    PROFESSION_INFO *pi, STACK_OF(ASN1_OBJECT) *po);
+const ASN1_PRINTABLESTRING *PROFESSION_INFO_get0_registrationNumber(
+    const PROFESSION_INFO *pi);
+void PROFESSION_INFO_set0_registrationNumber(
+    PROFESSION_INFO *pi, ASN1_PRINTABLESTRING *rn);
+ +

DESCRIPTION

+ +

The PROFESSION_INFOS, ADMISSION_SYNTAX, ADMISSIONS, and PROFESSION_INFO types are opaque structures representing the analogous types defined in the Common PKI Specification published by https://www.t7ev.org. Knowledge of those structures and their semantics is assumed.

+ +

The conventional routines to convert between DER and the local format are described in d2i_X509(3). The conventional routines to allocate and free the types are defined in X509_dup(3).

+ +

The PROFESSION_INFOS type is a stack of PROFESSION_INFO; see DEFINE_STACK_OF(3) for details.

+ +

The NAMING_AUTHORITY type has an authority ID and URL, and text fields. The NAMING_AUTHORITY_get0_authorityId(), NAMING_AUTHORITY_get0_get0_authorityURL(), and NAMING_AUTHORITY_get0_get0_authorityText(), functions return pointers to those values within the object. The NAMING_AUTHORITY_set0_authorityId(), NAMING_AUTHORITY_set0_get0_authorityURL(), and NAMING_AUTHORITY_set0_get0_authorityText(), functions free any existing value and set the pointer to the specified value.

+ +

The ADMISSION_SYNTAX type has an authority name and a stack of ADMISSION objects. The ADMISSION_SYNTAX_get0_admissionAuthority() and ADMISSION_SYNTAX_get0_contentsOfAdmissions() functions return pointers to those values within the object. The ADMISSION_SYNTAX_set0_admissionAuthority() and ADMISSION_SYNTAX_set0_contentsOfAdmissions() functions free any existing value and set the pointer to the specified value.

+ +

The ADMISSION type has an authority name, authority object, and a stack of PROFESSION_INFO items. The ADMISSIONS_get0_admissionAuthority(), ADMISSIONS_get0_namingAuthority(), and ADMISSIONS_get0_professionInfos() functions return pointers to those values within the object. The ADMISSIONS_set0_admissionAuthority(), ADMISSIONS_set0_namingAuthority(), and ADMISSIONS_set0_professionInfos() functions free any existing value and set the pointer to the specified value.

+ +

The PROFESSION_INFO type has a name authority, stacks of profession Items and OIDs, a registration number, and additional profession info. The functions PROFESSION_INFO_get0_addProfessionInfo(), PROFESSION_INFO_get0_namingAuthority(), PROFESSION_INFO_get0_professionItems(), PROFESSION_INFO_get0_professionOIDs(), and PROFESSION_INFO_get0_registrationNumber() functions return pointers to those values within the object. The PROFESSION_INFO_set0_addProfessionInfo(), PROFESSION_INFO_set0_namingAuthority(), PROFESSION_INFO_set0_professionItems(), PROFESSION_INFO_set0_professionOIDs(), and PROFESSION_INFO_set0_registrationNumber() functions free any existing value and set the pointer to the specified value.

+ +

RETURN VALUES

+ +

Described above. Note that all of the get0 functions return a pointer to the internal data structure and must not be freed.

+ +

SEE ALSO

+ +

X509_dup(3), d2i_X509(3),

+ +

COPYRIGHT

+ +

Copyright 2017-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ASN1_INTEGER_get_int64.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ASN1_INTEGER_get_int64.html new file mode 100644 index 00000000..9c7c7536 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ASN1_INTEGER_get_int64.html @@ -0,0 +1,116 @@ + + + + +ASN1_INTEGER_get_int64 + + + + + + + + + + +

NAME

+ +

ASN1_INTEGER_get_uint64, ASN1_INTEGER_set_uint64, ASN1_INTEGER_get_int64, ASN1_INTEGER_get, ASN1_INTEGER_set_int64, ASN1_INTEGER_set, BN_to_ASN1_INTEGER, ASN1_INTEGER_to_BN, ASN1_ENUMERATED_get_int64, ASN1_ENUMERATED_get, ASN1_ENUMERATED_set_int64, ASN1_ENUMERATED_set, BN_to_ASN1_ENUMERATED, ASN1_ENUMERATED_to_BN - ASN.1 INTEGER and ENUMERATED utilities

+ +

SYNOPSIS

+ +
#include <openssl/asn1.h>
+
+int ASN1_INTEGER_get_int64(int64_t *pr, const ASN1_INTEGER *a);
+long ASN1_INTEGER_get(const ASN1_INTEGER *a);
+
+int ASN1_INTEGER_set_int64(ASN1_INTEGER *a, int64_t r);
+int ASN1_INTEGER_set(const ASN1_INTEGER *a, long v);
+
+int ASN1_INTEGER_get_uint64(uint64_t *pr, const ASN1_INTEGER *a);
+int ASN1_INTEGER_set_uint64(ASN1_INTEGER *a, uint64_t r);
+
+ASN1_INTEGER *BN_to_ASN1_INTEGER(const BIGNUM *bn, ASN1_INTEGER *ai);
+BIGNUM *ASN1_INTEGER_to_BN(const ASN1_INTEGER *ai, BIGNUM *bn);
+
+int ASN1_ENUMERATED_get_int64(int64_t *pr, const ASN1_ENUMERATED *a);
+long ASN1_ENUMERATED_get(const ASN1_ENUMERATED *a);
+
+int ASN1_ENUMERATED_set_int64(ASN1_ENUMERATED *a, int64_t r);
+int ASN1_ENUMERATED_set(ASN1_ENUMERATED *a, long v);
+
+ASN1_ENUMERATED *BN_to_ASN1_ENUMERATED(BIGNUM *bn, ASN1_ENUMERATED *ai);
+BIGNUM *ASN1_ENUMERATED_to_BN(ASN1_ENUMERATED *ai, BIGNUM *bn);
+ +

DESCRIPTION

+ +

These functions convert to and from ASN1_INTEGER and ASN1_ENUMERATED structures.

+ +

ASN1_INTEGER_get_int64() converts an ASN1_INTEGER into an int64_t type If successful it returns 1 and sets *pr to the value of a. If it fails (due to invalid type or the value being too big to fit into an int64_t type) it returns 0.

+ +

ASN1_INTEGER_get_uint64() is similar to ASN1_INTEGER_get_int64_t() except it converts to a uint64_t type and an error is returned if the passed integer is negative.

+ +

ASN1_INTEGER_get() also returns the value of a but it returns 0 if a is NULL and -1 on error (which is ambiguous because -1 is a legitimate value for an ASN1_INTEGER). New applications should use ASN1_INTEGER_get_int64() instead.

+ +

ASN1_INTEGER_set_int64() sets the value of ASN1_INTEGER a to the int64_t value r.

+ +

ASN1_INTEGER_set_uint64() sets the value of ASN1_INTEGER a to the uint64_t value r.

+ +

ASN1_INTEGER_set() sets the value of ASN1_INTEGER a to the long value v.

+ +

BN_to_ASN1_INTEGER() converts BIGNUM bn to an ASN1_INTEGER. If ai is NULL a new ASN1_INTEGER structure is returned. If ai is not NULL then the existing structure will be used instead.

+ +

ASN1_INTEGER_to_BN() converts ASN1_INTEGER ai into a BIGNUM. If bn is NULL a new BIGNUM structure is returned. If bn is not NULL then the existing structure will be used instead.

+ +

ASN1_ENUMERATED_get_int64(), ASN1_ENUMERATED_set_int64(), ASN1_ENUMERATED_set(), BN_to_ASN1_ENUMERATED() and ASN1_ENUMERATED_to_BN() behave in an identical way to their ASN1_INTEGER counterparts except they operate on an ASN1_ENUMERATED value.

+ +

ASN1_ENUMERATED_get() returns the value of a in a similar way to ASN1_INTEGER_get() but it returns 0xffffffffL if the value of a will not fit in a long type. New applications should use ASN1_ENUMERATED_get_int64() instead.

+ +

NOTES

+ +

In general an ASN1_INTEGER or ASN1_ENUMERATED type can contain an integer of almost arbitrary size and so cannot always be represented by a C 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.

+ +

BUGS

+ +

The ambiguous return values of ASN1_INTEGER_get() and ASN1_ENUMERATED_get() mean these functions should be avoided if possible. They are retained for compatibility. Normally the ambiguous return values are not legitimate values for the fields they represent.

+ +

RETURN VALUES

+ +

ASN1_INTEGER_set_int64(), ASN1_INTEGER_set(), ASN1_ENUMERATED_set_int64() and ASN1_ENUMERATED_set() return 1 for success and 0 for failure. They will only fail if a memory allocation error occurs.

+ +

ASN1_INTEGER_get_int64() and ASN1_ENUMERATED_get_int64() return 1 for success and 0 for failure. They will fail if the passed type is incorrect (this will only happen if there is a programming error) or if the value exceeds the range of an int64_t type.

+ +

BN_to_ASN1_INTEGER() and BN_to_ASN1_ENUMERATED() return an ASN1_INTEGER or ASN1_ENUMERATED structure respectively or NULL if an error occurs. They will only fail due to a memory allocation error.

+ +

ASN1_INTEGER_to_BN() and ASN1_ENUMERATED_to_BN() return a BIGNUM structure of NULL if an error occurs. They can fail if the passed type is incorrect (due to programming error) or due to a memory allocation failure.

+ +

SEE ALSO

+ +

ERR_get_error(3)

+ +

HISTORY

+ +

ASN1_INTEGER_set_int64(), ASN1_INTEGER_get_int64(), ASN1_ENUMERATED_set_int64() and ASN1_ENUMERATED_get_int64() were added in OpenSSL 1.1.0.

+ +

COPYRIGHT

+ +

Copyright 2015-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ASN1_ITEM_lookup.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ASN1_ITEM_lookup.html new file mode 100644 index 00000000..3080e388 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ASN1_ITEM_lookup.html @@ -0,0 +1,59 @@ + + + + +ASN1_ITEM_lookup + + + + + + + + + + +

NAME

+ +

ASN1_ITEM_lookup, ASN1_ITEM_get - lookup ASN.1 structures

+ +

SYNOPSIS

+ +
#include <openssl/asn1.h>
+
+const ASN1_ITEM *ASN1_ITEM_lookup(const char *name);
+const ASN1_ITEM *ASN1_ITEM_get(size_t i);
+ +

DESCRIPTION

+ +

ASN1_ITEM_lookup() returns the ASN1_ITEM name.

+ +

ASN1_ITEM_get() returns the ASN1_ITEM with index i. This function returns NULL if the index i is out of range.

+ +

RETURN VALUES

+ +

ASN1_ITEM_lookup() and ASN1_ITEM_get() return a valid ASN1_ITEM structure or NULL if an error occurred.

+ +

SEE ALSO

+ +

ERR_get_error(3)

+ +

COPYRIGHT

+ +

Copyright 2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ASN1_OBJECT_new.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ASN1_OBJECT_new.html new file mode 100644 index 00000000..6b9b0c30 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ASN1_OBJECT_new.html @@ -0,0 +1,68 @@ + + + + +ASN1_OBJECT_new + + + + + + + + + + +

NAME

+ +

ASN1_OBJECT_new, ASN1_OBJECT_free - object allocation functions

+ +

SYNOPSIS

+ +
#include <openssl/asn1.h>
+
+ASN1_OBJECT *ASN1_OBJECT_new(void);
+void ASN1_OBJECT_free(ASN1_OBJECT *a);
+ +

DESCRIPTION

+ +

The ASN1_OBJECT allocation routines, allocate and free an ASN1_OBJECT structure, which represents an ASN1 OBJECT IDENTIFIER.

+ +

ASN1_OBJECT_new() allocates and initializes an ASN1_OBJECT structure.

+ +

ASN1_OBJECT_free() frees up the ASN1_OBJECT structure a. If a is NULL, nothing is done.

+ +

NOTES

+ +

Although ASN1_OBJECT_new() allocates a new ASN1_OBJECT structure it is almost never used in applications. The ASN1 object utility functions such as OBJ_nid2obj() are used instead.

+ +

RETURN VALUES

+ +

If the allocation fails, ASN1_OBJECT_new() returns NULL and sets an error code that can be obtained by ERR_get_error(3). Otherwise it returns a pointer to the newly allocated structure.

+ +

ASN1_OBJECT_free() returns no value.

+ +

SEE ALSO

+ +

ERR_get_error(3), d2i_ASN1_OBJECT(3)

+ +

COPYRIGHT

+ +

Copyright 2002-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ASN1_STRING_TABLE_add.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ASN1_STRING_TABLE_add.html new file mode 100644 index 00000000..879c2bea --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ASN1_STRING_TABLE_add.html @@ -0,0 +1,82 @@ + + + + +ASN1_STRING_TABLE_add + + + + + + + + + + +

NAME

+ +

ASN1_STRING_TABLE, ASN1_STRING_TABLE_add, ASN1_STRING_TABLE_get, ASN1_STRING_TABLE_cleanup - ASN1_STRING_TABLE manipulation functions

+ +

SYNOPSIS

+ +
#include <openssl/asn1.h>
+
+typedef struct asn1_string_table_st ASN1_STRING_TABLE;
+
+int ASN1_STRING_TABLE_add(int nid, long minsize, long maxsize,
+                          unsigned long mask, unsigned long flags);
+ASN1_STRING_TABLE * ASN1_STRING_TABLE_get(int nid);
+void ASN1_STRING_TABLE_cleanup(void);
+ +

DESCRIPTION

+ +

Types

+ +

ASN1_STRING_TABLE is a table which holds string information (basically minimum size, maximum size, type and etc) for a NID object.

+ +

Functions

+ +

ASN1_STRING_TABLE_add() adds a new ASN1_STRING_TABLE item into the local ASN1 string table based on the nid along with other parameters.

+ +

If the item is already in the table, fields of ASN1_STRING_TABLE are updated (depending on the values of those parameters, e.g., minsize and maxsize >= 0, mask and flags != 0). If the nid is standard, a copy of the standard ASN1_STRING_TABLE is created and updated with other parameters.

+ +

ASN1_STRING_TABLE_get() searches for an ASN1_STRING_TABLE item based on nid. It will search the local table first, then the standard one.

+ +

ASN1_STRING_TABLE_cleanup() frees all ASN1_STRING_TABLE items added by ASN1_STRING_TABLE_add().

+ +

RETURN VALUES

+ +

ASN1_STRING_TABLE_add() returns 1 on success, 0 if an error occurred.

+ +

ASN1_STRING_TABLE_get() returns a valid ASN1_STRING_TABLE structure or NULL if nothing is found.

+ +

ASN1_STRING_TABLE_cleanup() does not return a value.

+ +

SEE ALSO

+ +

ERR_get_error(3)

+ +

COPYRIGHT

+ +

Copyright 2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ASN1_STRING_length.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ASN1_STRING_length.html new file mode 100644 index 00000000..9aaa61c5 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ASN1_STRING_length.html @@ -0,0 +1,107 @@ + + + + +ASN1_STRING_length + + + + + + + + + + +

NAME

+ +

ASN1_STRING_dup, ASN1_STRING_cmp, ASN1_STRING_set, ASN1_STRING_length, ASN1_STRING_type, ASN1_STRING_get0_data, ASN1_STRING_data, ASN1_STRING_to_UTF8 - ASN1_STRING utility functions

+ +

SYNOPSIS

+ +
#include <openssl/asn1.h>
+
+int ASN1_STRING_length(ASN1_STRING *x);
+const unsigned char * ASN1_STRING_get0_data(const ASN1_STRING *x);
+unsigned char * ASN1_STRING_data(ASN1_STRING *x);
+
+ASN1_STRING * ASN1_STRING_dup(ASN1_STRING *a);
+
+int ASN1_STRING_cmp(ASN1_STRING *a, ASN1_STRING *b);
+
+int ASN1_STRING_set(ASN1_STRING *str, const void *data, int len);
+
+int ASN1_STRING_type(const ASN1_STRING *x);
+
+int ASN1_STRING_to_UTF8(unsigned char **out, const ASN1_STRING *in);
+ +

DESCRIPTION

+ +

These functions allow an ASN1_STRING structure to be manipulated.

+ +

ASN1_STRING_length() returns the length of the content of x.

+ +

ASN1_STRING_get0_data() returns an internal pointer to the data of x. Since this is an internal pointer it should not be freed or modified in any way.

+ +

ASN1_STRING_data() is similar to ASN1_STRING_get0_data() except the returned value is not constant. This function is deprecated: applications should use ASN1_STRING_get0_data() instead.

+ +

ASN1_STRING_dup() returns a copy of the structure a.

+ +

ASN1_STRING_cmp() compares a and b returning 0 if the two are identical. The string types and content are compared.

+ +

ASN1_STRING_set() sets the data of string str to the buffer data or length len. The supplied data is copied. If len is -1 then the length is determined by strlen(data).

+ +

ASN1_STRING_type() returns the type of x, using standard constants such as V_ASN1_OCTET_STRING.

+ +

ASN1_STRING_to_UTF8() converts the string in to UTF8 format, the converted data is allocated in a buffer in *out. The length of out is returned or a negative error code. The buffer *out should be freed using OPENSSL_free().

+ +

NOTES

+ +

Almost all ASN1 types in OpenSSL are represented as an ASN1_STRING structure. Other types such as ASN1_OCTET_STRING are simply typedef'ed to ASN1_STRING and the functions call the ASN1_STRING equivalents. ASN1_STRING is also used for some CHOICE types which consist entirely of primitive string types such as DirectoryString and Time.

+ +

These functions should not be used to examine or modify ASN1_INTEGER or ASN1_ENUMERATED types: the relevant INTEGER or ENUMERATED utility functions should be used instead.

+ +

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.

+ +

Similar care should be take to ensure the data is in the correct format when calling ASN1_STRING_set().

+ +

RETURN VALUES

+ +

ASN1_STRING_length() returns the length of the content of x.

+ +

ASN1_STRING_get0_data() and ASN1_STRING_data() return an internal pointer to the data of x.

+ +

ASN1_STRING_dup() returns a valid ASN1_STRING structure or NULL if an error occurred.

+ +

ASN1_STRING_cmp() returns an integer greater than, equal to, or less than 0, according to whether a is greater than, equal to, or less than b.

+ +

ASN1_STRING_set() returns 1 on success or 0 on error.

+ +

ASN1_STRING_type() returns the type of x.

+ +

ASN1_STRING_to_UTF8() returns the number of bytes in output string out or a negative value if an error occurred.

+ +

SEE ALSO

+ +

ERR_get_error(3)

+ +

COPYRIGHT

+ +

Copyright 2002-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ASN1_STRING_new.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ASN1_STRING_new.html new file mode 100644 index 00000000..4e006e50 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ASN1_STRING_new.html @@ -0,0 +1,69 @@ + + + + +ASN1_STRING_new + + + + + + + + + + +

NAME

+ +

ASN1_STRING_new, ASN1_STRING_type_new, ASN1_STRING_free - ASN1_STRING allocation functions

+ +

SYNOPSIS

+ +
#include <openssl/asn1.h>
+
+ASN1_STRING * ASN1_STRING_new(void);
+ASN1_STRING * ASN1_STRING_type_new(int type);
+void ASN1_STRING_free(ASN1_STRING *a);
+ +

DESCRIPTION

+ +

ASN1_STRING_new() returns an allocated ASN1_STRING structure. Its type is undefined.

+ +

ASN1_STRING_type_new() returns an allocated ASN1_STRING structure of type type.

+ +

ASN1_STRING_free() frees up a. If a is NULL nothing is done.

+ +

NOTES

+ +

Other string types call the ASN1_STRING functions. For example ASN1_OCTET_STRING_new() calls ASN1_STRING_type(V_ASN1_OCTET_STRING).

+ +

RETURN VALUES

+ +

ASN1_STRING_new() and ASN1_STRING_type_new() return a valid ASN1_STRING structure or NULL if an error occurred.

+ +

ASN1_STRING_free() does not return a value.

+ +

SEE ALSO

+ +

ERR_get_error(3)

+ +

COPYRIGHT

+ +

Copyright 2002-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ASN1_STRING_print_ex.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ASN1_STRING_print_ex.html new file mode 100644 index 00000000..afe4abff --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ASN1_STRING_print_ex.html @@ -0,0 +1,103 @@ + + + + +ASN1_STRING_print_ex + + + + + + + + + + +

NAME

+ +

ASN1_tag2str, ASN1_STRING_print_ex, ASN1_STRING_print_ex_fp, ASN1_STRING_print - ASN1_STRING output routines

+ +

SYNOPSIS

+ +
#include <openssl/asn1.h>
+
+int ASN1_STRING_print_ex(BIO *out, const ASN1_STRING *str, unsigned long flags);
+int ASN1_STRING_print_ex_fp(FILE *fp, const ASN1_STRING *str, unsigned long flags);
+int ASN1_STRING_print(BIO *out, const ASN1_STRING *str);
+
+const char *ASN1_tag2str(int tag);
+ +

DESCRIPTION

+ +

These functions output an ASN1_STRING structure. ASN1_STRING is used to represent all the ASN1 string types.

+ +

ASN1_STRING_print_ex() outputs str to out, the format is determined by the options flags. ASN1_STRING_print_ex_fp() is identical except it outputs to fp instead.

+ +

ASN1_STRING_print() prints str to out but using a different format to ASN1_STRING_print_ex(). It replaces unprintable characters (other than CR, LF) with '.'.

+ +

ASN1_tag2str() returns a human-readable name of the specified ASN.1 tag.

+ +

NOTES

+ +

ASN1_STRING_print() is a deprecated function which should be avoided; use ASN1_STRING_print_ex() instead.

+ +

Although there are a large number of options frequently ASN1_STRFLGS_RFC2253 is suitable, or on UTF8 terminals ASN1_STRFLGS_RFC2253 & ~ASN1_STRFLGS_ESC_MSB.

+ +

The complete set of supported options for flags is listed below.

+ +

Various characters can be escaped. If ASN1_STRFLGS_ESC_2253 is set the characters determined by RFC2253 are escaped. If ASN1_STRFLGS_ESC_CTRL is set control characters are escaped. If ASN1_STRFLGS_ESC_MSB is set characters with the MSB set are escaped: this option should not be used if the terminal correctly interprets UTF8 sequences.

+ +

Escaping takes several forms.

+ +

If the character being escaped is a 16 bit character then the form "\UXXXX" is used using exactly four characters for the hex representation. If it is 32 bits then "\WXXXXXXXX" is used using eight characters of its hex representation. These forms will only be used if UTF8 conversion is not set (see below).

+ +

Printable characters are normally escaped using the backslash '\' character. If ASN1_STRFLGS_ESC_QUOTE is set then the whole string is instead surrounded by double quote characters: this is arguably more readable than the backslash notation. Other characters use the "\XX" using exactly two characters of the hex representation.

+ +

If ASN1_STRFLGS_UTF8_CONVERT is set then characters are converted to UTF8 format first. If the terminal supports the display of UTF8 sequences then this option will correctly display multi byte characters.

+ +

If ASN1_STRFLGS_IGNORE_TYPE is set then the string type is not interpreted at all: everything is assumed to be one byte per character. This is primarily for debugging purposes and can result in confusing output in multi character strings.

+ +

If ASN1_STRFLGS_SHOW_TYPE is set then the string type itself is printed out before its value (for example "BMPSTRING"), this actually uses ASN1_tag2str().

+ +

The content of a string instead of being interpreted can be "dumped": this just outputs the value of the string using the form #XXXX using hex format for each octet.

+ +

If ASN1_STRFLGS_DUMP_ALL is set then any type is dumped.

+ +

Normally non character string types (such as OCTET STRING) are assumed to be one byte per character, if ASN1_STRFLGS_DUMP_UNKNOWN is set then they will be dumped instead.

+ +

When a type is dumped normally just the content octets are printed, if ASN1_STRFLGS_DUMP_DER is set then the complete encoding is dumped instead (including tag and length octets).

+ +

ASN1_STRFLGS_RFC2253 includes all the flags required by RFC2253. It is equivalent to: ASN1_STRFLGS_ESC_2253 | ASN1_STRFLGS_ESC_CTRL | ASN1_STRFLGS_ESC_MSB | ASN1_STRFLGS_UTF8_CONVERT | ASN1_STRFLGS_DUMP_UNKNOWN ASN1_STRFLGS_DUMP_DER

+ +

RETURN VALUES

+ +

ASN1_STRING_print_ex() and ASN1_STRING_print_ex_fp() return the number of characters written or -1 if an error occurred.

+ +

ASN1_STRING_print() returns 1 on success or 0 on error.

+ +

ASN1_tag2str() returns a human-readable name of the specified ASN.1 tag.

+ +

SEE ALSO

+ +

X509_NAME_print_ex(3), ASN1_tag2str(3)

+ +

COPYRIGHT

+ +

Copyright 2002-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ASN1_TIME_set.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ASN1_TIME_set.html new file mode 100644 index 00000000..81f883b8 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ASN1_TIME_set.html @@ -0,0 +1,190 @@ + + + + +ASN1_TIME_set + + + + + + + + + + +

NAME

+ +

ASN1_TIME_set, ASN1_UTCTIME_set, ASN1_GENERALIZEDTIME_set, ASN1_TIME_adj, ASN1_UTCTIME_adj, ASN1_GENERALIZEDTIME_adj, ASN1_TIME_check, ASN1_UTCTIME_check, ASN1_GENERALIZEDTIME_check, ASN1_TIME_set_string, ASN1_UTCTIME_set_string, ASN1_GENERALIZEDTIME_set_string, ASN1_TIME_set_string_X509, ASN1_TIME_normalize, ASN1_TIME_to_tm, ASN1_TIME_print, ASN1_UTCTIME_print, ASN1_GENERALIZEDTIME_print, ASN1_TIME_diff, ASN1_TIME_cmp_time_t, ASN1_UTCTIME_cmp_time_t, ASN1_TIME_compare, ASN1_TIME_to_generalizedtime - ASN.1 Time functions

+ +

SYNOPSIS

+ +
ASN1_TIME *ASN1_TIME_set(ASN1_TIME *s, time_t t);
+ASN1_UTCTIME *ASN1_UTCTIME_set(ASN1_UTCTIME *s, time_t t);
+ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_set(ASN1_GENERALIZEDTIME *s,
+                                               time_t t);
+
+ASN1_TIME *ASN1_TIME_adj(ASN1_TIME *s, time_t t, int offset_day,
+                         long offset_sec);
+ASN1_UTCTIME *ASN1_UTCTIME_adj(ASN1_UTCTIME *s, time_t t,
+                               int offset_day, long offset_sec);
+ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_adj(ASN1_GENERALIZEDTIME *s,
+                                               time_t t, int offset_day,
+                                               long offset_sec);
+
+int ASN1_TIME_set_string(ASN1_TIME *s, const char *str);
+int ASN1_TIME_set_string_X509(ASN1_TIME *s, const char *str);
+int ASN1_UTCTIME_set_string(ASN1_UTCTIME *s, const char *str);
+int ASN1_GENERALIZEDTIME_set_string(ASN1_GENERALIZEDTIME *s,
+                                    const char *str);
+
+int ASN1_TIME_normalize(ASN1_TIME *s);
+
+int ASN1_TIME_check(const ASN1_TIME *t);
+int ASN1_UTCTIME_check(const ASN1_UTCTIME *t);
+int ASN1_GENERALIZEDTIME_check(const ASN1_GENERALIZEDTIME *t);
+
+int ASN1_TIME_print(BIO *b, const ASN1_TIME *s);
+int ASN1_UTCTIME_print(BIO *b, const ASN1_UTCTIME *s);
+int ASN1_GENERALIZEDTIME_print(BIO *b, const ASN1_GENERALIZEDTIME *s);
+
+int ASN1_TIME_to_tm(const ASN1_TIME *s, struct tm *tm);
+int ASN1_TIME_diff(int *pday, int *psec, const ASN1_TIME *from,
+                   const ASN1_TIME *to);
+
+int ASN1_TIME_cmp_time_t(const ASN1_TIME *s, time_t t);
+int ASN1_UTCTIME_cmp_time_t(const ASN1_UTCTIME *s, time_t t);
+
+int ASN1_TIME_compare(const ASN1_TIME *a, const ASN1_TIME *b);
+
+ASN1_GENERALIZEDTIME *ASN1_TIME_to_generalizedtime(ASN1_TIME *t,
+                                                   ASN1_GENERALIZEDTIME **out);
+ +

DESCRIPTION

+ +

The ASN1_TIME_set(), ASN1_UTCTIME_set() and ASN1_GENERALIZEDTIME_set() functions set the structure s to the time represented by the time_t value t. If s is NULL a new time structure is allocated and returned.

+ +

The ASN1_TIME_adj(), ASN1_UTCTIME_adj() and ASN1_GENERALIZEDTIME_adj() functions set the time structure s to the time represented by the time offset_day and offset_sec after the time_t value t. The values of offset_day or offset_sec can be negative to set a time before t. The offset_sec value can also exceed the number of seconds in a day. If s is NULL a new structure is allocated and returned.

+ +

The ASN1_TIME_set_string(), ASN1_UTCTIME_set_string() and ASN1_GENERALIZEDTIME_set_string() functions set the time structure s to the time represented by string str which must be in appropriate ASN.1 time format (for example YYMMDDHHMMSSZ or YYYYMMDDHHMMSSZ). If s is NULL this function performs a format check on str only. The string str is copied into s.

+ +

ASN1_TIME_set_string_X509() sets ASN1_TIME structure s to the time represented by string str which must be in appropriate time format that RFC 5280 requires, which means it only allows YYMMDDHHMMSSZ and YYYYMMDDHHMMSSZ (leap second is rejected), all other ASN.1 time format are not allowed. If s is NULL this function performs a format check on str only.

+ +

The ASN1_TIME_normalize() function converts an ASN1_GENERALIZEDTIME or ASN1_UTCTIME into a time value that can be used in a certificate. It should be used after the ASN1_TIME_set_string() functions and before ASN1_TIME_print() functions to get consistent (i.e. GMT) results.

+ +

The ASN1_TIME_check(), ASN1_UTCTIME_check() and ASN1_GENERALIZEDTIME_check() functions check the syntax of the time structure s.

+ +

The ASN1_TIME_print(), ASN1_UTCTIME_print() and ASN1_GENERALIZEDTIME_print() functions print the time structure s to BIO b in human readable format. It will be of the format MMM DD HH:MM:SS YYYY [GMT], for example "Feb 3 00:55:52 2015 GMT" it does not include a newline. If the time structure has invalid format it prints out "Bad time value" and returns an error. The output for generalized time may include a fractional part following the second.

+ +

ASN1_TIME_to_tm() converts the time s to the standard tm structure. If s is NULL, then the current time is converted. The output time is GMT. The tm_sec, tm_min, tm_hour, tm_mday, tm_wday, tm_yday, tm_mon and tm_year fields of tm structure are set to proper values, whereas all other fields are set to 0. If tm is NULL this function performs a format check on s only. If s is in Generalized format with fractional seconds, e.g. YYYYMMDDHHMMSS.SSSZ, the fractional seconds will be lost while converting s to tm structure.

+ +

ASN1_TIME_diff() sets *pday and *psec to the time difference between from and to. If to represents a time later than from then one or both (depending on the time difference) of *pday and *psec will be positive. If to represents a time earlier than from then one or both of *pday and *psec will be negative. If to and from represent the same time then *pday and *psec will both be zero. If both *pday and *psec are non-zero they will always have the same sign. The value of *psec will always be less than the number of seconds in a day. If from or to is NULL the current time is used.

+ +

The ASN1_TIME_cmp_time_t() and ASN1_UTCTIME_cmp_time_t() functions compare the two times represented by the time structure s and the time_t t.

+ +

The ASN1_TIME_compare() function compares the two times represented by the time structures a and b.

+ +

The ASN1_TIME_to_generalizedtime() function converts an ASN1_TIME to an ASN1_GENERALIZEDTIME, regardless of year. If either out or *out are NULL, then a new object is allocated and must be freed after use.

+ +

NOTES

+ +

The ASN1_TIME structure corresponds to the ASN.1 structure Time defined in RFC5280 et al. The time setting functions obey the rules outlined in RFC5280: if the date can be represented by UTCTime it is used, else GeneralizedTime is used.

+ +

The ASN1_TIME, ASN1_UTCTIME and ASN1_GENERALIZEDTIME structures are represented as an ASN1_STRING internally and can be freed up using ASN1_STRING_free().

+ +

The ASN1_TIME structure can represent years from 0000 to 9999 but no attempt is made to correct ancient calendar changes (for example from Julian to Gregorian calendars).

+ +

ASN1_UTCTIME is limited to a year range of 1950 through 2049.

+ +

Some applications add offset times directly to a time_t value and pass the results to ASN1_TIME_set() (or equivalent). This can cause problems as the time_t value can overflow on some systems resulting in unexpected results. New applications should use ASN1_TIME_adj() instead and pass the offset value in the offset_sec and offset_day parameters instead of directly manipulating a time_t value.

+ +

ASN1_TIME_adj() may change the type from ASN1_GENERALIZEDTIME to ASN1_UTCTIME, or vice versa, based on the resulting year. The ASN1_GENERALIZEDTIME_adj() and ASN1_UTCTIME_adj() functions will not modify the type of the return structure.

+ +

It is recommended that functions starting with ASN1_TIME be used instead of those starting with ASN1_UTCTIME or ASN1_GENERALIZEDTIME. The functions starting with ASN1_UTCTIME and ASN1_GENERALIZEDTIME act only on that specific time format. The functions starting with ASN1_TIME will operate on either format.

+ +

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 certificates complying with RFC5280 et al use GMT anyway.

+ +

Use the ASN1_TIME_normalize() function to normalize the time value before printing to get GMT results.

+ +

RETURN VALUES

+ +

ASN1_TIME_set(), ASN1_UTCTIME_set(), ASN1_GENERALIZEDTIME_set(), ASN1_TIME_adj(), ASN1_UTCTIME_adj and ASN1_GENERALIZEDTIME_set return a pointer to a time structure or NULL if an error occurred.

+ +

ASN1_TIME_set_string(), ASN1_UTCTIME_set_string(), ASN1_GENERALIZEDTIME_set_string() ASN1_TIME_set_string_X509() return 1 if the time value is successfully set and 0 otherwise.

+ +

ASN1_TIME_normalize() returns 1 on success, and 0 on error.

+ +

ASN1_TIME_check(), ASN1_UTCTIME_check and ASN1_GENERALIZEDTIME_check() return 1 if the structure is syntactically correct and 0 otherwise.

+ +

ASN1_TIME_print(), ASN1_UTCTIME_print() and ASN1_GENERALIZEDTIME_print() return 1 if the time is successfully printed out and 0 if an error occurred (I/O error or invalid time format).

+ +

ASN1_TIME_to_tm() returns 1 if the time is successfully parsed and 0 if an error occurred (invalid time format).

+ +

ASN1_TIME_diff() returns 1 for success and 0 for failure. It can fail if the passed-in time structure has invalid syntax, for example.

+ +

ASN1_TIME_cmp_time_t() and ASN1_UTCTIME_cmp_time_t() return -1 if s is before t, 0 if s equals t, or 1 if s is after t. -2 is returned on error.

+ +

ASN1_TIME_compare() returns -1 if a is before b, 0 if a equals b, or 1 if a is after b. -2 is returned on error.

+ +

ASN1_TIME_to_generalizedtime() returns a pointer to the appropriate time structure on success or NULL if an error occurred.

+ +

EXAMPLES

+ +

Set a time structure to one hour after the current time and print it out:

+ +
#include <time.h>
+#include <openssl/asn1.h>
+
+ASN1_TIME *tm;
+time_t t;
+BIO *b;
+
+t = time(NULL);
+tm = ASN1_TIME_adj(NULL, t, 0, 60 * 60);
+b = BIO_new_fp(stdout, BIO_NOCLOSE);
+ASN1_TIME_print(b, tm);
+ASN1_STRING_free(tm);
+BIO_free(b);
+ +

Determine if one time is later or sooner than the current time:

+ +
int day, sec;
+
+if (!ASN1_TIME_diff(&day, &sec, NULL, to))
+    /* Invalid time format */
+
+if (day > 0 || sec > 0)
+    printf("Later\n");
+else if (day < 0 || sec < 0)
+    printf("Sooner\n");
+else
+    printf("Same\n");
+ +

HISTORY

+ +

The ASN1_TIME_to_tm() function was added in OpenSSL 1.1.1. The ASN1_TIME_set_string_X509() function was added in OpenSSL 1.1.1. The ASN1_TIME_normalize() function was added in OpenSSL 1.1.1. The ASN1_TIME_cmp_time_t() function was added in OpenSSL 1.1.1. The ASN1_TIME_compare() function was added in OpenSSL 1.1.1.

+ +

COPYRIGHT

+ +

Copyright 2015-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ASN1_TYPE_get.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ASN1_TYPE_get.html new file mode 100644 index 00000000..f2526bc3 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ASN1_TYPE_get.html @@ -0,0 +1,89 @@ + + + + +ASN1_TYPE_get + + + + + + + + + + +

NAME

+ +

ASN1_TYPE_get, ASN1_TYPE_set, ASN1_TYPE_set1, ASN1_TYPE_cmp, ASN1_TYPE_unpack_sequence, ASN1_TYPE_pack_sequence - ASN1_TYPE utility functions

+ +

SYNOPSIS

+ +
#include <openssl/asn1.h>
+
+int ASN1_TYPE_get(const ASN1_TYPE *a);
+void ASN1_TYPE_set(ASN1_TYPE *a, int type, void *value);
+int ASN1_TYPE_set1(ASN1_TYPE *a, int type, const void *value);
+int ASN1_TYPE_cmp(const ASN1_TYPE *a, const ASN1_TYPE *b);
+
+void *ASN1_TYPE_unpack_sequence(const ASN1_ITEM *it, const ASN1_TYPE *t);
+ASN1_TYPE *ASN1_TYPE_pack_sequence(const ASN1_ITEM *it, void *s,
+                                   ASN1_TYPE **t);
+ +

DESCRIPTION

+ +

These functions allow an ASN1_TYPE structure to be manipulated. The ASN1_TYPE structure can contain any ASN.1 type or constructed type such as a SEQUENCE: it is effectively equivalent to the ASN.1 ANY type.

+ +

ASN1_TYPE_get() returns the type of a.

+ +

ASN1_TYPE_set() sets the value of a to type and value. This function uses the pointer value internally so it must not be freed up after the call.

+ +

ASN1_TYPE_set1() sets the value of a to type a copy of value.

+ +

ASN1_TYPE_cmp() compares ASN.1 types a and b and returns 0 if they are identical and non-zero otherwise.

+ +

ASN1_TYPE_unpack_sequence() attempts to parse the SEQUENCE present in t using the ASN.1 structure it. If successful it returns a pointer to the ASN.1 structure corresponding to it which must be freed by the caller. If it fails it return NULL.

+ +

ASN1_TYPE_pack_sequence() attempts to encode the ASN.1 structure s corresponding to it into an ASN1_TYPE. If successful the encoded ASN1_TYPE is returned. If t and *t are not NULL the encoded type is written to t overwriting any existing data. If t is not NULL but *t is NULL the returned ASN1_TYPE is written to *t.

+ +

NOTES

+ +

The type and meaning of the value parameter for ASN1_TYPE_set() and ASN1_TYPE_set1() is determined by the type parameter. If type is V_ASN1_NULL value is ignored. If type is V_ASN1_BOOLEAN then the boolean is set to TRUE if value is not NULL. If type is V_ASN1_OBJECT then value is an ASN1_OBJECT structure. Otherwise type is and ASN1_STRING structure. If type corresponds to a primitive type (or a string type) then the contents of the ASN1_STRING contain the content octets of the type. If type corresponds to a constructed type or a tagged type (V_ASN1_SEQUENCE, V_ASN1_SET or V_ASN1_OTHER) then the ASN1_STRING contains the entire ASN.1 encoding verbatim (including tag and 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 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 NULL values could also indicate a programming error (for example an unparsable type which returns NULL) for types which do not match. So applications should handle the case of two absent values separately.

+ +

RETURN VALUES

+ +

ASN1_TYPE_get() returns the type of the ASN1_TYPE argument.

+ +

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_unpack_sequence() returns a pointer to an ASN.1 structure or NULL on failure.

+ +

ASN1_TYPE_pack_sequence() return an ASN1_TYPE structure if it succeeds or NULL on failure.

+ +

COPYRIGHT

+ +

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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ASN1_generate_nconf.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ASN1_generate_nconf.html new file mode 100644 index 00000000..faee7086 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ASN1_generate_nconf.html @@ -0,0 +1,274 @@ + + + + +ASN1_generate_nconf + + + + + + + + + + +

NAME

+ +

ASN1_generate_nconf, ASN1_generate_v3 - ASN1 generation functions

+ +

SYNOPSIS

+ +
#include <openssl/asn1.h>
+
+ASN1_TYPE *ASN1_generate_nconf(const char *str, CONF *nconf);
+ASN1_TYPE *ASN1_generate_v3(const char *str, X509V3_CTX *cnf);
+ +

DESCRIPTION

+ +

These functions generate the ASN1 encoding of a string in an ASN1_TYPE structure.

+ +

str contains the string to encode nconf or cnf contains the optional configuration information where additional strings will be read from. nconf will typically come from a config file whereas cnf is obtained from an X509V3_CTX structure which will typically be used by X509 v3 certificate extension functions. cnf or nconf can be set to NULL if no additional configuration will be used.

+ +

GENERATION STRING FORMAT

+ +

The actual data encoded is determined by the string str and the configuration information. The general format of the string is:

+ +
+ +
[modifier,]type[:value]
+
+ +
+
+ +

That is zero or more comma separated modifiers followed by a type followed by an optional colon and a value. The formats of type, value and modifier are explained below.

+ +

Supported Types

+ +

The supported types are listed below. Unless otherwise specified only the ASCII format is permissible.

+ +
+ +
BOOLEAN, BOOL
+
+ +

This encodes a boolean type. The value string is mandatory and should be TRUE or FALSE. Additionally TRUE, true, Y, y, YES, yes, FALSE, false, N, n, NO and no are acceptable.

+ +
+
NULL
+
+ +

Encode the NULL type, the value string must not be present.

+ +
+
INTEGER, INT
+
+ +

Encodes an ASN1 INTEGER type. The value string represents the value of the integer, it can be prefaced by a minus sign and is normally interpreted as a decimal value unless the prefix 0x is included.

+ +
+
ENUMERATED, ENUM
+
+ +

Encodes the ASN1 ENUMERATED type, it is otherwise identical to INTEGER.

+ +
+
OBJECT, OID
+
+ +

Encodes an ASN1 OBJECT IDENTIFIER, the value string can be a short name, a long name or numerical format.

+ +
+
UTCTIME, UTC
+
+ +

Encodes an ASN1 UTCTime structure, the value should be in the format YYMMDDHHMMSSZ.

+ +
+
GENERALIZEDTIME, GENTIME
+
+ +

Encodes an ASN1 GeneralizedTime structure, the value should be in the format YYYYMMDDHHMMSSZ.

+ +
+
OCTETSTRING, OCT
+
+ +

Encodes an ASN1 OCTET STRING. value represents the contents of this structure, the format strings ASCII and HEX can be used to specify the format of value.

+ +
+
BITSTRING, BITSTR
+
+ +

Encodes an ASN1 BIT STRING. value represents the contents of this structure, the format strings ASCII, HEX and BITLIST can be used to specify the format of value.

+ +

If the format is anything other than BITLIST the number of unused bits is set to zero.

+ +
+
UNIVERSALSTRING, UNIV, IA5, IA5STRING, UTF8, UTF8String, BMP, BMPSTRING, VISIBLESTRING, VISIBLE, PRINTABLESTRING, PRINTABLE, T61, T61STRING, TELETEXSTRING, GeneralString, NUMERICSTRING, NUMERIC
+
+ +

These encode the corresponding string types. value represents the contents of this structure. The format can be ASCII or UTF8.

+ +
+
SEQUENCE, SEQ, SET
+
+ +

Formats the result as an ASN1 SEQUENCE or SET type. value should be a section name which will contain the contents. The field names in the section are ignored and the values are in the generated string format. If value is absent then an empty SEQUENCE will be encoded.

+ +
+
+ +

Modifiers

+ +

Modifiers affect the following structure, they can be used to add EXPLICIT or IMPLICIT tagging, add wrappers or to change the string format of the final type and value. The supported formats are documented below.

+ +
+ +
EXPLICIT, EXP
+
+ +

Add an explicit tag to the following structure. This string should be followed by a colon and the tag value to use as a decimal value.

+ +

By following the number with U, A, P or C UNIVERSAL, APPLICATION, PRIVATE or CONTEXT SPECIFIC tagging can be used, the default is CONTEXT SPECIFIC.

+ +
+
IMPLICIT, IMP
+
+ +

This is the same as EXPLICIT except IMPLICIT tagging is used instead.

+ +
+
OCTWRAP, SEQWRAP, SETWRAP, BITWRAP
+
+ +

The following structure is surrounded by an OCTET STRING, a SEQUENCE, a SET or a BIT STRING respectively. For a BIT STRING the number of unused bits is set to zero.

+ +
+
FORMAT
+
+ +

This specifies the format of the ultimate value. It should be followed by a colon and one of the strings ASCII, UTF8, HEX or BITLIST.

+ +

If no format specifier is included then ASCII is used. If UTF8 is specified then the value string must be a valid UTF8 string. For HEX the output must be a set of hex digits. BITLIST (which is only valid for a BIT STRING) is a comma separated list of the indices of the set bits, all other bits are zero.

+ +
+
+ +

RETURN VALUES

+ +

ASN1_generate_nconf() and ASN1_generate_v3() return the encoded data as an ASN1_TYPE structure or NULL if an error occurred.

+ +

The error codes that can be obtained by ERR_get_error(3).

+ +

EXAMPLES

+ +

A simple IA5String:

+ +
IA5STRING:Hello World
+ +

An IA5String explicitly tagged:

+ +
EXPLICIT:0,IA5STRING:Hello World
+ +

An IA5String explicitly tagged using APPLICATION tagging:

+ +
EXPLICIT:0A,IA5STRING:Hello World
+ +

A BITSTRING with bits 1 and 5 set and all others zero:

+ +
FORMAT:BITLIST,BITSTRING:1,5
+ +

A more complex example using a config file to produce a SEQUENCE consisting of a BOOL an OID and a UTF8String:

+ +
asn1 = SEQUENCE:seq_section
+
+[seq_section]
+
+field1 = BOOLEAN:TRUE
+field2 = OID:commonName
+field3 = UTF8:Third field
+ +

This example produces an RSAPrivateKey structure, this is the key contained in the file client.pem in all OpenSSL distributions (note: the field names such as 'coeff' are ignored and are present just for clarity):

+ +
asn1=SEQUENCE:private_key
+[private_key]
+version=INTEGER:0
+
+n=INTEGER:0xBB6FE79432CC6EA2D8F970675A5A87BFBE1AFF0BE63E879F2AFFB93644\
+D4D2C6D000430DEC66ABF47829E74B8C5108623A1C0EE8BE217B3AD8D36D5EB4FCA1D9
+
+e=INTEGER:0x010001
+
+d=INTEGER:0x6F05EAD2F27FFAEC84BEC360C4B928FD5F3A9865D0FCAAD291E2A52F4A\
+F810DC6373278C006A0ABBA27DC8C63BF97F7E666E27C5284D7D3B1FFFE16B7A87B51D
+
+p=INTEGER:0xF3929B9435608F8A22C208D86795271D54EBDFB09DDEF539AB083DA912\
+D4BD57
+
+q=INTEGER:0xC50016F89DFF2561347ED1186A46E150E28BF2D0F539A1594BBD7FE467\
+46EC4F
+
+exp1=INTEGER:0x9E7D4326C924AFC1DEA40B45650134966D6F9DFA3A7F9D698CD4ABEA\
+9C0A39B9
+
+exp2=INTEGER:0xBA84003BB95355AFB7C50DF140C60513D0BA51D637272E355E397779\
+E7B2458F
+
+coeff=INTEGER:0x30B9E4F2AFA5AC679F920FC83F1F2DF1BAF1779CF989447FABC2F5\
+628657053A
+ +

This example is the corresponding public key in a SubjectPublicKeyInfo structure:

+ +
# Start with a SEQUENCE
+asn1=SEQUENCE:pubkeyinfo
+
+# pubkeyinfo contains an algorithm identifier and the public key wrapped
+# in a BIT STRING
+[pubkeyinfo]
+algorithm=SEQUENCE:rsa_alg
+pubkey=BITWRAP,SEQUENCE:rsapubkey
+
+# algorithm ID for RSA is just an OID and a NULL
+[rsa_alg]
+algorithm=OID:rsaEncryption
+parameter=NULL
+
+# Actual public key: modulus and exponent
+[rsapubkey]
+n=INTEGER:0xBB6FE79432CC6EA2D8F970675A5A87BFBE1AFF0BE63E879F2AFFB93644\
+D4D2C6D000430DEC66ABF47829E74B8C5108623A1C0EE8BE217B3AD8D36D5EB4FCA1D9
+
+e=INTEGER:0x010001
+ +

SEE ALSO

+ +

ERR_get_error(3)

+ +

COPYRIGHT

+ +

Copyright 2002-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ASYNC_WAIT_CTX_new.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ASYNC_WAIT_CTX_new.html new file mode 100644 index 00000000..fc33210b --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ASYNC_WAIT_CTX_new.html @@ -0,0 +1,96 @@ + + + + +ASYNC_WAIT_CTX_new + + + + + + + + + + +

NAME

+ +

ASYNC_WAIT_CTX_new, ASYNC_WAIT_CTX_free, ASYNC_WAIT_CTX_set_wait_fd, ASYNC_WAIT_CTX_get_fd, ASYNC_WAIT_CTX_get_all_fds, ASYNC_WAIT_CTX_get_changed_fds, ASYNC_WAIT_CTX_clear_fd - functions to manage waiting for asynchronous jobs to complete

+ +

SYNOPSIS

+ +
#include <openssl/async.h>
+
+ASYNC_WAIT_CTX *ASYNC_WAIT_CTX_new(void);
+void ASYNC_WAIT_CTX_free(ASYNC_WAIT_CTX *ctx);
+int ASYNC_WAIT_CTX_set_wait_fd(ASYNC_WAIT_CTX *ctx, const void *key,
+                               OSSL_ASYNC_FD fd,
+                               void *custom_data,
+                               void (*cleanup)(ASYNC_WAIT_CTX *, const void *,
+                                               OSSL_ASYNC_FD, void *));
+int ASYNC_WAIT_CTX_get_fd(ASYNC_WAIT_CTX *ctx, const void *key,
+                          OSSL_ASYNC_FD *fd, void **custom_data);
+int ASYNC_WAIT_CTX_get_all_fds(ASYNC_WAIT_CTX *ctx, OSSL_ASYNC_FD *fd,
+                               size_t *numfds);
+int ASYNC_WAIT_CTX_get_changed_fds(ASYNC_WAIT_CTX *ctx, OSSL_ASYNC_FD *addfd,
+                                   size_t *numaddfds, OSSL_ASYNC_FD *delfd,
+                                   size_t *numdelfds);
+int ASYNC_WAIT_CTX_clear_fd(ASYNC_WAIT_CTX *ctx, const void *key);
+ +

DESCRIPTION

+ +

For an overview of how asynchronous operations are implemented in OpenSSL see ASYNC_start_job(3). An ASYNC_WAIT_CTX object represents an asynchronous "session", i.e. a related set of crypto operations. For example in SSL terms this would have a one-to-one correspondence with an SSL connection.

+ +

Application code must create an ASYNC_WAIT_CTX using the ASYNC_WAIT_CTX_new() function prior to calling ASYNC_start_job() (see ASYNC_start_job(3)). When the job is started it is associated with the ASYNC_WAIT_CTX for the duration of that job. An ASYNC_WAIT_CTX should only be used for one ASYNC_JOB at any one time, but can be reused after an ASYNC_JOB has finished for a subsequent ASYNC_JOB. When the session is complete (e.g. the SSL connection is closed), application code cleans up with ASYNC_WAIT_CTX_free().

+ +

ASYNC_WAIT_CTXs can have "wait" file descriptors associated with them. Calling ASYNC_WAIT_CTX_get_all_fds() and passing in a pointer to an ASYNC_WAIT_CTX in the ctx parameter will return the wait file descriptors associated with that job in *fd. The number of file descriptors returned will be stored in *numfds. It is the caller's responsibility to ensure that sufficient memory has been allocated in *fd to receive all the file descriptors. Calling ASYNC_WAIT_CTX_get_all_fds() with a NULL fd value will return no file descriptors but will still populate *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 one fd. If multiple asynchronous engines are being used then more could be returned.

+ +

The function ASYNC_WAIT_CTX_get_changed_fds() can be used to detect if any fds have changed since the last call time ASYNC_start_job() returned an ASYNC_PAUSE result (or since the ASYNC_WAIT_CTX was created if no ASYNC_PAUSE result has been received). The numaddfds and numdelfds parameters will be populated with the number of fds added or deleted respectively. *addfd and *delfd will be populated with the list of added and deleted fds respectively. Similarly to ASYNC_WAIT_CTX_get_all_fds() either of these can be NULL, but if they are not NULL then the caller is responsible for ensuring sufficient memory is allocated.

+ +

Implementors of async aware code (e.g. engines) are encouraged to return a stable fd for the lifetime of the ASYNC_WAIT_CTX in order to reduce the "churn" of regularly changing fds - although no guarantees of this are provided to applications.

+ +

Applications can wait for the file descriptor to be ready for "read" using a system function call such as select or poll (being ready for "read" indicates that the job should be resumed). If no file descriptor is made available then an application will have to periodically "poll" the job by attempting to restart it to see if it is ready to continue.

+ +

Async aware code (e.g. engines) can get the current ASYNC_WAIT_CTX from the job via ASYNC_get_wait_ctx(3) and provide a file descriptor to use for waiting on by calling ASYNC_WAIT_CTX_set_wait_fd(). Typically this would be done by an engine immediately prior to calling ASYNC_pause_job() and not by end user code. An existing association with a file descriptor can be obtained using ASYNC_WAIT_CTX_get_fd() and cleared using ASYNC_WAIT_CTX_clear_fd(). Both of these functions requires a key value which is unique to the async aware code. This could be any unique value but a good candidate might be the ENGINE * for the engine. The custom_data parameter can be any value, and will be returned in a subsequent call to ASYNC_WAIT_CTX_get_fd(). The ASYNC_WAIT_CTX_set_wait_fd() function also expects a pointer to a "cleanup" routine. This can be NULL but if provided will automatically get called when the ASYNC_WAIT_CTX is freed, and gives the engine the opportunity to close the fd or any other resources. Note: The "cleanup" routine does not get called if the fd is cleared directly via a call to ASYNC_WAIT_CTX_clear_fd().

+ +

An example of typical usage might be an async capable engine. User code would initiate cryptographic operations. The engine would initiate those operations asynchronously and then call ASYNC_WAIT_CTX_set_wait_fd() followed by ASYNC_pause_job() to return control to the user code. The user code can then perform other tasks or wait for the job to be ready by calling "select" or other similar function on the wait file descriptor. The engine can signal to the user code that the job should be resumed by making the wait file descriptor "readable". Once resumed the engine should clear the wake signal on the wait file descriptor.

+ +

RETURN VALUES

+ +

ASYNC_WAIT_CTX_new() returns a pointer to the newly allocated ASYNC_WAIT_CTX or NULL on error.

+ +

ASYNC_WAIT_CTX_set_wait_fd, ASYNC_WAIT_CTX_get_fd, ASYNC_WAIT_CTX_get_all_fds, ASYNC_WAIT_CTX_get_changed_fds and ASYNC_WAIT_CTX_clear_fd all return 1 on success or 0 on error.

+ +

NOTES

+ +

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 it is defined as an application developer's responsibility to include windows.h prior to async.h.

+ +

SEE ALSO

+ +

crypto(7), ASYNC_start_job(3)

+ +

HISTORY

+ +

ASYNC_WAIT_CTX_new(), ASYNC_WAIT_CTX_free(), ASYNC_WAIT_CTX_set_wait_fd(), ASYNC_WAIT_CTX_get_fd(), ASYNC_WAIT_CTX_get_all_fds(), ASYNC_WAIT_CTX_get_changed_fds() and ASYNC_WAIT_CTX_clear_fd() were added in OpenSSL 1.1.0.

+ +

COPYRIGHT

+ +

Copyright 2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ASYNC_start_job.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ASYNC_start_job.html new file mode 100644 index 00000000..b7f8c77b --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ASYNC_start_job.html @@ -0,0 +1,273 @@ + + + + +ASYNC_start_job + + + + + + + + + + +

NAME

+ +

ASYNC_get_wait_ctx, ASYNC_init_thread, ASYNC_cleanup_thread, ASYNC_start_job, ASYNC_pause_job, ASYNC_get_current_job, ASYNC_block_pause, ASYNC_unblock_pause, ASYNC_is_capable - asynchronous job management functions

+ +

SYNOPSIS

+ +
#include <openssl/async.h>
+
+int ASYNC_init_thread(size_t max_size, size_t init_size);
+void ASYNC_cleanup_thread(void);
+
+int ASYNC_start_job(ASYNC_JOB **job, ASYNC_WAIT_CTX *ctx, int *ret,
+                    int (*func)(void *), void *args, size_t size);
+int ASYNC_pause_job(void);
+
+ASYNC_JOB *ASYNC_get_current_job(void);
+ASYNC_WAIT_CTX *ASYNC_get_wait_ctx(ASYNC_JOB *job);
+void ASYNC_block_pause(void);
+void ASYNC_unblock_pause(void);
+
+int ASYNC_is_capable(void);
+ +

DESCRIPTION

+ +

OpenSSL implements asynchronous capabilities through an ASYNC_JOB. This represents code that can be started and executes until some event occurs. At that point the code can be paused and control returns to user code until some subsequent event indicates that the job can be resumed.

+ +

The creation of an ASYNC_JOB is a relatively expensive operation. Therefore, for efficiency reasons, jobs can be created up front and reused many times. They are held in a pool until they are needed, at which point they are removed from the pool, used, and then returned to the pool when the job completes. If the user application is multi-threaded, then ASYNC_init_thread() may be called for each thread that will initiate asynchronous jobs. Before user code exits per-thread resources need to be cleaned up. This will normally occur automatically (see OPENSSL_init_crypto(3)) but may be explicitly initiated by using ASYNC_cleanup_thread(). No asynchronous jobs must be outstanding for the thread when ASYNC_cleanup_thread() is called. Failing to ensure this will result in memory leaks.

+ +

The max_size argument limits the number of ASYNC_JOBs that will be held in the pool. If max_size is set to 0 then no upper limit is set. When an ASYNC_JOB is needed but there are none available in the pool already then one will be automatically created, as long as the total of ASYNC_JOBs managed by the pool does not exceed max_size. When the pool is first initialised init_size ASYNC_JOBs will be created immediately. If ASYNC_init_thread() is not called before the pool is first used then it will be called automatically with a max_size of 0 (no upper limit) and an init_size of 0 (no ASYNC_JOBs created up front).

+ +

An asynchronous job is started by calling the ASYNC_start_job() function. Initially *job should be NULL. ctx should point to an ASYNC_WAIT_CTX object created through the ASYNC_WAIT_CTX_new(3) function. ret should point to a location where the return value of the asynchronous function should be stored on completion of the job. func represents the function that should be started asynchronously. The data pointed to by args and of size size will be copied and then passed as an argument to func when the job starts. ASYNC_start_job will return one of the following values:

+ +
+ +
ASYNC_ERR
+
+ +

An error occurred trying to start the job. Check the OpenSSL error queue (e.g. see ERR_print_errors(3)) for more details.

+ +
+
ASYNC_NO_JOBS
+
+ +

There are no jobs currently available in the pool. This call can be retried again at a later time.

+ +
+
ASYNC_PAUSE
+
+ +

The job was successfully started but was "paused" before it completed (see ASYNC_pause_job() below). A handle to the job is placed in *job. Other work can be performed (if desired) and the job restarted at a later time. To restart a job call ASYNC_start_job() again passing the job handle in *job. The func, args and size parameters will be ignored when restarting a job. When restarting a job ASYNC_start_job() must be called from the same thread that the job was originally started from.

+ +
+
ASYNC_FINISH
+
+ +

The job completed. *job will be NULL and the return value from func will be placed in *ret.

+ +
+
+ +

At any one time there can be a maximum of one job actively running per thread (you can have many that are paused). ASYNC_get_current_job() can be used to get a pointer to the currently executing ASYNC_JOB. If no job is currently executing then this will return NULL.

+ +

If executing within the context of a job (i.e. having been called directly or indirectly by the function "func" passed as an argument to ASYNC_start_job()) then ASYNC_pause_job() will immediately return control to the calling application with ASYNC_PAUSE returned from the ASYNC_start_job() call. A subsequent call to ASYNC_start_job passing in the relevant ASYNC_JOB in the *job parameter will resume execution from the ASYNC_pause_job() call. If ASYNC_pause_job() is called whilst not within the context of a job then no action is taken and ASYNC_pause_job() returns immediately.

+ +

ASYNC_get_wait_ctx() can be used to get a pointer to the ASYNC_WAIT_CTX for the job. ASYNC_WAIT_CTXs can have a "wait" file descriptor associated with them. Applications can wait for the file descriptor to be ready for "read" using a system function call such as select or poll (being ready for "read" indicates that the job should be resumed). If no file descriptor is made available then an application will have to periodically "poll" the job by attempting to restart it to see if it is ready to continue.

+ +

An example of typical usage might be an async capable engine. User code would initiate cryptographic operations. The engine would initiate those operations asynchronously and then call ASYNC_WAIT_CTX_set_wait_fd(3) followed by ASYNC_pause_job() to return control to the user code. The user code can then perform other tasks or wait for the job to be ready by calling "select" or other similar function on the wait file descriptor. The engine can signal to the user code that the job should be resumed by making the wait file descriptor "readable". Once resumed the engine should clear the wake signal on the wait file descriptor.

+ +

The ASYNC_block_pause() function will prevent the currently active job from pausing. The block will remain in place until a subsequent call to ASYNC_unblock_pause(). These functions can be nested, e.g. if you call ASYNC_block_pause() twice then you must call ASYNC_unblock_pause() twice in order to re-enable pausing. If these functions are called while there is no currently active job then they have no effect. This functionality can be useful to avoid deadlock scenarios. For example during the execution of an ASYNC_JOB an application acquires a lock. It then calls some cryptographic function which invokes ASYNC_pause_job(). This returns control back to the code that created the ASYNC_JOB. If that code then attempts to acquire the same lock before resuming the original job then a deadlock can occur. By calling ASYNC_block_pause() immediately after acquiring the lock and ASYNC_unblock_pause() immediately before releasing it then this situation cannot occur.

+ +

Some platforms cannot support async operations. The ASYNC_is_capable() function can be used to detect whether the current platform is async capable or not.

+ +

RETURN VALUES

+ +

ASYNC_init_thread returns 1 on success or 0 otherwise.

+ +

ASYNC_start_job returns one of ASYNC_ERR, ASYNC_NO_JOBS, ASYNC_PAUSE or ASYNC_FINISH as described above.

+ +

ASYNC_pause_job returns 0 if an error occurred or 1 on success. If called when not within the context of an ASYNC_JOB then this is counted as success so 1 is returned.

+ +

ASYNC_get_current_job returns a pointer to the currently executing ASYNC_JOB or NULL if not within the context of a job.

+ +

ASYNC_get_wait_ctx() returns a pointer to the ASYNC_WAIT_CTX for the job.

+ +

ASYNC_is_capable() returns 1 if the current platform is async capable or 0 otherwise.

+ +

NOTES

+ +

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 it is defined as an application developer's responsibility to include windows.h prior to async.h.

+ +

EXAMPLES

+ +

The following example demonstrates how to use most of the core async APIs:

+ +
#ifdef _WIN32
+# include <windows.h>
+#endif
+#include <stdio.h>
+#include <unistd.h>
+#include <openssl/async.h>
+#include <openssl/crypto.h>
+
+int unique = 0;
+
+void cleanup(ASYNC_WAIT_CTX *ctx, const void *key, OSSL_ASYNC_FD r, void *vw)
+{
+    OSSL_ASYNC_FD *w = (OSSL_ASYNC_FD *)vw;
+
+    close(r);
+    close(*w);
+    OPENSSL_free(w);
+}
+
+int jobfunc(void *arg)
+{
+    ASYNC_JOB *currjob;
+    unsigned char *msg;
+    int pipefds[2] = {0, 0};
+    OSSL_ASYNC_FD *wptr;
+    char buf = 'X';
+
+    currjob = ASYNC_get_current_job();
+    if (currjob != NULL) {
+        printf("Executing within a job\n");
+    } else {
+        printf("Not executing within a job - should not happen\n");
+        return 0;
+    }
+
+    msg = (unsigned char *)arg;
+    printf("Passed in message is: %s\n", msg);
+
+    if (pipe(pipefds) != 0) {
+        printf("Failed to create pipe\n");
+        return 0;
+    }
+    wptr = OPENSSL_malloc(sizeof(OSSL_ASYNC_FD));
+    if (wptr == NULL) {
+        printf("Failed to malloc\n");
+        return 0;
+    }
+    *wptr = pipefds[1];
+    ASYNC_WAIT_CTX_set_wait_fd(ASYNC_get_wait_ctx(currjob), &unique,
+                               pipefds[0], wptr, cleanup);
+
+    /*
+     * Normally some external event would cause this to happen at some
+     * later point - but we do it here for demo purposes, i.e.
+     * immediately signalling that the job is ready to be woken up after
+     * we return to main via ASYNC_pause_job().
+     */
+    write(pipefds[1], &buf, 1);
+
+    /* Return control back to main */
+    ASYNC_pause_job();
+
+    /* Clear the wake signal */
+    read(pipefds[0], &buf, 1);
+
+    printf ("Resumed the job after a pause\n");
+
+    return 1;
+}
+
+int main(void)
+{
+    ASYNC_JOB *job = NULL;
+    ASYNC_WAIT_CTX *ctx = NULL;
+    int ret;
+    OSSL_ASYNC_FD waitfd;
+    fd_set waitfdset;
+    size_t numfds;
+    unsigned char msg[13] = "Hello world!";
+
+    printf("Starting...\n");
+
+    ctx = ASYNC_WAIT_CTX_new();
+    if (ctx == NULL) {
+        printf("Failed to create ASYNC_WAIT_CTX\n");
+        abort();
+    }
+
+    for (;;) {
+        switch (ASYNC_start_job(&job, ctx, &ret, jobfunc, msg, sizeof(msg))) {
+        case ASYNC_ERR:
+        case ASYNC_NO_JOBS:
+            printf("An error occurred\n");
+            goto end;
+        case ASYNC_PAUSE:
+            printf("Job was paused\n");
+            break;
+        case ASYNC_FINISH:
+            printf("Job finished with return value %d\n", ret);
+            goto end;
+        }
+
+        /* Wait for the job to be woken */
+        printf("Waiting for the job to be woken up\n");
+
+        if (!ASYNC_WAIT_CTX_get_all_fds(ctx, NULL, &numfds)
+                || numfds > 1) {
+            printf("Unexpected number of fds\n");
+            abort();
+        }
+        ASYNC_WAIT_CTX_get_all_fds(ctx, &waitfd, &numfds);
+        FD_ZERO(&waitfdset);
+        FD_SET(waitfd, &waitfdset);
+        select(waitfd + 1, &waitfdset, NULL, NULL, NULL);
+    }
+
+end:
+    ASYNC_WAIT_CTX_free(ctx);
+    printf("Finishing\n");
+
+    return 0;
+}
+ +

The expected output from executing the above example program is:

+ +
Starting...
+Executing within a job
+Passed in message is: Hello world!
+Job was paused
+Waiting for the job to be woken up
+Resumed the job after a pause
+Job finished with return value 1
+Finishing
+ +

SEE ALSO

+ +

crypto(7), ERR_print_errors(3)

+ +

HISTORY

+ +

ASYNC_init_thread, ASYNC_cleanup_thread, ASYNC_start_job, ASYNC_pause_job, ASYNC_get_current_job, ASYNC_get_wait_ctx(), ASYNC_block_pause(), ASYNC_unblock_pause() and ASYNC_is_capable() were first added in OpenSSL 1.1.0.

+ +

COPYRIGHT

+ +

Copyright 2015-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BF_encrypt.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BF_encrypt.html new file mode 100644 index 00000000..781f1f8c --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BF_encrypt.html @@ -0,0 +1,95 @@ + + + + +BF_encrypt + + + + + + + + + + +

NAME

+ +

BF_set_key, BF_encrypt, BF_decrypt, BF_ecb_encrypt, BF_cbc_encrypt, BF_cfb64_encrypt, BF_ofb64_encrypt, BF_options - Blowfish encryption

+ +

SYNOPSIS

+ +
#include <openssl/blowfish.h>
+
+void BF_set_key(BF_KEY *key, int len, const unsigned char *data);
+
+void BF_ecb_encrypt(const unsigned char *in, unsigned char *out,
+                    BF_KEY *key, int enc);
+void BF_cbc_encrypt(const unsigned char *in, unsigned char *out,
+                    long length, BF_KEY *schedule,
+                    unsigned char *ivec, int enc);
+void BF_cfb64_encrypt(const unsigned char *in, unsigned char *out,
+                      long length, BF_KEY *schedule,
+                      unsigned char *ivec, int *num, int enc);
+void BF_ofb64_encrypt(const unsigned char *in, unsigned char *out,
+                      long length, BF_KEY *schedule,
+                      unsigned char *ivec, int *num);
+const char *BF_options(void);
+
+void BF_encrypt(BF_LONG *data, const BF_KEY *key);
+void BF_decrypt(BF_LONG *data, const BF_KEY *key);
+ +

DESCRIPTION

+ +

This library implements the Blowfish cipher, which was invented and described by Counterpane (see http://www.counterpane.com/blowfish.html ).

+ +

Blowfish is a block cipher that operates on 64 bit (8 byte) blocks of data. It uses a variable size key, but typically, 128 bit (16 byte) keys are considered good for strong encryption. Blowfish can be used in the same modes as DES (see des_modes(7)). Blowfish is currently one of the faster block ciphers. It is quite a bit faster than DES, and much faster than IDEA or RC2.

+ +

Blowfish consists of a key setup phase and the actual encryption or decryption phase.

+ +

BF_set_key() sets up the BF_KEY key using the len bytes long key at data.

+ +

BF_ecb_encrypt() is the basic Blowfish encryption and decryption function. It encrypts or decrypts the first 64 bits of in using the key key, putting the result in out. enc decides if encryption (BF_ENCRYPT) or decryption (BF_DECRYPT) shall be performed. The vector pointed at by in and out must be 64 bits in length, no less. If they are larger, everything after the first 64 bits is ignored.

+ +

The mode functions BF_cbc_encrypt(), BF_cfb64_encrypt() and BF_ofb64_encrypt() all operate on variable length data. They all take an initialization vector ivec which needs to be passed along into the next call of the same function for the same message. ivec may be initialized with anything, but the 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 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 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 num, which is a pointer to an integer where the current offset in ivec is stored between calls. This integer must be initialized to zero when ivec is initialized.

+ +

BF_cbc_encrypt() is the Cipher Block Chaining function for Blowfish. It encrypts or decrypts the 64 bits chunks of in using the key schedule, putting the result in out. enc decides if encryption (BF_ENCRYPT) or decryption (BF_DECRYPT) shall be performed. ivec must point at an 8 byte long initialization vector.

+ +

BF_cfb64_encrypt() is the CFB mode for Blowfish with 64 bit feedback. It encrypts or decrypts the bytes in in using the key schedule, putting the result in out. enc decides if encryption (BF_ENCRYPT) or decryption (BF_DECRYPT) shall be performed. ivec must point at an 8 byte long initialization vector. num must point at an integer which must be initially zero.

+ +

BF_ofb64_encrypt() is the OFB mode for Blowfish with 64 bit feedback. It uses the same parameters as BF_cfb64_encrypt(), which must be initialized the same way.

+ +

BF_encrypt() and BF_decrypt() are the lowest level functions for Blowfish encryption. They encrypt/decrypt the first 64 bits of the vector pointed by data, using the key key. These functions should not be used unless you implement 'modes' of Blowfish. The alternative is to use BF_ecb_encrypt(). If you still want to use these functions, you should be aware that they take each 32-bit chunk in host-byte order, which is little-endian on little-endian platforms and big-endian on big-endian ones.

+ +

RETURN VALUES

+ +

None of the functions presented here return any value.

+ +

NOTE

+ +

Applications should use the higher level functions EVP_EncryptInit(3) etc. instead of calling these functions directly.

+ +

SEE ALSO

+ +

EVP_EncryptInit(3), des_modes(7)

+ +

COPYRIGHT

+ +

Copyright 2000-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_ADDR.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_ADDR.html new file mode 100644 index 00000000..d2e27afc --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_ADDR.html @@ -0,0 +1,96 @@ + + + + +BIO_ADDR + + + + + + + + + + +

NAME

+ +

BIO_ADDR, BIO_ADDR_new, BIO_ADDR_clear, BIO_ADDR_free, BIO_ADDR_rawmake, BIO_ADDR_family, BIO_ADDR_rawaddress, BIO_ADDR_rawport, BIO_ADDR_hostname_string, BIO_ADDR_service_string, BIO_ADDR_path_string - BIO_ADDR routines

+ +

SYNOPSIS

+ +
#include <sys/types.h>
+#include <openssl/bio.h>
+
+typedef union bio_addr_st BIO_ADDR;
+
+BIO_ADDR *BIO_ADDR_new(void);
+void BIO_ADDR_free(BIO_ADDR *);
+void BIO_ADDR_clear(BIO_ADDR *ap);
+int BIO_ADDR_rawmake(BIO_ADDR *ap, int family,
+                     const void *where, size_t wherelen, unsigned short port);
+int BIO_ADDR_family(const BIO_ADDR *ap);
+int BIO_ADDR_rawaddress(const BIO_ADDR *ap, void *p, size_t *l);
+unsigned short BIO_ADDR_rawport(const BIO_ADDR *ap);
+char *BIO_ADDR_hostname_string(const BIO_ADDR *ap, int numeric);
+char *BIO_ADDR_service_string(const BIO_ADDR *ap, int numeric);
+char *BIO_ADDR_path_string(const BIO_ADDR *ap);
+ +

DESCRIPTION

+ +

The BIO_ADDR type is a wrapper around all types of socket addresses that OpenSSL deals with, currently transparently supporting AF_INET, AF_INET6 and AF_UNIX according to what's available on the platform at hand.

+ +

BIO_ADDR_new() creates a new unfilled BIO_ADDR, to be used with routines that will fill it with information, such as BIO_accept_ex().

+ +

BIO_ADDR_free() frees a BIO_ADDR created with BIO_ADDR_new().

+ +

BIO_ADDR_clear() clears any data held within the provided BIO_ADDR and sets it back to an uninitialised state.

+ +

BIO_ADDR_rawmake() takes a protocol family, an byte array of size wherelen with an address in network byte order pointed at by where and a port number in network byte order in port (except for the AF_UNIX protocol family, where port is meaningless and therefore ignored) and populates the given BIO_ADDR with them. In case this creates a AF_UNIX BIO_ADDR, wherelen is expected to be the length of the path string (not including the terminating NUL, such as the result of a call to strlen()). Read on about the addresses in "RAW ADDRESSES" below.

+ +

BIO_ADDR_family() returns the protocol family of the given BIO_ADDR. The possible non-error results are one of the constants AF_INET, AF_INET6 and AF_UNIX. It will also return AF_UNSPEC if the BIO_ADDR has not been initialised.

+ +

BIO_ADDR_rawaddress() will write the raw address of the given BIO_ADDR in the area pointed at by p if p is non-NULL, and will set *l to be the amount of bytes the raw address takes up if l is non-NULL. A technique to only find out the size of the address is a call with p set to NULL. The raw address will be in network byte order, most significant byte first. In case this is a AF_UNIX BIO_ADDR, l gets the length of the path string (not including the terminating NUL, such as the result of a call to strlen()). Read on about the addresses in "RAW ADDRESSES" below.

+ +

BIO_ADDR_rawport() returns the raw port of the given BIO_ADDR. The raw port will be in network byte order.

+ +

BIO_ADDR_hostname_string() returns a character string with the hostname of the given BIO_ADDR. If numeric is 1, the string will contain the numerical form of the address. This only works for BIO_ADDR of the protocol families AF_INET and AF_INET6. The returned string has been allocated on the heap and must be freed with OPENSSL_free().

+ +

BIO_ADDR_service_string() returns a character string with the service name of the port of the given BIO_ADDR. If numeric is 1, the string will contain the port number. This only works for BIO_ADDR of the protocol families AF_INET and AF_INET6. The returned string has been allocated on the heap and must be freed with OPENSSL_free().

+ +

BIO_ADDR_path_string() returns a character string with the path of the given BIO_ADDR. This only works for BIO_ADDR of the protocol family AF_UNIX. The returned string has been allocated on the heap and must be freed with OPENSSL_free().

+ +

RAW ADDRESSES

+ +

Both BIO_ADDR_rawmake() and BIO_ADDR_rawaddress() take a pointer to a network byte order address of a specific site. Internally, those are treated as a pointer to struct in_addr (for AF_INET), struct in6_addr (for AF_INET6) or char * (for AF_UNIX), all depending on the protocol family the address is for.

+ +

RETURN VALUES

+ +

The string producing functions BIO_ADDR_hostname_string(), BIO_ADDR_service_string() and BIO_ADDR_path_string() will return NULL on error and leave an error indication on the OpenSSL error stack.

+ +

All other functions described here return 0 or NULL when the information they should return isn't available.

+ +

SEE ALSO

+ +

BIO_connect(3), BIO_s_connect(3)

+ +

COPYRIGHT

+ +

Copyright 2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_ADDRINFO.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_ADDRINFO.html new file mode 100644 index 00000000..285455e3 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_ADDRINFO.html @@ -0,0 +1,101 @@ + + + + +BIO_ADDRINFO + + + + + + + + + + +

NAME

+ +

BIO_lookup_type, BIO_ADDRINFO, BIO_ADDRINFO_next, BIO_ADDRINFO_free, BIO_ADDRINFO_family, BIO_ADDRINFO_socktype, BIO_ADDRINFO_protocol, BIO_ADDRINFO_address, BIO_lookup_ex, BIO_lookup - BIO_ADDRINFO type and routines

+ +

SYNOPSIS

+ +
#include <sys/types.h>
+#include <openssl/bio.h>
+
+typedef union bio_addrinfo_st BIO_ADDRINFO;
+
+enum BIO_lookup_type {
+    BIO_LOOKUP_CLIENT, BIO_LOOKUP_SERVER
+};
+
+int BIO_lookup_ex(const char *host, const char *service, int lookup_type,
+                  int family, int socktype, int protocol, BIO_ADDRINFO **res);
+int BIO_lookup(const char *node, const char *service,
+               enum BIO_lookup_type lookup_type,
+               int family, int socktype, BIO_ADDRINFO **res);
+
+const BIO_ADDRINFO *BIO_ADDRINFO_next(const BIO_ADDRINFO *bai);
+int BIO_ADDRINFO_family(const BIO_ADDRINFO *bai);
+int BIO_ADDRINFO_socktype(const BIO_ADDRINFO *bai);
+int BIO_ADDRINFO_protocol(const BIO_ADDRINFO *bai);
+const BIO_ADDR *BIO_ADDRINFO_address(const BIO_ADDRINFO *bai);
+void BIO_ADDRINFO_free(BIO_ADDRINFO *bai);
+ +

DESCRIPTION

+ +

The BIO_ADDRINFO type is a wrapper for address information types provided on your platform.

+ +

BIO_ADDRINFO normally forms a chain of several that can be picked at one by one.

+ +

BIO_lookup_ex() looks up a specified host and service, and uses lookup_type to determine what the default address should be if host is NULL. family, socktype and protocol are used to determine what protocol family, socket type and protocol should be used for the lookup. family can be any of AF_INET, AF_INET6, AF_UNIX and AF_UNSPEC. socktype can be SOCK_STREAM, SOCK_DGRAM or 0. Specifying 0 indicates that any type can be used. protocol specifies a protocol such as IPPROTO_TCP, IPPROTO_UDP or IPPORTO_SCTP. If set to 0 than any protocol can be used. res points at a pointer to hold the start of a BIO_ADDRINFO chain.

+ +

For the family AF_UNIX, BIO_lookup_ex() will ignore the service parameter and expects the node parameter to hold the path to the socket file.

+ +

BIO_lookup() does the same as BIO_lookup_ex() but does not provide the ability to select based on the protocol (any protocol may be returned).

+ +

BIO_ADDRINFO_family() returns the family of the given BIO_ADDRINFO. The result will be one of the constants AF_INET, AF_INET6 and AF_UNIX.

+ +

BIO_ADDRINFO_socktype() returns the socket type of the given BIO_ADDRINFO. The result will be one of the constants SOCK_STREAM and SOCK_DGRAM.

+ +

BIO_ADDRINFO_protocol() returns the protocol id of the given BIO_ADDRINFO. The result will be one of the constants IPPROTO_TCP and IPPROTO_UDP.

+ +

BIO_ADDRINFO_address() returns the underlying BIO_ADDR of the given BIO_ADDRINFO.

+ +

BIO_ADDRINFO_next() returns the next BIO_ADDRINFO in the chain from the given one.

+ +

BIO_ADDRINFO_free() frees the chain of BIO_ADDRINFO starting with the given one.

+ +

RETURN VALUES

+ +

BIO_lookup_ex() and BIO_lookup() return 1 on success and 0 when an error occurred, and will leave an error indication on the OpenSSL error stack in that case.

+ +

All other functions described here return 0 or NULL when the information they should return isn't available.

+ +

NOTES

+ +

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 address is required then the protocol parameter to BIO_lookup_ex() should be explicitly set to IPPROTO_SCTP. The same may be true on other platforms.

+ +

HISTORY

+ +

The BIO_lookup_ex() function was added in OpenSSL 1.1.1.

+ +

COPYRIGHT

+ +

Copyright 2016-2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_connect.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_connect.html new file mode 100644 index 00000000..81740adc --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_connect.html @@ -0,0 +1,121 @@ + + + + +BIO_connect + + + + + + + + + + +

NAME

+ +

BIO_socket, BIO_bind, BIO_connect, BIO_listen, BIO_accept_ex, BIO_closesocket - BIO socket communication setup routines

+ +

SYNOPSIS

+ +
#include <openssl/bio.h>
+
+int BIO_socket(int domain, int socktype, int protocol, int options);
+int BIO_bind(int sock, const BIO_ADDR *addr, int options);
+int BIO_connect(int sock, const BIO_ADDR *addr, int options);
+int BIO_listen(int sock, const BIO_ADDR *addr, int options);
+int BIO_accept_ex(int accept_sock, BIO_ADDR *peer, int options);
+int BIO_closesocket(int sock);
+ +

DESCRIPTION

+ +

BIO_socket() creates a socket in the domain domain, of type socktype and protocol. Socket options are currently unused, but is present for future use.

+ +

BIO_bind() binds the source address and service to a socket and may be useful before calling BIO_connect(). The options may include BIO_SOCK_REUSEADDR, which is described in "FLAGS" below.

+ +

BIO_connect() connects sock to the address and service given by addr. Connection options may be zero or any combination of BIO_SOCK_KEEPALIVE, BIO_SOCK_NONBLOCK and BIO_SOCK_NODELAY. The flags are described in "FLAGS" below.

+ +

BIO_listen() has sock start listening on the address and service given by addr. Connection options may be zero or any combination of BIO_SOCK_KEEPALIVE, BIO_SOCK_NONBLOCK, BIO_SOCK_NODELAY, BIO_SOCK_REUSEADDR and BIO_SOCK_V6_ONLY. The flags are described in "FLAGS" below.

+ +

BIO_accept_ex() waits for an incoming connections on the given socket accept_sock. When it gets a connection, the address and port of the peer gets stored in peer if that one is non-NULL. Accept options may be zero or BIO_SOCK_NONBLOCK, and is applied on the accepted socket. The flags are described in "FLAGS" below.

+ +

BIO_closesocket() closes sock.

+ +

FLAGS

+ +
+ +
BIO_SOCK_KEEPALIVE
+
+ +

Enables regular sending of keep-alive messages.

+ +
+
BIO_SOCK_NONBLOCK
+
+ +

Sets the socket to non-blocking mode.

+ +
+
BIO_SOCK_NODELAY
+
+ +

Corresponds to TCP_NODELAY, and disables the Nagle algorithm. With this set, any data will be sent as soon as possible instead of being buffered until there's enough for the socket to send out in one go.

+ +
+
BIO_SOCK_REUSEADDR
+
+ +

Try to reuse the address and port combination for a recently closed port.

+ +
+
BIO_SOCK_V6_ONLY
+
+ +

When creating an IPv6 socket, make it only listen for IPv6 addresses and not IPv4 addresses mapped to IPv6.

+ +
+
+ +

These flags are bit flags, so they are to be combined with the | operator, for example:

+ +
BIO_connect(sock, addr, BIO_SOCK_KEEPALIVE | BIO_SOCK_NONBLOCK);
+ +

RETURN VALUES

+ +

BIO_socket() returns the socket number on success or INVALID_SOCKET (-1) on error. When an error has occurred, the OpenSSL error stack will hold the error data and errno has the system error.

+ +

BIO_bind(), BIO_connect() and BIO_listen() return 1 on success or 0 on error. When an error has occurred, the OpenSSL error stack will hold the error data and errno has the system error.

+ +

BIO_accept_ex() returns the accepted socket on success or INVALID_SOCKET (-1) on error. When an error has occurred, the OpenSSL error stack will hold the error data and errno has the system error.

+ +

SEE ALSO

+ +

BIO_ADDR(3)

+ +

HISTORY

+ +

BIO_gethostname(), BIO_get_port(), BIO_get_host_ip(), BIO_get_accept_socket() and BIO_accept() were deprecated in OpenSSL 1.1.0. Use the functions described above instead.

+ +

COPYRIGHT

+ +

Copyright 2016-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_ctrl.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_ctrl.html new file mode 100644 index 00000000..b1671037 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_ctrl.html @@ -0,0 +1,115 @@ + + + + +BIO_ctrl + + + + + + + + + + +

NAME

+ +

BIO_ctrl, BIO_callback_ctrl, BIO_ptr_ctrl, BIO_int_ctrl, BIO_reset, BIO_seek, BIO_tell, BIO_flush, BIO_eof, BIO_set_close, BIO_get_close, BIO_pending, BIO_wpending, BIO_ctrl_pending, BIO_ctrl_wpending, BIO_get_info_callback, BIO_set_info_callback, BIO_info_cb - BIO control operations

+ +

SYNOPSIS

+ +
#include <openssl/bio.h>
+
+typedef int BIO_info_cb(BIO *b, int state, int res);
+
+long BIO_ctrl(BIO *bp, int cmd, long larg, void *parg);
+long BIO_callback_ctrl(BIO *b, int cmd, BIO_info_cb *cb);
+char *BIO_ptr_ctrl(BIO *bp, int cmd, long larg);
+long BIO_int_ctrl(BIO *bp, int cmd, long larg, int iarg);
+
+int BIO_reset(BIO *b);
+int BIO_seek(BIO *b, int ofs);
+int BIO_tell(BIO *b);
+int BIO_flush(BIO *b);
+int BIO_eof(BIO *b);
+int BIO_set_close(BIO *b, long flag);
+int BIO_get_close(BIO *b);
+int BIO_pending(BIO *b);
+int BIO_wpending(BIO *b);
+size_t BIO_ctrl_pending(BIO *b);
+size_t BIO_ctrl_wpending(BIO *b);
+
+int BIO_get_info_callback(BIO *b, BIO_info_cb **cbp);
+int BIO_set_info_callback(BIO *b, BIO_info_cb *cb);
+ +

DESCRIPTION

+ +

BIO_ctrl(), BIO_callback_ctrl(), BIO_ptr_ctrl() and BIO_int_ctrl() are BIO "control" operations taking arguments of various types. These functions are not normally called directly, various macros are used instead. The standard macros are described below, macros specific to a particular type of BIO are described in the specific BIOs manual page as well as any special features of the standard calls.

+ +

BIO_reset() typically resets a BIO to some initial state, in the case of file related BIOs for example it rewinds the file pointer to the start of the file.

+ +

BIO_seek() resets a file related BIO's (that is file descriptor and FILE BIOs) file position pointer to ofs bytes from start of file.

+ +

BIO_tell() returns the current file position of a file related BIO.

+ +

BIO_flush() normally writes out any internally buffered data, in some cases it is used to signal EOF and that no more data will be written.

+ +

BIO_eof() returns 1 if the BIO has read EOF, the precise meaning of "EOF" varies according to the BIO type.

+ +

BIO_set_close() sets the BIO b close flag to flag. flag can take the value BIO_CLOSE or BIO_NOCLOSE. Typically BIO_CLOSE is used in a source/sink BIO to indicate that the underlying I/O stream should be closed when the BIO is freed.

+ +

BIO_get_close() returns the BIOs close flag.

+ +

BIO_pending(), BIO_ctrl_pending(), BIO_wpending() and BIO_ctrl_wpending() return the number of pending characters in the BIOs read and write buffers. Not all BIOs support these calls. BIO_ctrl_pending() and BIO_ctrl_wpending() return a size_t type and are functions, BIO_pending() and BIO_wpending() are macros which call BIO_ctrl().

+ +

RETURN VALUES

+ +

BIO_reset() normally returns 1 for success and 0 or -1 for failure. File BIOs are an exception, they return 0 for success and -1 for failure.

+ +

BIO_seek() and BIO_tell() both return the current file position on success and -1 for failure, except file BIOs which for BIO_seek() always return 0 for success and -1 for failure.

+ +

BIO_flush() returns 1 for success and 0 or -1 for failure.

+ +

BIO_eof() returns 1 if EOF has been reached 0 otherwise.

+ +

BIO_set_close() always returns 1.

+ +

BIO_get_close() returns the close flag value: BIO_CLOSE or BIO_NOCLOSE.

+ +

BIO_pending(), BIO_ctrl_pending(), BIO_wpending() and BIO_ctrl_wpending() return the amount of pending data.

+ +

NOTES

+ +

BIO_flush(), because it can write data may return 0 or -1 indicating that the call should be retried later in a similar manner to BIO_write_ex(). The BIO_should_retry() call should be used and appropriate action taken is the call fails.

+ +

The return values of BIO_pending() and BIO_wpending() may not reliably determine the amount of pending data in all cases. For example in the case of a file BIO some data may be available in the FILE structures internal buffers but it is not possible to determine this in a portably way. For other types of BIO they may not be supported.

+ +

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 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.

+ +

Source/sink BIOs return an 0 if they do not recognize the BIO_ctrl() operation.

+ +

BUGS

+ +

Some of the return values are ambiguous and care should be taken. In particular a return value of 0 can be returned if an operation is not supported, if an error occurred, if EOF has not been reached and in the case of BIO_seek() on a file BIO for a successful operation.

+ +

COPYRIGHT

+ +

Copyright 2000-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_f_base64.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_f_base64.html new file mode 100644 index 00000000..9a2092c8 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_f_base64.html @@ -0,0 +1,102 @@ + + + + +BIO_f_base64 + + + + + + + + + + +

NAME

+ +

BIO_f_base64 - base64 BIO filter

+ +

SYNOPSIS

+ +
#include <openssl/bio.h>
+#include <openssl/evp.h>
+
+const BIO_METHOD *BIO_f_base64(void);
+ +

DESCRIPTION

+ +

BIO_f_base64() returns the base64 BIO method. This is a filter BIO that base64 encodes any data written through it and decodes any data read through it.

+ +

Base64 BIOs do not support BIO_gets() or BIO_puts().

+ +

BIO_flush() on a base64 BIO that is being written through is used to signal that no more data is to be encoded: this is used to flush the final block through the BIO.

+ +

The flag BIO_FLAGS_BASE64_NO_NL can be set with BIO_set_flags() to encode the data all on one line or expect the data to be all on one line.

+ +

NOTES

+ +

Because of the format of base64 encoding the end of the encoded block cannot always be reliably determined.

+ +

RETURN VALUES

+ +

BIO_f_base64() returns the base64 BIO method.

+ +

EXAMPLES

+ +

Base64 encode the string "Hello World\n" and write the result to standard output:

+ +
BIO *bio, *b64;
+char message[] = "Hello World \n";
+
+b64 = BIO_new(BIO_f_base64());
+bio = BIO_new_fp(stdout, BIO_NOCLOSE);
+BIO_push(b64, bio);
+BIO_write(b64, message, strlen(message));
+BIO_flush(b64);
+
+BIO_free_all(b64);
+ +

Read Base64 encoded data from standard input and write the decoded data to standard output:

+ +
BIO *bio, *b64, *bio_out;
+char inbuf[512];
+int inlen;
+
+b64 = BIO_new(BIO_f_base64());
+bio = BIO_new_fp(stdin, BIO_NOCLOSE);
+bio_out = BIO_new_fp(stdout, BIO_NOCLOSE);
+BIO_push(b64, bio);
+while ((inlen = BIO_read(b64, inbuf, 512)) > 0)
+    BIO_write(bio_out, inbuf, inlen);
+
+BIO_flush(bio_out);
+BIO_free_all(b64);
+ +

BUGS

+ +

The ambiguity of EOF in base64 encoded data can cause additional data following the base64 encoded block to be misinterpreted.

+ +

There should be some way of specifying a test that the BIO can perform to reliably determine EOF (for example a MIME boundary).

+ +

COPYRIGHT

+ +

Copyright 2000-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_f_buffer.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_f_buffer.html new file mode 100644 index 00000000..59f97e65 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_f_buffer.html @@ -0,0 +1,89 @@ + + + + +BIO_f_buffer + + + + + + + + + + +

NAME

+ +

BIO_get_buffer_num_lines, BIO_set_read_buffer_size, BIO_set_write_buffer_size, BIO_set_buffer_size, BIO_set_buffer_read_data, BIO_f_buffer - buffering BIO

+ +

SYNOPSIS

+ +
#include <openssl/bio.h>
+
+const BIO_METHOD *BIO_f_buffer(void);
+
+long BIO_get_buffer_num_lines(BIO *b);
+long BIO_set_read_buffer_size(BIO *b, long size);
+long BIO_set_write_buffer_size(BIO *b, long size);
+long BIO_set_buffer_size(BIO *b, long size);
+long BIO_set_buffer_read_data(BIO *b, void *buf, long num);
+ +

DESCRIPTION

+ +

BIO_f_buffer() returns the buffering BIO method.

+ +

Data written to a buffering BIO is buffered and periodically written to the next BIO in the chain. Data read from a buffering BIO comes from an internal buffer which is filled from the next BIO in the chain. Both BIO_gets() and BIO_puts() are supported.

+ +

Calling BIO_reset() on a buffering BIO clears any buffered data.

+ +

BIO_get_buffer_num_lines() returns the number of lines currently buffered.

+ +

BIO_set_read_buffer_size(), BIO_set_write_buffer_size() and BIO_set_buffer_size() set the read, write or both read and write buffer sizes to size. The initial buffer size is DEFAULT_BUFFER_SIZE, currently 4096. Any attempt to reduce the buffer size below DEFAULT_BUFFER_SIZE is ignored. Any buffered data is cleared when the buffer is resized.

+ +

BIO_set_buffer_read_data() clears the read buffer and fills it with num bytes of buf. If num is larger than the current buffer size the buffer is expanded.

+ +

NOTES

+ +

These functions, other than BIO_f_buffer(), are implemented as macros.

+ +

Buffering BIOs implement BIO_read_ex() and BIO_gets() by using BIO_read_ex() operations on the next BIO in the chain and storing the result in an internal buffer, from which bytes are given back to the caller as appropriate for the call; a BIO_gets() is guaranteed to give the caller a whole line, and BIO_read_ex() is guaranteed to give the caller the number of bytes it asks for, unless there's an error or end of communication is reached in the next BIO. By prepending a buffering BIO to a chain it is therefore possible to provide BIO_gets() or exact size BIO_read_ex() functionality if the following BIOs do not support it.

+ +

Do not add more than one BIO_f_buffer() to a BIO chain. The result of doing so will force a full read of the size of the internal buffer of the top BIO_f_buffer(), which is 4 KiB at a minimum.

+ +

Data is only written to the next BIO in the chain when the write buffer fills or when BIO_flush() is called. It is therefore important to call BIO_flush() whenever any pending data should be written such as when removing a buffering BIO using BIO_pop(). BIO_flush() may need to be retried if the ultimate source/sink BIO is non blocking.

+ +

RETURN VALUES

+ +

BIO_f_buffer() returns the buffering BIO method.

+ +

BIO_get_buffer_num_lines() returns the number of lines buffered (may be 0).

+ +

BIO_set_read_buffer_size(), BIO_set_write_buffer_size() and BIO_set_buffer_size() return 1 if the buffer was successfully resized or 0 for failure.

+ +

BIO_set_buffer_read_data() returns 1 if the data was set correctly or 0 if there was an error.

+ +

SEE ALSO

+ +

bio(7), BIO_reset(3), BIO_flush(3), BIO_pop(3), BIO_ctrl(3).

+ +

COPYRIGHT

+ +

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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_f_cipher.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_f_cipher.html new file mode 100644 index 00000000..7d724984 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_f_cipher.html @@ -0,0 +1,81 @@ + + + + +BIO_f_cipher + + + + + + + + + + +

NAME

+ +

BIO_f_cipher, BIO_set_cipher, BIO_get_cipher_status, BIO_get_cipher_ctx - cipher BIO filter

+ +

SYNOPSIS

+ +
#include <openssl/bio.h>
+#include <openssl/evp.h>
+
+const BIO_METHOD *BIO_f_cipher(void);
+void BIO_set_cipher(BIO *b, const EVP_CIPHER *cipher,
+                    unsigned char *key, unsigned char *iv, int enc);
+int BIO_get_cipher_status(BIO *b)
+int BIO_get_cipher_ctx(BIO *b, EVP_CIPHER_CTX **pctx)
+ +

DESCRIPTION

+ +

BIO_f_cipher() returns the cipher BIO method. This is a filter BIO that encrypts any data written through it, and decrypts any data read from it. It is a BIO wrapper for the cipher routines EVP_CipherInit(), EVP_CipherUpdate() and EVP_CipherFinal().

+ +

Cipher BIOs do not support BIO_gets() or BIO_puts().

+ +

BIO_flush() on an encryption BIO that is being written through is used to signal that no more data is to be encrypted: this is used to flush and possibly pad the final block through the BIO.

+ +

BIO_set_cipher() sets the cipher of BIO b to cipher using key key and IV iv. enc should be set to 1 for encryption and zero for decryption.

+ +

When reading from an encryption BIO the final block is automatically decrypted and checked when EOF is detected. BIO_get_cipher_status() is a BIO_ctrl() macro which can be called to determine whether the decryption operation was successful.

+ +

BIO_get_cipher_ctx() is a BIO_ctrl() macro which retrieves the internal BIO cipher context. The retrieved context can be used in conjunction with the standard cipher routines to set it up. This is useful when BIO_set_cipher() is not flexible enough for the applications needs.

+ +

NOTES

+ +

When encrypting BIO_flush() must be called to flush the final block through the BIO. If it is not then the final block will fail a subsequent decrypt.

+ +

When decrypting an error on the final block is signaled by a zero return value from the read operation. A successful decrypt followed by EOF will also return zero for the final read. BIO_get_cipher_status() should be called to determine if the decrypt was successful.

+ +

As always, if BIO_gets() or BIO_puts() support is needed then it can be achieved by preceding the cipher BIO with a buffering BIO.

+ +

RETURN VALUES

+ +

BIO_f_cipher() returns the cipher BIO method.

+ +

BIO_set_cipher() does not return a value.

+ +

BIO_get_cipher_status() returns 1 for a successful decrypt and 0 for failure.

+ +

BIO_get_cipher_ctx() currently always returns 1.

+ +

COPYRIGHT

+ +

Copyright 2000-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_f_md.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_f_md.html new file mode 100644 index 00000000..95b95556 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_f_md.html @@ -0,0 +1,156 @@ + + + + +BIO_f_md + + + + + + + + + + +

NAME

+ +

BIO_f_md, BIO_set_md, BIO_get_md, BIO_get_md_ctx - message digest BIO filter

+ +

SYNOPSIS

+ +
#include <openssl/bio.h>
+#include <openssl/evp.h>
+
+const BIO_METHOD *BIO_f_md(void);
+int BIO_set_md(BIO *b, EVP_MD *md);
+int BIO_get_md(BIO *b, EVP_MD **mdp);
+int BIO_get_md_ctx(BIO *b, EVP_MD_CTX **mdcp);
+ +

DESCRIPTION

+ +

BIO_f_md() returns the message digest BIO method. This is a filter BIO that digests any data passed through it, it is a BIO wrapper for the digest routines EVP_DigestInit(), EVP_DigestUpdate() and EVP_DigestFinal().

+ +

Any data written or read through a digest BIO using BIO_read_ex() and BIO_write_ex() is digested.

+ +

BIO_gets(), if its size parameter is large enough finishes the digest calculation and returns the digest value. BIO_puts() is not supported.

+ +

BIO_reset() reinitialises a digest BIO.

+ +

BIO_set_md() sets the message digest of BIO b to md: this must be called to initialize a digest BIO before any data is passed through it. It is a BIO_ctrl() macro.

+ +

BIO_get_md() places the a pointer to the digest BIOs digest method in mdp, it is a BIO_ctrl() macro.

+ +

BIO_get_md_ctx() returns the digest BIOs context into mdcp.

+ +

NOTES

+ +

The context returned by BIO_get_md_ctx() can be used in calls to EVP_DigestFinal() and also the signature routines EVP_SignFinal() and EVP_VerifyFinal().

+ +

The context returned by BIO_get_md_ctx() is an internal context structure. Changes made to this context will affect the digest BIO itself and the context pointer will become invalid when the digest BIO is freed.

+ +

After the digest has been retrieved from a digest BIO it must be reinitialized by calling BIO_reset(), or BIO_set_md() before any more data is passed through it.

+ +

If an application needs to call BIO_gets() or BIO_puts() through a chain containing digest BIOs then this can be done by prepending a buffering BIO.

+ +

Calling BIO_get_md_ctx() will return the context and initialize the BIO state. This allows applications to initialize the context externally if the standard calls such as BIO_set_md() are not sufficiently flexible.

+ +

RETURN VALUES

+ +

BIO_f_md() returns the digest BIO method.

+ +

BIO_set_md(), BIO_get_md() and BIO_md_ctx() return 1 for success and 0 for failure.

+ +

EXAMPLES

+ +

The following example creates a BIO chain containing an SHA1 and MD5 digest BIO and passes the string "Hello World" through it. Error checking has been omitted for clarity.

+ +
BIO *bio, *mdtmp;
+char message[] = "Hello World";
+
+bio = BIO_new(BIO_s_null());
+mdtmp = BIO_new(BIO_f_md());
+BIO_set_md(mdtmp, EVP_sha1());
+/*
+ * For BIO_push() we want to append the sink BIO and keep a note of
+ * the start of the chain.
+ */
+bio = BIO_push(mdtmp, bio);
+mdtmp = BIO_new(BIO_f_md());
+BIO_set_md(mdtmp, EVP_md5());
+bio = BIO_push(mdtmp, bio);
+/* Note: mdtmp can now be discarded */
+BIO_write(bio, message, strlen(message));
+ +

The next example digests data by reading through a chain instead:

+ +
BIO *bio, *mdtmp;
+char buf[1024];
+int rdlen;
+
+bio = BIO_new_file(file, "rb");
+mdtmp = BIO_new(BIO_f_md());
+BIO_set_md(mdtmp, EVP_sha1());
+bio = BIO_push(mdtmp, bio);
+mdtmp = BIO_new(BIO_f_md());
+BIO_set_md(mdtmp, EVP_md5());
+bio = BIO_push(mdtmp, bio);
+do {
+    rdlen = BIO_read(bio, buf, sizeof(buf));
+    /* Might want to do something with the data here */
+} while (rdlen > 0);
+ +

This next example retrieves the message digests from a BIO chain and outputs them. This could be used with the examples above.

+ +
BIO *mdtmp;
+unsigned char mdbuf[EVP_MAX_MD_SIZE];
+int mdlen;
+int i;
+
+mdtmp = bio;   /* Assume bio has previously been set up */
+do {
+    EVP_MD *md;
+
+    mdtmp = BIO_find_type(mdtmp, BIO_TYPE_MD);
+    if (!mdtmp)
+        break;
+    BIO_get_md(mdtmp, &md);
+    printf("%s digest", OBJ_nid2sn(EVP_MD_type(md)));
+    mdlen = BIO_gets(mdtmp, mdbuf, EVP_MAX_MD_SIZE);
+    for (i = 0; i < mdlen; i++) printf(":%02X", mdbuf[i]);
+    printf("\n");
+    mdtmp = BIO_next(mdtmp);
+} while (mdtmp);
+
+BIO_free_all(bio);
+ +

BUGS

+ +

The lack of support for BIO_puts() and the non standard behaviour of BIO_gets() could be regarded as anomalous. It could be argued that BIO_gets() and BIO_puts() should be passed to the next BIO in the chain and digest the data passed through and that digests should be retrieved using a separate BIO_ctrl() call.

+ +

HISTORY

+ +

Before OpenSSL 1.0.0., the call to BIO_get_md_ctx() would only work if the BIO was initialized first.

+ +

COPYRIGHT

+ +

Copyright 2000-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_f_null.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_f_null.html new file mode 100644 index 00000000..d969ee91 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_f_null.html @@ -0,0 +1,58 @@ + + + + +BIO_f_null + + + + + + + + + + +

NAME

+ +

BIO_f_null - null filter

+ +

SYNOPSIS

+ +
#include <openssl/bio.h>
+
+const BIO_METHOD *BIO_f_null(void);
+ +

DESCRIPTION

+ +

BIO_f_null() returns the null filter BIO method. This is a filter BIO that does nothing.

+ +

All requests to a null filter BIO are passed through to the next BIO in the chain: this means that a BIO chain containing a null filter BIO behaves just as though the BIO was not there.

+ +

NOTES

+ +

As may be apparent a null filter BIO is not particularly useful.

+ +

RETURN VALUES

+ +

BIO_f_null() returns the null filter BIO method.

+ +

COPYRIGHT

+ +

Copyright 2000-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_f_ssl.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_f_ssl.html new file mode 100644 index 00000000..e1688c5f --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_f_ssl.html @@ -0,0 +1,263 @@ + + + + +BIO_f_ssl + + + + + + + + + + +

NAME

+ +

BIO_do_handshake, BIO_f_ssl, BIO_set_ssl, BIO_get_ssl, BIO_set_ssl_mode, BIO_set_ssl_renegotiate_bytes, BIO_get_num_renegotiates, BIO_set_ssl_renegotiate_timeout, BIO_new_ssl, BIO_new_ssl_connect, BIO_new_buffer_ssl_connect, BIO_ssl_copy_session_id, BIO_ssl_shutdown - SSL BIO

+ +

SYNOPSIS

+ +
#include <openssl/bio.h>
+#include <openssl/ssl.h>
+
+const BIO_METHOD *BIO_f_ssl(void);
+
+long BIO_set_ssl(BIO *b, SSL *ssl, long c);
+long BIO_get_ssl(BIO *b, SSL **sslp);
+long BIO_set_ssl_mode(BIO *b, long client);
+long BIO_set_ssl_renegotiate_bytes(BIO *b, long num);
+long BIO_set_ssl_renegotiate_timeout(BIO *b, long seconds);
+long BIO_get_num_renegotiates(BIO *b);
+
+BIO *BIO_new_ssl(SSL_CTX *ctx, int client);
+BIO *BIO_new_ssl_connect(SSL_CTX *ctx);
+BIO *BIO_new_buffer_ssl_connect(SSL_CTX *ctx);
+int BIO_ssl_copy_session_id(BIO *to, BIO *from);
+void BIO_ssl_shutdown(BIO *bio);
+
+long BIO_do_handshake(BIO *b);
+ +

DESCRIPTION

+ +

BIO_f_ssl() returns the SSL BIO method. This is a filter BIO which is a wrapper round the OpenSSL SSL routines adding a BIO "flavour" to SSL I/O.

+ +

I/O performed on an SSL BIO communicates using the SSL protocol with the SSLs read and write BIOs. If an SSL connection is not established then an attempt is made to establish one on the first I/O call.

+ +

If a BIO is appended to an SSL BIO using BIO_push() it is automatically used as the SSL BIOs read and write BIOs.

+ +

Calling BIO_reset() on an SSL BIO closes down any current SSL connection by calling SSL_shutdown(). BIO_reset() is then sent to the next BIO in the chain: this will typically disconnect the underlying transport. The SSL BIO is then reset to the initial accept or connect state.

+ +

If the close flag is set when an SSL BIO is freed then the internal SSL structure is also freed using SSL_free().

+ +

BIO_set_ssl() sets the internal SSL pointer of BIO b to ssl using the close flag c.

+ +

BIO_get_ssl() retrieves the SSL pointer of BIO b, it can then be manipulated using the standard SSL library functions.

+ +

BIO_set_ssl_mode() sets the SSL BIO mode to client. If client is 1 client mode is set. If client is 0 server mode is set.

+ +

BIO_set_ssl_renegotiate_bytes() sets the renegotiate byte count to num. When set after every num bytes of I/O (read and write) the SSL session is automatically renegotiated. num must be at least 512 bytes.

+ +

BIO_set_ssl_renegotiate_timeout() sets the renegotiate timeout to seconds. When the renegotiate timeout elapses the session is automatically renegotiated.

+ +

BIO_get_num_renegotiates() returns the total number of session renegotiations due to I/O or timeout.

+ +

BIO_new_ssl() allocates an SSL BIO using SSL_CTX ctx and using client mode if client is non zero.

+ +

BIO_new_ssl_connect() creates a new BIO chain consisting of an SSL BIO (using ctx) followed by a connect BIO.

+ +

BIO_new_buffer_ssl_connect() creates a new BIO chain consisting of a buffering BIO, an SSL BIO (using ctx) and a connect BIO.

+ +

BIO_ssl_copy_session_id() copies an SSL session id between BIO chains from and to. It does this by locating the SSL BIOs in each chain and calling SSL_copy_session_id() on the internal SSL pointer.

+ +

BIO_ssl_shutdown() closes down an SSL connection on BIO chain bio. It does this by locating the SSL BIO in the chain and calling SSL_shutdown() on its internal SSL pointer.

+ +

BIO_do_handshake() attempts to complete an SSL handshake on the supplied BIO and establish the SSL connection. It returns 1 if the connection was established successfully. A zero or negative value is returned if the connection could not be established, the call BIO_should_retry() should be used for non blocking connect BIOs to determine if the call should be retried. If an SSL connection has already been established this call has no effect.

+ +

NOTES

+ +

SSL BIOs are exceptional in that if the underlying transport is non blocking they can still request a retry in exceptional circumstances. Specifically this will happen if a session renegotiation takes place during a BIO_read_ex() operation, one case where this happens is when step up occurs.

+ +

The SSL flag SSL_AUTO_RETRY can be set to disable this behaviour. That is when this flag is set an SSL BIO using a blocking transport will never request a retry.

+ +

Since unknown BIO_ctrl() operations are sent through filter BIOs the servers name and port can be set using BIO_set_host() on the BIO returned by BIO_new_ssl_connect() without having to locate the connect BIO first.

+ +

Applications do not have to call BIO_do_handshake() but may wish to do so to separate the handshake process from other I/O processing.

+ +

BIO_set_ssl(), BIO_get_ssl(), BIO_set_ssl_mode(), BIO_set_ssl_renegotiate_bytes(), BIO_set_ssl_renegotiate_timeout(), BIO_get_num_renegotiates(), and BIO_do_handshake() are implemented as macros.

+ +

RETURN VALUES

+ +

BIO_f_ssl() returns the SSL BIO_METHOD structure.

+ +

BIO_set_ssl(), BIO_get_ssl(), BIO_set_ssl_mode(), BIO_set_ssl_renegotiate_bytes(), BIO_set_ssl_renegotiate_timeout() and BIO_get_num_renegotiates() return 1 on success or a value which is less than or equal to 0 if an error occurred.

+ +

BIO_new_ssl(), BIO_new_ssl_connect() and BIO_new_buffer_ssl_connect() return a valid BIO structure on success or NULL if an error occurred.

+ +

BIO_ssl_copy_session_id() returns 1 on success or 0 on error.

+ +

BIO_do_handshake() returns 1 if the connection was established successfully. A zero or negative value is returned if the connection could not be established.

+ +

EXAMPLES

+ +

This SSL/TLS client example attempts to retrieve a page from an SSL/TLS web server. The I/O routines are identical to those of the unencrypted example in BIO_s_connect(3).

+ +
BIO *sbio, *out;
+int len;
+char tmpbuf[1024];
+SSL_CTX *ctx;
+SSL *ssl;
+
+/* XXX Seed the PRNG if needed. */
+
+ctx = SSL_CTX_new(TLS_client_method());
+
+/* XXX Set verify paths and mode here. */
+
+sbio = BIO_new_ssl_connect(ctx);
+BIO_get_ssl(sbio, &ssl);
+if (ssl == NULL) {
+    fprintf(stderr, "Can't locate SSL pointer\n");
+    ERR_print_errors_fp(stderr);
+    exit(1);
+}
+
+/* Don't want any retries */
+SSL_set_mode(ssl, SSL_MODE_AUTO_RETRY);
+
+/* XXX We might want to do other things with ssl here */
+
+/* An empty host part means the loopback address */
+BIO_set_conn_hostname(sbio, ":https");
+
+out = BIO_new_fp(stdout, BIO_NOCLOSE);
+if (BIO_do_connect(sbio) <= 0) {
+    fprintf(stderr, "Error connecting to server\n");
+    ERR_print_errors_fp(stderr);
+    exit(1);
+}
+if (BIO_do_handshake(sbio) <= 0) {
+    fprintf(stderr, "Error establishing SSL connection\n");
+    ERR_print_errors_fp(stderr);
+    exit(1);
+}
+
+/* XXX Could examine ssl here to get connection info */
+
+BIO_puts(sbio, "GET / HTTP/1.0\n\n");
+for (;;) {
+    len = BIO_read(sbio, tmpbuf, 1024);
+    if (len <= 0)
+        break;
+    BIO_write(out, tmpbuf, len);
+}
+BIO_free_all(sbio);
+BIO_free(out);
+ +

Here is a simple server example. It makes use of a buffering BIO to allow lines to be read from the SSL BIO using BIO_gets. It creates a pseudo web page containing the actual request from a client and also echoes the request to standard output.

+ +
BIO *sbio, *bbio, *acpt, *out;
+int len;
+char tmpbuf[1024];
+SSL_CTX *ctx;
+SSL *ssl;
+
+/* XXX Seed the PRNG if needed. */
+
+ctx = SSL_CTX_new(TLS_server_method());
+if (!SSL_CTX_use_certificate_file(ctx, "server.pem", SSL_FILETYPE_PEM)
+        || !SSL_CTX_use_PrivateKey_file(ctx, "server.pem", SSL_FILETYPE_PEM)
+        || !SSL_CTX_check_private_key(ctx)) {
+    fprintf(stderr, "Error setting up SSL_CTX\n");
+    ERR_print_errors_fp(stderr);
+    exit(1);
+}
+
+/* XXX Other things like set verify locations, EDH temp callbacks. */
+
+/* New SSL BIO setup as server */
+sbio = BIO_new_ssl(ctx, 0);
+BIO_get_ssl(sbio, &ssl);
+if (ssl == NULL) {
+    fprintf(stderr, "Can't locate SSL pointer\n");
+    ERR_print_errors_fp(stderr);
+    exit(1);
+}
+
+SSL_set_mode(ssl, SSL_MODE_AUTO_RETRY);
+bbio = BIO_new(BIO_f_buffer());
+sbio = BIO_push(bbio, sbio);
+acpt = BIO_new_accept("4433");
+
+/*
+ * By doing this when a new connection is established
+ * we automatically have sbio inserted into it. The
+ * BIO chain is now 'swallowed' by the accept BIO and
+ * will be freed when the accept BIO is freed.
+ */
+BIO_set_accept_bios(acpt, sbio);
+out = BIO_new_fp(stdout, BIO_NOCLOSE);
+
+/* Setup accept BIO */
+if (BIO_do_accept(acpt) <= 0) {
+    fprintf(stderr, "Error setting up accept BIO\n");
+    ERR_print_errors_fp(stderr);
+    exit(1);
+}
+
+/* We only want one connection so remove and free accept BIO */
+sbio = BIO_pop(acpt);
+BIO_free_all(acpt);
+
+if (BIO_do_handshake(sbio) <= 0) {
+    fprintf(stderr, "Error in SSL handshake\n");
+    ERR_print_errors_fp(stderr);
+    exit(1);
+}
+
+BIO_puts(sbio, "HTTP/1.0 200 OK\r\nContent-type: text/plain\r\n\r\n");
+BIO_puts(sbio, "\r\nConnection Established\r\nRequest headers:\r\n");
+BIO_puts(sbio, "--------------------------------------------------\r\n");
+
+for (;;) {
+    len = BIO_gets(sbio, tmpbuf, 1024);
+    if (len <= 0)
+        break;
+    BIO_write(sbio, tmpbuf, len);
+    BIO_write(out, tmpbuf, len);
+    /* Look for blank line signifying end of headers*/
+    if (tmpbuf[0] == '\r' || tmpbuf[0] == '\n')
+        break;
+}
+
+BIO_puts(sbio, "--------------------------------------------------\r\n");
+BIO_puts(sbio, "\r\n");
+BIO_flush(sbio);
+BIO_free_all(sbio);
+ +

HISTORY

+ +

In OpenSSL before 1.0.0 the BIO_pop() call was handled incorrectly, the I/O BIO reference count was incorrectly incremented (instead of decremented) and dissociated with the SSL BIO even if the SSL BIO was not explicitly being popped (e.g. a pop higher up the chain). Applications which included workarounds for this bug (e.g. freeing BIOs more than once) should be modified to handle this fix or they may free up an already freed BIO.

+ +

COPYRIGHT

+ +

Copyright 2000-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_find_type.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_find_type.html new file mode 100644 index 00000000..51188228 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_find_type.html @@ -0,0 +1,83 @@ + + + + +BIO_find_type + + + + + + + + + + +

NAME

+ +

BIO_find_type, BIO_next, BIO_method_type - BIO chain traversal

+ +

SYNOPSIS

+ +
#include <openssl/bio.h>
+
+BIO *BIO_find_type(BIO *b, int bio_type);
+BIO *BIO_next(BIO *b);
+int BIO_method_type(const BIO *b);
+ +

DESCRIPTION

+ +

The BIO_find_type() searches for a BIO of a given type in a chain, starting at BIO b. If type is a specific type (such as BIO_TYPE_MEM) then a search is made for a BIO of that type. If type is a general type (such as BIO_TYPE_SOURCE_SINK) then the next matching BIO of the given general type is searched for. BIO_find_type() returns the next matching BIO or NULL if none is found.

+ +

The following general types are defined: BIO_TYPE_DESCRIPTOR, BIO_TYPE_FILTER, and BIO_TYPE_SOURCE_SINK.

+ +

For a list of the specific types, see the openssl/bio.h header file.

+ +

BIO_next() returns the next BIO in a chain. It can be used to traverse all BIOs in a chain or used in conjunction with BIO_find_type() to find all BIOs of a certain type.

+ +

BIO_method_type() returns the type of a BIO.

+ +

RETURN VALUES

+ +

BIO_find_type() returns a matching BIO or NULL for no match.

+ +

BIO_next() returns the next BIO in a chain.

+ +

BIO_method_type() returns the type of the BIO b.

+ +

EXAMPLES

+ +

Traverse a chain looking for digest BIOs:

+ +
BIO *btmp;
+
+btmp = in_bio; /* in_bio is chain to search through */
+do {
+    btmp = BIO_find_type(btmp, BIO_TYPE_MD);
+    if (btmp == NULL)
+        break; /* Not found */
+    /* btmp is a digest BIO, do something with it ...*/
+    ...
+
+    btmp = BIO_next(btmp);
+} while (btmp);
+ +

COPYRIGHT

+ +

Copyright 2000-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_get_data.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_get_data.html new file mode 100644 index 00000000..7eb54c2f --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_get_data.html @@ -0,0 +1,76 @@ + + + + +BIO_get_data + + + + + + + + + + +

NAME

+ +

BIO_set_data, BIO_get_data, BIO_set_init, BIO_get_init, BIO_set_shutdown, BIO_get_shutdown - functions for managing BIO state information

+ +

SYNOPSIS

+ +
#include <openssl/bio.h>
+
+void BIO_set_data(BIO *a, void *ptr);
+void *BIO_get_data(BIO *a);
+void BIO_set_init(BIO *a, int init);
+int BIO_get_init(BIO *a);
+void BIO_set_shutdown(BIO *a, int shut);
+int BIO_get_shutdown(BIO *a);
+ +

DESCRIPTION

+ +

These functions are mainly useful when implementing a custom BIO.

+ +

The BIO_set_data() function associates the custom data pointed to by ptr with 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 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 have occurred (for example through calling custom ctrls). The BIO_get_init() function returns the value of the "init" flag.

+ +

The BIO_set_shutdown() and BIO_get_shutdown() functions set and get the state of this BIO's shutdown (i.e. BIO_CLOSE) flag. If set then the underlying resource is also closed when the BIO is freed.

+ +

RETURN VALUES

+ +

BIO_get_data() returns a pointer to the implementation specific custom data associated with this BIO, or NULL if none has been set.

+ +

BIO_get_init() returns the state of the BIO's init flag.

+ +

BIO_get_shutdown() returns the stat of the BIO's shutdown (i.e. BIO_CLOSE) flag.

+ +

SEE ALSO

+ +

bio, BIO_meth_new

+ +

HISTORY

+ +

The functions described here were added in OpenSSL 1.1.0.

+ +

COPYRIGHT

+ +

Copyright 2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_get_ex_new_index.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_get_ex_new_index.html new file mode 100644 index 00000000..6739e44e --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_get_ex_new_index.html @@ -0,0 +1,75 @@ + + + + +BIO_get_ex_new_index + + + + + + + + + + +

NAME

+ +

BIO_get_ex_new_index, BIO_set_ex_data, BIO_get_ex_data, ENGINE_get_ex_new_index, ENGINE_set_ex_data, ENGINE_get_ex_data, UI_get_ex_new_index, UI_set_ex_data, UI_get_ex_data, X509_get_ex_new_index, X509_set_ex_data, X509_get_ex_data, X509_STORE_get_ex_new_index, X509_STORE_set_ex_data, X509_STORE_get_ex_data, X509_STORE_CTX_get_ex_new_index, X509_STORE_CTX_set_ex_data, X509_STORE_CTX_get_ex_data, DH_get_ex_new_index, DH_set_ex_data, DH_get_ex_data, DSA_get_ex_new_index, DSA_set_ex_data, DSA_get_ex_data, ECDH_get_ex_new_index, ECDH_set_ex_data, ECDH_get_ex_data, EC_KEY_get_ex_new_index, EC_KEY_set_ex_data, EC_KEY_get_ex_data, RSA_get_ex_new_index, RSA_set_ex_data, RSA_get_ex_data - application-specific data

+ +

SYNOPSIS

+ +
#include <openssl/x509.h>
+
+int TYPE_get_ex_new_index(long argl, void *argp,
+                          CRYPTO_EX_new *new_func,
+                          CRYPTO_EX_dup *dup_func,
+                          CRYPTO_EX_free *free_func);
+
+int TYPE_set_ex_data(TYPE *d, int idx, void *arg);
+
+void *TYPE_get_ex_data(TYPE *d, int idx);
+ +

DESCRIPTION

+ +

In the description here, TYPE is used a placeholder for any of the OpenSSL datatypes listed in CRYPTO_get_ex_new_index(3).

+ +

These functions handle application-specific data for OpenSSL data structures.

+ +

TYPE_get_ex_new_index() is a macro that calls CRYPTO_get_ex_new_index() with the correct index value.

+ +

TYPE_set_ex_data() is a function that calls CRYPTO_set_ex_data() with an offset into the opaque exdata part of the TYPE object.

+ +

TYPE_get_ex_data() is a function that calls CRYPTO_get_ex_data() with an offset into the opaque exdata part of the TYPE object.

+ +

RETURN VALUES

+ +

TYPE_get_ex_new_index() returns a new index on success or -1 on error.

+ +

TYPE_set_ex_data() returns 1 on success or 0 on error.

+ +

TYPE_get_ex_data() returns the application data or NULL if an error occurred.

+ +

SEE ALSO

+ +

CRYPTO_get_ex_new_index(3).

+ +

COPYRIGHT

+ +

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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_meth_new.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_meth_new.html new file mode 100644 index 00000000..fccdeefc --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_meth_new.html @@ -0,0 +1,128 @@ + + + + +BIO_meth_new + + + + + + + + + + +

NAME

+ +

BIO_get_new_index, BIO_meth_new, BIO_meth_free, BIO_meth_get_read_ex, BIO_meth_set_read_ex, BIO_meth_get_write_ex, BIO_meth_set_write_ex, BIO_meth_get_write, BIO_meth_set_write, BIO_meth_get_read, BIO_meth_set_read, BIO_meth_get_puts, BIO_meth_set_puts, BIO_meth_get_gets, BIO_meth_set_gets, BIO_meth_get_ctrl, BIO_meth_set_ctrl, BIO_meth_get_create, BIO_meth_set_create, BIO_meth_get_destroy, BIO_meth_set_destroy, BIO_meth_get_callback_ctrl, BIO_meth_set_callback_ctrl - Routines to build up BIO methods

+ +

SYNOPSIS

+ +
#include <openssl/bio.h>
+
+int BIO_get_new_index(void);
+
+BIO_METHOD *BIO_meth_new(int type, const char *name);
+
+void BIO_meth_free(BIO_METHOD *biom);
+
+int (*BIO_meth_get_write_ex(const BIO_METHOD *biom))(BIO *, const char *, size_t,
+                                               size_t *);
+int (*BIO_meth_get_write(const BIO_METHOD *biom))(BIO *, const char *, int);
+int BIO_meth_set_write_ex(BIO_METHOD *biom,
+                          int (*bwrite)(BIO *, const char *, size_t, size_t *));
+int BIO_meth_set_write(BIO_METHOD *biom,
+                       int (*write)(BIO *, const char *, int));
+
+int (*BIO_meth_get_read_ex(const BIO_METHOD *biom))(BIO *, char *, size_t, size_t *);
+int (*BIO_meth_get_read(const BIO_METHOD *biom))(BIO *, char *, int);
+int BIO_meth_set_read_ex(BIO_METHOD *biom,
+                         int (*bread)(BIO *, char *, size_t, size_t *));
+int BIO_meth_set_read(BIO_METHOD *biom, int (*read)(BIO *, char *, int));
+
+int (*BIO_meth_get_puts(const BIO_METHOD *biom))(BIO *, const char *);
+int BIO_meth_set_puts(BIO_METHOD *biom, int (*puts)(BIO *, const char *));
+
+int (*BIO_meth_get_gets(const BIO_METHOD *biom))(BIO *, char *, int);
+int BIO_meth_set_gets(BIO_METHOD *biom,
+                      int (*gets)(BIO *, char *, int));
+
+long (*BIO_meth_get_ctrl(const BIO_METHOD *biom))(BIO *, int, long, void *);
+int BIO_meth_set_ctrl(BIO_METHOD *biom,
+                      long (*ctrl)(BIO *, int, long, void *));
+
+int (*BIO_meth_get_create(const BIO_METHOD *bion))(BIO *);
+int BIO_meth_set_create(BIO_METHOD *biom, int (*create)(BIO *));
+
+int (*BIO_meth_get_destroy(const BIO_METHOD *biom))(BIO *);
+int BIO_meth_set_destroy(BIO_METHOD *biom, int (*destroy)(BIO *));
+
+long (*BIO_meth_get_callback_ctrl(const BIO_METHOD *biom))(BIO *, int, BIO_info_cb *);
+int BIO_meth_set_callback_ctrl(BIO_METHOD *biom,
+                               long (*callback_ctrl)(BIO *, int, BIO_info_cb *));
+ +

DESCRIPTION

+ +

The BIO_METHOD type is a structure used for the implementation of new BIO types. It provides a set of functions used by OpenSSL for the implementation of the various BIO capabilities. See the bio page for more information.

+ +

BIO_meth_new() creates a new BIO_METHOD structure. It should be given a unique integer type and a string that represents its name. Use BIO_get_new_index() to get the value for type.

+ +

The set of standard OpenSSL provided BIO types is provided in bio.h. Some examples include BIO_TYPE_BUFFER and BIO_TYPE_CIPHER. Filter BIOs should have a type which have the "filter" bit set (BIO_TYPE_FILTER). Source/sink BIOs should have the "source/sink" bit set (BIO_TYPE_SOURCE_SINK). File descriptor based BIOs (e.g. socket, fd, connect, accept etc) should additionally have the "descriptor" bit set (BIO_TYPE_DESCRIPTOR). See the BIO_find_type page for more information.

+ +

BIO_meth_free() destroys a BIO_METHOD structure and frees up any memory associated with it.

+ +

BIO_meth_get_write_ex() and BIO_meth_set_write_ex() get and set the function used for writing arbitrary length data to the BIO respectively. This function will be called in response to the application calling BIO_write_ex() or BIO_write(). The parameters for the function have the same meaning as for BIO_write_ex(). Older code may call BIO_meth_get_write() and BIO_meth_set_write() instead. Applications should not call both BIO_meth_set_write_ex() and BIO_meth_set_write() or call BIO_meth_get_write() when the function was set with BIO_meth_set_write_ex().

+ +

BIO_meth_get_read_ex() and BIO_meth_set_read_ex() get and set the function used for reading arbitrary length data from the BIO respectively. This function will be called in response to the application calling BIO_read_ex() or BIO_read(). The parameters for the function have the same meaning as for BIO_read_ex(). Older code may call BIO_meth_get_read() and BIO_meth_set_read() instead. Applications should not call both BIO_meth_set_read_ex() and BIO_meth_set_read() or call BIO_meth_get_read() when the function was set with BIO_meth_set_read_ex().

+ +

BIO_meth_get_puts() and BIO_meth_set_puts() get and set the function used for writing a NULL terminated string to the BIO respectively. This function will be called in response to the application calling BIO_puts(). The parameters for the function have the same meaning as for BIO_puts().

+ +

BIO_meth_get_gets() and BIO_meth_set_gets() get and set the function typically used for reading a line of data from the BIO respectively (see the BIO_gets(3) page for more information). This function will be called in response to the application calling BIO_gets(). The parameters for the function have the same meaning as for BIO_gets().

+ +

BIO_meth_get_ctrl() and BIO_meth_set_ctrl() get and set the function used for processing ctrl messages in the BIO respectively. See the BIO_ctrl page for more information. This function will be called in response to the application calling BIO_ctrl(). The parameters for the function have the same meaning as for BIO_ctrl().

+ +

BIO_meth_get_create() and BIO_meth_set_create() get and set the function used for creating a new instance of the BIO respectively. This function will be called in response to the application calling BIO_new() and passing in a pointer to the current BIO_METHOD. The BIO_new() function will allocate the memory for the new BIO, and a pointer to this newly allocated structure will be passed as a parameter to the function.

+ +

BIO_meth_get_destroy() and BIO_meth_set_destroy() get and set the function used for destroying an instance of a BIO respectively. This function will be called in response to the application calling BIO_free(). A pointer to the BIO to be destroyed is passed as a parameter. The destroy function should be used for BIO specific clean up. The memory for the BIO itself should not be freed by this function.

+ +

BIO_meth_get_callback_ctrl() and BIO_meth_set_callback_ctrl() get and set the function used for processing callback ctrl messages in the BIO respectively. See the BIO_callback_ctrl(3) page for more information. This function will be called in response to the application calling BIO_callback_ctrl(). The parameters for the function have the same meaning as for BIO_callback_ctrl().

+ +

RETURN VALUES

+ +

BIO_get_new_index() returns the new BIO type value or -1 if an error occurred.

+ +

BIO_meth_new(int type, const char *name) returns a valid BIO_METHOD or NULL if an error occurred.

+ +

The BIO_meth_set functions return 1 on success or 0 on error.

+ +

The BIO_meth_get functions return the corresponding function pointers.

+ +

SEE ALSO

+ +

bio, BIO_find_type, BIO_ctrl, BIO_read_ex, BIO_new

+ +

HISTORY

+ +

The functions described here were added in OpenSSL 1.1.0.

+ +

COPYRIGHT

+ +

Copyright 2016-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_new.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_new.html new file mode 100644 index 00000000..30b46277 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_new.html @@ -0,0 +1,84 @@ + + + + +BIO_new + + + + + + + + + + +

NAME

+ +

BIO_new, BIO_up_ref, BIO_free, BIO_vfree, BIO_free_all - BIO allocation and freeing functions

+ +

SYNOPSIS

+ +
#include <openssl/bio.h>
+
+BIO *  BIO_new(const BIO_METHOD *type);
+int    BIO_up_ref(BIO *a);
+int    BIO_free(BIO *a);
+void   BIO_vfree(BIO *a);
+void   BIO_free_all(BIO *a);
+ +

DESCRIPTION

+ +

The BIO_new() function returns a new BIO using method type.

+ +

BIO_up_ref() increments the reference count associated with the BIO object.

+ +

BIO_free() frees up a single BIO, BIO_vfree() also frees up a single BIO but it does not return a value. If a is NULL nothing is done. Calling BIO_free() may also have some effect on the underlying I/O structure, for example it may close the file being referred to under certain circumstances. For more details see the individual BIO_METHOD descriptions.

+ +

BIO_free_all() frees up an entire BIO chain, it does not halt if an error occurs freeing up an individual BIO in the chain. If a is NULL nothing is done.

+ +

RETURN VALUES

+ +

BIO_new() returns a newly created BIO or NULL if the call fails.

+ +

BIO_up_ref() and BIO_free() return 1 for success and 0 for failure.

+ +

BIO_free_all() and BIO_vfree() do not return values.

+ +

NOTES

+ +

If BIO_free() is called on a BIO chain it will only free one BIO resulting in a memory leak.

+ +

Calling BIO_free_all() on a single BIO has the same effect as calling BIO_free() on it other than the discarded return value.

+ +

HISTORY

+ +

BIO_set() was removed in OpenSSL 1.1.0 as BIO type is now opaque.

+ +

EXAMPLES

+ +

Create a memory BIO:

+ +
BIO *mem = BIO_new(BIO_s_mem());
+ +

COPYRIGHT

+ +

Copyright 2000-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_new_CMS.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_new_CMS.html new file mode 100644 index 00000000..78652b7e --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_new_CMS.html @@ -0,0 +1,81 @@ + + + + +BIO_new_CMS + + + + + + + + + + +

NAME

+ +

BIO_new_CMS - CMS streaming filter BIO

+ +

SYNOPSIS

+ +
#include <openssl/cms.h>
+
+BIO *BIO_new_CMS(BIO *out, CMS_ContentInfo *cms);
+ +

DESCRIPTION

+ +

BIO_new_CMS() returns a streaming filter BIO chain based on cms. The output of the filter is written to out. Any data written to the chain is automatically translated to a BER format CMS structure of the appropriate type.

+ +

NOTES

+ +

The chain returned by this function behaves like a standard filter BIO. It supports non blocking I/O. Content is processed and streamed on the fly and not all held in memory at once: so it is possible to encode very large structures. After all content has been written through the chain BIO_flush() must be called to finalise the structure.

+ +

The CMS_STREAM flag must be included in the corresponding flags parameter of the cms creation function.

+ +

If an application wishes to write additional data to out BIOs should be removed from the chain using BIO_pop() and freed with BIO_free() until out is reached. If no additional data needs to be written BIO_free_all() can be called to free up the whole chain.

+ +

Any content written through the filter is used verbatim: no canonical translation is performed.

+ +

It is possible to chain multiple BIOs to, for example, create a triple wrapped signed, enveloped, signed structure. In this case it is the applications responsibility to set the inner content type of any outer CMS_ContentInfo structures.

+ +

Large numbers of small writes through the chain should be avoided as this will produce an output consisting of lots of OCTET STRING structures. Prepending a BIO_f_buffer() buffering BIO will prevent this.

+ +

BUGS

+ +

There is currently no corresponding inverse BIO: i.e. one which can decode a CMS structure on the fly.

+ +

RETURN VALUES

+ +

BIO_new_CMS() returns a BIO chain when successful or NULL if an error occurred. The error can be obtained from ERR_get_error(3).

+ +

SEE ALSO

+ +

ERR_get_error(3), CMS_sign(3), CMS_encrypt(3)

+ +

HISTORY

+ +

The BIO_new_CMS() function was added in OpenSSL 1.0.0.

+ +

COPYRIGHT

+ +

Copyright 2008-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_parse_hostserv.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_parse_hostserv.html new file mode 100644 index 00000000..3c75e8b4 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_parse_hostserv.html @@ -0,0 +1,91 @@ + + + + +BIO_parse_hostserv + + + + + + + + + + +

NAME

+ +

BIO_hostserv_priorities, BIO_parse_hostserv - utility routines to parse a standard host and service string

+ +

SYNOPSIS

+ +
#include <openssl/bio.h>
+
+enum BIO_hostserv_priorities {
+    BIO_PARSE_PRIO_HOST, BIO_PARSE_PRIO_SERV
+};
+int BIO_parse_hostserv(const char *hostserv, char **host, char **service,
+                       enum BIO_hostserv_priorities hostserv_prio);
+ +

DESCRIPTION

+ +

BIO_parse_hostserv() will parse the information given in hostserv, create strings with the host name and service name and give those back via host and service. Those will need to be freed after they are used. hostserv_prio helps determine if hostserv shall be interpreted primarily as a host name or a service name in ambiguous cases.

+ +

The syntax the BIO_parse_hostserv() recognises is:

+ +
host + ':' + service
+host + ':' + '*'
+host + ':'
+       ':' + service
+'*'  + ':' + service
+host
+service
+ +

The host part can be a name or an IP address. If it's a IPv6 address, it MUST be enclosed in brackets, such as '[::1]'.

+ +

The service part can be a service name or its port number.

+ +

The returned values will depend on the given hostserv string and hostserv_prio, as follows:

+ +
host + ':' + service  => *host = "host", *service = "service"
+host + ':' + '*'      => *host = "host", *service = NULL
+host + ':'            => *host = "host", *service = NULL
+       ':' + service  => *host = NULL, *service = "service"
+ '*' + ':' + service  => *host = NULL, *service = "service"
+
+in case no ':' is present in the string, the result depends on
+hostserv_prio, as follows:
+
+when hostserv_prio == BIO_PARSE_PRIO_HOST
+host                 => *host = "host", *service untouched
+
+when hostserv_prio == BIO_PARSE_PRIO_SERV
+service              => *host untouched, *service = "service"
+ +

RETURN VALUES

+ +

BIO_parse_hostserv() returns 1 on success or 0 on error.

+ +

SEE ALSO

+ +

BIO_ADDRINFO(3)

+ +

COPYRIGHT

+ +

Copyright 2016-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_printf.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_printf.html new file mode 100644 index 00000000..cc2c06fe --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_printf.html @@ -0,0 +1,61 @@ + + + + +BIO_printf + + + + + + + + + + +

NAME

+ +

BIO_printf, BIO_vprintf, BIO_snprintf, BIO_vsnprintf - formatted output to a BIO

+ +

SYNOPSIS

+ +
#include <openssl/bio.h>
+
+int BIO_printf(BIO *bio, const char *format, ...)
+int BIO_vprintf(BIO *bio, const char *format, va_list args)
+
+int BIO_snprintf(char *buf, size_t n, const char *format, ...)
+int BIO_vsnprintf(char *buf, size_t n, const char *format, va_list args)
+ +

DESCRIPTION

+ +

BIO_printf() is similar to the standard C printf() function, except that the output is sent to the specified BIO, bio, rather than standard output. All common format specifiers are supported.

+ +

BIO_vprintf() is similar to the vprintf() function found on many platforms, the output is sent to the specified BIO, bio, rather than standard output. All common format specifiers are supported. The argument list args is a stdarg argument list.

+ +

BIO_snprintf() is for platforms that do not have the common snprintf() function. It is like sprintf() except that the size parameter, n, specifies the size of the output buffer.

+ +

BIO_vsnprintf() is to BIO_snprintf() as BIO_vprintf() is to BIO_printf().

+ +

RETURN VALUES

+ +

All functions return the number of bytes written, or -1 on error. For BIO_snprintf() and BIO_vsnprintf() this includes when the output buffer is too small.

+ +

COPYRIGHT

+ +

Copyright 2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_push.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_push.html new file mode 100644 index 00000000..6c490997 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_push.html @@ -0,0 +1,98 @@ + + + + +BIO_push + + + + + + + + + + +

NAME

+ +

BIO_push, BIO_pop, BIO_set_next - add and remove BIOs from a chain

+ +

SYNOPSIS

+ +
#include <openssl/bio.h>
+
+BIO *BIO_push(BIO *b, BIO *append);
+BIO *BIO_pop(BIO *b);
+void BIO_set_next(BIO *b, BIO *next);
+ +

DESCRIPTION

+ +

The BIO_push() function appends the BIO append to b, it returns b.

+ +

BIO_pop() removes the BIO b from a chain and returns the next BIO in the chain, or NULL if there is no next BIO. The removed BIO then becomes a single BIO with no association with the original chain, it can thus be freed or attached to a different chain.

+ +

BIO_set_next() replaces the existing next BIO in a chain with the BIO pointed to by next. The new chain may include some of the same BIOs from the old chain or it may be completely different.

+ +

NOTES

+ +

The names of these functions are perhaps a little misleading. BIO_push() joins two BIO chains whereas BIO_pop() deletes a single BIO from a chain, the deleted BIO does not need to be at the end of a chain.

+ +

The process of calling BIO_push() and BIO_pop() on a BIO may have additional consequences (a control call is made to the affected BIOs) any effects will be noted in the descriptions of individual BIOs.

+ +

RETURN VALUES

+ +

BIO_push() returns the end of the chain, b.

+ +

BIO_pop() returns the next BIO in the chain, or NULL if there is no next BIO.

+ +

EXAMPLES

+ +

For these examples suppose md1 and md2 are digest BIOs, b64 is a base64 BIO and f is a file BIO.

+ +

If the call:

+ +
BIO_push(b64, f);
+ +

is made then the new chain will be b64-f. After making the calls

+ +
BIO_push(md2, b64);
+BIO_push(md1, md2);
+ +

the new chain is md1-md2-b64-f. Data written to md1 will be digested by md1 and md2, base64 encoded and written to f.

+ +

It should be noted that reading causes data to pass in the reverse direction, that is data is read from f, base64 decoded and digested by md1 and md2. If the call:

+ +
BIO_pop(md2);
+ +

The call will return b64 and the new chain will be md1-b64-f data can be written to md1 as before.

+ +

SEE ALSO

+ +

bio

+ +

HISTORY

+ +

The BIO_set_next() function was added in OpenSSL 1.1.0.

+ +

COPYRIGHT

+ +

Copyright 2000-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_read.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_read.html new file mode 100644 index 00000000..05fce951 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_read.html @@ -0,0 +1,90 @@ + + + + +BIO_read + + + + + + + + + + +

NAME

+ +

BIO_read_ex, BIO_write_ex, BIO_read, BIO_write, BIO_gets, BIO_puts - BIO I/O functions

+ +

SYNOPSIS

+ +
#include <openssl/bio.h>
+
+int BIO_read_ex(BIO *b, void *data, size_t dlen, size_t *readbytes);
+int BIO_write_ex(BIO *b, const void *data, size_t dlen, size_t *written);
+
+int BIO_read(BIO *b, void *data, int dlen);
+int BIO_gets(BIO *b, char *buf, int size);
+int BIO_write(BIO *b, const void *data, int dlen);
+int BIO_puts(BIO *b, const char *buf);
+ +

DESCRIPTION

+ +

BIO_read_ex() attempts to read dlen bytes from BIO b and places the data in data. If any bytes were successfully read then the number of bytes read is stored in *readbytes.

+ +

BIO_write_ex() attempts to write dlen bytes from data to BIO b. If successful then the number of bytes written is stored in *written.

+ +

BIO_read() attempts to read len bytes from BIO b and places the data in buf.

+ +

BIO_gets() performs the BIOs "gets" operation and places the data in buf. Usually this operation will attempt to read a line of data from the BIO of maximum length size-1. There are exceptions to this, however; for example, BIO_gets() on a digest BIO will calculate and return the digest and other BIOs may not support BIO_gets() at all. The returned string is always NUL-terminated and the '\n' is preserved if present in the input data.

+ +

BIO_write() attempts to write len bytes from buf to BIO b.

+ +

BIO_puts() attempts to write a NUL-terminated string buf to BIO b.

+ +

RETURN VALUES

+ +

BIO_read_ex() and BIO_write_ex() return 1 if data was successfully read or written, and 0 otherwise.

+ +

All other functions return either the amount of data successfully read or written (if the return value is positive) or that no data was successfully read or written if the result is 0 or -1. If the return value is -2 then the operation is not implemented in the specific BIO type. The trailing NUL is not included in the length returned by BIO_gets().

+ +

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 it may merely be an indication that no data is currently available and that the application should retry the operation later.

+ +

One technique sometimes used with blocking sockets is to use a system call (such as select(), poll() or equivalent) to determine when data is available and then call read() to read the data. The equivalent with BIOs (that is call select() on the underlying I/O structure and then call BIO_read() to read the data) should not be used because a single call to BIO_read() can cause several reads (and writes in the case of SSL BIOs) on the underlying I/O structure and may block as a result. Instead select() (or equivalent) should be combined with non blocking I/O so successive reads will request a retry instead of blocking.

+ +

See BIO_should_retry(3) for details of how to determine the cause of a retry and other I/O issues.

+ +

If the BIO_gets() function is not supported by a BIO then it possible to work around this by adding a buffering BIO BIO_f_buffer(3) to the chain.

+ +

SEE ALSO

+ +

BIO_should_retry(3)

+ +

HISTORY

+ +

BIO_gets() on 1.1.0 and older when called on BIO_fd() based BIO does not keep the '\n' at the end of the line in the buffer.

+ +

COPYRIGHT

+ +

Copyright 2000-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_s_accept.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_s_accept.html new file mode 100644 index 00000000..23ad9cde --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_s_accept.html @@ -0,0 +1,175 @@ + + + + +BIO_s_accept + + + + + + + + + + +

NAME

+ +

BIO_s_accept, BIO_set_accept_name, BIO_set_accept_port, BIO_get_accept_name, BIO_get_accept_port, BIO_new_accept, BIO_set_nbio_accept, BIO_set_accept_bios, BIO_get_peer_name, BIO_get_peer_port, BIO_get_accept_ip_family, BIO_set_accept_ip_family, BIO_set_bind_mode, BIO_get_bind_mode, BIO_do_accept - accept BIO

+ +

SYNOPSIS

+ +
#include <openssl/bio.h>
+
+const BIO_METHOD *BIO_s_accept(void);
+
+long BIO_set_accept_name(BIO *b, char *name);
+char *BIO_get_accept_name(BIO *b);
+
+long BIO_set_accept_port(BIO *b, char *port);
+char *BIO_get_accept_port(BIO *b);
+
+BIO *BIO_new_accept(char *host_port);
+
+long BIO_set_nbio_accept(BIO *b, int n);
+long BIO_set_accept_bios(BIO *b, char *bio);
+
+char *BIO_get_peer_name(BIO *b);
+char *BIO_get_peer_port(BIO *b);
+long BIO_get_accept_ip_family(BIO *b);
+long BIO_set_accept_ip_family(BIO *b, long family);
+
+long BIO_set_bind_mode(BIO *b, long mode);
+long BIO_get_bind_mode(BIO *b);
+
+int BIO_do_accept(BIO *b);
+ +

DESCRIPTION

+ +

BIO_s_accept() returns the accept BIO method. This is a wrapper round the platform's TCP/IP socket accept routines.

+ +

Using accept BIOs, TCP/IP connections can be accepted and data transferred using only BIO routines. In this way any platform specific operations are hidden by the BIO abstraction.

+ +

Read and write operations on an accept BIO will perform I/O on the underlying connection. If no connection is established and the port (see below) is set up properly then the BIO waits for an incoming connection.

+ +

Accept BIOs support BIO_puts() but not BIO_gets().

+ +

If the close flag is set on an accept BIO then any active connection on that chain is shutdown and the socket closed when the BIO is freed.

+ +

Calling BIO_reset() on an accept BIO will close any active connection and reset the BIO into a state where it awaits another incoming connection.

+ +

BIO_get_fd() and BIO_set_fd() can be called to retrieve or set the accept socket. See BIO_s_fd(3)

+ +

BIO_set_accept_name() uses the string name to set the accept name. The name is represented as a string of the form "host:port", where "host" is the interface to use and "port" is the port. The host can be "*" or empty which is interpreted as meaning any interface. If the host is an IPv6 address, it has to be enclosed in brackets, for example "[::1]:https". "port" has the same syntax as the port specified in BIO_set_conn_port() for connect BIOs, that is it can be a numerical port string or a string to lookup using getservbyname() and a string table.

+ +

BIO_set_accept_port() uses the string port to set the accept port. "port" has the same syntax as the port specified in BIO_set_conn_port() for connect BIOs, that is it can be a numerical port string or a string to lookup using getservbyname() and a string table.

+ +

BIO_new_accept() combines BIO_new() and BIO_set_accept_name() into a single call: that is it creates a new accept BIO with port host_port.

+ +

BIO_set_nbio_accept() sets the accept socket to blocking mode (the default) if n is 0 or non blocking mode if n is 1.

+ +

BIO_set_accept_bios() can be used to set a chain of BIOs which will be duplicated and prepended to the chain when an incoming connection is received. This is useful if, for example, a buffering or SSL BIO is required for each connection. The chain of BIOs must not be freed after this call, they will be automatically freed when the accept BIO is freed.

+ +

BIO_set_bind_mode() and BIO_get_bind_mode() set and retrieve the current bind mode. If BIO_BIND_NORMAL (the default) is set then another socket cannot be bound to the same port. If BIO_BIND_REUSEADDR is set then other sockets can bind to the same port. If BIO_BIND_REUSEADDR_IF_UNUSED is set then and attempt is first made to use BIO_BIN_NORMAL, if this fails and the port is not in use then a second attempt is made using BIO_BIND_REUSEADDR.

+ +

BIO_do_accept() serves two functions. When it is first called, after the accept BIO has been setup, it will attempt to create the accept socket and bind an address to it. Second and subsequent calls to BIO_do_accept() will await an incoming connection, or request a retry in non blocking mode.

+ +

NOTES

+ +

When an accept BIO is at the end of a chain it will await an incoming connection before processing I/O calls. When an accept BIO is not at then end of a chain it passes I/O calls to the next BIO in the chain.

+ +

When a connection is established a new socket BIO is created for the connection and appended to the chain. That is the chain is now accept->socket. This effectively means that attempting I/O on an initial accept socket will await an incoming connection then perform I/O on it.

+ +

If any additional BIOs have been set using BIO_set_accept_bios() then they are placed between the socket and the accept BIO, that is the chain will be accept->otherbios->socket.

+ +

If a server wishes to process multiple connections (as is normally the case) then the accept BIO must be made available for further incoming connections. This can be done by waiting for a connection and then calling:

+ +
connection = BIO_pop(accept);
+ +

After this call connection will contain a BIO for the recently established connection and accept will now be a single BIO again which can be used to await further incoming connections. If no further connections will be accepted the accept can be freed using BIO_free().

+ +

If only a single connection will be processed it is possible to perform I/O using the accept BIO itself. This is often undesirable 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 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 should take appropriate action to wait until the underlying socket has accepted a connection and retry the call.

+ +

BIO_set_accept_name(), BIO_get_accept_name(), BIO_set_accept_port(), BIO_get_accept_port(), BIO_set_nbio_accept(), BIO_set_accept_bios(), BIO_get_peer_name(), BIO_get_peer_port(), BIO_get_accept_ip_family(), BIO_set_accept_ip_family(), BIO_set_bind_mode(), BIO_get_bind_mode() and BIO_do_accept() are macros.

+ +

RETURN VALUES

+ +

BIO_do_accept(), BIO_set_accept_name(), BIO_set_accept_port(), BIO_set_nbio_accept(), BIO_set_accept_bios(), BIO_set_accept_ip_family(), and BIO_set_bind_mode() return 1 for success and 0 or -1 for failure.

+ +

BIO_get_accept_name() returns the accept name or NULL on error. BIO_get_peer_name() returns the peer name or NULL on error.

+ +

BIO_get_accept_port() returns the accept port as a string or NULL on error. BIO_get_peer_port() returns the peer port as a string or NULL on error. BIO_get_accept_ip_family() returns the IP family or -1 on error.

+ +

BIO_get_bind_mode() returns the set of BIO_BIND flags, or -1 on failure.

+ +

BIO_new_accept() returns a BIO or NULL on error.

+ +

EXAMPLES

+ +

This example accepts two connections on port 4444, sends messages down each and finally closes both down.

+ +
BIO *abio, *cbio, *cbio2;
+
+/* First call to BIO_accept() sets up accept BIO */
+abio = BIO_new_accept("4444");
+if (BIO_do_accept(abio) <= 0) {
+    fprintf(stderr, "Error setting up accept\n");
+    ERR_print_errors_fp(stderr);
+    exit(1);
+}
+
+/* Wait for incoming connection */
+if (BIO_do_accept(abio) <= 0) {
+    fprintf(stderr, "Error accepting connection\n");
+    ERR_print_errors_fp(stderr);
+    exit(1);
+}
+fprintf(stderr, "Connection 1 established\n");
+
+/* Retrieve BIO for connection */
+cbio = BIO_pop(abio);
+BIO_puts(cbio, "Connection 1: Sending out Data on initial connection\n");
+fprintf(stderr, "Sent out data on connection 1\n");
+
+/* Wait for another connection */
+if (BIO_do_accept(abio) <= 0) {
+    fprintf(stderr, "Error accepting connection\n");
+    ERR_print_errors_fp(stderr);
+    exit(1);
+}
+fprintf(stderr, "Connection 2 established\n");
+
+/* Close accept BIO to refuse further connections */
+cbio2 = BIO_pop(abio);
+BIO_free(abio);
+BIO_puts(cbio2, "Connection 2: Sending out Data on second\n");
+fprintf(stderr, "Sent out data on connection 2\n");
+
+BIO_puts(cbio, "Connection 1: Second connection established\n");
+
+/* Close the two established connections */
+BIO_free(cbio);
+BIO_free(cbio2);
+ +

COPYRIGHT

+ +

Copyright 2000-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_s_bio.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_s_bio.html new file mode 100644 index 00000000..4d6cd528 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_s_bio.html @@ -0,0 +1,157 @@ + + + + +BIO_s_bio + + + + + + + + + + +

NAME

+ +

BIO_s_bio, BIO_make_bio_pair, BIO_destroy_bio_pair, BIO_shutdown_wr, BIO_set_write_buf_size, BIO_get_write_buf_size, BIO_new_bio_pair, BIO_get_write_guarantee, BIO_ctrl_get_write_guarantee, BIO_get_read_request, BIO_ctrl_get_read_request, BIO_ctrl_reset_read_request - BIO pair BIO

+ +

SYNOPSIS

+ +
#include <openssl/bio.h>
+
+const BIO_METHOD *BIO_s_bio(void);
+
+int BIO_make_bio_pair(BIO *b1, BIO *b2);
+int BIO_destroy_bio_pair(BIO *b);
+int BIO_shutdown_wr(BIO *b);
+
+int BIO_set_write_buf_size(BIO *b, long size);
+size_t BIO_get_write_buf_size(BIO *b, long size);
+
+int BIO_new_bio_pair(BIO **bio1, size_t writebuf1, BIO **bio2, size_t writebuf2);
+
+int BIO_get_write_guarantee(BIO *b);
+size_t BIO_ctrl_get_write_guarantee(BIO *b);
+int BIO_get_read_request(BIO *b);
+size_t BIO_ctrl_get_read_request(BIO *b);
+int BIO_ctrl_reset_read_request(BIO *b);
+ +

DESCRIPTION

+ +

BIO_s_bio() returns the method for a BIO pair. A BIO pair is a pair of source/sink BIOs where data written to either half of the pair is buffered and can be read from the other half. Both halves must usually by handled by the same application thread since no locking is done on the internal data structures.

+ +

Since BIO chains typically end in a source/sink BIO it is possible to make this one half of a BIO pair and have all the data processed by the chain under application control.

+ +

One typical use of BIO pairs is to place TLS/SSL I/O under application control, this can be used when the application wishes to use a non standard transport for TLS/SSL or the normal socket routines are inappropriate.

+ +

Calls to BIO_read_ex() will read data from the buffer or request a retry if no data is available.

+ +

Calls to BIO_write_ex() will place data in the buffer or request a retry if the buffer is full.

+ +

The standard calls BIO_ctrl_pending() and BIO_ctrl_wpending() can be used to determine the amount of pending data in the read or write buffer.

+ +

BIO_reset() clears any data in the write buffer.

+ +

BIO_make_bio_pair() joins two separate BIOs into a connected pair.

+ +

BIO_destroy_pair() destroys the association between two connected BIOs. Freeing up any half of the pair will automatically destroy the association.

+ +

BIO_shutdown_wr() is used to close down a BIO b. After this call no further writes on BIO b are allowed (they will return an error). Reads on the other half of the pair will return any pending data or EOF when all pending data has been read.

+ +

BIO_set_write_buf_size() sets the write buffer size of BIO b to size. If the size is not initialized a default value is used. This is currently 17K, sufficient for a maximum size TLS record.

+ +

BIO_get_write_buf_size() returns the size of the write buffer.

+ +

BIO_new_bio_pair() combines the calls to BIO_new(), BIO_make_bio_pair() and BIO_set_write_buf_size() to create a connected pair of BIOs bio1, bio2 with write buffer sizes writebuf1 and writebuf2. If either size is zero then the default size is used. BIO_new_bio_pair() does not check whether bio1 or bio2 do point to some other BIO, the values are overwritten, BIO_free() is not called.

+ +

BIO_get_write_guarantee() and BIO_ctrl_get_write_guarantee() return the maximum length of data that can be currently written to the BIO. Writes larger than this value will return a value from BIO_write_ex() less than the amount requested or if the buffer is full request a retry. BIO_ctrl_get_write_guarantee() is a function whereas BIO_get_write_guarantee() is a macro.

+ +

BIO_get_read_request() and BIO_ctrl_get_read_request() return the amount of data requested, or the buffer size if it is less, if the last read attempt at the other half of the BIO pair failed due to an empty buffer. This can be used to determine how much data should be written to the BIO so the next read will succeed: this is most useful in TLS/SSL applications where the amount of data read is usually meaningful rather than just a buffer size. After a successful read this call will return zero. It also will return zero once new data has been written satisfying the read request or part of it. Note that BIO_get_read_request() never returns an amount larger than that returned by BIO_get_write_guarantee().

+ +

BIO_ctrl_reset_read_request() can also be used to reset the value returned by BIO_get_read_request() to zero.

+ +

NOTES

+ +

Both halves of a BIO pair should be freed. That is even if one half is implicit freed due to a BIO_free_all() or SSL_free() call the other half needs to be freed.

+ +

When used in bidirectional applications (such as TLS/SSL) care should be taken to flush any data in the write buffer. This can be done by calling BIO_pending() on the other half of the pair and, if any data is pending, reading it and sending it to the underlying transport. This must be done before any normal processing (such as calling select() ) due to a request and BIO_should_read() being true.

+ +

To see why this is important consider a case where a request is sent using BIO_write_ex() and a response read with BIO_read_ex(), this can occur during an TLS/SSL handshake for example. BIO_write_ex() will succeed and place data in the write buffer. BIO_read_ex() will initially fail and BIO_should_read() will be true. If the application then waits for data to be available on the underlying transport before flushing the write buffer it will never succeed because the request was never sent!

+ +

BIO_eof() is true if no data is in the peer BIO and the peer BIO has been shutdown.

+ +

BIO_make_bio_pair(), BIO_destroy_bio_pair(), BIO_shutdown_wr(), BIO_set_write_buf_size(), BIO_get_write_buf_size(), BIO_get_write_guarantee(), and BIO_get_read_request() are implemented as macros.

+ +

RETURN VALUES

+ +

BIO_new_bio_pair() returns 1 on success, with the new BIOs available in bio1 and bio2, or 0 on failure, with NULL pointers stored into the locations for bio1 and bio2. Check the error stack for more information.

+ +

[XXXXX: More return values need to be added here]

+ +

EXAMPLES

+ +

The BIO pair can be used to have full control over the network access of an application. The application can call select() on the socket as required without having to go through the SSL-interface.

+ +
BIO *internal_bio, *network_bio;
+
+...
+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 */
+...
+
+application |   TLS-engine
+   |        |
+   +----------> SSL_operations()
+            |     /\    ||
+            |     ||    \/
+            |   BIO-pair (internal_bio)
+            |   BIO-pair (network_bio)
+            |     ||     /\
+            |     \/     ||
+   +-----------< BIO_operations()
+   |        |
+   |        |
+  socket
+
+ ...
+ SSL_free(ssl);                /* implicitly frees internal_bio */
+ BIO_free(network_bio);
+ ...
+ +

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 buffer is full or the read buffer is drained. Then the application has to flush the write buffer and/or fill the read buffer.

+ +

Use the BIO_ctrl_pending(), to find out whether data is buffered in the BIO and must be transferred to the network. Use BIO_ctrl_get_read_request() to find out, how many bytes must be written into the buffer before the SSL_operation() can successfully be continued.

+ +

WARNINGS

+ +

As the data is buffered, SSL_operation() may return with an ERROR_SSL_WANT_READ condition, but there is still data in the write buffer. An application must not rely on the error value of SSL_operation() but must assure that the write buffer is always flushed first. Otherwise a deadlock may occur as the peer might be waiting for the data before being able to continue.

+ +

SEE ALSO

+ +

SSL_set_bio(3), ssl(7), bio(7), BIO_should_retry(3), BIO_read_ex(3)

+ +

COPYRIGHT

+ +

Copyright 2000-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_s_connect.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_s_connect.html new file mode 100644 index 00000000..1c28920a --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_s_connect.html @@ -0,0 +1,171 @@ + + + + +BIO_s_connect + + + + + + + + + + +

NAME

+ +

BIO_set_conn_address, BIO_get_conn_address, BIO_s_connect, BIO_new_connect, BIO_set_conn_hostname, BIO_set_conn_port, BIO_set_conn_ip_family, BIO_get_conn_ip_family, BIO_get_conn_hostname, BIO_get_conn_port, BIO_set_nbio, BIO_do_connect - connect BIO

+ +

SYNOPSIS

+ +
#include <openssl/bio.h>
+
+const BIO_METHOD * BIO_s_connect(void);
+
+BIO *BIO_new_connect(char *name);
+
+long BIO_set_conn_hostname(BIO *b, char *name);
+long BIO_set_conn_port(BIO *b, char *port);
+long BIO_set_conn_address(BIO *b, BIO_ADDR *addr);
+long BIO_set_conn_ip_family(BIO *b, long family);
+const char *BIO_get_conn_hostname(BIO *b);
+const char *BIO_get_conn_port(BIO *b);
+const BIO_ADDR *BIO_get_conn_address(BIO *b);
+const long BIO_get_conn_ip_family(BIO *b);
+
+long BIO_set_nbio(BIO *b, long n);
+
+int BIO_do_connect(BIO *b);
+ +

DESCRIPTION

+ +

BIO_s_connect() returns the connect BIO method. This is a wrapper round the platform's TCP/IP socket connection routines.

+ +

Using connect BIOs, TCP/IP connections can be made and data transferred using only BIO routines. In this way any platform specific operations are hidden by the BIO abstraction.

+ +

Read and write operations on a connect BIO will perform I/O on the underlying connection. If no connection is established and the port and hostname (see below) is set up properly then a connection is established first.

+ +

Connect BIOs support BIO_puts() but not BIO_gets().

+ +

If the close flag is set on a connect BIO then any active connection is shutdown and the socket closed when the BIO is freed.

+ +

Calling BIO_reset() on a connect BIO will close any active connection and reset the BIO into a state where it can connect to the same host again.

+ +

BIO_get_fd() places the underlying socket in c if it is not NULL, it also returns the socket . If c is not NULL it should be of type (int *).

+ +

BIO_set_conn_hostname() uses the string name to set the hostname. The hostname can be an IP address; if the address is an IPv6 one, it must be enclosed with brackets. The hostname can also include the port in the form hostname:port.

+ +

BIO_set_conn_port() sets the port to port. port can be the numerical form or a string such as "http". A string will be looked up first using getservbyname() on the host platform but if that fails a standard table of port names will be used. This internal list is http, telnet, socks, https, ssl, ftp, and gopher.

+ +

BIO_set_conn_address() sets the address and port information using a BIO_ADDR(3ssl).

+ +

BIO_set_conn_ip_family() sets the IP family.

+ +

BIO_get_conn_hostname() returns the hostname of the connect BIO or NULL if the BIO is initialized but no hostname is set. This return value is an internal pointer which should not be modified.

+ +

BIO_get_conn_port() returns the port as a string. This return value is an internal pointer which should not be modified.

+ +

BIO_get_conn_address() returns the address information as a BIO_ADDR. This return value is an internal pointer which should not be modified.

+ +

BIO_get_conn_ip_family() returns the IP family of the connect BIO.

+ +

BIO_set_nbio() sets the non blocking I/O flag to n. If n is zero then blocking I/O is set. If n is 1 then non blocking I/O is set. Blocking I/O is the default. The call to BIO_set_nbio() should be made before the connection is established because non blocking I/O is set during the connect process.

+ +

BIO_new_connect() combines BIO_new() and BIO_set_conn_hostname() into a single call: that is it creates a new connect BIO with name.

+ +

BIO_do_connect() attempts to connect the supplied BIO. It returns 1 if the connection was established successfully. A zero or negative value is returned if the connection could not be established, the call BIO_should_retry() should be used for non blocking connect BIOs to determine if the call should be retried.

+ +

NOTES

+ +

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 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 ':' character in the passed hostname and either indicating an error or truncating the string at that point.

+ +

The values returned by BIO_get_conn_hostname(), BIO_get_conn_address(), and BIO_get_conn_port() are updated when a connection attempt is made. Before any connection attempt the values returned are those set by the application itself.

+ +

Applications do not have to call BIO_do_connect() but may wish to do so to separate the connection process from other I/O processing.

+ +

If non blocking I/O is set then retries will be requested as appropriate.

+ +

It addition to BIO_should_read() and BIO_should_write() it is also possible for BIO_should_io_special() to be true during the initial connection process with the reason BIO_RR_CONNECT. If this is returned then this is an indication that a connection attempt would block, the application should then take appropriate action to wait until the underlying socket has connected and retry the call.

+ +

BIO_set_conn_hostname(), BIO_set_conn_port(), BIO_get_conn_hostname(), BIO_set_conn_address(), BIO_get_conn_port(), BIO_get_conn_address(), BIO_set_conn_ip_family(), BIO_get_conn_ip_family(), BIO_set_nbio(), and BIO_do_connect() are macros.

+ +

RETURN VALUES

+ +

BIO_s_connect() returns the connect BIO method.

+ +

BIO_get_fd() returns the socket or -1 if the BIO has not been initialized.

+ +

BIO_set_conn_address(), BIO_set_conn_port(), and BIO_set_conn_ip_family() always return 1.

+ +

BIO_set_conn_hostname() returns 1 on success and 0 on failure.

+ +

BIO_get_conn_address() returns the address information or NULL if none was set.

+ +

BIO_get_conn_hostname() returns the connected hostname or NULL if none was set.

+ +

BIO_get_conn_ip_family() returns the address family or -1 if none was set.

+ +

BIO_get_conn_port() returns a string representing the connected port or NULL if not set.

+ +

BIO_set_nbio() always returns 1.

+ +

BIO_do_connect() returns 1 if the connection was successfully established and 0 or -1 if the connection failed.

+ +

EXAMPLES

+ +

This is example connects to a webserver on the local host and attempts to retrieve a page and copy the result to standard output.

+ +
BIO *cbio, *out;
+int len;
+char tmpbuf[1024];
+
+cbio = BIO_new_connect("localhost:http");
+out = BIO_new_fp(stdout, BIO_NOCLOSE);
+if (BIO_do_connect(cbio) <= 0) {
+    fprintf(stderr, "Error connecting to server\n");
+    ERR_print_errors_fp(stderr);
+    exit(1);
+}
+BIO_puts(cbio, "GET / HTTP/1.0\n\n");
+for (;;) {
+    len = BIO_read(cbio, tmpbuf, 1024);
+    if (len <= 0)
+        break;
+    BIO_write(out, tmpbuf, len);
+}
+BIO_free(cbio);
+BIO_free(out);
+ +

SEE ALSO

+ +

BIO_ADDR(3)

+ +

HISTORY

+ +

BIO_set_conn_int_port(), BIO_get_conn_int_port(), BIO_set_conn_ip(), and BIO_get_conn_ip() were removed in OpenSSL 1.1.0. Use BIO_set_conn_address() and BIO_get_conn_address() instead.

+ +

COPYRIGHT

+ +

Copyright 2000-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_s_fd.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_s_fd.html new file mode 100644 index 00000000..509451c9 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_s_fd.html @@ -0,0 +1,103 @@ + + + + +BIO_s_fd + + + + + + + + + + +

NAME

+ +

BIO_s_fd, BIO_set_fd, BIO_get_fd, BIO_new_fd - file descriptor BIO

+ +

SYNOPSIS

+ +
#include <openssl/bio.h>
+
+const BIO_METHOD *BIO_s_fd(void);
+
+int BIO_set_fd(BIO *b, int fd, int c);
+int BIO_get_fd(BIO *b, int *c);
+
+BIO *BIO_new_fd(int fd, int close_flag);
+ +

DESCRIPTION

+ +

BIO_s_fd() returns the file descriptor BIO method. This is a wrapper round the platforms file descriptor routines such as read() and write().

+ +

BIO_read_ex() and BIO_write_ex() read or write the underlying descriptor. BIO_puts() is supported but BIO_gets() is not.

+ +

If the close flag is set then close() is called on the underlying file descriptor when the BIO is freed.

+ +

BIO_reset() attempts to change the file pointer to the start of file such as by using lseek(fd, 0, 0).

+ +

BIO_seek() sets the file pointer to position ofs from start of file such as by using lseek(fd, ofs, 0).

+ +

BIO_tell() returns the current file position such as by calling lseek(fd, 0, 1).

+ +

BIO_set_fd() sets the file descriptor of BIO b to fd and the close flag to c.

+ +

BIO_get_fd() places the file descriptor in c if it is not NULL, it also returns the file descriptor.

+ +

BIO_new_fd() returns a file descriptor BIO using fd and close_flag.

+ +

NOTES

+ +

The behaviour of BIO_read_ex() and BIO_write_ex() depends on the behavior of the platforms read() and write() calls on the descriptor. If the underlying file descriptor is in a non blocking mode then the BIO will behave in the manner described in the BIO_read_ex(3) and BIO_should_retry(3) manual pages.

+ +

File descriptor BIOs should not be used for socket I/O. Use socket BIOs instead.

+ +

BIO_set_fd() and BIO_get_fd() are implemented as macros.

+ +

RETURN VALUES

+ +

BIO_s_fd() returns the file descriptor BIO method.

+ +

BIO_set_fd() always returns 1.

+ +

BIO_get_fd() returns the file descriptor or -1 if the BIO has not been initialized.

+ +

BIO_new_fd() returns the newly allocated BIO or NULL is an error occurred.

+ +

EXAMPLES

+ +

This is a file descriptor BIO version of "Hello World":

+ +
BIO *out;
+
+out = BIO_new_fd(fileno(stdout), BIO_NOCLOSE);
+BIO_printf(out, "Hello World\n");
+BIO_free(out);
+ +

SEE ALSO

+ +

BIO_seek(3), BIO_tell(3), BIO_reset(3), BIO_read_ex(3), BIO_write_ex(3), BIO_puts(3), BIO_gets(3), BIO_printf(3), BIO_set_close(3), BIO_get_close(3)

+ +

COPYRIGHT

+ +

Copyright 2000-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_s_file.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_s_file.html new file mode 100644 index 00000000..31246e59 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_s_file.html @@ -0,0 +1,159 @@ + + + + +BIO_s_file + + + + + + + + + + +

NAME

+ +

BIO_s_file, BIO_new_file, BIO_new_fp, BIO_set_fp, BIO_get_fp, BIO_read_filename, BIO_write_filename, BIO_append_filename, BIO_rw_filename - FILE bio

+ +

SYNOPSIS

+ +
#include <openssl/bio.h>
+
+const BIO_METHOD *BIO_s_file(void);
+BIO *BIO_new_file(const char *filename, const char *mode);
+BIO *BIO_new_fp(FILE *stream, int flags);
+
+BIO_set_fp(BIO *b, FILE *fp, int flags);
+BIO_get_fp(BIO *b, FILE **fpp);
+
+int BIO_read_filename(BIO *b, char *name)
+int BIO_write_filename(BIO *b, char *name)
+int BIO_append_filename(BIO *b, char *name)
+int BIO_rw_filename(BIO *b, char *name)
+ +

DESCRIPTION

+ +

BIO_s_file() returns the BIO file method. As its name implies it is a wrapper round the stdio FILE structure and it is a source/sink BIO.

+ +

Calls to BIO_read_ex() and BIO_write_ex() read and write data to the underlying stream. BIO_gets() and BIO_puts() are supported on file BIOs.

+ +

BIO_flush() on a file BIO calls the fflush() function on the wrapped stream.

+ +

BIO_reset() attempts to change the file pointer to the start of file using fseek(stream, 0, 0).

+ +

BIO_seek() sets the file pointer to position ofs from start of file using fseek(stream, ofs, 0).

+ +

BIO_eof() calls feof().

+ +

Setting the BIO_CLOSE flag calls fclose() on the stream when the BIO is freed.

+ +

BIO_new_file() creates a new file BIO with mode mode the meaning of mode is the same as the stdio function fopen(). The BIO_CLOSE flag is set on the returned BIO.

+ +

BIO_new_fp() creates a file BIO wrapping stream. Flags can be: BIO_CLOSE, BIO_NOCLOSE (the close flag) BIO_FP_TEXT (sets the underlying stream to text mode, default is binary: this only has any effect under Win32).

+ +

BIO_set_fp() sets the fp of a file BIO to fp. flags has the same meaning as in BIO_new_fp(), it is a macro.

+ +

BIO_get_fp() retrieves the fp of a file BIO, it is a macro.

+ +

BIO_seek() is a macro that sets the position pointer to offset bytes from the start of file.

+ +

BIO_tell() returns the value of the position pointer.

+ +

BIO_read_filename(), BIO_write_filename(), BIO_append_filename() and BIO_rw_filename() set the file BIO b to use file name for reading, writing, append or read write respectively.

+ +

NOTES

+ +

When wrapping stdout, stdin or stderr the underlying stream should not normally be closed so the BIO_NOCLOSE flag should be set.

+ +

Because the file BIO calls the underlying stdio functions any quirks 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.

+ +

RETURN VALUES

+ +

BIO_s_file() returns the file BIO method.

+ +

BIO_new_file() and BIO_new_fp() return a file BIO or NULL if an error occurred.

+ +

BIO_set_fp() and BIO_get_fp() return 1 for success or 0 for failure (although the current implementation never return 0).

+ +

BIO_seek() returns the same value as the underlying fseek() function: 0 for success or -1 for failure.

+ +

BIO_tell() returns the current file position.

+ +

BIO_read_filename(), BIO_write_filename(), BIO_append_filename() and BIO_rw_filename() return 1 for success or 0 for failure.

+ +

EXAMPLES

+ +

File BIO "hello world":

+ +
BIO *bio_out;
+
+bio_out = BIO_new_fp(stdout, BIO_NOCLOSE);
+BIO_printf(bio_out, "Hello World\n");
+ +

Alternative technique:

+ +
BIO *bio_out;
+
+bio_out = BIO_new(BIO_s_file());
+if (bio_out == NULL)
+    /* Error */
+if (!BIO_set_fp(bio_out, stdout, BIO_NOCLOSE))
+    /* Error */
+BIO_printf(bio_out, "Hello World\n");
+ +

Write to a file:

+ +
BIO *out;
+
+out = BIO_new_file("filename.txt", "w");
+if (!out)
+    /* Error */
+BIO_printf(out, "Hello World\n");
+BIO_free(out);
+ +

Alternative technique:

+ +
BIO *out;
+
+out = BIO_new(BIO_s_file());
+if (out == NULL)
+    /* Error */
+if (!BIO_write_filename(out, "filename.txt"))
+    /* Error */
+BIO_printf(out, "Hello World\n");
+BIO_free(out);
+ +

BUGS

+ +

BIO_reset() and BIO_seek() are implemented using fseek() on the underlying stream. The return value for fseek() is 0 for success or -1 if an error occurred this differs from other types of BIO which will typically return 1 for success and a non positive value if an error occurred.

+ +

SEE ALSO

+ +

BIO_seek(3), BIO_tell(3), BIO_reset(3), BIO_flush(3), BIO_read_ex(3), BIO_write_ex(3), BIO_puts(3), BIO_gets(3), BIO_printf(3), BIO_set_close(3), BIO_get_close(3)

+ +

COPYRIGHT

+ +

Copyright 2000-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_s_mem.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_s_mem.html new file mode 100644 index 00000000..d427457a --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_s_mem.html @@ -0,0 +1,137 @@ + + + + +BIO_s_mem + + + + + + + + + + +

NAME

+ +

BIO_s_secmem, BIO_s_mem, BIO_set_mem_eof_return, BIO_get_mem_data, BIO_set_mem_buf, BIO_get_mem_ptr, BIO_new_mem_buf - memory BIO

+ +

SYNOPSIS

+ +
#include <openssl/bio.h>
+
+const BIO_METHOD *BIO_s_mem(void);
+const BIO_METHOD *BIO_s_secmem(void);
+
+BIO_set_mem_eof_return(BIO *b, int v)
+long BIO_get_mem_data(BIO *b, char **pp)
+BIO_set_mem_buf(BIO *b, BUF_MEM *bm, int c)
+BIO_get_mem_ptr(BIO *b, BUF_MEM **pp)
+
+BIO *BIO_new_mem_buf(const void *buf, int len);
+ +

DESCRIPTION

+ +

BIO_s_mem() returns the memory BIO method function.

+ +

A memory BIO is a source/sink BIO which uses memory for its I/O. Data written to a memory BIO is stored in a BUF_MEM structure which is extended as appropriate to accommodate the stored data.

+ +

BIO_s_secmem() is like BIO_s_mem() except that the secure heap is used for buffer storage.

+ +

Any data written to a memory BIO can be recalled by reading from it. Unless the memory BIO is read only any data read from it is deleted from the BIO.

+ +

Memory BIOs support BIO_gets() and BIO_puts().

+ +

If the BIO_CLOSE flag is set when a memory BIO is freed then the underlying BUF_MEM structure is also freed.

+ +

Calling BIO_reset() on a read write memory BIO clears any data in it if the flag BIO_FLAGS_NONCLEAR_RST is not set, otherwise it just restores the read pointer to the state it was just after the last write was performed and the data can be read again. On a read only BIO it similarly restores the BIO to its original state and the read only data can be read again.

+ +

BIO_eof() is true if no data is in the BIO.

+ +

BIO_ctrl_pending() returns the number of bytes currently stored.

+ +

BIO_set_mem_eof_return() sets the behaviour of memory BIO b when it is empty. If the v is zero then an empty memory BIO will return EOF (that is it will return zero and BIO_should_retry(b) will be false. If v is non zero then it will return v when it is empty and it will set the read retry flag (that is BIO_read_retry(b) is true). To avoid ambiguity with a normal positive return value v should be set to a negative value, typically -1.

+ +

BIO_get_mem_data() sets *pp to a pointer to the start of the memory BIOs data and returns the total amount of data available. It is implemented as a macro.

+ +

BIO_set_mem_buf() sets the internal BUF_MEM structure to bm and sets the close flag to c, that is c should be either BIO_CLOSE or BIO_NOCLOSE. It is a macro.

+ +

BIO_get_mem_ptr() places the underlying BUF_MEM structure in *pp. It is a macro.

+ +

BIO_new_mem_buf() creates a memory BIO using len bytes of data at buf, if len is -1 then the buf is assumed to be nul terminated and its length is determined by strlen. The BIO is set to a read only state and as a result cannot be written to. This is useful when some data needs to be made available from a static area of memory in the form of a BIO. The supplied data is read directly from the supplied buffer: it is not copied first, so the supplied area of memory must be unchanged until the BIO is freed.

+ +

NOTES

+ +

Writes to memory BIOs will always succeed if memory is available: that is their size can grow indefinitely.

+ +

Every write after partial read (not all data in the memory buffer was read) to a read write memory BIO will have to move the unread data with an internal copy operation, if a BIO contains a lot of data and it is read in small chunks intertwined with writes the operation can be very slow. Adding a buffering BIO to the chain can speed up the process.

+ +

Calling BIO_set_mem_buf() on a BIO created with BIO_new_secmem() will give undefined results, including perhaps a program crash.

+ +

Switching the memory BIO from read write to read only is not supported and can give undefined results including a program crash. There are two notable exceptions to the rule. The first one is to assign a static memory buffer immediately after BIO creation and set the BIO as read only.

+ +

The other supported sequence is to start with read write BIO then temporarily switch it to read only and call BIO_reset() on the read only BIO immediately before switching it back to read write. Before the BIO is freed it must be switched back to the read write mode.

+ +

Calling BIO_get_mem_ptr() on read only BIO will return a BUF_MEM that contains only the remaining data to be read. If the close status of the BIO is set to BIO_NOCLOSE, before freeing the BUF_MEM the data pointer in it must be set to NULL as the data pointer does not point to an allocated memory.

+ +

Calling BIO_reset() on a read write memory BIO with BIO_FLAGS_NONCLEAR_RST flag set can have unexpected outcome when the reads and writes to the BIO are intertwined. As documented above the BIO will be reset to the state after the last completed write operation. The effects of reads preceding that write operation cannot be undone.

+ +

Calling BIO_get_mem_ptr() prior to a BIO_reset() call with BIO_FLAGS_NONCLEAR_RST set has the same effect as a write operation.

+ +

BUGS

+ +

There should be an option to set the maximum size of a memory BIO.

+ +

RETURN VALUES

+ +

BIO_s_mem() and BIO_s_secmem() return a valid memory BIO_METHOD structure.

+ +

BIO_set_mem_eof_return(), BIO_set_mem_buf() and BIO_get_mem_ptr() return 1 on success or a value which is less than or equal to 0 if an error occurred.

+ +

BIO_get_mem_data() returns the total number of bytes available on success, 0 if b is NULL, or a negative value in case of other errors.

+ +

BIO_new_mem_buf() returns a valid BIO structure on success or NULL on error.

+ +

EXAMPLES

+ +

Create a memory BIO and write some data to it:

+ +
BIO *mem = BIO_new(BIO_s_mem());
+
+BIO_puts(mem, "Hello World\n");
+ +

Create a read only memory BIO:

+ +
char data[] = "Hello World";
+BIO *mem = BIO_new_mem_buf(data, -1);
+ +

Extract the BUF_MEM structure from a memory BIO and then free up the BIO:

+ +
BUF_MEM *bptr;
+
+BIO_get_mem_ptr(mem, &bptr);
+BIO_set_close(mem, BIO_NOCLOSE); /* So BIO_free() leaves BUF_MEM alone */
+BIO_free(mem);
+ +

COPYRIGHT

+ +

Copyright 2000-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_s_null.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_s_null.html new file mode 100644 index 00000000..f4c20ae8 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_s_null.html @@ -0,0 +1,60 @@ + + + + +BIO_s_null + + + + + + + + + + +

NAME

+ +

BIO_s_null - null data sink

+ +

SYNOPSIS

+ +
#include <openssl/bio.h>
+
+const BIO_METHOD *BIO_s_null(void);
+ +

DESCRIPTION

+ +

BIO_s_null() returns the null sink BIO method. Data written to the null sink is discarded, reads return EOF.

+ +

NOTES

+ +

A null sink BIO behaves in a similar manner to the Unix /dev/null device.

+ +

A null bio can be placed on the end of a chain to discard any data passed through it.

+ +

A null sink is useful if, for example, an application wishes to digest some data by writing through a digest bio but not send the digested data anywhere. Since a BIO chain must normally include a source/sink BIO this can be achieved by adding a null sink BIO to the end of the chain

+ +

RETURN VALUES

+ +

BIO_s_null() returns the null sink BIO method.

+ +

COPYRIGHT

+ +

Copyright 2000-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_s_socket.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_s_socket.html new file mode 100644 index 00000000..947c9180 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_s_socket.html @@ -0,0 +1,68 @@ + + + + +BIO_s_socket + + + + + + + + + + +

NAME

+ +

BIO_s_socket, BIO_new_socket - socket BIO

+ +

SYNOPSIS

+ +
#include <openssl/bio.h>
+
+const BIO_METHOD *BIO_s_socket(void);
+
+BIO *BIO_new_socket(int sock, int close_flag);
+ +

DESCRIPTION

+ +

BIO_s_socket() returns the socket BIO method. This is a wrapper round the platform's socket routines.

+ +

BIO_read_ex() and BIO_write_ex() read or write the underlying socket. BIO_puts() is supported but BIO_gets() is not.

+ +

If the close flag is set then the socket is shut down and closed when the BIO is freed.

+ +

BIO_new_socket() returns a socket BIO using sock and close_flag.

+ +

NOTES

+ +

Socket BIOs also support any relevant functionality of file descriptor BIOs.

+ +

The reason for having separate file descriptor and socket BIOs is that on some platforms sockets are not file descriptors and use distinct I/O routines, Windows is one such platform. Any code mixing the two will not work on all platforms.

+ +

RETURN VALUES

+ +

BIO_s_socket() returns the socket BIO method.

+ +

BIO_new_socket() returns the newly allocated BIO or NULL is an error occurred.

+ +

COPYRIGHT

+ +

Copyright 2000-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_set_callback.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_set_callback.html new file mode 100644 index 00000000..025db3a7 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_set_callback.html @@ -0,0 +1,251 @@ + + + + +BIO_set_callback + + + + + + + + + + +

NAME

+ +

BIO_set_callback_ex, BIO_get_callback_ex, BIO_set_callback, BIO_get_callback, BIO_set_callback_arg, BIO_get_callback_arg, BIO_debug_callback, BIO_callback_fn_ex, BIO_callback_fn - BIO callback functions

+ +

SYNOPSIS

+ +
#include <openssl/bio.h>
+
+typedef long (*BIO_callback_fn_ex)(BIO *b, int oper, const char *argp,
+                                   size_t len, int argi,
+                                   long argl, int ret, size_t *processed);
+typedef long (*BIO_callback_fn)(BIO *b, int oper, const char *argp, int argi,
+                                long argl, long ret);
+
+void BIO_set_callback_ex(BIO *b, BIO_callback_fn_ex callback);
+BIO_callback_fn_ex BIO_get_callback_ex(const BIO *b);
+
+void BIO_set_callback(BIO *b, BIO_callback_fn cb);
+BIO_callback_fn BIO_get_callback(BIO *b);
+void BIO_set_callback_arg(BIO *b, char *arg);
+char *BIO_get_callback_arg(const BIO *b);
+
+long BIO_debug_callback(BIO *bio, int cmd, const char *argp, int argi,
+                        long argl, long ret);
+ +

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 be used for debugging purposes to trace operations on a BIO or to modify its operation.

+ +

BIO_set_callback() and BIO_get_callback() set and retrieve the old format BIO callback. New code should not use these functions, but they are retained for backwards compatibility. Any callback set via BIO_set_callback_ex() will get called in preference to any set by BIO_set_callback().

+ +

BIO_set_callback_arg() and BIO_get_callback_arg() are macros which can be used to set and retrieve an argument for use in the callback.

+ +

BIO_debug_callback() is a standard debugging callback which prints out information relating to each BIO operation. If the callback argument is set it is interpreted as a BIO to send the information to, otherwise stderr is used.

+ +

BIO_callback_fn_ex() is the type of the callback function and BIO_callback_fn() is the type of the old format callback function. The meaning of each argument is described below:

+ +
+ +
b
+
+ +

The BIO the callback is attached to is passed in b.

+ +
+
oper
+
+ +

oper is set to the operation being performed. For some operations the callback is called twice, once before and once after the actual operation, the latter case has oper or'ed with BIO_CB_RETURN.

+ +
+
len
+
+ +

The length of the data requested to be read or written. This is only useful if oper is BIO_CB_READ, BIO_CB_WRITE or BIO_CB_GETS.

+ +
+
argp argi argl
+
+ +

The meaning of the arguments argp, argi and argl depends on the value of oper, that is the operation being performed.

+ +
+
processed
+
+ +

processed is a pointer to a location which will be updated with the amount of data that was actually read or written. Only used for BIO_CB_READ, BIO_CB_WRITE, BIO_CB_GETS and BIO_CB_PUTS.

+ +
+
ret
+
+ +

ret is the return value that would be returned to the application if no callback were present. The actual value returned is the return value of the callback itself. In the case of callbacks called before the actual BIO operation 1 is placed in ret, if the return value is not positive it will be immediately returned to the application and the BIO operation will not be performed.

+ +
+
+ +

The callback should normally simply return ret when it has finished processing, unless it specifically wishes to modify the value returned to the application.

+ +

CALLBACK OPERATIONS

+ +

In the notes below, callback defers to the actual callback function that is called.

+ +
+ +
BIO_free(b)
+
+ +
callback_ex(b, BIO_CB_FREE, NULL, 0, 0, 0L, 1L, NULL)
+ +

or

+ +
callback(b, BIO_CB_FREE, NULL, 0L, 0L, 1L)
+ +

is called before the free operation.

+ +
+
BIO_read_ex(b, data, dlen, readbytes)
+
+ +
callback_ex(b, BIO_CB_READ, data, dlen, 0, 0L, 1L, NULL)
+ +

or

+ +
callback(b, BIO_CB_READ, data, dlen, 0L, 1L)
+ +

is called before the read and

+ +
callback_ex(b, BIO_CB_READ | BIO_CB_RETURN, data, dlen, 0, 0L, retvalue,
+            &readbytes)
+ +

or

+ +
callback(b, BIO_CB_READ|BIO_CB_RETURN, data, dlen, 0L, retvalue)
+ +

after.

+ +
+
BIO_write(b, data, dlen, written)
+
+ +
callback_ex(b, BIO_CB_WRITE, data, dlen, 0, 0L, 1L, NULL)
+ +

or

+ +
callback(b, BIO_CB_WRITE, datat, dlen, 0L, 1L)
+ +

is called before the write and

+ +
callback_ex(b, BIO_CB_WRITE | BIO_CB_RETURN, data, dlen, 0, 0L, retvalue,
+            &written)
+ +

or

+ +
callback(b, BIO_CB_WRITE|BIO_CB_RETURN, data, dlen, 0L, retvalue)
+ +

after.

+ +
+
BIO_gets(b, buf, size)
+
+ +
callback_ex(b, BIO_CB_GETS, buf, size, 0, 0L, 1, NULL, NULL)
+ +

or

+ +
callback(b, BIO_CB_GETS, buf, size, 0L, 1L)
+ +

is called before the operation and

+ +
callback_ex(b, BIO_CB_GETS | BIO_CB_RETURN, buf, size, 0, 0L, retvalue,
+            &readbytes)
+ +

or

+ +
callback(b, BIO_CB_GETS|BIO_CB_RETURN, buf, size, 0L, retvalue)
+ +

after.

+ +
+
BIO_puts(b, buf)
+
+ +
callback_ex(b, BIO_CB_PUTS, buf, 0, 0, 0L, 1L, NULL);
+ +

or

+ +
callback(b, BIO_CB_PUTS, buf, 0, 0L, 1L)
+ +

is called before the operation and

+ +
callback_ex(b, BIO_CB_PUTS | BIO_CB_RETURN, buf, 0, 0, 0L, retvalue, &written)
+ +

or

+ +
callback(b, BIO_CB_PUTS|BIO_CB_RETURN, buf, 0, 0L, retvalue)
+ +

after.

+ +
+
BIO_ctrl(BIO *b, int cmd, long larg, void *parg)
+
+ +
callback_ex(b, BIO_CB_CTRL, parg, 0, cmd, larg, 1L, NULL)
+ +

or

+ +
callback(b, BIO_CB_CTRL, parg, cmd, larg, 1L)
+ +

is called before the call and

+ +
callback_ex(b, BIO_CB_CTRL | BIO_CB_RETURN, parg, 0, cmd, larg, ret, NULL)
+ +

or

+ +
callback(b, BIO_CB_CTRL|BIO_CB_RETURN, parg, cmd, larg, ret)
+ +

after.

+ +

Note: cmd == BIO_CTRL_SET_CALLBACK is special, because parg is not the argument of type BIO_info_cb itself. In this case parg is a pointer to the actual call parameter, see BIO_callback_ctrl.

+ +
+
+ +

RETURN VALUES

+ +

BIO_get_callback_ex() and BIO_get_callback() return the callback function previously set by a call to BIO_set_callback_ex() and BIO_set_callback() respectively.

+ +

BIO_get_callback_arg() returns a char pointer to the value previously set via a call to BIO_set_callback_arg().

+ +

BIO_debug_callback() returns 1 or ret if it's called after specific BIO operations.

+ +

EXAMPLES

+ +

The BIO_debug_callback() function is a good example, its source is in crypto/bio/bio_cb.c

+ +

COPYRIGHT

+ +

Copyright 2000-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_should_retry.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_should_retry.html new file mode 100644 index 00000000..56dca25b --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BIO_should_retry.html @@ -0,0 +1,115 @@ + + + + +BIO_should_retry + + + + + + + + + + +

NAME

+ +

BIO_should_read, BIO_should_write, BIO_should_io_special, BIO_retry_type, BIO_should_retry, BIO_get_retry_BIO, BIO_get_retry_reason, BIO_set_retry_reason - BIO retry functions

+ +

SYNOPSIS

+ +
#include <openssl/bio.h>
+
+int BIO_should_read(BIO *b);
+int BIO_should_write(BIO *b);
+int BIO_should_io_special(iBIO *b);
+int BIO_retry_type(BIO *b);
+int BIO_should_retry(BIO *b);
+
+BIO *BIO_get_retry_BIO(BIO *bio, int *reason);
+int BIO_get_retry_reason(BIO *bio);
+void BIO_set_retry_reason(BIO *bio, int reason);
+ +

DESCRIPTION

+ +

These functions determine why a BIO is not able to read or write data. They will typically be called after a failed BIO_read_ex() or BIO_write_ex() call.

+ +

BIO_should_retry() is true if the call that produced this condition should then be retried at a later time.

+ +

If BIO_should_retry() is false then the cause is an error condition.

+ +

BIO_should_read() is true if the cause of the condition is that the BIO has insufficient data to return. Check for readability and/or retry the last operation.

+ +

BIO_should_write() is true if the cause of the condition is that the BIO has pending data to write. Check for writability and/or retry the last operation.

+ +

BIO_should_io_special() is true if some "special" condition, that is a reason other than reading or writing is the cause of the condition.

+ +

BIO_retry_type() returns a mask of the cause of a retry condition consisting of the values BIO_FLAGS_READ, BIO_FLAGS_WRITE, BIO_FLAGS_IO_SPECIAL though current BIO types will only set one of these.

+ +

BIO_get_retry_BIO() determines the precise reason for the special condition, it returns the BIO that caused this condition and if reason is not NULL it contains the reason code. The meaning of the reason code and the action that should be taken depends on the type of BIO that resulted in this condition.

+ +

BIO_get_retry_reason() returns the reason for a special condition if passed the relevant BIO, for example as returned by BIO_get_retry_BIO().

+ +

BIO_set_retry_reason() sets the retry reason for a special condition for a given BIO. This would usually only be called by BIO implementations.

+ +

NOTES

+ +

BIO_should_read(), BIO_should_write(), BIO_should_io_special(), BIO_retry_type(), and BIO_should_retry(), are implemented as macros.

+ +

If BIO_should_retry() returns false then the precise "error condition" depends on the BIO type that caused it and the return code of the BIO operation. For example if a call to BIO_read_ex() on a socket BIO returns 0 and BIO_should_retry() is false then the cause will be that the connection closed. A similar condition on a file BIO will mean that it has reached EOF. Some BIO types may place additional information on the error queue. For more details see the individual BIO type manual pages.

+ +

If the underlying I/O structure is in a blocking mode almost all current BIO types will not request a retry, because the underlying I/O calls will not. If the application knows that the BIO type will never signal a retry then it need not call BIO_should_retry() after a failed BIO I/O call. This is typically done with file BIOs.

+ +

SSL BIOs are the only current exception to this rule: they can request a retry even if the underlying I/O structure is blocking, if a handshake occurs during a call to BIO_read(). An application can retry the failed call immediately or avoid this situation by setting SSL_MODE_AUTO_RETRY on the underlying SSL structure.

+ +

While an application may retry a failed non blocking call immediately this is likely to be very inefficient because the call will fail repeatedly until data can be processed or is available. An application will normally wait until the necessary condition is satisfied. How this is done depends on the underlying I/O structure.

+ +

For example if the cause is ultimately a socket and BIO_should_read() is true then a call to select() may be made to wait until data is available and then retry the BIO operation. By combining the retry conditions of several non blocking BIOs in a single select() call it is possible to service several BIOs in a single thread, though the performance may be poor if SSL BIOs are present because long delays can occur during the initial handshake process.

+ +

It is possible for a BIO to block indefinitely if the underlying I/O structure cannot process or return any data. This depends on the behaviour of the platforms I/O functions. This is often not desirable: one solution is to use non blocking I/O and use a timeout on the select() (or equivalent) call.

+ +

BUGS

+ +

The OpenSSL ASN1 functions cannot gracefully deal with non blocking I/O: that is they cannot retry after a partial read or write. This is usually worked around by only passing the relevant data to ASN1 functions when the entire structure can be read or written.

+ +

RETURN VALUES

+ +

BIO_should_read(), BIO_should_write(), BIO_should_io_special(), and BIO_should_retry() return either 1 or 0 based on the actual conditions of the BIO.

+ +

BIO_retry_type() returns a flag combination presenting the cause of a retry condition or false if there is no retry condition.

+ +

BIO_get_retry_BIO() returns a valid BIO structure.

+ +

BIO_get_retry_reason() returns the reason for a special condition.

+ +

SEE ALSO

+ +

bio

+ +

HISTORY

+ +

The BIO_get_retry_reason() and BIO_set_retry_reason() functions were added in OpenSSL 1.1.0.

+ +

COPYRIGHT

+ +

Copyright 2000-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_BLINDING_new.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_BLINDING_new.html new file mode 100644 index 00000000..8e33d782 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_BLINDING_new.html @@ -0,0 +1,112 @@ + + + + +BN_BLINDING_new + + + + + + + + + + +

NAME

+ +

BN_BLINDING_new, BN_BLINDING_free, BN_BLINDING_update, BN_BLINDING_convert, BN_BLINDING_invert, BN_BLINDING_convert_ex, BN_BLINDING_invert_ex, BN_BLINDING_is_current_thread, BN_BLINDING_set_current_thread, BN_BLINDING_lock, BN_BLINDING_unlock, BN_BLINDING_get_flags, BN_BLINDING_set_flags, BN_BLINDING_create_param - blinding related BIGNUM functions

+ +

SYNOPSIS

+ +
#include <openssl/bn.h>
+
+BN_BLINDING *BN_BLINDING_new(const BIGNUM *A, const BIGNUM *Ai,
+                             BIGNUM *mod);
+void BN_BLINDING_free(BN_BLINDING *b);
+int BN_BLINDING_update(BN_BLINDING *b, BN_CTX *ctx);
+int BN_BLINDING_convert(BIGNUM *n, BN_BLINDING *b, BN_CTX *ctx);
+int BN_BLINDING_invert(BIGNUM *n, BN_BLINDING *b, BN_CTX *ctx);
+int BN_BLINDING_convert_ex(BIGNUM *n, BIGNUM *r, BN_BLINDING *b,
+                           BN_CTX *ctx);
+int BN_BLINDING_invert_ex(BIGNUM *n, const BIGNUM *r, BN_BLINDING *b,
+                          BN_CTX *ctx);
+int BN_BLINDING_is_current_thread(BN_BLINDING *b);
+void BN_BLINDING_set_current_thread(BN_BLINDING *b);
+int BN_BLINDING_lock(BN_BLINDING *b);
+int BN_BLINDING_unlock(BN_BLINDING *b);
+unsigned long BN_BLINDING_get_flags(const BN_BLINDING *);
+void BN_BLINDING_set_flags(BN_BLINDING *, unsigned long);
+BN_BLINDING *BN_BLINDING_create_param(BN_BLINDING *b,
+                                      const BIGNUM *e, BIGNUM *m, BN_CTX *ctx,
+                                      int (*bn_mod_exp)(BIGNUM *r,
+                                                        const BIGNUM *a,
+                                                        const BIGNUM *p,
+                                                        const BIGNUM *m,
+                                                        BN_CTX *ctx,
+                                                        BN_MONT_CTX *m_ctx),
+                                      BN_MONT_CTX *m_ctx);
+ +

DESCRIPTION

+ +

BN_BLINDING_new() allocates a new BN_BLINDING structure and copies the A and Ai values into the newly created BN_BLINDING object.

+ +

BN_BLINDING_free() frees the BN_BLINDING structure. If b is NULL, nothing is done.

+ +

BN_BLINDING_update() updates the BN_BLINDING parameters by squaring the A and Ai or, after specific number of uses and if the necessary parameters are set, by re-creating the blinding parameters.

+ +

BN_BLINDING_convert_ex() multiplies n with the blinding factor A. If r is not NULL a copy the inverse blinding factor Ai will be returned in r (this is useful if a RSA object is shared among several threads). BN_BLINDING_invert_ex() multiplies n with the inverse blinding factor Ai. If r is not NULL it will be used as the inverse blinding.

+ +

BN_BLINDING_convert() and BN_BLINDING_invert() are wrapper functions for BN_BLINDING_convert_ex() and BN_BLINDING_invert_ex() with r set to NULL.

+ +

BN_BLINDING_is_current_thread() returns whether the BN_BLINDING structure is owned by the current thread. This is to help users provide proper locking if needed for multi-threaded use.

+ +

BN_BLINDING_set_current_thread() sets the current thread as the owner of the BN_BLINDING structure.

+ +

BN_BLINDING_lock() locks the BN_BLINDING structure.

+ +

BN_BLINDING_unlock() unlocks the BN_BLINDING structure.

+ +

BN_BLINDING_get_flags() returns the BN_BLINDING flags. Currently there are two supported flags: BN_BLINDING_NO_UPDATE and BN_BLINDING_NO_RECREATE. BN_BLINDING_NO_UPDATE inhibits the automatic update of the BN_BLINDING parameters after each use and BN_BLINDING_NO_RECREATE inhibits the automatic re-creation of the BN_BLINDING parameters after a fixed number of uses (currently 32). In newly allocated BN_BLINDING objects no flags are set. BN_BLINDING_set_flags() sets the BN_BLINDING parameters flags.

+ +

BN_BLINDING_create_param() creates new BN_BLINDING parameters using the exponent e and the modulus m. bn_mod_exp and m_ctx can be used to pass special functions for exponentiation (normally BN_mod_exp_mont() and BN_MONT_CTX).

+ +

RETURN VALUES

+ +

BN_BLINDING_new() returns the newly allocated BN_BLINDING structure or NULL in case of an error.

+ +

BN_BLINDING_update(), BN_BLINDING_convert(), BN_BLINDING_invert(), BN_BLINDING_convert_ex() and BN_BLINDING_invert_ex() return 1 on success and 0 if an error occurred.

+ +

BN_BLINDING_is_current_thread() returns 1 if the current thread owns the BN_BLINDING object, 0 otherwise.

+ +

BN_BLINDING_set_current_thread() doesn't return anything.

+ +

BN_BLINDING_lock(), BN_BLINDING_unlock() return 1 if the operation succeeded or 0 on error.

+ +

BN_BLINDING_get_flags() returns the currently set BN_BLINDING flags (a unsigned long value).

+ +

BN_BLINDING_create_param() returns the newly created BN_BLINDING parameters or NULL on error.

+ +

HISTORY

+ +

BN_BLINDING_thread_id() was first introduced in OpenSSL 1.0.0, and it deprecates BN_BLINDING_set_thread_id() and BN_BLINDING_get_thread_id().

+ +

COPYRIGHT

+ +

Copyright 2005-2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_CTX_new.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_CTX_new.html new file mode 100644 index 00000000..a5532ca3 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_CTX_new.html @@ -0,0 +1,87 @@ + + + + +BN_CTX_new + + + + + + + + + + +

NAME

+ +

BN_CTX_new, BN_CTX_secure_new, BN_CTX_free - allocate and free BN_CTX structures

+ +

SYNOPSIS

+ +
#include <openssl/bn.h>
+
+BN_CTX *BN_CTX_new(void);
+
+BN_CTX *BN_CTX_secure_new(void);
+
+void BN_CTX_free(BN_CTX *c);
+ +

DESCRIPTION

+ +

A BN_CTX is a structure that holds BIGNUM temporary variables used by library functions. Since dynamic memory allocation to create BIGNUMs is rather expensive when used in conjunction with repeated subroutine calls, the BN_CTX structure is used.

+ +

BN_CTX_new() allocates and initializes a BN_CTX structure. BN_CTX_secure_new() allocates and initializes a BN_CTX structure but uses the secure heap (see CRYPTO_secure_malloc(3)) to hold the BIGNUMs.

+ +

BN_CTX_free() frees the components of the BN_CTX and the structure itself. Since BN_CTX_start() is required in order to obtain BIGNUMs from the BN_CTX, in most cases BN_CTX_end() must be called before the BN_CTX may be freed by BN_CTX_free(). If c is NULL, nothing is done.

+ +

A given BN_CTX must only be used by a single thread of execution. No locking is performed, and the internal pool allocator will not properly handle multiple threads of execution.

+ +

RETURN VALUES

+ +

BN_CTX_new() and BN_CTX_secure_new() return a pointer to the BN_CTX. If the allocation fails, they return NULL and sets an error code that can be obtained by ERR_get_error(3).

+ +

BN_CTX_free() has no return values.

+ +

REMOVED FUNCTIONALITY

+ +
void BN_CTX_init(BN_CTX *c);
+ +

BN_CTX_init() is no longer available as of OpenSSL 1.1.0. Applications should replace use of BN_CTX_init with BN_CTX_new instead:

+ +
BN_CTX *ctx;
+ctx = BN_CTX_new();
+if (!ctx)
+    /* error */
+...
+BN_CTX_free(ctx);
+ +

SEE ALSO

+ +

ERR_get_error(3), BN_add(3), BN_CTX_start(3)

+ +

HISTORY

+ +

BN_CTX_init() was removed in OpenSSL 1.1.0.

+ +

COPYRIGHT

+ +

Copyright 2000-2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_CTX_start.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_CTX_start.html new file mode 100644 index 00000000..b3774985 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_CTX_start.html @@ -0,0 +1,66 @@ + + + + +BN_CTX_start + + + + + + + + + + +

NAME

+ +

BN_CTX_start, BN_CTX_get, BN_CTX_end - use temporary BIGNUM variables

+ +

SYNOPSIS

+ +
#include <openssl/bn.h>
+
+void BN_CTX_start(BN_CTX *ctx);
+
+BIGNUM *BN_CTX_get(BN_CTX *ctx);
+
+void BN_CTX_end(BN_CTX *ctx);
+ +

DESCRIPTION

+ +

These functions are used to obtain temporary BIGNUM variables from a BN_CTX (which can been created by using BN_CTX_new(3)) in order to save the overhead of repeatedly creating and freeing BIGNUMs in functions that are called from inside a loop.

+ +

A function must call BN_CTX_start() first. Then, BN_CTX_get() may be called repeatedly to obtain temporary BIGNUMs. All BN_CTX_get() calls must be made before calling any other functions that use the ctx as an argument.

+ +

Finally, BN_CTX_end() must be called before returning from the function. If ctx is NULL, nothing is done. When BN_CTX_end() is called, the BIGNUM pointers obtained from BN_CTX_get() become invalid.

+ +

RETURN VALUES

+ +

BN_CTX_start() and BN_CTX_end() return no values.

+ +

BN_CTX_get() returns a pointer to the BIGNUM, or NULL on error. Once BN_CTX_get() has failed, the subsequent calls will return NULL as well, so it is sufficient to check the return value of the last BN_CTX_get() call. In case of an error, an error code is set, which can be obtained by ERR_get_error(3).

+ +

SEE ALSO

+ +

BN_CTX_new(3)

+ +

COPYRIGHT

+ +

Copyright 2000-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_add.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_add.html new file mode 100644 index 00000000..94cd8a60 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_add.html @@ -0,0 +1,117 @@ + + + + +BN_add + + + + + + + + + + +

NAME

+ +

BN_add, BN_sub, BN_mul, BN_sqr, BN_div, BN_mod, BN_nnmod, BN_mod_add, BN_mod_sub, BN_mod_mul, BN_mod_sqr, BN_exp, BN_mod_exp, BN_gcd - arithmetic operations on BIGNUMs

+ +

SYNOPSIS

+ +
#include <openssl/bn.h>
+
+int BN_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b);
+
+int BN_sub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b);
+
+int BN_mul(BIGNUM *r, BIGNUM *a, BIGNUM *b, BN_CTX *ctx);
+
+int BN_sqr(BIGNUM *r, BIGNUM *a, BN_CTX *ctx);
+
+int BN_div(BIGNUM *dv, BIGNUM *rem, const BIGNUM *a, const BIGNUM *d,
+           BN_CTX *ctx);
+
+int BN_mod(BIGNUM *rem, const BIGNUM *a, const BIGNUM *m, BN_CTX *ctx);
+
+int BN_nnmod(BIGNUM *r, const BIGNUM *a, const BIGNUM *m, BN_CTX *ctx);
+
+int BN_mod_add(BIGNUM *r, BIGNUM *a, BIGNUM *b, const BIGNUM *m,
+               BN_CTX *ctx);
+
+int BN_mod_sub(BIGNUM *r, BIGNUM *a, BIGNUM *b, const BIGNUM *m,
+               BN_CTX *ctx);
+
+int BN_mod_mul(BIGNUM *r, BIGNUM *a, BIGNUM *b, const BIGNUM *m,
+               BN_CTX *ctx);
+
+int BN_mod_sqr(BIGNUM *r, BIGNUM *a, const BIGNUM *m, BN_CTX *ctx);
+
+int BN_exp(BIGNUM *r, BIGNUM *a, BIGNUM *p, BN_CTX *ctx);
+
+int BN_mod_exp(BIGNUM *r, BIGNUM *a, const BIGNUM *p,
+               const BIGNUM *m, BN_CTX *ctx);
+
+int BN_gcd(BIGNUM *r, BIGNUM *a, BIGNUM *b, BN_CTX *ctx);
+ +

DESCRIPTION

+ +

BN_add() adds a and b and places the result in r (r=a+b). r may be the same BIGNUM as a or b.

+ +

BN_sub() subtracts b from a and places the result in r (r=a-b). r may be the same BIGNUM as a or b.

+ +

BN_mul() multiplies a and b and places the result in r (r=a*b). r may be the same BIGNUM as a or b. For multiplication by powers of 2, use BN_lshift(3).

+ +

BN_sqr() takes the square of a and places the result in r (r=a^2). r and a may be the same BIGNUM. This function is faster than BN_mul(r,a,a).

+ +

BN_div() divides a by d and places the result in dv and the remainder in rem (dv=a/d, rem=a%d). Either of dv and rem may be NULL, in which case the respective value is not returned. The result is rounded towards zero; thus if a is negative, the remainder will be zero or negative. For division by powers of 2, use BN_rshift(3).

+ +

BN_mod() corresponds to BN_div() with dv set to NULL.

+ +

BN_nnmod() reduces a modulo m and places the non-negative remainder in r.

+ +

BN_mod_add() adds a to b modulo m and places the non-negative result in r.

+ +

BN_mod_sub() subtracts b from a modulo m and places the non-negative result in r.

+ +

BN_mod_mul() multiplies a by b and finds the non-negative remainder respective to modulus m (r=(a*b) mod m). r may be the same BIGNUM as a or b. For more efficient algorithms for repeated computations using the same modulus, see BN_mod_mul_montgomery(3) and BN_mod_mul_reciprocal(3).

+ +

BN_mod_sqr() takes the square of a modulo m and places the result in r.

+ +

BN_exp() raises a to the p-th power and places the result in r (r=a^p). This function is faster than repeated applications of BN_mul().

+ +

BN_mod_exp() computes a to the p-th power modulo m (r=a^p % m). This function uses less time and space than BN_exp(). Do not call this function when m is even and any of the parameters have the BN_FLG_CONSTTIME flag set.

+ +

BN_gcd() computes the greatest common divisor of a and b and places the result in r. r may be the same BIGNUM as a or b.

+ +

For all functions, ctx is a previously allocated BN_CTX used for temporary variables; see BN_CTX_new(3).

+ +

Unless noted otherwise, the result BIGNUM must be different from the arguments.

+ +

RETURN VALUES

+ +

For all functions, 1 is returned for success, 0 on error. The return value should always be checked (e.g., if (!BN_add(r,a,b)) goto err;). The error codes can be obtained by ERR_get_error(3).

+ +

SEE ALSO

+ +

ERR_get_error(3), BN_CTX_new(3), BN_add_word(3), BN_set_bit(3)

+ +

COPYRIGHT

+ +

Copyright 2000-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_add_word.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_add_word.html new file mode 100644 index 00000000..cbe1dce8 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_add_word.html @@ -0,0 +1,78 @@ + + + + +BN_add_word + + + + + + + + + + +

NAME

+ +

BN_add_word, BN_sub_word, BN_mul_word, BN_div_word, BN_mod_word - arithmetic functions on BIGNUMs with integers

+ +

SYNOPSIS

+ +
#include <openssl/bn.h>
+
+int BN_add_word(BIGNUM *a, BN_ULONG w);
+
+int BN_sub_word(BIGNUM *a, BN_ULONG w);
+
+int BN_mul_word(BIGNUM *a, BN_ULONG w);
+
+BN_ULONG BN_div_word(BIGNUM *a, BN_ULONG w);
+
+BN_ULONG BN_mod_word(const BIGNUM *a, BN_ULONG w);
+ +

DESCRIPTION

+ +

These functions perform arithmetic operations on BIGNUMs with unsigned integers. They are much more efficient than the normal BIGNUM arithmetic operations.

+ +

BN_add_word() adds w to a (a+=w).

+ +

BN_sub_word() subtracts w from a (a-=w).

+ +

BN_mul_word() multiplies a and w (a*=w).

+ +

BN_div_word() divides a by w (a/=w) and returns the remainder.

+ +

BN_mod_word() returns the remainder of a divided by w (a%w).

+ +

For BN_div_word() and BN_mod_word(), w must not be 0.

+ +

RETURN VALUES

+ +

BN_add_word(), BN_sub_word() and BN_mul_word() return 1 for success, 0 on error. The error codes can be obtained by ERR_get_error(3).

+ +

BN_mod_word() and BN_div_word() return a%w on success and (BN_ULONG)-1 if an error occurred.

+ +

SEE ALSO

+ +

ERR_get_error(3), BN_add(3)

+ +

COPYRIGHT

+ +

Copyright 2000-2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_bn2bin.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_bn2bin.html new file mode 100644 index 00000000..62dc51c2 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_bn2bin.html @@ -0,0 +1,100 @@ + + + + +BN_bn2bin + + + + + + + + + + +

NAME

+ +

BN_bn2binpad, BN_bn2bin, BN_bin2bn, BN_bn2lebinpad, BN_lebin2bn, BN_bn2hex, BN_bn2dec, BN_hex2bn, BN_dec2bn, BN_print, BN_print_fp, BN_bn2mpi, BN_mpi2bn - format conversions

+ +

SYNOPSIS

+ +
#include <openssl/bn.h>
+
+int BN_bn2bin(const BIGNUM *a, unsigned char *to);
+int BN_bn2binpad(const BIGNUM *a, unsigned char *to, int tolen);
+BIGNUM *BN_bin2bn(const unsigned char *s, int len, BIGNUM *ret);
+
+int BN_bn2lebinpad(const BIGNUM *a, unsigned char *to, int tolen);
+BIGNUM *BN_lebin2bn(const unsigned char *s, int len, BIGNUM *ret);
+
+char *BN_bn2hex(const BIGNUM *a);
+char *BN_bn2dec(const BIGNUM *a);
+int BN_hex2bn(BIGNUM **a, const char *str);
+int BN_dec2bn(BIGNUM **a, const char *str);
+
+int BN_print(BIO *fp, const BIGNUM *a);
+int BN_print_fp(FILE *fp, const BIGNUM *a);
+
+int BN_bn2mpi(const BIGNUM *a, unsigned char *to);
+BIGNUM *BN_mpi2bn(unsigned char *s, int len, BIGNUM *ret);
+ +

DESCRIPTION

+ +

BN_bn2bin() converts the absolute value of a into big-endian form and stores it at to. to must point to BN_num_bytes(a) bytes of memory.

+ +

BN_bn2binpad() also converts the absolute value of a into big-endian form and stores it at to. tolen indicates the length of the output buffer to. The result is padded with zeroes if necessary. If tolen is less than BN_num_bytes(a) an error is returned.

+ +

BN_bin2bn() converts the positive integer in big-endian form of length len at s into a BIGNUM and places it in ret. If ret is NULL, a new BIGNUM is created.

+ +

BN_bn2lebinpad() and BN_lebin2bn() are identical to BN_bn2binpad() and BN_bin2bn() except the buffer is in little-endian format.

+ +

BN_bn2hex() and BN_bn2dec() return printable strings containing the hexadecimal and decimal encoding of a respectively. For negative numbers, the string is prefaced with a leading '-'. The string must be freed later using OPENSSL_free().

+ +

BN_hex2bn() takes as many characters as possible from the string str, including the leading character '-' which means negative, to form a valid hexadecimal number representation and converts them to a BIGNUM and stores it in **a. If *a is NULL, a new BIGNUM is created. If a is NULL, it only computes the length of valid representation. A "negative zero" is converted to zero. BN_dec2bn() is the same using the decimal system.

+ +

BN_print() and BN_print_fp() write the hexadecimal encoding of a, with a leading '-' for negative numbers, to the BIO or FILE fp.

+ +

BN_bn2mpi() and BN_mpi2bn() convert BIGNUMs from and to a format that consists of the number's length in bytes represented as a 4-byte big-endian number, and the number itself in big-endian format, where the most significant bit signals a negative number (the representation of numbers with the MSB set is prefixed with null byte).

+ +

BN_bn2mpi() stores the representation of a at to, where to must be large enough to hold the result. The size can be determined by calling BN_bn2mpi(a, NULL).

+ +

BN_mpi2bn() converts the len bytes long representation at s to a BIGNUM and stores it at ret, or in a newly allocated BIGNUM if ret is NULL.

+ +

RETURN VALUES

+ +

BN_bn2bin() returns the length of the big-endian number placed at to. BN_bin2bn() returns the BIGNUM, NULL on error.

+ +

BN_bn2binpad() returns the number of bytes written or -1 if the supplied buffer is too small.

+ +

BN_bn2hex() and BN_bn2dec() return a null-terminated string, or NULL on error. BN_hex2bn() and BN_dec2bn() return the number of characters used in parsing, or 0 on error, in which case no new BIGNUM will be created.

+ +

BN_print_fp() and BN_print() return 1 on success, 0 on write errors.

+ +

BN_bn2mpi() returns the length of the representation. BN_mpi2bn() returns the BIGNUM, and NULL on error.

+ +

The error codes can be obtained by ERR_get_error(3).

+ +

SEE ALSO

+ +

ERR_get_error(3), BN_zero(3), ASN1_INTEGER_to_BN(3), BN_num_bytes(3)

+ +

COPYRIGHT

+ +

Copyright 2000-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_cmp.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_cmp.html new file mode 100644 index 00000000..71e45612 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_cmp.html @@ -0,0 +1,63 @@ + + + + +BN_cmp + + + + + + + + + + +

NAME

+ +

BN_cmp, BN_ucmp, BN_is_zero, BN_is_one, BN_is_word, BN_is_odd - BIGNUM comparison and test functions

+ +

SYNOPSIS

+ +
#include <openssl/bn.h>
+
+int BN_cmp(BIGNUM *a, BIGNUM *b);
+int BN_ucmp(BIGNUM *a, BIGNUM *b);
+
+int BN_is_zero(BIGNUM *a);
+int BN_is_one(BIGNUM *a);
+int BN_is_word(BIGNUM *a, BN_ULONG w);
+int BN_is_odd(BIGNUM *a);
+ +

DESCRIPTION

+ +

BN_cmp() compares the numbers a and b. BN_ucmp() compares their absolute values.

+ +

BN_is_zero(), BN_is_one() and BN_is_word() test if a equals 0, 1, or w respectively. BN_is_odd() tests if a is odd.

+ +

BN_is_zero(), BN_is_one(), BN_is_word() and BN_is_odd() are macros.

+ +

RETURN VALUES

+ +

BN_cmp() returns -1 if a < b, 0 if a == b and 1 if a > b. BN_ucmp() is the same using the absolute values of a and b.

+ +

BN_is_zero(), BN_is_one() BN_is_word() and BN_is_odd() return 1 if the condition is true, 0 otherwise.

+ +

COPYRIGHT

+ +

Copyright 2000-2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_copy.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_copy.html new file mode 100644 index 00000000..7dc6a019 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_copy.html @@ -0,0 +1,75 @@ + + + + +BN_copy + + + + + + + + + + +

NAME

+ +

BN_copy, BN_dup, BN_with_flags - copy BIGNUMs

+ +

SYNOPSIS

+ +
#include <openssl/bn.h>
+
+BIGNUM *BN_copy(BIGNUM *to, const BIGNUM *from);
+
+BIGNUM *BN_dup(const BIGNUM *from);
+
+void BN_with_flags(BIGNUM *dest, const BIGNUM *b, int flags);
+ +

DESCRIPTION

+ +

BN_copy() copies from to to. BN_dup() creates a new BIGNUM containing the value from.

+ +

BN_with_flags creates a temporary shallow copy of b in dest. It places significant restrictions on the copied data. Applications that do no adhere to these restrictions may encounter unexpected side effects or crashes. For that reason use of this function is discouraged. Any flags provided in flags will be set in dest in addition to any flags already set in b. For example this might commonly be used to create a temporary copy of a BIGNUM with the BN_FLG_CONSTTIME flag set for constant time operations. The temporary copy in dest will share some internal state with b. For this reason the following restrictions apply to the use of dest:

+ +
    + +
  • dest should be a newly allocated BIGNUM obtained via a call to BN_new(). It should not have been used for other purposes or initialised in any way.

    + +
  • +
  • dest must only be used in "read-only" operations, i.e. typically those functions where the relevant parameter is declared "const".

    + +
  • +
  • dest must be used and freed before any further subsequent use of b

    + +
  • +
+ +

RETURN VALUES

+ +

BN_copy() returns to on success, NULL on error. BN_dup() returns the new BIGNUM, and NULL on error. The error codes can be obtained by ERR_get_error(3).

+ +

SEE ALSO

+ +

ERR_get_error(3)

+ +

COPYRIGHT

+ +

Copyright 2000-2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_generate_prime.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_generate_prime.html new file mode 100644 index 00000000..bdb2ff7d --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_generate_prime.html @@ -0,0 +1,174 @@ + + + + +BN_generate_prime + + + + + + + + + + +

NAME

+ +

BN_generate_prime_ex, BN_is_prime_ex, BN_is_prime_fasttest_ex, BN_GENCB_call, BN_GENCB_new, BN_GENCB_free, BN_GENCB_set_old, BN_GENCB_set, BN_GENCB_get_arg, BN_generate_prime, BN_is_prime, BN_is_prime_fasttest - generate primes and test for primality

+ +

SYNOPSIS

+ +
#include <openssl/bn.h>
+
+int BN_generate_prime_ex(BIGNUM *ret, int bits, int safe, const BIGNUM *add,
+                         const BIGNUM *rem, BN_GENCB *cb);
+
+int BN_is_prime_ex(const BIGNUM *p, int nchecks, BN_CTX *ctx, BN_GENCB *cb);
+
+int BN_is_prime_fasttest_ex(const BIGNUM *p, int nchecks, BN_CTX *ctx,
+                            int do_trial_division, BN_GENCB *cb);
+
+int BN_GENCB_call(BN_GENCB *cb, int a, int b);
+
+BN_GENCB *BN_GENCB_new(void);
+
+void BN_GENCB_free(BN_GENCB *cb);
+
+void BN_GENCB_set_old(BN_GENCB *gencb,
+                      void (*callback)(int, int, void *), void *cb_arg);
+
+void BN_GENCB_set(BN_GENCB *gencb,
+                  int (*callback)(int, int, BN_GENCB *), void *cb_arg);
+
+void *BN_GENCB_get_arg(BN_GENCB *cb);
+ +

Deprecated:

+ +
#if OPENSSL_API_COMPAT < 0x00908000L
+BIGNUM *BN_generate_prime(BIGNUM *ret, int num, int safe, BIGNUM *add,
+                          BIGNUM *rem, void (*callback)(int, int, void *),
+                          void *cb_arg);
+
+int BN_is_prime(const BIGNUM *a, int checks,
+                void (*callback)(int, int, void *), BN_CTX *ctx, void *cb_arg);
+
+int BN_is_prime_fasttest(const BIGNUM *a, int checks,
+                         void (*callback)(int, int, void *), BN_CTX *ctx,
+                         void *cb_arg, int do_trial_division);
+#endif
+ +

DESCRIPTION

+ +

BN_generate_prime_ex() generates a pseudo-random prime number of at least bit length bits. The returned number is probably prime with a negligible error. If add is NULL the returned prime number will have exact bit length bits with the top most two bits set.

+ +

If ret is not NULL, it will be used to store the number.

+ +

If cb is not NULL, it is used as follows:

+ +
    + +
  • BN_GENCB_call(cb, 0, i) is called after generating the i-th potential prime number.

    + +
  • +
  • While the number is being tested for primality, BN_GENCB_call(cb, 1, j) is called as described below.

    + +
  • +
  • When a prime has been found, BN_GENCB_call(cb, 2, i) is called.

    + +
  • +
  • The callers of BN_generate_prime_ex() may call BN_GENCB_call(cb, i, j) with other values as described in their respective man pages; see "SEE ALSO".

    + +
  • +
+ +

The prime may have to fulfill additional requirements for use in Diffie-Hellman key exchange:

+ +

If add is not NULL, the prime will fulfill the condition p % add == rem (p % add == 1 if rem == NULL) in order to suit a given generator.

+ +

If safe is true, it will be a safe prime (i.e. a prime p so that (p-1)/2 is also prime). If safe is true, and rem == NULL the condition will be p % add == 3. It is recommended that add is a multiple of 4.

+ +

The random generator must be seeded prior to calling BN_generate_prime_ex(). If the automatic seeding or reseeding of the OpenSSL CSPRNG fails due to external circumstances (see RAND(7)), the operation will fail.

+ +

BN_is_prime_ex() and BN_is_prime_fasttest_ex() test if the number p is prime. The following tests are performed until one of them shows that p is composite; if p passes all these tests, it is considered prime.

+ +

BN_is_prime_fasttest_ex(), when called with do_trial_division == 1, first attempts trial division by a number of small primes; if no divisors are found by this test and cb is not NULL, BN_GENCB_call(cb, 1, -1) is called. If do_trial_division == 0, this test is skipped.

+ +

Both BN_is_prime_ex() and BN_is_prime_fasttest_ex() perform a Miller-Rabin probabilistic primality test with nchecks iterations. If nchecks == BN_prime_checks, a number of iterations is used that yields a false positive rate of at most 2^-64 for random input. The error rate depends on the size of the prime and goes down for bigger primes. The rate is 2^-80 starting at 308 bits, 2^-112 at 852 bits, 2^-128 at 1080 bits, 2^-192 at 3747 bits and 2^-256 at 6394 bits.

+ +

When the source of the prime is not random or not trusted, the number of checks needs to be much higher to reach the same level of assurance: It should equal half of the targeted security level in bits (rounded up to the next integer if necessary). For instance, to reach the 128 bit security level, nchecks should be set to 64.

+ +

If cb is not NULL, BN_GENCB_call(cb, 1, j) is called after the j-th iteration (j = 0, 1, ...). ctx is a pre-allocated BN_CTX (to save the overhead of allocating and freeing the structure in a loop), or NULL.

+ +

BN_GENCB_call() calls the callback function held in the BN_GENCB structure and passes the ints a and b as arguments. There are two types of BN_GENCB structure that are supported: "new" style and "old" style. New programs should prefer the "new" style, whilst the "old" style is provided for backwards compatibility purposes.

+ +

A BN_GENCB structure should be created through a call to BN_GENCB_new(), and freed through a call to BN_GENCB_free().

+ +

For "new" style callbacks a BN_GENCB structure should be initialised with a call to BN_GENCB_set(), where gencb is a BN_GENCB *, callback is of type int (*callback)(int, int, BN_GENCB *) and cb_arg is a void *. "Old" style callbacks are the same except they are initialised with a call to BN_GENCB_set_old() and callback is of type void (*callback)(int, int, void *).

+ +

A callback is invoked through a call to BN_GENCB_call. This will check the type of the callback and will invoke callback(a, b, gencb) for new style callbacks or callback(a, b, cb_arg) for old style.

+ +

It is possible to obtain the argument associated with a BN_GENCB structure (set via a call to BN_GENCB_set or BN_GENCB_set_old) using BN_GENCB_get_arg.

+ +

BN_generate_prime() (deprecated) works in the same way as BN_generate_prime_ex() but expects an old-style callback function directly in the callback parameter, and an argument to pass to it in the cb_arg. BN_is_prime() and BN_is_prime_fasttest() can similarly be compared to BN_is_prime_ex() and BN_is_prime_fasttest_ex(), respectively.

+ +

RETURN VALUES

+ +

BN_generate_prime_ex() return 1 on success or 0 on error.

+ +

BN_is_prime_ex(), BN_is_prime_fasttest_ex(), BN_is_prime() and BN_is_prime_fasttest() return 0 if the number is composite, 1 if it is prime with an error probability of less than 0.25^nchecks, and -1 on error.

+ +

BN_generate_prime() returns the prime number on success, NULL otherwise.

+ +

BN_GENCB_new returns a pointer to a BN_GENCB structure on success, or NULL otherwise.

+ +

BN_GENCB_get_arg returns the argument previously associated with a BN_GENCB structure.

+ +

Callback functions should return 1 on success or 0 on error.

+ +

The error codes can be obtained by ERR_get_error(3).

+ +

REMOVED FUNCTIONALITY

+ +

As of OpenSSL 1.1.0 it is no longer possible to create a BN_GENCB structure directly, as in:

+ +
BN_GENCB callback;
+ +

Instead applications should create a BN_GENCB structure using BN_GENCB_new:

+ +
BN_GENCB *callback;
+callback = BN_GENCB_new();
+if (!callback)
+    /* error */
+...
+BN_GENCB_free(callback);
+ +

SEE ALSO

+ +

DH_generate_parameters(3), DSA_generate_parameters(3), RSA_generate_key(3), ERR_get_error(3), RAND_bytes(3), RAND(7)

+ +

HISTORY

+ +

The BN_GENCB_new(), BN_GENCB_free(), and BN_GENCB_get_arg() functions were added in OpenSSL 1.1.0.

+ +

COPYRIGHT

+ +

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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_mod_inverse.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_mod_inverse.html new file mode 100644 index 00000000..4bd456bb --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_mod_inverse.html @@ -0,0 +1,59 @@ + + + + +BN_mod_inverse + + + + + + + + + + +

NAME

+ +

BN_mod_inverse - compute inverse modulo n

+ +

SYNOPSIS

+ +
#include <openssl/bn.h>
+
+BIGNUM *BN_mod_inverse(BIGNUM *r, BIGNUM *a, const BIGNUM *n,
+                       BN_CTX *ctx);
+ +

DESCRIPTION

+ +

BN_mod_inverse() computes the inverse of a modulo n places the result in r ((a*r)%n==1). If r is NULL, a new BIGNUM is created.

+ +

ctx is a previously allocated BN_CTX used for temporary variables. r may be the same BIGNUM as a or n.

+ +

RETURN VALUES

+ +

BN_mod_inverse() returns the BIGNUM containing the inverse, and NULL on error. The error codes can be obtained by ERR_get_error(3).

+ +

SEE ALSO

+ +

ERR_get_error(3), BN_add(3)

+ +

COPYRIGHT

+ +

Copyright 2000-2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_mod_mul_montgomery.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_mod_mul_montgomery.html new file mode 100644 index 00000000..825b3ed1 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_mod_mul_montgomery.html @@ -0,0 +1,99 @@ + + + + +BN_mod_mul_montgomery + + + + + + + + + + +

NAME

+ +

BN_mod_mul_montgomery, BN_MONT_CTX_new, BN_MONT_CTX_free, BN_MONT_CTX_set, BN_MONT_CTX_copy, BN_from_montgomery, BN_to_montgomery - Montgomery multiplication

+ +

SYNOPSIS

+ +
#include <openssl/bn.h>
+
+BN_MONT_CTX *BN_MONT_CTX_new(void);
+void BN_MONT_CTX_free(BN_MONT_CTX *mont);
+
+int BN_MONT_CTX_set(BN_MONT_CTX *mont, const BIGNUM *m, BN_CTX *ctx);
+BN_MONT_CTX *BN_MONT_CTX_copy(BN_MONT_CTX *to, BN_MONT_CTX *from);
+
+int BN_mod_mul_montgomery(BIGNUM *r, BIGNUM *a, BIGNUM *b,
+                          BN_MONT_CTX *mont, BN_CTX *ctx);
+
+int BN_from_montgomery(BIGNUM *r, BIGNUM *a, BN_MONT_CTX *mont,
+                       BN_CTX *ctx);
+
+int BN_to_montgomery(BIGNUM *r, BIGNUM *a, BN_MONT_CTX *mont,
+                     BN_CTX *ctx);
+ +

DESCRIPTION

+ +

These functions implement Montgomery multiplication. They are used automatically when BN_mod_exp(3) is called with suitable input, but they may be useful when several operations are to be performed using the same modulus.

+ +

BN_MONT_CTX_new() allocates and initializes a BN_MONT_CTX structure.

+ +

BN_MONT_CTX_set() sets up the mont structure from the modulus m by precomputing its inverse and a value R.

+ +

BN_MONT_CTX_copy() copies the BN_MONT_CTX from to to.

+ +

BN_MONT_CTX_free() frees the components of the BN_MONT_CTX, and, if it was created by BN_MONT_CTX_new(), also the structure itself. If mont is NULL, nothing is done.

+ +

BN_mod_mul_montgomery() computes Mont(a,b):=a*b*R^-1 and places the result in r.

+ +

BN_from_montgomery() performs the Montgomery reduction r = a*R^-1.

+ +

BN_to_montgomery() computes Mont(a,R^2), i.e. a*R. Note that a must be non-negative and smaller than the modulus.

+ +

For all functions, ctx is a previously allocated BN_CTX used for temporary variables.

+ +

RETURN VALUES

+ +

BN_MONT_CTX_new() returns the newly allocated BN_MONT_CTX, and NULL on error.

+ +

BN_MONT_CTX_free() has no return value.

+ +

For the other functions, 1 is returned for success, 0 on error. The error codes can be obtained by ERR_get_error(3).

+ +

WARNINGS

+ +

The inputs must be reduced modulo m, otherwise the result will be outside the expected range.

+ +

SEE ALSO

+ +

ERR_get_error(3), BN_add(3), BN_CTX_new(3)

+ +

HISTORY

+ +

BN_MONT_CTX_init() was removed in OpenSSL 1.1.0

+ +

COPYRIGHT

+ +

Copyright 2000-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_mod_mul_reciprocal.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_mod_mul_reciprocal.html new file mode 100644 index 00000000..6c144944 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_mod_mul_reciprocal.html @@ -0,0 +1,84 @@ + + + + +BN_mod_mul_reciprocal + + + + + + + + + + +

NAME

+ +

BN_mod_mul_reciprocal, BN_div_recp, BN_RECP_CTX_new, BN_RECP_CTX_free, BN_RECP_CTX_set - modular multiplication using reciprocal

+ +

SYNOPSIS

+ +
#include <openssl/bn.h>
+
+BN_RECP_CTX *BN_RECP_CTX_new(void);
+void BN_RECP_CTX_free(BN_RECP_CTX *recp);
+
+int BN_RECP_CTX_set(BN_RECP_CTX *recp, const BIGNUM *m, BN_CTX *ctx);
+
+int BN_div_recp(BIGNUM *dv, BIGNUM *rem, BIGNUM *a, BN_RECP_CTX *recp,
+                BN_CTX *ctx);
+
+int BN_mod_mul_reciprocal(BIGNUM *r, BIGNUM *a, BIGNUM *b,
+                          BN_RECP_CTX *recp, BN_CTX *ctx);
+ +

DESCRIPTION

+ +

BN_mod_mul_reciprocal() can be used to perform an efficient BN_mod_mul(3) operation when the operation will be performed repeatedly with the same modulus. It computes r=(a*b)%m using recp=1/m, which is set as described below. ctx is a previously allocated BN_CTX used for temporary variables.

+ +

BN_RECP_CTX_new() allocates and initializes a BN_RECP structure.

+ +

BN_RECP_CTX_free() frees the components of the BN_RECP, and, if it was created by BN_RECP_CTX_new(), also the structure itself. If recp is NULL, nothing is done.

+ +

BN_RECP_CTX_set() stores m in recp and sets it up for computing 1/m and shifting it left by BN_num_bits(m)+1 to make it an integer. The result and the number of bits it was shifted left will later be stored in recp.

+ +

BN_div_recp() divides a by m using recp. It places the quotient in dv and the remainder in rem.

+ +

The BN_RECP_CTX structure cannot be shared between threads.

+ +

RETURN VALUES

+ +

BN_RECP_CTX_new() returns the newly allocated BN_RECP_CTX, and NULL on error.

+ +

BN_RECP_CTX_free() has no return value.

+ +

For the other functions, 1 is returned for success, 0 on error. The error codes can be obtained by ERR_get_error(3).

+ +

SEE ALSO

+ +

ERR_get_error(3), BN_add(3), BN_CTX_new(3)

+ +

HISTORY

+ +

BN_RECP_CTX_init() was removed in OpenSSL 1.1.0

+ +

COPYRIGHT

+ +

Copyright 2000-2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_new.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_new.html new file mode 100644 index 00000000..cf03b245 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_new.html @@ -0,0 +1,75 @@ + + + + +BN_new + + + + + + + + + + +

NAME

+ +

BN_new, BN_secure_new, BN_clear, BN_free, BN_clear_free - allocate and free BIGNUMs

+ +

SYNOPSIS

+ +
#include <openssl/bn.h>
+
+BIGNUM *BN_new(void);
+
+BIGNUM *BN_secure_new(void);
+
+void BN_clear(BIGNUM *a);
+
+void BN_free(BIGNUM *a);
+
+void BN_clear_free(BIGNUM *a);
+ +

DESCRIPTION

+ +

BN_new() allocates and initializes a BIGNUM structure. BN_secure_new() does the same except that the secure heap OPENSSL_secure_malloc(3) is used to store the value.

+ +

BN_clear() is used to destroy sensitive data such as keys when they are no longer needed. It erases the memory used by a and sets it to the value 0. If a is NULL, nothing is done.

+ +

BN_free() frees the components of the BIGNUM, and if it was created by BN_new(), also the structure itself. BN_clear_free() additionally overwrites the data before the memory is returned to the system. If a is NULL, nothing is done.

+ +

RETURN VALUES

+ +

BN_new() and BN_secure_new() return a pointer to the BIGNUM initialised to the value 0. If the allocation fails, they return NULL and set an error code that can be obtained by ERR_get_error(3).

+ +

BN_clear(), BN_free() and BN_clear_free() have no return values.

+ +

SEE ALSO

+ +

ERR_get_error(3), OPENSSL_secure_malloc(3)

+ +

HISTORY

+ +

BN_init() was removed in OpenSSL 1.1.0; use BN_new() instead.

+ +

COPYRIGHT

+ +

Copyright 2000-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_num_bytes.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_num_bytes.html new file mode 100644 index 00000000..fa66fc8c --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_num_bytes.html @@ -0,0 +1,71 @@ + + + + +BN_num_bytes + + + + + + + + + + +

NAME

+ +

BN_num_bits, BN_num_bytes, BN_num_bits_word - get BIGNUM size

+ +

SYNOPSIS

+ +
#include <openssl/bn.h>
+
+int BN_num_bytes(const BIGNUM *a);
+
+int BN_num_bits(const BIGNUM *a);
+
+int BN_num_bits_word(BN_ULONG w);
+ +

DESCRIPTION

+ +

BN_num_bytes() returns the size of a BIGNUM in bytes.

+ +

BN_num_bits_word() returns the number of significant bits in a word. If we take 0x00000432 as an example, it returns 11, not 16, not 32. Basically, except for a zero, it returns floor(log2(w))+1.

+ +

BN_num_bits() returns the number of significant bits in a BIGNUM, following the same principle as BN_num_bits_word().

+ +

BN_num_bytes() is a macro.

+ +

RETURN VALUES

+ +

The size.

+ +

NOTES

+ +

Some have tried using BN_num_bits() on individual numbers in RSA keys, DH keys and DSA keys, and found that they don't always come up with the number of bits they expected (something like 512, 1024, 2048, ...). This is because generating a number with some specific number of bits doesn't always set the highest bits, thereby making the number of significant bits a little lower. If you want to know the "key size" of such a key, either use functions like RSA_size(), DH_size() and DSA_size(), or use BN_num_bytes() and multiply with 8 (although there's no real guarantee that will match the "key size", just a lot more probability).

+ +

SEE ALSO

+ +

DH_size(3), DSA_size(3), RSA_size(3)

+ +

COPYRIGHT

+ +

Copyright 2000-2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_rand.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_rand.html new file mode 100644 index 00000000..6f99cbbd --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_rand.html @@ -0,0 +1,88 @@ + + + + +BN_rand + + + + + + + + + + +

NAME

+ +

BN_rand, BN_priv_rand, BN_pseudo_rand, BN_rand_range, BN_priv_rand_range, BN_pseudo_rand_range - generate pseudo-random number

+ +

SYNOPSIS

+ +
#include <openssl/bn.h>
+
+int BN_rand(BIGNUM *rnd, int bits, int top, int bottom);
+
+int BN_priv_rand(BIGNUM *rnd, int bits, int top, int bottom);
+
+int BN_pseudo_rand(BIGNUM *rnd, int bits, int top, int bottom);
+
+int BN_rand_range(BIGNUM *rnd, BIGNUM *range);
+
+int BN_priv_rand_range(BIGNUM *rnd, BIGNUM *range);
+
+int BN_pseudo_rand_range(BIGNUM *rnd, BIGNUM *range);
+ +

DESCRIPTION

+ +

BN_rand() generates a cryptographically strong pseudo-random number of bits in length and stores it in rnd. If bits is less than zero, or too small to accommodate the requirements specified by the top and bottom parameters, an error is returned. The top parameters specifies requirements on the most significant bit of the generated number. If it is BN_RAND_TOP_ANY, there is no constraint. If it is BN_RAND_TOP_ONE, the top bit must be one. If it is BN_RAND_TOP_TWO, the two most significant bits of the number will be set to 1, so that the product of two such random numbers will always have 2*bits length. If bottom is BN_RAND_BOTTOM_ODD, the number will be odd; if it is BN_RAND_BOTTOM_ANY it can be odd or even. If bits is 1 then top cannot also be BN_RAND_FLG_TOPTWO.

+ +

BN_rand_range() generates a cryptographically strong pseudo-random number rnd in the range 0 <= rnd < range.

+ +

BN_priv_rand() and BN_priv_rand_range() have the same semantics as BN_rand() and BN_rand_range() respectively. They are intended to be used for generating values that should remain private, and mirror the same difference between RAND_bytes(3) and RAND_priv_bytes(3).

+ +

NOTES

+ +

Always check the error return value of these functions and do not take randomness for granted: an error occurs if the CSPRNG has not been seeded with enough randomness to ensure an unpredictable byte sequence.

+ +

RETURN VALUES

+ +

The functions return 1 on success, 0 on error. The error codes can be obtained by ERR_get_error(3).

+ +

SEE ALSO

+ +

ERR_get_error(3), RAND_add(3), RAND_bytes(3), RAND_priv_bytes(3), RAND(7), RAND_DRBG(7)

+ +

HISTORY

+ +
    + +
  • Starting with OpenSSL release 1.1.0, BN_pseudo_rand() has been identical to BN_rand() and BN_pseudo_rand_range() has been identical to BN_rand_range(). The "pseudo" functions should not be used and may be deprecated in a future release.

    + +
  • +
  • The BN_priv_rand() and BN_priv_rand_range() functions were added in OpenSSL 1.1.1.

    + +
  • +
+ +

COPYRIGHT

+ +

Copyright 2000-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_security_bits.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_security_bits.html new file mode 100644 index 00000000..fa6966ba --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_security_bits.html @@ -0,0 +1,66 @@ + + + + +BN_security_bits + + + + + + + + + + +

NAME

+ +

BN_security_bits - returns bits of security based on given numbers

+ +

SYNOPSIS

+ +
#include <openssl/bn.h>
+
+int BN_security_bits(int L, int N);
+ +

DESCRIPTION

+ +

BN_security_bits() returns the number of bits of security provided by a specific algorithm and a particular key size. The bits of security is defined in NIST SP800-57. Currently, BN_security_bits() support two types of asymmetric algorithms: the FFC (Finite Field Cryptography) and IFC (Integer Factorization Cryptography). For FFC, e.g., DSA and DH, both parameters L and N are used to decide the bits of security, where L is the size of the public key and N is the size of the private key. For IFC, e.g., RSA, only L is used and it's commonly considered to be the key size (modulus).

+ +

RETURN VALUES

+ +

Number of security bits.

+ +

NOTES

+ +

ECC (Elliptic Curve Cryptography) is not covered by the BN_security_bits() function. The symmetric algorithms are not covered neither.

+ +

SEE ALSO

+ +

DH_security_bits(3), DSA_security_bits(3), RSA_security_bits(3)

+ +

HISTORY

+ +

The BN_security_bits() function was added in OpenSSL 1.1.0.

+ +

COPYRIGHT

+ +

Copyright 2017-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_set_bit.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_set_bit.html new file mode 100644 index 00000000..9a6c6fc0 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_set_bit.html @@ -0,0 +1,81 @@ + + + + +BN_set_bit + + + + + + + + + + +

NAME

+ +

BN_set_bit, BN_clear_bit, BN_is_bit_set, BN_mask_bits, BN_lshift, BN_lshift1, BN_rshift, BN_rshift1 - bit operations on BIGNUMs

+ +

SYNOPSIS

+ +
#include <openssl/bn.h>
+
+int BN_set_bit(BIGNUM *a, int n);
+int BN_clear_bit(BIGNUM *a, int n);
+
+int BN_is_bit_set(const BIGNUM *a, int n);
+
+int BN_mask_bits(BIGNUM *a, int n);
+
+int BN_lshift(BIGNUM *r, const BIGNUM *a, int n);
+int BN_lshift1(BIGNUM *r, BIGNUM *a);
+
+int BN_rshift(BIGNUM *r, BIGNUM *a, int n);
+int BN_rshift1(BIGNUM *r, BIGNUM *a);
+ +

DESCRIPTION

+ +

BN_set_bit() sets bit n in a to 1 (a|=(1<<n)). The number is expanded if necessary.

+ +

BN_clear_bit() sets bit n in a to 0 (a&=~(1<<n)). An error occurs if a is shorter than n bits.

+ +

BN_is_bit_set() tests if bit n in a is set.

+ +

BN_mask_bits() truncates a to an n bit number (a&=~((~0)>>n)). An error occurs if a already is shorter than n bits.

+ +

BN_lshift() shifts a left by n bits and places the result in r (r=a*2^n). Note that n must be non-negative. BN_lshift1() shifts a left by one and places the result in r (r=2*a).

+ +

BN_rshift() shifts a right by n bits and places the result in r (r=a/2^n). Note that n must be non-negative. BN_rshift1() shifts a right by one and places the result in r (r=a/2).

+ +

For the shift functions, r and a may be the same variable.

+ +

RETURN VALUES

+ +

BN_is_bit_set() returns 1 if the bit is set, 0 otherwise.

+ +

All other functions return 1 for success, 0 on error. The error codes can be obtained by ERR_get_error(3).

+ +

SEE ALSO

+ +

BN_num_bytes(3), BN_add(3)

+ +

COPYRIGHT

+ +

Copyright 2000-2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_swap.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_swap.html new file mode 100644 index 00000000..53b37a20 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_swap.html @@ -0,0 +1,51 @@ + + + + +BN_swap + + + + + + + + + + +

NAME

+ +

BN_swap - exchange BIGNUMs

+ +

SYNOPSIS

+ +
#include <openssl/bn.h>
+
+void BN_swap(BIGNUM *a, BIGNUM *b);
+ +

DESCRIPTION

+ +

BN_swap() exchanges the values of a and b.

+ +

RETURN VALUES

+ +

BN_swap() does not return a value.

+ +

COPYRIGHT

+ +

Copyright 2000-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_zero.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_zero.html new file mode 100644 index 00000000..e92b821c --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BN_zero.html @@ -0,0 +1,82 @@ + + + + +BN_zero + + + + + + + + + + +

NAME

+ +

BN_zero, BN_one, BN_value_one, BN_set_word, BN_get_word - BIGNUM assignment operations

+ +

SYNOPSIS

+ +
#include <openssl/bn.h>
+
+void BN_zero(BIGNUM *a);
+int BN_one(BIGNUM *a);
+
+const BIGNUM *BN_value_one(void);
+
+int BN_set_word(BIGNUM *a, BN_ULONG w);
+unsigned BN_ULONG BN_get_word(BIGNUM *a);
+ +

DESCRIPTION

+ +

BN_ULONG is a macro that will be an unsigned integral type optimized for the most efficient implementation on the local platform.

+ +

BN_zero(), BN_one() and BN_set_word() set a to the values 0, 1 and w respectively. BN_zero() and BN_one() are macros.

+ +

BN_value_one() returns a BIGNUM constant of value 1. This constant is useful for use in comparisons and assignment.

+ +

BN_get_word() returns a, if it can be represented as a BN_ULONG.

+ +

RETURN VALUES

+ +

BN_get_word() returns the value a, or all-bits-set if a cannot be represented as a single integer.

+ +

BN_one() and BN_set_word() return 1 on success, 0 otherwise. BN_value_one() returns the constant. BN_zero() never fails and returns no value.

+ +

BUGS

+ +

If a BIGNUM is equal to the value of all-bits-set, it will collide with the error condition returned by BN_get_word() which uses that as an error value.

+ +

BN_ULONG should probably be a typedef.

+ +

SEE ALSO

+ +

BN_bn2bin(3)

+ +

HISTORY

+ +

In OpenSSL 0.9.8, BN_zero() was changed to not return a value; previous versions returned an int.

+ +

COPYRIGHT

+ +

Copyright 2000-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BUF_MEM_new.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BUF_MEM_new.html new file mode 100644 index 00000000..fa6c957f --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/BUF_MEM_new.html @@ -0,0 +1,86 @@ + + + + +BUF_MEM_new + + + + + + + + + + +

NAME

+ +

BUF_MEM_new, BUF_MEM_new_ex, BUF_MEM_free, BUF_MEM_grow, BUF_MEM_grow_clean, BUF_reverse - simple character array structure

+ +

SYNOPSIS

+ +
#include <openssl/buffer.h>
+
+BUF_MEM *BUF_MEM_new(void);
+
+BUF_MEM *BUF_MEM_new_ex(unsigned long flags);
+
+void BUF_MEM_free(BUF_MEM *a);
+
+int BUF_MEM_grow(BUF_MEM *str, int len);
+size_t BUF_MEM_grow_clean(BUF_MEM *str, size_t len);
+
+void BUF_reverse(unsigned char *out, const unsigned char *in, size_t size);
+ +

DESCRIPTION

+ +

The buffer library handles simple character arrays. Buffers are used for various purposes in the library, most notably memory BIOs.

+ +

BUF_MEM_new() allocates a new buffer of zero size.

+ +

BUF_MEM_new_ex() allocates a buffer with the specified flags. The flag BUF_MEM_FLAG_SECURE specifies that the data pointer should be allocated on the secure heap; see CRYPTO_secure_malloc(3).

+ +

BUF_MEM_free() frees up an already existing buffer. The data is zeroed before freeing up in case the buffer contains sensitive data.

+ +

BUF_MEM_grow() changes the size of an already existing buffer to len. Any data already in the buffer is preserved if it increases in size.

+ +

BUF_MEM_grow_clean() is similar to BUF_MEM_grow() but it sets any free'd or additionally-allocated memory to zero.

+ +

BUF_reverse() reverses size bytes at in into out. If in is NULL, the array is reversed in-place.

+ +

RETURN VALUES

+ +

BUF_MEM_new() returns the buffer or NULL on error.

+ +

BUF_MEM_free() has no return value.

+ +

BUF_MEM_grow() and BUF_MEM_grow_clean() return zero on error or the new size (i.e., len).

+ +

SEE ALSO

+ +

bio(7), CRYPTO_secure_malloc(3).

+ +

HISTORY

+ +

The BUF_MEM_new_ex() function was added in OpenSSL 1.1.0.

+ +

COPYRIGHT

+ +

Copyright 2000-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CMS_add0_cert.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CMS_add0_cert.html new file mode 100644 index 00000000..963021b2 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CMS_add0_cert.html @@ -0,0 +1,79 @@ + + + + +CMS_add0_cert + + + + + + + + + + +

NAME

+ +

CMS_add0_cert, CMS_add1_cert, CMS_get1_certs, CMS_add0_crl, CMS_add1_crl, CMS_get1_crls - CMS certificate and CRL utility functions

+ +

SYNOPSIS

+ +
#include <openssl/cms.h>
+
+int CMS_add0_cert(CMS_ContentInfo *cms, X509 *cert);
+int CMS_add1_cert(CMS_ContentInfo *cms, X509 *cert);
+STACK_OF(X509) *CMS_get1_certs(CMS_ContentInfo *cms);
+
+int CMS_add0_crl(CMS_ContentInfo *cms, X509_CRL *crl);
+int CMS_add1_crl(CMS_ContentInfo *cms, X509_CRL *crl);
+STACK_OF(X509_CRL) *CMS_get1_crls(CMS_ContentInfo *cms);
+ +

DESCRIPTION

+ +

CMS_add0_cert() and CMS_add1_cert() add certificate cert to cms. must be of type signed data or enveloped data.

+ +

CMS_get1_certs() returns all certificates in cms.

+ +

CMS_add0_crl() and CMS_add1_crl() add CRL crl to cms. CMS_get1_crls() returns any CRLs in cms.

+ +

NOTES

+ +

The CMS_ContentInfo structure cms must be of type signed data or enveloped data or an error will be returned.

+ +

For signed data certificates and CRLs are added to the certificates and crls fields of SignedData structure. For enveloped data they are added to OriginatorInfo.

+ +

As the 0 implies CMS_add0_cert() adds cert internally to cms and it must not be freed up after the call as opposed to CMS_add1_cert() where cert must be freed up.

+ +

The same certificate or CRL must not be added to the same cms structure more than once.

+ +

RETURN VALUES

+ +

CMS_add0_cert(), CMS_add1_cert() and CMS_add0_crl() and CMS_add1_crl() return 1 for success and 0 for failure.

+ +

CMS_get1_certs() and CMS_get1_crls() return the STACK of certificates or CRLs or NULL if there are none or an error occurs. The only error which will occur in practice is if the cms type is invalid.

+ +

SEE ALSO

+ +

ERR_get_error(3), CMS_sign(3), CMS_encrypt(3)

+ +

COPYRIGHT

+ +

Copyright 2008-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CMS_add1_recipient_cert.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CMS_add1_recipient_cert.html new file mode 100644 index 00000000..15da3724 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CMS_add1_recipient_cert.html @@ -0,0 +1,77 @@ + + + + +CMS_add1_recipient_cert + + + + + + + + + + +

NAME

+ +

CMS_add1_recipient_cert, CMS_add0_recipient_key - add recipients to a CMS enveloped data structure

+ +

SYNOPSIS

+ +
#include <openssl/cms.h>
+
+CMS_RecipientInfo *CMS_add1_recipient_cert(CMS_ContentInfo *cms,
+                                           X509 *recip, unsigned int flags);
+
+CMS_RecipientInfo *CMS_add0_recipient_key(CMS_ContentInfo *cms, int nid,
+                                          unsigned char *key, size_t keylen,
+                                          unsigned char *id, size_t idlen,
+                                          ASN1_GENERALIZEDTIME *date,
+                                          ASN1_OBJECT *otherTypeId,
+                                          ASN1_TYPE *otherType);
+ +

DESCRIPTION

+ +

CMS_add1_recipient_cert() adds recipient recip to CMS_ContentInfo enveloped data structure cms as a KeyTransRecipientInfo structure.

+ +

CMS_add0_recipient_key() adds symmetric key key of length keylen using wrapping algorithm nid, identifier id of length idlen and optional values date, otherTypeId and otherType to CMS_ContentInfo enveloped data structure cms as a KEKRecipientInfo structure.

+ +

The CMS_ContentInfo structure should be obtained from an initial call to CMS_encrypt() with the flag CMS_PARTIAL set.

+ +

NOTES

+ +

The main purpose of this function is to provide finer control over a CMS enveloped data structure where the simpler CMS_encrypt() function defaults are not appropriate. For example if one or more KEKRecipientInfo structures need to be added. New attributes can also be added using the returned CMS_RecipientInfo structure and the CMS attribute utility functions.

+ +

OpenSSL will by default identify recipient certificates using issuer name and serial number. If CMS_USE_KEYID is set it will use the subject key identifier value instead. An error occurs if all recipient certificates do not have a subject key identifier extension.

+ +

Currently only AES based key wrapping algorithms are supported for nid, specifically: NID_id_aes128_wrap, NID_id_aes192_wrap and NID_id_aes256_wrap. If nid is set to NID_undef then an AES wrap algorithm will be used consistent with keylen.

+ +

RETURN VALUES

+ +

CMS_add1_recipient_cert() and CMS_add0_recipient_key() return an internal pointer to the CMS_RecipientInfo structure just added or NULL if an error occurs.

+ +

SEE ALSO

+ +

ERR_get_error(3), CMS_decrypt(3), CMS_final(3),

+ +

COPYRIGHT

+ +

Copyright 2008-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CMS_add1_signer.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CMS_add1_signer.html new file mode 100644 index 00000000..b2e91064 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CMS_add1_signer.html @@ -0,0 +1,89 @@ + + + + +CMS_add1_signer + + + + + + + + + + +

NAME

+ +

CMS_add1_signer, CMS_SignerInfo_sign - add a signer to a CMS_ContentInfo signed data structure

+ +

SYNOPSIS

+ +
#include <openssl/cms.h>
+
+CMS_SignerInfo *CMS_add1_signer(CMS_ContentInfo *cms, X509 *signcert,
+                                EVP_PKEY *pkey, const EVP_MD *md,
+                                unsigned int flags);
+
+int CMS_SignerInfo_sign(CMS_SignerInfo *si);
+ +

DESCRIPTION

+ +

CMS_add1_signer() adds a signer with certificate signcert and private key pkey using message digest md to CMS_ContentInfo SignedData structure cms.

+ +

The CMS_ContentInfo structure should be obtained from an initial call to CMS_sign() with the flag CMS_PARTIAL set or in the case or re-signing a valid CMS_ContentInfo SignedData structure.

+ +

If the md parameter is NULL then the default digest for the public key algorithm will be used.

+ +

Unless the CMS_REUSE_DIGEST flag is set the returned CMS_ContentInfo structure is not complete and must be finalized either by streaming (if applicable) or a call to CMS_final().

+ +

The CMS_SignerInfo_sign() function will explicitly sign a CMS_SignerInfo structure, its main use is when CMS_REUSE_DIGEST and CMS_PARTIAL flags are both set.

+ +

NOTES

+ +

The main purpose of CMS_add1_signer() is to provide finer control over a CMS signed data structure where the simpler CMS_sign() function defaults are not appropriate. For example if multiple signers or non default digest algorithms are needed. New attributes can also be added using the returned CMS_SignerInfo structure and the CMS attribute utility functions or the CMS signed receipt request functions.

+ +

Any of the following flags (ored together) can be passed in the flags parameter.

+ +

If CMS_REUSE_DIGEST is set then an attempt is made to copy the content digest value from the CMS_ContentInfo structure: to add a signer to an existing structure. An error occurs if a matching digest value cannot be found to copy. The returned CMS_ContentInfo structure will be valid and finalized when this flag is set.

+ +

If CMS_PARTIAL is set in addition to CMS_REUSE_DIGEST then the CMS_SignerInfo structure will not be finalized so additional attributes can be added. In this case an explicit call to CMS_SignerInfo_sign() is needed to finalize it.

+ +

If CMS_NOCERTS is set the signer's certificate will not be included in the CMS_ContentInfo structure, the signer's certificate must still be supplied in the signcert parameter though. This can reduce the size of the signature if the signers certificate can be obtained by other means: for example a previously signed message.

+ +

The SignedData structure includes several CMS signedAttributes including the signing time, the CMS content type and the supported list of ciphers in an SMIMECapabilities attribute. If CMS_NOATTR is set then no signedAttributes will be used. If CMS_NOSMIMECAP is set then just the SMIMECapabilities are omitted.

+ +

OpenSSL will by default identify signing certificates using issuer name and serial number. If CMS_USE_KEYID is set it will use the subject key identifier value instead. An error occurs if the signing certificate does not have a subject key identifier extension.

+ +

If present the SMIMECapabilities attribute indicates support for the following algorithms in preference order: 256 bit AES, Gost R3411-94, Gost 28147-89, 192 bit AES, 128 bit AES, triple DES, 128 bit RC2, 64 bit RC2, DES and 40 bit RC2. If any of these algorithms is not available then it will not be included: for example the GOST algorithms will not be included if the GOST ENGINE is not loaded.

+ +

CMS_add1_signer() returns an internal pointer to the CMS_SignerInfo structure just added, this can be used to set additional attributes before it is finalized.

+ +

RETURN VALUES

+ +

CMS_add1_signer() returns an internal pointer to the CMS_SignerInfo structure just added or NULL if an error occurs.

+ +

SEE ALSO

+ +

ERR_get_error(3), CMS_sign(3), CMS_final(3),

+ +

COPYRIGHT

+ +

Copyright 2014-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CMS_compress.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CMS_compress.html new file mode 100644 index 00000000..069b0ede --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CMS_compress.html @@ -0,0 +1,85 @@ + + + + +CMS_compress + + + + + + + + + + +

NAME

+ +

CMS_compress - create a CMS CompressedData structure

+ +

SYNOPSIS

+ +
#include <openssl/cms.h>
+
+CMS_ContentInfo *CMS_compress(BIO *in, int comp_nid, unsigned int flags);
+ +

DESCRIPTION

+ +

CMS_compress() creates and returns a CMS CompressedData structure. comp_nid is the compression algorithm to use or NID_undef to use the default algorithm (zlib compression). in is the content to be compressed. flags is an optional set of flags.

+ +

NOTES

+ +

The only currently supported compression algorithm is zlib using the NID NID_zlib_compression.

+ +

If zlib support is not compiled into OpenSSL then CMS_compress() will return an error.

+ +

If the CMS_TEXT flag is set MIME headers for type text/plain are prepended to the data.

+ +

Normally the supplied content is translated into MIME canonical format (as required by the S/MIME specifications) if CMS_BINARY is set no translation occurs. This option should be used if the supplied data is in binary format otherwise the translation will corrupt it. If CMS_BINARY is set then CMS_TEXT is ignored.

+ +

If the CMS_STREAM flag is set a partial CMS_ContentInfo structure is returned suitable for streaming I/O: no data is read from the BIO in.

+ +

The compressed data is included in the CMS_ContentInfo structure, unless CMS_DETACHED is set in which case it is omitted. This is rarely used in practice and is not supported by SMIME_write_CMS().

+ +

NOTES

+ +

If the flag CMS_STREAM is set the returned CMS_ContentInfo structure is not complete and outputting its contents via a function that does not properly finalize the CMS_ContentInfo structure will give unpredictable results.

+ +

Several functions including SMIME_write_CMS(), i2d_CMS_bio_stream(), PEM_write_bio_CMS_stream() finalize the structure. Alternatively finalization can be performed by obtaining the streaming ASN1 BIO directly using BIO_new_CMS().

+ +

Additional compression parameters such as the zlib compression level cannot currently be set.

+ +

RETURN VALUES

+ +

CMS_compress() returns either a CMS_ContentInfo structure or NULL if an error occurred. The error can be obtained from ERR_get_error(3).

+ +

SEE ALSO

+ +

ERR_get_error(3), CMS_uncompress(3)

+ +

HISTORY

+ +

The CMS_STREAM flag was added in OpenSSL 1.0.0.

+ +

COPYRIGHT

+ +

Copyright 2008-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CMS_decrypt.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CMS_decrypt.html new file mode 100644 index 00000000..b900628c --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CMS_decrypt.html @@ -0,0 +1,79 @@ + + + + +CMS_decrypt + + + + + + + + + + +

NAME

+ +

CMS_decrypt - decrypt content from a CMS envelopedData structure

+ +

SYNOPSIS

+ +
#include <openssl/cms.h>
+
+int CMS_decrypt(CMS_ContentInfo *cms, EVP_PKEY *pkey, X509 *cert,
+                BIO *dcont, BIO *out, unsigned int flags);
+ +

DESCRIPTION

+ +

CMS_decrypt() extracts and decrypts the content from a CMS EnvelopedData structure. pkey is the private key of the recipient, cert is the recipient's certificate, out is a BIO to write the content to and flags is an optional set of flags.

+ +

The dcont parameter is used in the rare case where the encrypted content is detached. It will normally be set to NULL.

+ +

NOTES

+ +

Although the recipients certificate is not needed to decrypt the data it is needed to locate the appropriate (of possible several) recipients in the CMS structure.

+ +

If cert is set to NULL all possible recipients are tried. This case however is problematic. To thwart the MMA attack (Bleichenbacher's attack on PKCS #1 v1.5 RSA padding) all recipients are tried whether they succeed or not. If no recipient succeeds then a random symmetric key is used to decrypt the content: this will typically output garbage and may (but is not guaranteed to) ultimately return a padding error only. If CMS_decrypt() just returned an error when all recipient encrypted keys failed to decrypt an attacker could use this in a timing attack. If the special flag CMS_DEBUG_DECRYPT is set then the above behaviour is modified and an error is returned if no recipient encrypted key can be decrypted without generating a random content encryption key. Applications should use this flag with extreme caution especially in automated gateways as it can leave them open to attack.

+ +

It is possible to determine the correct recipient key by other means (for example looking them up in a database) and setting them in the CMS structure in advance using the CMS utility functions such as CMS_set1_pkey(). In this case both cert and pkey should be set to NULL.

+ +

To process KEKRecipientInfo types CMS_set1_key() or CMS_RecipientInfo_set0_key() and CMS_RecipientInfo_decrypt() should be called before CMS_decrypt() and cert and pkey set to NULL.

+ +

The following flags can be passed in the flags parameter.

+ +

If the CMS_TEXT flag is set MIME headers for type text/plain are deleted from the content. If the content is not of type text/plain then an error is returned.

+ +

RETURN VALUES

+ +

CMS_decrypt() returns either 1 for success or 0 for failure. The error can be obtained from ERR_get_error(3)

+ +

BUGS

+ +

The lack of single pass processing and the need to hold all data in memory as mentioned in CMS_verify() also applies to CMS_decrypt().

+ +

SEE ALSO

+ +

ERR_get_error(3), CMS_encrypt(3)

+ +

COPYRIGHT

+ +

Copyright 2008-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CMS_encrypt.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CMS_encrypt.html new file mode 100644 index 00000000..8221d8c5 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CMS_encrypt.html @@ -0,0 +1,98 @@ + + + + +CMS_encrypt + + + + + + + + + + +

NAME

+ +

CMS_encrypt - create a CMS envelopedData structure

+ +

SYNOPSIS

+ +
#include <openssl/cms.h>
+
+CMS_ContentInfo *CMS_encrypt(STACK_OF(X509) *certs, BIO *in,
+                             const EVP_CIPHER *cipher, unsigned int flags);
+ +

DESCRIPTION

+ +

CMS_encrypt() creates and returns a CMS EnvelopedData structure. certs is a list of recipient certificates. in is the content to be encrypted. cipher is the symmetric cipher to use. flags is an optional set of flags.

+ +

NOTES

+ +

Only certificates carrying RSA, Diffie-Hellman or EC keys are supported by this function.

+ +

EVP_des_ede3_cbc() (triple DES) is the algorithm of choice for S/MIME use because most clients will support it.

+ +

The algorithm passed in the cipher parameter must support ASN1 encoding of its parameters.

+ +

Many browsers implement a "sign and encrypt" option which is simply an S/MIME envelopedData containing an S/MIME signed message. This can be readily produced by storing the S/MIME signed message in a memory BIO and passing it to CMS_encrypt().

+ +

The following flags can be passed in the flags parameter.

+ +

If the CMS_TEXT flag is set MIME headers for type text/plain are prepended to the data.

+ +

Normally the supplied content is translated into MIME canonical format (as required by the S/MIME specifications) if CMS_BINARY is set no translation occurs. This option should be used if the supplied data is in binary format otherwise the translation will corrupt it. If CMS_BINARY is set then CMS_TEXT is ignored.

+ +

OpenSSL will by default identify recipient certificates using issuer name and serial number. If CMS_USE_KEYID is set it will use the subject key identifier value instead. An error occurs if all recipient certificates do not have a subject key identifier extension.

+ +

If the CMS_STREAM flag is set a partial CMS_ContentInfo structure is returned suitable for streaming I/O: no data is read from the BIO in.

+ +

If the CMS_PARTIAL flag is set a partial CMS_ContentInfo structure is returned to which additional recipients and attributes can be added before finalization.

+ +

The data being encrypted is included in the CMS_ContentInfo structure, unless CMS_DETACHED is set in which case it is omitted. This is rarely used in practice and is not supported by SMIME_write_CMS().

+ +

NOTES

+ +

If the flag CMS_STREAM is set the returned CMS_ContentInfo structure is not complete and outputting its contents via a function that does not properly finalize the CMS_ContentInfo structure will give unpredictable results.

+ +

Several functions including SMIME_write_CMS(), i2d_CMS_bio_stream(), PEM_write_bio_CMS_stream() finalize the structure. Alternatively finalization can be performed by obtaining the streaming ASN1 BIO directly using BIO_new_CMS().

+ +

The recipients specified in certs use a CMS KeyTransRecipientInfo info structure. KEKRecipientInfo is also supported using the flag CMS_PARTIAL and CMS_add0_recipient_key().

+ +

The parameter certs may be NULL if CMS_PARTIAL is set and recipients added later using CMS_add1_recipient_cert() or CMS_add0_recipient_key().

+ +

RETURN VALUES

+ +

CMS_encrypt() returns either a CMS_ContentInfo structure or NULL if an error occurred. The error can be obtained from ERR_get_error(3).

+ +

SEE ALSO

+ +

ERR_get_error(3), CMS_decrypt(3)

+ +

HISTORY

+ +

The CMS_STREAM flag was first supported in OpenSSL 1.0.0.

+ +

COPYRIGHT

+ +

Copyright 2008-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CMS_final.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CMS_final.html new file mode 100644 index 00000000..42ed3701 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CMS_final.html @@ -0,0 +1,61 @@ + + + + +CMS_final + + + + + + + + + + +

NAME

+ +

CMS_final - finalise a CMS_ContentInfo structure

+ +

SYNOPSIS

+ +
#include <openssl/cms.h>
+
+int CMS_final(CMS_ContentInfo *cms, BIO *data, BIO *dcont, unsigned int flags);
+ +

DESCRIPTION

+ +

CMS_final() finalises the structure cms. Its purpose is to perform any operations necessary on cms (digest computation for example) and set the appropriate fields. The parameter data contains the content to be processed. The dcont parameter contains a BIO to write content to after processing: this is only used with detached data and will usually be set to NULL.

+ +

NOTES

+ +

This function will normally be called when the CMS_PARTIAL flag is used. It should only be used when streaming is not performed because the streaming I/O functions perform finalisation operations internally.

+ +

RETURN VALUES

+ +

CMS_final() returns 1 for success or 0 for failure.

+ +

SEE ALSO

+ +

ERR_get_error(3), CMS_sign(3), CMS_encrypt(3)

+ +

COPYRIGHT

+ +

Copyright 2008-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CMS_get0_RecipientInfos.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CMS_get0_RecipientInfos.html new file mode 100644 index 00000000..717dcf6e --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CMS_get0_RecipientInfos.html @@ -0,0 +1,110 @@ + + + + +CMS_get0_RecipientInfos + + + + + + + + + + +

NAME

+ +

CMS_get0_RecipientInfos, CMS_RecipientInfo_type, CMS_RecipientInfo_ktri_get0_signer_id, CMS_RecipientInfo_ktri_cert_cmp, CMS_RecipientInfo_set0_pkey, CMS_RecipientInfo_kekri_get0_id, CMS_RecipientInfo_kekri_id_cmp, CMS_RecipientInfo_set0_key, CMS_RecipientInfo_decrypt, CMS_RecipientInfo_encrypt - CMS envelopedData RecipientInfo routines

+ +

SYNOPSIS

+ +
#include <openssl/cms.h>
+
+STACK_OF(CMS_RecipientInfo) *CMS_get0_RecipientInfos(CMS_ContentInfo *cms);
+int CMS_RecipientInfo_type(CMS_RecipientInfo *ri);
+
+int CMS_RecipientInfo_ktri_get0_signer_id(CMS_RecipientInfo *ri,
+                                          ASN1_OCTET_STRING **keyid,
+                                          X509_NAME **issuer,
+                                          ASN1_INTEGER **sno);
+int CMS_RecipientInfo_ktri_cert_cmp(CMS_RecipientInfo *ri, X509 *cert);
+int CMS_RecipientInfo_set0_pkey(CMS_RecipientInfo *ri, EVP_PKEY *pkey);
+
+int CMS_RecipientInfo_kekri_get0_id(CMS_RecipientInfo *ri, X509_ALGOR **palg,
+                                    ASN1_OCTET_STRING **pid,
+                                    ASN1_GENERALIZEDTIME **pdate,
+                                    ASN1_OBJECT **potherid,
+                                    ASN1_TYPE **pothertype);
+int CMS_RecipientInfo_kekri_id_cmp(CMS_RecipientInfo *ri,
+                                   const unsigned char *id, size_t idlen);
+int CMS_RecipientInfo_set0_key(CMS_RecipientInfo *ri,
+                               unsigned char *key, size_t keylen);
+
+int CMS_RecipientInfo_decrypt(CMS_ContentInfo *cms, CMS_RecipientInfo *ri);
+int CMS_RecipientInfo_encrypt(CMS_ContentInfo *cms, CMS_RecipientInfo *ri);
+ +

DESCRIPTION

+ +

The function CMS_get0_RecipientInfos() returns all the CMS_RecipientInfo structures associated with a CMS EnvelopedData structure.

+ +

CMS_RecipientInfo_type() returns the type of CMS_RecipientInfo structure ri. It will currently return CMS_RECIPINFO_TRANS, CMS_RECIPINFO_AGREE, CMS_RECIPINFO_KEK, CMS_RECIPINFO_PASS, or CMS_RECIPINFO_OTHER.

+ +

CMS_RecipientInfo_ktri_get0_signer_id() retrieves the certificate recipient identifier associated with a specific CMS_RecipientInfo structure ri, which must be of type CMS_RECIPINFO_TRANS. Either the keyidentifier will be set in keyid or both issuer name and serial number in issuer and sno.

+ +

CMS_RecipientInfo_ktri_cert_cmp() compares the certificate cert against the CMS_RecipientInfo structure ri, which must be of type CMS_RECIPINFO_TRANS. It returns zero if the comparison is successful and non zero if not.

+ +

CMS_RecipientInfo_set0_pkey() associates the private key pkey with the CMS_RecipientInfo structure ri, which must be of type CMS_RECIPINFO_TRANS.

+ +

CMS_RecipientInfo_kekri_get0_id() retrieves the key information from the CMS_RecipientInfo structure ri which must be of type CMS_RECIPINFO_KEK. Any of the remaining parameters can be NULL if the application is not interested in the value of a field. Where a field is optional and absent NULL will be written to the corresponding parameter. The keyEncryptionAlgorithm field is written to palg, the keyIdentifier field is written to pid, the date field if present is written to pdate, if the other field is present the components keyAttrId and keyAttr are written to parameters potherid and pothertype.

+ +

CMS_RecipientInfo_kekri_id_cmp() compares the ID in the id and idlen parameters against the keyIdentifier CMS_RecipientInfo structure ri, which must be of type CMS_RECIPINFO_KEK. It returns zero if the comparison is successful and non zero if not.

+ +

CMS_RecipientInfo_set0_key() associates the symmetric key key of length keylen with the CMS_RecipientInfo structure ri, which must be of type CMS_RECIPINFO_KEK.

+ +

CMS_RecipientInfo_decrypt() attempts to decrypt CMS_RecipientInfo structure ri in structure cms. A key must have been associated with the structure first.

+ +

CMS_RecipientInfo_encrypt() attempts to encrypt CMS_RecipientInfo structure ri in structure cms. A key must have been associated with the structure first and the content encryption key must be available: for example by a previous call to CMS_RecipientInfo_decrypt().

+ +

NOTES

+ +

The main purpose of these functions is to enable an application to lookup recipient keys using any appropriate technique when the simpler method of CMS_decrypt() is not appropriate.

+ +

In typical usage and application will retrieve all CMS_RecipientInfo structures using CMS_get0_RecipientInfos() and check the type of each using CMS_RecipientInfo_type(). Depending on the type the CMS_RecipientInfo structure can be ignored or its key identifier data retrieved using an appropriate function. Then if the corresponding secret or private key can be obtained by any appropriate means it can then associated with the structure and CMS_RecipientInfo_decrypt() called. If successful CMS_decrypt() can be called with a NULL key to decrypt the enveloped content.

+ +

The CMS_RecipientInfo_encrypt() can be used to add a new recipient to an existing enveloped data structure. Typically an application will first decrypt an appropriate CMS_RecipientInfo structure to make the content encrypt key available, it will then add a new recipient using a function such as CMS_add1_recipient_cert() and finally encrypt the content encryption key using CMS_RecipientInfo_encrypt().

+ +

RETURN VALUES

+ +

CMS_get0_RecipientInfos() returns all CMS_RecipientInfo structures, or NULL if an error occurs.

+ +

CMS_RecipientInfo_ktri_get0_signer_id(), CMS_RecipientInfo_set0_pkey(), CMS_RecipientInfo_kekri_get0_id(), CMS_RecipientInfo_set0_key() and CMS_RecipientInfo_decrypt() return 1 for success or 0 if an error occurs. CMS_RecipientInfo_encrypt() return 1 for success or 0 if an error occurs.

+ +

CMS_RecipientInfo_ktri_cert_cmp() and CMS_RecipientInfo_kekri_cmp() return 0 for a successful comparison and non zero otherwise.

+ +

Any error can be obtained from ERR_get_error(3).

+ +

SEE ALSO

+ +

ERR_get_error(3), CMS_decrypt(3)

+ +

COPYRIGHT

+ +

Copyright 2008-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CMS_get0_SignerInfos.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CMS_get0_SignerInfos.html new file mode 100644 index 00000000..4b47af2b --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CMS_get0_SignerInfos.html @@ -0,0 +1,89 @@ + + + + +CMS_get0_SignerInfos + + + + + + + + + + +

NAME

+ +

CMS_SignerInfo_set1_signer_cert, CMS_get0_SignerInfos, CMS_SignerInfo_get0_signer_id, CMS_SignerInfo_get0_signature, CMS_SignerInfo_cert_cmp - CMS signedData signer functions

+ +

SYNOPSIS

+ +
#include <openssl/cms.h>
+
+STACK_OF(CMS_SignerInfo) *CMS_get0_SignerInfos(CMS_ContentInfo *cms);
+
+int CMS_SignerInfo_get0_signer_id(CMS_SignerInfo *si, ASN1_OCTET_STRING **keyid,
+                                  X509_NAME **issuer, ASN1_INTEGER **sno);
+ASN1_OCTET_STRING *CMS_SignerInfo_get0_signature(CMS_SignerInfo *si);
+int CMS_SignerInfo_cert_cmp(CMS_SignerInfo *si, X509 *cert);
+void CMS_SignerInfo_set1_signer_cert(CMS_SignerInfo *si, X509 *signer);
+ +

DESCRIPTION

+ +

The function CMS_get0_SignerInfos() returns all the CMS_SignerInfo structures associated with a CMS signedData structure.

+ +

CMS_SignerInfo_get0_signer_id() retrieves the certificate signer identifier associated with a specific CMS_SignerInfo structure si. Either the keyidentifier will be set in keyid or both issuer name and serial number in issuer and sno.

+ +

CMS_SignerInfo_get0_signature() retrieves the signature associated with si in a pointer to an ASN1_OCTET_STRING structure. This pointer returned corresponds to the internal signature value if si so it may be read or modified.

+ +

CMS_SignerInfo_cert_cmp() compares the certificate cert against the signer identifier si. It returns zero if the comparison is successful and non zero if not.

+ +

CMS_SignerInfo_set1_signer_cert() sets the signers certificate of si to signer.

+ +

NOTES

+ +

The main purpose of these functions is to enable an application to lookup signers certificates using any appropriate technique when the simpler method of CMS_verify() is not appropriate.

+ +

In typical usage and application will retrieve all CMS_SignerInfo structures using CMS_get0_SignerInfo() and retrieve the identifier information using CMS. It will then obtain the signer certificate by some unspecified means (or return and error if it cannot be found) and set it using CMS_SignerInfo_set1_signer_cert().

+ +

Once all signer certificates have been set CMS_verify() can be used.

+ +

Although CMS_get0_SignerInfos() can return NULL if an error occurs or if there are no signers this is not a problem in practice because the only error which can occur is if the cms structure is not of type signedData due to application error.

+ +

RETURN VALUES

+ +

CMS_get0_SignerInfos() returns all CMS_SignerInfo structures, or NULL there are no signers or an error occurs.

+ +

CMS_SignerInfo_get0_signer_id() returns 1 for success and 0 for failure.

+ +

CMS_SignerInfo_cert_cmp() returns 0 for a successful comparison and non zero otherwise.

+ +

CMS_SignerInfo_set1_signer_cert() does not return a value.

+ +

Any error can be obtained from ERR_get_error(3)

+ +

SEE ALSO

+ +

ERR_get_error(3), CMS_verify(3)

+ +

COPYRIGHT

+ +

Copyright 2008-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CMS_get0_type.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CMS_get0_type.html new file mode 100644 index 00000000..947c3fd9 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CMS_get0_type.html @@ -0,0 +1,87 @@ + + + + +CMS_get0_type + + + + + + + + + + +

NAME

+ +

CMS_get0_type, CMS_set1_eContentType, CMS_get0_eContentType, CMS_get0_content - get and set CMS content types and content

+ +

SYNOPSIS

+ +
#include <openssl/cms.h>
+
+const ASN1_OBJECT *CMS_get0_type(const CMS_ContentInfo *cms);
+int CMS_set1_eContentType(CMS_ContentInfo *cms, const ASN1_OBJECT *oid);
+const ASN1_OBJECT *CMS_get0_eContentType(CMS_ContentInfo *cms);
+ASN1_OCTET_STRING **CMS_get0_content(CMS_ContentInfo *cms);
+ +

DESCRIPTION

+ +

CMS_get0_type() returns the content type of a CMS_ContentInfo structure as an ASN1_OBJECT pointer. An application can then decide how to process the CMS_ContentInfo structure based on this value.

+ +

CMS_set1_eContentType() sets the embedded content type of a CMS_ContentInfo structure. It should be called with CMS functions (such as CMS_sign, CMS_encrypt) with the CMS_PARTIAL flag and before the structure is finalised, otherwise the results are undefined.

+ +

ASN1_OBJECT *CMS_get0_eContentType() returns a pointer to the embedded content type.

+ +

CMS_get0_content() returns a pointer to the ASN1_OCTET_STRING pointer containing the embedded content.

+ +

NOTES

+ +

As the 0 implies CMS_get0_type(), CMS_get0_eContentType() and CMS_get0_content() return internal pointers which should not be freed up. CMS_set1_eContentType() copies the supplied OID and it should be freed up after use.

+ +

The ASN1_OBJECT values returned can be converted to an integer NID value using OBJ_obj2nid(). For the currently supported content types the following values are returned:

+ +
NID_pkcs7_data
+NID_pkcs7_signed
+NID_pkcs7_digest
+NID_id_smime_ct_compressedData:
+NID_pkcs7_encrypted
+NID_pkcs7_enveloped
+ +

The return value of CMS_get0_content() is a pointer to the ASN1_OCTET_STRING content pointer. That means that for example:

+ +
ASN1_OCTET_STRING **pconf = CMS_get0_content(cms);
+ +

*pconf could be NULL if there is no embedded content. Applications can access, modify or create the embedded content in a CMS_ContentInfo structure using this function. Applications usually will not need to modify the embedded content as it is normally set by higher level functions.

+ +

RETURN VALUES

+ +

CMS_get0_type() and CMS_get0_eContentType() return an ASN1_OBJECT structure.

+ +

CMS_set1_eContentType() returns 1 for success or 0 if an error occurred. The error can be obtained from ERR_get_error(3).

+ +

SEE ALSO

+ +

ERR_get_error(3)

+ +

COPYRIGHT

+ +

Copyright 2008-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CMS_get1_ReceiptRequest.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CMS_get1_ReceiptRequest.html new file mode 100644 index 00000000..da08c1a4 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CMS_get1_ReceiptRequest.html @@ -0,0 +1,82 @@ + + + + +CMS_get1_ReceiptRequest + + + + + + + + + + +

NAME

+ +

CMS_ReceiptRequest_create0, CMS_add1_ReceiptRequest, CMS_get1_ReceiptRequest, CMS_ReceiptRequest_get0_values - CMS signed receipt request functions

+ +

SYNOPSIS

+ +
#include <openssl/cms.h>
+
+CMS_ReceiptRequest *CMS_ReceiptRequest_create0(unsigned char *id, int idlen,
+                                               int allorfirst,
+                                               STACK_OF(GENERAL_NAMES) *receiptList,
+                                               STACK_OF(GENERAL_NAMES) *receiptsTo);
+int CMS_add1_ReceiptRequest(CMS_SignerInfo *si, CMS_ReceiptRequest *rr);
+int CMS_get1_ReceiptRequest(CMS_SignerInfo *si, CMS_ReceiptRequest **prr);
+void CMS_ReceiptRequest_get0_values(CMS_ReceiptRequest *rr, ASN1_STRING **pcid,
+                                    int *pallorfirst,
+                                    STACK_OF(GENERAL_NAMES) **plist,
+                                    STACK_OF(GENERAL_NAMES) **prto);
+ +

DESCRIPTION

+ +

CMS_ReceiptRequest_create0() creates a signed receipt request structure. The signedContentIdentifier field is set using id and idlen, or it is set to 32 bytes of pseudo random data if id is NULL. If receiptList is NULL the allOrFirstTier option in receiptsFrom is used and set to the value of the allorfirst parameter. If receiptList is not NULL the receiptList option in receiptsFrom is used. The receiptsTo parameter specifies the receiptsTo field value.

+ +

The CMS_add1_ReceiptRequest() function adds a signed receipt request rr to SignerInfo structure si.

+ +

int CMS_get1_ReceiptRequest() looks for a signed receipt request in si, if any is found it is decoded and written to prr.

+ +

CMS_ReceiptRequest_get0_values() retrieves the values of a receipt request. The signedContentIdentifier is copied to pcid. If the allOrFirstTier option of receiptsFrom is used its value is copied to pallorfirst otherwise the receiptList field is copied to plist. The receiptsTo parameter is copied to prto.

+ +

NOTES

+ +

For more details of the meaning of the fields see RFC2634.

+ +

The contents of a signed receipt should only be considered meaningful if the corresponding CMS_ContentInfo structure can be successfully verified using CMS_verify().

+ +

RETURN VALUES

+ +

CMS_ReceiptRequest_create0() returns a signed receipt request structure or NULL if an error occurred.

+ +

CMS_add1_ReceiptRequest() returns 1 for success or 0 if an error occurred.

+ +

CMS_get1_ReceiptRequest() returns 1 is a signed receipt request is found and decoded. It returns 0 if a signed receipt request is not present and -1 if it is present but malformed.

+ +

SEE ALSO

+ +

ERR_get_error(3), CMS_sign(3), CMS_sign_receipt(3), CMS_verify(3) CMS_verify_receipt(3)

+ +

COPYRIGHT

+ +

Copyright 2008-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CMS_sign.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CMS_sign.html new file mode 100644 index 00000000..66ecd5f3 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CMS_sign.html @@ -0,0 +1,104 @@ + + + + +CMS_sign + + + + + + + + + + +

NAME

+ +

CMS_sign - create a CMS SignedData structure

+ +

SYNOPSIS

+ +
#include <openssl/cms.h>
+
+CMS_ContentInfo *CMS_sign(X509 *signcert, EVP_PKEY *pkey, STACK_OF(X509) *certs,
+                          BIO *data, unsigned int flags);
+ +

DESCRIPTION

+ +

CMS_sign() creates and returns a CMS SignedData structure. signcert is the certificate to sign with, pkey is the corresponding private key. certs is an optional additional set of certificates to include in the CMS structure (for example any intermediate CAs in the chain). Any or all of these parameters can be NULL, see NOTES below.

+ +

The data to be signed is read from BIO data.

+ +

flags is an optional set of flags.

+ +

NOTES

+ +

Any of the following flags (ored together) can be passed in the flags parameter.

+ +

Many S/MIME clients expect the signed content to include valid MIME headers. If the CMS_TEXT flag is set MIME headers for type text/plain are prepended to the data.

+ +

If CMS_NOCERTS is set the signer's certificate will not be included in the CMS_ContentInfo structure, the signer's certificate must still be supplied in the signcert parameter though. This can reduce the size of the signature if the signers certificate can be obtained by other means: for example a previously signed message.

+ +

The data being signed is included in the CMS_ContentInfo structure, unless CMS_DETACHED is set in which case it is omitted. This is used for CMS_ContentInfo detached signatures which are used in S/MIME plaintext signed messages for example.

+ +

Normally the supplied content is translated into MIME canonical format (as required by the S/MIME specifications) if CMS_BINARY is set no translation occurs. This option should be used if the supplied data is in binary format otherwise the translation will corrupt it.

+ +

The SignedData structure includes several CMS signedAttributes including the signing time, the CMS content type and the supported list of ciphers in an SMIMECapabilities attribute. If CMS_NOATTR is set then no signedAttributes will be used. If CMS_NOSMIMECAP is set then just the SMIMECapabilities are omitted.

+ +

If present the SMIMECapabilities attribute indicates support for the following algorithms in preference order: 256 bit AES, Gost R3411-94, Gost 28147-89, 192 bit AES, 128 bit AES, triple DES, 128 bit RC2, 64 bit RC2, DES and 40 bit RC2. If any of these algorithms is not available then it will not be included: for example the GOST algorithms will not be included if the GOST ENGINE is not loaded.

+ +

OpenSSL will by default identify signing certificates using issuer name and serial number. If CMS_USE_KEYID is set it will use the subject key identifier value instead. An error occurs if the signing certificate does not have a subject key identifier extension.

+ +

If the flags CMS_STREAM is set then the returned CMS_ContentInfo structure is just initialized ready to perform the signing operation. The signing is however not performed and the data to be signed is not read from the data parameter. Signing is deferred until after the data has been written. In this way data can be signed in a single pass.

+ +

If the CMS_PARTIAL flag is set a partial CMS_ContentInfo structure is output to which additional signers and capabilities can be added before finalization.

+ +

If the flag CMS_STREAM is set the returned CMS_ContentInfo structure is not complete and outputting its contents via a function that does not properly finalize the CMS_ContentInfo structure will give unpredictable results.

+ +

Several functions including SMIME_write_CMS(), i2d_CMS_bio_stream(), PEM_write_bio_CMS_stream() finalize the structure. Alternatively finalization can be performed by obtaining the streaming ASN1 BIO directly using BIO_new_CMS().

+ +

If a signer is specified it will use the default digest for the signing algorithm. This is SHA1 for both RSA and DSA keys.

+ +

If signcert and pkey are NULL then a certificates only CMS structure is output.

+ +

The function CMS_sign() is a basic CMS signing function whose output will be suitable for many purposes. For finer control of the output format the certs, signcert and pkey parameters can all be NULL and the CMS_PARTIAL flag set. Then one or more signers can be added using the function CMS_sign_add1_signer(), non default digests can be used and custom attributes added. CMS_final() must then be called to finalize the structure if streaming is not enabled.

+ +

BUGS

+ +

Some attributes such as counter signatures are not supported.

+ +

RETURN VALUES

+ +

CMS_sign() returns either a valid CMS_ContentInfo structure or NULL if an error occurred. The error can be obtained from ERR_get_error(3).

+ +

SEE ALSO

+ +

ERR_get_error(3), CMS_verify(3)

+ +

HISTORY

+ +

The CMS_STREAM flag is only supported for detached data in OpenSSL 0.9.8, it is supported for embedded data in OpenSSL 1.0.0 and later.

+ +

COPYRIGHT

+ +

Copyright 2008-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CMS_sign_receipt.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CMS_sign_receipt.html new file mode 100644 index 00000000..e77d654c --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CMS_sign_receipt.html @@ -0,0 +1,65 @@ + + + + +CMS_sign_receipt + + + + + + + + + + +

NAME

+ +

CMS_sign_receipt - create a CMS signed receipt

+ +

SYNOPSIS

+ +
#include <openssl/cms.h>
+
+CMS_ContentInfo *CMS_sign_receipt(CMS_SignerInfo *si, X509 *signcert,
+                                  EVP_PKEY *pkey, STACK_OF(X509) *certs,
+                                  unsigned int flags);
+ +

DESCRIPTION

+ +

CMS_sign_receipt() creates and returns a CMS signed receipt structure. si is the CMS_SignerInfo structure containing the signed receipt request. signcert is the certificate to sign with, pkey is the corresponding private key. certs is an optional additional set of certificates to include in the CMS structure (for example any intermediate CAs in the chain).

+ +

flags is an optional set of flags.

+ +

NOTES

+ +

This functions behaves in a similar way to CMS_sign() except the flag values CMS_DETACHED, CMS_BINARY, CMS_NOATTR, CMS_TEXT and CMS_STREAM are not supported since they do not make sense in the context of signed receipts.

+ +

RETURN VALUES

+ +

CMS_sign_receipt() returns either a valid CMS_ContentInfo structure or NULL if an error occurred. The error can be obtained from ERR_get_error(3).

+ +

SEE ALSO

+ +

ERR_get_error(3), CMS_verify_receipt(3), CMS_sign(3)

+ +

COPYRIGHT

+ +

Copyright 2008-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CMS_uncompress.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CMS_uncompress.html new file mode 100644 index 00000000..ed1f08ea --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CMS_uncompress.html @@ -0,0 +1,74 @@ + + + + +CMS_uncompress + + + + + + + + + + +

NAME

+ +

CMS_uncompress - uncompress a CMS CompressedData structure

+ +

SYNOPSIS

+ +
#include <openssl/cms.h>
+
+int CMS_uncompress(CMS_ContentInfo *cms, BIO *dcont, BIO *out, unsigned int flags);
+ +

DESCRIPTION

+ +

CMS_uncompress() extracts and uncompresses the content from a CMS CompressedData structure cms. data is a BIO to write the content to and flags is an optional set of flags.

+ +

The dcont parameter is used in the rare case where the compressed content is detached. It will normally be set to NULL.

+ +

NOTES

+ +

The only currently supported compression algorithm is zlib: if the structure indicates the use of any other algorithm an error is returned.

+ +

If zlib support is not compiled into OpenSSL then CMS_uncompress() will always return an error.

+ +

The following flags can be passed in the flags parameter.

+ +

If the CMS_TEXT flag is set MIME headers for type text/plain are deleted from the content. If the content is not of type text/plain then an error is returned.

+ +

RETURN VALUES

+ +

CMS_uncompress() returns either 1 for success or 0 for failure. The error can be obtained from ERR_get_error(3)

+ +

BUGS

+ +

The lack of single pass processing and the need to hold all data in memory as mentioned in CMS_verify() also applies to CMS_decompress().

+ +

SEE ALSO

+ +

ERR_get_error(3), CMS_compress(3)

+ +

COPYRIGHT

+ +

Copyright 2008-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CMS_verify.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CMS_verify.html new file mode 100644 index 00000000..8f37373c --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CMS_verify.html @@ -0,0 +1,114 @@ + + + + +CMS_verify + + + + + + + + + + +

NAME

+ +

CMS_verify, CMS_get0_signers - verify a CMS SignedData structure

+ +

SYNOPSIS

+ +
#include <openssl/cms.h>
+
+int CMS_verify(CMS_ContentInfo *cms, STACK_OF(X509) *certs, X509_STORE *store,
+               BIO *indata, BIO *out, unsigned int flags);
+
+STACK_OF(X509) *CMS_get0_signers(CMS_ContentInfo *cms);
+ +

DESCRIPTION

+ +

CMS_verify() verifies a CMS SignedData structure. cms is the CMS_ContentInfo structure to verify. certs is a set of certificates in which to search for the signing certificate(s). store is a trusted certificate store used for chain verification. indata is the detached content if the content is not present in cms. The content is written to out if it is not NULL.

+ +

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 cms, it must be called after a successful CMS_verify() operation.

+ +

VERIFY PROCESS

+ +

Normally the verify process proceeds as follows.

+ +

Initially some sanity checks are performed on cms. The type of cms must be SignedData. There must be at least one signature on the data and if the content is detached indata cannot be NULL.

+ +

An attempt is made to locate all the signing certificate(s), first looking in the certs parameter (if it is not NULL) and then looking in any certificates contained in the cms structure itself. If any signing certificate cannot be located the operation fails.

+ +

Each signing certificate is chain verified using the smimesign purpose and the supplied trusted certificate store. Any internal certificates in the message are used as untrusted CAs. If CRL checking is enabled in store any internal CRLs are used in addition to attempting to look them up in store. If any chain verify fails an error code is returned.

+ +

Finally the signed content is read (and written to out if it is not NULL) and the signature's checked.

+ +

If all signature's verify correctly then the function is successful.

+ +

Any of the following flags (ored together) can be passed in the flags parameter to change the default verify behaviour.

+ +

If CMS_NOINTERN is set the certificates in the message itself are not searched when locating the signing certificate(s). This means that all the signing certificates must be in the certs parameter.

+ +

If CMS_NOCRL is set and CRL checking is enabled in store then any CRLs in the message itself are ignored.

+ +

If the CMS_TEXT flag is set MIME headers for type text/plain are deleted from the content. If the content is not of type text/plain then an error is returned.

+ +

If CMS_NO_SIGNER_CERT_VERIFY is set the signing certificates are not verified.

+ +

If CMS_NO_ATTR_VERIFY is set the signed attributes signature is not verified.

+ +

If CMS_NO_CONTENT_VERIFY is set then the content digest is not checked.

+ +

NOTES

+ +

One application of CMS_NOINTERN is to only accept messages signed by a small number of certificates. The acceptable certificates would be passed in the certs parameter. In this case if the signer is not one of the certificates supplied in certs then the verify will fail because the signer cannot be found.

+ +

In some cases the standard techniques for looking up and validating certificates are not appropriate: for example an application may wish to lookup certificates in a database or perform customised verification. This can be achieved by setting and verifying the signers certificates manually using the signed data utility functions.

+ +

Care should be taken when modifying the default verify behaviour, for example setting CMS_NO_CONTENT_VERIFY will totally disable all content verification and any modified content will be considered valid. This combination is however useful if one merely wishes to write the content to 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 signer it cannot be trusted without additional evidence (such as a trusted timestamp).

+ +

RETURN VALUES

+ +

CMS_verify() returns 1 for a successful verification and zero if an error occurred.

+ +

CMS_get0_signers() returns all signers or NULL if an error occurred.

+ +

The error can be obtained from ERR_get_error(3)

+ +

BUGS

+ +

The trusted certificate store is not searched for the signing certificate, this is primarily due to the inadequacies of the current X509_STORE functionality.

+ +

The lack of single pass processing means that the signed content must all be held in memory if it is not detached.

+ +

SEE ALSO

+ +

ERR_get_error(3), CMS_sign(3)

+ +

COPYRIGHT

+ +

Copyright 2008-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CMS_verify_receipt.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CMS_verify_receipt.html new file mode 100644 index 00000000..21b0e8df --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CMS_verify_receipt.html @@ -0,0 +1,67 @@ + + + + +CMS_verify_receipt + + + + + + + + + + +

NAME

+ +

CMS_verify_receipt - verify a CMS signed receipt

+ +

SYNOPSIS

+ +
#include <openssl/cms.h>
+
+int CMS_verify_receipt(CMS_ContentInfo *rcms, CMS_ContentInfo *ocms,
+                       STACK_OF(X509) *certs, X509_STORE *store,
+                       unsigned int flags);
+ +

DESCRIPTION

+ +

CMS_verify_receipt() verifies a CMS signed receipt. rcms is the signed receipt to verify. ocms is the original SignedData structure containing the receipt request. certs is a set of certificates in which to search for the signing certificate. store is a trusted certificate store (used for chain verification).

+ +

flags is an optional set of flags, which can be used to modify the verify operation.

+ +

NOTES

+ +

This functions behaves in a similar way to CMS_verify() except the flag values CMS_DETACHED, CMS_BINARY, CMS_TEXT and CMS_STREAM are not supported since they do not make sense in the context of signed receipts.

+ +

RETURN VALUES

+ +

CMS_verify_receipt() returns 1 for a successful verification and zero if an error occurred.

+ +

The error can be obtained from ERR_get_error(3)

+ +

SEE ALSO

+ +

ERR_get_error(3), CMS_sign_receipt(3), CMS_verify(3),

+ +

COPYRIGHT

+ +

Copyright 2008-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CONF_modules_free.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CONF_modules_free.html new file mode 100644 index 00000000..10a53ee2 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CONF_modules_free.html @@ -0,0 +1,72 @@ + + + + +CONF_modules_free + + + + + + + + + + +

NAME

+ +

CONF_modules_free, CONF_modules_finish, CONF_modules_unload - OpenSSL configuration cleanup functions

+ +

SYNOPSIS

+ +
#include <openssl/conf.h>
+
+void CONF_modules_finish(void);
+void CONF_modules_unload(int all);
+ +

Deprecated:

+ +
#if OPENSSL_API_COMPAT < 0x10100000L
+void CONF_modules_free(void)
+#endif
+ +

DESCRIPTION

+ +

CONF_modules_free() closes down and frees up all memory allocated by all configuration modules. Normally, in versions of OpenSSL prior to 1.1.0, applications called CONF_modules_free() at exit to tidy up any configuration performed.

+ +

CONF_modules_finish() calls each configuration modules finish handler to free up any configuration that module may have performed.

+ +

CONF_modules_unload() finishes and unloads configuration modules. If all is set to 0 only modules loaded from DSOs will be unloads. If all is 1 all modules, including builtin modules will be unloaded.

+ +

RETURN VALUES

+ +

None of the functions return a value.

+ +

SEE ALSO

+ +

config(5), OPENSSL_config(3), CONF_modules_load_file(3)

+ +

HISTORY

+ +

CONF_modules_free() was deprecated in OpenSSL 1.1.0; do not use it. For more information see OPENSSL_init_crypto(3).

+ +

COPYRIGHT

+ +

Copyright 2004-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CONF_modules_load_file.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CONF_modules_load_file.html new file mode 100644 index 00000000..82d5c546 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CONF_modules_load_file.html @@ -0,0 +1,137 @@ + + + + +CONF_modules_load_file + + + + + + + + + + +

NAME

+ +

CONF_modules_load_file, CONF_modules_load - OpenSSL configuration functions

+ +

SYNOPSIS

+ +
#include <openssl/conf.h>
+
+int CONF_modules_load_file(const char *filename, const char *appname,
+                           unsigned long flags);
+int CONF_modules_load(const CONF *cnf, const char *appname,
+                      unsigned long flags);
+ +

DESCRIPTION

+ +

The function CONF_modules_load_file() configures OpenSSL using file filename and application name appname. If filename is NULL the standard OpenSSL configuration file is used. If appname is NULL the standard OpenSSL application name openssl_conf is used. The behaviour can be customized using flags.

+ +

CONF_modules_load() is identical to CONF_modules_load_file() except it reads configuration information from cnf.

+ +

NOTES

+ +

The following flags are currently recognized:

+ +

If CONF_MFLAGS_IGNORE_ERRORS is set errors returned by individual configuration modules are ignored. If not set the first module error is considered fatal and no further modules are loaded.

+ +

Normally any modules errors will add error information to the error queue. If CONF_MFLAGS_SILENT is set no error information is added.

+ +

If CONF_MFLAGS_IGNORE_RETURN_CODES is set the function unconditionally returns success. This is used by default in OPENSSL_init_crypto(3) to ignore any errors in the default system-wide configuration file, as having all OpenSSL applications fail to start when there are potentially minor issues in the file is too risky. Applications calling CONF_modules_load_file explicitly should not generally set this flag.

+ +

If CONF_MFLAGS_NO_DSO is set configuration module loading from DSOs is disabled.

+ +

CONF_MFLAGS_IGNORE_MISSING_FILE if set will make CONF_load_modules_file() ignore missing configuration files. Normally a missing configuration file return an error.

+ +

CONF_MFLAGS_DEFAULT_SECTION if set and appname is not NULL will use the default section pointed to by openssl_conf if appname does not exist.

+ +

By using CONF_modules_load_file() with appropriate flags an application can customise application configuration to best suit its needs. In some cases the use of a configuration file is optional and its absence is not an error: in this case CONF_MFLAGS_IGNORE_MISSING_FILE would be set.

+ +

Errors during configuration may also be handled differently by different applications. For example in some cases an error may simply print out a warning message and the application continue. In other cases an application might consider a configuration file error as fatal and exit immediately.

+ +

Applications can use the CONF_modules_load() function if they wish to load a configuration file themselves and have finer control over how errors are treated.

+ +

RETURN VALUES

+ +

These functions return 1 for success and a zero or negative value for failure. If module errors are not ignored the return code will reflect the return value of the failing module (this will always be zero or negative).

+ +

EXAMPLES

+ +

Load a configuration file and print out any errors and exit (missing file considered fatal):

+ +
if (CONF_modules_load_file(NULL, NULL, 0) <= 0) {
+    fprintf(stderr, "FATAL: error loading configuration file\n");
+    ERR_print_errors_fp(stderr);
+    exit(1);
+}
+ +

Load default configuration file using the section indicated by "myapp", tolerate missing files, but exit on other errors:

+ +
if (CONF_modules_load_file(NULL, "myapp",
+                           CONF_MFLAGS_IGNORE_MISSING_FILE) <= 0) {
+    fprintf(stderr, "FATAL: error loading configuration file\n");
+    ERR_print_errors_fp(stderr);
+    exit(1);
+}
+ +

Load custom configuration file and section, only print warnings on error, missing configuration file ignored:

+ +
if (CONF_modules_load_file("/something/app.cnf", "myapp",
+                           CONF_MFLAGS_IGNORE_MISSING_FILE) <= 0) {
+    fprintf(stderr, "WARNING: error loading configuration file\n");
+    ERR_print_errors_fp(stderr);
+}
+ +

Load and parse configuration file manually, custom error handling:

+ +
FILE *fp;
+CONF *cnf = NULL;
+long eline;
+
+fp = fopen("/somepath/app.cnf", "r");
+if (fp == NULL) {
+    fprintf(stderr, "Error opening configuration file\n");
+    /* Other missing configuration file behaviour */
+} else {
+    cnf = NCONF_new(NULL);
+    if (NCONF_load_fp(cnf, fp, &eline) == 0) {
+        fprintf(stderr, "Error on line %ld of configuration file\n", eline);
+        ERR_print_errors_fp(stderr);
+        /* Other malformed configuration file behaviour */
+    } else if (CONF_modules_load(cnf, "appname", 0) <= 0) {
+        fprintf(stderr, "Error configuring application\n");
+        ERR_print_errors_fp(stderr);
+        /* Other configuration error behaviour */
+    }
+    fclose(fp);
+    NCONF_free(cnf);
+}
+ +

SEE ALSO

+ +

config(5), OPENSSL_config(3)

+ +

COPYRIGHT

+ +

Copyright 2004-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CRYPTO_THREAD_run_once.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CRYPTO_THREAD_run_once.html new file mode 100644 index 00000000..8a519eaa --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CRYPTO_THREAD_run_once.html @@ -0,0 +1,159 @@ + + + + +CRYPTO_THREAD_run_once + + + + + + + + + + +

NAME

+ +

CRYPTO_THREAD_run_once, CRYPTO_THREAD_lock_new, CRYPTO_THREAD_read_lock, CRYPTO_THREAD_write_lock, CRYPTO_THREAD_unlock, CRYPTO_THREAD_lock_free, CRYPTO_atomic_add - OpenSSL thread support

+ +

SYNOPSIS

+ +
#include <openssl/crypto.h>
+
+CRYPTO_ONCE CRYPTO_ONCE_STATIC_INIT;
+int CRYPTO_THREAD_run_once(CRYPTO_ONCE *once, void (*init)(void));
+
+CRYPTO_RWLOCK *CRYPTO_THREAD_lock_new(void);
+int CRYPTO_THREAD_read_lock(CRYPTO_RWLOCK *lock);
+int CRYPTO_THREAD_write_lock(CRYPTO_RWLOCK *lock);
+int CRYPTO_THREAD_unlock(CRYPTO_RWLOCK *lock);
+void CRYPTO_THREAD_lock_free(CRYPTO_RWLOCK *lock);
+
+int CRYPTO_atomic_add(int *val, int amount, int *ret, CRYPTO_RWLOCK *lock);
+ +

DESCRIPTION

+ +

OpenSSL can be safely used in multi-threaded applications provided that support for the underlying OS threading API is built-in. Currently, OpenSSL supports the pthread and Windows APIs. OpenSSL can also be built without any multi-threading support, for example on platforms that don't provide any threading support or that provide a threading API that is not yet supported by OpenSSL.

+ +

The following multi-threading function are provided:

+ +
    + +
  • CRYPTO_THREAD_run_once() can be used to perform one-time initialization. The once argument must be a pointer to a static object of type CRYPTO_ONCE that was statically initialized to the value CRYPTO_ONCE_STATIC_INIT. The init argument is a pointer to a function that performs the desired exactly once initialization. In particular, this can be used to allocate locks in a thread-safe manner, which can then be used with the locking functions below.

    + +
  • +
  • CRYPTO_THREAD_lock_new() allocates, initializes and returns a new read/write lock.

    + +
  • +
  • CRYPTO_THREAD_read_lock() locks the provided lock for reading.

    + +
  • +
  • CRYPTO_THREAD_write_lock() locks the provided lock for writing.

    + +
  • +
  • CRYPTO_THREAD_unlock() unlocks the previously locked lock.

    + +
  • +
  • CRYPTO_THREAD_lock_free() frees the provided lock.

    + +
  • +
  • CRYPTO_atomic_add() atomically adds amount to val and returns the result of the operation in ret. lock will be locked, unless atomic operations are supported on the specific platform. Because of this, if a variable is modified by CRYPTO_atomic_add() then CRYPTO_atomic_add() must be the only way that the variable is modified.

    + +
  • +
+ +

RETURN VALUES

+ +

CRYPTO_THREAD_run_once() returns 1 on success, or 0 on error.

+ +

CRYPTO_THREAD_lock_new() returns the allocated lock, or NULL on error.

+ +

CRYPTO_THREAD_lock_free() returns no value.

+ +

The other functions return 1 on success, or 0 on error.

+ +

NOTES

+ +

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 application developer's responsibility to include windows.h prior to crypto.h where use of CRYPTO_THREAD_* types and functions is required.

+ +

EXAMPLES

+ +

This example safely initializes and uses a lock.

+ +
#ifdef _WIN32
+# include <windows.h>
+#endif
+#include <openssl/crypto.h>
+
+static CRYPTO_ONCE once = CRYPTO_ONCE_STATIC_INIT;
+static CRYPTO_RWLOCK *lock;
+
+static void myinit(void)
+{
+    lock = CRYPTO_THREAD_lock_new();
+}
+
+static int mylock(void)
+{
+    if (!CRYPTO_THREAD_run_once(&once, void init) || lock == NULL)
+        return 0;
+    return CRYPTO_THREAD_write_lock(lock);
+}
+
+static int myunlock(void)
+{
+    return CRYPTO_THREAD_unlock(lock);
+}
+
+int serialized(void)
+{
+    int ret = 0;
+
+    if (mylock()) {
+        /* Your code here, do not return without releasing the lock! */
+        ret = ... ;
+    }
+    myunlock();
+    return ret;
+}
+ +

Finalization of locks is an advanced topic, not covered in this example. This can only be done at process exit or when a dynamically loaded library is no longer in use and is unloaded. The simplest solution is to just "leak" the lock in applications and not repeatedly load/unload shared libraries that allocate locks.

+ +

NOTES

+ +

You can find out if OpenSSL was configured with thread support:

+ +
#include <openssl/opensslconf.h>
+#if defined(OPENSSL_THREADS)
+    /* thread support enabled */
+#else
+    /* no thread support */
+#endif
+ +

SEE ALSO

+ +

crypto(7)

+ +

COPYRIGHT

+ +

Copyright 2000-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CRYPTO_get_ex_new_index.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CRYPTO_get_ex_new_index.html new file mode 100644 index 00000000..b39927a4 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CRYPTO_get_ex_new_index.html @@ -0,0 +1,129 @@ + + + + +CRYPTO_get_ex_new_index + + + + + + + + + + +

NAME

+ +

CRYPTO_EX_new, CRYPTO_EX_free, CRYPTO_EX_dup, CRYPTO_free_ex_index, CRYPTO_get_ex_new_index, CRYPTO_set_ex_data, CRYPTO_get_ex_data, CRYPTO_free_ex_data, CRYPTO_new_ex_data - functions supporting application-specific data

+ +

SYNOPSIS

+ +
#include <openssl/crypto.h>
+
+int CRYPTO_get_ex_new_index(int class_index,
+                            long argl, void *argp,
+                            CRYPTO_EX_new *new_func,
+                            CRYPTO_EX_dup *dup_func,
+                            CRYPTO_EX_free *free_func);
+
+typedef void CRYPTO_EX_new(void *parent, void *ptr, CRYPTO_EX_DATA *ad,
+                           int idx, long argl, void *argp);
+typedef void CRYPTO_EX_free(void *parent, void *ptr, CRYPTO_EX_DATA *ad,
+                            int idx, long argl, void *argp);
+typedef int CRYPTO_EX_dup(CRYPTO_EX_DATA *to, const CRYPTO_EX_DATA *from,
+                          void *from_d, int idx, long argl, void *argp);
+
+int CRYPTO_new_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad)
+
+int CRYPTO_set_ex_data(CRYPTO_EX_DATA *r, int idx, void *arg);
+
+void *CRYPTO_get_ex_data(CRYPTO_EX_DATA *r, int idx);
+
+void CRYPTO_free_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *r);
+
+int CRYPTO_free_ex_index(int class_index, int idx);
+ +

DESCRIPTION

+ +

Several OpenSSL structures can have application-specific data attached to them, known as "exdata." The specific structures are:

+ +
APP
+BIO
+DH
+DRBG
+DSA
+EC_KEY
+ENGINE
+RSA
+SSL
+SSL_CTX
+SSL_SESSION
+UI
+UI_METHOD
+X509
+X509_STORE
+X509_STORE_CTX
+ +

Each is identified by an CRYPTO_EX_INDEX_xxx define in the crypto.h header file. In addition, CRYPTO_EX_INDEX_APP is reserved for applications to use this facility for their own structures.

+ +

The API described here is used by OpenSSL to manipulate exdata for specific structures. Since the application data can be anything at all it is passed and retrieved as a void * type.

+ +

The CRYPTO_EX_DATA type is opaque. To initialize the exdata part of a structure, call CRYPTO_new_ex_data(). This is only necessary for CRYPTO_EX_INDEX_APP objects.

+ +

Exdata types are identified by an index, an integer guaranteed to be unique within structures for the lifetime of the program. Applications using exdata typically call CRYPTO_get_ex_new_index at startup, and store the result in a global variable, or write a wrapper function to provide lazy evaluation. The class_index should be one of the CRYPTO_EX_INDEX_xxx values. The argl and argp parameters are saved to be passed to the callbacks but are otherwise not used. In order to transparently manipulate exdata, three callbacks must be provided. The semantics of those callbacks are described below.

+ +

When copying or releasing objects with exdata, the callback functions are called in increasing order of their index value.

+ +

If a dynamic library can be unloaded, it should call CRYPTO_free_ex_index() when this is done. This will replace the callbacks with no-ops so that applications don't crash. Any existing exdata will be leaked.

+ +

To set or get the exdata on an object, the appropriate type-specific routine must be used. This is because the containing structure is opaque and the CRYPTO_EX_DATA field is not accessible. In both API's, the idx parameter should be an already-created index value.

+ +

When setting exdata, the pointer specified with a particular index is saved, and returned on a subsequent "get" call. If the application is going to release the data, it must make sure to set a NULL value at the index, to avoid likely double-free crashes.

+ +

The function CRYPTO_free_ex_data is used to free all exdata attached to a structure. The appropriate type-specific routine must be used. The class_index identifies the structure type, the obj is a pointer to the actual structure, and r is a pointer to the structure's exdata field.

+ +

Callback Functions

+ +

This section describes how the callback functions are used. Applications that are defining their own exdata using CYPRTO_EX_INDEX_APP must call them as described here.

+ +

When a structure is initially allocated (such as RSA_new()) then the new_func() is called for every defined index. There is no requirement that the entire parent, or containing, structure has been set up. The new_func() is typically used only to allocate memory to store the exdata, and perhaps an "initialized" flag within that memory. The exdata value should be set by calling CRYPTO_set_ex_data().

+ +

When a structure is free'd (such as SSL_CTX_free()) then the free_func() is called for every defined index. Again, the state of the parent structure is not guaranteed. The free_func() may be called with a NULL pointer.

+ +

Both new_func() and free_func() take the same parameters. The parent is the pointer to the structure that contains the exdata. The ptr is the current exdata item; for new_func() this will typically be NULL. The r parameter is a pointer to the exdata field of the object. The idx is the index and is the value returned when the callbacks were initially registered via CRYPTO_get_ex_new_index() and can be used if the same callback handles different types of exdata.

+ +

dup_func() is called when a structure is being copied. This is only done for SSL, SSL_SESSION, EC_KEY objects and BIO chains via BIO_dup_chain(). The to and from parameters are pointers to the destination and source CRYPTO_EX_DATA structures, respectively. The from_d parameter needs to be cast to a void **pptr as the API has currently the wrong signature; that will be changed in a future version. The *pptr is a pointer to the source exdata. When the dup_func() returns, the value in *pptr is copied to the destination ex_data. If the pointer contained in *pptr is not modified by the dup_func(), then both to and from will point to the same data. The idx, argl and argp parameters are as described for the other two callbacks. If the dup_func() returns 0 the whole CRYPTO_dup_ex_data() will fail.

+ +

RETURN VALUES

+ +

CRYPTO_get_ex_new_index() returns a new index or -1 on failure.

+ +

CRYPTO_free_ex_index() and CRYPTO_set_ex_data() return 1 on success or 0 on failure.

+ +

CRYPTO_get_ex_data() returns the application data or NULL on failure; note that NULL may be a valid value.

+ +

dup_func() should return 0 for failure and 1 for success.

+ +

COPYRIGHT

+ +

Copyright 2015-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CRYPTO_memcmp.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CRYPTO_memcmp.html new file mode 100644 index 00000000..31a0228a --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CRYPTO_memcmp.html @@ -0,0 +1,56 @@ + + + + +CRYPTO_memcmp + + + + + + + + + + +

NAME

+ +

CRYPTO_memcmp - Constant time memory comparison

+ +

SYNOPSIS

+ +
#include <openssl/crypto.h>
+
+int CRYPTO_memcmp(const void *a, const void *b, size_t len);
+ +

DESCRIPTION

+ +

The CRYPTO_memcmp function compares the len bytes pointed to by a and b for equality. It takes an amount of time dependent on len, but independent of the contents of the memory regions pointed to by a and b.

+ +

RETURN VALUES

+ +

CRYPTO_memcmp() returns 0 if the memory regions are equal and non-zero otherwise.

+ +

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.

+ +

COPYRIGHT

+ +

Copyright 2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CTLOG_STORE_get0_log_by_id.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CTLOG_STORE_get0_log_by_id.html new file mode 100644 index 00000000..6db95676 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CTLOG_STORE_get0_log_by_id.html @@ -0,0 +1,65 @@ + + + + +CTLOG_STORE_get0_log_by_id + + + + + + + + + + +

NAME

+ +

CTLOG_STORE_get0_log_by_id - Get a Certificate Transparency log from a CTLOG_STORE

+ +

SYNOPSIS

+ +
#include <openssl/ct.h>
+
+const CTLOG *CTLOG_STORE_get0_log_by_id(const CTLOG_STORE *store,
+                                        const uint8_t *log_id,
+                                        size_t log_id_len);
+ +

DESCRIPTION

+ +

A Signed Certificate Timestamp (SCT) identifies the Certificate Transparency (CT) log that issued it using the log's LogID (see RFC 6962, Section 3.2). Therefore, it is useful to be able to look up more information about a log (e.g. its public key) using this LogID.

+ +

CTLOG_STORE_get0_log_by_id() provides a way to do this. It will find a CTLOG in a CTLOG_STORE that has a given LogID.

+ +

RETURN VALUES

+ +

CTLOG_STORE_get0_log_by_id returns a CTLOG with the given LogID, if it exists in the given CTLOG_STORE, otherwise it returns NULL.

+ +

SEE ALSO

+ +

ct(7), CTLOG_STORE_new(3)

+ +

HISTORY

+ +

The CTLOG_STORE_get0_log_by_id() function was added in OpenSSL 1.1.0.

+ +

COPYRIGHT

+ +

Copyright 2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CTLOG_STORE_new.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CTLOG_STORE_new.html new file mode 100644 index 00000000..b2a22a62 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CTLOG_STORE_new.html @@ -0,0 +1,86 @@ + + + + +CTLOG_STORE_new + + + + + + + + + + +

NAME

+ +

CTLOG_STORE_new, CTLOG_STORE_free, CTLOG_STORE_load_default_file, CTLOG_STORE_load_file - Create and populate a Certificate Transparency log list

+ +

SYNOPSIS

+ +
#include <openssl/ct.h>
+
+CTLOG_STORE *CTLOG_STORE_new(void);
+void CTLOG_STORE_free(CTLOG_STORE *store);
+
+int CTLOG_STORE_load_default_file(CTLOG_STORE *store);
+int CTLOG_STORE_load_file(CTLOG_STORE *store, const char *file);
+ +

DESCRIPTION

+ +

A CTLOG_STORE is a container for a list of CTLOGs (Certificate Transparency logs). The list can be loaded from one or more files and then searched by LogID (see RFC 6962, Section 3.2, for the definition of a LogID).

+ +

CTLOG_STORE_new() creates an empty list of CT logs. This is then populated by CTLOG_STORE_load_default_file() or CTLOG_STORE_load_file(). CTLOG_STORE_load_default_file() loads from the default file, which is named "ct_log_list.cnf" in OPENSSLDIR (see the output of version). This can be overridden using an environment variable named "CTLOG_FILE". CTLOG_STORE_load_file() loads from a caller-specified file path instead. Both of these functions append any loaded CT logs to the CTLOG_STORE.

+ +

The expected format of the file is:

+ +
enabled_logs=foo,bar
+
+[foo]
+description = Log 1
+key = <base64-encoded DER SubjectPublicKeyInfo here>
+
+[bar]
+description = Log 2
+key = <base64-encoded DER SubjectPublicKeyInfo here>
+ +

Once a CTLOG_STORE is no longer required, it should be passed to CTLOG_STORE_free(). This will delete all of the CTLOGs stored within, along with the CTLOG_STORE itself.

+ +

NOTES

+ +

If there are any invalid CT logs in a file, they are skipped and the remaining valid logs will still be added to the CTLOG_STORE. A CT log will be considered invalid if it is missing a "key" or "description" field.

+ +

RETURN VALUES

+ +

Both CTLOG_STORE_load_default_file and CTLOG_STORE_load_file return 1 if all CT logs in the file are successfully parsed and loaded, 0 otherwise.

+ +

SEE ALSO

+ +

ct(7), CTLOG_STORE_get0_log_by_id(3), SSL_CTX_set_ctlog_list_file(3)

+ +

HISTORY

+ +

These functions were added in OpenSSL 1.1.0.

+ +

COPYRIGHT

+ +

Copyright 2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CTLOG_new.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CTLOG_new.html new file mode 100644 index 00000000..4a3c641b --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CTLOG_new.html @@ -0,0 +1,80 @@ + + + + +CTLOG_new + + + + + + + + + + +

NAME

+ +

CTLOG_new, CTLOG_new_from_base64, CTLOG_free, CTLOG_get0_name, CTLOG_get0_log_id, CTLOG_get0_public_key - encapsulates information about a Certificate Transparency log

+ +

SYNOPSIS

+ +
#include <openssl/ct.h>
+
+CTLOG *CTLOG_new(EVP_PKEY *public_key, const char *name);
+int CTLOG_new_from_base64(CTLOG ** ct_log,
+                          const char *pkey_base64, const char *name);
+void CTLOG_free(CTLOG *log);
+const char *CTLOG_get0_name(const CTLOG *log);
+void CTLOG_get0_log_id(const CTLOG *log, const uint8_t **log_id,
+                       size_t *log_id_len);
+EVP_PKEY *CTLOG_get0_public_key(const CTLOG *log);
+ +

DESCRIPTION

+ +

CTLOG_new() returns a new CTLOG that represents the Certificate Transparency (CT) log with the given public key. A name must also be provided that can be used to help users identify this log. Ownership of the public key is transferred.

+ +

CTLOG_new_from_base64() also creates a new CTLOG, but takes the public key in base64-encoded DER form and sets the ct_log pointer to point to the new CTLOG. The base64 will be decoded and the public key parsed.

+ +

Regardless of whether CTLOG_new() or CTLOG_new_from_base64() is used, it is the caller's responsibility to pass the CTLOG to CTLOG_free() once it is no longer needed. This will delete it and, if created by CTLOG_new(), the EVP_PKEY that was passed to it.

+ +

CTLOG_get0_name() returns the name of the log, as provided when the CTLOG was created. Ownership of the string remains with the CTLOG.

+ +

CTLOG_get0_log_id() sets *log_id to point to a string containing that log's LogID (see RFC 6962). It sets *log_id_len to the length of that LogID. For a v1 CT log, the LogID will be a SHA-256 hash (i.e. 32 bytes long). Ownership of the string remains with the CTLOG.

+ +

CTLOG_get0_public_key() returns the public key of the CT log. Ownership of the EVP_PKEY remains with the CTLOG.

+ +

RETURN VALUES

+ +

CTLOG_new() will return NULL if an error occurs.

+ +

CTLOG_new_from_base64() will return 1 on success, 0 otherwise.

+ +

SEE ALSO

+ +

ct(7)

+ +

HISTORY

+ +

These functions were added in OpenSSL 1.1.0.

+ +

COPYRIGHT

+ +

Copyright 2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CT_POLICY_EVAL_CTX_new.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CT_POLICY_EVAL_CTX_new.html new file mode 100644 index 00000000..5b3fbb7d --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/CT_POLICY_EVAL_CTX_new.html @@ -0,0 +1,126 @@ + + + + +CT_POLICY_EVAL_CTX_new + + + + + + + + + + +

NAME

+ +

CT_POLICY_EVAL_CTX_new, CT_POLICY_EVAL_CTX_free, CT_POLICY_EVAL_CTX_get0_cert, CT_POLICY_EVAL_CTX_set1_cert, CT_POLICY_EVAL_CTX_get0_issuer, CT_POLICY_EVAL_CTX_set1_issuer, CT_POLICY_EVAL_CTX_get0_log_store, CT_POLICY_EVAL_CTX_set_shared_CTLOG_STORE, CT_POLICY_EVAL_CTX_get_time, CT_POLICY_EVAL_CTX_set_time - Encapsulates the data required to evaluate whether SCTs meet a Certificate Transparency policy

+ +

SYNOPSIS

+ +
#include <openssl/ct.h>
+
+CT_POLICY_EVAL_CTX *CT_POLICY_EVAL_CTX_new(void);
+void CT_POLICY_EVAL_CTX_free(CT_POLICY_EVAL_CTX *ctx);
+X509* CT_POLICY_EVAL_CTX_get0_cert(const CT_POLICY_EVAL_CTX *ctx);
+int CT_POLICY_EVAL_CTX_set1_cert(CT_POLICY_EVAL_CTX *ctx, X509 *cert);
+X509* CT_POLICY_EVAL_CTX_get0_issuer(const CT_POLICY_EVAL_CTX *ctx);
+int CT_POLICY_EVAL_CTX_set1_issuer(CT_POLICY_EVAL_CTX *ctx, X509 *issuer);
+const CTLOG_STORE *CT_POLICY_EVAL_CTX_get0_log_store(const CT_POLICY_EVAL_CTX *ctx);
+void CT_POLICY_EVAL_CTX_set_shared_CTLOG_STORE(CT_POLICY_EVAL_CTX *ctx,
+                                               CTLOG_STORE *log_store);
+uint64_t CT_POLICY_EVAL_CTX_get_time(const CT_POLICY_EVAL_CTX *ctx);
+void CT_POLICY_EVAL_CTX_set_time(CT_POLICY_EVAL_CTX *ctx, uint64_t time_in_ms);
+ +

DESCRIPTION

+ +

A CT_POLICY_EVAL_CTX is used by functions that evaluate whether Signed Certificate Timestamps (SCTs) fulfil a Certificate Transparency (CT) policy. This policy may be, for example, that at least one valid SCT is available. To determine this, an SCT's timestamp and signature must be verified. This requires:

+ +
    + +
  • the public key of the log that issued the SCT

    + +
  • +
  • the certificate that the SCT was issued for

    + +
  • +
  • the issuer certificate (if the SCT was issued for a pre-certificate)

    + +
  • +
  • the current time

    + +
  • +
+ +

The above requirements are met using the setters described below.

+ +

CT_POLICY_EVAL_CTX_new() creates an empty policy evaluation context. This should then be populated using:

+ +
    + +
  • CT_POLICY_EVAL_CTX_set1_cert() to provide the certificate the SCTs were issued for

    + +

    Increments the reference count of the certificate.

    + +
  • +
  • CT_POLICY_EVAL_CTX_set1_issuer() to provide the issuer certificate

    + +

    Increments the reference count of the certificate.

    + +
  • +
  • CT_POLICY_EVAL_CTX_set_shared_CTLOG_STORE() to provide a list of logs that are trusted as sources of SCTs

    + +

    Holds a pointer to the CTLOG_STORE, so the CTLOG_STORE must outlive the CT_POLICY_EVAL_CTX.

    + +
  • +
  • CT_POLICY_EVAL_CTX_set_time() to set the time SCTs should be compared with to determine if they are valid

    + +

    The SCT timestamp will be compared to this time to check whether the SCT was issued in the future. RFC6962 states that "TLS clients MUST reject SCTs whose timestamp is in the future". By default, this will be set to 5 minutes in the future (e.g. (time() + 300) * 1000), to allow for clock drift.

    + +

    The time should be in milliseconds since the Unix epoch.

    + +
  • +
+ +

Each setter has a matching getter for accessing the current value.

+ +

When no longer required, the CT_POLICY_EVAL_CTX should be passed to CT_POLICY_EVAL_CTX_free() to delete it.

+ +

NOTES

+ +

The issuer certificate only needs to be provided if at least one of the SCTs was issued for a pre-certificate. This will be the case for SCTs embedded in a certificate (i.e. those in an X.509 extension), but may not be the case for SCTs found in the TLS SCT extension or OCSP response.

+ +

RETURN VALUES

+ +

CT_POLICY_EVAL_CTX_new() will return NULL if malloc fails.

+ +

SEE ALSO

+ +

ct(7)

+ +

HISTORY

+ +

These functions were added in OpenSSL 1.1.0.

+ +

COPYRIGHT

+ +

Copyright 2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DEFINE_STACK_OF.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DEFINE_STACK_OF.html new file mode 100644 index 00000000..9cc97517 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DEFINE_STACK_OF.html @@ -0,0 +1,197 @@ + + + + +DEFINE_STACK_OF + + + + + + + + + + +

NAME

+ +

DEFINE_STACK_OF, DEFINE_STACK_OF_CONST, DEFINE_SPECIAL_STACK_OF, DEFINE_SPECIAL_STACK_OF_CONST, sk_TYPE_num, sk_TYPE_value, sk_TYPE_new, sk_TYPE_new_null, sk_TYPE_reserve, sk_TYPE_free, sk_TYPE_zero, sk_TYPE_delete, sk_TYPE_delete_ptr, sk_TYPE_push, sk_TYPE_unshift, sk_TYPE_pop, sk_TYPE_shift, sk_TYPE_pop_free, sk_TYPE_insert, sk_TYPE_set, sk_TYPE_find, sk_TYPE_find_ex, sk_TYPE_sort, sk_TYPE_is_sorted, sk_TYPE_dup, sk_TYPE_deep_copy, sk_TYPE_set_cmp_func, sk_TYPE_new_reserve - stack container

+ +

SYNOPSIS

+ +
#include <openssl/safestack.h>
+
+STACK_OF(TYPE)
+DEFINE_STACK_OF(TYPE)
+DEFINE_STACK_OF_CONST(TYPE)
+DEFINE_SPECIAL_STACK_OF(FUNCTYPE, TYPE)
+DEFINE_SPECIAL_STACK_OF_CONST(FUNCTYPE, TYPE)
+
+typedef int (*sk_TYPE_compfunc)(const TYPE *const *a, const TYPE *const *b);
+typedef TYPE * (*sk_TYPE_copyfunc)(const TYPE *a);
+typedef void (*sk_TYPE_freefunc)(TYPE *a);
+
+int sk_TYPE_num(const STACK_OF(TYPE) *sk);
+TYPE *sk_TYPE_value(const STACK_OF(TYPE) *sk, int idx);
+STACK_OF(TYPE) *sk_TYPE_new(sk_TYPE_compfunc compare);
+STACK_OF(TYPE) *sk_TYPE_new_null(void);
+int sk_TYPE_reserve(STACK_OF(TYPE) *sk, int n);
+void sk_TYPE_free(const STACK_OF(TYPE) *sk);
+void sk_TYPE_zero(const STACK_OF(TYPE) *sk);
+TYPE *sk_TYPE_delete(STACK_OF(TYPE) *sk, int i);
+TYPE *sk_TYPE_delete_ptr(STACK_OF(TYPE) *sk, TYPE *ptr);
+int sk_TYPE_push(STACK_OF(TYPE) *sk, const TYPE *ptr);
+int sk_TYPE_unshift(STACK_OF(TYPE) *sk, const TYPE *ptr);
+TYPE *sk_TYPE_pop(STACK_OF(TYPE) *sk);
+TYPE *sk_TYPE_shift(STACK_OF(TYPE) *sk);
+void sk_TYPE_pop_free(STACK_OF(TYPE) *sk, sk_TYPE_freefunc freefunc);
+int sk_TYPE_insert(STACK_OF(TYPE) *sk, TYPE *ptr, int idx);
+TYPE *sk_TYPE_set(STACK_OF(TYPE) *sk, int idx, const TYPE *ptr);
+int sk_TYPE_find(STACK_OF(TYPE) *sk, TYPE *ptr);
+int sk_TYPE_find_ex(STACK_OF(TYPE) *sk, TYPE *ptr);
+void sk_TYPE_sort(const STACK_OF(TYPE) *sk);
+int sk_TYPE_is_sorted(const STACK_OF(TYPE) *sk);
+STACK_OF(TYPE) *sk_TYPE_dup(const STACK_OF(TYPE) *sk);
+STACK_OF(TYPE) *sk_TYPE_deep_copy(const STACK_OF(TYPE) *sk,
+                                  sk_TYPE_copyfunc copyfunc,
+                                  sk_TYPE_freefunc freefunc);
+sk_TYPE_compfunc (*sk_TYPE_set_cmp_func(STACK_OF(TYPE) *sk,
+                                        sk_TYPE_compfunc compare));
+STACK_OF(TYPE) *sk_TYPE_new_reserve(sk_TYPE_compfunc compare, int n);
+ +

DESCRIPTION

+ +

Applications can create and use their own stacks by placing any of the macros described below in a header file. These macros define typesafe inline functions that wrap around the utility OPENSSL_sk_ API. In the description here, TYPE is used as a placeholder for any of the OpenSSL datatypes, such as X509.

+ +

STACK_OF() returns the name for a stack of the specified TYPE. DEFINE_STACK_OF() creates set of functions for a stack of TYPE. This will mean that type TYPE is stored in each stack, the type is referenced by STACK_OF(TYPE) and each function name begins with sk_TYPE_. For example:

+ +
TYPE *sk_TYPE_value(STACK_OF(TYPE) *sk, int idx);
+ +

DEFINE_STACK_OF_CONST() is identical to DEFINE_STACK_OF() except each element is constant. For example:

+ +
const TYPE *sk_TYPE_value(STACK_OF(TYPE) *sk, int idx);
+ +

DEFINE_SPECIAL_STACK_OF() defines a stack of TYPE but each function uses FUNCNAME in the function name. For example:

+ +
TYPE *sk_FUNCNAME_value(STACK_OF(TYPE) *sk, int idx);
+ +

DEFINE_SPECIAL_STACK_OF_CONST() is similar except that each element is constant:

+ +
const TYPE *sk_FUNCNAME_value(STACK_OF(TYPE) *sk, int idx);
+ +

sk_TYPE_num() returns the number of elements in sk or -1 if sk is NULL.

+ +

sk_TYPE_value() returns element idx in sk, where idx starts at zero. If idx is out of range then NULL is returned.

+ +

sk_TYPE_new() allocates a new empty stack using comparison function compare. If compare is NULL then no comparison function is used. This function is equivalent to sk_TYPE_new_reserve(compare, 0).

+ +

sk_TYPE_new_null() allocates a new empty stack with no comparison function. This function is equivalent to sk_TYPE_new_reserve(NULL, 0).

+ +

sk_TYPE_reserve() allocates additional memory in the sk structure such that the next n calls to sk_TYPE_insert(), sk_TYPE_push() or sk_TYPE_unshift() will not fail or cause memory to be allocated or reallocated. If n is zero, any excess space allocated in the sk structure is freed. On error sk is unchanged.

+ +

sk_TYPE_new_reserve() allocates a new stack. The new stack will have additional memory allocated to hold n elements if n is positive. The next n calls to sk_TYPE_insert(), sk_TYPE_push() or sk_TYPE_unshift() will not fail or cause memory to be allocated or reallocated. If n is zero or less than zero, no memory is allocated. sk_TYPE_new_reserve() also sets the comparison function compare to the newly created stack. If compare is NULL then no comparison function is used.

+ +

sk_TYPE_set_cmp_func() sets the comparison function of sk to compare. The previous comparison function is returned or NULL if there was no previous comparison function.

+ +

sk_TYPE_free() frees up the sk structure. It does not free up any elements of sk. After this call sk is no longer valid.

+ +

sk_TYPE_zero() sets the number of elements in sk to zero. It does not free sk so after this call sk is still valid.

+ +

sk_TYPE_pop_free() frees up all elements of sk and sk itself. The free function freefunc() is called on each element to free it.

+ +

sk_TYPE_delete() deletes element i from sk. It returns the deleted element or NULL if i is out of range.

+ +

sk_TYPE_delete_ptr() deletes element matching ptr from sk. It returns the deleted element or NULL if no element matching ptr was found.

+ +

sk_TYPE_insert() inserts ptr into sk at position idx. Any existing elements at or after idx are moved downwards. If idx is out of range the new element is appended to sk. sk_TYPE_insert() either returns the number of elements in sk after the new element is inserted or zero if an error (such as memory allocation failure) occurred.

+ +

sk_TYPE_push() appends ptr to sk it is equivalent to:

+ +
sk_TYPE_insert(sk, ptr, -1);
+ +

sk_TYPE_unshift() inserts ptr at the start of sk it is equivalent to:

+ +
sk_TYPE_insert(sk, ptr, 0);
+ +

sk_TYPE_pop() returns and removes the last element from sk.

+ +

sk_TYPE_shift() returns and removes the first element from sk.

+ +

sk_TYPE_set() sets element idx of sk to ptr replacing the current element. The new element value is returned or NULL if an error occurred: this will only happen if sk is NULL or idx is out of range.

+ +

sk_TYPE_find() searches sk for the element ptr. In the case where no comparison function has been specified, the function performs a linear search for a pointer equal to ptr. The index of the first matching element is returned or -1 if there is no match. In the case where a comparison function has been specified, sk is sorted then sk_TYPE_find() returns the index of a matching element or -1 if there is no match. Note that, in this case, the matching element returned is not guaranteed to be the first; the comparison function will usually compare the values pointed to rather than the pointers themselves and the order of elements in sk could change.

+ +

sk_TYPE_find_ex() operates like sk_TYPE_find() except when a comparison function has been specified and no matching element is found. Instead of returning -1, sk_TYPE_find_ex() returns the index of the element either before or after the location where ptr would be if it were present in sk.

+ +

sk_TYPE_sort() sorts sk using the supplied comparison function.

+ +

sk_TYPE_is_sorted() returns 1 if sk is sorted and 0 otherwise.

+ +

sk_TYPE_dup() returns a copy of sk. Note the pointers in the copy are identical to the original.

+ +

sk_TYPE_deep_copy() returns a new stack where each element has been copied. Copying is performed by the supplied copyfunc() and freeing by freefunc(). The function freefunc() is only called if an error occurs.

+ +

NOTES

+ +

Care should be taken when accessing stacks in multi-threaded environments. Any operation which increases the size of a stack such as sk_TYPE_insert() or sk_push() can "grow" the size of an internal array and cause race conditions if the same stack is accessed in a different thread. Operations such as sk_find() and sk_sort() can also reorder the stack.

+ +

Any comparison function supplied should use a metric suitable for use in a binary search operation. That is it should return zero, a positive or negative value if a is equal to, greater than or less than b respectively.

+ +

Care should be taken when checking the return values of the functions sk_TYPE_find() and sk_TYPE_find_ex(). They return an index to the matching element. In particular 0 indicates a matching first element. A failed search is indicated by a -1 return value.

+ +

STACK_OF(), DEFINE_STACK_OF(), DEFINE_STACK_OF_CONST(), and DEFINE_SPECIAL_STACK_OF() are implemented as macros.

+ +

The underlying utility OPENSSL_sk_ API should not be used directly. It defines these functions: OPENSSL_sk_deep_copy(), OPENSSL_sk_delete(), OPENSSL_sk_delete_ptr(), OPENSSL_sk_dup(), OPENSSL_sk_find(), OPENSSL_sk_find_ex(), OPENSSL_sk_free(), OPENSSL_sk_insert(), OPENSSL_sk_is_sorted(), OPENSSL_sk_new(), OPENSSL_sk_new_null(), OPENSSL_sk_num(), OPENSSL_sk_pop(), OPENSSL_sk_pop_free(), OPENSSL_sk_push(), OPENSSL_sk_reserve(), OPENSSL_sk_set(), OPENSSL_sk_set_cmp_func(), OPENSSL_sk_shift(), OPENSSL_sk_sort(), OPENSSL_sk_unshift(), OPENSSL_sk_value(), OPENSSL_sk_zero().

+ +

RETURN VALUES

+ +

sk_TYPE_num() returns the number of elements in the stack or -1 if the passed stack is NULL.

+ +

sk_TYPE_value() returns a pointer to a stack element or NULL if the index is out of range.

+ +

sk_TYPE_new(), sk_TYPE_new_null() and sk_TYPE_new_reserve() return an empty stack or NULL if an error occurs.

+ +

sk_TYPE_reserve() returns 1 on successful allocation of the required memory or 0 on error.

+ +

sk_TYPE_set_cmp_func() returns the old comparison function or NULL if there was no old comparison function.

+ +

sk_TYPE_free(), sk_TYPE_zero(), sk_TYPE_pop_free() and sk_TYPE_sort() do not return values.

+ +

sk_TYPE_pop(), sk_TYPE_shift(), sk_TYPE_delete() and sk_TYPE_delete_ptr() return a pointer to the deleted element or NULL on error.

+ +

sk_TYPE_insert(), sk_TYPE_push() and sk_TYPE_unshift() return the total number of elements in the stack and 0 if an error occurred.

+ +

sk_TYPE_set() returns a pointer to the replacement element or NULL on error.

+ +

sk_TYPE_find() and sk_TYPE_find_ex() return an index to the found element or -1 on error.

+ +

sk_TYPE_is_sorted() returns 1 if the stack is sorted and 0 if it is not.

+ +

sk_TYPE_dup() and sk_TYPE_deep_copy() return a pointer to the copy of the stack.

+ +

HISTORY

+ +

Before OpenSSL 1.1.0, this was implemented via macros and not inline functions and was not a public API.

+ +

sk_TYPE_reserve() and sk_TYPE_new_reserve() were added in OpenSSL 1.1.1.

+ +

COPYRIGHT

+ +

Copyright 2000-2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DES_random_key.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DES_random_key.html new file mode 100644 index 00000000..086cbefc --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DES_random_key.html @@ -0,0 +1,217 @@ + + + + +DES_random_key + + + + + + + + + + +

NAME

+ +

DES_random_key, DES_set_key, DES_key_sched, DES_set_key_checked, DES_set_key_unchecked, DES_set_odd_parity, DES_is_weak_key, DES_ecb_encrypt, DES_ecb2_encrypt, DES_ecb3_encrypt, DES_ncbc_encrypt, DES_cfb_encrypt, DES_ofb_encrypt, DES_pcbc_encrypt, DES_cfb64_encrypt, DES_ofb64_encrypt, DES_xcbc_encrypt, DES_ede2_cbc_encrypt, DES_ede2_cfb64_encrypt, DES_ede2_ofb64_encrypt, DES_ede3_cbc_encrypt, DES_ede3_cfb64_encrypt, DES_ede3_ofb64_encrypt, DES_cbc_cksum, DES_quad_cksum, DES_string_to_key, DES_string_to_2keys, DES_fcrypt, DES_crypt - DES encryption

+ +

SYNOPSIS

+ +
#include <openssl/des.h>
+
+void DES_random_key(DES_cblock *ret);
+
+int DES_set_key(const_DES_cblock *key, DES_key_schedule *schedule);
+int DES_key_sched(const_DES_cblock *key, DES_key_schedule *schedule);
+int DES_set_key_checked(const_DES_cblock *key, DES_key_schedule *schedule);
+void DES_set_key_unchecked(const_DES_cblock *key, DES_key_schedule *schedule);
+
+void DES_set_odd_parity(DES_cblock *key);
+int DES_is_weak_key(const_DES_cblock *key);
+
+void DES_ecb_encrypt(const_DES_cblock *input, DES_cblock *output,
+                     DES_key_schedule *ks, int enc);
+void DES_ecb2_encrypt(const_DES_cblock *input, DES_cblock *output,
+                      DES_key_schedule *ks1, DES_key_schedule *ks2, int enc);
+void DES_ecb3_encrypt(const_DES_cblock *input, DES_cblock *output,
+                      DES_key_schedule *ks1, DES_key_schedule *ks2,
+                      DES_key_schedule *ks3, int enc);
+
+void DES_ncbc_encrypt(const unsigned char *input, unsigned char *output,
+                      long length, DES_key_schedule *schedule, DES_cblock *ivec,
+                      int enc);
+void DES_cfb_encrypt(const unsigned char *in, unsigned char *out,
+                     int numbits, long length, DES_key_schedule *schedule,
+                     DES_cblock *ivec, int enc);
+void DES_ofb_encrypt(const unsigned char *in, unsigned char *out,
+                     int numbits, long length, DES_key_schedule *schedule,
+                     DES_cblock *ivec);
+void DES_pcbc_encrypt(const unsigned char *input, unsigned char *output,
+                      long length, DES_key_schedule *schedule, DES_cblock *ivec,
+                      int enc);
+void DES_cfb64_encrypt(const unsigned char *in, unsigned char *out,
+                       long length, DES_key_schedule *schedule, DES_cblock *ivec,
+                       int *num, int enc);
+void DES_ofb64_encrypt(const unsigned char *in, unsigned char *out,
+                       long length, DES_key_schedule *schedule, DES_cblock *ivec,
+                       int *num);
+
+void DES_xcbc_encrypt(const unsigned char *input, unsigned char *output,
+                      long length, DES_key_schedule *schedule, DES_cblock *ivec,
+                      const_DES_cblock *inw, const_DES_cblock *outw, int enc);
+
+void DES_ede2_cbc_encrypt(const unsigned char *input, unsigned char *output,
+                          long length, DES_key_schedule *ks1,
+                          DES_key_schedule *ks2, DES_cblock *ivec, int enc);
+void DES_ede2_cfb64_encrypt(const unsigned char *in, unsigned char *out,
+                            long length, DES_key_schedule *ks1,
+                            DES_key_schedule *ks2, DES_cblock *ivec,
+                            int *num, int enc);
+void DES_ede2_ofb64_encrypt(const unsigned char *in, unsigned char *out,
+                            long length, DES_key_schedule *ks1,
+                            DES_key_schedule *ks2, DES_cblock *ivec, int *num);
+
+void DES_ede3_cbc_encrypt(const unsigned char *input, unsigned char *output,
+                          long length, DES_key_schedule *ks1,
+                          DES_key_schedule *ks2, DES_key_schedule *ks3,
+                          DES_cblock *ivec, int enc);
+void DES_ede3_cfb64_encrypt(const unsigned char *in, unsigned char *out,
+                            long length, DES_key_schedule *ks1,
+                            DES_key_schedule *ks2, DES_key_schedule *ks3,
+                            DES_cblock *ivec, int *num, int enc);
+void DES_ede3_ofb64_encrypt(const unsigned char *in, unsigned char *out,
+                            long length, DES_key_schedule *ks1,
+                            DES_key_schedule *ks2, DES_key_schedule *ks3,
+                            DES_cblock *ivec, int *num);
+
+DES_LONG DES_cbc_cksum(const unsigned char *input, DES_cblock *output,
+                       long length, DES_key_schedule *schedule,
+                       const_DES_cblock *ivec);
+DES_LONG DES_quad_cksum(const unsigned char *input, DES_cblock output[],
+                        long length, int out_count, DES_cblock *seed);
+void DES_string_to_key(const char *str, DES_cblock *key);
+void DES_string_to_2keys(const char *str, DES_cblock *key1, DES_cblock *key2);
+
+char *DES_fcrypt(const char *buf, const char *salt, char *ret);
+char *DES_crypt(const char *buf, const char *salt);
+ +

DESCRIPTION

+ +

This library contains a fast implementation of the DES encryption algorithm.

+ +

There are two phases to the use of DES encryption. The first is the generation of a DES_key_schedule from a key, the second is the actual encryption. A DES key is of type DES_cblock. This type consists of 8 bytes with odd parity. The least significant bit in each byte is the parity bit. The key schedule is an expanded form of the key; it is used to speed the encryption process.

+ +

DES_random_key() generates a random key. The random generator must be seeded when calling this function. If the automatic seeding or reseeding of the OpenSSL CSPRNG fails due to external circumstances (see RAND(7)), the operation will fail. If the function fails, 0 is returned.

+ +

Before a DES key can be used, it must be converted into the architecture dependent DES_key_schedule via the DES_set_key_checked() or DES_set_key_unchecked() function.

+ +

DES_set_key_checked() will check that the key passed is of odd parity and is not a weak or semi-weak key. If the parity is wrong, then -1 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 DES_check_key flag is non-zero, 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.

+ +

DES_set_odd_parity() sets the parity of the passed key to odd.

+ +

DES_is_weak_key() returns 1 if the passed key is a weak key, 0 if it is ok.

+ +

The following routines mostly operate on an input and output stream of DES_cblocks.

+ +

DES_ecb_encrypt() is the basic DES encryption routine that encrypts or decrypts a single 8-byte DES_cblock in electronic code book (ECB) mode. It always transforms the input data, pointed to by input, into the output data, pointed to by the output argument. If the encrypt argument is non-zero (DES_ENCRYPT), the input (cleartext) is encrypted in to the output (ciphertext) using the key_schedule specified by the schedule argument, previously set via DES_set_key. If encrypt is zero (DES_DECRYPT), the input (now ciphertext) is decrypted into the output (now cleartext). Input and output may overlap. DES_ecb_encrypt() does not return a value.

+ +

DES_ecb3_encrypt() encrypts/decrypts the input block by using three-key Triple-DES encryption in ECB mode. This involves encrypting the input with ks1, decrypting with the key schedule ks2, and then encrypting with ks3. This routine greatly reduces the chances of brute force breaking of DES and has the advantage of if ks1, ks2 and ks3 are the same, it is equivalent to just encryption using ECB mode and ks1 as the key.

+ +

The macro DES_ecb2_encrypt() is provided to perform two-key Triple-DES encryption by using ks1 for the final encryption.

+ +

DES_ncbc_encrypt() encrypts/decrypts using the cipher-block-chaining (CBC) mode of DES. If the encrypt argument is non-zero, the routine cipher-block-chain encrypts the cleartext data pointed to by the input argument into the ciphertext pointed to by the output argument, using the key schedule provided by the schedule argument, and initialization vector provided by the ivec argument. If the length argument is not an integral multiple of eight bytes, the last block is copied to a temporary area and zero filled. The output is always an integral multiple of eight bytes.

+ +

DES_xcbc_encrypt() is RSA's DESX mode of DES. It uses inw and outw to 'whiten' the encryption. inw and outw are secret (unlike the iv) and are as such, part of the key. So the key is sort of 24 bytes. This is much better than CBC DES.

+ +

DES_ede3_cbc_encrypt() implements outer triple CBC DES encryption with three keys. This means that each DES operation inside the CBC mode is C=E(ks3,D(ks2,E(ks1,M))). This mode is used by SSL.

+ +

The DES_ede2_cbc_encrypt() macro implements two-key Triple-DES by reusing ks1 for the final encryption. C=E(ks1,D(ks2,E(ks1,M))). This form of Triple-DES is used by the RSAREF library.

+ +

DES_pcbc_encrypt() encrypts/decrypts using the propagating cipher block chaining mode used by Kerberos v4. Its parameters are the same as DES_ncbc_encrypt().

+ +

DES_cfb_encrypt() encrypts/decrypts using cipher feedback mode. This method takes an array of characters as input and outputs an array of characters. It does not require any padding to 8 character groups. Note: the ivec variable is changed and the new changed value needs to be passed to the next call to this function. Since this function runs a complete DES ECB encryption per numbits, this function is only suggested for use when sending a small number of characters.

+ +

DES_cfb64_encrypt() implements CFB mode of DES with 64-bit feedback. Why is this useful you ask? Because this routine will allow you to encrypt an arbitrary number of bytes, without 8 byte padding. Each call to this routine will encrypt the input bytes to output and then update ivec and num. num contains 'how far' we are though ivec. If this does not make much sense, read more about CFB mode of DES.

+ +

DES_ede3_cfb64_encrypt() and DES_ede2_cfb64_encrypt() is the same as DES_cfb64_encrypt() except that Triple-DES is used.

+ +

DES_ofb_encrypt() encrypts using output feedback mode. This method takes an array of characters as input and outputs an array of characters. It does not require any padding to 8 character groups. Note: the ivec variable is changed and the new changed value needs to be passed to the next call to this function. Since this function runs a complete DES ECB encryption per numbits, this function is only suggested for use when sending a small number of characters.

+ +

DES_ofb64_encrypt() is the same as DES_cfb64_encrypt() using Output Feed Back mode.

+ +

DES_ede3_ofb64_encrypt() and DES_ede2_ofb64_encrypt() is the same as DES_ofb64_encrypt(), using Triple-DES.

+ +

The following functions are included in the DES library for compatibility with the MIT Kerberos library.

+ +

DES_cbc_cksum() produces an 8 byte checksum based on the input stream (via CBC encryption). The last 4 bytes of the checksum are returned and the complete 8 bytes are placed in output. This function is used by Kerberos v4. Other applications should use EVP_DigestInit(3) etc. instead.

+ +

DES_quad_cksum() is a Kerberos v4 function. It returns a 4 byte checksum from the input bytes. The algorithm can be iterated over the input, depending on out_count, 1, 2, 3 or 4 times. If output is non-NULL, the 8 bytes generated by each pass are written into output.

+ +

The following are DES-based transformations:

+ +

DES_fcrypt() is a fast version of the Unix crypt(3) function. This version takes only a small amount of space relative to other fast crypt() implementations. This is different to the normal crypt() in that the third parameter is the buffer that the return value is written into. It needs to be at least 14 bytes long. This function is thread safe, unlike the normal crypt().

+ +

DES_crypt() is a faster replacement for the normal system crypt(). This function calls DES_fcrypt() with a static array passed as the third parameter. This mostly emulates the normal non-thread-safe semantics of crypt(3). The salt must be two ASCII characters.

+ +

The values returned by DES_fcrypt() and DES_crypt() are terminated by NUL character.

+ +

DES_enc_write() writes len bytes to file descriptor fd from buffer buf. The data is encrypted via pcbc_encrypt (default) using sched for the key and iv as a starting vector. The actual data send down fd consists of 4 bytes (in network byte order) containing the length of the following encrypted data. The encrypted data then follows, padded with random data out to a multiple of 8 bytes.

+ +

BUGS

+ +

DES_cbc_encrypt() does not modify ivec; use DES_ncbc_encrypt() instead.

+ +

DES_cfb_encrypt() and DES_ofb_encrypt() operates on input of 8 bits. What this means is that if you set numbits to 12, and length to 2, the first 12 bits will come from the 1st input byte and the low half of the second input byte. The second 12 bits will have the low 8 bits taken from the 3rd input byte and the top 4 bits taken from the 4th input byte. The same holds for output. This function has been implemented this way because most people will be using a multiple of 8 and because once you get into pulling bytes input bytes apart things get ugly!

+ +

DES_string_to_key() is available for backward compatibility with the MIT library. New applications should use a cryptographic hash function. The same applies for DES_string_to_2key().

+ +

NOTES

+ +

The des library was written to be source code compatible with the MIT Kerberos library.

+ +

Applications should use the higher level functions EVP_EncryptInit(3) etc. instead of calling these functions directly.

+ +

Single-key DES is insecure due to its short key size. ECB mode is not suitable for most applications; see des_modes(7).

+ +

RETURN VALUES

+ +

DES_set_key(), DES_key_sched(), DES_set_key_checked() and DES_is_weak_key() return 0 on success or negative values on error.

+ +

DES_cbc_cksum() and DES_quad_cksum() return 4-byte integer representing the last 4 bytes of the checksum of the input.

+ +

DES_fcrypt() returns a pointer to the caller-provided buffer and DES_crypt() - to a static buffer on success; otherwise they return NULL.

+ +

SEE ALSO

+ +

des_modes(7), EVP_EncryptInit(3)

+ +

HISTORY

+ +

The requirement that the salt parameter to DES_crypt() and DES_fcrypt() be two ASCII characters was first enforced in OpenSSL 1.1.0. Previous versions tried to use the letter uppercase A if both character were not present, and could crash when given non-ASCII on some platforms.

+ +

COPYRIGHT

+ +

Copyright 2000-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DH_generate_key.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DH_generate_key.html new file mode 100644 index 00000000..07b78000 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DH_generate_key.html @@ -0,0 +1,66 @@ + + + + +DH_generate_key + + + + + + + + + + +

NAME

+ +

DH_generate_key, DH_compute_key - perform Diffie-Hellman key exchange

+ +

SYNOPSIS

+ +
#include <openssl/dh.h>
+
+int DH_generate_key(DH *dh);
+
+int DH_compute_key(unsigned char *key, BIGNUM *pub_key, DH *dh);
+ +

DESCRIPTION

+ +

DH_generate_key() performs the first step of a Diffie-Hellman key exchange by generating private and public DH values. By calling DH_compute_key(), these are combined with the other party's public value to compute the shared key.

+ +

DH_generate_key() expects dh to contain the shared parameters dh->p and dh->g. It generates a random private DH value unless dh->priv_key is already set, and computes the corresponding public value dh->pub_key, which can then be published.

+ +

DH_compute_key() computes the shared secret from the private DH value in dh and the other party's public value in pub_key and stores it in key. key must point to DH_size(dh) bytes of memory.

+ +

RETURN VALUES

+ +

DH_generate_key() returns 1 on success, 0 otherwise.

+ +

DH_compute_key() returns the size of the shared secret on success, -1 on error.

+ +

The error codes can be obtained by ERR_get_error(3).

+ +

SEE ALSO

+ +

DH_new(3), ERR_get_error(3), RAND_bytes(3), DH_size(3)

+ +

COPYRIGHT

+ +

Copyright 2000-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DH_generate_parameters.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DH_generate_parameters.html new file mode 100644 index 00000000..9338b659 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DH_generate_parameters.html @@ -0,0 +1,155 @@ + + + + +DH_generate_parameters + + + + + + + + + + +

NAME

+ +

DH_generate_parameters_ex, DH_generate_parameters, DH_check, DH_check_params, DH_check_ex, DH_check_params_ex, DH_check_pub_key_ex - generate and check Diffie-Hellman parameters

+ +

SYNOPSIS

+ +
#include <openssl/dh.h>
+
+int DH_generate_parameters_ex(DH *dh, int prime_len, int generator, BN_GENCB *cb);
+
+int DH_check(DH *dh, int *codes);
+int DH_check_params(DH *dh, int *codes);
+
+int DH_check_ex(const DH *dh);
+int DH_check_params_ex(const DH *dh);
+int DH_check_pub_key_ex(const DH *dh, const BIGNUM *pub_key);
+ +

Deprecated:

+ +
#if OPENSSL_API_COMPAT < 0x00908000L
+DH *DH_generate_parameters(int prime_len, int generator,
+                           void (*callback)(int, int, void *), void *cb_arg);
+#endif
+ +

DESCRIPTION

+ +

DH_generate_parameters_ex() generates Diffie-Hellman parameters that can be shared among a group of users, and stores them in the provided DH structure. The pseudo-random number generator must be seeded before calling it. The parameters generated by DH_generate_parameters_ex() should not be used in signature schemes.

+ +

prime_len is the length in bits of the safe prime to be generated. generator is a small number > 1, typically 2 or 5.

+ +

A callback function may be used to provide feedback about the progress of the key generation. If cb is not NULL, it will be called as described in BN_generate_prime(3) while a random prime number is generated, and when a prime has been found, BN_GENCB_call(cb, 3, 0) is called. See BN_generate_prime_ex(3) for information on the BN_GENCB_call() function.

+ +

DH_generate_parameters() is similar to DH_generate_prime_ex() but expects an old-style callback function; see BN_generate_prime(3) for information on the old-style callback.

+ +

DH_check_params() confirms that the p and g are likely enough to be valid. This is a lightweight check, if a more thorough check is needed, use DH_check(). The value of *codes is updated with any problems found. If *codes is zero then no problems were found, otherwise the following bits may be set:

+ +
+ +
DH_CHECK_P_NOT_PRIME
+
+ +

The parameter p has been determined to not being an odd prime. Note that the lack of this bit doesn't guarantee that p is a prime.

+ +
+
DH_NOT_SUITABLE_GENERATOR
+
+ +

The generator g is not suitable. Note that the lack of this bit doesn't guarantee that g is suitable, unless p is known to be a strong prime.

+ +
+
+ +

DH_check() confirms that the Diffie-Hellman parameters dh are valid. The value of *codes is updated with any problems found. If *codes is zero then no problems were found, otherwise the following bits may be set:

+ +
+ +
DH_CHECK_P_NOT_PRIME
+
+ +

The parameter p is not prime.

+ +
+
DH_CHECK_P_NOT_SAFE_PRIME
+
+ +

The parameter p is not a safe prime and no q value is present.

+ +
+
DH_UNABLE_TO_CHECK_GENERATOR
+
+ +

The generator g cannot be checked for suitability.

+ +
+
DH_NOT_SUITABLE_GENERATOR
+
+ +

The generator g is not suitable.

+ +
+
DH_CHECK_Q_NOT_PRIME
+
+ +

The parameter q is not prime.

+ +
+
DH_CHECK_INVALID_Q_VALUE
+
+ +

The parameter q is invalid.

+ +
+
DH_CHECK_INVALID_J_VALUE
+
+ +

The parameter j is invalid.

+ +
+
+ +

DH_check_ex(), DH_check_params() and DH_check_pub_key_ex() are similar to DH_check() and DH_check_params() respectively, but the error reasons are added to the thread's error queue instead of provided as return values from the function.

+ +

RETURN VALUES

+ +

DH_generate_parameters_ex(), DH_check() and DH_check_params() return 1 if the check could be performed, 0 otherwise.

+ +

DH_generate_parameters() returns a pointer to the DH structure or NULL if the parameter generation fails.

+ +

DH_check_ex(), DH_check_params() and DH_check_pub_key_ex() return 1 if the check is successful, 0 for failed.

+ +

The error codes can be obtained by ERR_get_error(3).

+ +

SEE ALSO

+ +

DH_new(3), ERR_get_error(3), RAND_bytes(3), DH_free(3)

+ +

HISTORY

+ +

DH_generate_parameters() was deprecated in OpenSSL 0.9.8; use DH_generate_parameters_ex() instead.

+ +

COPYRIGHT

+ +

Copyright 2000-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DH_get0_pqg.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DH_get0_pqg.html new file mode 100644 index 00000000..abeb59f0 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DH_get0_pqg.html @@ -0,0 +1,106 @@ + + + + +DH_get0_pqg + + + + + + + + + + +

NAME

+ +

DH_get0_pqg, DH_set0_pqg, DH_get0_key, DH_set0_key, DH_get0_p, DH_get0_q, DH_get0_g, DH_get0_priv_key, DH_get0_pub_key, DH_clear_flags, DH_test_flags, DH_set_flags, DH_get0_engine, DH_get_length, DH_set_length - Routines for getting and setting data in a DH object

+ +

SYNOPSIS

+ +
#include <openssl/dh.h>
+
+void DH_get0_pqg(const DH *dh,
+                 const BIGNUM **p, const BIGNUM **q, const BIGNUM **g);
+int DH_set0_pqg(DH *dh, BIGNUM *p, BIGNUM *q, BIGNUM *g);
+void DH_get0_key(const DH *dh,
+                 const BIGNUM **pub_key, const BIGNUM **priv_key);
+int DH_set0_key(DH *dh, BIGNUM *pub_key, BIGNUM *priv_key);
+const BIGNUM *DH_get0_p(const DH *dh);
+const BIGNUM *DH_get0_q(const DH *dh);
+const BIGNUM *DH_get0_g(const DH *dh);
+const BIGNUM *DH_get0_priv_key(const DH *dh);
+const BIGNUM *DH_get0_pub_key(const DH *dh);
+void DH_clear_flags(DH *dh, int flags);
+int DH_test_flags(const DH *dh, int flags);
+void DH_set_flags(DH *dh, int flags);
+ENGINE *DH_get0_engine(DH *d);
+long DH_get_length(const DH *dh);
+int DH_set_length(DH *dh, long length);
+ +

DESCRIPTION

+ +

A DH object contains the parameters p, q and g. Note that the q parameter is optional. It also contains a public key (pub_key) and (optionally) a private key (priv_key).

+ +

The p, q and g parameters can be obtained by calling DH_get0_pqg(). If the parameters have not yet been set then *p, *q and *g will be set to NULL. Otherwise they are set to pointers to their respective values. These point directly to the internal representations of the values and therefore should not be freed directly. Any of the out parameters p, q, and g can be NULL, in which case no value will be returned for that parameter.

+ +

The p, q and g values can be set by calling DH_set0_pqg() and passing the new values for p, q and g as parameters to the function. Calling this function transfers the memory management of the values to the DH object, and therefore the values that have been passed in should not be freed directly after this function has been called. The q parameter may be NULL.

+ +

To get the public and private key values use the DH_get0_key() function. A pointer to the public key will be stored in *pub_key, and a pointer to the private key will be stored in *priv_key. Either may be NULL if they have not been set yet, although if the private key has been set then the public key must be. The values point to the internal representation of the public key and private key values. This memory should not be freed directly. Any of the out parameters pub_key and priv_key can be NULL, in which case no value will be returned for that parameter.

+ +

The public and private key values can be set using DH_set0_key(). Either parameter may be NULL, which means the corresponding DH field is left untouched. As with DH_set0_pqg() this function transfers the memory management of the key values to the DH object, and therefore they should not be freed directly after this function has been called.

+ +

Any of the values p, q, g, priv_key, and pub_key can also be retrieved separately by the corresponding function DH_get0_p(), DH_get0_q(), DH_get0_g(), DH_get0_priv_key(), and DH_get0_pub_key(), respectively.

+ +

DH_set_flags() sets the flags in the flags parameter on the DH object. Multiple flags can be passed in one go (bitwise ORed together). Any flags that are already set are left set. DH_test_flags() tests to see whether the flags passed in the flags parameter are currently set in the DH object. Multiple flags can be tested in one go. All flags that are currently set are returned, or zero if none of the flags are set. DH_clear_flags() clears the specified flags within the DH object.

+ +

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 it is used, otherwise it is ignored. The length parameter indicates the length of the secret exponent (private key) in bits.

+ +

NOTES

+ +

Values retrieved with DH_get0_key() are owned by the DH object used in the call and may therefore not be passed to DH_set0_key(). If needed, duplicate the received value using BN_dup() and pass the duplicate. The same applies to DH_get0_pqg() and DH_set0_pqg().

+ +

RETURN VALUES

+ +

DH_set0_pqg() and DH_set0_key() return 1 on success or 0 on failure.

+ +

DH_get0_p(), DH_get0_q(), DH_get0_g(), DH_get0_priv_key(), and DH_get0_pub_key() return the respective value, or NULL if it is unset.

+ +

DH_test_flags() returns the current state of the flags in the DH object.

+ +

DH_get0_engine() returns the ENGINE set for the DH object or NULL if no ENGINE has been set.

+ +

DH_get_length() returns the length of the secret exponent (private key) in bits, or zero if no such length has been explicitly set.

+ +

SEE ALSO

+ +

DH_new(3), DH_new(3), DH_generate_parameters(3), DH_generate_key(3), DH_set_method(3), DH_size(3), DH_meth_new(3)

+ +

HISTORY

+ +

The functions described here were added in OpenSSL 1.1.0.

+ +

COPYRIGHT

+ +

Copyright 2016-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DH_get_1024_160.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DH_get_1024_160.html new file mode 100644 index 00000000..f810914f --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DH_get_1024_160.html @@ -0,0 +1,71 @@ + + + + +DH_get_1024_160 + + + + + + + + + + +

NAME

+ +

DH_get_1024_160, DH_get_2048_224, DH_get_2048_256, BN_get0_nist_prime_192, BN_get0_nist_prime_224, BN_get0_nist_prime_256, BN_get0_nist_prime_384, BN_get0_nist_prime_521, BN_get_rfc2409_prime_768, BN_get_rfc2409_prime_1024, BN_get_rfc3526_prime_1536, BN_get_rfc3526_prime_2048, BN_get_rfc3526_prime_3072, BN_get_rfc3526_prime_4096, BN_get_rfc3526_prime_6144, BN_get_rfc3526_prime_8192 - Create standardized public primes or DH pairs

+ +

SYNOPSIS

+ +
#include <openssl/dh.h>
+DH *DH_get_1024_160(void)
+DH *DH_get_2048_224(void)
+DH *DH_get_2048_256(void)
+
+const BIGNUM *BN_get0_nist_prime_192(void)
+const BIGNUM *BN_get0_nist_prime_224(void)
+const BIGNUM *BN_get0_nist_prime_256(void)
+const BIGNUM *BN_get0_nist_prime_384(void)
+const BIGNUM *BN_get0_nist_prime_521(void)
+
+BIGNUM *BN_get_rfc2409_prime_768(BIGNUM *bn)
+BIGNUM *BN_get_rfc2409_prime_1024(BIGNUM *bn)
+BIGNUM *BN_get_rfc3526_prime_1536(BIGNUM *bn)
+BIGNUM *BN_get_rfc3526_prime_2048(BIGNUM *bn)
+BIGNUM *BN_get_rfc3526_prime_3072(BIGNUM *bn)
+BIGNUM *BN_get_rfc3526_prime_4096(BIGNUM *bn)
+BIGNUM *BN_get_rfc3526_prime_6144(BIGNUM *bn)
+BIGNUM *BN_get_rfc3526_prime_8192(BIGNUM *bn)
+ +

DESCRIPTION

+ +

DH_get_1024_160(), DH_get_2048_224(), and DH_get_2048_256() each return a DH object for the IETF RFC 5114 value.

+ +

BN_get0_nist_prime_192(), BN_get0_nist_prime_224(), BN_get0_nist_prime_256(), BN_get0_nist_prime_384(), and BN_get0_nist_prime_521() functions return a BIGNUM for the specific NIST prime curve (e.g., P-256).

+ +

BN_get_rfc2409_prime_768(), BN_get_rfc2409_prime_1024(), BN_get_rfc3526_prime_1536(), BN_get_rfc3526_prime_2048(), BN_get_rfc3526_prime_3072(), BN_get_rfc3526_prime_4096(), BN_get_rfc3526_prime_6144(), and BN_get_rfc3526_prime_8192() functions return a BIGNUM for the specified size from IETF RFC 2409. If bn is not NULL, the BIGNUM will be set into that location as well.

+ +

RETURN VALUES

+ +

Defined above.

+ +

COPYRIGHT

+ +

Copyright 2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DH_meth_new.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DH_meth_new.html new file mode 100644 index 00000000..f06d81b8 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DH_meth_new.html @@ -0,0 +1,135 @@ + + + + +DH_meth_new + + + + + + + + + + +

NAME

+ +

DH_meth_new, DH_meth_free, DH_meth_dup, DH_meth_get0_name, DH_meth_set1_name, DH_meth_get_flags, DH_meth_set_flags, DH_meth_get0_app_data, DH_meth_set0_app_data, DH_meth_get_generate_key, DH_meth_set_generate_key, DH_meth_get_compute_key, DH_meth_set_compute_key, DH_meth_get_bn_mod_exp, DH_meth_set_bn_mod_exp, DH_meth_get_init, DH_meth_set_init, DH_meth_get_finish, DH_meth_set_finish, DH_meth_get_generate_params, DH_meth_set_generate_params - Routines to build up DH methods

+ +

SYNOPSIS

+ +
#include <openssl/dh.h>
+
+DH_METHOD *DH_meth_new(const char *name, int flags);
+
+void DH_meth_free(DH_METHOD *dhm);
+
+DH_METHOD *DH_meth_dup(const DH_METHOD *dhm);
+
+const char *DH_meth_get0_name(const DH_METHOD *dhm);
+int DH_meth_set1_name(DH_METHOD *dhm, const char *name);
+
+int DH_meth_get_flags(const DH_METHOD *dhm);
+int DH_meth_set_flags(DH_METHOD *dhm, int flags);
+
+void *DH_meth_get0_app_data(const DH_METHOD *dhm);
+int DH_meth_set0_app_data(DH_METHOD *dhm, void *app_data);
+
+int (*DH_meth_get_generate_key(const DH_METHOD *dhm))(DH *);
+int DH_meth_set_generate_key(DH_METHOD *dhm, int (*generate_key)(DH *));
+
+int (*DH_meth_get_compute_key(const DH_METHOD *dhm))
+    (unsigned char *key, const BIGNUM *pub_key, DH *dh);
+int DH_meth_set_compute_key(DH_METHOD *dhm,
+    int (*compute_key)(unsigned char *key, const BIGNUM *pub_key, DH *dh));
+
+int (*DH_meth_get_bn_mod_exp(const DH_METHOD *dhm))
+    (const DH *dh, BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
+     const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx);
+int DH_meth_set_bn_mod_exp(DH_METHOD *dhm,
+    int (*bn_mod_exp)(const DH *dh, BIGNUM *r, const BIGNUM *a,
+                      const BIGNUM *p, const BIGNUM *m, BN_CTX *ctx,
+                      BN_MONT_CTX *m_ctx));
+
+int (*DH_meth_get_init(const DH_METHOD *dhm))(DH *);
+int DH_meth_set_init(DH_METHOD *dhm, int (*init)(DH *));
+
+int (*DH_meth_get_finish(const DH_METHOD *dhm))(DH *);
+int DH_meth_set_finish(DH_METHOD *dhm, int (*finish)(DH *));
+
+int (*DH_meth_get_generate_params(const DH_METHOD *dhm))
+    (DH *, int, int, BN_GENCB *);
+int DH_meth_set_generate_params(DH_METHOD *dhm,
+    int (*generate_params)(DH *, int, int, BN_GENCB *));
+ +

DESCRIPTION

+ +

The DH_METHOD type is a structure used for the provision of custom DH implementations. It provides a set of functions used by OpenSSL for the implementation of the various DH capabilities.

+ +

DH_meth_new() creates a new DH_METHOD structure. It should be given a unique name and a set of flags. The name should be a NULL terminated string, which will be duplicated and stored in the DH_METHOD object. It is the callers responsibility to free the original string. The flags will be used during the construction of a new DH object based on this DH_METHOD. Any new DH object will have those flags set by default.

+ +

DH_meth_dup() creates a duplicate copy of the DH_METHOD object passed as a parameter. This might be useful for creating a new DH_METHOD based on an existing one, but with some differences.

+ +

DH_meth_free() destroys a DH_METHOD structure and frees up any memory associated with it.

+ +

DH_meth_get0_name() will return a pointer to the name of this DH_METHOD. This is a pointer to the internal name string and so should not be freed by the caller. DH_meth_set1_name() sets the name of the DH_METHOD to name. The string is duplicated and the copy is stored in the DH_METHOD structure, so the caller remains responsible for freeing the memory associated with the name.

+ +

DH_meth_get_flags() returns the current value of the flags associated with this DH_METHOD. DH_meth_set_flags() provides the ability to set these flags.

+ +

The functions DH_meth_get0_app_data() and DH_meth_set0_app_data() provide the ability to associate implementation specific data with the DH_METHOD. It is the application's responsibility to free this data before the DH_METHOD is freed via a call to DH_meth_free().

+ +

DH_meth_get_generate_key() and DH_meth_set_generate_key() get and set the function used for generating a new DH key pair respectively. This function will be called in response to the application calling DH_generate_key(). The parameter for the function has the same meaning as for DH_generate_key().

+ +

DH_meth_get_compute_key() and DH_meth_set_compute_key() get and set the function used for computing a new DH shared secret respectively. This function will be called in response to the application calling DH_compute_key(). The parameters for the function have the same meaning as for DH_compute_key().

+ +

DH_meth_get_bn_mod_exp() and DH_meth_set_bn_mod_exp() get and set the function used for computing the following value:

+ +
r = a ^ p mod m
+ +

This function will be called by the default OpenSSL function for DH_generate_key(). The result is stored in the r parameter. This function may be NULL unless using the default generate key function, in which case it must be present.

+ +

DH_meth_get_init() and DH_meth_set_init() get and set the function used for creating a new DH instance respectively. This function will be called in response to the application calling DH_new() (if the current default DH_METHOD is this one) or DH_new_method(). The DH_new() and DH_new_method() functions will allocate the memory for the new DH object, and a pointer to this newly allocated structure will be passed as a parameter to the function. This function may be NULL.

+ +

DH_meth_get_finish() and DH_meth_set_finish() get and set the function used for destroying an instance of a DH object respectively. This function will be called in response to the application calling DH_free(). A pointer to the DH to be destroyed is passed as a parameter. The destroy function should be used for DH implementation specific clean up. The memory for the DH itself should not be freed by this function. This function may be NULL.

+ +

DH_meth_get_generate_params() and DH_meth_set_generate_params() get and set the function used for generating DH parameters respectively. This function will be called in response to the application calling DH_generate_parameters_ex() (or DH_generate_parameters()). The parameters for the function have the same meaning as for DH_generate_parameters_ex(). This function may be NULL.

+ +

RETURN VALUES

+ +

DH_meth_new() and DH_meth_dup() return the newly allocated DH_METHOD object or NULL on failure.

+ +

DH_meth_get0_name() and DH_meth_get_flags() return the name and flags associated with the DH_METHOD respectively.

+ +

All other DH_meth_get_*() functions return the appropriate function pointer that has been set in the DH_METHOD, or NULL if no such pointer has yet been set.

+ +

DH_meth_set1_name() and all DH_meth_set_*() functions return 1 on success or 0 on failure.

+ +

SEE ALSO

+ +

DH_new(3), DH_new(3), DH_generate_parameters(3), DH_generate_key(3), DH_set_method(3), DH_size(3), DH_get0_pqg(3)

+ +

HISTORY

+ +

The functions described here were added in OpenSSL 1.1.0.

+ +

COPYRIGHT

+ +

Copyright 2016-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DH_new.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DH_new.html new file mode 100644 index 00000000..336c9cf6 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DH_new.html @@ -0,0 +1,62 @@ + + + + +DH_new + + + + + + + + + + +

NAME

+ +

DH_new, DH_free - allocate and free DH objects

+ +

SYNOPSIS

+ +
#include <openssl/dh.h>
+
+DH* DH_new(void);
+
+void DH_free(DH *dh);
+ +

DESCRIPTION

+ +

DH_new() allocates and initializes a DH structure.

+ +

DH_free() frees the DH structure and its components. The values are erased before the memory is returned to the system. If dh is NULL nothing is done.

+ +

RETURN VALUES

+ +

If the allocation fails, DH_new() returns NULL and sets an error code that can be obtained by ERR_get_error(3). Otherwise it returns a pointer to the newly allocated structure.

+ +

DH_free() returns no value.

+ +

SEE ALSO

+ +

DH_new(3), ERR_get_error(3), DH_generate_parameters(3), DH_generate_key(3)

+ +

COPYRIGHT

+ +

Copyright 2000-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DH_new_by_nid.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DH_new_by_nid.html new file mode 100644 index 00000000..035fd433 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DH_new_by_nid.html @@ -0,0 +1,55 @@ + + + + +DH_new_by_nid + + + + + + + + + + +

NAME

+ +

DH_new_by_nid, DH_get_nid - get or find DH named parameters

+ +

SYNOPSIS

+ +
#include <openssl/dh.h>
+DH *DH_new_by_nid(int nid);
+int *DH_get_nid(const DH *dh);
+ +

DESCRIPTION

+ +

DH_new_by_nid() creates and returns a DH structure containing named parameters nid. Currently nid must be NID_ffdhe2048, NID_ffdhe3072, NID_ffdhe4096, NID_ffdhe6144 or NID_ffdhe8192.

+ +

DH_get_nid() determines if the parameters contained in dh match any named set. It returns the NID corresponding to the matching parameters or NID_undef if there is no match.

+ +

RETURN VALUES

+ +

DH_new_by_nid() returns a set of DH parameters or NULL if an error occurred.

+ +

DH_get_nid() returns the NID of the matching set of parameters or NID_undef if there is no match.

+ +

COPYRIGHT

+ +

Copyright 2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DH_set_method.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DH_set_method.html new file mode 100644 index 00000000..252a6480 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DH_set_method.html @@ -0,0 +1,82 @@ + + + + +DH_set_method + + + + + + + + + + +

NAME

+ +

DH_set_default_method, DH_get_default_method, DH_set_method, DH_new_method, DH_OpenSSL - select DH method

+ +

SYNOPSIS

+ +
#include <openssl/dh.h>
+
+void DH_set_default_method(const DH_METHOD *meth);
+
+const DH_METHOD *DH_get_default_method(void);
+
+int DH_set_method(DH *dh, const DH_METHOD *meth);
+
+DH *DH_new_method(ENGINE *engine);
+
+const DH_METHOD *DH_OpenSSL(void);
+ +

DESCRIPTION

+ +

A DH_METHOD specifies the functions that OpenSSL uses for Diffie-Hellman operations. By modifying the method, alternative implementations such as hardware accelerators may be used. IMPORTANT: See the NOTES section for important information about how these DH API functions are affected by the use of ENGINE API calls.

+ +

Initially, the default DH_METHOD is the OpenSSL internal implementation, as returned by DH_OpenSSL().

+ +

DH_set_default_method() makes meth the default method for all DH structures created later. NB: This is true only whilst no ENGINE has been set as a default for DH, so this function is no longer recommended. This function is not thread-safe and should not be called at the same time as other OpenSSL functions.

+ +

DH_get_default_method() returns a pointer to the current default DH_METHOD. However, the meaningfulness of this result is dependent on whether the ENGINE API is being used, so this function is no longer recommended.

+ +

DH_set_method() selects meth to perform all operations using the key 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 hardware-protected keys), and in such cases attempting to change the DH_METHOD for the key can have unexpected results.

+ +

DH_new_method() allocates and initializes a DH structure so that engine will be used for the DH operations. If engine is NULL, the default ENGINE for DH operations is used, and if no default ENGINE is set, the DH_METHOD controlled by DH_set_default_method() is used.

+ +

A new DH_METHOD object may be constructed using DH_meth_new() (see DH_meth_new(3)).

+ +

RETURN VALUES

+ +

DH_OpenSSL() and DH_get_default_method() return pointers to the respective DH_METHODs.

+ +

DH_set_default_method() returns no value.

+ +

DH_set_method() returns non-zero if the provided meth was successfully set as the method for dh (including unloading the ENGINE handle if the previous method was supplied by an ENGINE).

+ +

DH_new_method() returns NULL and sets an error code that can be obtained by ERR_get_error(3) if the allocation fails. Otherwise it returns a pointer to the newly allocated structure.

+ +

SEE ALSO

+ +

DH_new(3), DH_new(3), DH_meth_new(3)

+ +

COPYRIGHT

+ +

Copyright 2000-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DH_size.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DH_size.html new file mode 100644 index 00000000..8bb1aa3b --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DH_size.html @@ -0,0 +1,75 @@ + + + + +DH_size + + + + + + + + + + +

NAME

+ +

DH_size, DH_bits, DH_security_bits - get Diffie-Hellman prime size and security bits

+ +

SYNOPSIS

+ +
#include <openssl/dh.h>
+
+int DH_size(const DH *dh);
+
+int DH_bits(const DH *dh);
+
+int DH_security_bits(const DH *dh);
+ +

DESCRIPTION

+ +

DH_size() returns the Diffie-Hellman prime size in bytes. It can be used to determine how much memory must be allocated for the shared secret computed by DH_compute_key(3).

+ +

DH_bits() returns the number of significant bits.

+ +

dh and dh->p must not be NULL.

+ +

DH_security_bits() returns the number of security bits of the given dh key. See BN_security_bits(3).

+ +

RETURN VALUES

+ +

DH_size() returns the prime size of Diffie-Hellman in bytes.

+ +

DH_bits() returns the number of bits in the key.

+ +

DH_security_bits() returns the number of security bits.

+ +

SEE ALSO

+ +

DH_new(3), DH_generate_key(3), BN_num_bits(3)

+ +

HISTORY

+ +

The DH_bits() function was added in OpenSSL 1.1.0.

+ +

COPYRIGHT

+ +

Copyright 2000-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DSA_SIG_new.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DSA_SIG_new.html new file mode 100644 index 00000000..bcb1bc84 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DSA_SIG_new.html @@ -0,0 +1,69 @@ + + + + +DSA_SIG_new + + + + + + + + + + +

NAME

+ +

DSA_SIG_get0, DSA_SIG_set0, DSA_SIG_new, DSA_SIG_free - allocate and free DSA signature objects

+ +

SYNOPSIS

+ +
#include <openssl/dsa.h>
+
+DSA_SIG *DSA_SIG_new(void);
+void DSA_SIG_free(DSA_SIG *a);
+void DSA_SIG_get0(const DSA_SIG *sig, const BIGNUM **pr, const BIGNUM **ps);
+int DSA_SIG_set0(DSA_SIG *sig, BIGNUM *r, BIGNUM *s);
+ +

DESCRIPTION

+ +

DSA_SIG_new() allocates an empty DSA_SIG structure.

+ +

DSA_SIG_free() frees the DSA_SIG structure and its components. The values are erased before the memory is returned to the system.

+ +

DSA_SIG_get0() returns internal pointers to the r and s values contained in sig.

+ +

The r and s values can be set by calling DSA_SIG_set0() and passing the new values for r and s as parameters to the function. Calling this function transfers the memory management of the values to the DSA_SIG object, and therefore the values that have been passed in should not be freed directly after this function has been called.

+ +

RETURN VALUES

+ +

If the allocation fails, DSA_SIG_new() returns NULL and sets an error code that can be obtained by ERR_get_error(3). Otherwise it returns a pointer to the newly allocated structure.

+ +

DSA_SIG_free() returns no value.

+ +

DSA_SIG_set0() returns 1 on success or 0 on failure.

+ +

SEE ALSO

+ +

DSA_new(3), ERR_get_error(3), DSA_do_sign(3)

+ +

COPYRIGHT

+ +

Copyright 2000-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DSA_do_sign.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DSA_do_sign.html new file mode 100644 index 00000000..62e99a71 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DSA_do_sign.html @@ -0,0 +1,63 @@ + + + + +DSA_do_sign + + + + + + + + + + +

NAME

+ +

DSA_do_sign, DSA_do_verify - raw DSA signature operations

+ +

SYNOPSIS

+ +
#include <openssl/dsa.h>
+
+DSA_SIG *DSA_do_sign(const unsigned char *dgst, int dlen, DSA *dsa);
+
+int DSA_do_verify(const unsigned char *dgst, int dgst_len,
+                  DSA_SIG *sig, DSA *dsa);
+ +

DESCRIPTION

+ +

DSA_do_sign() computes a digital signature on the len byte message digest dgst using the private key dsa and returns it in a newly allocated DSA_SIG structure.

+ +

DSA_sign_setup(3) may be used to precompute part of the signing operation in case signature generation is time-critical.

+ +

DSA_do_verify() verifies that the signature sig matches a given message digest dgst of size len. dsa is the signer's public key.

+ +

RETURN VALUES

+ +

DSA_do_sign() returns the signature, NULL on error. DSA_do_verify() returns 1 for a valid signature, 0 for an incorrect signature and -1 on error. The error codes can be obtained by ERR_get_error(3).

+ +

SEE ALSO

+ +

DSA_new(3), ERR_get_error(3), RAND_bytes(3), DSA_SIG_new(3), DSA_sign(3)

+ +

COPYRIGHT

+ +

Copyright 2000-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DSA_dup_DH.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DSA_dup_DH.html new file mode 100644 index 00000000..f18c70e1 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DSA_dup_DH.html @@ -0,0 +1,61 @@ + + + + +DSA_dup_DH + + + + + + + + + + +

NAME

+ +

DSA_dup_DH - create a DH structure out of DSA structure

+ +

SYNOPSIS

+ +
#include <openssl/dsa.h>
+
+DH *DSA_dup_DH(const DSA *r);
+ +

DESCRIPTION

+ +

DSA_dup_DH() duplicates DSA parameters/keys as DH parameters/keys. q is lost during that conversion, but the resulting DH parameters contain its length.

+ +

RETURN VALUES

+ +

DSA_dup_DH() returns the new DH structure, and NULL on error. The error codes can be obtained by ERR_get_error(3).

+ +

NOTE

+ +

Be careful to avoid small subgroup attacks when using this.

+ +

SEE ALSO

+ +

DH_new(3), DSA_new(3), ERR_get_error(3)

+ +

COPYRIGHT

+ +

Copyright 2000-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DSA_generate_key.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DSA_generate_key.html new file mode 100644 index 00000000..e535d8d0 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DSA_generate_key.html @@ -0,0 +1,58 @@ + + + + +DSA_generate_key + + + + + + + + + + +

NAME

+ +

DSA_generate_key - generate DSA key pair

+ +

SYNOPSIS

+ +
#include <openssl/dsa.h>
+
+int DSA_generate_key(DSA *a);
+ +

DESCRIPTION

+ +

DSA_generate_key() expects a to contain DSA parameters. It generates a new key pair and stores it in a->pub_key and a->priv_key.

+ +

The random generator must be seeded prior to calling DSA_generate_key(). If the automatic seeding or reseeding of the OpenSSL CSPRNG fails due to external circumstances (see RAND(7)), the operation will fail.

+ +

RETURN VALUES

+ +

DSA_generate_key() returns 1 on success, 0 otherwise. The error codes can be obtained by ERR_get_error(3).

+ +

SEE ALSO

+ +

DSA_new(3), ERR_get_error(3), RAND_bytes(3), DSA_generate_parameters_ex(3)

+ +

COPYRIGHT

+ +

Copyright 2000-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DSA_generate_parameters.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DSA_generate_parameters.html new file mode 100644 index 00000000..301678a5 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DSA_generate_parameters.html @@ -0,0 +1,114 @@ + + + + +DSA_generate_parameters + + + + + + + + + + +

NAME

+ +

DSA_generate_parameters_ex, DSA_generate_parameters - generate DSA parameters

+ +

SYNOPSIS

+ +
#include <openssl/dsa.h>
+
+int DSA_generate_parameters_ex(DSA *dsa, int bits,
+                               const unsigned char *seed, int seed_len,
+                               int *counter_ret, unsigned long *h_ret,
+                               BN_GENCB *cb);
+ +

Deprecated:

+ +
#if OPENSSL_API_COMPAT < 0x00908000L
+DSA *DSA_generate_parameters(int bits, unsigned char *seed, int seed_len,
+                             int *counter_ret, unsigned long *h_ret,
+                             void (*callback)(int, int, void *), void *cb_arg);
+#endif
+ +

DESCRIPTION

+ +

DSA_generate_parameters_ex() generates primes p and q and a generator g for use in the DSA and stores the result in dsa.

+ +

bits is the length of the prime p to be generated. For lengths under 2048 bits, the length of q is 160 bits; for lengths greater than or equal to 2048 bits, the length of q is set to 256 bits.

+ +

If seed is NULL, the primes will be generated at random. If seed_len is less than the length of q, an error is returned.

+ +

DSA_generate_parameters_ex() places the iteration count in *counter_ret and a counter used for finding a generator in *h_ret, unless these are NULL.

+ +

A callback function may be used to provide feedback about the progress of the key generation. If cb is not NULL, it will be called as shown below. For information on the BN_GENCB structure and the BN_GENCB_call function discussed below, refer to BN_generate_prime(3).

+ +

DSA_generate_prime() is similar to DSA_generate_prime_ex() but expects an old-style callback function; see BN_generate_prime(3) for information on the old-style callback.

+ +
    + +
  • When a candidate for q is generated, BN_GENCB_call(cb, 0, m++) is called (m is 0 for the first candidate).

    + +
  • +
  • When a candidate for q has passed a test by trial division, BN_GENCB_call(cb, 1, -1) is called. While a candidate for q is tested by Miller-Rabin primality tests, BN_GENCB_call(cb, 1, i) is called in the outer loop (once for each witness that confirms that the candidate may be prime); i is the loop counter (starting at 0).

    + +
  • +
  • When a prime q has been found, BN_GENCB_call(cb, 2, 0) and BN_GENCB_call(cb, 3, 0) are called.

    + +
  • +
  • Before a candidate for p (other than the first) is generated and tested, BN_GENCB_call(cb, 0, counter) is called.

    + +
  • +
  • When a candidate for p has passed the test by trial division, BN_GENCB_call(cb, 1, -1) is called. While it is tested by the Miller-Rabin primality test, BN_GENCB_call(cb, 1, i) is called in the outer loop (once for each witness that confirms that the candidate may be prime). i is the loop counter (starting at 0).

    + +
  • +
  • When p has been found, BN_GENCB_call(cb, 2, 1) is called.

    + +
  • +
  • When the generator has been found, BN_GENCB_call(cb, 3, 1) is called.

    + +
  • +
+ +

RETURN VALUES

+ +

DSA_generate_parameters_ex() returns a 1 on success, or 0 otherwise. The error codes can be obtained by ERR_get_error(3).

+ +

DSA_generate_parameters() returns a pointer to the DSA structure or NULL if the parameter generation fails.

+ +

BUGS

+ +

Seed lengths greater than 20 are not supported.

+ +

SEE ALSO

+ +

DSA_new(3), ERR_get_error(3), RAND_bytes(3), DSA_free(3), BN_generate_prime(3)

+ +

HISTORY

+ +

DSA_generate_parameters() was deprecated in OpenSSL 0.9.8; use DSA_generate_parameters_ex() instead.

+ +

COPYRIGHT

+ +

Copyright 2000-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DSA_get0_pqg.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DSA_get0_pqg.html new file mode 100644 index 00000000..10a918fe --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DSA_get0_pqg.html @@ -0,0 +1,98 @@ + + + + +DSA_get0_pqg + + + + + + + + + + +

NAME

+ +

DSA_get0_pqg, DSA_set0_pqg, DSA_get0_key, DSA_set0_key, DSA_get0_p, DSA_get0_q, DSA_get0_g, DSA_get0_pub_key, DSA_get0_priv_key, DSA_clear_flags, DSA_test_flags, DSA_set_flags, DSA_get0_engine - Routines for getting and setting data in a DSA object

+ +

SYNOPSIS

+ +
#include <openssl/dsa.h>
+
+void DSA_get0_pqg(const DSA *d,
+                  const BIGNUM **p, const BIGNUM **q, const BIGNUM **g);
+int DSA_set0_pqg(DSA *d, BIGNUM *p, BIGNUM *q, BIGNUM *g);
+void DSA_get0_key(const DSA *d,
+                  const BIGNUM **pub_key, const BIGNUM **priv_key);
+int DSA_set0_key(DSA *d, BIGNUM *pub_key, BIGNUM *priv_key);
+const BIGNUM *DSA_get0_p(const DSA *d);
+const BIGNUM *DSA_get0_q(const DSA *d);
+const BIGNUM *DSA_get0_g(const DSA *d);
+const BIGNUM *DSA_get0_pub_key(const DSA *d);
+const BIGNUM *DSA_get0_priv_key(const DSA *d);
+void DSA_clear_flags(DSA *d, int flags);
+int DSA_test_flags(const DSA *d, int flags);
+void DSA_set_flags(DSA *d, int flags);
+ENGINE *DSA_get0_engine(DSA *d);
+ +

DESCRIPTION

+ +

A DSA object contains the parameters p, q and g. It also contains a public key (pub_key) and (optionally) a private key (priv_key).

+ +

The p, q and g parameters can be obtained by calling DSA_get0_pqg(). If the parameters have not yet been set then *p, *q and *g will be set to NULL. Otherwise they are set to pointers to their respective values. These point directly to the internal representations of the values and therefore should not be freed directly.

+ +

The p, q and g values can be set by calling DSA_set0_pqg() and passing the new values for p, q and g as parameters to the function. Calling this function transfers the memory management of the values to the DSA object, and therefore the values that have been passed in should not be freed directly after this function has been called.

+ +

To get the public and private key values use the DSA_get0_key() function. A pointer to the public key will be stored in *pub_key, and a pointer to the private key will be stored in *priv_key. Either may be NULL if they have not been set yet, although if the private key has been set then the public key must be. The values point to the internal representation of the public key and private key values. This memory should not be freed directly.

+ +

The public and private key values can be set using DSA_set0_key(). The public key must be non-NULL the first time this function is called on a given DSA object. The private key may be NULL. On subsequent calls, either may be NULL, which means the corresponding DSA field is left untouched. As for DSA_set0_pqg() this function transfers the memory management of the key values to the DSA object, and therefore they should not be freed directly after this function has been called.

+ +

Any of the values p, q, g, priv_key, and pub_key can also be retrieved separately by the corresponding function DSA_get0_p(), DSA_get0_q(), DSA_get0_g(), DSA_get0_priv_key(), and DSA_get0_pub_key(), respectively.

+ +

DSA_set_flags() sets the flags in the flags parameter on the DSA object. Multiple flags can be passed in one go (bitwise ORed together). Any flags that are already set are left set. DSA_test_flags() tests to see whether the flags passed in the flags parameter are currently set in the DSA object. Multiple flags can be tested in one go. All flags that are currently set are returned, or zero if none of the flags are set. DSA_clear_flags() clears the specified flags within the DSA object.

+ +

DSA_get0_engine() returns a handle to the ENGINE that has been set for this DSA object, or NULL if no such ENGINE has been set.

+ +

NOTES

+ +

Values retrieved with DSA_get0_key() are owned by the DSA object used in the call and may therefore not be passed to DSA_set0_key(). If needed, duplicate the received value using BN_dup() and pass the duplicate. The same applies to DSA_get0_pqg() and DSA_set0_pqg().

+ +

RETURN VALUES

+ +

DSA_set0_pqg() and DSA_set0_key() return 1 on success or 0 on failure.

+ +

DSA_test_flags() returns the current state of the flags in the DSA object.

+ +

DSA_get0_engine() returns the ENGINE set for the DSA object or NULL if no ENGINE has been set.

+ +

SEE ALSO

+ +

DSA_new(3), DSA_new(3), DSA_generate_parameters(3), DSA_generate_key(3), DSA_dup_DH(3), DSA_do_sign(3), DSA_set_method(3), DSA_SIG_new(3), DSA_sign(3), DSA_size(3), DSA_meth_new(3)

+ +

HISTORY

+ +

The functions described here were added in OpenSSL 1.1.0.

+ +

COPYRIGHT

+ +

Copyright 2016-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DSA_meth_new.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DSA_meth_new.html new file mode 100644 index 00000000..50ad2d3b --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DSA_meth_new.html @@ -0,0 +1,171 @@ + + + + +DSA_meth_new + + + + + + + + + + +

NAME

+ +

DSA_meth_new, DSA_meth_free, DSA_meth_dup, DSA_meth_get0_name, DSA_meth_set1_name, DSA_meth_get_flags, DSA_meth_set_flags, DSA_meth_get0_app_data, DSA_meth_set0_app_data, DSA_meth_get_sign, DSA_meth_set_sign, DSA_meth_get_sign_setup, DSA_meth_set_sign_setup, DSA_meth_get_verify, DSA_meth_set_verify, DSA_meth_get_mod_exp, DSA_meth_set_mod_exp, DSA_meth_get_bn_mod_exp, DSA_meth_set_bn_mod_exp, DSA_meth_get_init, DSA_meth_set_init, DSA_meth_get_finish, DSA_meth_set_finish, DSA_meth_get_paramgen, DSA_meth_set_paramgen, DSA_meth_get_keygen, DSA_meth_set_keygen - Routines to build up DSA methods

+ +

SYNOPSIS

+ +
#include <openssl/dsa.h>
+
+DSA_METHOD *DSA_meth_new(const char *name, int flags);
+
+void DSA_meth_free(DSA_METHOD *dsam);
+
+DSA_METHOD *DSA_meth_dup(const DSA_METHOD *meth);
+
+const char *DSA_meth_get0_name(const DSA_METHOD *dsam);
+int DSA_meth_set1_name(DSA_METHOD *dsam, const char *name);
+
+int DSA_meth_get_flags(const DSA_METHOD *dsam);
+int DSA_meth_set_flags(DSA_METHOD *dsam, int flags);
+
+void *DSA_meth_get0_app_data(const DSA_METHOD *dsam);
+int DSA_meth_set0_app_data(DSA_METHOD *dsam, void *app_data);
+
+DSA_SIG *(*DSA_meth_get_sign(const DSA_METHOD *dsam))(const unsigned char *,
+                                                      int, DSA *);
+int DSA_meth_set_sign(DSA_METHOD *dsam, DSA_SIG *(*sign)(const unsigned char *,
+                                                         int, DSA *));
+
+int (*DSA_meth_get_sign_setup(const DSA_METHOD *dsam))(DSA *, BN_CTX *,$
+                                                       BIGNUM **, BIGNUM **);
+int DSA_meth_set_sign_setup(DSA_METHOD *dsam, int (*sign_setup)(DSA *, BN_CTX *,
+                                                                BIGNUM **, BIGNUM **));
+
+int (*DSA_meth_get_verify(const DSA_METHOD *dsam))(const unsigned char *,
+                                                   int, DSA_SIG *, DSA *);
+int DSA_meth_set_verify(DSA_METHOD *dsam, int (*verify)(const unsigned char *,
+                                                        int, DSA_SIG *, DSA *));
+
+int (*DSA_meth_get_mod_exp(const DSA_METHOD *dsam))(DSA *dsa, BIGNUM *rr, BIGNUM *a1,
+                                                    BIGNUM *p1, BIGNUM *a2, BIGNUM *p2,
+                                                    BIGNUM *m, BN_CTX *ctx,
+                                                    BN_MONT_CTX *in_mont);
+int DSA_meth_set_mod_exp(DSA_METHOD *dsam, int (*mod_exp)(DSA *dsa, BIGNUM *rr,
+                                                          BIGNUM *a1, BIGNUM *p1,
+                                                          BIGNUM *a2, BIGNUM *p2,
+                                                          BIGNUM *m, BN_CTX *ctx,
+                                                          BN_MONT_CTX *mont));
+
+int (*DSA_meth_get_bn_mod_exp(const DSA_METHOD *dsam))(DSA *dsa, BIGNUM *r, BIGNUM *a,
+                                                       const BIGNUM *p, const BIGNUM *m,
+                                                       BN_CTX *ctx, BN_MONT_CTX *mont);
+int DSA_meth_set_bn_mod_exp(DSA_METHOD *dsam, int (*bn_mod_exp)(DSA *dsa,
+                                                                BIGNUM *r,
+                                                                BIGNUM *a,
+                                                                const BIGNUM *p,
+                                                                const BIGNUM *m,
+                                                                BN_CTX *ctx,
+                                                                BN_MONT_CTX *mont));
+
+int (*DSA_meth_get_init(const DSA_METHOD *dsam))(DSA *);
+int DSA_meth_set_init(DSA_METHOD *dsam, int (*init)(DSA *));
+
+int (*DSA_meth_get_finish(const DSA_METHOD *dsam))(DSA *);
+int DSA_meth_set_finish(DSA_METHOD *dsam, int (*finish)(DSA *));
+
+int (*DSA_meth_get_paramgen(const DSA_METHOD *dsam))(DSA *, int,
+                                                     const unsigned char *,
+                                                     int, int *, unsigned long *,
+                                                     BN_GENCB *);
+int DSA_meth_set_paramgen(DSA_METHOD *dsam,
+                          int (*paramgen)(DSA *, int, const unsigned char *,
+                                          int, int *, unsigned long *, BN_GENCB *));
+
+int (*DSA_meth_get_keygen(const DSA_METHOD *dsam))(DSA *);
+int DSA_meth_set_keygen(DSA_METHOD *dsam, int (*keygen)(DSA *));
+ +

DESCRIPTION

+ +

The DSA_METHOD type is a structure used for the provision of custom DSA implementations. It provides a set of functions used by OpenSSL for the implementation of the various DSA capabilities. See the dsa page for more information.

+ +

DSA_meth_new() creates a new DSA_METHOD structure. It should be given a unique name and a set of flags. The name should be a NULL terminated string, which will be duplicated and stored in the DSA_METHOD object. It is the callers responsibility to free the original string. The flags will be used during the construction of a new DSA object based on this DSA_METHOD. Any new DSA object will have those flags set by default.

+ +

DSA_meth_dup() creates a duplicate copy of the DSA_METHOD object passed as a parameter. This might be useful for creating a new DSA_METHOD based on an existing one, but with some differences.

+ +

DSA_meth_free() destroys a DSA_METHOD structure and frees up any memory associated with it.

+ +

DSA_meth_get0_name() will return a pointer to the name of this DSA_METHOD. This is a pointer to the internal name string and so should not be freed by the caller. DSA_meth_set1_name() sets the name of the DSA_METHOD to name. The string is duplicated and the copy is stored in the DSA_METHOD structure, so the caller remains responsible for freeing the memory associated with the name.

+ +

DSA_meth_get_flags() returns the current value of the flags associated with this DSA_METHOD. DSA_meth_set_flags() provides the ability to set these flags.

+ +

The functions DSA_meth_get0_app_data() and DSA_meth_set0_app_data() provide the ability to associate implementation specific data with the DSA_METHOD. It is the application's responsibility to free this data before the DSA_METHOD is freed via a call to DSA_meth_free().

+ +

DSA_meth_get_sign() and DSA_meth_set_sign() get and set the function used for creating a DSA signature respectively. This function will be called in response to the application calling DSA_do_sign() (or DSA_sign()). The parameters for the function have the same meaning as for DSA_do_sign().

+ +

DSA_meth_get_sign_setup() and DSA_meth_set_sign_setup() get and set the function used for precalculating the DSA signature values k^-1 and r. This function will be called in response to the application calling DSA_sign_setup(). The parameters for the function have the same meaning as for DSA_sign_setup().

+ +

DSA_meth_get_verify() and DSA_meth_set_verify() get and set the function used for verifying a DSA signature respectively. This function will be called in response to the application calling DSA_do_verify() (or DSA_verify()). The parameters for the function have the same meaning as for DSA_do_verify().

+ +

DSA_meth_get_mod_exp() and DSA_meth_set_mod_exp() get and set the function used for computing the following value:

+ +
rr = a1^p1 * a2^p2 mod m
+ +

This function will be called by the default OpenSSL method during verification of a DSA signature. The result is stored in the rr parameter. This function may be NULL.

+ +

DSA_meth_get_bn_mod_exp() and DSA_meth_set_bn_mod_exp() get and set the function used for computing the following value:

+ +
r = a ^ p mod m
+ +

This function will be called by the default OpenSSL function for DSA_sign_setup(). The result is stored in the r parameter. This function may be NULL.

+ +

DSA_meth_get_init() and DSA_meth_set_init() get and set the function used for creating a new DSA instance respectively. This function will be called in response to the application calling DSA_new() (if the current default DSA_METHOD is this one) or DSA_new_method(). The DSA_new() and DSA_new_method() functions will allocate the memory for the new DSA object, and a pointer to this newly allocated structure will be passed as a parameter to the function. This function may be NULL.

+ +

DSA_meth_get_finish() and DSA_meth_set_finish() get and set the function used for destroying an instance of a DSA object respectively. This function will be called in response to the application calling DSA_free(). A pointer to the DSA to be destroyed is passed as a parameter. The destroy function should be used for DSA implementation specific clean up. The memory for the DSA itself should not be freed by this function. This function may be NULL.

+ +

DSA_meth_get_paramgen() and DSA_meth_set_paramgen() get and set the function used for generating DSA parameters respectively. This function will be called in response to the application calling DSA_generate_parameters_ex() (or DSA_generate_parameters()). The parameters for the function have the same meaning as for DSA_generate_parameters_ex().

+ +

DSA_meth_get_keygen() and DSA_meth_set_keygen() get and set the function used for generating a new DSA key pair respectively. This function will be called in response to the application calling DSA_generate_key(). The parameter for the function has the same meaning as for DSA_generate_key().

+ +

RETURN VALUES

+ +

DSA_meth_new() and DSA_meth_dup() return the newly allocated DSA_METHOD object or NULL on failure.

+ +

DSA_meth_get0_name() and DSA_meth_get_flags() return the name and flags associated with the DSA_METHOD respectively.

+ +

All other DSA_meth_get_*() functions return the appropriate function pointer that has been set in the DSA_METHOD, or NULL if no such pointer has yet been set.

+ +

DSA_meth_set1_name() and all DSA_meth_set_*() functions return 1 on success or 0 on failure.

+ +

SEE ALSO

+ +

DSA_new(3), DSA_new(3), DSA_generate_parameters(3), DSA_generate_key(3), DSA_dup_DH(3), DSA_do_sign(3), DSA_set_method(3), DSA_SIG_new(3), DSA_sign(3), DSA_size(3), DSA_get0_pqg(3)

+ +

HISTORY

+ +

The functions described here were added in OpenSSL 1.1.0.

+ +

COPYRIGHT

+ +

Copyright 2016-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DSA_new.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DSA_new.html new file mode 100644 index 00000000..2f57958d --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DSA_new.html @@ -0,0 +1,62 @@ + + + + +DSA_new + + + + + + + + + + +

NAME

+ +

DSA_new, DSA_free - allocate and free DSA objects

+ +

SYNOPSIS

+ +
#include <openssl/dsa.h>
+
+DSA* DSA_new(void);
+
+void DSA_free(DSA *dsa);
+ +

DESCRIPTION

+ +

DSA_new() allocates and initializes a DSA structure. It is equivalent to calling DSA_new_method(NULL).

+ +

DSA_free() frees the DSA structure and its components. The values are erased before the memory is returned to the system. If dsa is NULL nothing is done.

+ +

RETURN VALUES

+ +

If the allocation fails, DSA_new() returns NULL and sets an error code that can be obtained by ERR_get_error(3). Otherwise it returns a pointer to the newly allocated structure.

+ +

DSA_free() returns no value.

+ +

SEE ALSO

+ +

DSA_new(3), ERR_get_error(3), DSA_generate_parameters(3), DSA_generate_key(3)

+ +

COPYRIGHT

+ +

Copyright 2000-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DSA_set_method.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DSA_set_method.html new file mode 100644 index 00000000..35e36fd6 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DSA_set_method.html @@ -0,0 +1,80 @@ + + + + +DSA_set_method + + + + + + + + + + +

NAME

+ +

DSA_set_default_method, DSA_get_default_method, DSA_set_method, DSA_new_method, DSA_OpenSSL - select DSA method

+ +

SYNOPSIS

+ +
#include <openssl/dsa.h>
+
+void DSA_set_default_method(const DSA_METHOD *meth);
+
+const DSA_METHOD *DSA_get_default_method(void);
+
+int DSA_set_method(DSA *dsa, const DSA_METHOD *meth);
+
+DSA *DSA_new_method(ENGINE *engine);
+
+DSA_METHOD *DSA_OpenSSL(void);
+ +

DESCRIPTION

+ +

A DSA_METHOD specifies the functions that OpenSSL uses for DSA operations. By modifying the method, alternative implementations such as hardware accelerators may be used. IMPORTANT: See the NOTES section for important information about how these DSA API functions are affected by the use of ENGINE API calls.

+ +

Initially, the default DSA_METHOD is the OpenSSL internal implementation, as returned by DSA_OpenSSL().

+ +

DSA_set_default_method() makes meth the default method for all DSA structures created later. NB: This is true only whilst no ENGINE has been set as a default for DSA, so this function is no longer recommended. This function is not thread-safe and should not be called at the same time as other OpenSSL functions.

+ +

DSA_get_default_method() returns a pointer to the current default DSA_METHOD. However, the meaningfulness of this result is dependent on whether the ENGINE API is being used, so this function is no longer recommended.

+ +

DSA_set_method() selects meth to perform all operations using the key 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 that supports embedded hardware-protected keys), and in such cases attempting to change the DSA_METHOD for the key can have unexpected results. See DSA_meth_new for information on constructing custom DSA_METHOD objects;

+ +

DSA_new_method() allocates and initializes a DSA structure so that engine will be used for the DSA operations. If engine is NULL, the default engine for DSA operations is used, and if no default ENGINE is set, the DSA_METHOD controlled by DSA_set_default_method() is used.

+ +

RETURN VALUES

+ +

DSA_OpenSSL() and DSA_get_default_method() return pointers to the respective DSA_METHODs.

+ +

DSA_set_default_method() returns no value.

+ +

DSA_set_method() returns non-zero if the provided meth was successfully set as the method for dsa (including unloading the ENGINE handle if the previous method was supplied by an ENGINE).

+ +

DSA_new_method() returns NULL and sets an error code that can be obtained by ERR_get_error(3) if the allocation fails. Otherwise it returns a pointer to the newly allocated structure.

+ +

SEE ALSO

+ +

DSA_new(3), DSA_new(3), DSA_meth_new(3)

+ +

COPYRIGHT

+ +

Copyright 2000-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DSA_sign.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DSA_sign.html new file mode 100644 index 00000000..f79dcb70 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DSA_sign.html @@ -0,0 +1,75 @@ + + + + +DSA_sign + + + + + + + + + + +

NAME

+ +

DSA_sign, DSA_sign_setup, DSA_verify - DSA signatures

+ +

SYNOPSIS

+ +
#include <openssl/dsa.h>
+
+int DSA_sign(int type, const unsigned char *dgst, int len,
+             unsigned char *sigret, unsigned int *siglen, DSA *dsa);
+
+int DSA_sign_setup(DSA *dsa, BN_CTX *ctx, BIGNUM **kinvp, BIGNUM **rp);
+
+int DSA_verify(int type, const unsigned char *dgst, int len,
+               unsigned char *sigbuf, int siglen, DSA *dsa);
+ +

DESCRIPTION

+ +

DSA_sign() computes a digital signature on the len byte message digest dgst using the private key dsa and places its ASN.1 DER encoding at sigret. The length of the signature is places in *siglen. sigret must point to DSA_size(dsa) bytes of memory.

+ +

DSA_sign_setup() is defined only for backward binary compatibility and should not be used. Since OpenSSL 1.1.0 the DSA type is opaque and the output of DSA_sign_setup() cannot be used anyway: calling this function will only cause overhead, and does not affect the actual signature (pre-)computation.

+ +

DSA_verify() verifies that the signature sigbuf of size siglen matches a given message digest dgst of size len. dsa is the signer's public key.

+ +

The type parameter is ignored.

+ +

The random generator must be seeded when DSA_sign() (or DSA_sign_setup()) is called. If the automatic seeding or reseeding of the OpenSSL CSPRNG fails due to external circumstances (see RAND(7)), the operation will fail.

+ +

RETURN VALUES

+ +

DSA_sign() and DSA_sign_setup() return 1 on success, 0 on error. DSA_verify() returns 1 for a valid signature, 0 for an incorrect signature and -1 on error. The error codes can be obtained by ERR_get_error(3).

+ +

CONFORMING TO

+ +

US Federal Information Processing Standard FIPS 186 (Digital Signature Standard, DSS), ANSI X9.30

+ +

SEE ALSO

+ +

DSA_new(3), ERR_get_error(3), RAND_bytes(3), DSA_do_sign(3), RAND(7)

+ +

COPYRIGHT

+ +

Copyright 2000-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DSA_size.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DSA_size.html new file mode 100644 index 00000000..241aa9e5 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DSA_size.html @@ -0,0 +1,66 @@ + + + + +DSA_size + + + + + + + + + + +

NAME

+ +

DSA_size, DSA_bits, DSA_security_bits - get DSA signature size, key bits or security bits

+ +

SYNOPSIS

+ +
#include <openssl/dsa.h>
+
+int DSA_size(const DSA *dsa);
+int DSA_bits(const DSA *dsa);
+int DSA_security_bits(const DSA *dsa);
+ +

DESCRIPTION

+ +

DSA_size() returns the maximum size of an ASN.1 encoded DSA signature for key dsa in bytes. It can be used to determine how much memory must be allocated for a DSA signature.

+ +

dsa->q must not be NULL.

+ +

DSA_bits() returns the number of bits in key dsa: this is the number of bits in the p parameter.

+ +

DSA_security_bits() returns the number of security bits of the given dsa key. See BN_security_bits(3).

+ +

RETURN VALUES

+ +

DSA_size() returns the signature size in bytes.

+ +

DSA_bits() returns the number of bits in the key.

+ +

SEE ALSO

+ +

DSA_new(3), DSA_sign(3)

+ +

COPYRIGHT

+ +

Copyright 2000-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DTLS_get_data_mtu.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DTLS_get_data_mtu.html new file mode 100644 index 00000000..6005a6d6 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DTLS_get_data_mtu.html @@ -0,0 +1,56 @@ + + + + +DTLS_get_data_mtu + + + + + + + + + + +

NAME

+ +

DTLS_get_data_mtu - Get maximum data payload size

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+size_t DTLS_get_data_mtu(const SSL *ssl);
+ +

DESCRIPTION

+ +

This function obtains the maximum data payload size for the established DTLS connection ssl, based on the DTLS record MTU and the overhead of the DTLS record header, encryption and authentication currently in use.

+ +

RETURN VALUES

+ +

Returns the maximum data payload size on success, or 0 on failure.

+ +

HISTORY

+ +

The DTLS_get_data_mtu() function was added in OpenSSL 1.1.1.

+ +

COPYRIGHT

+ +

Copyright 2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DTLS_set_timer_cb.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DTLS_set_timer_cb.html new file mode 100644 index 00000000..3289503b --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DTLS_set_timer_cb.html @@ -0,0 +1,58 @@ + + + + +DTLS_set_timer_cb + + + + + + + + + + +

NAME

+ +

DTLS_timer_cb, DTLS_set_timer_cb - Set callback for controlling DTLS timer duration

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+typedef unsigned int (*DTLS_timer_cb)(SSL *s, unsigned int timer_us);
+
+void DTLS_set_timer_cb(SSL *s, DTLS_timer_cb cb);
+ +

DESCRIPTION

+ +

This function sets an optional callback function for controlling the timeout interval on the DTLS protocol. The callback function will be called by DTLS for every new DTLS packet that is sent.

+ +

RETURN VALUES

+ +

Returns void.

+ +

HISTORY

+ +

The DTLS_set_timer_cb() function was added in OpenSSL 1.1.1.

+ +

COPYRIGHT

+ +

Copyright 2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DTLSv1_listen.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DTLSv1_listen.html new file mode 100644 index 00000000..616c36f9 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/DTLSv1_listen.html @@ -0,0 +1,95 @@ + + + + +DTLSv1_listen + + + + + + + + + + +

NAME

+ +

SSL_stateless, DTLSv1_listen - Statelessly listen for incoming connections

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+int SSL_stateless(SSL *s);
+int DTLSv1_listen(SSL *ssl, BIO_ADDR *peer);
+ +

DESCRIPTION

+ +

SSL_stateless() statelessly listens for new incoming TLSv1.3 connections. DTLSv1_listen() statelessly listens for new incoming DTLS connections. If a ClientHello is received that does not contain a cookie, then they respond with a request for a new ClientHello that does contain a cookie. If a ClientHello is received with a cookie that is verified then the function returns in order to enable the handshake to be completed (for example by using SSL_accept()).

+ +

NOTES

+ +

Some transport protocols (such as UDP) can be susceptible to amplification attacks. Unlike TCP there is no initial connection setup in UDP that validates that the client can actually receive messages on its advertised source address. An attacker could forge its source IP address and then send handshake initiation messages to the server. The server would then send its response to the forged source IP. If the response messages are larger than the original 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 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.

+ +

As a countermeasure to this issue TLSv1.3 and DTLS include a stateless cookie mechanism. The idea is that when a client attempts to connect to a server it sends a ClientHello message. The server responds with a HelloRetryRequest (in TLSv1.3) or a HelloVerifyRequest (in DTLS) which contains a unique cookie. The client then resends the ClientHello, but this time includes the cookie in the message thus proving that the client is capable of receiving messages sent to that address. All of this can be done by the server without allocating any state, and thus without consuming expensive resources.

+ +

OpenSSL implements this capability via the SSL_stateless() and DTLSv1_listen() functions. The ssl parameter should be a newly allocated SSL object with its read and write BIOs set, in the same way as might be done for a call to SSL_accept(). Typically, for DTLS, the read BIO will be in an "unconnected" state and thus capable of receiving messages from any peer.

+ +

When a ClientHello is received that contains a cookie that has been verified, then these functions will return with the ssl parameter updated into a state where the handshake can be continued by a call to (for example) SSL_accept(). Additionally, for DTLSv1_listen(), the BIO_ADDR pointed to by peer will be filled in with details of the peer that sent the ClientHello. If the underlying BIO is unable to obtain the BIO_ADDR of the peer (for example because the BIO does not support this), then *peer will be cleared and the family set to AF_UNSPEC. Typically user code is expected to "connect" the underlying socket to the peer and continue the handshake in a connected state.

+ +

Prior to calling DTLSv1_listen() user code must ensure that cookie generation and verification callbacks have been set up using SSL_CTX_set_cookie_generate_cb(3) and SSL_CTX_set_cookie_verify_cb(3) respectively. For SSL_stateless(), SSL_CTX_set_stateless_cookie_generate_cb(3) and SSL_CTX_set_stateless_cookie_verify_cb(3) must be used instead.

+ +

Since DTLSv1_listen() operates entirely statelessly whilst processing incoming ClientHellos it is unable to process fragmented messages (since this would require the allocation of state). An implication of this is that DTLSv1_listen() only supports ClientHellos that fit inside a single datagram.

+ +

For SSL_stateless() if an entire ClientHello message cannot be read without the "read" BIO becoming empty then the SSL_stateless() call will fail. It is the application's responsibility to ensure that data read from the "read" BIO during a single SSL_stateless() call is all from the same peer.

+ +

SSL_stateless() will fail (with a 0 return value) if some TLS version less than TLSv1.3 is used.

+ +

Both SSL_stateless() and DTLSv1_listen() will clear the error queue when they start.

+ +

RETURN VALUES

+ +

For SSL_stateless() a return value of 1 indicates success and the ssl object will be set up ready to continue the handshake. A return value of 0 or -1 indicates failure. If the value is 0 then a HelloRetryRequest was sent. A value of -1 indicates any other error. User code may retry the SSL_stateless() call.

+ +

For DTLSv1_listen() a return value of >= 1 indicates success. The ssl object will be set up ready to continue the handshake. the 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 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.

+ +

A return value of <0 indicates a fatal error. This could (for example) be because of a failure to allocate sufficient memory for the operation.

+ +

For DTLSv1_listen(), prior to OpenSSL 1.1.0, fatal and non-fatal errors both produce return codes <= 0 (in typical implementations user code treats all errors as non-fatal), whilst return codes >0 indicate success.

+ +

SEE ALSO

+ +

SSL_CTX_set_cookie_generate_cb(3), SSL_CTX_set_cookie_verify_cb(3), SSL_CTX_set_stateless_cookie_generate_cb(3), SSL_CTX_set_stateless_cookie_verify_cb(3), SSL_get_error(3), SSL_accept(3), ssl(7), bio(7)

+ +

HISTORY

+ +

The SSL_stateless() function was added in OpenSSL 1.1.1.

+ +

The DTLSv1_listen() return codes were clarified in OpenSSL 1.1.0. The type of "peer" also changed in OpenSSL 1.1.0.

+ +

COPYRIGHT

+ +

Copyright 2015-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ECDSA_SIG_new.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ECDSA_SIG_new.html new file mode 100644 index 00000000..67ed3ab4 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ECDSA_SIG_new.html @@ -0,0 +1,180 @@ + + + + +ECDSA_SIG_new + + + + + + + + + + +

NAME

+ +

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) functions

+ +

SYNOPSIS

+ +
#include <openssl/ecdsa.h>
+
+ECDSA_SIG *ECDSA_SIG_new(void);
+void ECDSA_SIG_free(ECDSA_SIG *sig);
+void ECDSA_SIG_get0(const ECDSA_SIG *sig, const BIGNUM **pr, const BIGNUM **ps);
+const BIGNUM *ECDSA_SIG_get0_r(const ECDSA_SIG *sig);
+const BIGNUM *ECDSA_SIG_get0_s(const ECDSA_SIG *sig);
+int ECDSA_SIG_set0(ECDSA_SIG *sig, BIGNUM *r, BIGNUM *s);
+int ECDSA_size(const EC_KEY *eckey);
+
+int ECDSA_sign(int type, const unsigned char *dgst, int dgstlen,
+               unsigned char *sig, unsigned int *siglen, EC_KEY *eckey);
+ECDSA_SIG *ECDSA_do_sign(const unsigned char *dgst, int dgst_len,
+                         EC_KEY *eckey);
+
+int ECDSA_verify(int type, const unsigned char *dgst, int dgstlen,
+                 const unsigned char *sig, int siglen, EC_KEY *eckey);
+int ECDSA_do_verify(const unsigned char *dgst, int dgst_len,
+                    const ECDSA_SIG *sig, EC_KEY* eckey);
+
+ECDSA_SIG *ECDSA_do_sign_ex(const unsigned char *dgst, int dgstlen,
+                            const BIGNUM *kinv, const BIGNUM *rp,
+                            EC_KEY *eckey);
+int ECDSA_sign_setup(EC_KEY *eckey, BN_CTX *ctx, BIGNUM **kinv, BIGNUM **rp);
+int ECDSA_sign_ex(int type, const unsigned char *dgst, int dgstlen,
+                  unsigned char *sig, unsigned int *siglen,
+                  const BIGNUM *kinv, const BIGNUM *rp, EC_KEY *eckey);
+ +

DESCRIPTION

+ +

Note: these functions provide a low level interface to ECDSA. Most applications should use the higher level EVP interface such as EVP_DigestSignInit(3) or EVP_DigestVerifyInit(3) instead.

+ +

ECDSA_SIG is an opaque structure consisting of two BIGNUMs for the r and s value of an ECDSA signature (see X9.62 or FIPS 186-2).

+ +

ECDSA_SIG_new() allocates an empty ECDSA_SIG structure. Note: before OpenSSL 1.1.0 the: the r and s components were initialised.

+ +

ECDSA_SIG_free() frees the ECDSA_SIG structure sig.

+ +

ECDSA_SIG_get0() returns internal pointers the r and s values contained in sig and stores them in *pr and *ps, respectively. The pointer pr or ps can be NULL, in which case the corresponding value is not returned.

+ +

The values r, s can also be retrieved separately by the corresponding function ECDSA_SIG_get0_r() and ECDSA_SIG_get0_s(), respectively.

+ +

The r and s values can be set by calling ECDSA_SIG_set0() and passing the new values for r and s as parameters to the function. Calling this function transfers the memory management of the values to the ECDSA_SIG object, and therefore the values that have been passed in should not be freed directly after this function has been called.

+ +

See i2d_ECDSA_SIG(3) and d2i_ECDSA_SIG(3) for information about encoding and decoding ECDSA signatures to/from DER.

+ +

ECDSA_size() returns the maximum length of a DER encoded ECDSA signature created with the private EC key eckey.

+ +

ECDSA_sign() computes a digital signature of the dgstlen bytes hash value dgst using the private EC key eckey. The DER encoded signatures is stored in sig and its length is returned in sig_len. Note: sig must point to ECDSA_size(eckey) bytes of memory. The parameter type is currently ignored. ECDSA_sign() is wrapper function for ECDSA_sign_ex() with kinv and rp set to NULL.

+ +

ECDSA_do_sign() is similar to ECDSA_sign() except the signature is returned as a newly allocated ECDSA_SIG structure (or NULL on error). ECDSA_do_sign() is a wrapper function for ECDSA_do_sign_ex() with kinv and rp set to NULL.

+ +

ECDSA_verify() verifies that the signature in sig of size siglen is a valid ECDSA signature of the hash value dgst of size dgstlen using the public key eckey. The parameter type is ignored.

+ +

ECDSA_do_verify() is similar to ECDSA_verify() except the signature is presented in the form of a pointer to an ECDSA_SIG structure.

+ +

The remaining functions utilise the internal kinv and r values used during signature computation. Most applications will never need to call these and some external ECDSA ENGINE implementations may not support them at all if either kinv or r is not NULL.

+ +

ECDSA_sign_setup() may be used to precompute parts of the signing operation. eckey is the private EC key and ctx is a pointer to BN_CTX structure (or NULL). The precomputed values or returned in kinv and rp and can be used in a later call to ECDSA_sign_ex() or ECDSA_do_sign_ex().

+ +

ECDSA_sign_ex() computes a digital signature of the dgstlen bytes hash value dgst using the private EC key eckey and the optional pre-computed values kinv and rp. The DER encoded signature is stored in sig and its length is returned in sig_len. Note: sig must point to ECDSA_size(eckey) bytes of memory. The parameter type is ignored.

+ +

ECDSA_do_sign_ex() is similar to ECDSA_sign_ex() except the signature is returned as a newly allocated ECDSA_SIG structure (or NULL on error).

+ +

RETURN VALUES

+ +

ECDSA_SIG_new() returns NULL if the allocation fails.

+ +

ECDSA_SIG_set0() returns 1 on success or 0 on failure.

+ +

ECDSA_SIG_get0_r() and ECDSA_SIG_get0_s() return the corresponding value, or NULL if it is unset.

+ +

ECDSA_size() returns the maximum length signature or 0 on error.

+ +

ECDSA_sign(), ECDSA_sign_ex() and ECDSA_sign_setup() return 1 if successful or 0 on error.

+ +

ECDSA_do_sign() and ECDSA_do_sign_ex() return a pointer to an allocated ECDSA_SIG structure or NULL on error.

+ +

ECDSA_verify() and ECDSA_do_verify() return 1 for a valid signature, 0 for an invalid signature and -1 on error. The error codes can be obtained by ERR_get_error(3).

+ +

EXAMPLES

+ +

Creating an ECDSA signature of a given SHA-256 hash value using the named curve prime256v1 (aka P-256).

+ +

First step: create an EC_KEY object (note: this part is not ECDSA specific)

+ +
int ret;
+ECDSA_SIG *sig;
+EC_KEY *eckey;
+
+eckey = EC_KEY_new_by_curve_name(NID_X9_62_prime256v1);
+if (eckey == NULL)
+    /* error */
+if (EC_KEY_generate_key(eckey) == 0)
+    /* error */
+ +

Second step: compute the ECDSA signature of a SHA-256 hash value using ECDSA_do_sign():

+ +
sig = ECDSA_do_sign(digest, 32, eckey);
+if (sig == NULL)
+    /* error */
+ +

or using ECDSA_sign():

+ +
unsigned char *buffer, *pp;
+int buf_len;
+
+buf_len = ECDSA_size(eckey);
+buffer = OPENSSL_malloc(buf_len);
+pp = buffer;
+if (ECDSA_sign(0, dgst, dgstlen, pp, &buf_len, eckey) == 0)
+    /* error */
+ +

Third step: verify the created ECDSA signature using ECDSA_do_verify():

+ +
ret = ECDSA_do_verify(digest, 32, sig, eckey);
+ +

or using ECDSA_verify():

+ +
ret = ECDSA_verify(0, digest, 32, buffer, buf_len, eckey);
+ +

and finally evaluate the return value:

+ +
if (ret == 1)
+    /* signature ok */
+else if (ret == 0)
+    /* incorrect signature */
+else
+    /* error */
+ +

CONFORMING TO

+ +

ANSI X9.62, US Federal Information Processing Standard FIPS 186-2 (Digital Signature Standard, DSS)

+ +

SEE ALSO

+ +

EC_KEY_new(3), EVP_DigestSignInit(3), EVP_DigestVerifyInit(3), i2d_ECDSA_SIG(3), d2i_ECDSA_SIG(3)

+ +

COPYRIGHT

+ +

Copyright 2004-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ECPKParameters_print.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ECPKParameters_print.html new file mode 100644 index 00000000..0dc61ec9 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ECPKParameters_print.html @@ -0,0 +1,59 @@ + + + + +ECPKParameters_print + + + + + + + + + + +

NAME

+ +

ECPKParameters_print, ECPKParameters_print_fp - Functions for decoding and encoding ASN1 representations of elliptic curve entities

+ +

SYNOPSIS

+ +
#include <openssl/ec.h>
+
+int ECPKParameters_print(BIO *bp, const EC_GROUP *x, int off);
+int ECPKParameters_print_fp(FILE *fp, const EC_GROUP *x, int off);
+ +

DESCRIPTION

+ +

The ECPKParameters represent the public parameters for an EC_GROUP structure, which represents a curve.

+ +

The ECPKParameters_print() and ECPKParameters_print_fp() functions print a human-readable output of the public parameters of the EC_GROUP to bp or fp. The output lines are indented by off spaces.

+ +

RETURN VALUES

+ +

ECPKParameters_print() and ECPKParameters_print_fp() return 1 for success and 0 if an error occurs.

+ +

SEE ALSO

+ +

crypto(7), EC_GROUP_new(3), EC_GROUP_copy(3), EC_POINT_new(3), EC_POINT_add(3), EC_KEY_new(3), EC_GFp_simple_method(3),

+ +

COPYRIGHT

+ +

Copyright 2013-2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EC_GFp_simple_method.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EC_GFp_simple_method.html new file mode 100644 index 00000000..fe835d4b --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EC_GFp_simple_method.html @@ -0,0 +1,75 @@ + + + + +EC_GFp_simple_method + + + + + + + + + + +

NAME

+ +

EC_GFp_simple_method, EC_GFp_mont_method, EC_GFp_nist_method, EC_GFp_nistp224_method, EC_GFp_nistp256_method, EC_GFp_nistp521_method, EC_GF2m_simple_method, EC_METHOD_get_field_type - Functions for obtaining EC_METHOD objects

+ +

SYNOPSIS

+ +
#include <openssl/ec.h>
+
+const EC_METHOD *EC_GFp_simple_method(void);
+const EC_METHOD *EC_GFp_mont_method(void);
+const EC_METHOD *EC_GFp_nist_method(void);
+const EC_METHOD *EC_GFp_nistp224_method(void);
+const EC_METHOD *EC_GFp_nistp256_method(void);
+const EC_METHOD *EC_GFp_nistp521_method(void);
+
+const EC_METHOD *EC_GF2m_simple_method(void);
+
+int EC_METHOD_get_field_type(const EC_METHOD *meth);
+ +

DESCRIPTION

+ +

The Elliptic Curve library provides a number of different implementations through a single common interface. When constructing a curve using EC_GROUP_new (see EC_GROUP_new(3)) an implementation method must be provided. The functions described here all return a const pointer to an EC_METHOD structure that can be passed to EC_GROUP_NEW. It is important that the correct implementation type for the form of curve selected is used.

+ +

For F2^m curves there is only one implementation choice, i.e. EC_GF2_simple_method.

+ +

For Fp curves the lowest common denominator implementation is the EC_GFp_simple_method implementation. All other implementations are based on this one. EC_GFp_mont_method builds on EC_GFp_simple_method but adds the use of montgomery multiplication (see BN_mod_mul_montgomery(3)). EC_GFp_nist_method offers an implementation optimised for use with NIST recommended curves (NIST curves are available through EC_GROUP_new_by_curve_name as described in EC_GROUP_new(3)).

+ +

The functions EC_GFp_nistp224_method, EC_GFp_nistp256_method and EC_GFp_nistp521_method offer 64 bit optimised implementations for the NIST P224, P256 and P521 curves respectively. Note, however, that these implementations are not available on all platforms.

+ +

EC_METHOD_get_field_type identifies what type of field the EC_METHOD structure supports, which will be either F2^m or Fp. If the field type is Fp then the value NID_X9_62_prime_field is returned. If the field type is F2^m then the value NID_X9_62_characteristic_two_field is returned. These values are defined in the obj_mac.h header file.

+ +

RETURN VALUES

+ +

All EC_GFp* functions and EC_GF2m_simple_method always return a const pointer to an EC_METHOD structure.

+ +

EC_METHOD_get_field_type returns an integer that identifies the type of field the EC_METHOD structure supports.

+ +

SEE ALSO

+ +

crypto(7), EC_GROUP_new(3), EC_GROUP_copy(3), EC_POINT_new(3), EC_POINT_add(3), EC_KEY_new(3), d2i_ECPKParameters(3), BN_mod_mul_montgomery(3)

+ +

COPYRIGHT

+ +

Copyright 2013-2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EC_GROUP_copy.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EC_GROUP_copy.html new file mode 100644 index 00000000..1344c7b1 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EC_GROUP_copy.html @@ -0,0 +1,180 @@ + + + + +EC_GROUP_copy + + + + + + + + + + +

NAME

+ +

EC_GROUP_get0_order, EC_GROUP_order_bits, EC_GROUP_get0_cofactor, EC_GROUP_copy, EC_GROUP_dup, EC_GROUP_method_of, EC_GROUP_set_generator, EC_GROUP_get0_generator, EC_GROUP_get_order, EC_GROUP_get_cofactor, EC_GROUP_set_curve_name, EC_GROUP_get_curve_name, EC_GROUP_set_asn1_flag, EC_GROUP_get_asn1_flag, EC_GROUP_set_point_conversion_form, EC_GROUP_get_point_conversion_form, EC_GROUP_get0_seed, EC_GROUP_get_seed_len, EC_GROUP_set_seed, EC_GROUP_get_degree, EC_GROUP_check, EC_GROUP_check_discriminant, EC_GROUP_cmp, EC_GROUP_get_basis_type, EC_GROUP_get_trinomial_basis, EC_GROUP_get_pentanomial_basis - Functions for manipulating EC_GROUP objects

+ +

SYNOPSIS

+ +
#include <openssl/ec.h>
+
+int EC_GROUP_copy(EC_GROUP *dst, const EC_GROUP *src);
+EC_GROUP *EC_GROUP_dup(const EC_GROUP *src);
+
+const EC_METHOD *EC_GROUP_method_of(const EC_GROUP *group);
+
+int EC_GROUP_set_generator(EC_GROUP *group, const EC_POINT *generator,
+                           const BIGNUM *order, const BIGNUM *cofactor);
+const EC_POINT *EC_GROUP_get0_generator(const EC_GROUP *group);
+
+int EC_GROUP_get_order(const EC_GROUP *group, BIGNUM *order, BN_CTX *ctx);
+const BIGNUM *EC_GROUP_get0_order(const EC_GROUP *group);
+int EC_GROUP_order_bits(const EC_GROUP *group);
+int EC_GROUP_get_cofactor(const EC_GROUP *group, BIGNUM *cofactor, BN_CTX *ctx);
+const BIGNUM *EC_GROUP_get0_cofactor(const EC_GROUP *group);
+
+void EC_GROUP_set_curve_name(EC_GROUP *group, int nid);
+int EC_GROUP_get_curve_name(const EC_GROUP *group);
+
+void EC_GROUP_set_asn1_flag(EC_GROUP *group, int flag);
+int EC_GROUP_get_asn1_flag(const EC_GROUP *group);
+
+void EC_GROUP_set_point_conversion_form(EC_GROUP *group, point_conversion_form_t form);
+point_conversion_form_t EC_GROUP_get_point_conversion_form(const EC_GROUP *group);
+
+unsigned char *EC_GROUP_get0_seed(const EC_GROUP *x);
+size_t EC_GROUP_get_seed_len(const EC_GROUP *);
+size_t EC_GROUP_set_seed(EC_GROUP *, const unsigned char *, size_t len);
+
+int EC_GROUP_get_degree(const EC_GROUP *group);
+
+int EC_GROUP_check(const EC_GROUP *group, BN_CTX *ctx);
+
+int EC_GROUP_check_discriminant(const EC_GROUP *group, BN_CTX *ctx);
+
+int EC_GROUP_cmp(const EC_GROUP *a, const EC_GROUP *b, BN_CTX *ctx);
+
+int EC_GROUP_get_basis_type(const EC_GROUP *);
+int EC_GROUP_get_trinomial_basis(const EC_GROUP *, unsigned int *k);
+int EC_GROUP_get_pentanomial_basis(const EC_GROUP *, unsigned int *k1,
+                                   unsigned int *k2, unsigned int *k3);
+ +

DESCRIPTION

+ +

EC_GROUP_copy() copies the curve src into dst. Both src and dst must use the same EC_METHOD.

+ +

EC_GROUP_dup() creates a new EC_GROUP object and copies the content from src to the newly created EC_GROUP object.

+ +

EC_GROUP_method_of() obtains the EC_METHOD of group.

+ +

EC_GROUP_set_generator() sets curve parameters that must be agreed by all participants using the curve. These parameters include the generator, the order and the cofactor. The generator is a well defined point on the curve chosen for cryptographic operations. Integers used for point multiplications will be between 0 and n-1 where n is the order. The order multiplied by the cofactor gives the number of points on the curve.

+ +

EC_GROUP_get0_generator() returns the generator for the identified group.

+ +

EC_GROUP_get_order() retrieves the order of group and copies its value into order. It fails in case group is not fully initialized (i.e., its order is not set or set to zero).

+ +

EC_GROUP_get_cofactor() retrieves the cofactor of group and copies its value into cofactor. It fails in case group is not fully initialized or if the cofactor is not set (or set to zero).

+ +

The functions EC_GROUP_set_curve_name() and EC_GROUP_get_curve_name(), set and get the NID for the curve respectively (see EC_GROUP_new(3)). If a curve does not have a NID associated with it, then EC_GROUP_get_curve_name will return NID_undef.

+ +

The asn1_flag value is used to determine whether the curve encoding uses explicit parameters or a named curve using an ASN1 OID: many applications only support the latter form. If asn1_flag is OPENSSL_EC_NAMED_CURVE then the named curve form is used and the parameters must have a corresponding named curve NID set. If asn1_flags is OPENSSL_EC_EXPLICIT_CURVE the parameters are explicitly encoded. The functions EC_GROUP_get_asn1_flag() and EC_GROUP_set_asn1_flag() get and set the status of the asn1_flag for the curve. Note: OPENSSL_EC_EXPLICIT_CURVE was added in OpenSSL 1.1.0, for previous versions of OpenSSL the value 0 must be used instead. Before OpenSSL 1.1.0 the default form was to use explicit parameters (meaning that applications would have to explicitly set the named curve form) in OpenSSL 1.1.0 and later the named curve form is the default.

+ +

The point_conversion_form for a curve controls how EC_POINT data is encoded as ASN1 as defined in X9.62 (ECDSA). point_conversion_form_t is an enum defined as follows:

+ +
typedef enum {
+       /** the point is encoded as z||x, where the octet z specifies
+        *   which solution of the quadratic equation y is  */
+       POINT_CONVERSION_COMPRESSED = 2,
+       /** the point is encoded as z||x||y, where z is the octet 0x04  */
+       POINT_CONVERSION_UNCOMPRESSED = 4,
+       /** the point is encoded as z||x||y, where the octet z specifies
+        *  which solution of the quadratic equation y is  */
+       POINT_CONVERSION_HYBRID = 6
+} point_conversion_form_t;
+ +

For POINT_CONVERSION_UNCOMPRESSED the point is encoded as an octet signifying the UNCOMPRESSED form has been used followed by the octets for x, followed by the octets for y.

+ +

For any given x co-ordinate for a point on a curve it is possible to derive two possible y values. For POINT_CONVERSION_COMPRESSED the point is encoded as an octet signifying that the COMPRESSED form has been used AND which of the two possible solutions for y has been used, followed by the octets for x.

+ +

For POINT_CONVERSION_HYBRID the point is encoded as an octet signifying the HYBRID form has been used AND which of the two possible solutions for y has been used, followed by the octets for x, followed by the octets for y.

+ +

The functions EC_GROUP_set_point_conversion_form() and EC_GROUP_get_point_conversion_form(), set and get the point_conversion_form for the curve respectively.

+ +

ANSI X9.62 (ECDSA standard) defines a method of generating the curve parameter b from a random number. This provides advantages in that a parameter obtained in this way is highly unlikely to be susceptible to special purpose attacks, or have any trapdoors in it. If the seed is present for a curve then the b parameter was generated in a verifiable fashion using that seed. The OpenSSL EC library does not use this seed value but does enable you to inspect it using EC_GROUP_get0_seed(). This returns a pointer to a memory block containing the seed that was used. The length of the memory block can be obtained using EC_GROUP_get_seed_len(). A number of the built-in curves within the library provide seed values that can be obtained. It is also possible to set a custom seed using EC_GROUP_set_seed() and passing a pointer to a memory block, along with the length of the seed. Again, the EC library will not use this seed value, although it will be preserved in any ASN1 based communications.

+ +

EC_GROUP_get_degree() gets the degree of the field. For Fp fields this will be the number of bits in p. For F2^m fields this will be the value m.

+ +

The function EC_GROUP_check_discriminant() calculates the discriminant for the curve and verifies that it is valid. For a curve defined over Fp the discriminant is given by the formula 4*a^3 + 27*b^2 whilst for F2^m curves the discriminant is simply b. In either case for the curve to be valid the discriminant must be non zero.

+ +

The function EC_GROUP_check() performs a number of checks on a curve to verify that it is valid. Checks performed include verifying that the discriminant is non zero; that a generator has been defined; that the generator is on the curve and has the correct order.

+ +

EC_GROUP_cmp() compares a and b to determine whether they represent the same curve or not.

+ +

The functions EC_GROUP_get_basis_type(), EC_GROUP_get_trinomial_basis() and EC_GROUP_get_pentanomial_basis() should only be called for curves defined over an F2^m field. Addition and multiplication operations within an F2^m field are performed using an irreducible polynomial function f(x). This function is either a trinomial of the form:

+ +

f(x) = x^m + x^k + 1 with m > k >= 1

+ +

or a pentanomial of the form:

+ +

f(x) = x^m + x^k3 + x^k2 + x^k1 + 1 with m > k3 > k2 > k1 >= 1

+ +

The function EC_GROUP_get_basis_type() returns a NID identifying whether a trinomial or pentanomial is in use for the field. The function EC_GROUP_get_trinomial_basis() must only be called where f(x) is of the trinomial form, and returns the value of k. Similarly the function EC_GROUP_get_pentanomial_basis() must only be called where f(x) is of the pentanomial form, and returns the values of k1, k2 and k3 respectively.

+ +

RETURN VALUES

+ +

The following functions return 1 on success or 0 on error: EC_GROUP_copy(), EC_GROUP_set_generator(), EC_GROUP_check(), EC_GROUP_check_discriminant(), EC_GROUP_get_trinomial_basis() and EC_GROUP_get_pentanomial_basis().

+ +

EC_GROUP_dup() returns a pointer to the duplicated curve, or NULL on error.

+ +

EC_GROUP_method_of() returns the EC_METHOD implementation in use for the given curve or NULL on error.

+ +

EC_GROUP_get0_generator() returns the generator for the given curve or NULL on error.

+ +

EC_GROUP_get_order() returns 0 if the order is not set (or set to zero) for group or if copying into order fails, 1 otherwise.

+ +

EC_GROUP_get_cofactor() returns 0 if the cofactor is not set (or is set to zero) for group or if copying into cofactor fails, 1 otherwise.

+ +

EC_GROUP_get_curve_name() returns the curve name (NID) for group or will return NID_undef if no curve name is associated.

+ +

EC_GROUP_get_asn1_flag() returns the ASN1 flag for the specified group .

+ +

EC_GROUP_get_point_conversion_form() returns the point_conversion_form for group.

+ +

EC_GROUP_get_degree() returns the degree for group or 0 if the operation is not supported by the underlying group implementation.

+ +

EC_GROUP_get0_order() returns an internal pointer to the group order. EC_GROUP_order_bits() returns the number of bits in the group order. EC_GROUP_get0_cofactor() returns an internal pointer to the group cofactor.

+ +

EC_GROUP_get0_seed() returns a pointer to the seed that was used to generate the parameter b, or NULL if the seed is not specified. EC_GROUP_get_seed_len() returns the length of the seed or 0 if the seed is not specified.

+ +

EC_GROUP_set_seed() returns the length of the seed that has been set. If the supplied seed is NULL, or the supplied seed length is 0, the return value will be 1. On error 0 is returned.

+ +

EC_GROUP_cmp() returns 0 if the curves are equal, 1 if they are not equal, or -1 on error.

+ +

EC_GROUP_get_basis_type() returns the values NID_X9_62_tpBasis or NID_X9_62_ppBasis (as defined in <openssl/obj_mac.h>) for a trinomial or pentanomial respectively. Alternatively in the event of an error a 0 is returned.

+ +

SEE ALSO

+ +

crypto(7), EC_GROUP_new(3), EC_POINT_new(3), EC_POINT_add(3), EC_KEY_new(3), EC_GFp_simple_method(3), d2i_ECPKParameters(3)

+ +

COPYRIGHT

+ +

Copyright 2013-2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EC_GROUP_new.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EC_GROUP_new.html new file mode 100644 index 00000000..ab1f5d05 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EC_GROUP_new.html @@ -0,0 +1,123 @@ + + + + +EC_GROUP_new + + + + + + + + + + +

NAME

+ +

EC_GROUP_get_ecparameters, EC_GROUP_get_ecpkparameters, EC_GROUP_new, EC_GROUP_new_from_ecparameters, EC_GROUP_new_from_ecpkparameters, EC_GROUP_free, EC_GROUP_clear_free, EC_GROUP_new_curve_GFp, EC_GROUP_new_curve_GF2m, EC_GROUP_new_by_curve_name, EC_GROUP_set_curve, EC_GROUP_get_curve, EC_GROUP_set_curve_GFp, EC_GROUP_get_curve_GFp, EC_GROUP_set_curve_GF2m, EC_GROUP_get_curve_GF2m, EC_get_builtin_curves - Functions for creating and destroying EC_GROUP objects

+ +

SYNOPSIS

+ +
#include <openssl/ec.h>
+
+EC_GROUP *EC_GROUP_new(const EC_METHOD *meth);
+EC_GROUP *EC_GROUP_new_from_ecparameters(const ECPARAMETERS *params)
+EC_GROUP *EC_GROUP_new_from_ecpkparameters(const ECPKPARAMETERS *params)
+void EC_GROUP_free(EC_GROUP *group);
+void EC_GROUP_clear_free(EC_GROUP *group);
+
+EC_GROUP *EC_GROUP_new_curve_GFp(const BIGNUM *p, const BIGNUM *a,
+                                 const BIGNUM *b, BN_CTX *ctx);
+EC_GROUP *EC_GROUP_new_curve_GF2m(const BIGNUM *p, const BIGNUM *a,
+                                  const BIGNUM *b, BN_CTX *ctx);
+EC_GROUP *EC_GROUP_new_by_curve_name(int nid);
+
+int EC_GROUP_set_curve(EC_GROUP *group, const BIGNUM *p, const BIGNUM *a,
+                       const BIGNUM *b, BN_CTX *ctx);
+int EC_GROUP_get_curve(const EC_GROUP *group, BIGNUM *p, BIGNUM *a, BIGNUM *b,
+                       BN_CTX *ctx);
+int EC_GROUP_set_curve_GFp(EC_GROUP *group, const BIGNUM *p,
+                           const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx);
+int EC_GROUP_get_curve_GFp(const EC_GROUP *group, BIGNUM *p,
+                           BIGNUM *a, BIGNUM *b, BN_CTX *ctx);
+int EC_GROUP_set_curve_GF2m(EC_GROUP *group, const BIGNUM *p,
+                            const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx);
+int EC_GROUP_get_curve_GF2m(const EC_GROUP *group, BIGNUM *p,
+                            BIGNUM *a, BIGNUM *b, BN_CTX *ctx);
+
+ECPARAMETERS *EC_GROUP_get_ecparameters(const EC_GROUP *group, ECPARAMETERS *params)
+ECPKPARAMETERS *EC_GROUP_get_ecpkparameters(const EC_GROUP *group, ECPKPARAMETERS *params)
+
+size_t EC_get_builtin_curves(EC_builtin_curve *r, size_t nitems);
+ +

DESCRIPTION

+ +

Within the library there are two forms of elliptic curve that are of interest. The first form is those defined over the prime field Fp. The elements of Fp are the integers 0 to p-1, where p is a prime number. This gives us a revised elliptic curve equation as follows:

+ +

y^2 mod p = x^3 +ax + b mod p

+ +

The second form is those defined over a binary field F2^m where the elements of the field are integers of length at most m bits. For this form the elliptic curve equation is modified to:

+ +

y^2 + xy = x^3 + ax^2 + b (where b != 0)

+ +

Operations in a binary field are performed relative to an irreducible polynomial. All such curves with OpenSSL use a trinomial or a pentanomial for this parameter.

+ +

A new curve can be constructed by calling EC_GROUP_new(), using the implementation provided by meth (see EC_GFp_simple_method(3)). It is then necessary to call EC_GROUP_set_curve() to set the curve parameters. EC_GROUP_new_from_ecparameters() will create a group from the specified params and EC_GROUP_new_from_ecpkparameters() will create a group from the specific PK params.

+ +

EC_GROUP_set_curve() sets the curve parameters p, a and b. For a curve over Fp p is the prime for the field. For a curve over F2^m 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 polynomial is a trinomial or a pentanomial. In either case, a and b represents the coefficients a and b from the relevant equation introduced above.

+ +

EC_group_get_curve() obtains the previously set curve parameters.

+ +

EC_GROUP_set_curve_GFp() and EC_GROUP_set_curve_GF2m() are synonyms for EC_GROUP_set_curve(). They are defined for backwards compatibility only and should not be used.

+ +

EC_GROUP_get_curve_GFp() and EC_GROUP_get_curve_GF2m() are synonyms for EC_GROUP_get_curve(). They are defined for backwards compatibility only and should not be used.

+ +

The functions EC_GROUP_new_curve_GFp() and EC_GROUP_new_curve_GF2m() are shortcuts for calling EC_GROUP_new() and then the EC_GROUP_set_curve() function. An appropriate default implementation method will be used.

+ +

Whilst the library can be used to create any curve using the functions described above, there are also a number of predefined curves that are available. In order to obtain a list of all of the predefined curves, call the function EC_get_builtin_curves(). The parameter r should be an array of EC_builtin_curve structures of size nitems. The function will populate the r array with information about the builtin curves. If nitems is less than the total number of curves available, then the first nitems curves will be returned. Otherwise the total number of curves will be provided. The return value is the total number of curves available (whether that number has been populated in r or not). Passing a NULL r, or setting nitems to 0 will do nothing other than return the total number of curves available. The EC_builtin_curve structure is defined as follows:

+ +
typedef struct {
+       int nid;
+       const char *comment;
+       } EC_builtin_curve;
+ +

Each EC_builtin_curve item has a unique integer id (nid), and a human readable comment string describing the curve.

+ +

In order to construct a builtin curve use the function EC_GROUP_new_by_curve_name() and provide the nid of the curve to be constructed.

+ +

EC_GROUP_free() frees the memory associated with the EC_GROUP. If group is NULL nothing is done.

+ +

EC_GROUP_clear_free() destroys any sensitive data held within the EC_GROUP and then frees its memory. If group is NULL nothing is done.

+ +

RETURN VALUES

+ +

All EC_GROUP_new* functions return a pointer to the newly constructed group, or NULL on error.

+ +

EC_get_builtin_curves() returns the number of builtin curves that are available.

+ +

EC_GROUP_set_curve_GFp(), EC_GROUP_get_curve_GFp(), EC_GROUP_set_curve_GF2m(), EC_GROUP_get_curve_GF2m() return 1 on success or 0 on error.

+ +

SEE ALSO

+ +

crypto(7), EC_GROUP_copy(3), EC_POINT_new(3), EC_POINT_add(3), EC_KEY_new(3), EC_GFp_simple_method(3), d2i_ECPKParameters(3)

+ +

COPYRIGHT

+ +

Copyright 2013-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EC_KEY_get_enc_flags.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EC_KEY_get_enc_flags.html new file mode 100644 index 00000000..cfbb2338 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EC_KEY_get_enc_flags.html @@ -0,0 +1,61 @@ + + + + +EC_KEY_get_enc_flags + + + + + + + + + + +

NAME

+ +

EC_KEY_get_enc_flags, EC_KEY_set_enc_flags - Get and set flags for encoding EC_KEY structures

+ +

SYNOPSIS

+ +
#include <openssl/ec.h>
+
+unsigned int EC_KEY_get_enc_flags(const EC_KEY *key);
+void EC_KEY_set_enc_flags(EC_KEY *eckey, unsigned int flags);
+ +

DESCRIPTION

+ +

The format of the external representation of the public key written by i2d_ECPrivateKey() (such as whether it is stored in a compressed form or not) is described by the point_conversion_form. See EC_GROUP_copy(3) for a description of point_conversion_form.

+ +

When reading a private key encoded without an associated public key (e.g. if EC_PKEY_NO_PUBKEY has been used - see below), then d2i_ECPrivateKey() generates the missing public key automatically. Private keys encoded without parameters (e.g. if EC_PKEY_NO_PARAMETERS has been used - see below) cannot be loaded using d2i_ECPrivateKey().

+ +

The functions EC_KEY_get_enc_flags() and EC_KEY_set_enc_flags() get and set the value of the encoding flags for the key. There are two encoding flags currently defined - EC_PKEY_NO_PARAMETERS and EC_PKEY_NO_PUBKEY. These flags define the behaviour of how the key is converted into ASN1 in a call to i2d_ECPrivateKey(). If EC_PKEY_NO_PARAMETERS is set then the public parameters for the curve are not encoded along with the private key. If EC_PKEY_NO_PUBKEY is set then the public key is not encoded along with the private key.

+ +

RETURN VALUES

+ +

EC_KEY_get_enc_flags() returns the value of the current encoding flags for the EC_KEY.

+ +

SEE ALSO

+ +

crypto(7), EC_GROUP_new(3), EC_GROUP_copy(3), EC_POINT_new(3), EC_POINT_add(3), EC_GFp_simple_method(3), d2i_ECPKParameters(3), d2i_ECPrivateKey(3)

+ +

COPYRIGHT

+ +

Copyright 2015-2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EC_KEY_new.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EC_KEY_new.html new file mode 100644 index 00000000..1919e81e --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EC_KEY_new.html @@ -0,0 +1,143 @@ + + + + +EC_KEY_new + + + + + + + + + + +

NAME

+ +

EC_KEY_get_method, EC_KEY_set_method, EC_KEY_new, EC_KEY_get_flags, EC_KEY_set_flags, EC_KEY_clear_flags, EC_KEY_new_by_curve_name, EC_KEY_free, EC_KEY_copy, EC_KEY_dup, EC_KEY_up_ref, 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_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 EC_KEY objects

+ +

SYNOPSIS

+ +
#include <openssl/ec.h>
+
+EC_KEY *EC_KEY_new(void);
+int EC_KEY_get_flags(const EC_KEY *key);
+void EC_KEY_set_flags(EC_KEY *key, int flags);
+void EC_KEY_clear_flags(EC_KEY *key, int flags);
+EC_KEY *EC_KEY_new_by_curve_name(int nid);
+void EC_KEY_free(EC_KEY *key);
+EC_KEY *EC_KEY_copy(EC_KEY *dst, const EC_KEY *src);
+EC_KEY *EC_KEY_dup(const EC_KEY *src);
+int EC_KEY_up_ref(EC_KEY *key);
+ENGINE *EC_KEY_get0_engine(const EC_KEY *eckey);
+const EC_GROUP *EC_KEY_get0_group(const EC_KEY *key);
+int EC_KEY_set_group(EC_KEY *key, const EC_GROUP *group);
+const BIGNUM *EC_KEY_get0_private_key(const EC_KEY *key);
+int EC_KEY_set_private_key(EC_KEY *key, const BIGNUM *prv);
+const EC_POINT *EC_KEY_get0_public_key(const EC_KEY *key);
+int EC_KEY_set_public_key(EC_KEY *key, const EC_POINT *pub);
+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_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);
+int EC_KEY_set_public_key_affine_coordinates(EC_KEY *key, BIGNUM *x, BIGNUM *y);
+const EC_KEY_METHOD *EC_KEY_get_method(const EC_KEY *key);
+int EC_KEY_set_method(EC_KEY *key, const EC_KEY_METHOD *meth);
+
+int EC_KEY_oct2key(EC_KEY *eckey, const unsigned char *buf, size_t len, BN_CTX *ctx);
+size_t EC_KEY_key2buf(const EC_KEY *eckey, point_conversion_form_t form,
+                      unsigned char **pbuf, BN_CTX *ctx);
+
+int EC_KEY_oct2priv(EC_KEY *eckey, const unsigned char *buf, size_t len);
+size_t EC_KEY_priv2oct(const EC_KEY *eckey, unsigned char *buf, size_t len);
+
+size_t EC_KEY_priv2buf(const EC_KEY *eckey, unsigned char **pbuf);
+ +

DESCRIPTION

+ +

An EC_KEY represents a public key and, optionally, the associated private key. A new EC_KEY with no associated curve can be constructed by calling EC_KEY_new(). The reference count for the newly created EC_KEY is initially set to 1. A curve can be associated with the EC_KEY by calling EC_KEY_set_group().

+ +

Alternatively a new EC_KEY can be constructed by calling EC_KEY_new_by_curve_name() and supplying the nid of the associated curve. See EC_GROUP_new(3) for a description of curve names. This function simply wraps calls to EC_KEY_new() and EC_GROUP_new_by_curve_name().

+ +

Calling EC_KEY_free() decrements the reference count for the EC_KEY object, and if it has dropped to zero then frees the memory associated with it. If key is NULL nothing is done.

+ +

EC_KEY_copy() copies the contents of the EC_KEY in src into dest.

+ +

EC_KEY_dup() creates a new EC_KEY object and copies ec_key into it.

+ +

EC_KEY_up_ref() increments the reference count associated with the EC_KEY object.

+ +

EC_KEY_get0_engine() returns a handle to the ENGINE that has been set for this EC_KEY object.

+ +

EC_KEY_generate_key() generates a new public and private key for the supplied eckey object. eckey must have an EC_GROUP object associated with it before calling this function. The private key is a random integer (0 < priv_key < order, where order is the order of the EC_GROUP object). The public key is an EC_POINT on the curve calculated by multiplying the generator for the curve by the private key.

+ +

EC_KEY_check_key() performs various sanity checks on the EC_KEY object to confirm that it is valid.

+ +

EC_KEY_set_public_key_affine_coordinates() sets the public key for key based on its affine co-ordinates; i.e., it constructs an EC_POINT object based on the supplied x and y values and sets the public key to be this EC_POINT. It also performs certain sanity checks on the key to confirm that it is valid.

+ +

The functions EC_KEY_get0_group(), EC_KEY_set_group(), EC_KEY_get0_private_key(), EC_KEY_set_private_key(), EC_KEY_get0_public_key(), and EC_KEY_set_public_key() get and set the EC_GROUP object, the private key, and the EC_POINT public key for the key respectively.

+ +

The functions EC_KEY_get_conv_form() and EC_KEY_set_conv_form() get and set the point_conversion_form for the key. For a description of point_conversion_forms please see EC_POINT_new(3).

+ +

EC_KEY_set_flags() sets the flags in the flags parameter on the EC_KEY object. Any flags that are already set are left set. The flags currently defined are EC_FLAG_NON_FIPS_ALLOW and EC_FLAG_FIPS_CHECKED. In addition there is the flag EC_FLAG_COFACTOR_ECDH which is specific to ECDH. EC_KEY_get_flags() returns the current flags that are set for this EC_KEY. EC_KEY_clear_flags() clears the flags indicated by the flags parameter; all other flags are left in their existing state.

+ +

EC_KEY_set_asn1_flag() sets the asn1_flag on the underlying EC_GROUP object (if set). Refer to EC_GROUP_copy(3) for further information on the asn1_flag.

+ +

EC_KEY_precompute_mult() stores multiples of the underlying EC_GROUP generator for faster point multiplication. See also 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 in eckey.

+ +

EC_KEY_oct2priv() and EC_KEY_priv2oct() convert between the private key component of eckey and octet form. The octet form consists of the content octets of the privateKey OCTET STRING in an ECPrivateKey ASN.1 structure.

+ +

The function EC_KEY_priv2oct() must be supplied with a buffer long enough to store the octet form. The return value provides the number of octets stored. Calling the function with a NULL buffer will not perform the conversion but will just return the required buffer length.

+ +

The function EC_KEY_priv2buf() allocates a buffer of suitable length and writes an EC_KEY to it in octet format. The allocated buffer is written to *pbuf and its length is returned. The caller must free up the allocated buffer with a call to OPENSSL_free(). Since the allocated buffer value is written to *pbuf the pbuf parameter MUST NOT be NULL.

+ +

EC_KEY_priv2buf() converts an EC_KEY private key into an allocated buffer.

+ +

RETURN VALUES

+ +

EC_KEY_new(), EC_KEY_new_by_curve_name() and EC_KEY_dup() return a pointer to the newly created EC_KEY object, or NULL on error.

+ +

EC_KEY_get_flags() returns the flags associated with the EC_KEY object as an integer.

+ +

EC_KEY_copy() returns a pointer to the destination key, or NULL on error.

+ +

EC_KEY_get0_engine() returns a pointer to an ENGINE, or NULL if it wasn't set.

+ +

EC_KEY_up_ref(), EC_KEY_set_group(), EC_KEY_set_private_key(), EC_KEY_set_public_key(), EC_KEY_precompute_mult(), EC_KEY_generate_key(), EC_KEY_check_key(), EC_KEY_set_public_key_affine_coordinates(), EC_KEY_oct2key() and EC_KEY_oct2priv() return 1 on success or 0 on error.

+ +

EC_KEY_get0_group() returns the EC_GROUP associated with the EC_KEY.

+ +

EC_KEY_get0_private_key() returns the private key associated with the EC_KEY.

+ +

EC_KEY_get_conv_form() return the point_conversion_form for the EC_KEY.

+ +

EC_KEY_key2buf(), EC_KEY_priv2oct() and EC_KEY_priv2buf() return the length of the buffer or 0 on error.

+ +

SEE ALSO

+ +

crypto(7), EC_GROUP_new(3), EC_GROUP_copy(3), EC_POINT_new(3), EC_POINT_add(3), EC_GFp_simple_method(3), d2i_ECPKParameters(3)

+ +

COPYRIGHT

+ +

Copyright 2013-2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EC_POINT_add.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EC_POINT_add.html new file mode 100644 index 00000000..2c197ebc --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EC_POINT_add.html @@ -0,0 +1,95 @@ + + + + +EC_POINT_add + + + + + + + + + + +

NAME

+ +

EC_POINT_add, EC_POINT_dbl, EC_POINT_invert, EC_POINT_is_at_infinity, EC_POINT_is_on_curve, EC_POINT_cmp, EC_POINT_make_affine, EC_POINTs_make_affine, EC_POINTs_mul, EC_POINT_mul, EC_GROUP_precompute_mult, EC_GROUP_have_precompute_mult - Functions for performing mathematical operations and tests on EC_POINT objects

+ +

SYNOPSIS

+ +
#include <openssl/ec.h>
+
+int EC_POINT_add(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a,
+                 const EC_POINT *b, BN_CTX *ctx);
+int EC_POINT_dbl(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a, BN_CTX *ctx);
+int EC_POINT_invert(const EC_GROUP *group, EC_POINT *a, BN_CTX *ctx);
+int EC_POINT_is_at_infinity(const EC_GROUP *group, const EC_POINT *p);
+int EC_POINT_is_on_curve(const EC_GROUP *group, const EC_POINT *point, BN_CTX *ctx);
+int EC_POINT_cmp(const EC_GROUP *group, const EC_POINT *a, const EC_POINT *b, BN_CTX *ctx);
+int EC_POINT_make_affine(const EC_GROUP *group, EC_POINT *point, BN_CTX *ctx);
+int EC_POINTs_make_affine(const EC_GROUP *group, size_t num,
+                          EC_POINT *points[], BN_CTX *ctx);
+int EC_POINTs_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, size_t num,
+                  const EC_POINT *p[], const BIGNUM *m[], BN_CTX *ctx);
+int EC_POINT_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n,
+                 const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx);
+int EC_GROUP_precompute_mult(EC_GROUP *group, BN_CTX *ctx);
+int EC_GROUP_have_precompute_mult(const EC_GROUP *group);
+ +

DESCRIPTION

+ +

EC_POINT_add adds the two points a and b and places the result in r. Similarly EC_POINT_dbl doubles the point a and places the result in r. In both cases it is valid for r to be one of a or b.

+ +

EC_POINT_invert calculates the inverse of the supplied point a. The result is placed back in a.

+ +

The function EC_POINT_is_at_infinity tests whether the supplied point is at infinity or not.

+ +

EC_POINT_is_on_curve tests whether the supplied point is on the curve or not.

+ +

EC_POINT_cmp compares the two supplied points and tests whether or not they are equal.

+ +

The functions EC_POINT_make_affine and EC_POINTs_make_affine force the internal representation of the EC_POINT(s) into the affine co-ordinate system. In the case of EC_POINTs_make_affine the value num provides the number of points in the array points to be forced.

+ +

EC_POINT_mul is a convenient interface to EC_POINTs_mul: it calculates the value generator * n + q * m and stores the result in r. The value n may be NULL in which case the result is just q * m (variable point multiplication). Alternatively, both q and m may be NULL, and n non-NULL, in which case the result is just generator * n (fixed point multiplication). When performing a single fixed or variable point multiplication, the underlying implementation uses a constant time algorithm, when the input scalar (either n or m) is in the range [0, ec_group_order).

+ +

EC_POINTs_mul calculates the value generator * n + q[0] * m[0] + ... + q[num-1] * m[num-1]. As for EC_POINT_mul the value n may be NULL or num may be zero. When performing a fixed point multiplication (n is non-NULL and num is 0) or a variable point multiplication (n is NULL and num is 1), the underlying implementation uses a constant time algorithm, when the input scalar (either n or m[0]) is in the range [0, ec_group_order).

+ +

The function EC_GROUP_precompute_mult stores multiples of the generator for faster point multiplication, whilst EC_GROUP_have_precompute_mult tests whether precomputation has already been done. See EC_GROUP_copy(3) for information about the generator.

+ +

RETURN VALUES

+ +

The following functions return 1 on success or 0 on error: EC_POINT_add, EC_POINT_dbl, EC_POINT_invert, EC_POINT_make_affine, EC_POINTs_make_affine, EC_POINTs_make_affine, EC_POINT_mul, EC_POINTs_mul and EC_GROUP_precompute_mult.

+ +

EC_POINT_is_at_infinity returns 1 if the point is at infinity, or 0 otherwise.

+ +

EC_POINT_is_on_curve returns 1 if the point is on the curve, 0 if not, or -1 on error.

+ +

EC_POINT_cmp returns 1 if the points are not equal, 0 if they are, or -1 on error.

+ +

EC_GROUP_have_precompute_mult return 1 if a precomputation has been done, or 0 if not.

+ +

SEE ALSO

+ +

crypto(7), EC_GROUP_new(3), EC_GROUP_copy(3), EC_POINT_new(3), EC_KEY_new(3), EC_GFp_simple_method(3), d2i_ECPKParameters(3)

+ +

COPYRIGHT

+ +

Copyright 2013-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EC_POINT_new.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EC_POINT_new.html new file mode 100644 index 00000000..3d2cf8a7 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EC_POINT_new.html @@ -0,0 +1,169 @@ + + + + +EC_POINT_new + + + + + + + + + + +

NAME

+ +

EC_POINT_set_Jprojective_coordinates_GFp, EC_POINT_point2buf, EC_POINT_new, EC_POINT_free, EC_POINT_clear_free, EC_POINT_copy, EC_POINT_dup, EC_POINT_method_of, EC_POINT_set_to_infinity, EC_POINT_get_Jprojective_coordinates_GFp, EC_POINT_set_affine_coordinates, EC_POINT_get_affine_coordinates, EC_POINT_set_compressed_coordinates, EC_POINT_set_affine_coordinates_GFp, EC_POINT_get_affine_coordinates_GFp, EC_POINT_set_compressed_coordinates_GFp, EC_POINT_set_affine_coordinates_GF2m, EC_POINT_get_affine_coordinates_GF2m, EC_POINT_set_compressed_coordinates_GF2m, EC_POINT_point2oct, EC_POINT_oct2point, EC_POINT_point2bn, EC_POINT_bn2point, EC_POINT_point2hex, EC_POINT_hex2point - Functions for creating, destroying and manipulating EC_POINT objects

+ +

SYNOPSIS

+ +
#include <openssl/ec.h>
+
+EC_POINT *EC_POINT_new(const EC_GROUP *group);
+void EC_POINT_free(EC_POINT *point);
+void EC_POINT_clear_free(EC_POINT *point);
+int EC_POINT_copy(EC_POINT *dst, const EC_POINT *src);
+EC_POINT *EC_POINT_dup(const EC_POINT *src, const EC_GROUP *group);
+const EC_METHOD *EC_POINT_method_of(const EC_POINT *point);
+int EC_POINT_set_to_infinity(const EC_GROUP *group, EC_POINT *point);
+int EC_POINT_set_Jprojective_coordinates_GFp(const EC_GROUP *group,
+                                             EC_POINT *p,
+                                             const BIGNUM *x, const BIGNUM *y,
+                                             const BIGNUM *z, BN_CTX *ctx);
+int EC_POINT_get_Jprojective_coordinates_GFp(const EC_GROUP *group,
+                                             const EC_POINT *p,
+                                             BIGNUM *x, BIGNUM *y, BIGNUM *z,
+                                             BN_CTX *ctx);
+int EC_POINT_set_affine_coordinates(const EC_GROUP *group, EC_POINT *p,
+                                    const BIGNUM *x, const BIGNUM *y,
+                                    BN_CTX *ctx);
+int EC_POINT_get_affine_coordinates(const EC_GROUP *group, const EC_POINT *p,
+                                    BIGNUM *x, BIGNUM *y, BN_CTX *ctx);
+int EC_POINT_set_compressed_coordinates(const EC_GROUP *group, EC_POINT *p,
+                                        const BIGNUM *x, int y_bit,
+                                        BN_CTX *ctx);
+int EC_POINT_set_affine_coordinates_GFp(const EC_GROUP *group, EC_POINT *p,
+                                        const BIGNUM *x, const BIGNUM *y,
+                                        BN_CTX *ctx);
+int EC_POINT_get_affine_coordinates_GFp(const EC_GROUP *group,
+                                        const EC_POINT *p,
+                                        BIGNUM *x, BIGNUM *y, BN_CTX *ctx);
+int EC_POINT_set_compressed_coordinates_GFp(const EC_GROUP *group,
+                                            EC_POINT *p,
+                                            const BIGNUM *x, int y_bit,
+                                            BN_CTX *ctx);
+int EC_POINT_set_affine_coordinates_GF2m(const EC_GROUP *group, EC_POINT *p,
+                                         const BIGNUM *x, const BIGNUM *y,
+                                         BN_CTX *ctx);
+int EC_POINT_get_affine_coordinates_GF2m(const EC_GROUP *group,
+                                         const EC_POINT *p,
+                                         BIGNUM *x, BIGNUM *y, BN_CTX *ctx);
+int EC_POINT_set_compressed_coordinates_GF2m(const EC_GROUP *group,
+                                             EC_POINT *p,
+                                             const BIGNUM *x, int y_bit,
+                                             BN_CTX *ctx);
+size_t EC_POINT_point2oct(const EC_GROUP *group, const EC_POINT *p,
+                          point_conversion_form_t form,
+                          unsigned char *buf, size_t len, BN_CTX *ctx);
+size_t EC_POINT_point2buf(const EC_GROUP *group, const EC_POINT *point,
+                          point_conversion_form_t form,
+                          unsigned char **pbuf, BN_CTX *ctx);
+int EC_POINT_oct2point(const EC_GROUP *group, EC_POINT *p,
+                       const unsigned char *buf, size_t len, BN_CTX *ctx);
+BIGNUM *EC_POINT_point2bn(const EC_GROUP *group, const EC_POINT *p,
+                          point_conversion_form_t form, BIGNUM *bn,
+                          BN_CTX *ctx);
+EC_POINT *EC_POINT_bn2point(const EC_GROUP *group, const BIGNUM *bn,
+                            EC_POINT *p, BN_CTX *ctx);
+char *EC_POINT_point2hex(const EC_GROUP *group, const EC_POINT *p,
+                         point_conversion_form_t form, BN_CTX *ctx);
+EC_POINT *EC_POINT_hex2point(const EC_GROUP *group, const char *hex,
+                             EC_POINT *p, BN_CTX *ctx);
+ +

DESCRIPTION

+ +

An EC_POINT structure represents a point on a curve. A new point is constructed by calling the function EC_POINT_new() and providing the group object that the point relates to.

+ +

EC_POINT_free() frees the memory associated with the EC_POINT. if point is NULL nothing is done.

+ +

EC_POINT_clear_free() destroys any sensitive data held within the EC_POINT and then frees its memory. If point is NULL nothing is done.

+ +

EC_POINT_copy() copies the point src into dst. Both src and dst must use the same EC_METHOD.

+ +

EC_POINT_dup() creates a new EC_POINT object and copies the content from src to the newly created EC_POINT object.

+ +

EC_POINT_method_of() obtains the EC_METHOD associated with point.

+ +

A valid point on a curve is the special point at infinity. A point is set to be at infinity by calling EC_POINT_set_to_infinity().

+ +

The affine co-ordinates for a point describe a point in terms of its x and y position. The function EC_POINT_set_affine_coordinates() sets the x and y co-ordinates for the point p defined over the curve given in group. The function EC_POINT_get_affine_coordinates() sets x and y, either of which may be NULL, to the corresponding coordinates of p.

+ +

The functions EC_POINT_set_affine_coordinates_GFp() and EC_POINT_set_affine_coordinates_GF2m() are synonyms for EC_POINT_set_affine_coordinates(). They are defined for backwards compatibility only and should not be used.

+ +

The functions EC_POINT_get_affine_coordinates_GFp() and EC_POINT_get_affine_coordinates_GF2m() are synonyms for EC_POINT_get_affine_coordinates(). They are defined for backwards compatibility only and should not be used.

+ +

As well as the affine co-ordinates, a point can alternatively be described in terms of its Jacobian projective co-ordinates (for Fp curves only). Jacobian projective co-ordinates are expressed as three values x, y and z. Working in this co-ordinate system provides more efficient point multiplication operations. A mapping exists between Jacobian projective co-ordinates and affine co-ordinates. A Jacobian projective co-ordinate (x, y, z) can be written as an affine co-ordinate as (x/(z^2), y/(z^3)). Conversion to Jacobian projective from affine co-ordinates is simple. The co-ordinate (x, y) is mapped to (x, y, 1). To set or get the projective co-ordinates use EC_POINT_set_Jprojective_coordinates_GFp() and 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 using the EC_POINT_set_compressed_coordinates() function where x is the x co-ordinate and y_bit is a value 0 or 1 to identify which of the two possible values for y should be used.

+ +

The functions EC_POINT_set_compressed_coordinates_GFp() and EC_POINT_set_compressed_coordinates_GF2m() are synonyms for EC_POINT_set_compressed_coordinates(). They are defined for backwards compatibility only and should not be used.

+ +

In addition EC_POINT can be converted to and from various external representations. The octet form is the binary encoding of the ECPoint structure (as defined in RFC5480 and used in certificates and TLS records): only the content octets are present, the OCTET STRING tag and length are not included. BIGNUM form is the octet form interpreted as a big endian integer converted to a BIGNUM structure. Hexadecimal form is the octet form converted to a NULL terminated character string where each character is one of the printable values 0-9 or A-F (or a-f).

+ +

The functions EC_POINT_point2oct(), EC_POINT_oct2point(), EC_POINT_point2bn(), EC_POINT_bn2point(), EC_POINT_point2hex() and EC_POINT_hex2point() convert from and to EC_POINTs for the formats: octet, BIGNUM and hexadecimal respectively.

+ +

The function EC_POINT_point2oct() encodes the given curve point p as an octet string into the buffer buf of size len, using the specified conversion form form. The encoding conforms with Sec. 2.3.3 of the SECG SEC 1 ("Elliptic Curve Cryptography") standard. Similarly the function EC_POINT_oct2point() decodes a curve point into p from the octet string contained in the given buffer buf of size len, conforming to Sec. 2.3.4 of the SECG SEC 1 ("Elliptic Curve Cryptography") standard.

+ +

The functions EC_POINT_point2hex() and EC_POINT_point2bn() convert a point p, respectively, to the hexadecimal or BIGNUM representation of the same encoding of the function EC_POINT_point2oct(). Vice versa, similarly to the function EC_POINT_oct2point(), the functions EC_POINT_hex2point() and EC_POINT_point2bn() decode the hexadecimal or BIGNUM representation into the EC_POINT p.

+ +

Notice that, according to the standard, the octet string encoding of the point at infinity for a given curve is fixed to a single octet of value zero and that, vice versa, a single octet of size zero is decoded as the point at infinity.

+ +

The function EC_POINT_point2oct() must be supplied with a buffer long enough to store the octet form. The return value provides the number of octets stored. Calling the function with a NULL buffer will not perform the conversion but will still return the required buffer length.

+ +

The function EC_POINT_point2buf() allocates a buffer of suitable length and writes an EC_POINT to it in octet format. The allocated buffer is written to *pbuf and its length is returned. The caller must free up the allocated buffer with a call to OPENSSL_free(). Since the allocated buffer value is written to *pbuf the pbuf parameter MUST NOT be NULL.

+ +

The function EC_POINT_point2hex() will allocate sufficient memory to store the hexadecimal string. It is the caller's responsibility to free this memory with a subsequent call to OPENSSL_free().

+ +

RETURN VALUES

+ +

EC_POINT_new() and EC_POINT_dup() return the newly allocated EC_POINT or NULL on error.

+ +

The following functions return 1 on success or 0 on error: EC_POINT_copy(), EC_POINT_set_to_infinity(), EC_POINT_set_Jprojective_coordinates_GFp(), EC_POINT_get_Jprojective_coordinates_GFp(), EC_POINT_set_affine_coordinates_GFp(), EC_POINT_get_affine_coordinates_GFp(), EC_POINT_set_compressed_coordinates_GFp(), EC_POINT_set_affine_coordinates_GF2m(), EC_POINT_get_affine_coordinates_GF2m(), EC_POINT_set_compressed_coordinates_GF2m() and EC_POINT_oct2point().

+ +

EC_POINT_method_of returns the EC_METHOD associated with the supplied EC_POINT.

+ +

EC_POINT_point2oct() and EC_POINT_point2buf() return the length of the required buffer or 0 on error.

+ +

EC_POINT_point2bn() returns the pointer to the BIGNUM supplied, or NULL on error.

+ +

EC_POINT_bn2point() returns the pointer to the EC_POINT supplied, or NULL on error.

+ +

EC_POINT_point2hex() returns a pointer to the hex string, or NULL on error.

+ +

EC_POINT_hex2point() returns the pointer to the EC_POINT supplied, or NULL on error.

+ +

SEE ALSO

+ +

crypto(7), EC_GROUP_new(3), EC_GROUP_copy(3), EC_POINT_add(3), EC_KEY_new(3), EC_GFp_simple_method(3), d2i_ECPKParameters(3)

+ +

COPYRIGHT

+ +

Copyright 2013-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ENGINE_add.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ENGINE_add.html new file mode 100644 index 00000000..52d622ad --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ENGINE_add.html @@ -0,0 +1,422 @@ + + + + +ENGINE_add + + + + + + + + + + +

NAME

+ +

ENGINE_get_DH, ENGINE_get_DSA, ENGINE_by_id, ENGINE_get_cipher_engine, ENGINE_get_default_DH, ENGINE_get_default_DSA, ENGINE_get_default_RAND, ENGINE_get_default_RSA, ENGINE_get_digest_engine, ENGINE_get_first, ENGINE_get_last, ENGINE_get_next, ENGINE_get_prev, ENGINE_new, ENGINE_get_ciphers, ENGINE_get_ctrl_function, ENGINE_get_digests, ENGINE_get_destroy_function, ENGINE_get_finish_function, ENGINE_get_init_function, ENGINE_get_load_privkey_function, ENGINE_get_load_pubkey_function, ENGINE_load_private_key, ENGINE_load_public_key, ENGINE_get_RAND, ENGINE_get_RSA, ENGINE_get_id, ENGINE_get_name, ENGINE_get_cmd_defns, ENGINE_get_cipher, ENGINE_get_digest, ENGINE_add, ENGINE_cmd_is_executable, ENGINE_ctrl, ENGINE_ctrl_cmd, ENGINE_ctrl_cmd_string, ENGINE_finish, ENGINE_free, ENGINE_get_flags, ENGINE_init, ENGINE_register_DH, ENGINE_register_DSA, ENGINE_register_RAND, ENGINE_register_RSA, ENGINE_register_all_complete, ENGINE_register_ciphers, ENGINE_register_complete, ENGINE_register_digests, ENGINE_remove, ENGINE_set_DH, ENGINE_set_DSA, ENGINE_set_RAND, ENGINE_set_RSA, ENGINE_set_ciphers, ENGINE_set_cmd_defns, ENGINE_set_ctrl_function, ENGINE_set_default, ENGINE_set_default_DH, ENGINE_set_default_DSA, ENGINE_set_default_RAND, ENGINE_set_default_RSA, ENGINE_set_default_ciphers, ENGINE_set_default_digests, ENGINE_set_default_string, ENGINE_set_destroy_function, ENGINE_set_digests, ENGINE_set_finish_function, ENGINE_set_flags, ENGINE_set_id, ENGINE_set_init_function, ENGINE_set_load_privkey_function, ENGINE_set_load_pubkey_function, ENGINE_set_name, ENGINE_up_ref, ENGINE_get_table_flags, ENGINE_cleanup, ENGINE_load_builtin_engines, ENGINE_register_all_DH, ENGINE_register_all_DSA, ENGINE_register_all_RAND, ENGINE_register_all_RSA, ENGINE_register_all_ciphers, ENGINE_register_all_digests, ENGINE_set_table_flags, ENGINE_unregister_DH, ENGINE_unregister_DSA, ENGINE_unregister_RAND, ENGINE_unregister_RSA, ENGINE_unregister_ciphers, ENGINE_unregister_digests - ENGINE cryptographic module support

+ +

SYNOPSIS

+ +
#include <openssl/engine.h>
+
+ENGINE *ENGINE_get_first(void);
+ENGINE *ENGINE_get_last(void);
+ENGINE *ENGINE_get_next(ENGINE *e);
+ENGINE *ENGINE_get_prev(ENGINE *e);
+
+int ENGINE_add(ENGINE *e);
+int ENGINE_remove(ENGINE *e);
+
+ENGINE *ENGINE_by_id(const char *id);
+
+int ENGINE_init(ENGINE *e);
+int ENGINE_finish(ENGINE *e);
+
+void ENGINE_load_builtin_engines(void);
+
+ENGINE *ENGINE_get_default_RSA(void);
+ENGINE *ENGINE_get_default_DSA(void);
+ENGINE *ENGINE_get_default_DH(void);
+ENGINE *ENGINE_get_default_RAND(void);
+ENGINE *ENGINE_get_cipher_engine(int nid);
+ENGINE *ENGINE_get_digest_engine(int nid);
+
+int ENGINE_set_default_RSA(ENGINE *e);
+int ENGINE_set_default_DSA(ENGINE *e);
+int ENGINE_set_default_DH(ENGINE *e);
+int ENGINE_set_default_RAND(ENGINE *e);
+int ENGINE_set_default_ciphers(ENGINE *e);
+int ENGINE_set_default_digests(ENGINE *e);
+int ENGINE_set_default_string(ENGINE *e, const char *list);
+
+int ENGINE_set_default(ENGINE *e, unsigned int flags);
+
+unsigned int ENGINE_get_table_flags(void);
+void ENGINE_set_table_flags(unsigned int flags);
+
+int ENGINE_register_RSA(ENGINE *e);
+void ENGINE_unregister_RSA(ENGINE *e);
+void ENGINE_register_all_RSA(void);
+int ENGINE_register_DSA(ENGINE *e);
+void ENGINE_unregister_DSA(ENGINE *e);
+void ENGINE_register_all_DSA(void);
+int ENGINE_register_DH(ENGINE *e);
+void ENGINE_unregister_DH(ENGINE *e);
+void ENGINE_register_all_DH(void);
+int ENGINE_register_RAND(ENGINE *e);
+void ENGINE_unregister_RAND(ENGINE *e);
+void ENGINE_register_all_RAND(void);
+int ENGINE_register_ciphers(ENGINE *e);
+void ENGINE_unregister_ciphers(ENGINE *e);
+void ENGINE_register_all_ciphers(void);
+int ENGINE_register_digests(ENGINE *e);
+void ENGINE_unregister_digests(ENGINE *e);
+void ENGINE_register_all_digests(void);
+int ENGINE_register_complete(ENGINE *e);
+int ENGINE_register_all_complete(void);
+
+int ENGINE_ctrl(ENGINE *e, int cmd, long i, void *p, void (*f)(void));
+int ENGINE_cmd_is_executable(ENGINE *e, int cmd);
+int ENGINE_ctrl_cmd(ENGINE *e, const char *cmd_name,
+                    long i, void *p, void (*f)(void), int cmd_optional);
+int ENGINE_ctrl_cmd_string(ENGINE *e, const char *cmd_name, const char *arg,
+                           int cmd_optional);
+
+ENGINE *ENGINE_new(void);
+int ENGINE_free(ENGINE *e);
+int ENGINE_up_ref(ENGINE *e);
+
+int ENGINE_set_id(ENGINE *e, const char *id);
+int ENGINE_set_name(ENGINE *e, const char *name);
+int ENGINE_set_RSA(ENGINE *e, const RSA_METHOD *rsa_meth);
+int ENGINE_set_DSA(ENGINE *e, const DSA_METHOD *dsa_meth);
+int ENGINE_set_DH(ENGINE *e, const DH_METHOD *dh_meth);
+int ENGINE_set_RAND(ENGINE *e, const RAND_METHOD *rand_meth);
+int ENGINE_set_destroy_function(ENGINE *e, ENGINE_GEN_INT_FUNC_PTR destroy_f);
+int ENGINE_set_init_function(ENGINE *e, ENGINE_GEN_INT_FUNC_PTR init_f);
+int ENGINE_set_finish_function(ENGINE *e, ENGINE_GEN_INT_FUNC_PTR finish_f);
+int ENGINE_set_ctrl_function(ENGINE *e, ENGINE_CTRL_FUNC_PTR ctrl_f);
+int ENGINE_set_load_privkey_function(ENGINE *e, ENGINE_LOAD_KEY_PTR loadpriv_f);
+int ENGINE_set_load_pubkey_function(ENGINE *e, ENGINE_LOAD_KEY_PTR loadpub_f);
+int ENGINE_set_ciphers(ENGINE *e, ENGINE_CIPHERS_PTR f);
+int ENGINE_set_digests(ENGINE *e, ENGINE_DIGESTS_PTR f);
+int ENGINE_set_flags(ENGINE *e, int flags);
+int ENGINE_set_cmd_defns(ENGINE *e, const ENGINE_CMD_DEFN *defns);
+
+const char *ENGINE_get_id(const ENGINE *e);
+const char *ENGINE_get_name(const ENGINE *e);
+const RSA_METHOD *ENGINE_get_RSA(const ENGINE *e);
+const DSA_METHOD *ENGINE_get_DSA(const ENGINE *e);
+const DH_METHOD *ENGINE_get_DH(const ENGINE *e);
+const RAND_METHOD *ENGINE_get_RAND(const ENGINE *e);
+ENGINE_GEN_INT_FUNC_PTR ENGINE_get_destroy_function(const ENGINE *e);
+ENGINE_GEN_INT_FUNC_PTR ENGINE_get_init_function(const ENGINE *e);
+ENGINE_GEN_INT_FUNC_PTR ENGINE_get_finish_function(const ENGINE *e);
+ENGINE_CTRL_FUNC_PTR ENGINE_get_ctrl_function(const ENGINE *e);
+ENGINE_LOAD_KEY_PTR ENGINE_get_load_privkey_function(const ENGINE *e);
+ENGINE_LOAD_KEY_PTR ENGINE_get_load_pubkey_function(const ENGINE *e);
+ENGINE_CIPHERS_PTR ENGINE_get_ciphers(const ENGINE *e);
+ENGINE_DIGESTS_PTR ENGINE_get_digests(const ENGINE *e);
+const EVP_CIPHER *ENGINE_get_cipher(ENGINE *e, int nid);
+const EVP_MD *ENGINE_get_digest(ENGINE *e, int nid);
+int ENGINE_get_flags(const ENGINE *e);
+const ENGINE_CMD_DEFN *ENGINE_get_cmd_defns(const ENGINE *e);
+
+EVP_PKEY *ENGINE_load_private_key(ENGINE *e, const char *key_id,
+                                  UI_METHOD *ui_method, void *callback_data);
+EVP_PKEY *ENGINE_load_public_key(ENGINE *e, const char *key_id,
+                                 UI_METHOD *ui_method, void *callback_data);
+ +

Deprecated:

+ +
#if OPENSSL_API_COMPAT < 0x10100000L
+void ENGINE_cleanup(void)
+#endif
+ +

DESCRIPTION

+ +

These functions create, manipulate, and use cryptographic modules in the form of ENGINE objects. These objects act as containers for implementations of cryptographic algorithms, and support a reference-counted mechanism to allow them to be dynamically loaded in and out of the running application.

+ +

The cryptographic functionality that can be provided by an ENGINE implementation includes the following abstractions;

+ +
RSA_METHOD - for providing alternative RSA implementations
+DSA_METHOD, DH_METHOD, RAND_METHOD, ECDH_METHOD, ECDSA_METHOD,
+      - similarly for other OpenSSL APIs
+EVP_CIPHER - potentially multiple cipher algorithms (indexed by 'nid')
+EVP_DIGEST - potentially multiple hash algorithms (indexed by 'nid')
+key-loading - loading public and/or private EVP_PKEY keys
+ +

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 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.

+ +

ENGINE objects have two levels of reference-counting to match the way in which the objects are used. At the most basic level, each ENGINE pointer is inherently a structural reference - a structural reference is required to use the pointer value at all, as this kind of reference is a guarantee that the structure can not be deallocated until the reference is released.

+ +

However, a structural reference provides no guarantee that the ENGINE is initialised and able to use any of its cryptographic implementations. Indeed it's quite possible that most ENGINEs will not initialise at all in typical environments, as ENGINEs are typically used to support specialised hardware. To use an ENGINE's functionality, you need a functional reference. This kind of reference can be considered a specialised form of structural reference, because each functional reference implicitly contains a structural reference as well - however to avoid difficult-to-find programming bugs, it is recommended to treat the two kinds of reference independently. If you have a functional reference to an ENGINE, you have a guarantee that the ENGINE has been initialised and is ready to perform cryptographic operations, and will remain initialised until after you have released your reference.

+ +

Structural references

+ +

This basic type of reference is used for instantiating new ENGINEs, iterating across OpenSSL's internal linked-list of loaded ENGINEs, reading information about an ENGINE, etc. Essentially a structural reference is sufficient if you only need to query or manipulate the data of an ENGINE implementation rather than use its functionality.

+ +

The ENGINE_new() function returns a structural reference to a new (empty) ENGINE object. There are other ENGINE API functions that return structural references such as; ENGINE_by_id(), ENGINE_get_first(), ENGINE_get_last(), ENGINE_get_next(), ENGINE_get_prev(). All structural references should be released by a corresponding to call to the ENGINE_free() function - the ENGINE object itself will only actually be cleaned up and deallocated when the last structural reference is released.

+ +

It should also be noted that many ENGINE API function calls that accept a structural reference will internally obtain another reference - typically this happens whenever the supplied ENGINE will be needed by OpenSSL after the function has returned. Eg. the function to add a new ENGINE to OpenSSL's internal list is ENGINE_add() - if this function returns success, then OpenSSL will have stored a new structural reference internally so the caller is still responsible for freeing their own reference with ENGINE_free() when they are finished with it. In a similar way, some functions will automatically release the structural reference passed to it if part of the function's job is to do so. Eg. the ENGINE_get_next() and ENGINE_get_prev() functions are used for iterating across the internal ENGINE list - they will return a new structural reference to the next (or previous) ENGINE in the list or NULL if at the end (or beginning) of the list, but in either case the structural reference passed to the function is released on behalf of the caller.

+ +

To clarify a particular function's handling of references, one should always consult that function's documentation "man" page, or failing that the openssl/engine.h header file includes some hints.

+ +

Functional references

+ +

As mentioned, functional references exist when the cryptographic functionality of an ENGINE is required to be available. A functional reference can be obtained in one of two ways; from an existing structural reference to the required ENGINE, or by asking OpenSSL for the default 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 system drivers, no special hardware attached, etc), otherwise it will return non-zero to indicate that the ENGINE is now operational and will have allocated a new 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(), 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 algorithm-specific types in OpenSSL, such as RSA, DSA, EVP_CIPHER_CTX, etc.

+ +

Default implementations

+ +

For each supported abstraction, the ENGINE code maintains an internal table of state to control which implementations are available for a given abstraction and which should be used by default. These implementations are registered in the tables and indexed by an 'nid' value, because abstractions like EVP_CIPHER and EVP_DIGEST support many distinct algorithms and modes, and ENGINEs can support arbitrarily many of them. 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 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 used. If no ENGINE should (or can) be used, it will return NULL and the caller will operate with a NULL ENGINE handle - this usually equates to using the conventional software implementation. In the latter case, OpenSSL will from then on behave the way it used to before the ENGINE API existed.

+ +

Each state table has a flag to note whether it has processed this "get_default" query since the table was last modified, because to process this question it must iterate across all the registered ENGINEs in the table trying to initialise each of them in turn, in case one of them is operational. If it returns a functional reference to an ENGINE, it will also cache another reference to speed up processing future queries (without needing to iterate across the table). Likewise, it will cache a NULL response if no ENGINE was available so that future queries won't repeat the same iteration unless the state table changes. This behaviour can also be changed; if the ENGINE_TABLE_FLAG_NOINIT flag is set (using ENGINE_set_table_flags()), no attempted initialisations will take place, instead the only way for the state table to return a non-NULL ENGINE to the "get_default" query will be if one is expressly set in the table. Eg. ENGINE_set_default_RSA() does the same job as ENGINE_register_RSA() except that it also sets the state table's cached response for the "get_default" query. In the case of abstractions like EVP_CIPHER, where implementations are indexed by 'nid', these flags and cached-responses are distinct for each 'nid' value.

+ +

Application requirements

+ +

This section will explain the basic things an application programmer should support to make the most useful elements of the ENGINE functionality available to the user. The first thing to consider is whether the programmer wishes to make alternative ENGINE modules available to the application and user. OpenSSL maintains an internal linked list of "visible" ENGINEs from which it has to operate - at start-up, this list is empty and in fact if an application does not call any ENGINE API calls and it uses static linking against openssl, then the resulting application binary will not contain any alternative ENGINE code at all. So the first consideration is whether any/all available ENGINE implementations should be made visible to OpenSSL - this is controlled by calling the various "load" functions.

+ +

The fact that ENGINEs are made visible to OpenSSL (and thus are linked into the program and loaded into memory at run-time) does not mean they are "registered" or called into use by OpenSSL automatically - that behaviour 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 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 couple of simple cases and leave developers to consider these and the source code to openssl's builtin utilities as guides.

+ +

If no ENGINE API functions are called within an application, then OpenSSL will not allocate any internal resources. Prior to OpenSSL 1.1.0, however, if any ENGINEs are loaded, even if not registered or used, it was necessary to call ENGINE_cleanup() before the program exits.

+ +

Using a specific ENGINE implementation

+ +

Here we'll assume an application has been configured by its user or admin to want to use the "ACME" ENGINE if it is available in the version of OpenSSL the application was compiled with. If it is available, it should be used by default for all RSA, DSA, and symmetric cipher operations, otherwise OpenSSL should use its builtin software as per usual. The following code illustrates how to approach this;

+ +
ENGINE *e;
+const char *engine_id = "ACME";
+ENGINE_load_builtin_engines();
+e = ENGINE_by_id(engine_id);
+if (!e)
+    /* the engine isn't available */
+    return;
+if (!ENGINE_init(e)) {
+    /* the engine couldn't initialise, release 'e' */
+    ENGINE_free(e);
+    return;
+}
+if (!ENGINE_set_default_RSA(e))
+    /*
+     * This should only happen when 'e' can't initialise, but the previous
+     * statement suggests it did.
+     */
+    abort();
+ENGINE_set_default_DSA(e);
+ENGINE_set_default_ciphers(e);
+/* Release the functional reference from ENGINE_init() */
+ENGINE_finish(e);
+/* Release the structural reference from ENGINE_by_id() */
+ENGINE_free(e);
+ +

Automatically using builtin ENGINE implementations

+ +

Here we'll assume we want to load and register all ENGINE implementations bundled with OpenSSL, such that for any cryptographic algorithm required by OpenSSL - if there is an ENGINE that implements it and can be initialised, it should be used. The following code illustrates how this can work;

+ +
/* Load all bundled ENGINEs into memory and make them visible */
+ENGINE_load_builtin_engines();
+/* Register all of them for every algorithm they collectively implement */
+ENGINE_register_all_complete();
+ +

That's all that's required. Eg. the next time OpenSSL tries to set up an RSA key, any bundled ENGINEs that implement RSA_METHOD will be passed to ENGINE_init() and if any of those succeed, that ENGINE will be set as the default for RSA use from then on.

+ +

Advanced configuration support

+ +

There is a mechanism supported by the ENGINE framework that allows each ENGINE implementation to define an arbitrary set of configuration "commands" and expose them to OpenSSL and any applications based on OpenSSL. This mechanism is entirely based on the use of name-value pairs and assumes ASCII input (no unicode or UTF for now!), so it is ideal if applications want to provide a transparent way for users to provide arbitrary configuration "directives" directly to such ENGINEs. It is also possible for the application to dynamically interrogate the loaded ENGINE implementations for the names, descriptions, and input flags of their available "control commands", providing a more flexible configuration scheme. However, if the user is expected to know which ENGINE device he/she is using (in the case of specialised hardware, this goes without saying) then applications may not need to concern themselves with discovering the supported control commands and simply prefer to pass settings into ENGINEs exactly as they are provided by the user.

+ +

Before illustrating how control commands work, it is worth mentioning what they are typically used for. Broadly speaking there are two uses for control commands; the first is to provide the necessary details to the implementation (which may know nothing at all specific to the host system) 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 before attempting to initialise it, ie. 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 in some cases both. ENGINE implementations should provide indications of this in the descriptions attached to builtin control commands and/or in external product documentation.

+ +

Issuing control commands to an ENGINE

+ +

Let's illustrate by example; a function for which the caller supplies the name of the ENGINE it wishes to use, a table of string-pairs for use before initialisation, and another table for use after initialisation. Note that the string-pairs used for control commands consist of a command "name" followed by the command "parameter" - the parameter could be NULL in some cases but the name can not. This function should initialise the ENGINE (issuing the "pre" commands beforehand and the "post" commands afterwards) and set it as the default for everything except RAND and then return a boolean success or failure.

+ +
int generic_load_engine_fn(const char *engine_id,
+                           const char **pre_cmds, int pre_num,
+                           const char **post_cmds, int post_num)
+{
+    ENGINE *e = ENGINE_by_id(engine_id);
+    if (!e) return 0;
+    while (pre_num--) {
+        if (!ENGINE_ctrl_cmd_string(e, pre_cmds[0], pre_cmds[1], 0)) {
+            fprintf(stderr, "Failed command (%s - %s:%s)\n", engine_id,
+                    pre_cmds[0], pre_cmds[1] ? pre_cmds[1] : "(NULL)");
+            ENGINE_free(e);
+            return 0;
+        }
+        pre_cmds += 2;
+    }
+    if (!ENGINE_init(e)) {
+        fprintf(stderr, "Failed initialisation\n");
+        ENGINE_free(e);
+        return 0;
+    }
+    /*
+     * ENGINE_init() returned a functional reference, so free the structural
+     * reference from ENGINE_by_id().
+     */
+    ENGINE_free(e);
+    while (post_num--) {
+        if (!ENGINE_ctrl_cmd_string(e, post_cmds[0], post_cmds[1], 0)) {
+            fprintf(stderr, "Failed command (%s - %s:%s)\n", engine_id,
+                    post_cmds[0], post_cmds[1] ? post_cmds[1] : "(NULL)");
+            ENGINE_finish(e);
+            return 0;
+        }
+        post_cmds += 2;
+    }
+    ENGINE_set_default(e, ENGINE_METHOD_ALL & ~ENGINE_METHOD_RAND);
+    /* Success */
+    return 1;
+}
+ +

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 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 only supplying commands specific to the given ENGINE so we set this to FALSE.

+ +

Discovering supported control commands

+ +

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. 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 OpenSSL core routines.

+ +

It is using these "core" control commands that one can discover the control commands implemented by a given ENGINE, specifically the commands:

+ +
ENGINE_HAS_CTRL_FUNCTION
+ENGINE_CTRL_GET_FIRST_CMD_TYPE
+ENGINE_CTRL_GET_NEXT_CMD_TYPE
+ENGINE_CTRL_GET_CMD_FROM_NAME
+ENGINE_CTRL_GET_NAME_LEN_FROM_CMD
+ENGINE_CTRL_GET_NAME_FROM_CMD
+ENGINE_CTRL_GET_DESC_LEN_FROM_CMD
+ENGINE_CTRL_GET_DESC_FROM_CMD
+ENGINE_CTRL_GET_CMD_FLAGS
+ +

Whilst these commands are automatically processed by the OpenSSL framework code, they use various properties exposed by each ENGINE to process these queries. An ENGINE has 3 properties it exposes that can affect how this behaves; it can supply a ctrl() handler, it can specify ENGINE_FLAGS_MANUAL_CMD_CTRL in the ENGINE's flags, and it can expose an array of control command descriptions. If an ENGINE specifies the ENGINE_FLAGS_MANUAL_CMD_CTRL flag, then it will simply pass all these "core" control commands directly to the ENGINE's ctrl() handler (and thus, it must have supplied one), so it is up to the ENGINE to reply to these "discovery" commands itself. If that flag is not set, then the OpenSSL framework code will work with the following rules:

+ +
if no ctrl() handler supplied;
+    ENGINE_HAS_CTRL_FUNCTION returns FALSE (zero),
+    all other commands fail.
+if a ctrl() handler was supplied but no array of control commands;
+    ENGINE_HAS_CTRL_FUNCTION returns TRUE,
+    all other commands fail.
+if a ctrl() handler and array of control commands was supplied;
+    ENGINE_HAS_CTRL_FUNCTION returns TRUE,
+    all other commands proceed processing ...
+ +

If the ENGINE's array of control commands is empty then all other commands will fail, otherwise; ENGINE_CTRL_GET_FIRST_CMD_TYPE returns the identifier of the first command supported by the ENGINE, ENGINE_GET_NEXT_CMD_TYPE takes the identifier of a command supported by the ENGINE and returns the next command identifier or fails if there are no more, ENGINE_CMD_FROM_NAME takes a string name for a command and returns the corresponding identifier or fails if no such command name exists, and the remaining commands take a command identifier and return properties of the corresponding commands. All except ENGINE_CTRL_GET_FLAGS return the string length of a command name or description, or populate a supplied character buffer with a copy of the command name or description. ENGINE_CTRL_GET_FLAGS returns a bitwise-OR'd mask of the following possible values:

+ +
ENGINE_CMD_FLAG_NUMERIC
+ENGINE_CMD_FLAG_STRING
+ENGINE_CMD_FLAG_NO_INPUT
+ENGINE_CMD_FLAG_INTERNAL
+ +

If the ENGINE_CMD_FLAG_INTERNAL flag is set, then any other flags are purely informational to the caller - this flag will prevent the command being usable for any higher-level ENGINE functions such as ENGINE_ctrl_cmd_string(). "INTERNAL" commands are not intended to be exposed to text-based configuration 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" 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).

+ +

ENVIRONMENT

+ +
+ +
OPENSSL_ENGINES
+
+ +

The path to the engines directory. Ignored in set-user-ID and set-group-ID programs.

+ +
+
+ +

RETURN VALUES

+ +

ENGINE_get_first(), ENGINE_get_last(), ENGINE_get_next() and ENGINE_get_prev() return a valid ENGINE structure or NULL if an error occurred.

+ +

ENGINE_add() and ENGINE_remove() return 1 on success or 0 on error.

+ +

ENGINE_by_id() returns a valid ENGINE structure or NULL if an error occurred.

+ +

ENGINE_init() and ENGINE_finish() return 1 on success or 0 on error.

+ +

All ENGINE_get_default_TYPE() functions, ENGINE_get_cipher_engine() and ENGINE_get_digest_engine() return a valid ENGINE structure on success or NULL if an error occurred.

+ +

All ENGINE_set_default_TYPE() functions return 1 on success or 0 on error.

+ +

ENGINE_set_default() returns 1 on success or 0 on error.

+ +

ENGINE_get_table_flags() returns an unsigned integer value representing the global table flags which are used to control the registration behaviour of ENGINE implementations.

+ +

All ENGINE_register_TYPE() functions return 1 on success or 0 on error.

+ +

ENGINE_register_complete() and ENGINE_register_all_complete() return 1 on success or 0 on error.

+ +

ENGINE_ctrl() returns a positive value on success or others on error.

+ +

ENGINE_cmd_is_executable() returns 1 if cmd is executable or 0 otherwise.

+ +

ENGINE_ctrl_cmd() and ENGINE_ctrl_cmd_string() return 1 on success or 0 on error.

+ +

ENGINE_new() returns a valid ENGINE structure on success or NULL if an error occurred.

+ +

ENGINE_free() returns 1 on success or 0 on error.

+ +

ENGINE_up_ref() returns 1 on success or 0 on error.

+ +

ENGINE_set_id() and ENGINE_set_name() return 1 on success or 0 on error.

+ +

All other ENGINE_set_* functions return 1 on success or 0 on error.

+ +

ENGINE_get_id() and ENGINE_get_name() return a string representing the identifier and the name of the ENGINE e respectively.

+ +

ENGINE_get_RSA(), ENGINE_get_DSA(), ENGINE_get_DH() and ENGINE_get_RAND() return corresponding method structures for each algorithms.

+ +

ENGINE_get_destroy_function(), ENGINE_get_init_function(), ENGINE_get_finish_function(), ENGINE_get_ctrl_function(), ENGINE_get_load_privkey_function(), ENGINE_get_load_pubkey_function(), ENGINE_get_ciphers() and ENGINE_get_digests() return corresponding function pointers of the callbacks.

+ +

ENGINE_get_cipher() returns a valid EVP_CIPHER structure on success or NULL if an error occurred.

+ +

ENGINE_get_digest() returns a valid EVP_MD structure on success or NULL if an error occurred.

+ +

ENGINE_get_flags() returns an integer representing the ENGINE flags which are used to control various behaviours of an ENGINE.

+ +

ENGINE_get_cmd_defns() returns an ENGINE_CMD_DEFN structure or NULL if it's not set.

+ +

ENGINE_load_private_key() and ENGINE_load_public_key() return a valid EVP_PKEY structure on success or NULL if an error occurred.

+ +

SEE ALSO

+ +

OPENSSL_init_crypto(3), RSA_new_method(3), DSA_new(3), DH_new(3), RAND_bytes(3), config(5)

+ +

HISTORY

+ +

ENGINE_cleanup() was deprecated in OpenSSL 1.1.0 by the automatic cleanup done by OPENSSL_cleanup() and should not be used.

+ +

COPYRIGHT

+ +

Copyright 2002-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ERR_GET_LIB.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ERR_GET_LIB.html new file mode 100644 index 00000000..d745dd0a --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ERR_GET_LIB.html @@ -0,0 +1,77 @@ + + + + +ERR_GET_LIB + + + + + + + + + + +

NAME

+ +

ERR_GET_LIB, ERR_GET_FUNC, ERR_GET_REASON, ERR_FATAL_ERROR - get information from error codes

+ +

SYNOPSIS

+ +
#include <openssl/err.h>
+
+int ERR_GET_LIB(unsigned long e);
+
+int ERR_GET_FUNC(unsigned long e);
+
+int ERR_GET_REASON(unsigned long e);
+
+int ERR_FATAL_ERROR(unsigned long e);
+ +

DESCRIPTION

+ +

The error code returned by ERR_get_error() consists of a library number, function code and reason code. ERR_GET_LIB(), ERR_GET_FUNC() and ERR_GET_REASON() can be used to extract these.

+ +

ERR_FATAL_ERROR() indicates whether a given error code is a fatal error.

+ +

The library number and function code describe where the error occurred, the reason code is the information about what went wrong.

+ +

Each sub-library of OpenSSL has a unique library number; function and reason codes are unique within each sub-library. Note that different libraries may use the same value to signal different functions and reasons.

+ +

ERR_R_... reason codes such as ERR_R_MALLOC_FAILURE are globally unique. However, when checking for sub-library specific reason codes, be sure to also compare the library number.

+ +

ERR_GET_LIB(), ERR_GET_FUNC(), ERR_GET_REASON(), and ERR_FATAL_ERROR() are macros.

+ +

RETURN VALUES

+ +

The library number, function code, reason code, and whether the error is fatal, respectively.

+ +

SEE ALSO

+ +

ERR_get_error(3)

+ +

HISTORY

+ +

ERR_GET_LIB(), ERR_GET_FUNC() and ERR_GET_REASON() are available in all versions of OpenSSL.

+ +

COPYRIGHT

+ +

Copyright 2000-2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ERR_clear_error.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ERR_clear_error.html new file mode 100644 index 00000000..a568fdf9 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ERR_clear_error.html @@ -0,0 +1,56 @@ + + + + +ERR_clear_error + + + + + + + + + + +

NAME

+ +

ERR_clear_error - clear the error queue

+ +

SYNOPSIS

+ +
#include <openssl/err.h>
+
+void ERR_clear_error(void);
+ +

DESCRIPTION

+ +

ERR_clear_error() empties the current thread's error queue.

+ +

RETURN VALUES

+ +

ERR_clear_error() has no return value.

+ +

SEE ALSO

+ +

ERR_get_error(3)

+ +

COPYRIGHT

+ +

Copyright 2000-2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ERR_error_string.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ERR_error_string.html new file mode 100644 index 00000000..1679ef6f --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ERR_error_string.html @@ -0,0 +1,77 @@ + + + + +ERR_error_string + + + + + + + + + + +

NAME

+ +

ERR_error_string, ERR_error_string_n, ERR_lib_error_string, ERR_func_error_string, ERR_reason_error_string - obtain human-readable error message

+ +

SYNOPSIS

+ +
#include <openssl/err.h>
+
+char *ERR_error_string(unsigned long e, char *buf);
+void ERR_error_string_n(unsigned long e, char *buf, size_t len);
+
+const char *ERR_lib_error_string(unsigned long e);
+const char *ERR_func_error_string(unsigned long e);
+const char *ERR_reason_error_string(unsigned long e);
+ +

DESCRIPTION

+ +

ERR_error_string() generates a human-readable string representing the error code e, and places it at buf. buf must be at least 256 bytes long. If buf is NULL, the error string is placed in a static buffer. Note that this function is not thread-safe and does no checks on the size of the buffer; use ERR_error_string_n() instead.

+ +

ERR_error_string_n() is a variant of ERR_error_string() that writes at most len characters (including the terminating 0) and truncates the string if necessary. For ERR_error_string_n(), buf may not be NULL.

+ +

The string will have the following format:

+ +
error:[error code]:[library name]:[function name]:[reason string]
+ +

error code is an 8 digit hexadecimal number, library name, function name and reason string are ASCII text.

+ +

ERR_lib_error_string(), ERR_func_error_string() and ERR_reason_error_string() return the library name, function name and reason string respectively.

+ +

If there is no text string registered for the given error code, the error string will contain the numeric code.

+ +

ERR_print_errors(3) can be used to print all error codes currently in the queue.

+ +

RETURN VALUES

+ +

ERR_error_string() returns a pointer to a static buffer containing the string if buf == NULL, buf otherwise.

+ +

ERR_lib_error_string(), ERR_func_error_string() and ERR_reason_error_string() return the strings, and NULL if none is registered for the error code.

+ +

SEE ALSO

+ +

ERR_get_error(3), ERR_print_errors(3)

+ +

COPYRIGHT

+ +

Copyright 2000-2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ERR_get_error.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ERR_get_error.html new file mode 100644 index 00000000..bb244e7c --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ERR_get_error.html @@ -0,0 +1,81 @@ + + + + +ERR_get_error + + + + + + + + + + +

NAME

+ +

ERR_get_error, ERR_peek_error, ERR_peek_last_error, ERR_get_error_line, ERR_peek_error_line, ERR_peek_last_error_line, ERR_get_error_line_data, ERR_peek_error_line_data, ERR_peek_last_error_line_data - obtain error code and data

+ +

SYNOPSIS

+ +
#include <openssl/err.h>
+
+unsigned long ERR_get_error(void);
+unsigned long ERR_peek_error(void);
+unsigned long ERR_peek_last_error(void);
+
+unsigned long ERR_get_error_line(const char **file, int *line);
+unsigned long ERR_peek_error_line(const char **file, int *line);
+unsigned long ERR_peek_last_error_line(const char **file, int *line);
+
+unsigned long ERR_get_error_line_data(const char **file, int *line,
+                                      const char **data, int *flags);
+unsigned long ERR_peek_error_line_data(const char **file, int *line,
+                                       const char **data, int *flags);
+unsigned long ERR_peek_last_error_line_data(const char **file, int *line,
+                                            const char **data, int *flags);
+ +

DESCRIPTION

+ +

ERR_get_error() returns the earliest error code from the thread's error queue and removes the entry. This function can be called repeatedly until there are no more error codes to return.

+ +

ERR_peek_error() returns the earliest error code from the thread's error queue without modifying it.

+ +

ERR_peek_last_error() returns the latest error code from the thread's error queue without modifying it.

+ +

See ERR_GET_LIB(3) for obtaining information about location and reason of the error, and ERR_error_string(3) for human-readable error 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 the error occurred in *file and *line, unless these are NULL.

+ +

ERR_get_error_line_data(), ERR_peek_error_line_data() and ERR_peek_last_error_line_data() store additional data and flags associated with the error code in *data and *flags, unless these are NULL. *data contains a string if *flags&ERR_TXT_STRING is true.

+ +

An application MUST NOT free the *data pointer (or any other pointers returned by these functions) with OPENSSL_free() as freeing is handled automatically by the error library.

+ +

RETURN VALUES

+ +

The error code, or 0 if there is no error in the queue.

+ +

SEE ALSO

+ +

ERR_error_string(3), ERR_GET_LIB(3)

+ +

COPYRIGHT

+ +

Copyright 2000-2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ERR_load_crypto_strings.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ERR_load_crypto_strings.html new file mode 100644 index 00000000..6bff77db --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ERR_load_crypto_strings.html @@ -0,0 +1,74 @@ + + + + +ERR_load_crypto_strings + + + + + + + + + + +

NAME

+ +

ERR_load_crypto_strings, SSL_load_error_strings, ERR_free_strings - load and free error strings

+ +

SYNOPSIS

+ +

Deprecated:

+ +
#include <openssl/err.h>
+
+#if OPENSSL_API_COMPAT < 0x10100000L
+void ERR_load_crypto_strings(void);
+void ERR_free_strings(void);
+#endif
+
+#include <openssl/ssl.h>
+
+#if OPENSSL_API_COMPAT < 0x10100000L
+void SSL_load_error_strings(void);
+#endif
+ +

DESCRIPTION

+ +

ERR_load_crypto_strings() registers the error strings for all libcrypto functions. SSL_load_error_strings() does the same, but also registers the libssl error strings.

+ +

In versions prior to OpenSSL 1.1.0, ERR_free_strings() releases any resources created by the above functions.

+ +

RETURN VALUES

+ +

ERR_load_crypto_strings(), SSL_load_error_strings() and ERR_free_strings() return no values.

+ +

SEE ALSO

+ +

ERR_error_string(3)

+ +

HISTORY

+ +

The ERR_load_crypto_strings(), SSL_load_error_strings(), and ERR_free_strings() functions were deprecated in OpenSSL 1.1.0 by OPENSSL_init_crypto() and OPENSSL_init_ssl() and should not be used.

+ +

COPYRIGHT

+ +

Copyright 2000-2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ERR_load_strings.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ERR_load_strings.html new file mode 100644 index 00000000..69fb1bb3 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ERR_load_strings.html @@ -0,0 +1,74 @@ + + + + +ERR_load_strings + + + + + + + + + + +

NAME

+ +

ERR_load_strings, ERR_PACK, ERR_get_next_error_library - load arbitrary error strings

+ +

SYNOPSIS

+ +
#include <openssl/err.h>
+
+void ERR_load_strings(int lib, ERR_STRING_DATA str[]);
+
+int ERR_get_next_error_library(void);
+
+unsigned long ERR_PACK(int lib, int func, int reason);
+ +

DESCRIPTION

+ +

ERR_load_strings() registers error strings for library number lib.

+ +

str is an array of error string data:

+ +
typedef struct ERR_string_data_st
+{
+    unsigned long error;
+    char *string;
+} ERR_STRING_DATA;
+ +

The error code is generated from the library number and a function and reason code: error = ERR_PACK(lib, func, reason). ERR_PACK() is a macro.

+ +

The last entry in the array is {0,0}.

+ +

ERR_get_next_error_library() can be used to assign library numbers to user libraries at runtime.

+ +

RETURN VALUES

+ +

ERR_load_strings() returns no value. ERR_PACK() return the error code. ERR_get_next_error_library() returns zero on failure, otherwise a new library number.

+ +

SEE ALSO

+ +

ERR_load_strings(3)

+ +

COPYRIGHT

+ +

Copyright 2000-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ERR_print_errors.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ERR_print_errors.html new file mode 100644 index 00000000..9a8d5543 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ERR_print_errors.html @@ -0,0 +1,70 @@ + + + + +ERR_print_errors + + + + + + + + + + +

NAME

+ +

ERR_print_errors, ERR_print_errors_fp, ERR_print_errors_cb - print error messages

+ +

SYNOPSIS

+ +
#include <openssl/err.h>
+
+void ERR_print_errors(BIO *bp);
+void ERR_print_errors_fp(FILE *fp);
+void ERR_print_errors_cb(int (*cb)(const char *str, size_t len, void *u), void *u)
+ +

DESCRIPTION

+ +

ERR_print_errors() is a convenience function that prints the error strings for all errors that OpenSSL has recorded to bp, thus emptying the error queue.

+ +

ERR_print_errors_fp() is the same, except that the output goes to a FILE.

+ +

ERR_print_errors_cb() is the same, except that the callback function, cb, is called for each error line with the string, length, and userdata 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]
+ +

error code is an 8 digit hexadecimal number. library name, function name and reason string are ASCII text, as is optional text message if one was set for the respective error code.

+ +

If there is no text string registered for the given error code, the error string will contain the numeric code.

+ +

RETURN VALUES

+ +

ERR_print_errors() and ERR_print_errors_fp() return no values.

+ +

SEE ALSO

+ +

ERR_error_string(3), ERR_get_error(3)

+ +

COPYRIGHT

+ +

Copyright 2000-2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ERR_put_error.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ERR_put_error.html new file mode 100644 index 00000000..f158c6f8 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ERR_put_error.html @@ -0,0 +1,79 @@ + + + + +ERR_put_error + + + + + + + + + + +

NAME

+ +

ERR_put_error, ERR_add_error_data, ERR_add_error_vdata - record an error

+ +

SYNOPSIS

+ +
#include <openssl/err.h>
+
+void ERR_put_error(int lib, int func, int reason, const char *file, int line);
+
+void ERR_add_error_data(int num, ...);
+void ERR_add_error_vdata(int num, va_list arg);
+ +

DESCRIPTION

+ +

ERR_put_error() adds an error code to the thread's error queue. It signals that the error of reason code reason occurred in function func of library lib, in line number line of file. This function is usually called by a macro.

+ +

ERR_add_error_data() associates the concatenation of its num string arguments with the error code added last. ERR_add_error_vdata() is similar except the argument is a va_list.

+ +

ERR_load_strings(3) can be used to register error strings so that the application can a generate human-readable error messages for the error code.

+ +

Reporting errors

+ +

Each sub-library has a specific macro XXXerr() that is used to report errors. Its first argument is a function code XXX_F_..., the second argument is a reason code XXX_R_.... Function codes are derived from the function names; reason codes consist of textual error descriptions. For example, the function ssl3_read_bytes() reports a "handshake failure" as follows:

+ +
SSLerr(SSL_F_SSL3_READ_BYTES, SSL_R_SSL_HANDSHAKE_FAILURE);
+ +

Function and reason codes should consist of upper case 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.

+ +

Although a library will normally report errors using its own specific XXXerr macro, another library's macro can be used. This is normally only done when a library wants to include ASN1 code which must use the ASN1err() macro.

+ +

RETURN VALUES

+ +

ERR_put_error() and ERR_add_error_data() return no values.

+ +

SEE ALSO

+ +

ERR_load_strings(3)

+ +

COPYRIGHT

+ +

Copyright 2000-2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ERR_remove_state.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ERR_remove_state.html new file mode 100644 index 00000000..ed6cec47 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ERR_remove_state.html @@ -0,0 +1,67 @@ + + + + +ERR_remove_state + + + + + + + + + + +

NAME

+ +

ERR_remove_thread_state, ERR_remove_state - DEPRECATED

+ +

SYNOPSIS

+ +

Deprecated:

+ +
#if OPENSSL_API_COMPAT < 0x10000000L
+void ERR_remove_state(unsigned long tid);
+#endif
+
+#if OPENSSL_API_COMPAT < 0x10100000L
+void ERR_remove_thread_state(void *tid);
+#endif
+ +

DESCRIPTION

+ +

ERR_remove_state() frees the error queue associated with the specified thread, identified by tid. ERR_remove_thread_state() does the same thing, except the identifier is an opaque pointer.

+ +

RETURN VALUES

+ +

ERR_remove_state() and ERR_remove_thread_state() return no value.

+ +

SEE ALSO

+ +

LOPENSSL_init_crypto(3)

+ +

HISTORY

+ +

ERR_remove_state() was deprecated in OpenSSL 1.0.0 and ERR_remove_thread_state() was deprecated in OpenSSL 1.1.0; these functions and should not be used.

+ +

COPYRIGHT

+ +

Copyright 2000-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ERR_set_mark.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ERR_set_mark.html new file mode 100644 index 00000000..b8cf1a61 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/ERR_set_mark.html @@ -0,0 +1,57 @@ + + + + +ERR_set_mark + + + + + + + + + + +

NAME

+ +

ERR_set_mark, ERR_pop_to_mark - set marks and pop errors until mark

+ +

SYNOPSIS

+ +
#include <openssl/err.h>
+
+int ERR_set_mark(void);
+
+int ERR_pop_to_mark(void);
+ +

DESCRIPTION

+ +

ERR_set_mark() sets a mark on the current topmost error record if there is one.

+ +

ERR_pop_to_mark() will pop the top of the error stack until a mark is found. The mark is then removed. If there is no mark, the whole stack is removed.

+ +

RETURN VALUES

+ +

ERR_set_mark() returns 0 if the error stack is empty, otherwise 1.

+ +

ERR_pop_to_mark() returns 0 if there was no mark in the error stack, which implies that the stack became empty, otherwise 1.

+ +

COPYRIGHT

+ +

Copyright 2003-2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_BytesToKey.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_BytesToKey.html new file mode 100644 index 00000000..64eb0e29 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_BytesToKey.html @@ -0,0 +1,81 @@ + + + + +EVP_BytesToKey + + + + + + + + + + +

NAME

+ +

EVP_BytesToKey - password based encryption routine

+ +

SYNOPSIS

+ +
#include <openssl/evp.h>
+
+int EVP_BytesToKey(const EVP_CIPHER *type, const EVP_MD *md,
+                   const unsigned char *salt,
+                   const unsigned char *data, int datal, int count,
+                   unsigned char *key, unsigned char *iv);
+ +

DESCRIPTION

+ +

EVP_BytesToKey() derives a key and IV from various parameters. type is the cipher to derive the key and IV for. md is the message digest to use. The salt parameter is used as a salt in the derivation: it should point to an 8 byte buffer or NULL if no salt is used. data is a buffer containing datal bytes which is used to derive the keying data. count is the iteration count to use. The derived key and IV will be written to key and iv respectively.

+ +

NOTES

+ +

A typical application of this function is to derive keying material for an encryption algorithm from a password in the data parameter.

+ +

Increasing the count parameter slows down the algorithm which makes it harder for an attacker to perform a brute force attack using a large number of candidate passwords.

+ +

If the total key and IV length is less than the digest length and MD5 is used then the derivation algorithm is compatible with PKCS#5 v1.5 otherwise a non standard extension is used to derive the extra data.

+ +

Newer applications should use a more modern algorithm such as PBKDF2 as defined in PKCS#5v2.1 and provided by PKCS5_PBKDF2_HMAC.

+ +

KEY DERIVATION ALGORITHM

+ +

The key and IV is derived by concatenating D_1, D_2, etc until enough data is available for the key and IV. D_i is defined as:

+ +
D_i = HASH^count(D_(i-1) || data || salt)
+ +

where || denotes concatenation, D_0 is empty, HASH is the digest algorithm in use, HASH^1(data) is simply HASH(data), HASH^2(data) is HASH(HASH(data)) and so on.

+ +

The initial bytes are used for the key and the subsequent bytes for the IV.

+ +

RETURN VALUES

+ +

If data is NULL, then EVP_BytesToKey() returns the number of bytes needed to store the derived key. Otherwise, EVP_BytesToKey() returns the size of the derived key in bytes, or 0 on error.

+ +

SEE ALSO

+ +

evp(7), RAND_bytes(3), PKCS5_PBKDF2_HMAC(3), EVP_EncryptInit(3)

+ +

COPYRIGHT

+ +

Copyright 2001-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_CIPHER_CTX_get_cipher_data.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_CIPHER_CTX_get_cipher_data.html new file mode 100644 index 00000000..2fc6c01a --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_CIPHER_CTX_get_cipher_data.html @@ -0,0 +1,61 @@ + + + + +EVP_CIPHER_CTX_get_cipher_data + + + + + + + + + + +

NAME

+ +

EVP_CIPHER_CTX_get_cipher_data, EVP_CIPHER_CTX_set_cipher_data - Routines to inspect and modify EVP_CIPHER_CTX objects

+ +

SYNOPSIS

+ +
#include <openssl/evp.h>
+
+void *EVP_CIPHER_CTX_get_cipher_data(const EVP_CIPHER_CTX *ctx);
+void *EVP_CIPHER_CTX_set_cipher_data(EVP_CIPHER_CTX *ctx, void *cipher_data);
+ +

DESCRIPTION

+ +

The EVP_CIPHER_CTX_get_cipher_data() function returns a pointer to the cipher data relevant to EVP_CIPHER_CTX. The contents of this data is specific to the particular implementation of the cipher. For example this data can be used by engines to store engine specific information. The data is automatically allocated and freed by OpenSSL, so applications and engines should not normally free this directly (but see below).

+ +

The EVP_CIPHER_CTX_set_cipher_data() function allows an application or engine to replace the cipher data with new data. A pointer to any existing cipher data is returned from this function. If the old data is no longer required then it should be freed through a call to OPENSSL_free().

+ +

RETURN VALUES

+ +

The EVP_CIPHER_CTX_get_cipher_data() function returns a pointer to the current cipher data for the EVP_CIPHER_CTX.

+ +

The EVP_CIPHER_CTX_set_cipher_data() function returns a pointer to the old cipher data for the EVP_CIPHER_CTX.

+ +

HISTORY

+ +

The EVP_CIPHER_CTX_get_cipher_data() and EVP_CIPHER_CTX_set_cipher_data() functions were added in OpenSSL 1.1.0.

+ +

COPYRIGHT

+ +

Copyright 2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_CIPHER_meth_new.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_CIPHER_meth_new.html new file mode 100644 index 00000000..fbb13ec2 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_CIPHER_meth_new.html @@ -0,0 +1,217 @@ + + + + +EVP_CIPHER_meth_new + + + + + + + + + + +

NAME

+ +

EVP_CIPHER_meth_new, EVP_CIPHER_meth_dup, EVP_CIPHER_meth_free, EVP_CIPHER_meth_set_iv_length, EVP_CIPHER_meth_set_flags, EVP_CIPHER_meth_set_impl_ctx_size, EVP_CIPHER_meth_set_init, EVP_CIPHER_meth_set_do_cipher, EVP_CIPHER_meth_set_cleanup, EVP_CIPHER_meth_set_set_asn1_params, EVP_CIPHER_meth_set_get_asn1_params, EVP_CIPHER_meth_set_ctrl, EVP_CIPHER_meth_get_init, EVP_CIPHER_meth_get_do_cipher, EVP_CIPHER_meth_get_cleanup, EVP_CIPHER_meth_get_set_asn1_params, EVP_CIPHER_meth_get_get_asn1_params, EVP_CIPHER_meth_get_ctrl - Routines to build up EVP_CIPHER methods

+ +

SYNOPSIS

+ +
#include <openssl/evp.h>
+
+EVP_CIPHER *EVP_CIPHER_meth_new(int cipher_type, int block_size, int key_len);
+EVP_CIPHER *EVP_CIPHER_meth_dup(const EVP_CIPHER *cipher);
+void EVP_CIPHER_meth_free(EVP_CIPHER *cipher);
+
+int EVP_CIPHER_meth_set_iv_length(EVP_CIPHER *cipher, int iv_len);
+int EVP_CIPHER_meth_set_flags(EVP_CIPHER *cipher, unsigned long flags);
+int EVP_CIPHER_meth_set_impl_ctx_size(EVP_CIPHER *cipher, int ctx_size);
+int EVP_CIPHER_meth_set_init(EVP_CIPHER *cipher,
+                             int (*init)(EVP_CIPHER_CTX *ctx,
+                                         const unsigned char *key,
+                                         const unsigned char *iv,
+                                         int enc));
+int EVP_CIPHER_meth_set_do_cipher(EVP_CIPHER *cipher,
+                                  int (*do_cipher)(EVP_CIPHER_CTX *ctx,
+                                                   unsigned char *out,
+                                                   const unsigned char *in,
+                                                   size_t inl));
+int EVP_CIPHER_meth_set_cleanup(EVP_CIPHER *cipher,
+                                int (*cleanup)(EVP_CIPHER_CTX *));
+int EVP_CIPHER_meth_set_set_asn1_params(EVP_CIPHER *cipher,
+                                        int (*set_asn1_parameters)(EVP_CIPHER_CTX *,
+                                                                   ASN1_TYPE *));
+int EVP_CIPHER_meth_set_get_asn1_params(EVP_CIPHER *cipher,
+                                        int (*get_asn1_parameters)(EVP_CIPHER_CTX *,
+                                                                   ASN1_TYPE *));
+int EVP_CIPHER_meth_set_ctrl(EVP_CIPHER *cipher,
+                             int (*ctrl)(EVP_CIPHER_CTX *, int type,
+                                         int arg, void *ptr));
+
+int (*EVP_CIPHER_meth_get_init(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *ctx,
+                                                          const unsigned char *key,
+                                                          const unsigned char *iv,
+                                                          int enc);
+int (*EVP_CIPHER_meth_get_do_cipher(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *ctx,
+                                                               unsigned char *out,
+                                                               const unsigned char *in,
+                                                               size_t inl);
+int (*EVP_CIPHER_meth_get_cleanup(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *);
+int (*EVP_CIPHER_meth_get_set_asn1_params(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *,
+                                                                     ASN1_TYPE *);
+int (*EVP_CIPHER_meth_get_get_asn1_params(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *,
+                                                                     ASN1_TYPE *);
+int (*EVP_CIPHER_meth_get_ctrl(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *,
+                                                          int type, int arg,
+                                                          void *ptr);
+ +

DESCRIPTION

+ +

The EVP_CIPHER type is a structure for symmetric cipher method implementation.

+ +

EVP_CIPHER_meth_new() creates a new EVP_CIPHER structure.

+ +

EVP_CIPHER_meth_dup() creates a copy of cipher.

+ +

EVP_CIPHER_meth_free() destroys a EVP_CIPHER structure.

+ +

EVP_CIPHER_meth_set_iv_length() sets the length of the IV. This is only needed when the implemented cipher mode requires it.

+ +

EVP_CIPHER_meth_set_flags() sets the flags to describe optional behaviours in the particular cipher. With the exception of cipher modes, of which only one may be present, several flags can be or'd together. The available flags are:

+ +
+ +
EVP_CIPH_STREAM_CIPHER, EVP_CIPH_ECB_MODE EVP_CIPH_CBC_MODE, EVP_CIPH_CFB_MODE, EVP_CIPH_OFB_MODE, EVP_CIPH_CTR_MODE, EVP_CIPH_GCM_MODE, EVP_CIPH_CCM_MODE, EVP_CIPH_XTS_MODE, EVP_CIPH_WRAP_MODE, EVP_CIPH_OCB_MODE
+
+ +

The cipher mode.

+ +
+
EVP_CIPH_VARIABLE_LENGTH
+
+ +

This cipher is of variable length.

+ +
+
EVP_CIPH_CUSTOM_IV
+
+ +

Storing and initialising the IV is left entirely to the implementation.

+ +
+
EVP_CIPH_ALWAYS_CALL_INIT
+
+ +

Set this if the implementation's init() function should be called even if key is NULL.

+ +
+
EVP_CIPH_CTRL_INIT
+
+ +

Set this to have the implementation's ctrl() function called with command code EVP_CTRL_INIT early in its setup.

+ +
+
EVP_CIPH_CUSTOM_KEY_LENGTH
+
+ +

Checking and setting the key length after creating the EVP_CIPHER is left to the implementation. Whenever someone uses EVP_CIPHER_CTX_set_key_length() on a EVP_CIPHER with this flag set, the implementation's ctrl() function will be called with the control code EVP_CTRL_SET_KEY_LENGTH and the key length in arg.

+ +
+
EVP_CIPH_NO_PADDING
+
+ +

Don't use standard block padding.

+ +
+
EVP_CIPH_RAND_KEY
+
+ +

Making a key with random content is left to the implementation. This is done by calling the implementation's ctrl() function with the control code EVP_CTRL_RAND_KEY and the pointer to the key memory storage in ptr.

+ +
+
EVP_CIPH_CUSTOM_COPY
+
+ +

Set this to have the implementation's ctrl() function called with command code EVP_CTRL_COPY at the end of EVP_CIPHER_CTX_copy(). The intended use is for further things to deal with after the implementation specific data block has been copied. The destination EVP_CIPHER_CTX is passed to the control with the ptr parameter. The implementation specific data block is reached with EVP_CIPHER_CTX_get_cipher_data().

+ +
+
EVP_CIPH_FLAG_DEFAULT_ASN1
+
+ +

Use the default EVP routines to pass IV to and from ASN.1.

+ +
+
EVP_CIPH_FLAG_LENGTH_BITS
+
+ +

Signals that the length of the input buffer for encryption / decryption is to be understood as the number of bits instead of bytes for this implementation. This is only useful for CFB1 ciphers.

+ +
+
EVP_CIPH_FLAG_CUSTOM_CIPHER
+
+ +

This indicates that the implementation takes care of everything, including padding, buffering and finalization. The EVP routines will simply give them control and do nothing more.

+ +
+
EVP_CIPH_FLAG_AEAD_CIPHER
+
+ +

This indicates that this is an AEAD cipher implementation.

+ +
+
EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK
+
+ +

Allow interleaving of crypto blocks, a particular optimization only applicable to certain TLS ciphers.

+ +
+
+ +

EVP_CIPHER_meth_set_impl_ctx_size() sets the size of the EVP_CIPHER's implementation context so that it can be automatically allocated.

+ +

EVP_CIPHER_meth_set_init() sets the cipher init function for cipher. The cipher init function is called by EVP_CipherInit(), EVP_CipherInit_ex(), EVP_EncryptInit(), EVP_EncryptInit_ex(), EVP_DecryptInit(), EVP_DecryptInit_ex().

+ +

EVP_CIPHER_meth_set_do_cipher() sets the cipher function for cipher. The cipher function is called by EVP_CipherUpdate(), EVP_EncryptUpdate(), EVP_DecryptUpdate(), EVP_CipherFinal(), EVP_EncryptFinal(), EVP_EncryptFinal_ex(), EVP_DecryptFinal() and EVP_DecryptFinal_ex().

+ +

EVP_CIPHER_meth_set_cleanup() sets the function for cipher to do extra cleanup before the method's private data structure is cleaned out and freed. Note that the cleanup function is passed a EVP_CIPHER_CTX *, the private data structure is then available with EVP_CIPHER_CTX_get_cipher_data(). This cleanup function is called by EVP_CIPHER_CTX_reset() and EVP_CIPHER_CTX_free().

+ +

EVP_CIPHER_meth_set_set_asn1_params() sets the function for cipher to set the AlgorithmIdentifier "parameter" based on the passed cipher. This function is called by EVP_CIPHER_param_to_asn1(). EVP_CIPHER_meth_set_get_asn1_params() sets the function for cipher that sets the cipher parameters based on an ASN.1 AlgorithmIdentifier "parameter". Both these functions are needed when there is a need for custom data (more or other than the cipher IV). They are called by EVP_CIPHER_param_to_asn1() and EVP_CIPHER_asn1_to_param() respectively if defined.

+ +

EVP_CIPHER_meth_set_ctrl() sets the control function for cipher.

+ +

EVP_CIPHER_meth_get_init(), EVP_CIPHER_meth_get_do_cipher(), EVP_CIPHER_meth_get_cleanup(), EVP_CIPHER_meth_get_set_asn1_params(), EVP_CIPHER_meth_get_get_asn1_params() and EVP_CIPHER_meth_get_ctrl() are all used to retrieve the method data given with the EVP_CIPHER_meth_set_*() functions above.

+ +

RETURN VALUES

+ +

EVP_CIPHER_meth_new() and EVP_CIPHER_meth_dup() return a pointer to a newly created EVP_CIPHER, or NULL on failure. All EVP_CIPHER_meth_set_*() functions return 1. All EVP_CIPHER_meth_get_*() functions return pointers to their respective cipher function.

+ +

SEE ALSO

+ +

EVP_EncryptInit

+ +

HISTORY

+ +

The functions described here were added in OpenSSL 1.1.0.

+ +

COPYRIGHT

+ +

Copyright 2016-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_DigestInit.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_DigestInit.html new file mode 100644 index 00000000..3f48d1e4 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_DigestInit.html @@ -0,0 +1,442 @@ + + + + +EVP_DigestInit + + + + + + + + + + +

NAME

+ +

EVP_MD_CTX_new, EVP_MD_CTX_reset, EVP_MD_CTX_free, EVP_MD_CTX_copy, EVP_MD_CTX_copy_ex, EVP_MD_CTX_ctrl, EVP_MD_CTX_set_flags, EVP_MD_CTX_clear_flags, EVP_MD_CTX_test_flags, EVP_Digest, EVP_DigestInit_ex, EVP_DigestInit, EVP_DigestUpdate, EVP_DigestFinal_ex, EVP_DigestFinalXOF, EVP_DigestFinal, EVP_MD_type, EVP_MD_pkey_type, EVP_MD_size, EVP_MD_block_size, EVP_MD_flags, EVP_MD_CTX_md, EVP_MD_CTX_type, EVP_MD_CTX_size, EVP_MD_CTX_block_size, EVP_MD_CTX_md_data, EVP_MD_CTX_update_fn, EVP_MD_CTX_set_update_fn, EVP_md_null, EVP_get_digestbyname, EVP_get_digestbynid, EVP_get_digestbyobj, EVP_MD_CTX_pkey_ctx, EVP_MD_CTX_set_pkey_ctx - EVP digest routines

+ +

SYNOPSIS

+ +
#include <openssl/evp.h>
+
+EVP_MD_CTX *EVP_MD_CTX_new(void);
+int EVP_MD_CTX_reset(EVP_MD_CTX *ctx);
+void EVP_MD_CTX_free(EVP_MD_CTX *ctx);
+void EVP_MD_CTX_ctrl(EVP_MD_CTX *ctx, int cmd, int p1, void* p2);
+void EVP_MD_CTX_set_flags(EVP_MD_CTX *ctx, int flags);
+void EVP_MD_CTX_clear_flags(EVP_MD_CTX *ctx, int flags);
+int EVP_MD_CTX_test_flags(const EVP_MD_CTX *ctx, int flags);
+
+int EVP_Digest(const void *data, size_t count, unsigned char *md,
+               unsigned int *size, const EVP_MD *type, ENGINE *impl);
+int EVP_DigestInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type, ENGINE *impl);
+int EVP_DigestUpdate(EVP_MD_CTX *ctx, const void *d, size_t cnt);
+int EVP_DigestFinal_ex(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *s);
+int EVP_DigestFinalXOF(EVP_MD_CTX *ctx, unsigned char *md, size_t len);
+
+int EVP_MD_CTX_copy_ex(EVP_MD_CTX *out, const EVP_MD_CTX *in);
+
+int EVP_DigestInit(EVP_MD_CTX *ctx, const EVP_MD *type);
+int EVP_DigestFinal(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *s);
+
+int EVP_MD_CTX_copy(EVP_MD_CTX *out, EVP_MD_CTX *in);
+
+int EVP_MD_type(const EVP_MD *md);
+int EVP_MD_pkey_type(const EVP_MD *md);
+int EVP_MD_size(const EVP_MD *md);
+int EVP_MD_block_size(const EVP_MD *md);
+unsigned long EVP_MD_flags(const EVP_MD *md);
+
+const EVP_MD *EVP_MD_CTX_md(const EVP_MD_CTX *ctx);
+int EVP_MD_CTX_size(const EVP_MD_CTX *ctx);
+int EVP_MD_CTX_block_size(const EVP_MD_CTX *ctx);
+int EVP_MD_CTX_type(const EVP_MD_CTX *ctx);
+void *EVP_MD_CTX_md_data(const EVP_MD_CTX *ctx);
+int (*EVP_MD_CTX_update_fn(EVP_MD_CTX *ctx))(EVP_MD_CTX *ctx,
+                                             const void *data, size_t count);
+void EVP_MD_CTX_set_update_fn(EVP_MD_CTX *ctx,
+                              int (*update)(EVP_MD_CTX *ctx,
+                                            const void *data, size_t count));
+
+const EVP_MD *EVP_md_null(void);
+
+const EVP_MD *EVP_get_digestbyname(const char *name);
+const EVP_MD *EVP_get_digestbynid(int type);
+const EVP_MD *EVP_get_digestbyobj(const ASN1_OBJECT *o);
+
+EVP_PKEY_CTX *EVP_MD_CTX_pkey_ctx(const EVP_MD_CTX *ctx);
+void EVP_MD_CTX_set_pkey_ctx(EVP_MD_CTX *ctx, EVP_PKEY_CTX *pctx);
+ +

DESCRIPTION

+ +

The EVP digest routines are a high level interface to message digests, and should be used instead of the cipher-specific functions.

+ +
+ +
EVP_MD_CTX_new()
+
+ +

Allocates and returns a digest context.

+ +
+
EVP_MD_CTX_reset()
+
+ +

Resets the digest context ctx. This can be used to reuse an already existing context.

+ +
+
EVP_MD_CTX_free()
+
+ +

Cleans up digest context ctx and frees up the space allocated to it.

+ +
+
EVP_MD_CTX_ctrl()
+
+ +

Performs digest-specific control actions on context ctx. The control command is indicated in cmd and any additional arguments in p1 and p2. EVP_MD_CTX_ctrl() must be called after EVP_DigestInit_ex(). Other restrictions may apply depending on the control type and digest implementation. See "CONTROLS" below for more information.

+ +
+
EVP_MD_CTX_set_flags(), EVP_MD_CTX_clear_flags(), EVP_MD_CTX_test_flags()
+
+ +

Sets, clears and tests ctx flags. See "FLAGS" below for more information.

+ +
+
EVP_Digest()
+
+ +

A wrapper around the Digest Init_ex, Update and Final_ex functions. Hashes count bytes of data at data using a digest type from ENGINE impl. The digest value is placed in md and its length is written at size if the pointer is not NULL. At most EVP_MAX_MD_SIZE bytes will be written. If impl is NULL the default implementation of digest type is used.

+ +
+
EVP_DigestInit_ex()
+
+ +

Sets up digest context ctx to use a digest type from ENGINE impl. type will typically be supplied by a function such as EVP_sha1(). If impl is NULL then the default implementation of digest type is used.

+ +
+
EVP_DigestUpdate()
+
+ +

Hashes cnt bytes of data at d into the digest context ctx. This function can be called several times on the same ctx to hash additional data.

+ +
+
EVP_DigestFinal_ex()
+
+ +

Retrieves the digest value from ctx and places it in md. If the s parameter is not NULL then the number of bytes of data written (i.e. the length of the digest) will be written to the integer at s, at most EVP_MAX_MD_SIZE bytes will be written. After calling EVP_DigestFinal_ex() no additional calls to EVP_DigestUpdate() can be made, but EVP_DigestInit_ex() can be called to initialize a new digest operation.

+ +
+
EVP_DigestFinalXOF()
+
+ +

Interfaces to extendable-output functions, XOFs, such as SHAKE128 and SHAKE256. It retrieves the digest value from ctx and places it in len-sized <B>md. After calling this function no additional calls to EVP_DigestUpdate() can be made, but EVP_DigestInit_ex() can be called to initialize a new operation.

+ +
+
EVP_MD_CTX_copy_ex()
+
+ +

Can be used to copy the message digest state from in to out. This is useful if large amounts of data are to be hashed which only differ in the last few bytes.

+ +
+
EVP_DigestInit()
+
+ +

Behaves in the same way as EVP_DigestInit_ex() except it always uses the default digest implementation and calls EVP_MD_CTX_reset().

+ +
+
EVP_DigestFinal()
+
+ +

Similar to EVP_DigestFinal_ex() except the digest context ctx is automatically cleaned up.

+ +
+
EVP_MD_CTX_copy()
+
+ +

Similar to EVP_MD_CTX_copy_ex() except the destination out does not have to be initialized.

+ +
+
EVP_MD_size(), EVP_MD_CTX_size()
+
+ +

Return the size of the message digest when passed an EVP_MD or an EVP_MD_CTX structure, i.e. the size of the hash.

+ +
+
EVP_MD_block_size(), EVP_MD_CTX_block_size()
+
+ +

Return the block size of the message digest when passed an EVP_MD or an EVP_MD_CTX structure.

+ +
+
EVP_MD_type(), EVP_MD_CTX_type()
+
+ +

Return the NID of the OBJECT IDENTIFIER representing the given message digest when passed an EVP_MD structure. For example, EVP_MD_type(EVP_sha1()) returns NID_sha1. This function is normally used when setting ASN1 OIDs.

+ +
+
EVP_MD_CTX_md_data()
+
+ +

Return the digest method private data for the passed EVP_MD_CTX. The space is allocated by OpenSSL and has the size originally set with EVP_MD_meth_set_app_datasize().

+ +
+
EVP_MD_CTX_md()
+
+ +

Returns the EVP_MD structure corresponding to the passed EVP_MD_CTX.

+ +
+
EVP_MD_CTX_set_update_fn()
+
+ +

Sets the update function for ctx to update. This is the function that is called by EVP_DigestUpdate. If not set, the update function from the EVP_MD type specified at initialization is used.

+ +
+
EVP_MD_CTX_update_fn()
+
+ +

Returns the update function for ctx.

+ +
+
EVP_MD_flags()
+
+ +

Returns the md flags. Note that these are different from the EVP_MD_CTX ones. See EVP_MD_meth_set_flags(3) for more information.

+ +
+
EVP_MD_pkey_type()
+
+ +

Returns the NID of the public key signing algorithm associated with this digest. For example EVP_sha1() is associated with RSA so this will return NID_sha1WithRSAEncryption. Since digests and signature algorithms are no longer linked this function is only retained for compatibility reasons.

+ +
+
EVP_md_null()
+
+ +

A "null" message digest that does nothing: i.e. the hash it returns is of zero length.

+ +
+
EVP_get_digestbyname(), EVP_get_digestbynid(), EVP_get_digestbyobj()
+
+ +

Returns an EVP_MD structure when passed a digest name, a digest NID or an ASN1_OBJECT structure respectively.

+ +
+
EVP_MD_CTX_pkey_ctx()
+
+ +

Returns the EVP_PKEY_CTX assigned to ctx. The returned pointer should not be freed by the caller.

+ +
+
EVP_MD_CTX_set_pkey_ctx()
+
+ +

Assigns an EVP_PKEY_CTX to EVP_MD_CTX. This is usually used to provide a customized EVP_PKEY_CTX to EVP_DigestSignInit(3) or EVP_DigestVerifyInit(3). The pctx passed to this function should be freed by the caller. A NULL pctx pointer is also allowed to clear the EVP_PKEY_CTX assigned to ctx. In such case, freeing the cleared EVP_PKEY_CTX or not depends on how the EVP_PKEY_CTX is created.

+ +
+
+ +

CONTROLS

+ +

EVP_MD_CTX_ctrl() can be used to send the following standard controls:

+ +
+ +
EVP_MD_CTRL_MICALG
+
+ +

Gets the digest Message Integrity Check algorithm string. This is used when creating S/MIME multipart/signed messages, as specified in RFC 3851. The string value is written to p2.

+ +
+
EVP_MD_CTRL_XOF_LEN
+
+ +

This control sets the digest length for extendable output functions to p1. Sending this control directly should not be necessary, the use of EVP_DigestFinalXOF() is preferred. Currently used by SHAKE.

+ +
+
+ +

FLAGS

+ +

EVP_MD_CTX_set_flags(), EVP_MD_CTX_clear_flags() and EVP_MD_CTX_test_flags() can be used the manipulate and test these EVP_MD_CTX flags:

+ +
+ +
EVP_MD_CTX_FLAG_ONESHOT
+
+ +

This flag instructs the digest to optimize for one update only, if possible.

+ +
+
EVP_MD_CTX_FLAG_NO_INIT
+
+ +

This flag instructs EVP_DigestInit() and similar not to initialise the implementation specific data.

+ +
+
EVP_MD_CTX_FLAG_FINALISE
+
+ +

Some functions such as EVP_DigestSign only finalise copies of internal contexts so additional data can be included after the finalisation call. This is inefficient if this functionality is not required, and can be disabled with this flag.

+ +
+
+ +

RETURN VALUES

+ +
+ +
EVP_DigestInit_ex(), EVP_DigestUpdate(), EVP_DigestFinal_ex()
+
+ +

Returns 1 for success and 0 for failure.

+ +
+
EVP_MD_CTX_ctrl()
+
+ +

Returns 1 if successful or 0 for failure.

+ +
+
EVP_MD_CTX_copy_ex()
+
+ +

Returns 1 if successful or 0 for failure.

+ +
+
EVP_MD_type(), EVP_MD_pkey_type()
+
+ +

Returns the NID of the corresponding OBJECT IDENTIFIER or NID_undef if none exists.

+ +
+
EVP_MD_size(), EVP_MD_block_size(), EVP_MD_CTX_size(), EVP_MD_CTX_block_size()
+
+ +

Returns the digest or block size in bytes.

+ +
+
EVP_md_null()
+
+ +

Returns a pointer to the EVP_MD structure of the "null" message digest.

+ +
+
EVP_get_digestbyname(), EVP_get_digestbynid(), EVP_get_digestbyobj()
+
+ +

Returns either an EVP_MD structure or NULL if an error occurs.

+ +
+
EVP_MD_CTX_set_pkey_ctx()
+
+ +

This function has no return value.

+ +
+
+ +

NOTES

+ +

The EVP interface to message digests should almost always be used in 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 EVP_sha256(3)) or the SHA-3 digest algorithms (such as EVP_sha3_512(3)). The other digest algorithms are still in common use.

+ +

For most applications the impl parameter to EVP_DigestInit_ex() will be set to NULL to use the default digest implementation.

+ +

The functions EVP_DigestInit(), EVP_DigestFinal() and EVP_MD_CTX_copy() are obsolete but are retained to maintain compatibility with existing code. New applications should use EVP_DigestInit_ex(), EVP_DigestFinal_ex() and EVP_MD_CTX_copy_ex() because they can efficiently reuse a digest context instead of initializing and cleaning it up on each call and allow non default implementations of digests to be specified.

+ +

If digest contexts are not cleaned up after use, memory leaks will occur.

+ +

EVP_MD_CTX_size(), EVP_MD_CTX_block_size(), EVP_MD_CTX_type(), EVP_get_digestbynid() and EVP_get_digestbyobj() are defined as macros.

+ +

EVP_MD_CTX_ctrl() sends commands to message digests for additional configuration or control.

+ +

EXAMPLES

+ +

This example digests the data "Test Message\n" and "Hello World\n", using the digest name passed on the command line.

+ +
#include <stdio.h>
+#include <string.h>
+#include <openssl/evp.h>
+
+int main(int argc, char *argv[])
+{
+    EVP_MD_CTX *mdctx;
+    const EVP_MD *md;
+    char mess1[] = "Test Message\n";
+    char mess2[] = "Hello World\n";
+    unsigned char md_value[EVP_MAX_MD_SIZE];
+    unsigned int md_len, i;
+
+    if (argv[1] == NULL) {
+        printf("Usage: mdtest digestname\n");
+        exit(1);
+    }
+
+    md = EVP_get_digestbyname(argv[1]);
+    if (md == NULL) {
+        printf("Unknown message digest %s\n", argv[1]);
+        exit(1);
+    }
+
+    mdctx = EVP_MD_CTX_new();
+    EVP_DigestInit_ex(mdctx, md, NULL);
+    EVP_DigestUpdate(mdctx, mess1, strlen(mess1));
+    EVP_DigestUpdate(mdctx, mess2, strlen(mess2));
+    EVP_DigestFinal_ex(mdctx, md_value, &md_len);
+    EVP_MD_CTX_free(mdctx);
+
+    printf("Digest is: ");
+    for (i = 0; i < md_len; i++)
+        printf("%02x", md_value[i]);
+    printf("\n");
+
+    exit(0);
+}
+ +

SEE ALSO

+ +

EVP_MD_meth_new(3), dgst(1), evp(7)

+ +

The full list of digest algorithms are provided below.

+ +

EVP_blake2b512(3), EVP_md2(3), EVP_md4(3), EVP_md5(3), EVP_mdc2(3), EVP_ripemd160(3), EVP_sha1(3), EVP_sha224(3), EVP_sha3_224(3), EVP_sm3(3), EVP_whirlpool(3)

+ +

HISTORY

+ +

The EVP_MD_CTX_create() and EVP_MD_CTX_destroy() functions were renamed to EVP_MD_CTX_new() and EVP_MD_CTX_free() in OpenSSL 1.1.0, respectively.

+ +

The link between digests and signing algorithms was fixed in OpenSSL 1.0 and later, so now EVP_sha1() can be used with RSA and DSA.

+ +

The EVP_dss1() function was removed in OpenSSL 1.1.0.

+ +

The EVP_MD_CTX_set_pkey_ctx() function was added in 1.1.1.

+ +

COPYRIGHT

+ +

Copyright 2000-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_DigestSignInit.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_DigestSignInit.html new file mode 100644 index 00000000..3f44a370 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_DigestSignInit.html @@ -0,0 +1,157 @@ + + + + +EVP_DigestSignInit + + + + + + + + + + +

NAME

+ +

EVP_DigestSignInit, EVP_DigestSignUpdate, EVP_DigestSignFinal, EVP_DigestSign - EVP signing functions

+ +

SYNOPSIS

+ +
#include <openssl/evp.h>
+
+int EVP_DigestSignInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx,
+                       const EVP_MD *type, ENGINE *e, EVP_PKEY *pkey);
+int EVP_DigestSignUpdate(EVP_MD_CTX *ctx, const void *d, size_t cnt);
+int EVP_DigestSignFinal(EVP_MD_CTX *ctx, unsigned char *sig, size_t *siglen);
+
+int EVP_DigestSign(EVP_MD_CTX *ctx, unsigned char *sigret,
+                   size_t *siglen, const unsigned char *tbs,
+                   size_t tbslen);
+ +

DESCRIPTION

+ +

The EVP signature routines are a high level interface to digital signatures.

+ +

EVP_DigestSignInit() sets up signing context ctx to use digest type from ENGINE e and private key pkey. ctx must be created with EVP_MD_CTX_new() before calling this function. If pctx is not NULL, the EVP_PKEY_CTX of the signing operation will be written to *pctx: this can be used to set alternative signing options. Note that any existing value in *pctx is overwritten. The EVP_PKEY_CTX value returned must not be freed directly by the application if ctx is not assigned an EVP_PKEY_CTX value before being passed to EVP_DigestSignInit() (which means the EVP_PKEY_CTX is created inside EVP_DigestSignInit() and it will be freed automatically when the EVP_MD_CTX is freed).

+ +

The digest type may be NULL if the signing algorithm supports it.

+ +

No EVP_PKEY_CTX will be created by EVP_DigestSignInit() if the passed ctx has already been assigned one via EVP_MD_CTX_set_pkey_ctx(3). See also SM2(7).

+ +

Only EVP_PKEY types that support signing can be used with these functions. This includes MAC algorithms where the MAC generation is considered as a form of "signing". Built-in EVP_PKEY types supported by these functions are CMAC, Poly1305, DSA, ECDSA, HMAC, RSA, SipHash, Ed25519 and Ed448.

+ +

Not all digests can be used for all key types. The following combinations apply.

+ +
+ +
DSA
+
+ +

Supports SHA1, SHA224, SHA256, SHA384 and SHA512

+ +
+
ECDSA
+
+ +

Supports SHA1, SHA224, SHA256, SHA384, SHA512 and SM3

+ +
+
RSA with no padding
+
+ +

Supports no digests (the digest type must be NULL)

+ +
+
RSA with X931 padding
+
+ +

Supports SHA1, SHA256, SHA384 and SHA512

+ +
+
All other RSA padding types
+
+ +

Support SHA1, SHA224, SHA256, SHA384, SHA512, MD5, MD5_SHA1, MD2, MD4, MDC2, SHA3-224, SHA3-256, SHA3-384, SHA3-512

+ +
+
Ed25519 and Ed448
+
+ +

Support no digests (the digest type must be NULL)

+ +
+
HMAC
+
+ +

Supports any digest

+ +
+
CMAC, Poly1305 and SipHash
+
+ +

Will ignore any digest provided.

+ +
+
+ +

If RSA-PSS is used and restrictions apply then the digest must match.

+ +

EVP_DigestSignUpdate() hashes cnt bytes of data at d into the signature context ctx. This function can be called several times on the same ctx to include additional data. This function is currently implemented using a macro.

+ +

EVP_DigestSignFinal() signs the data in ctx and places the signature in sig. If sig is NULL then the maximum size of the output buffer is written to the siglen parameter. If sig is not NULL then before the call the siglen parameter should contain the length of the sig buffer. If the call is successful the signature is written to sig and the amount of data written to siglen.

+ +

EVP_DigestSign() signs tbslen bytes of data at tbs and places the signature in sig and its length in siglen in a similar way to EVP_DigestSignFinal().

+ +

RETURN VALUES

+ +

EVP_DigestSignInit(), EVP_DigestSignUpdate(), EVP_DigestSignFinal() and EVP_DigestSign() return 1 for success and 0 for failure.

+ +

The error codes can be obtained from ERR_get_error(3).

+ +

NOTES

+ +

The EVP interface to digital signatures should almost always be used in 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 in one function. For algorithms that support streaming it is equivalent to calling EVP_DigestSignUpdate() and EVP_DigestSignFinal(). For algorithms which do not support streaming (e.g. PureEdDSA) it is the only way to sign data.

+ +

In previous versions of OpenSSL there was a link between message digest types and public key algorithms. This meant that "clone" digests such as EVP_dss1() needed to be used to sign using SHA1 and DSA. This is no longer necessary and the use of clone digest is now discouraged.

+ +

For some key types and parameters the random number generator must be seeded. If the automatic seeding or reseeding of the OpenSSL CSPRNG fails due to external circumstances (see RAND(7)), the operation will fail.

+ +

The call to EVP_DigestSignFinal() internally finalizes a copy of the digest context. This means that calls to EVP_DigestSignUpdate() and EVP_DigestSignFinal() can be called later to digest and sign additional data.

+ +

Since only a copy of the digest context is ever finalized, the context must be cleaned up after use by calling EVP_MD_CTX_free() or a memory leak will occur.

+ +

The use of EVP_PKEY_size() with these functions is discouraged because some signature operations may have a signature length which depends on the parameters set. As a result EVP_PKEY_size() would have to return a value which indicates the maximum possible signature for any set of parameters.

+ +

SEE ALSO

+ +

EVP_DigestVerifyInit(3), EVP_DigestInit(3), evp(7), HMAC(3), MD2(3), MD5(3), MDC2(3), RIPEMD160(3), SHA1(3), dgst(1), RAND(7)

+ +

HISTORY

+ +

EVP_DigestSignInit(), EVP_DigestSignUpdate() and EVP_DigestSignFinal() were added in OpenSSL 1.0.0.

+ +

COPYRIGHT

+ +

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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_DigestVerifyInit.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_DigestVerifyInit.html new file mode 100644 index 00000000..39ee47aa --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_DigestVerifyInit.html @@ -0,0 +1,96 @@ + + + + +EVP_DigestVerifyInit + + + + + + + + + + +

NAME

+ +

EVP_DigestVerifyInit, EVP_DigestVerifyUpdate, EVP_DigestVerifyFinal, EVP_DigestVerify - EVP signature verification functions

+ +

SYNOPSIS

+ +
#include <openssl/evp.h>
+
+int EVP_DigestVerifyInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx,
+                         const EVP_MD *type, ENGINE *e, EVP_PKEY *pkey);
+int EVP_DigestVerifyUpdate(EVP_MD_CTX *ctx, const void *d, size_t cnt);
+int EVP_DigestVerifyFinal(EVP_MD_CTX *ctx, const unsigned char *sig,
+                          size_t siglen);
+int EVP_DigestVerify(EVP_MD_CTX *ctx, const unsigned char *sigret,
+                     size_t siglen, const unsigned char *tbs, size_t tbslen);
+ +

DESCRIPTION

+ +

The EVP signature routines are a high level interface to digital signatures.

+ +

EVP_DigestVerifyInit() sets up verification context ctx to use digest type from ENGINE e and public key pkey. ctx must be created with EVP_MD_CTX_new() before calling this function. If pctx is not NULL, the EVP_PKEY_CTX of the verification operation will be written to *pctx: this can be used to set alternative verification options. Note that any existing value in *pctx is overwritten. The EVP_PKEY_CTX value returned must not be freed directly by the application if ctx is not assigned an EVP_PKEY_CTX value before being passed to EVP_DigestVerifyInit() (which means the EVP_PKEY_CTX is created inside EVP_DigestVerifyInit() and it will be freed automatically when the EVP_MD_CTX is freed).

+ +

No EVP_PKEY_CTX will be created by EVP_DigestSignInit() if the passed ctx has already been assigned one via EVP_MD_CTX_set_pkey_ctx(3). See also SM2(7).

+ +

EVP_DigestVerifyUpdate() hashes cnt bytes of data at d into the verification context ctx. This function can be called several times on the same ctx to include additional data. This function is currently implemented using a macro.

+ +

EVP_DigestVerifyFinal() verifies the data in ctx against the signature in sig of length siglen.

+ +

EVP_DigestVerify() verifies tbslen bytes at tbs against the signature in sig of length siglen.

+ +

RETURN VALUES

+ +

EVP_DigestVerifyInit() and EVP_DigestVerifyUpdate() return 1 for success and 0 for failure.

+ +

EVP_DigestVerifyFinal() and EVP_DigestVerify() return 1 for success; any other value indicates failure. A return value of zero indicates that the signature did not verify successfully (that is, tbs did not match the original data or the signature had an invalid form), while other values indicate a more serious error (and sometimes also indicate an invalid signature form).

+ +

The error codes can be obtained from ERR_get_error(3).

+ +

NOTES

+ +

The EVP interface to digital signatures should almost always be used in 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 data in one function. For algorithms that support streaming it is equivalent to calling EVP_DigestVerifyUpdate() and EVP_DigestVerifyFinal(). For algorithms which do not support streaming (e.g. PureEdDSA) it is the only way to verify data.

+ +

In previous versions of OpenSSL there was a link between message digest types and public key algorithms. This meant that "clone" digests such as EVP_dss1() needed to be used to sign using SHA1 and DSA. This is no longer necessary and the use of clone digest is now discouraged.

+ +

For some key types and parameters the random number generator must be seeded. If the automatic seeding or reseeding of the OpenSSL CSPRNG fails due to external circumstances (see RAND(7)), the operation will fail.

+ +

The call to EVP_DigestVerifyFinal() internally finalizes a copy of the digest context. This means that EVP_VerifyUpdate() and EVP_VerifyFinal() can be called later to digest and verify additional data.

+ +

Since only a copy of the digest context is ever finalized, the context must be cleaned up after use by calling EVP_MD_CTX_free() or a memory leak will occur.

+ +

SEE ALSO

+ +

EVP_DigestSignInit(3), EVP_DigestInit(3), evp(7), HMAC(3), MD2(3), MD5(3), MDC2(3), RIPEMD160(3), SHA1(3), dgst(1), RAND(7)

+ +

HISTORY

+ +

EVP_DigestVerifyInit(), EVP_DigestVerifyUpdate() and EVP_DigestVerifyFinal() were added in OpenSSL 1.0.0.

+ +

COPYRIGHT

+ +

Copyright 2006-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_EncodeInit.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_EncodeInit.html new file mode 100644 index 00000000..8301e17b --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_EncodeInit.html @@ -0,0 +1,108 @@ + + + + +EVP_EncodeInit + + + + + + + + + + +

NAME

+ +

EVP_ENCODE_CTX_new, EVP_ENCODE_CTX_free, EVP_ENCODE_CTX_copy, EVP_ENCODE_CTX_num, EVP_EncodeInit, EVP_EncodeUpdate, EVP_EncodeFinal, EVP_EncodeBlock, EVP_DecodeInit, EVP_DecodeUpdate, EVP_DecodeFinal, EVP_DecodeBlock - EVP base 64 encode/decode routines

+ +

SYNOPSIS

+ +
#include <openssl/evp.h>
+
+EVP_ENCODE_CTX *EVP_ENCODE_CTX_new(void);
+void EVP_ENCODE_CTX_free(EVP_ENCODE_CTX *ctx);
+int EVP_ENCODE_CTX_copy(EVP_ENCODE_CTX *dctx, EVP_ENCODE_CTX *sctx);
+int EVP_ENCODE_CTX_num(EVP_ENCODE_CTX *ctx);
+void EVP_EncodeInit(EVP_ENCODE_CTX *ctx);
+int EVP_EncodeUpdate(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl,
+                     const unsigned char *in, int inl);
+void EVP_EncodeFinal(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl);
+int EVP_EncodeBlock(unsigned char *t, const unsigned char *f, int n);
+
+void EVP_DecodeInit(EVP_ENCODE_CTX *ctx);
+int EVP_DecodeUpdate(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl,
+                     const unsigned char *in, int inl);
+int EVP_DecodeFinal(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl);
+int EVP_DecodeBlock(unsigned char *t, const unsigned char *f, int n);
+ +

DESCRIPTION

+ +

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 plus some occasional newlines (see below). If the input data length is not a multiple of 3 then the output data will be padded at the end using the "=" character.

+ +

EVP_ENCODE_CTX_new() allocates, initializes and returns a context to be used for the encode/decode functions.

+ +

EVP_ENCODE_CTX_free() cleans up an encode/decode context ctx and frees up the space allocated to it.

+ +

Encoding of binary data is performed in blocks of 48 input bytes (or less for the final block). For each 48 byte input block encoded 64 bytes of base 64 data is output plus an additional newline character (i.e. 65 bytes in total). The final block (which may be less than 48 bytes) will output 4 bytes for every 3 bytes of input. If the data length is not divisible by 3 then a full 4 bytes is still output for the final 1 or 2 bytes of input. Similarly a newline character will also be output.

+ +

EVP_EncodeInit() initialises ctx for the start of a new encoding operation.

+ +

EVP_EncodeUpdate() encode inl bytes of data found in the buffer pointed to by in. The output is stored in the buffer out and the number of bytes output is stored in *outl. It is the caller's responsibility to ensure that the buffer at out is sufficiently large to accommodate the output data. Only full blocks of data (48 bytes) will be immediately processed and output by this function. Any remainder is held in the ctx object and will be processed by a subsequent call to EVP_EncodeUpdate() or EVP_EncodeFinal(). To calculate the required size of the output buffer add together the value of inl with the amount of unprocessed data held in ctx and divide the result by 48 (ignore any remainder). This gives the number of blocks of data that will be processed. Ensure the output buffer contains 65 bytes of storage for each block, plus an additional byte for a NUL terminator. EVP_EncodeUpdate() may be called repeatedly to process large amounts of input data. In the event of an error EVP_EncodeUpdate() will set *outl to 0 and return 0. On success 1 will be returned.

+ +

EVP_EncodeFinal() must be called at the end of an encoding operation. It will process any partial block of data remaining in the ctx object. The output data will be stored in out and the length of the data written will be stored in *outl. It is the caller's responsibility to ensure that out is sufficiently large to accommodate the output data which will never be more than 65 bytes plus an additional NUL terminator (i.e. 66 bytes in total).

+ +

EVP_ENCODE_CTX_copy() can be used to copy a context sctx to a context dctx. dctx must be initialized before calling this function.

+ +

EVP_ENCODE_CTX_num() will return the number of as yet unprocessed bytes still to be encoded or decoded that are pending in the ctx object.

+ +

EVP_EncodeBlock() encodes a full block of input data in f and of length dlen and stores it in t. For every 3 bytes of input provided 4 bytes of output data will be produced. If dlen 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 created plus 1 byte for a NUL terminator (i.e. 25 bytes in total). The length of the data generated without the NUL terminator is returned from the function.

+ +

EVP_DecodeInit() initialises ctx for the start of a new decoding operation.

+ +

EVP_DecodeUpdate() decodes inl characters of data found in the buffer pointed to by in. The output is stored in the buffer out and the number of bytes output is stored in *outl. It is the caller's responsibility to ensure that the buffer at out is sufficiently large to accommodate the output data. This function will attempt to decode as much data as possible in 4 byte chunks. Any whitespace, newline or carriage return characters are ignored. Any partial chunk of unprocessed data (1, 2 or 3 bytes) that remains at the end will be held in the ctx object and processed by a subsequent call to EVP_DecodeUpdate(). If any illegal base 64 characters are encountered or if the base 64 padding character "=" is encountered in the middle of the data then the function returns -1 to indicate an error. A return value of 0 or 1 indicates successful processing of the data. A return value of 0 additionally indicates that the last input data characters processed included the base 64 padding character "=" and therefore no more non-padding character data is expected to be processed. For every 4 valid base 64 bytes processed (ignoring whitespace, carriage returns and line feeds), 3 bytes of binary output data will be produced (or less at the end of the data where the padding character "=" has been used).

+ +

EVP_DecodeFinal() must be called at the end of a decoding operation. If there is any unprocessed data still in ctx then the input data must not have been a multiple of 4 and therefore an error has occurred. The function will return -1 in this case. Otherwise the function returns 1 on success.

+ +

EVP_DecodeBlock() will decode the block of n characters of base 64 data contained in f and store the result in t. Any leading whitespace will be trimmed as will any trailing whitespace, newlines, carriage returns or EOF characters. After such trimming the length of the data in f must be divisible by 4. For every 4 input bytes exactly 3 output bytes will be produced. The output will be padded with 0 bits if necessary to ensure that the output is always 3 bytes for every 4 input bytes. This function will return the length of the data decoded or -1 on error.

+ +

RETURN VALUES

+ +

EVP_ENCODE_CTX_new() returns a pointer to the newly allocated EVP_ENCODE_CTX object or NULL on error.

+ +

EVP_ENCODE_CTX_num() returns the number of bytes pending encoding or decoding in ctx.

+ +

EVP_EncodeUpdate() returns 0 on error or 1 on success.

+ +

EVP_EncodeBlock() returns the number of bytes encoded excluding the NUL terminator.

+ +

EVP_DecodeUpdate() returns -1 on error and 0 or 1 on success. If 0 is returned then no more non-padding base 64 characters are expected.

+ +

EVP_DecodeFinal() returns -1 on error or 1 on success.

+ +

EVP_DecodeBlock() returns the length of the data decoded or -1 on error.

+ +

SEE ALSO

+ +

evp(7)

+ +

COPYRIGHT

+ +

Copyright 2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_EncryptInit.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_EncryptInit.html new file mode 100644 index 00000000..9f820dd4 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_EncryptInit.html @@ -0,0 +1,467 @@ + + + + +EVP_EncryptInit + + + + + + + + + + +

NAME

+ +

EVP_CIPHER_CTX_new, EVP_CIPHER_CTX_reset, EVP_CIPHER_CTX_free, EVP_EncryptInit_ex, EVP_EncryptUpdate, EVP_EncryptFinal_ex, EVP_DecryptInit_ex, EVP_DecryptUpdate, EVP_DecryptFinal_ex, EVP_CipherInit_ex, EVP_CipherUpdate, EVP_CipherFinal_ex, EVP_CIPHER_CTX_set_key_length, EVP_CIPHER_CTX_ctrl, EVP_EncryptInit, EVP_EncryptFinal, EVP_DecryptInit, EVP_DecryptFinal, EVP_CipherInit, EVP_CipherFinal, EVP_get_cipherbyname, EVP_get_cipherbynid, EVP_get_cipherbyobj, EVP_CIPHER_nid, EVP_CIPHER_block_size, EVP_CIPHER_key_length, EVP_CIPHER_iv_length, EVP_CIPHER_flags, EVP_CIPHER_mode, EVP_CIPHER_type, EVP_CIPHER_CTX_cipher, EVP_CIPHER_CTX_nid, EVP_CIPHER_CTX_block_size, EVP_CIPHER_CTX_key_length, EVP_CIPHER_CTX_iv_length, EVP_CIPHER_CTX_get_app_data, EVP_CIPHER_CTX_set_app_data, EVP_CIPHER_CTX_type, EVP_CIPHER_CTX_flags, EVP_CIPHER_CTX_mode, EVP_CIPHER_param_to_asn1, EVP_CIPHER_asn1_to_param, EVP_CIPHER_CTX_set_padding, EVP_enc_null - EVP cipher routines

+ +

SYNOPSIS

+ +
#include <openssl/evp.h>
+
+EVP_CIPHER_CTX *EVP_CIPHER_CTX_new(void);
+int EVP_CIPHER_CTX_reset(EVP_CIPHER_CTX *ctx);
+void EVP_CIPHER_CTX_free(EVP_CIPHER_CTX *ctx);
+
+int EVP_EncryptInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type,
+                       ENGINE *impl, const unsigned char *key, const unsigned char *iv);
+int EVP_EncryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out,
+                      int *outl, const unsigned char *in, int inl);
+int EVP_EncryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl);
+
+int EVP_DecryptInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type,
+                       ENGINE *impl, const unsigned char *key, const unsigned char *iv);
+int EVP_DecryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out,
+                      int *outl, const unsigned char *in, int inl);
+int EVP_DecryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl);
+
+int EVP_CipherInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type,
+                      ENGINE *impl, const unsigned char *key, const unsigned char *iv, int enc);
+int EVP_CipherUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out,
+                     int *outl, const unsigned char *in, int inl);
+int EVP_CipherFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl);
+
+int EVP_EncryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type,
+                    const unsigned char *key, const unsigned char *iv);
+int EVP_EncryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl);
+
+int EVP_DecryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type,
+                    const unsigned char *key, const unsigned char *iv);
+int EVP_DecryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl);
+
+int EVP_CipherInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type,
+                   const unsigned char *key, const unsigned char *iv, int enc);
+int EVP_CipherFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl);
+
+int EVP_CIPHER_CTX_set_padding(EVP_CIPHER_CTX *x, int padding);
+int EVP_CIPHER_CTX_set_key_length(EVP_CIPHER_CTX *x, int keylen);
+int EVP_CIPHER_CTX_ctrl(EVP_CIPHER_CTX *ctx, int type, int arg, void *ptr);
+int EVP_CIPHER_CTX_rand_key(EVP_CIPHER_CTX *ctx, unsigned char *key);
+
+const EVP_CIPHER *EVP_get_cipherbyname(const char *name);
+const EVP_CIPHER *EVP_get_cipherbynid(int nid);
+const EVP_CIPHER *EVP_get_cipherbyobj(const ASN1_OBJECT *a);
+
+int EVP_CIPHER_nid(const EVP_CIPHER *e);
+int EVP_CIPHER_block_size(const EVP_CIPHER *e);
+int EVP_CIPHER_key_length(const EVP_CIPHER *e);
+int EVP_CIPHER_iv_length(const EVP_CIPHER *e);
+unsigned long EVP_CIPHER_flags(const EVP_CIPHER *e);
+unsigned long EVP_CIPHER_mode(const EVP_CIPHER *e);
+int EVP_CIPHER_type(const EVP_CIPHER *ctx);
+
+const EVP_CIPHER *EVP_CIPHER_CTX_cipher(const EVP_CIPHER_CTX *ctx);
+int EVP_CIPHER_CTX_nid(const EVP_CIPHER_CTX *ctx);
+int EVP_CIPHER_CTX_block_size(const EVP_CIPHER_CTX *ctx);
+int EVP_CIPHER_CTX_key_length(const EVP_CIPHER_CTX *ctx);
+int EVP_CIPHER_CTX_iv_length(const EVP_CIPHER_CTX *ctx);
+void *EVP_CIPHER_CTX_get_app_data(const EVP_CIPHER_CTX *ctx);
+void EVP_CIPHER_CTX_set_app_data(const EVP_CIPHER_CTX *ctx, void *data);
+int EVP_CIPHER_CTX_type(const EVP_CIPHER_CTX *ctx);
+int EVP_CIPHER_CTX_mode(const EVP_CIPHER_CTX *ctx);
+
+int EVP_CIPHER_param_to_asn1(EVP_CIPHER_CTX *c, ASN1_TYPE *type);
+int EVP_CIPHER_asn1_to_param(EVP_CIPHER_CTX *c, ASN1_TYPE *type);
+ +

DESCRIPTION

+ +

The EVP cipher routines are a high level interface to certain symmetric ciphers.

+ +

EVP_CIPHER_CTX_new() creates a cipher context.

+ +

EVP_CIPHER_CTX_free() clears all information from a cipher context and free up any allocated memory associate with it, including ctx itself. This function should be called after all operations using a cipher are complete so sensitive information does not remain in memory.

+ +

EVP_EncryptInit_ex() sets up cipher context ctx for encryption with cipher type from ENGINE impl. ctx must be created before calling this function. type is normally supplied by a function such as EVP_aes_256_cbc(). If impl is NULL then the default implementation is used. key is the symmetric key to use and iv is the IV to use (if necessary), the actual number of bytes used for the key and IV depends on the cipher. It is possible to set all parameters to NULL except type in an initial call and supply the remaining parameters in subsequent calls, all of which have type set to NULL. This is done when the default cipher parameters are not appropriate.

+ +

EVP_EncryptUpdate() encrypts inl bytes from the buffer in and writes the encrypted version to 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 out should contain sufficient room. The actual number of bytes written is placed in outl. It also checks if in and out are partially overlapping, and if they are 0 is returned to indicate failure.

+ +

If padding is enabled (the default) then EVP_EncryptFinal_ex() encrypts the "final" data, that is any data that remains in a partial block. It uses standard block padding (aka PKCS padding) as described in the NOTES section, below. The encrypted final data is written to out which should have sufficient space for one cipher block. The number of bytes written is placed in outl. After this function is called the encryption operation is finished and no further calls to EVP_EncryptUpdate() should be made.

+ +

If padding is disabled then EVP_EncryptFinal_ex() will not encrypt any more data and it will return an error if any data remains in a partial block: that is if the total data length is not a multiple of the block size.

+ +

EVP_DecryptInit_ex(), EVP_DecryptUpdate() and EVP_DecryptFinal_ex() are the corresponding decryption operations. EVP_DecryptFinal() will return an error code if padding is enabled and the final block is not correctly formatted. The parameters and restrictions are identical to the encryption operations except that if padding is enabled the decrypted data buffer out passed to EVP_DecryptUpdate() should have sufficient room for (inl + cipher_block_size) bytes unless the cipher block size is 1 in which case inl bytes is sufficient.

+ +

EVP_CipherInit_ex(), EVP_CipherUpdate() and EVP_CipherFinal_ex() are functions that can be used for decryption or encryption. The operation performed depends on the value of the enc parameter. It should be set to 1 for encryption, 0 for decryption and -1 to leave the value unchanged (the actual value of 'enc' being supplied in a previous call).

+ +

EVP_CIPHER_CTX_reset() clears all information from a cipher context and free up any allocated memory associate with it, except the ctx itself. This function should be called anytime ctx is to be reused for another EVP_CipherInit() / EVP_CipherUpdate() / EVP_CipherFinal() series of calls.

+ +

EVP_EncryptInit(), EVP_DecryptInit() and EVP_CipherInit() behave in a similar way to EVP_EncryptInit_ex(), EVP_DecryptInit_ex() and EVP_CipherInit_ex() except they always use the default cipher implementation.

+ +

EVP_EncryptFinal(), EVP_DecryptFinal() and EVP_CipherFinal() are identical to EVP_EncryptFinal_ex(), EVP_DecryptFinal_ex() and EVP_CipherFinal_ex(). In previous releases they also cleaned up the ctx, but this is no longer done and EVP_CIPHER_CTX_clean() must be called to free any context resources.

+ +

EVP_get_cipherbyname(), EVP_get_cipherbynid() and EVP_get_cipherbyobj() return an EVP_CIPHER structure when passed a cipher name, a NID or an ASN1_OBJECT structure.

+ +

EVP_CIPHER_nid() and EVP_CIPHER_CTX_nid() return the NID of a cipher when passed an EVP_CIPHER or EVP_CIPHER_CTX structure. The actual NID value is an internal value which may not have a corresponding OBJECT IDENTIFIER.

+ +

EVP_CIPHER_CTX_set_padding() enables or disables padding. This function should be called after the context is set up for encryption or decryption with EVP_EncryptInit_ex(), EVP_DecryptInit_ex() or EVP_CipherInit_ex(). By default encryption operations are padded using standard block padding and the padding is checked and removed when decrypting. If the pad parameter is zero then no padding is performed, the total amount of data encrypted or decrypted must then be a multiple of the block size or an error will occur.

+ +

EVP_CIPHER_key_length() and EVP_CIPHER_CTX_key_length() return the key length of a cipher when passed an EVP_CIPHER or EVP_CIPHER_CTX structure. The constant EVP_MAX_KEY_LENGTH is the maximum key length for all ciphers. Note: although EVP_CIPHER_key_length() is fixed for a given cipher, the value of EVP_CIPHER_CTX_key_length() may be different for variable key length ciphers.

+ +

EVP_CIPHER_CTX_set_key_length() sets the key length of the cipher ctx. If the cipher is a fixed length cipher then attempting to set the key length to any value other than the fixed value is an error.

+ +

EVP_CIPHER_iv_length() and EVP_CIPHER_CTX_iv_length() return the IV length of a cipher when passed an EVP_CIPHER or EVP_CIPHER_CTX. It will return zero if the cipher does not use an IV. The constant EVP_MAX_IV_LENGTH is the maximum IV length for all ciphers.

+ +

EVP_CIPHER_block_size() and EVP_CIPHER_CTX_block_size() return the block size of a cipher when passed an EVP_CIPHER or EVP_CIPHER_CTX structure. The constant EVP_MAX_BLOCK_LENGTH is also the maximum block length for all ciphers.

+ +

EVP_CIPHER_type() and EVP_CIPHER_CTX_type() return the type of the passed cipher or context. This "type" is the actual NID of the cipher OBJECT IDENTIFIER as such it ignores the cipher parameters and 40 bit RC2 and 128 bit RC2 have the same NID. If the cipher does not have an object identifier or does not have ASN1 support this function will return NID_undef.

+ +

EVP_CIPHER_CTX_cipher() returns the EVP_CIPHER structure when passed an EVP_CIPHER_CTX structure.

+ +

EVP_CIPHER_mode() and EVP_CIPHER_CTX_mode() return the block cipher mode: EVP_CIPH_ECB_MODE, EVP_CIPH_CBC_MODE, EVP_CIPH_CFB_MODE, EVP_CIPH_OFB_MODE, EVP_CIPH_CTR_MODE, EVP_CIPH_GCM_MODE, EVP_CIPH_CCM_MODE, EVP_CIPH_XTS_MODE, EVP_CIPH_WRAP_MODE or EVP_CIPH_OCB_MODE. If the cipher is a stream cipher then EVP_CIPH_STREAM_CIPHER is returned.

+ +

EVP_CIPHER_param_to_asn1() sets the AlgorithmIdentifier "parameter" based on the passed cipher. This will typically include any parameters and an IV. The cipher IV (if any) must be set when this call is made. This call should be made before the cipher is actually "used" (before any EVP_EncryptUpdate(), EVP_DecryptUpdate() calls for example). This function may fail if the cipher does not have any ASN1 support.

+ +

EVP_CIPHER_asn1_to_param() sets the cipher parameters based on an ASN1 AlgorithmIdentifier "parameter". The precise effect depends on the cipher In the case of RC2, for example, it will set the IV and effective key length. This function should be called after the base cipher type is set but before the key is set. For example EVP_CipherInit() will be called with the IV and key set to NULL, EVP_CIPHER_asn1_to_param() will be called and finally EVP_CipherInit() again with all parameters except the key set to NULL. It is possible for this function to fail if the cipher does not have any ASN1 support or the parameters cannot be set (for example the RC2 effective key length is not supported.

+ +

EVP_CIPHER_CTX_ctrl() allows various cipher specific parameters to be determined and set.

+ +

EVP_CIPHER_CTX_rand_key() generates a random key of the appropriate length based on the cipher context. The EVP_CIPHER can provide its own random key generation routine to support keys of a specific form. Key must point to a buffer at least as big as the value returned by EVP_CIPHER_CTX_key_length().

+ +

RETURN VALUES

+ +

EVP_CIPHER_CTX_new() returns a pointer to a newly created EVP_CIPHER_CTX for success and NULL for failure.

+ +

EVP_EncryptInit_ex(), EVP_EncryptUpdate() and EVP_EncryptFinal_ex() return 1 for success and 0 for failure.

+ +

EVP_DecryptInit_ex() and EVP_DecryptUpdate() return 1 for success and 0 for failure. EVP_DecryptFinal_ex() returns 0 if the decrypt failed or 1 for success.

+ +

EVP_CipherInit_ex() and EVP_CipherUpdate() return 1 for success and 0 for failure. EVP_CipherFinal_ex() returns 0 for a decryption failure or 1 for success.

+ +

EVP_CIPHER_CTX_reset() returns 1 for success and 0 for failure.

+ +

EVP_get_cipherbyname(), EVP_get_cipherbynid() and EVP_get_cipherbyobj() return an EVP_CIPHER structure or NULL on error.

+ +

EVP_CIPHER_nid() and EVP_CIPHER_CTX_nid() return a NID.

+ +

EVP_CIPHER_block_size() and EVP_CIPHER_CTX_block_size() return the block size.

+ +

EVP_CIPHER_key_length() and EVP_CIPHER_CTX_key_length() return the key length.

+ +

EVP_CIPHER_CTX_set_padding() always returns 1.

+ +

EVP_CIPHER_iv_length() and EVP_CIPHER_CTX_iv_length() return the IV length or zero if the cipher does not use an IV.

+ +

EVP_CIPHER_type() and EVP_CIPHER_CTX_type() return the NID of the cipher's OBJECT IDENTIFIER or NID_undef if it has no defined OBJECT IDENTIFIER.

+ +

EVP_CIPHER_CTX_cipher() returns an EVP_CIPHER structure.

+ +

EVP_CIPHER_param_to_asn1() and EVP_CIPHER_asn1_to_param() return greater than zero for success and zero or a negative number on failure.

+ +

EVP_CIPHER_CTX_rand_key() returns 1 for success.

+ +

CIPHER LISTING

+ +

All algorithms have a fixed key length unless otherwise stated.

+ +

Refer to "SEE ALSO" for the full list of ciphers available through the EVP interface.

+ +
+ +
EVP_enc_null()
+
+ +

Null cipher: does nothing.

+ +
+
+ +

AEAD Interface

+ +

The EVP interface for Authenticated Encryption with Associated Data (AEAD) modes are subtly altered and several additional ctrl operations are supported depending on the mode specified.

+ +

To specify additional authenticated data (AAD), a call to EVP_CipherUpdate(), EVP_EncryptUpdate() or EVP_DecryptUpdate() should be made with the output parameter out set to NULL.

+ +

When decrypting, the return value of EVP_DecryptFinal() or EVP_CipherFinal() indicates whether the operation was successful. If it does not indicate success, the authentication operation has failed and any output data MUST NOT be used as it is corrupted.

+ +

GCM and OCB Modes

+ +

The following ctrls are supported in GCM and OCB modes.

+ +
+ +
EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_IVLEN, ivlen, NULL)
+
+ +

Sets the IV length. This call can only be made before specifying an IV. If not called a default IV length is used.

+ +

For GCM AES and OCB AES the default is 12 (i.e. 96 bits). For OCB mode the maximum is 15.

+ +
+
EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_GET_TAG, taglen, tag)
+
+ +

Writes taglen bytes of the tag value to the buffer indicated by tag. This call can only be made when encrypting data and after all data has been processed (e.g. after an EVP_EncryptFinal() call).

+ +

For OCB, taglen must either be 16 or the value previously set via EVP_CTRL_AEAD_SET_TAG.

+ +
+
EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_TAG, taglen, tag)
+
+ +

Sets the expected tag to taglen bytes from tag. The tag length can only be set before specifying an IV. taglen must be between 1 and 16 inclusive.

+ +

For GCM, this call is only valid when decrypting data.

+ +

For OCB, this call is valid when decrypting data to set the expected tag, and before encryption to set the desired tag length.

+ +

In OCB mode, calling this before encryption with tag set to NULL sets the tag length. If this is not called prior to encryption, a default tag length is used.

+ +

For OCB AES, the default tag length is 16 (i.e. 128 bits). It is also the maximum tag length for OCB.

+ +
+
+ +

CCM Mode

+ +

The EVP interface for CCM mode is similar to that of the GCM mode but with a few additional requirements and different ctrl values.

+ +

For CCM mode, the total plaintext or ciphertext length MUST be passed to EVP_CipherUpdate(), EVP_EncryptUpdate() or EVP_DecryptUpdate() with the output and input parameters (in and out) set to NULL and the length passed in the inl parameter.

+ +

The following ctrls are supported in CCM mode.

+ +
+ +
EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_TAG, taglen, tag)
+
+ +

This call is made to set the expected CCM tag value when decrypting or the length of the tag (with the tag parameter set to NULL) when encrypting. The tag length is often referred to as M. If not set a default value is used (12 for AES). When decrypting, the tag needs to be set before passing in data to be decrypted, but as in GCM and OCB mode, it can be set after passing additional authenticated data (see "AEAD Interface").

+ +
+
EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_CCM_SET_L, ivlen, NULL)
+
+ +

Sets the CCM L value. If not set a default is used (8 for AES).

+ +
+
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 15 - L so it is 7 by default for AES.

+ +
+
+ +

ChaCha20-Poly1305

+ +

The following ctrls are supported for the ChaCha20-Poly1305 AEAD algorithm.

+ +
+ +
EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_IVLEN, ivlen, NULL)
+
+ +

Sets the nonce length. This call can only be made before specifying the nonce. If not called a default nonce length of 12 (i.e. 96 bits) is used. The maximum nonce length is 12 bytes (i.e. 96-bits). If a nonce of less than 12 bytes is set then the nonce is automatically padded with leading 0 bytes to make it 12 bytes in length.

+ +
+
EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_GET_TAG, taglen, tag)
+
+ +

Writes taglen bytes of the tag value to the buffer indicated by tag. This call can only be made when encrypting data and after all data has been processed (e.g. after an EVP_EncryptFinal() call).

+ +

taglen specified here must be 16 (POLY1305_BLOCK_SIZE, i.e. 128-bits) or less.

+ +
+
EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_TAG, taglen, tag)
+
+ +

Sets the expected tag to taglen bytes from tag. The tag length can only be set before specifying an IV. taglen must be between 1 and 16 (POLY1305_BLOCK_SIZE) inclusive. This call is only valid when decrypting data.

+ +
+
+ +

NOTES

+ +

Where possible the EVP interface to symmetric ciphers should be used in preference to the low level interfaces. This is because the code then becomes transparent to the cipher used and much more flexible. Additionally, the EVP interface will ensure the use of platform specific cryptographic acceleration such as AES-NI (the low level interfaces do not provide the guarantee).

+ +

PKCS padding works by adding n padding bytes of value n to make the total length of the encrypted data a multiple of the block size. Padding is always added so if the data is already a multiple of the block size n will equal the block size. For example if the block size is 8 and 11 bytes are to be encrypted then 5 padding bytes of value 5 will be added.

+ +

When decrypting the final block is checked to see if it has the correct form.

+ +

Although the decryption operation can produce an error if padding is enabled, it is not a strong test that the input data or key is correct. A random block has better than 1 in 256 chance of being of the correct format and problems with the input data earlier on will not produce a final decrypt error.

+ +

If padding is disabled then the decryption operation will always succeed if the total amount of data decrypted is a multiple of the block size.

+ +

The functions EVP_EncryptInit(), EVP_EncryptFinal(), EVP_DecryptInit(), EVP_CipherInit() and EVP_CipherFinal() are obsolete but are retained for compatibility with existing code. New code should use EVP_EncryptInit_ex(), EVP_EncryptFinal_ex(), EVP_DecryptInit_ex(), EVP_DecryptFinal_ex(), EVP_CipherInit_ex() and EVP_CipherFinal_ex() because they can reuse an existing context without allocating and freeing it up on each call.

+ +

There are some differences between functions EVP_CipherInit() and EVP_CipherInit_ex(), significant in some circumstances. EVP_CipherInit() fills the passed context object with zeros. As a consequence, EVP_CipherInit() does not allow step-by-step initialization of the ctx when the key and iv are passed in separate calls. It also means that the flags set for the CTX are removed, and it is especially important for the EVP_CIPHER_CTX_FLAG_WRAP_ALLOW flag treated specially in EVP_CipherInit_ex().

+ +

EVP_get_cipherbynid(), and EVP_get_cipherbyobj() are implemented as macros.

+ +

BUGS

+ +

EVP_MAX_KEY_LENGTH and EVP_MAX_IV_LENGTH only refer to the internal ciphers with default key lengths. If custom ciphers exceed these values the results are unpredictable. This is because it has become standard practice to define a generic key as a fixed unsigned char array containing EVP_MAX_KEY_LENGTH bytes.

+ +

The ASN1 code is incomplete (and sometimes inaccurate) it has only been tested for certain common S/MIME ciphers (RC2, DES, triple DES) in CBC mode.

+ +

EXAMPLES

+ +

Encrypt a string using IDEA:

+ +
int do_crypt(char *outfile)
+{
+    unsigned char outbuf[1024];
+    int outlen, tmplen;
+    /*
+     * Bogus key and IV: we'd normally set these from
+     * another source.
+     */
+    unsigned char key[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+    unsigned char iv[] = {1,2,3,4,5,6,7,8};
+    char intext[] = "Some Crypto Text";
+    EVP_CIPHER_CTX *ctx;
+    FILE *out;
+
+    ctx = EVP_CIPHER_CTX_new();
+    EVP_EncryptInit_ex(ctx, EVP_idea_cbc(), NULL, key, iv);
+
+    if (!EVP_EncryptUpdate(ctx, outbuf, &outlen, intext, strlen(intext))) {
+        /* Error */
+        EVP_CIPHER_CTX_free(ctx);
+        return 0;
+    }
+    /*
+     * Buffer passed to EVP_EncryptFinal() must be after data just
+     * encrypted to avoid overwriting it.
+     */
+    if (!EVP_EncryptFinal_ex(ctx, outbuf + outlen, &tmplen)) {
+        /* Error */
+        EVP_CIPHER_CTX_free(ctx);
+        return 0;
+    }
+    outlen += tmplen;
+    EVP_CIPHER_CTX_free(ctx);
+    /*
+     * Need binary mode for fopen because encrypted data is
+     * binary data. Also cannot use strlen() on it because
+     * it won't be NUL terminated and may contain embedded
+     * NULs.
+     */
+    out = fopen(outfile, "wb");
+    if (out == NULL) {
+        /* Error */
+        return 0;
+    }
+    fwrite(outbuf, 1, outlen, out);
+    fclose(out);
+    return 1;
+}
+ +

The ciphertext from the above example can be decrypted using the openssl utility with the command line (shown on two lines for clarity):

+ +
openssl idea -d \
+    -K 000102030405060708090A0B0C0D0E0F -iv 0102030405060708 <filename
+ +

General encryption and decryption function example using FILE I/O and AES128 with a 128-bit key:

+ +
int do_crypt(FILE *in, FILE *out, int do_encrypt)
+{
+    /* Allow enough space in output buffer for additional block */
+    unsigned char inbuf[1024], outbuf[1024 + EVP_MAX_BLOCK_LENGTH];
+    int inlen, outlen;
+    EVP_CIPHER_CTX *ctx;
+    /*
+     * Bogus key and IV: we'd normally set these from
+     * another source.
+     */
+    unsigned char key[] = "0123456789abcdeF";
+    unsigned char iv[] = "1234567887654321";
+
+    /* 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,
+                      do_encrypt);
+    OPENSSL_assert(EVP_CIPHER_CTX_key_length(ctx) == 16);
+    OPENSSL_assert(EVP_CIPHER_CTX_iv_length(ctx) == 16);
+
+    /* Now we can set key and IV */
+    EVP_CipherInit_ex(ctx, NULL, NULL, key, iv, do_encrypt);
+
+    for (;;) {
+        inlen = fread(inbuf, 1, 1024, in);
+        if (inlen <= 0)
+            break;
+        if (!EVP_CipherUpdate(ctx, outbuf, &outlen, inbuf, inlen)) {
+            /* Error */
+            EVP_CIPHER_CTX_free(ctx);
+            return 0;
+        }
+        fwrite(outbuf, 1, outlen, out);
+    }
+    if (!EVP_CipherFinal_ex(ctx, outbuf, &outlen)) {
+        /* Error */
+        EVP_CIPHER_CTX_free(ctx);
+        return 0;
+    }
+    fwrite(outbuf, 1, outlen, out);
+
+    EVP_CIPHER_CTX_free(ctx);
+    return 1;
+}
+ +

SEE ALSO

+ +

evp(7)

+ +

Supported ciphers are listed in:

+ +

EVP_aes(3), EVP_aria(3), EVP_bf(3), EVP_camellia(3), EVP_cast5(3), EVP_chacha20(3), EVP_des(3), EVP_desx(3), EVP_idea(3), EVP_rc2(3), EVP_rc4(3), EVP_rc5(3), EVP_seed(3), EVP_sm4(3)

+ +

HISTORY

+ +

Support for OCB mode was added in OpenSSL 1.1.0.

+ +

EVP_CIPHER_CTX was made opaque in OpenSSL 1.1.0. As a result, EVP_CIPHER_CTX_reset() appeared and EVP_CIPHER_CTX_cleanup() disappeared. EVP_CIPHER_CTX_init() remains as an alias for EVP_CIPHER_CTX_reset().

+ +

COPYRIGHT

+ +

Copyright 2000-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_MD_meth_new.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_MD_meth_new.html new file mode 100644 index 00000000..9bf2afd8 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_MD_meth_new.html @@ -0,0 +1,163 @@ + + + + +EVP_MD_meth_new + + + + + + + + + + +

NAME

+ +

EVP_MD_meth_dup, EVP_MD_meth_new, EVP_MD_meth_free, EVP_MD_meth_set_input_blocksize, EVP_MD_meth_set_result_size, EVP_MD_meth_set_app_datasize, EVP_MD_meth_set_flags, EVP_MD_meth_set_init, EVP_MD_meth_set_update, EVP_MD_meth_set_final, EVP_MD_meth_set_copy, EVP_MD_meth_set_cleanup, EVP_MD_meth_set_ctrl, EVP_MD_meth_get_input_blocksize, EVP_MD_meth_get_result_size, EVP_MD_meth_get_app_datasize, EVP_MD_meth_get_flags, EVP_MD_meth_get_init, EVP_MD_meth_get_update, EVP_MD_meth_get_final, EVP_MD_meth_get_copy, EVP_MD_meth_get_cleanup, EVP_MD_meth_get_ctrl - Routines to build up EVP_MD methods

+ +

SYNOPSIS

+ +
#include <openssl/evp.h>
+
+EVP_MD *EVP_MD_meth_new(int md_type, int pkey_type);
+void EVP_MD_meth_free(EVP_MD *md);
+EVP_MD *EVP_MD_meth_dup(const EVP_MD *md);
+
+int EVP_MD_meth_set_input_blocksize(EVP_MD *md, int blocksize);
+int EVP_MD_meth_set_result_size(EVP_MD *md, int resultsize);
+int EVP_MD_meth_set_app_datasize(EVP_MD *md, int datasize);
+int EVP_MD_meth_set_flags(EVP_MD *md, unsigned long flags);
+int EVP_MD_meth_set_init(EVP_MD *md, int (*init)(EVP_MD_CTX *ctx));
+int EVP_MD_meth_set_update(EVP_MD *md, int (*update)(EVP_MD_CTX *ctx,
+                                                     const void *data,
+                                                     size_t count));
+int EVP_MD_meth_set_final(EVP_MD *md, int (*final)(EVP_MD_CTX *ctx,
+                                                   unsigned char *md));
+int EVP_MD_meth_set_copy(EVP_MD *md, int (*copy)(EVP_MD_CTX *to,
+                                                 const EVP_MD_CTX *from));
+int EVP_MD_meth_set_cleanup(EVP_MD *md, int (*cleanup)(EVP_MD_CTX *ctx));
+int EVP_MD_meth_set_ctrl(EVP_MD *md, int (*ctrl)(EVP_MD_CTX *ctx, int cmd,
+                                                 int p1, void *p2));
+
+int EVP_MD_meth_get_input_blocksize(const EVP_MD *md);
+int EVP_MD_meth_get_result_size(const EVP_MD *md);
+int EVP_MD_meth_get_app_datasize(const EVP_MD *md);
+unsigned long EVP_MD_meth_get_flags(const EVP_MD *md);
+int (*EVP_MD_meth_get_init(const EVP_MD *md))(EVP_MD_CTX *ctx);
+int (*EVP_MD_meth_get_update(const EVP_MD *md))(EVP_MD_CTX *ctx,
+                                                const void *data,
+                                                size_t count);
+int (*EVP_MD_meth_get_final(const EVP_MD *md))(EVP_MD_CTX *ctx,
+                                               unsigned char *md);
+int (*EVP_MD_meth_get_copy(const EVP_MD *md))(EVP_MD_CTX *to,
+                                              const EVP_MD_CTX *from);
+int (*EVP_MD_meth_get_cleanup(const EVP_MD *md))(EVP_MD_CTX *ctx);
+int (*EVP_MD_meth_get_ctrl(const EVP_MD *md))(EVP_MD_CTX *ctx, int cmd,
+                                              int p1, void *p2);
+ +

DESCRIPTION

+ +

The EVP_MD type is a structure for digest method implementation. It can also have associated public/private key signing and verifying routines.

+ +

EVP_MD_meth_new() creates a new EVP_MD structure.

+ +

EVP_MD_meth_dup() creates a copy of md.

+ +

EVP_MD_meth_free() destroys a EVP_MD structure.

+ +

EVP_MD_meth_set_input_blocksize() sets the internal input block size for the method md to blocksize bytes.

+ +

EVP_MD_meth_set_result_size() sets the size of the result that the digest method in md is expected to produce to resultsize bytes.

+ +

The digest method may have its own private data, which OpenSSL will allocate for it. EVP_MD_meth_set_app_datasize() should be used to set the size for it to datasize.

+ +

EVP_MD_meth_set_flags() sets the flags to describe optional behaviours in the particular md. Several flags can be or'd together. The available flags are:

+ +
+ +
EVP_MD_FLAG_ONESHOT
+
+ +

This digest method can only handle one block of input.

+ +
+
EVP_MD_FLAG_XOF
+
+ +

This digest method is an extensible-output function (XOF) and supports the EVP_MD_CTRL_XOF_LEN control.

+ +
+
EVP_MD_FLAG_DIGALGID_NULL
+
+ +

When setting up a DigestAlgorithmIdentifier, this flag will have the parameter set to NULL by default. Use this for PKCS#1. Note: if combined with EVP_MD_FLAG_DIGALGID_ABSENT, the latter will override.

+ +
+
EVP_MD_FLAG_DIGALGID_ABSENT
+
+ +

When setting up a DigestAlgorithmIdentifier, this flag will have the parameter be left absent by default. Note: if combined with EVP_MD_FLAG_DIGALGID_NULL, the latter will be overridden.

+ +
+
EVP_MD_FLAG_DIGALGID_CUSTOM
+
+ +

Custom DigestAlgorithmIdentifier handling via ctrl, with EVP_MD_FLAG_DIGALGID_ABSENT as default. Note: if combined with EVP_MD_FLAG_DIGALGID_NULL, the latter will be overridden. Currently unused.

+ +
+
EVP_MD_FLAG_FIPS
+
+ +

This digest method is suitable for use in FIPS mode. Currently unused.

+ +
+
+ +

EVP_MD_meth_set_init() sets the digest init function for md. The digest init function is called by EVP_Digest(), EVP_DigestInit(), EVP_DigestInit_ex(), EVP_SignInit, EVP_SignInit_ex(), EVP_VerifyInit() and EVP_VerifyInit_ex().

+ +

EVP_MD_meth_set_update() sets the digest update function for md. The digest update function is called by EVP_Digest(), EVP_DigestUpdate() and EVP_SignUpdate().

+ +

EVP_MD_meth_set_final() sets the digest final function for md. The digest final function is called by EVP_Digest(), EVP_DigestFinal(), EVP_DigestFinal_ex(), EVP_SignFinal() and EVP_VerifyFinal().

+ +

EVP_MD_meth_set_copy() sets the function for md to do extra computations after the method's private data structure has been copied from one EVP_MD_CTX to another. If all that's needed is to copy the data, there is no need for this copy function. Note that the copy function is passed two EVP_MD_CTX *, the private data structure is then available with EVP_MD_CTX_md_data(). This copy function is called by EVP_MD_CTX_copy() and EVP_MD_CTX_copy_ex().

+ +

EVP_MD_meth_set_cleanup() sets the function for md to do extra cleanup before the method's private data structure is cleaned out and freed. Note that the cleanup function is passed a EVP_MD_CTX *, the private data structure is then available with EVP_MD_CTX_md_data(). This cleanup function is called by EVP_MD_CTX_reset() and EVP_MD_CTX_free().

+ +

EVP_MD_meth_set_ctrl() sets the control function for md. See EVP_MD_CTX_ctrl(3) for the available controls.

+ +

EVP_MD_meth_get_input_blocksize(), EVP_MD_meth_get_result_size(), EVP_MD_meth_get_app_datasize(), EVP_MD_meth_get_flags(), EVP_MD_meth_get_init(), EVP_MD_meth_get_update(), EVP_MD_meth_get_final(), EVP_MD_meth_get_copy(), EVP_MD_meth_get_cleanup() and EVP_MD_meth_get_ctrl() are all used to retrieve the method data given with the EVP_MD_meth_set_*() functions above.

+ +

RETURN VALUES

+ +

EVP_MD_meth_new() and EVP_MD_meth_dup() return a pointer to a newly created EVP_MD, or NULL on failure. All EVP_MD_meth_set_*() functions return 1. EVP_MD_get_input_blocksize(), EVP_MD_meth_get_result_size(), EVP_MD_meth_get_app_datasize() and EVP_MD_meth_get_flags() return the indicated sizes or flags. All other EVP_CIPHER_meth_get_*() functions return pointers to their respective md function.

+ +

SEE ALSO

+ +

EVP_DigestInit(3), EVP_SignInit(3), EVP_VerifyInit(3)

+ +

HISTORY

+ +

The EVP_MD structure was openly available in OpenSSL before version 1.1. The functions described here were added in OpenSSL 1.1.

+ +

COPYRIGHT

+ +

Copyright 2015-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_OpenInit.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_OpenInit.html new file mode 100644 index 00000000..c1c73618 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_OpenInit.html @@ -0,0 +1,75 @@ + + + + +EVP_OpenInit + + + + + + + + + + +

NAME

+ +

EVP_OpenInit, EVP_OpenUpdate, EVP_OpenFinal - EVP envelope decryption

+ +

SYNOPSIS

+ +
#include <openssl/evp.h>
+
+int EVP_OpenInit(EVP_CIPHER_CTX *ctx, EVP_CIPHER *type, unsigned char *ek,
+                 int ekl, unsigned char *iv, EVP_PKEY *priv);
+int EVP_OpenUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out,
+                   int *outl, unsigned char *in, int inl);
+int EVP_OpenFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl);
+ +

DESCRIPTION

+ +

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.

+ +

EVP_OpenInit() initializes a cipher context ctx for decryption with cipher type. It decrypts the encrypted symmetric key of length ekl bytes passed in the ek parameter using the private key priv. The IV is supplied in the iv parameter.

+ +

EVP_OpenUpdate() and EVP_OpenFinal() have exactly the same properties as the EVP_DecryptUpdate() and EVP_DecryptFinal() routines, as documented on the EVP_EncryptInit(3) manual page.

+ +

NOTES

+ +

It is possible to call EVP_OpenInit() twice in the same way as EVP_DecryptInit(). The first call should have priv set to NULL and (after setting any cipher parameters) it should be called again with type set to NULL.

+ +

If the cipher passed in the type parameter is a variable length cipher then the key length will be set to the value of the recovered key length. If the cipher is a fixed length cipher then the recovered key length must match the fixed cipher length.

+ +

RETURN VALUES

+ +

EVP_OpenInit() returns 0 on error or a non zero integer (actually the recovered secret key size) if successful.

+ +

EVP_OpenUpdate() returns 1 for success or 0 for failure.

+ +

EVP_OpenFinal() returns 0 if the decrypt failed or 1 for success.

+ +

SEE ALSO

+ +

evp(7), RAND_bytes(3), EVP_EncryptInit(3), EVP_SealInit(3)

+ +

COPYRIGHT

+ +

Copyright 2000-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_ASN1_METHOD.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_ASN1_METHOD.html new file mode 100644 index 00000000..5860824b --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_ASN1_METHOD.html @@ -0,0 +1,341 @@ + + + + +EVP_PKEY_ASN1_METHOD + + + + + + + + + + +

NAME

+ +

EVP_PKEY_ASN1_METHOD, EVP_PKEY_asn1_new, EVP_PKEY_asn1_copy, EVP_PKEY_asn1_free, EVP_PKEY_asn1_add0, EVP_PKEY_asn1_add_alias, EVP_PKEY_asn1_set_public, EVP_PKEY_asn1_set_private, EVP_PKEY_asn1_set_param, EVP_PKEY_asn1_set_free, EVP_PKEY_asn1_set_ctrl, EVP_PKEY_asn1_set_item, EVP_PKEY_asn1_set_siginf, EVP_PKEY_asn1_set_check, EVP_PKEY_asn1_set_public_check, EVP_PKEY_asn1_set_param_check, EVP_PKEY_asn1_set_security_bits, EVP_PKEY_asn1_set_set_priv_key, EVP_PKEY_asn1_set_set_pub_key, EVP_PKEY_asn1_set_get_priv_key, EVP_PKEY_asn1_set_get_pub_key, EVP_PKEY_get0_asn1 - manipulating and registering EVP_PKEY_ASN1_METHOD structure

+ +

SYNOPSIS

+ +
#include <openssl/evp.h>
+
+typedef struct evp_pkey_asn1_method_st EVP_PKEY_ASN1_METHOD;
+
+EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_new(int id, int flags,
+                                        const char *pem_str,
+                                        const char *info);
+void EVP_PKEY_asn1_copy(EVP_PKEY_ASN1_METHOD *dst,
+                        const EVP_PKEY_ASN1_METHOD *src);
+void EVP_PKEY_asn1_free(EVP_PKEY_ASN1_METHOD *ameth);
+int EVP_PKEY_asn1_add0(const EVP_PKEY_ASN1_METHOD *ameth);
+int EVP_PKEY_asn1_add_alias(int to, int from);
+
+void EVP_PKEY_asn1_set_public(EVP_PKEY_ASN1_METHOD *ameth,
+                              int (*pub_decode) (EVP_PKEY *pk,
+                                                 X509_PUBKEY *pub),
+                              int (*pub_encode) (X509_PUBKEY *pub,
+                                                 const EVP_PKEY *pk),
+                              int (*pub_cmp) (const EVP_PKEY *a,
+                                              const EVP_PKEY *b),
+                              int (*pub_print) (BIO *out,
+                                                const EVP_PKEY *pkey,
+                                                int indent, ASN1_PCTX *pctx),
+                              int (*pkey_size) (const EVP_PKEY *pk),
+                              int (*pkey_bits) (const EVP_PKEY *pk));
+void EVP_PKEY_asn1_set_private(EVP_PKEY_ASN1_METHOD *ameth,
+                               int (*priv_decode) (EVP_PKEY *pk,
+                                                   const PKCS8_PRIV_KEY_INFO
+                                                   *p8inf),
+                               int (*priv_encode) (PKCS8_PRIV_KEY_INFO *p8,
+                                                   const EVP_PKEY *pk),
+                               int (*priv_print) (BIO *out,
+                                                  const EVP_PKEY *pkey,
+                                                  int indent,
+                                                  ASN1_PCTX *pctx));
+void EVP_PKEY_asn1_set_param(EVP_PKEY_ASN1_METHOD *ameth,
+                             int (*param_decode) (EVP_PKEY *pkey,
+                                                  const unsigned char **pder,
+                                                  int derlen),
+                             int (*param_encode) (const EVP_PKEY *pkey,
+                                                  unsigned char **pder),
+                             int (*param_missing) (const EVP_PKEY *pk),
+                             int (*param_copy) (EVP_PKEY *to,
+                                                const EVP_PKEY *from),
+                             int (*param_cmp) (const EVP_PKEY *a,
+                                               const EVP_PKEY *b),
+                             int (*param_print) (BIO *out,
+                                                 const EVP_PKEY *pkey,
+                                                 int indent,
+                                                 ASN1_PCTX *pctx));
+
+void EVP_PKEY_asn1_set_free(EVP_PKEY_ASN1_METHOD *ameth,
+                            void (*pkey_free) (EVP_PKEY *pkey));
+void EVP_PKEY_asn1_set_ctrl(EVP_PKEY_ASN1_METHOD *ameth,
+                            int (*pkey_ctrl) (EVP_PKEY *pkey, int op,
+                                              long arg1, void *arg2));
+void EVP_PKEY_asn1_set_item(EVP_PKEY_ASN1_METHOD *ameth,
+                            int (*item_verify) (EVP_MD_CTX *ctx,
+                                                const ASN1_ITEM *it,
+                                                void *asn,
+                                                X509_ALGOR *a,
+                                                ASN1_BIT_STRING *sig,
+                                                EVP_PKEY *pkey),
+                            int (*item_sign) (EVP_MD_CTX *ctx,
+                                              const ASN1_ITEM *it,
+                                              void *asn,
+                                              X509_ALGOR *alg1,
+                                              X509_ALGOR *alg2,
+                                              ASN1_BIT_STRING *sig));
+
+void EVP_PKEY_asn1_set_siginf(EVP_PKEY_ASN1_METHOD *ameth,
+                              int (*siginf_set) (X509_SIG_INFO *siginf,
+                                                 const X509_ALGOR *alg,
+                                                 const ASN1_STRING *sig));
+
+void EVP_PKEY_asn1_set_check(EVP_PKEY_ASN1_METHOD *ameth,
+                             int (*pkey_check) (const EVP_PKEY *pk));
+
+void EVP_PKEY_asn1_set_public_check(EVP_PKEY_ASN1_METHOD *ameth,
+                                    int (*pkey_pub_check) (const EVP_PKEY *pk));
+
+void EVP_PKEY_asn1_set_param_check(EVP_PKEY_ASN1_METHOD *ameth,
+                                   int (*pkey_param_check) (const EVP_PKEY *pk));
+
+void EVP_PKEY_asn1_set_security_bits(EVP_PKEY_ASN1_METHOD *ameth,
+                                     int (*pkey_security_bits) (const EVP_PKEY
+                                                                *pk));
+
+void EVP_PKEY_asn1_set_set_priv_key(EVP_PKEY_ASN1_METHOD *ameth,
+                                    int (*set_priv_key) (EVP_PKEY *pk,
+                                                         const unsigned char
+                                                            *priv,
+                                                         size_t len));
+
+void EVP_PKEY_asn1_set_set_pub_key(EVP_PKEY_ASN1_METHOD *ameth,
+                                   int (*set_pub_key) (EVP_PKEY *pk,
+                                                       const unsigned char *pub,
+                                                       size_t len));
+
+void EVP_PKEY_asn1_set_get_priv_key(EVP_PKEY_ASN1_METHOD *ameth,
+                                    int (*get_priv_key) (const EVP_PKEY *pk,
+                                                         unsigned char *priv,
+                                                         size_t *len));
+
+void EVP_PKEY_asn1_set_get_pub_key(EVP_PKEY_ASN1_METHOD *ameth,
+                                   int (*get_pub_key) (const EVP_PKEY *pk,
+                                                       unsigned char *pub,
+                                                       size_t *len));
+
+const EVP_PKEY_ASN1_METHOD *EVP_PKEY_get0_asn1(const EVP_PKEY *pkey);
+ +

DESCRIPTION

+ +

EVP_PKEY_ASN1_METHOD is a structure which holds a set of ASN.1 conversion, printing and information methods for a specific public key algorithm.

+ +

There are two places where the EVP_PKEY_ASN1_METHOD objects are stored: one is a built-in array representing the standard methods for different algorithms, and the other one is a stack of user-defined application-specific methods, which can be manipulated by using EVP_PKEY_asn1_add0(3).

+ +

Methods

+ +

The methods are the underlying implementations of a particular public key algorithm present by the EVP_PKEY object.

+ +
int (*pub_decode) (EVP_PKEY *pk, X509_PUBKEY *pub);
+int (*pub_encode) (X509_PUBKEY *pub, const EVP_PKEY *pk);
+int (*pub_cmp) (const EVP_PKEY *a, const EVP_PKEY *b);
+int (*pub_print) (BIO *out, const EVP_PKEY *pkey, int indent,
+                  ASN1_PCTX *pctx);
+ +

The pub_decode() and pub_encode() methods are called to decode / encode X509_PUBKEY ASN.1 parameters to / from pk. They MUST return 0 on error, 1 on success. They're called by X509_PUBKEY_get0(3) and X509_PUBKEY_set(3).

+ +

The pub_cmp() method is called when two public keys are to be compared. It MUST return 1 when the keys are equal, 0 otherwise. It's called by EVP_PKEY_cmp(3).

+ +

The pub_print() method is called to print a public key in humanly readable text to out, indented indent spaces. It MUST return 0 on error, 1 on success. It's called by EVP_PKEY_print_public(3).

+ +
int (*priv_decode) (EVP_PKEY *pk, const PKCS8_PRIV_KEY_INFO *p8inf);
+int (*priv_encode) (PKCS8_PRIV_KEY_INFO *p8, const EVP_PKEY *pk);
+int (*priv_print) (BIO *out, const EVP_PKEY *pkey, int indent,
+                   ASN1_PCTX *pctx);
+ +

The priv_decode() and priv_encode() methods are called to decode / encode PKCS8_PRIV_KEY_INFO form private key to / from pk. They MUST return 0 on error, 1 on success. They're called by EVP_PKCS82PKEY(3) and EVP_PKEY2PKCS8(3).

+ +

The priv_print() method is called to print a private key in humanly readable text to out, indented indent spaces. It MUST return 0 on error, 1 on success. It's called by EVP_PKEY_print_private(3).

+ +
int (*pkey_size) (const EVP_PKEY *pk);
+int (*pkey_bits) (const EVP_PKEY *pk);
+int (*pkey_security_bits) (const EVP_PKEY *pk);
+ +

The pkey_size() method returns the key size in bytes. It's called by EVP_PKEY_size(3).

+ +

The pkey_bits() method returns the key size in bits. It's called by EVP_PKEY_bits(3).

+ +
int (*param_decode) (EVP_PKEY *pkey,
+                     const unsigned char **pder, int derlen);
+int (*param_encode) (const EVP_PKEY *pkey, unsigned char **pder);
+int (*param_missing) (const EVP_PKEY *pk);
+int (*param_copy) (EVP_PKEY *to, const EVP_PKEY *from);
+int (*param_cmp) (const EVP_PKEY *a, const EVP_PKEY *b);
+int (*param_print) (BIO *out, const EVP_PKEY *pkey, int indent,
+                    ASN1_PCTX *pctx);
+ +

The param_decode() and param_encode() methods are called to decode / encode DER formatted parameters to / from pk. They MUST return 0 on error, 1 on success. They're called by PEM_read_bio_Parameters(3) and the file: OSSL_STORE_LOADER(3).

+ +

The param_missing() method returns 0 if a key parameter is missing, otherwise 1. It's called by EVP_PKEY_missing_parameters(3).

+ +

The param_copy() method copies key parameters from from to to. It MUST return 0 on error, 1 on success. It's called by EVP_PKEY_copy_parameters(3).

+ +

The param_cmp() method compares the parameters of keys a and b. It MUST return 1 when the keys are equal, 0 when not equal, or a negative number on error. It's called by EVP_PKEY_cmp_parameters(3).

+ +

The param_print() method prints the private key parameters in humanly readable text to out, indented indent spaces. It MUST return 0 on error, 1 on success. It's called by EVP_PKEY_print_params(3).

+ +
int (*sig_print) (BIO *out,
+                  const X509_ALGOR *sigalg, const ASN1_STRING *sig,
+                  int indent, ASN1_PCTX *pctx);
+ +

The sig_print() method prints a signature in humanly readable text to out, indented indent spaces. sigalg contains the exact signature algorithm. If the signature in sig doesn't correspond to what this method expects, X509_signature_dump() must be used as a last resort. It MUST return 0 on error, 1 on success. It's called by X509_signature_print(3).

+ +
void (*pkey_free) (EVP_PKEY *pkey);
+ +

The pkey_free() method helps freeing the internals of pkey. It's called by EVP_PKEY_free(3), EVP_PKEY_set_type(3), EVP_PKEY_set_type_str(3), and EVP_PKEY_assign(3).

+ +
int (*pkey_ctrl) (EVP_PKEY *pkey, int op, long arg1, void *arg2);
+ +

The pkey_ctrl() method adds extra algorithm specific control. It's called by EVP_PKEY_get_default_digest_nid(3), EVP_PKEY_set1_tls_encodedpoint(3), EVP_PKEY_get1_tls_encodedpoint(3), PKCS7_SIGNER_INFO_set(3), PKCS7_RECIP_INFO_set(3), ...

+ +
int (*old_priv_decode) (EVP_PKEY *pkey,
+                        const unsigned char **pder, int derlen);
+int (*old_priv_encode) (const EVP_PKEY *pkey, unsigned char **pder);
+ +

The old_priv_decode() and old_priv_encode() methods decode / encode they private key pkey from / to a DER formatted array. These are exclusively used to help decoding / encoding older (pre PKCS#8) PEM formatted encrypted private keys. old_priv_decode() MUST return 0 on error, 1 on success. old_priv_encode() MUST the return same kind of values as i2d_PrivateKey(). They're called by d2i_PrivateKey(3) and i2d_PrivateKey(3).

+ +
int (*item_verify) (EVP_MD_CTX *ctx, const ASN1_ITEM *it, void *asn,
+                    X509_ALGOR *a, ASN1_BIT_STRING *sig, EVP_PKEY *pkey);
+int (*item_sign) (EVP_MD_CTX *ctx, const ASN1_ITEM *it, void *asn,
+                  X509_ALGOR *alg1, X509_ALGOR *alg2,
+                  ASN1_BIT_STRING *sig);
+ +

The item_sign() and item_verify() methods make it possible to have algorithm specific signatures and verification of them.

+ +

item_sign() MUST return one of:

+ +
+ +
<=0
+
+ +

error

+ +
+
1
+
+ +

item_sign() did everything, OpenSSL internals just needs to pass the signature length back.

+ +
+
2
+
+ +

item_sign() did nothing, OpenSSL internal standard routines are expected to continue with the default signature production.

+ +
+
3
+
+ +

item_sign() set the algorithm identifier algor1 and algor2, OpenSSL internals should just sign using those algorithms.

+ +
+
+ +

item_verify() MUST return one of:

+ +
+ +
<=0
+
+ +

error

+ +
+
1
+
+ +

item_sign() did everything, OpenSSL internals just needs to pass the signature length back.

+ +
+
2
+
+ +

item_sign() did nothing, OpenSSL internal standard routines are expected to continue with the default signature production.

+ +
+
+ +

item_verify() and item_sign() are called by ASN1_item_verify(3) and ASN1_item_sign(3), and by extension, X509_verify(3), X509_REQ_verify(3), X509_sign(3), X509_REQ_sign(3), ...

+ +
int (*siginf_set) (X509_SIG_INFO *siginf, const X509_ALGOR *alg,
+                   const ASN1_STRING *sig);
+ +

The siginf_set() method is used to set custom X509_SIG_INFO parameters. It MUST return 0 on error, or 1 on success. It's called as part of X509_check_purpose(3), X509_check_ca(3) and X509_check_issued(3).

+ +
int (*pkey_check) (const EVP_PKEY *pk);
+int (*pkey_public_check) (const EVP_PKEY *pk);
+int (*pkey_param_check) (const EVP_PKEY *pk);
+ +

The pkey_check(), pkey_public_check() and pkey_param_check() methods are used to check the validity of pk for key-pair, public component and parameters, respectively. They MUST return 0 for an invalid key, or 1 for a valid key. They are called by EVP_PKEY_check(3), EVP_PKEY_public_check(3) and EVP_PKEY_param_check(3) respectively.

+ +
int (*set_priv_key) (EVP_PKEY *pk, const unsigned char *priv, size_t len);
+int (*set_pub_key) (EVP_PKEY *pk, const unsigned char *pub, size_t len);
+ +

The set_priv_key() and set_pub_key() methods are used to set the raw private and public key data for an EVP_PKEY. They MUST return 0 on error, or 1 on success. They are called by EVP_PKEY_new_raw_private_key(3), and EVP_PKEY_new_raw_public_key(3) respectively.

+ +

Functions

+ +

EVP_PKEY_asn1_new() creates and returns a new EVP_PKEY_ASN1_METHOD object, and associates the given id, flags, pem_str and info. id is a NID, pem_str is the PEM type string, info is a descriptive string. The following flags are supported:

+ +
ASN1_PKEY_SIGPARAM_NULL
+ +

If ASN1_PKEY_SIGPARAM_NULL is set, then the signature algorithm parameters are given the type V_ASN1_NULL by default, otherwise they will be given the type V_ASN1_UNDEF (i.e. the parameter is omitted). See X509_ALGOR_set0(3) for more information.

+ +

EVP_PKEY_asn1_copy() copies an EVP_PKEY_ASN1_METHOD object from src to dst. This function is not thread safe, it's recommended to only use this when initializing the application.

+ +

EVP_PKEY_asn1_free() frees an existing EVP_PKEY_ASN1_METHOD pointed by ameth.

+ +

EVP_PKEY_asn1_add0() adds ameth to the user defined stack of methods unless another EVP_PKEY_ASN1_METHOD with the same NID is already there. This function is not thread safe, it's recommended to only use this when initializing the application.

+ +

EVP_PKEY_asn1_add_alias() creates an alias with the NID to for the EVP_PKEY_ASN1_METHOD with NID from unless another EVP_PKEY_ASN1_METHOD with the same NID is already added. This function is not thread safe, it's recommended to only use this when initializing the application.

+ +

EVP_PKEY_asn1_set_public(), EVP_PKEY_asn1_set_private(), EVP_PKEY_asn1_set_param(), EVP_PKEY_asn1_set_free(), EVP_PKEY_asn1_set_ctrl(), EVP_PKEY_asn1_set_item(), EVP_PKEY_asn1_set_siginf(), EVP_PKEY_asn1_set_check(), EVP_PKEY_asn1_set_public_check(), EVP_PKEY_asn1_set_param_check(), EVP_PKEY_asn1_set_security_bits(), EVP_PKEY_asn1_set_set_priv_key(), EVP_PKEY_asn1_set_set_pub_key(), EVP_PKEY_asn1_set_get_priv_key() and EVP_PKEY_asn1_set_get_pub_key() set the diverse methods of the given EVP_PKEY_ASN1_METHOD object.

+ +

EVP_PKEY_get0_asn1() finds the EVP_PKEY_ASN1_METHOD associated with the key pkey.

+ +

RETURN VALUES

+ +

EVP_PKEY_asn1_new() returns NULL on error, or a pointer to an EVP_PKEY_ASN1_METHOD object otherwise.

+ +

EVP_PKEY_asn1_add0() and EVP_PKEY_asn1_add_alias() return 0 on error, or 1 on success.

+ +

EVP_PKEY_get0_asn1() returns NULL on error, or a pointer to a constant EVP_PKEY_ASN1_METHOD object otherwise.

+ +

COPYRIGHT

+ +

Copyright 2017-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_CTX_ctrl.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_CTX_ctrl.html new file mode 100644 index 00000000..5c0108cd --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_CTX_ctrl.html @@ -0,0 +1,278 @@ + + + + +EVP_PKEY_CTX_ctrl + + + + + + + + + + +

NAME

+ +

EVP_PKEY_CTX_ctrl, EVP_PKEY_CTX_ctrl_str, EVP_PKEY_CTX_ctrl_uint64, EVP_PKEY_CTX_md, EVP_PKEY_CTX_set_signature_md, EVP_PKEY_CTX_get_signature_md, EVP_PKEY_CTX_set_mac_key, EVP_PKEY_CTX_set_rsa_padding, EVP_PKEY_CTX_get_rsa_padding, EVP_PKEY_CTX_set_rsa_pss_saltlen, EVP_PKEY_CTX_get_rsa_pss_saltlen, EVP_PKEY_CTX_set_rsa_keygen_bits, EVP_PKEY_CTX_set_rsa_keygen_pubexp, EVP_PKEY_CTX_set_rsa_keygen_primes, EVP_PKEY_CTX_set_rsa_mgf1_md, EVP_PKEY_CTX_get_rsa_mgf1_md, EVP_PKEY_CTX_set_rsa_oaep_md, EVP_PKEY_CTX_get_rsa_oaep_md, EVP_PKEY_CTX_set0_rsa_oaep_label, EVP_PKEY_CTX_get0_rsa_oaep_label, EVP_PKEY_CTX_set_dsa_paramgen_bits, EVP_PKEY_CTX_set_dsa_paramgen_q_bits, EVP_PKEY_CTX_set_dsa_paramgen_md, EVP_PKEY_CTX_set_dh_paramgen_prime_len, EVP_PKEY_CTX_set_dh_paramgen_subprime_len, EVP_PKEY_CTX_set_dh_paramgen_generator, EVP_PKEY_CTX_set_dh_paramgen_type, EVP_PKEY_CTX_set_dh_rfc5114, EVP_PKEY_CTX_set_dhx_rfc5114, EVP_PKEY_CTX_set_dh_pad, EVP_PKEY_CTX_set_dh_nid, EVP_PKEY_CTX_set_dh_kdf_type, EVP_PKEY_CTX_get_dh_kdf_type, EVP_PKEY_CTX_set0_dh_kdf_oid, EVP_PKEY_CTX_get0_dh_kdf_oid, EVP_PKEY_CTX_set_dh_kdf_md, EVP_PKEY_CTX_get_dh_kdf_md, EVP_PKEY_CTX_set_dh_kdf_outlen, EVP_PKEY_CTX_get_dh_kdf_outlen, EVP_PKEY_CTX_set0_dh_kdf_ukm, EVP_PKEY_CTX_get0_dh_kdf_ukm, EVP_PKEY_CTX_set_ec_paramgen_curve_nid, EVP_PKEY_CTX_set_ec_param_enc, EVP_PKEY_CTX_set_ecdh_cofactor_mode, EVP_PKEY_CTX_get_ecdh_cofactor_mode, EVP_PKEY_CTX_set_ecdh_kdf_type, EVP_PKEY_CTX_get_ecdh_kdf_type, EVP_PKEY_CTX_set_ecdh_kdf_md, EVP_PKEY_CTX_get_ecdh_kdf_md, EVP_PKEY_CTX_set_ecdh_kdf_outlen, EVP_PKEY_CTX_get_ecdh_kdf_outlen, EVP_PKEY_CTX_set0_ecdh_kdf_ukm, EVP_PKEY_CTX_get0_ecdh_kdf_ukm, EVP_PKEY_CTX_set1_id, EVP_PKEY_CTX_get1_id, EVP_PKEY_CTX_get1_id_len - algorithm specific control operations

+ +

SYNOPSIS

+ +
#include <openssl/evp.h>
+
+int EVP_PKEY_CTX_ctrl(EVP_PKEY_CTX *ctx, int keytype, int optype,
+                      int cmd, int p1, void *p2);
+int EVP_PKEY_CTX_ctrl_uint64(EVP_PKEY_CTX *ctx, int keytype, int optype,
+                             int cmd, uint64_t value);
+int EVP_PKEY_CTX_ctrl_str(EVP_PKEY_CTX *ctx, const char *type,
+                          const char *value);
+
+int EVP_PKEY_CTX_md(EVP_PKEY_CTX *ctx, int optype, int cmd, const char *md);
+
+int EVP_PKEY_CTX_set_signature_md(EVP_PKEY_CTX *ctx, const EVP_MD *md);
+int EVP_PKEY_CTX_get_signature_md(EVP_PKEY_CTX *ctx, const EVP_MD **pmd);
+
+int EVP_PKEY_CTX_set_mac_key(EVP_PKEY_CTX *ctx, unsigned char *key, int len);
+
+#include <openssl/rsa.h>
+
+int EVP_PKEY_CTX_set_rsa_padding(EVP_PKEY_CTX *ctx, int pad);
+int EVP_PKEY_CTX_get_rsa_padding(EVP_PKEY_CTX *ctx, int *pad);
+int EVP_PKEY_CTX_set_rsa_pss_saltlen(EVP_PKEY_CTX *ctx, int len);
+int EVP_PKEY_CTX_get_rsa_pss_saltlen(EVP_PKEY_CTX *ctx, int *len);
+int EVP_PKEY_CTX_set_rsa_keygen_bits(EVP_PKEY_CTX *ctx, int mbits);
+int EVP_PKEY_CTX_set_rsa_keygen_pubexp(EVP_PKEY_CTX *ctx, BIGNUM *pubexp);
+int EVP_PKEY_CTX_set_rsa_keygen_primes(EVP_PKEY_CTX *ctx, int primes);
+int EVP_PKEY_CTX_set_rsa_mgf1_md(EVP_PKEY_CTX *ctx, const EVP_MD *md);
+int EVP_PKEY_CTX_get_rsa_mgf1_md(EVP_PKEY_CTX *ctx, const EVP_MD **md);
+int EVP_PKEY_CTX_set_rsa_oaep_md(EVP_PKEY_CTX *ctx, const EVP_MD *md);
+int EVP_PKEY_CTX_get_rsa_oaep_md(EVP_PKEY_CTX *ctx, const EVP_MD **md);
+int EVP_PKEY_CTX_set0_rsa_oaep_label(EVP_PKEY_CTX *ctx, unsigned char *label, int len);
+int EVP_PKEY_CTX_get0_rsa_oaep_label(EVP_PKEY_CTX *ctx, unsigned char **label);
+
+#include <openssl/dsa.h>
+
+int EVP_PKEY_CTX_set_dsa_paramgen_bits(EVP_PKEY_CTX *ctx, int nbits);
+int EVP_PKEY_CTX_set_dsa_paramgen_q_bits(EVP_PKEY_CTX *ctx, int qbits);
+int EVP_PKEY_CTX_set_dsa_paramgen_md(EVP_PKEY_CTX *ctx, const EVP_MD *md);
+
+#include <openssl/dh.h>
+
+int EVP_PKEY_CTX_set_dh_paramgen_prime_len(EVP_PKEY_CTX *ctx, int len);
+int EVP_PKEY_CTX_set_dh_paramgen_subprime_len(EVP_PKEY_CTX *ctx, int len);
+int EVP_PKEY_CTX_set_dh_paramgen_generator(EVP_PKEY_CTX *ctx, int gen);
+int EVP_PKEY_CTX_set_dh_paramgen_type(EVP_PKEY_CTX *ctx, int type);
+int EVP_PKEY_CTX_set_dh_pad(EVP_PKEY_CTX *ctx, int pad);
+int EVP_PKEY_CTX_set_dh_nid(EVP_PKEY_CTX *ctx, int nid);
+int EVP_PKEY_CTX_set_dh_rfc5114(EVP_PKEY_CTX *ctx, int rfc5114);
+int EVP_PKEY_CTX_set_dhx_rfc5114(EVP_PKEY_CTX *ctx, int rfc5114);
+int EVP_PKEY_CTX_set_dh_kdf_type(EVP_PKEY_CTX *ctx, int kdf);
+int EVP_PKEY_CTX_get_dh_kdf_type(EVP_PKEY_CTX *ctx);
+int EVP_PKEY_CTX_set0_dh_kdf_oid(EVP_PKEY_CTX *ctx, ASN1_OBJECT *oid);
+int EVP_PKEY_CTX_get0_dh_kdf_oid(EVP_PKEY_CTX *ctx, ASN1_OBJECT **oid);
+int EVP_PKEY_CTX_set_dh_kdf_md(EVP_PKEY_CTX *ctx, const EVP_MD *md);
+int EVP_PKEY_CTX_get_dh_kdf_md(EVP_PKEY_CTX *ctx, const EVP_MD **md);
+int EVP_PKEY_CTX_set_dh_kdf_outlen(EVP_PKEY_CTX *ctx, int len);
+int EVP_PKEY_CTX_get_dh_kdf_outlen(EVP_PKEY_CTX *ctx, int *len);
+int EVP_PKEY_CTX_set0_dh_kdf_ukm(EVP_PKEY_CTX *ctx, unsigned char *ukm, int len);
+int EVP_PKEY_CTX_get0_dh_kdf_ukm(EVP_PKEY_CTX *ctx, unsigned char **ukm);
+
+#include <openssl/ec.h>
+
+int EVP_PKEY_CTX_set_ec_paramgen_curve_nid(EVP_PKEY_CTX *ctx, int nid);
+int EVP_PKEY_CTX_set_ec_param_enc(EVP_PKEY_CTX *ctx, int param_enc);
+int EVP_PKEY_CTX_set_ecdh_cofactor_mode(EVP_PKEY_CTX *ctx, int cofactor_mode);
+int EVP_PKEY_CTX_get_ecdh_cofactor_mode(EVP_PKEY_CTX *ctx);
+int EVP_PKEY_CTX_set_ecdh_kdf_type(EVP_PKEY_CTX *ctx, int kdf);
+int EVP_PKEY_CTX_get_ecdh_kdf_type(EVP_PKEY_CTX *ctx);
+int EVP_PKEY_CTX_set_ecdh_kdf_md(EVP_PKEY_CTX *ctx, const EVP_MD *md);
+int EVP_PKEY_CTX_get_ecdh_kdf_md(EVP_PKEY_CTX *ctx, const EVP_MD **md);
+int EVP_PKEY_CTX_set_ecdh_kdf_outlen(EVP_PKEY_CTX *ctx, int len);
+int EVP_PKEY_CTX_get_ecdh_kdf_outlen(EVP_PKEY_CTX *ctx, int *len);
+int EVP_PKEY_CTX_set0_ecdh_kdf_ukm(EVP_PKEY_CTX *ctx, unsigned char *ukm, int len);
+int EVP_PKEY_CTX_get0_ecdh_kdf_ukm(EVP_PKEY_CTX *ctx, unsigned char **ukm);
+
+int EVP_PKEY_CTX_set1_id(EVP_PKEY_CTX *ctx, void *id, size_t id_len);
+int EVP_PKEY_CTX_get1_id(EVP_PKEY_CTX *ctx, void *id);
+int EVP_PKEY_CTX_get1_id_len(EVP_PKEY_CTX *ctx, size_t *id_len);
+ +

DESCRIPTION

+ +

The function EVP_PKEY_CTX_ctrl() sends a control operation to the context ctx. The key type used must match keytype if it is not -1. The parameter optype is a mask indicating which operations the control can be applied to. The control command is indicated in cmd and any additional arguments in p1 and p2.

+ +

For cmd = EVP_PKEY_CTRL_SET_MAC_KEY, p1 is the length of the MAC key, and p2 is MAC key. This is used by Poly1305, SipHash, HMAC and CMAC.

+ +

Applications will not normally call EVP_PKEY_CTX_ctrl() directly but will instead call one of the algorithm specific macros below.

+ +

The function EVP_PKEY_CTX_ctrl_uint64() is a wrapper that directly passes a uint64 value as p2 to EVP_PKEY_CTX_ctrl().

+ +

The function EVP_PKEY_CTX_ctrl_str() allows an application to send an algorithm specific control operation to a context ctx in string form. This is intended to be used for options specified on the command line or in text files. The commands supported are documented in the openssl utility command line pages for the option -pkeyopt which is supported by the pkeyutl, genpkey and req commands.

+ +

The function EVP_PKEY_CTX_md() sends a message digest control operation to the context ctx. The message digest is specified by its name md.

+ +

All the remaining "functions" are implemented as macros.

+ +

The EVP_PKEY_CTX_set_signature_md() macro sets the message digest type used in a signature. It can be used in the RSA, DSA and ECDSA algorithms.

+ +

The EVP_PKEY_CTX_get_signature_md() macro gets the message digest type used in a signature. It can be used in the RSA, DSA and ECDSA algorithms.

+ +

Key generation typically involves setting up parameters to be used and generating the private and public key data. Some algorithm implementations allow private key data to be set explicitly using the EVP_PKEY_CTX_set_mac_key() macro. In this case key generation is simply the process of setting up the parameters for the key and then setting the raw key data to the value explicitly provided by that macro. Normally applications would call EVP_PKEY_new_raw_private_key(3) or similar functions instead of this macro.

+ +

The EVP_PKEY_CTX_set_mac_key() macro can be used with any of the algorithms supported by the EVP_PKEY_new_raw_private_key(3) function.

+ +

RSA parameters

+ +

The EVP_PKEY_CTX_set_rsa_padding() macro sets the RSA padding mode for ctx. The pad parameter can take the value RSA_PKCS1_PADDING for PKCS#1 padding, RSA_SSLV23_PADDING for SSLv23 padding, RSA_NO_PADDING for no padding, RSA_PKCS1_OAEP_PADDING for OAEP padding (encrypt and decrypt only), RSA_X931_PADDING for X9.31 padding (signature operations only) and RSA_PKCS1_PSS_PADDING (sign and verify only).

+ +

Two RSA padding modes behave differently if EVP_PKEY_CTX_set_signature_md() is used. If this macro is called for PKCS#1 padding the plaintext buffer is an actual digest value and is encapsulated in a DigestInfo structure according to PKCS#1 when signing and this structure is expected (and stripped off) when verifying. If this control is not used with RSA and PKCS#1 padding then the supplied data is used directly and not encapsulated. In the case of X9.31 padding for RSA the algorithm identifier byte is added or checked and removed if this control is called. If it is not called then the first byte of the plaintext buffer is expected to be the algorithm identifier byte.

+ +

The EVP_PKEY_CTX_get_rsa_padding() macro gets the RSA padding mode for ctx.

+ +

The EVP_PKEY_CTX_set_rsa_pss_saltlen() macro sets the RSA PSS salt length to len. As its name implies it is only supported for PSS padding. Three special values are supported: RSA_PSS_SALTLEN_DIGEST sets the salt length to the digest length, RSA_PSS_SALTLEN_MAX sets the salt length to the maximum permissible value. When verifying RSA_PSS_SALTLEN_AUTO causes the salt length to be automatically determined based on the PSS block structure. If this macro is not called maximum salt length is used when signing and auto detection when verifying is used by default.

+ +

The EVP_PKEY_CTX_get_rsa_pss_saltlen() macro gets the RSA PSS salt length for ctx. The padding mode must have been set to RSA_PKCS1_PSS_PADDING.

+ +

The EVP_PKEY_CTX_set_rsa_keygen_bits() macro sets the RSA key length for RSA key generation to bits. If not specified 1024 bits is used.

+ +

The EVP_PKEY_CTX_set_rsa_keygen_pubexp() macro sets the public exponent value for RSA key generation to pubexp. Currently it should be an odd integer. The pubexp pointer is used internally by this function so it should not be modified or freed after the call. If not specified 65537 is used.

+ +

The EVP_PKEY_CTX_set_rsa_keygen_primes() macro sets the number of primes for RSA key generation to primes. If not specified 2 is used.

+ +

The EVP_PKEY_CTX_set_rsa_mgf1_md() macro sets the MGF1 digest for RSA padding schemes to md. If not explicitly set the signing digest is used. The padding mode must have been set to RSA_PKCS1_OAEP_PADDING or RSA_PKCS1_PSS_PADDING.

+ +

The EVP_PKEY_CTX_get_rsa_mgf1_md() macro gets the MGF1 digest for ctx. If not explicitly set the signing digest is used. The padding mode must have been set to RSA_PKCS1_OAEP_PADDING or RSA_PKCS1_PSS_PADDING.

+ +

The EVP_PKEY_CTX_set_rsa_oaep_md() macro sets the message digest type used in RSA OAEP to md. The padding mode must have been set to RSA_PKCS1_OAEP_PADDING.

+ +

The EVP_PKEY_CTX_get_rsa_oaep_md() macro gets the message digest type used in RSA OAEP to md. The padding mode must have been set to RSA_PKCS1_OAEP_PADDING.

+ +

The EVP_PKEY_CTX_set0_rsa_oaep_label() macro sets the RSA OAEP label to label and its length to len. If label is NULL or len is 0, the label is cleared. The library takes ownership of the label so the caller should not free the original memory pointed to by label. The padding mode must have been set to RSA_PKCS1_OAEP_PADDING.

+ +

The EVP_PKEY_CTX_get0_rsa_oaep_label() macro gets the RSA OAEP label to label. The return value is the label length. The padding mode must have been set to RSA_PKCS1_OAEP_PADDING. The resulting pointer is owned by the library and should not be freed by the caller.

+ +

DSA parameters

+ +

The EVP_PKEY_CTX_set_dsa_paramgen_bits() macro sets the number of bits used for DSA parameter generation to nbits. If not specified, 1024 is used.

+ +

The EVP_PKEY_CTX_set_dsa_paramgen_q_bits() macro sets the number of bits in the subprime parameter q for DSA parameter generation to qbits. If not specified, 160 is used. If a digest function is specified below, this parameter is ignored and instead, the number of bits in q matches the size of the digest.

+ +

The EVP_PKEY_CTX_set_dsa_paramgen_md() macro sets the digest function used for DSA parameter generation to md. If not specified, one of SHA-1, SHA-224, or SHA-256 is selected to match the bit length of q above.

+ +

DH parameters

+ +

The EVP_PKEY_CTX_set_dh_paramgen_prime_len() macro sets the length of the DH prime parameter p for DH parameter generation. If this macro is not called then 1024 is used. Only accepts lengths greater than or equal to 256.

+ +

The EVP_PKEY_CTX_set_dh_paramgen_subprime_len() macro sets the length of the DH optional subprime parameter q for DH parameter generation. The default is 256 if the prime is at least 2048 bits long or 160 otherwise. The DH paramgen type must have been set to x9.42.

+ +

The EVP_PKEY_CTX_set_dh_paramgen_generator() macro sets DH generator to gen for DH parameter generation. If not specified 2 is used.

+ +

The EVP_PKEY_CTX_set_dh_paramgen_type() macro sets the key type for DH 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 pad is 1 the shared secret is padded with zeroes up to the size of the DH prime p. If pad is zero (the default) then no padding is performed.

+ +

EVP_PKEY_CTX_set_dh_nid() sets the DH parameters to values corresponding to nid as defined in RFC7919. The nid parameter must be NID_ffdhe2048, NID_ffdhe3072, NID_ffdhe4096, NID_ffdhe6144, NID_ffdhe8192 or NID_undef to clear the stored value. This macro can be called during parameter or key generation. The nid parameter and the rfc5114 parameter are mutually exclusive.

+ +

The EVP_PKEY_CTX_set_dh_rfc5114() and EVP_PKEY_CTX_set_dhx_rfc5114() macros are synonymous. They set the DH parameters to the values defined in RFC5114. The rfc5114 parameter must be 1, 2 or 3 corresponding to RFC5114 sections 2.1, 2.2 and 2.3. or 0 to clear the stored value. This macro can be called during parameter generation. The ctx must have a key type of EVP_PKEY_DHX. The rfc5114 parameter and the nid parameter are mutually exclusive.

+ +

DH key derivation function parameters

+ +

Note that all of the following functions require that the ctx parameter has a private key type of EVP_PKEY_DHX. When using key derivation, the output of EVP_PKEY_derive() is the output of the KDF instead of the DH shared secret. The KDF output is typically used as a Key Encryption Key (KEK) that in turn encrypts a Content Encryption Key (CEK).

+ +

The EVP_PKEY_CTX_set_dh_kdf_type() macro sets the key derivation function type to kdf for DH key derivation. Possible values are EVP_PKEY_DH_KDF_NONE and EVP_PKEY_DH_KDF_X9_42 which uses the key derivation specified in RFC2631 (based on the keying algorithm described in X9.42). When using key derivation, the kdf_oid, kdf_md and kdf_outlen parameters must also be specified.

+ +

The EVP_PKEY_CTX_get_dh_kdf_type() macro gets the key derivation function type for ctx used for DH key derivation. Possible values are EVP_PKEY_DH_KDF_NONE and EVP_PKEY_DH_KDF_X9_42.

+ +

The EVP_PKEY_CTX_set0_dh_kdf_oid() macro sets the key derivation function object identifier to oid for DH key derivation. This OID should identify the algorithm to be used with the Content Encryption Key. The library takes ownership of the object identifier so the caller should not free the original memory pointed to by oid.

+ +

The EVP_PKEY_CTX_get0_dh_kdf_oid() macro gets the key derivation function oid for ctx used for DH key derivation. The resulting pointer is owned by the library and should not be freed by the caller.

+ +

The EVP_PKEY_CTX_set_dh_kdf_md() macro sets the key derivation function message digest to md for DH key derivation. Note that RFC2631 specifies that this digest should be SHA1 but OpenSSL tolerates other digests.

+ +

The EVP_PKEY_CTX_get_dh_kdf_md() macro gets the key derivation function message digest for ctx used for DH key derivation.

+ +

The EVP_PKEY_CTX_set_dh_kdf_outlen() macro sets the key derivation function output length to len for DH key derivation.

+ +

The EVP_PKEY_CTX_get_dh_kdf_outlen() macro gets the key derivation function output length for ctx used for DH key derivation.

+ +

The EVP_PKEY_CTX_set0_dh_kdf_ukm() macro sets the user key material to ukm and its length to len for DH key derivation. This parameter is optional and corresponds to the partyAInfo field in RFC2631 terms. The specification requires that it is 512 bits long but this is not enforced by OpenSSL. The library takes ownership of the user key material so the caller should not free the original memory pointed to by ukm.

+ +

The EVP_PKEY_CTX_get0_dh_kdf_ukm() macro gets the user key material for ctx. The return value is the user key material length. The resulting pointer is owned by the library and should not be freed by the caller.

+ +

EC parameters

+ +

The EVP_PKEY_CTX_set_ec_paramgen_curve_nid() sets the EC curve for EC parameter generation to nid. For EC parameter generation this macro must be called or an error occurs because there is no default curve. This function can also be called to set the curve explicitly when generating an EC key.

+ +

The EVP_PKEY_CTX_set_ec_param_enc() macro sets the EC parameter encoding to param_enc when generating EC parameters or an EC key. The encoding can be OPENSSL_EC_EXPLICIT_CURVE for explicit parameters (the default in versions of OpenSSL before 1.1.0) or OPENSSL_EC_NAMED_CURVE to use named curve form. For maximum compatibility the named curve form should be used. Note: the OPENSSL_EC_NAMED_CURVE value was added in OpenSSL 1.1.0; previous versions should use 0 instead.

+ +

ECDH parameters

+ +

The EVP_PKEY_CTX_set_ecdh_cofactor_mode() macro sets the cofactor mode to cofactor_mode for ECDH key derivation. Possible values are 1 to enable cofactor key derivation, 0 to disable it and -1 to clear the stored cofactor mode and fallback to the private key cofactor mode.

+ +

The EVP_PKEY_CTX_get_ecdh_cofactor_mode() macro returns the cofactor mode for ctx used for ECDH key derivation. Possible values are 1 when cofactor key derivation is enabled and 0 otherwise.

+ +

ECDH key derivation function parameters

+ +

The EVP_PKEY_CTX_set_ecdh_kdf_type() macro sets the key derivation function type to kdf for ECDH key derivation. Possible values are EVP_PKEY_ECDH_KDF_NONE and EVP_PKEY_ECDH_KDF_X9_63 which uses the key derivation specified in X9.63. When using key derivation, the kdf_md and kdf_outlen parameters must also be specified.

+ +

The EVP_PKEY_CTX_get_ecdh_kdf_type() macro returns the key derivation function type for ctx used for ECDH key derivation. Possible values are EVP_PKEY_ECDH_KDF_NONE and EVP_PKEY_ECDH_KDF_X9_63.

+ +

The EVP_PKEY_CTX_set_ecdh_kdf_md() macro sets the key derivation function message digest to md for ECDH key derivation. Note that X9.63 specifies that this digest should be SHA1 but OpenSSL tolerates other digests.

+ +

The EVP_PKEY_CTX_get_ecdh_kdf_md() macro gets the key derivation function message digest for ctx used for ECDH key derivation.

+ +

The EVP_PKEY_CTX_set_ecdh_kdf_outlen() macro sets the key derivation function output length to len for ECDH key derivation.

+ +

The EVP_PKEY_CTX_get_ecdh_kdf_outlen() macro gets the key derivation function output length for ctx used for ECDH key derivation.

+ +

The EVP_PKEY_CTX_set0_ecdh_kdf_ukm() macro sets the user key material to ukm for ECDH key derivation. This parameter is optional and corresponds to the shared info in X9.63 terms. The library takes ownership of the user key material so the caller should not free the original memory pointed to by ukm.

+ +

The EVP_PKEY_CTX_get0_ecdh_kdf_ukm() macro gets the user key material for ctx. The return value is the user key material length. The resulting pointer is owned by the library and should not be freed by the caller.

+ +

Other parameters

+ +

The EVP_PKEY_CTX_set1_id(), EVP_PKEY_CTX_get1_id() and EVP_PKEY_CTX_get1_id_len() macros are used to manipulate the special identifier field for specific signature algorithms such as SM2. The EVP_PKEY_CTX_set1_id() sets an ID pointed by id with the length id_len to the library. The library takes a copy of the id so that the caller can safely free the original memory pointed to by id. The EVP_PKEY_CTX_get1_id_len() macro returns the length of the ID set via a previous call to EVP_PKEY_CTX_set1_id(). The length is usually used to allocate adequate memory for further calls to EVP_PKEY_CTX_get1_id(). The EVP_PKEY_CTX_get1_id() macro returns the previously set ID value to caller in id. The caller should allocate adequate memory space for the id before calling EVP_PKEY_CTX_get1_id().

+ +

RETURN VALUES

+ +

EVP_PKEY_CTX_ctrl() and its macros return a positive value for success and 0 or a negative value for failure. In particular a return value of -2 indicates the operation is not supported by the public key algorithm.

+ +

SEE ALSO

+ +

EVP_PKEY_CTX_new(3), EVP_PKEY_encrypt(3), EVP_PKEY_decrypt(3), EVP_PKEY_sign(3), EVP_PKEY_verify(3), EVP_PKEY_verify_recover(3), EVP_PKEY_derive(3), EVP_PKEY_keygen(3)

+ +

HISTORY

+ +

The EVP_PKEY_CTX_set1_id(), EVP_PKEY_CTX_get1_id() and EVP_PKEY_CTX_get1_id_len() macros were added in 1.1.1, other functions were added in OpenSSL 1.0.0.

+ +

COPYRIGHT

+ +

Copyright 2006-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_CTX_new.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_CTX_new.html new file mode 100644 index 00000000..1e985841 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_CTX_new.html @@ -0,0 +1,77 @@ + + + + +EVP_PKEY_CTX_new + + + + + + + + + + +

NAME

+ +

EVP_PKEY_CTX_new, EVP_PKEY_CTX_new_id, EVP_PKEY_CTX_dup, EVP_PKEY_CTX_free - public key algorithm context functions

+ +

SYNOPSIS

+ +
#include <openssl/evp.h>
+
+EVP_PKEY_CTX *EVP_PKEY_CTX_new(EVP_PKEY *pkey, ENGINE *e);
+EVP_PKEY_CTX *EVP_PKEY_CTX_new_id(int id, ENGINE *e);
+EVP_PKEY_CTX *EVP_PKEY_CTX_dup(EVP_PKEY_CTX *ctx);
+void EVP_PKEY_CTX_free(EVP_PKEY_CTX *ctx);
+ +

DESCRIPTION

+ +

The EVP_PKEY_CTX_new() function allocates public key algorithm context using the algorithm specified in pkey and ENGINE e.

+ +

The EVP_PKEY_CTX_new_id() function allocates public key algorithm context using the algorithm specified by id and ENGINE e. It is normally used when no EVP_PKEY structure is associated with the operations, for example during parameter generation of key generation for some algorithms.

+ +

EVP_PKEY_CTX_dup() duplicates the context ctx.

+ +

EVP_PKEY_CTX_free() frees up the context ctx. If ctx is NULL, nothing is done.

+ +

NOTES

+ +

The EVP_PKEY_CTX structure is an opaque public key algorithm context used by the OpenSSL high level public key API. Contexts MUST NOT be shared between threads: that is it is not permissible to use the same context simultaneously in two threads.

+ +

RETURN VALUES

+ +

EVP_PKEY_CTX_new(), EVP_PKEY_CTX_new_id(), EVP_PKEY_CTX_dup() returns either the newly allocated EVP_PKEY_CTX structure of NULL if an error occurred.

+ +

EVP_PKEY_CTX_free() does not return a value.

+ +

SEE ALSO

+ +

EVP_PKEY_new(3)

+ +

HISTORY

+ +

These functions were added in OpenSSL 1.0.0.

+ +

COPYRIGHT

+ +

Copyright 2006-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_CTX_set1_pbe_pass.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_CTX_set1_pbe_pass.html new file mode 100644 index 00000000..a44d4aef --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_CTX_set1_pbe_pass.html @@ -0,0 +1,69 @@ + + + + +EVP_PKEY_CTX_set1_pbe_pass + + + + + + + + + + +

NAME

+ +

EVP_PKEY_CTX_set1_pbe_pass - generic KDF support functions

+ +

SYNOPSIS

+ +
#include <openssl/kdf.h>
+
+int EVP_PKEY_CTX_set1_pbe_pass(EVP_PKEY_CTX *pctx, unsigned char *pass,
+                               int passlen);
+ +

DESCRIPTION

+ +

These functions are generic support functions for all KDF algorithms.

+ +

EVP_PKEY_CTX_set1_pbe_pass() sets the password to the passlen first bytes from pass.

+ +

STRING CTRLS

+ +

There is also support for string based control operations via EVP_PKEY_CTX_ctrl_str(3). The password can be directly specified using the type parameter "pass" or given in hex encoding using the "hexpass" parameter.

+ +

NOTES

+ +

All these functions are implemented as macros.

+ +

RETURN VALUES

+ +

All these functions return 1 for success and 0 or a negative value for failure. In particular a return value of -2 indicates the operation is not supported by the public key algorithm.

+ +

SEE ALSO

+ +

EVP_PKEY_CTX_new(3), EVP_PKEY_CTX_ctrl_str(3), EVP_PKEY_derive(3)

+ +

COPYRIGHT

+ +

Copyright 2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_CTX_set_hkdf_md.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_CTX_set_hkdf_md.html new file mode 100644 index 00000000..98216a1c --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_CTX_set_hkdf_md.html @@ -0,0 +1,153 @@ + + + + +EVP_PKEY_CTX_set_hkdf_md + + + + + + + + + + +

NAME

+ +

EVP_PKEY_CTX_set_hkdf_md, EVP_PKEY_CTX_set1_hkdf_salt, EVP_PKEY_CTX_set1_hkdf_key, EVP_PKEY_CTX_add1_hkdf_info, EVP_PKEY_CTX_hkdf_mode - HMAC-based Extract-and-Expand key derivation algorithm

+ +

SYNOPSIS

+ +
#include <openssl/kdf.h>
+
+int EVP_PKEY_CTX_hkdf_mode(EVP_PKEY_CTX *pctx, int mode);
+
+int EVP_PKEY_CTX_set_hkdf_md(EVP_PKEY_CTX *pctx, const EVP_MD *md);
+
+int EVP_PKEY_CTX_set1_hkdf_salt(EVP_PKEY_CTX *pctx, unsigned char *salt,
+                                int saltlen);
+
+int EVP_PKEY_CTX_set1_hkdf_key(EVP_PKEY_CTX *pctx, unsigned char *key,
+                               int keylen);
+
+int EVP_PKEY_CTX_add1_hkdf_info(EVP_PKEY_CTX *pctx, unsigned char *info,
+                                int infolen);
+ +

DESCRIPTION

+ +

The EVP_PKEY_HKDF algorithm implements the HKDF key derivation function. HKDF follows the "extract-then-expand" paradigm, where the KDF logically consists of two modules. The first stage takes the input keying material and "extracts" from it a fixed-length pseudorandom key K. The second stage "expands" the key K into several additional pseudorandom keys (the output of the KDF).

+ +

EVP_PKEY_CTX_hkdf_mode() sets the mode for the HKDF operation. There are three modes that are currently defined:

+ +
+ +
EVP_PKEY_HKDEF_MODE_EXTRACT_AND_EXPAND
+
+ +

This is the default mode. Calling EVP_PKEY_derive(3) on an EVP_PKEY_CTX set up for HKDF will perform an extract followed by an expand operation in one go. The derived key returned will be the result after the expand operation. The intermediate fixed-length pseudorandom key K is not returned.

+ +

In this mode the digest, key, salt and info values must be set before a key is derived or an error occurs.

+ +
+
EVP_PKEY_HKDEF_MODE_EXTRACT_ONLY
+
+ +

In this mode calling EVP_PKEY_derive(3) will just perform the extract operation. The value returned will be the intermediate fixed-length pseudorandom key K.

+ +

The digest, key and salt values must be set before a key is derived or an error occurs.

+ +
+
EVP_PKEY_HKDEF_MODE_EXPAND_ONLY
+
+ +

In this mode calling EVP_PKEY_derive(3) will just perform the expand operation. The input key should be set to the intermediate fixed-length pseudorandom key K returned from a previous extract operation.

+ +

The digest, key and info values must be set before a key is derived or an error occurs.

+ +
+
+ +

EVP_PKEY_CTX_set_hkdf_md() sets the message digest associated with the HKDF.

+ +

EVP_PKEY_CTX_set1_hkdf_salt() sets the salt to saltlen bytes of the buffer salt. Any existing value is replaced.

+ +

EVP_PKEY_CTX_set1_hkdf_key() sets the key to keylen bytes of the buffer key. Any existing value is replaced.

+ +

EVP_PKEY_CTX_add1_hkdf_info() sets the info value to infolen bytes of the buffer info. If a value is already set, it is appended to the existing value.

+ +

STRING CTRLS

+ +

HKDF also supports string based control operations via EVP_PKEY_CTX_ctrl_str(3). The type parameter "md" uses the supplied value as the name of the digest algorithm to use. The type parameter "mode" uses the values "EXTRACT_AND_EXPAND", "EXTRACT_ONLY" and "EXPAND_ONLY" to determine the mode to use. The type parameters "salt", "key" and "info" use the supplied value parameter as a seed, key or info value. The names "hexsalt", "hexkey" and "hexinfo" are similar except they take a hex string which is converted to binary.

+ +

NOTES

+ +

All these functions are implemented as macros.

+ +

A context for HKDF can be obtained by calling:

+ +
EVP_PKEY_CTX *pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_HKDF, NULL);
+ +

The total length of the info buffer cannot exceed 1024 bytes in length: this should be more than enough for any normal use of HKDF.

+ +

The output length of an HKDF expand operation is specified via the length parameter to the EVP_PKEY_derive(3) function. Since the HKDF output length is variable, passing a NULL buffer as a means to obtain the requisite length is not meaningful with HKDF in any mode that performs an expand operation. Instead, the caller must allocate a buffer of the desired length, and pass that buffer to EVP_PKEY_derive(3) along with (a pointer initialized to) the desired length. Passing a NULL buffer to obtain the length is allowed when using EVP_PKEY_HKDEF_MODE_EXTRACT_ONLY.

+ +

Optimised versions of HKDF can be implemented in an ENGINE.

+ +

RETURN VALUES

+ +

All these functions return 1 for success and 0 or a negative value for failure. In particular a return value of -2 indicates the operation is not supported by the public key algorithm.

+ +

EXAMPLES

+ +

This example derives 10 bytes using SHA-256 with the secret key "secret", salt value "salt" and info value "label":

+ +
EVP_PKEY_CTX *pctx;
+unsigned char out[10];
+size_t outlen = sizeof(out);
+pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_HKDF, NULL);
+
+if (EVP_PKEY_derive_init(pctx) <= 0)
+    /* Error */
+if (EVP_PKEY_CTX_set_hkdf_md(pctx, EVP_sha256()) <= 0)
+    /* Error */
+if (EVP_PKEY_CTX_set1_hkdf_salt(pctx, "salt", 4) <= 0)
+    /* Error */
+if (EVP_PKEY_CTX_set1_hkdf_key(pctx, "secret", 6) <= 0)
+    /* Error */
+if (EVP_PKEY_CTX_add1_hkdf_info(pctx, "label", 5) <= 0)
+    /* Error */
+if (EVP_PKEY_derive(pctx, out, &outlen) <= 0)
+    /* Error */
+ +

CONFORMING TO

+ +

RFC 5869

+ +

SEE ALSO

+ +

EVP_PKEY_CTX_new(3), EVP_PKEY_CTX_ctrl_str(3), EVP_PKEY_derive(3)

+ +

COPYRIGHT

+ +

Copyright 2016-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_CTX_set_rsa_pss_keygen_md.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_CTX_set_rsa_pss_keygen_md.html new file mode 100644 index 00000000..1ad95838 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_CTX_set_rsa_pss_keygen_md.html @@ -0,0 +1,93 @@ + + + + +EVP_PKEY_CTX_set_rsa_pss_keygen_md + + + + + + + + + + +

NAME

+ +

EVP_PKEY_CTX_set_rsa_pss_keygen_md, EVP_PKEY_CTX_set_rsa_pss_keygen_mgf1_md, EVP_PKEY_CTX_set_rsa_pss_keygen_saltlen - EVP_PKEY RSA-PSS algorithm support functions

+ +

SYNOPSIS

+ +
#include <openssl/rsa.h>
+
+int EVP_PKEY_CTX_set_rsa_pss_keygen_md(EVP_PKEY_CTX *pctx,
+                                       const EVP_MD *md);
+int EVP_PKEY_CTX_set_rsa_pss_keygen_mgf1_md(EVP_PKEY_CTX *pctx,
+                                            const EVP_MD *md);
+int EVP_PKEY_CTX_set_rsa_pss_keygen_saltlen(EVP_PKEY_CTX *pctx,
+                                            int saltlen);
+ +

DESCRIPTION

+ +

These are the functions that implement RSA-PSS(7).

+ +

Signing and Verification

+ +

The macro EVP_PKEY_CTX_set_rsa_padding() is supported but an error is returned if an attempt is made to set the padding mode to anything other than PSS. It is otherwise similar to the RSA version.

+ +

The EVP_PKEY_CTX_set_rsa_pss_saltlen() macro is used to set the salt length. If the key has usage restrictions then an error is returned if an attempt is made to set the salt length below the minimum value. It is otherwise similar to the RSA operation except detection of the salt length (using RSA_PSS_SALTLEN_AUTO) is not supported for verification if the key has usage restrictions.

+ +

The EVP_PKEY_CTX_set_signature_md() and EVP_PKEY_CTX_set_rsa_mgf1_md() macros are used to set the digest and MGF1 algorithms respectively. If the key has usage restrictions then an error is returned if an attempt is made to set the digest to anything other than the restricted value. Otherwise these are similar to the RSA versions.

+ +

Key Generation

+ +

As with RSA key generation the EVP_PKEY_CTX_set_rsa_keygen_bits() and EVP_PKEY_CTX_set_rsa_keygen_pubexp() macros are supported for RSA-PSS: they have exactly the same meaning as for the RSA algorithm.

+ +

Optional parameter restrictions can be specified when generating a PSS key. If any restrictions are set (using the macros described below) then all parameters are restricted. For example, setting a minimum salt length also restricts the digest and MGF1 algorithms. If any restrictions are in place then they are reflected in the corresponding parameters of the public key when (for example) a certificate request is signed.

+ +

EVP_PKEY_CTX_set_rsa_pss_keygen_md() restricts the digest algorithm the generated key can use to md.

+ +

EVP_PKEY_CTX_set_rsa_pss_keygen_mgf1_md() restricts the MGF1 algorithm the generated key can use to md.

+ +

EVP_PKEY_CTX_set_rsa_pss_keygen_saltlen() restricts the minimum salt length to saltlen.

+ +

NOTES

+ +

A context for the RSA-PSS algorithm can be obtained by calling:

+ +
EVP_PKEY_CTX *pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_RSA_PSS, NULL);
+ +

RETURN VALUES

+ +

All these functions return 1 for success and 0 or a negative value for failure. In particular a return value of -2 indicates the operation is not supported by the public key algorithm.

+ +

SEE ALSO

+ +

RSA-PSS(7), EVP_PKEY_CTX_new(3), EVP_PKEY_CTX_ctrl_str(3), EVP_PKEY_derive(3)

+ +

COPYRIGHT

+ +

Copyright 2017-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_CTX_set_scrypt_N.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_CTX_set_scrypt_N.html new file mode 100644 index 00000000..006cbd3b --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_CTX_set_scrypt_N.html @@ -0,0 +1,84 @@ + + + + +EVP_PKEY_CTX_set_scrypt_N + + + + + + + + + + +

NAME

+ +

EVP_PKEY_CTX_set1_scrypt_salt, EVP_PKEY_CTX_set_scrypt_N, EVP_PKEY_CTX_set_scrypt_r, EVP_PKEY_CTX_set_scrypt_p, EVP_PKEY_CTX_set_scrypt_maxmem_bytes - EVP_PKEY scrypt KDF support functions

+ +

SYNOPSIS

+ +
#include <openssl/kdf.h>
+
+int EVP_PKEY_CTX_set1_scrypt_salt(EVP_PKEY_CTX *pctx, unsigned char *salt,
+                                  int saltlen);
+
+int EVP_PKEY_CTX_set_scrypt_N(EVP_PKEY_CTX *pctx, uint64_t N);
+
+int EVP_PKEY_CTX_set_scrypt_r(EVP_PKEY_CTX *pctx, uint64_t r);
+
+int EVP_PKEY_CTX_set_scrypt_p(EVP_PKEY_CTX *pctx, uint64_t p);
+
+int EVP_PKEY_CTX_set_scrypt_maxmem_bytes(EVP_PKEY_CTX *pctx,
+                                         uint64_t maxmem);
+ +

DESCRIPTION

+ +

These functions are used to set up the necessary data to use the scrypt KDF. For more information on scrypt, see scrypt(7).

+ +

EVP_PKEY_CTX_set1_scrypt_salt() sets the saltlen bytes long salt value.

+ +

EVP_PKEY_CTX_set_scrypt_N(), EVP_PKEY_CTX_set_scrypt_r() and EVP_PKEY_CTX_set_scrypt_p() configure the work factors N, r and p.

+ +

EVP_PKEY_CTX_set_scrypt_maxmem_bytes() sets how much RAM key derivation may maximally use, given in bytes. If RAM is exceeded because the load factors are chosen too high, the key derivation will fail.

+ +

STRING CTRLS

+ +

scrypt also supports string based control operations via EVP_PKEY_CTX_ctrl_str(3). Similarly, the salt can either be specified using the type parameter "salt" or in hex encoding by using the "hexsalt" parameter. The work factors N, r and p as well as maxmem_bytes can be set by using the parameters "N", "r", "p" and "maxmem_bytes", respectively.

+ +

NOTES

+ +

The scrypt KDF also uses EVP_PKEY_CTX_set1_pbe_pass() as well as the value from the string controls "pass" and "hexpass". See EVP_PKEY_CTX_set1_pbe_pass(3).

+ +

All the functions described here are implemented as macros.

+ +

RETURN VALUES

+ +

All these functions return 1 for success and 0 or a negative value for failure. In particular a return value of -2 indicates the operation is not supported by the public key algorithm.

+ +

SEE ALSO

+ +

scrypt(7), EVP_PKEY_CTX_new(3), EVP_PKEY_CTX_ctrl_str(3), EVP_PKEY_derive(3)

+ +

COPYRIGHT

+ +

Copyright 2017-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_CTX_set_tls1_prf_md.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_CTX_set_tls1_prf_md.html new file mode 100644 index 00000000..de581770 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_CTX_set_tls1_prf_md.html @@ -0,0 +1,109 @@ + + + + +EVP_PKEY_CTX_set_tls1_prf_md + + + + + + + + + + +

NAME

+ +

EVP_PKEY_CTX_set_tls1_prf_md, EVP_PKEY_CTX_set1_tls1_prf_secret, EVP_PKEY_CTX_add1_tls1_prf_seed - TLS PRF key derivation algorithm

+ +

SYNOPSIS

+ +
#include <openssl/kdf.h>
+
+int EVP_PKEY_CTX_set_tls1_prf_md(EVP_PKEY_CTX *pctx, const EVP_MD *md);
+int EVP_PKEY_CTX_set1_tls1_prf_secret(EVP_PKEY_CTX *pctx,
+                                      unsigned char *sec, int seclen);
+int EVP_PKEY_CTX_add1_tls1_prf_seed(EVP_PKEY_CTX *pctx,
+                                    unsigned char *seed, int seedlen);
+ +

DESCRIPTION

+ +

The EVP_PKEY_TLS1_PRF algorithm implements the PRF key derivation function for TLS. It has no associated private key and only implements key derivation using EVP_PKEY_derive(3).

+ +

EVP_PKEY_set_tls1_prf_md() sets the message digest associated with the TLS PRF. EVP_md5_sha1() is treated as a special case which uses the PRF algorithm using both MD5 and SHA1 as used in TLS 1.0 and 1.1.

+ +

EVP_PKEY_CTX_set_tls1_prf_secret() sets the secret value of the TLS PRF to seclen bytes of the buffer sec. Any existing secret value is replaced and any seed is reset.

+ +

EVP_PKEY_CTX_add1_tls1_prf_seed() sets the seed to seedlen bytes of seed. If a seed is already set it is appended to the existing value.

+ +

STRING CTRLS

+ +

The TLS PRF also supports string based control operations using EVP_PKEY_CTX_ctrl_str(3). The type parameter "md" uses the supplied value as the name of the digest algorithm to use. The type parameters "secret" and "seed" use the supplied value parameter as a secret or seed value. The names "hexsecret" and "hexseed" are similar except they take a hex string which is converted to binary.

+ +

NOTES

+ +

All these functions are implemented as macros.

+ +

A context for the TLS PRF can be obtained by calling:

+ +
EVP_PKEY_CTX *pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_TLS1_PRF, NULL);
+ +

The digest, secret value and seed must be set before a key is derived or an error occurs.

+ +

The total length of all seeds cannot exceed 1024 bytes in length: this should be more than enough for any normal use of the TLS PRF.

+ +

The output length of the PRF is specified by the length parameter in the EVP_PKEY_derive() function. Since the output length is variable, setting the buffer to NULL is not meaningful for the TLS PRF.

+ +

Optimised versions of the TLS PRF can be implemented in an ENGINE.

+ +

RETURN VALUES

+ +

All these functions return 1 for success and 0 or a negative value for failure. In particular a return value of -2 indicates the operation is not supported by the public key algorithm.

+ +

EXAMPLES

+ +

This example derives 10 bytes using SHA-256 with the secret key "secret" and seed value "seed":

+ +
EVP_PKEY_CTX *pctx;
+unsigned char out[10];
+size_t outlen = sizeof(out);
+
+pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_TLS1_PRF, NULL);
+if (EVP_PKEY_derive_init(pctx) <= 0)
+    /* Error */
+if (EVP_PKEY_CTX_set_tls1_prf_md(pctx, EVP_sha256()) <= 0)
+    /* Error */
+if (EVP_PKEY_CTX_set1_tls1_prf_secret(pctx, "secret", 6) <= 0)
+    /* Error */
+if (EVP_PKEY_CTX_add1_tls1_prf_seed(pctx, "seed", 4) <= 0)
+    /* Error */
+if (EVP_PKEY_derive(pctx, out, &outlen) <= 0)
+    /* Error */
+ +

SEE ALSO

+ +

EVP_PKEY_CTX_new(3), EVP_PKEY_CTX_ctrl_str(3), EVP_PKEY_derive(3)

+ +

COPYRIGHT

+ +

Copyright 2016-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_asn1_get_count.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_asn1_get_count.html new file mode 100644 index 00000000..781e9fe2 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_asn1_get_count.html @@ -0,0 +1,78 @@ + + + + +EVP_PKEY_asn1_get_count + + + + + + + + + + +

NAME

+ +

EVP_PKEY_asn1_find, EVP_PKEY_asn1_find_str, EVP_PKEY_asn1_get_count, EVP_PKEY_asn1_get0, EVP_PKEY_asn1_get0_info - enumerate public key ASN.1 methods

+ +

SYNOPSIS

+ +
#include <openssl/evp.h>
+
+int EVP_PKEY_asn1_get_count(void);
+const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_get0(int idx);
+const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_find(ENGINE **pe, int type);
+const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_find_str(ENGINE **pe,
+                                                   const char *str, int len);
+int EVP_PKEY_asn1_get0_info(int *ppkey_id, int *pkey_base_id,
+                            int *ppkey_flags, const char **pinfo,
+                            const char **ppem_str,
+                            const EVP_PKEY_ASN1_METHOD *ameth);
+ +

DESCRIPTION

+ +

EVP_PKEY_asn1_count() returns a count of the number of public key ASN.1 methods available: it includes standard methods and any methods added by the application.

+ +

EVP_PKEY_asn1_get0() returns the public key ASN.1 method idx. The value of idx must be between zero and EVP_PKEY_asn1_get_count() - 1.

+ +

EVP_PKEY_asn1_find() looks up the EVP_PKEY_ASN1_METHOD with NID type. If pe isn't NULL, then it will look up an engine implementing a EVP_PKEY_ASN1_METHOD for the NID type and return that instead, and also set *pe to point at the engine that implements it.

+ +

EVP_PKEY_asn1_find_str() looks up the EVP_PKEY_ASN1_METHOD with PEM type string str. Just like EVP_PKEY_asn1_find(), if pe isn't NULL, then it will look up an engine implementing a EVP_PKEY_ASN1_METHOD for the NID type and return that instead, and also set *pe to point at the engine that implements it.

+ +

EVP_PKEY_asn1_get0_info() returns the public key ID, base public key ID (both NIDs), any flags, the method description and PEM type string associated with the public key ASN.1 method *ameth.

+ +

EVP_PKEY_asn1_count(), EVP_PKEY_asn1_get0(), EVP_PKEY_asn1_find() and EVP_PKEY_asn1_find_str() are not thread safe, but as long as all EVP_PKEY_ASN1_METHOD objects are added before the application gets threaded, using them is safe. See EVP_PKEY_asn1_add0(3).

+ +

RETURN VALUES

+ +

EVP_PKEY_asn1_count() returns the number of available public key methods.

+ +

EVP_PKEY_asn1_get0() return a public key method or NULL if idx is out of range.

+ +

EVP_PKEY_asn1_get0_info() returns 0 on failure, 1 on success.

+ +

SEE ALSO

+ +

EVP_PKEY_asn1_new(3), EVP_PKEY_asn1_add0(3)

+ +

COPYRIGHT

+ +

Copyright 2017-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_cmp.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_cmp.html new file mode 100644 index 00000000..cf0a6dd4 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_cmp.html @@ -0,0 +1,77 @@ + + + + +EVP_PKEY_cmp + + + + + + + + + + +

NAME

+ +

EVP_PKEY_copy_parameters, EVP_PKEY_missing_parameters, EVP_PKEY_cmp_parameters, EVP_PKEY_cmp - public key parameter and comparison functions

+ +

SYNOPSIS

+ +
#include <openssl/evp.h>
+
+int EVP_PKEY_missing_parameters(const EVP_PKEY *pkey);
+int EVP_PKEY_copy_parameters(EVP_PKEY *to, const EVP_PKEY *from);
+
+int EVP_PKEY_cmp_parameters(const EVP_PKEY *a, const EVP_PKEY *b);
+int EVP_PKEY_cmp(const EVP_PKEY *a, const EVP_PKEY *b);
+ +

DESCRIPTION

+ +

The function EVP_PKEY_missing_parameters() returns 1 if the public key parameters of pkey are missing and 0 if they are present or the algorithm doesn't use parameters.

+ +

The function EVP_PKEY_copy_parameters() copies the parameters from key from to key to. An error is returned if the parameters are missing in from or present in both from and to and mismatch. If the parameters in from and to are both present and match this function has no effect.

+ +

The function EVP_PKEY_cmp_parameters() compares the parameters of keys a and b.

+ +

The function EVP_PKEY_cmp() compares the public key components and parameters (if present) of keys a and b.

+ +

NOTES

+ +

The main purpose of the functions EVP_PKEY_missing_parameters() and EVP_PKEY_copy_parameters() is to handle public keys in certificates where the parameters are sometimes omitted from a public key if they are inherited from the CA that signed it.

+ +

Since OpenSSL private keys contain public key components too the function EVP_PKEY_cmp() can also be used to determine if a private key matches a public key.

+ +

RETURN VALUES

+ +

The function EVP_PKEY_missing_parameters() returns 1 if the public key parameters of pkey are missing and 0 if they are present or the algorithm doesn't use parameters.

+ +

These functions EVP_PKEY_copy_parameters() returns 1 for success and 0 for failure.

+ +

The function EVP_PKEY_cmp_parameters() and EVP_PKEY_cmp() return 1 if the keys match, 0 if they don't match, -1 if the key types are different and -2 if the operation is not supported.

+ +

SEE ALSO

+ +

EVP_PKEY_CTX_new(3), EVP_PKEY_keygen(3)

+ +

COPYRIGHT

+ +

Copyright 2006-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_decrypt.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_decrypt.html new file mode 100644 index 00000000..301bb7d6 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_decrypt.html @@ -0,0 +1,113 @@ + + + + +EVP_PKEY_decrypt + + + + + + + + + + +

NAME

+ +

EVP_PKEY_decrypt_init, EVP_PKEY_decrypt - decrypt using a public key algorithm

+ +

SYNOPSIS

+ +
#include <openssl/evp.h>
+
+int EVP_PKEY_decrypt_init(EVP_PKEY_CTX *ctx);
+int EVP_PKEY_decrypt(EVP_PKEY_CTX *ctx,
+                     unsigned char *out, size_t *outlen,
+                     const unsigned char *in, size_t inlen);
+ +

DESCRIPTION

+ +

The EVP_PKEY_decrypt_init() function initializes a public key algorithm context using key pkey for a decryption operation.

+ +

The EVP_PKEY_decrypt() function performs a public key decryption operation using ctx. The data to be decrypted is specified using the in and inlen parameters. If out is NULL then the maximum size of the output buffer is written to the outlen parameter. If out is not NULL then before the call the outlen parameter should contain the length of the out buffer, if the call is successful the decrypted data is written to out and the amount of data written to outlen.

+ +

NOTES

+ +

After the call to EVP_PKEY_decrypt_init() algorithm specific control operations can be performed to set any appropriate parameters for the operation.

+ +

The function EVP_PKEY_decrypt() can be called more than once on the same context if several operations are performed using the same parameters.

+ +

RETURN VALUES

+ +

EVP_PKEY_decrypt_init() and EVP_PKEY_decrypt() return 1 for success and 0 or a negative value for failure. In particular a return value of -2 indicates the operation is not supported by the public key algorithm.

+ +

EXAMPLES

+ +

Decrypt data using OAEP (for RSA keys):

+ +
#include <openssl/evp.h>
+#include <openssl/rsa.h>
+
+EVP_PKEY_CTX *ctx;
+ENGINE *eng;
+unsigned char *out, *in;
+size_t outlen, inlen;
+EVP_PKEY *key;
+
+/*
+ * NB: assumes key, eng, in, inlen are already set up
+ * and that key is an RSA private key
+ */
+ctx = EVP_PKEY_CTX_new(key, eng);
+if (!ctx)
+    /* Error occurred */
+if (EVP_PKEY_decrypt_init(ctx) <= 0)
+    /* Error */
+if (EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_OAEP_PADDING) <= 0)
+    /* Error */
+
+/* Determine buffer length */
+if (EVP_PKEY_decrypt(ctx, NULL, &outlen, in, inlen) <= 0)
+    /* Error */
+
+out = OPENSSL_malloc(outlen);
+
+if (!out)
+    /* malloc failure */
+
+if (EVP_PKEY_decrypt(ctx, out, &outlen, in, inlen) <= 0)
+    /* Error */
+
+/* Decrypted data is outlen bytes written to buffer out */
+ +

SEE ALSO

+ +

EVP_PKEY_CTX_new(3), EVP_PKEY_encrypt(3), EVP_PKEY_sign(3), EVP_PKEY_verify(3), EVP_PKEY_verify_recover(3), EVP_PKEY_derive(3)

+ +

HISTORY

+ +

These functions were added in OpenSSL 1.0.0.

+ +

COPYRIGHT

+ +

Copyright 2006-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_derive.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_derive.html new file mode 100644 index 00000000..af93a8ed --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_derive.html @@ -0,0 +1,111 @@ + + + + +EVP_PKEY_derive + + + + + + + + + + +

NAME

+ +

EVP_PKEY_derive_init, EVP_PKEY_derive_set_peer, EVP_PKEY_derive - derive public key algorithm shared secret

+ +

SYNOPSIS

+ +
#include <openssl/evp.h>
+
+int EVP_PKEY_derive_init(EVP_PKEY_CTX *ctx);
+int EVP_PKEY_derive_set_peer(EVP_PKEY_CTX *ctx, EVP_PKEY *peer);
+int EVP_PKEY_derive(EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen);
+ +

DESCRIPTION

+ +

The EVP_PKEY_derive_init() function initializes a public key algorithm context using key pkey for shared secret derivation.

+ +

The EVP_PKEY_derive_set_peer() function sets the peer key: this will normally be a public key.

+ +

The EVP_PKEY_derive() derives a shared secret using ctx. If key is NULL then the maximum size of the output buffer is written to the keylen parameter. If key is not NULL then before the call the keylen parameter should contain the length of the key buffer, if the call is successful the shared secret is written to key and the amount of data written to keylen.

+ +

NOTES

+ +

After the call to EVP_PKEY_derive_init() algorithm specific control operations can be performed to set any appropriate parameters for the operation.

+ +

The function EVP_PKEY_derive() can be called more than once on the same context if several operations are performed using the same parameters.

+ +

RETURN VALUES

+ +

EVP_PKEY_derive_init() and EVP_PKEY_derive() return 1 for success and 0 or a negative value for failure. In particular a return value of -2 indicates the operation is not supported by the public key algorithm.

+ +

EXAMPLES

+ +

Derive shared secret (for example DH or EC keys):

+ +
#include <openssl/evp.h>
+#include <openssl/rsa.h>
+
+EVP_PKEY_CTX *ctx;
+ENGINE *eng;
+unsigned char *skey;
+size_t skeylen;
+EVP_PKEY *pkey, *peerkey;
+/* NB: assumes pkey, eng, peerkey have been already set up */
+
+ctx = EVP_PKEY_CTX_new(pkey, eng);
+if (!ctx)
+    /* Error occurred */
+if (EVP_PKEY_derive_init(ctx) <= 0)
+    /* Error */
+if (EVP_PKEY_derive_set_peer(ctx, peerkey) <= 0)
+    /* Error */
+
+/* Determine buffer length */
+if (EVP_PKEY_derive(ctx, NULL, &skeylen) <= 0)
+    /* Error */
+
+skey = OPENSSL_malloc(skeylen);
+
+if (!skey)
+    /* malloc failure */
+
+if (EVP_PKEY_derive(ctx, skey, &skeylen) <= 0)
+    /* Error */
+
+/* Shared secret is skey bytes written to buffer skey */
+ +

SEE ALSO

+ +

EVP_PKEY_CTX_new(3), EVP_PKEY_encrypt(3), EVP_PKEY_decrypt(3), EVP_PKEY_sign(3), EVP_PKEY_verify(3), EVP_PKEY_verify_recover(3),

+ +

HISTORY

+ +

These functions were added in OpenSSL 1.0.0.

+ +

COPYRIGHT

+ +

Copyright 2006-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_encrypt.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_encrypt.html new file mode 100644 index 00000000..e2def41a --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_encrypt.html @@ -0,0 +1,114 @@ + + + + +EVP_PKEY_encrypt + + + + + + + + + + +

NAME

+ +

EVP_PKEY_encrypt_init, EVP_PKEY_encrypt - encrypt using a public key algorithm

+ +

SYNOPSIS

+ +
#include <openssl/evp.h>
+
+int EVP_PKEY_encrypt_init(EVP_PKEY_CTX *ctx);
+int EVP_PKEY_encrypt(EVP_PKEY_CTX *ctx,
+                     unsigned char *out, size_t *outlen,
+                     const unsigned char *in, size_t inlen);
+ +

DESCRIPTION

+ +

The EVP_PKEY_encrypt_init() function initializes a public key algorithm context using key pkey for an encryption operation.

+ +

The EVP_PKEY_encrypt() function performs a public key encryption operation using ctx. The data to be encrypted is specified using the in and inlen parameters. If out is NULL then the maximum size of the output buffer is written to the outlen parameter. If out is not NULL then before the call the outlen parameter should contain the length of the out buffer, if the call is successful the encrypted data is written to out and the amount of data written to outlen.

+ +

NOTES

+ +

After the call to EVP_PKEY_encrypt_init() algorithm specific control operations can be performed to set any appropriate parameters for the operation.

+ +

The function EVP_PKEY_encrypt() can be called more than once on the same context if several operations are performed using the same parameters.

+ +

RETURN VALUES

+ +

EVP_PKEY_encrypt_init() and EVP_PKEY_encrypt() return 1 for success and 0 or a negative value for failure. In particular a return value of -2 indicates the operation is not supported by the public key algorithm.

+ +

EXAMPLES

+ +

Encrypt data using OAEP (for RSA keys). See also PEM_read_PUBKEY(3) or d2i_X509(3) for means to load a public key. You may also simply set 'eng = NULL;' to start with the default OpenSSL RSA implementation:

+ +
#include <openssl/evp.h>
+#include <openssl/rsa.h>
+#include <openssl/engine.h>
+
+EVP_PKEY_CTX *ctx;
+ENGINE *eng;
+unsigned char *out, *in;
+size_t outlen, inlen;
+EVP_PKEY *key;
+
+/*
+ * NB: assumes eng, key, in, inlen are already set up,
+ * and that key is an RSA public key
+ */
+ctx = EVP_PKEY_CTX_new(key, eng);
+if (!ctx)
+    /* Error occurred */
+if (EVP_PKEY_encrypt_init(ctx) <= 0)
+    /* Error */
+if (EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_OAEP_PADDING) <= 0)
+    /* Error */
+
+/* Determine buffer length */
+if (EVP_PKEY_encrypt(ctx, NULL, &outlen, in, inlen) <= 0)
+    /* Error */
+
+out = OPENSSL_malloc(outlen);
+
+if (!out)
+    /* malloc failure */
+
+if (EVP_PKEY_encrypt(ctx, out, &outlen, in, inlen) <= 0)
+    /* Error */
+
+/* Encrypted data is outlen bytes written to buffer out */
+ +

SEE ALSO

+ +

d2i_X509(3), ENGINE_by_id(3), EVP_PKEY_CTX_new(3), EVP_PKEY_decrypt(3), EVP_PKEY_sign(3), EVP_PKEY_verify(3), EVP_PKEY_verify_recover(3), EVP_PKEY_derive(3)

+ +

HISTORY

+ +

These functions were added in OpenSSL 1.0.0.

+ +

COPYRIGHT

+ +

Copyright 2006-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_get_default_digest_nid.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_get_default_digest_nid.html new file mode 100644 index 00000000..b744d9c3 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_get_default_digest_nid.html @@ -0,0 +1,65 @@ + + + + +EVP_PKEY_get_default_digest_nid + + + + + + + + + + +

NAME

+ +

EVP_PKEY_get_default_digest_nid - get default signature digest

+ +

SYNOPSIS

+ +
#include <openssl/evp.h>
+int EVP_PKEY_get_default_digest_nid(EVP_PKEY *pkey, int *pnid);
+ +

DESCRIPTION

+ +

The EVP_PKEY_get_default_digest_nid() function sets pnid to the default message digest NID for the public key signature operations associated with key pkey. Note that some signature algorithms (i.e. Ed25519 and Ed448) do not use a digest during signing. In this case pnid will be set to NID_undef.

+ +

NOTES

+ +

For all current standard OpenSSL public key algorithms SHA1 is returned.

+ +

RETURN VALUES

+ +

The EVP_PKEY_get_default_digest_nid() function returns 1 if the message digest is advisory (that is other digests can be used) and 2 if it is mandatory (other digests can not be used). It returns 0 or a negative value for failure. In particular a return value of -2 indicates the operation is not supported by the public key algorithm.

+ +

SEE ALSO

+ +

EVP_PKEY_CTX_new(3), EVP_PKEY_sign(3), EVP_PKEY_verify(3), EVP_PKEY_verify_recover(3),

+ +

HISTORY

+ +

This function was added in OpenSSL 1.0.0.

+ +

COPYRIGHT

+ +

Copyright 2006-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_keygen.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_keygen.html new file mode 100644 index 00000000..671b7a3a --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_keygen.html @@ -0,0 +1,181 @@ + + + + +EVP_PKEY_keygen + + + + + + + + + + +

NAME

+ +

EVP_PKEY_keygen_init, EVP_PKEY_keygen, EVP_PKEY_paramgen_init, EVP_PKEY_paramgen, EVP_PKEY_CTX_set_cb, EVP_PKEY_CTX_get_cb, EVP_PKEY_CTX_get_keygen_info, EVP_PKEY_CTX_set_app_data, EVP_PKEY_CTX_get_app_data, EVP_PKEY_gen_cb, EVP_PKEY_check, EVP_PKEY_public_check, EVP_PKEY_param_check - key and parameter generation and check functions

+ +

SYNOPSIS

+ +
#include <openssl/evp.h>
+
+int EVP_PKEY_keygen_init(EVP_PKEY_CTX *ctx);
+int EVP_PKEY_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey);
+int EVP_PKEY_paramgen_init(EVP_PKEY_CTX *ctx);
+int EVP_PKEY_paramgen(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey);
+
+typedef int EVP_PKEY_gen_cb(EVP_PKEY_CTX *ctx);
+
+void EVP_PKEY_CTX_set_cb(EVP_PKEY_CTX *ctx, EVP_PKEY_gen_cb *cb);
+EVP_PKEY_gen_cb *EVP_PKEY_CTX_get_cb(EVP_PKEY_CTX *ctx);
+
+int EVP_PKEY_CTX_get_keygen_info(EVP_PKEY_CTX *ctx, int idx);
+
+void EVP_PKEY_CTX_set_app_data(EVP_PKEY_CTX *ctx, void *data);
+void *EVP_PKEY_CTX_get_app_data(EVP_PKEY_CTX *ctx);
+
+int EVP_PKEY_check(EVP_PKEY_CTX *ctx);
+int EVP_PKEY_public_check(EVP_PKEY_CTX *ctx);
+int EVP_PKEY_param_check(EVP_PKEY_CTX *ctx);
+ +

DESCRIPTION

+ +

The EVP_PKEY_keygen_init() function initializes a public key algorithm context using key pkey for a key generation operation.

+ +

The EVP_PKEY_keygen() function performs a key generation operation, the generated key is written to ppkey.

+ +

The functions EVP_PKEY_paramgen_init() and EVP_PKEY_paramgen() are similar except parameters are generated.

+ +

The function EVP_PKEY_set_cb() sets the key or parameter generation callback to cb. The function EVP_PKEY_CTX_get_cb() returns the key or parameter generation callback.

+ +

The function EVP_PKEY_CTX_get_keygen_info() returns parameters associated with the generation operation. If 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 idx should only be called within the generation callback.

+ +

If the callback returns 0 then the key generation operation is aborted and an error occurs. This might occur during a time consuming operation where a user clicks on a "cancel" button.

+ +

The functions EVP_PKEY_CTX_set_app_data() and EVP_PKEY_CTX_get_app_data() set and retrieve an opaque pointer. This can be used to set some application defined value which can be retrieved in the callback: for example a handle which is used to update a "progress dialog".

+ +

EVP_PKEY_check() validates the key-pair given by ctx. This function first tries to use customized key check method in EVP_PKEY_METHOD if it's present; otherwise it calls a default one defined in EVP_PKEY_ASN1_METHOD.

+ +

EVP_PKEY_public_check() validates the public component of the key-pair given by ctx. This function first tries to use customized key check method in EVP_PKEY_METHOD if it's present; otherwise it calls a default one defined in EVP_PKEY_ASN1_METHOD.

+ +

EVP_PKEY_param_check() validates the algorithm parameters of the key-pair given by ctx. This function first tries to use customized key check method in EVP_PKEY_METHOD if it's present; otherwise it calls a default one defined in EVP_PKEY_ASN1_METHOD.

+ +

NOTES

+ +

After the call to EVP_PKEY_keygen_init() or EVP_PKEY_paramgen_init() algorithm specific control operations can be performed to set any appropriate parameters for the operation.

+ +

The functions EVP_PKEY_keygen() and EVP_PKEY_paramgen() can be called more than once on the same context if several operations are performed using the same parameters.

+ +

The meaning of the parameters passed to the callback will depend on the algorithm and the specific implementation of the algorithm. Some might not give any useful information at all during key or parameter generation. Others might not even call the callback.

+ +

The operation performed by key or parameter generation depends on the algorithm used. In some cases (e.g. EC with a supplied named curve) the "generation" option merely sets the appropriate fields in an EVP_PKEY structure.

+ +

In OpenSSL an EVP_PKEY structure containing a private key also contains the public key components and parameters (if any). An OpenSSL private key is equivalent to what some libraries call a "key pair". A private key can be used in functions which require the use of a public key or parameters.

+ +

RETURN VALUES

+ +

EVP_PKEY_keygen_init(), EVP_PKEY_paramgen_init(), EVP_PKEY_keygen() and EVP_PKEY_paramgen() return 1 for success and 0 or a negative value for failure. In particular a return value of -2 indicates the operation is not supported by the public key algorithm.

+ +

EVP_PKEY_check(), EVP_PKEY_public_check() and EVP_PKEY_param_check() return 1 for success or others for failure. They return -2 if the operation is not supported for the specific algorithm.

+ +

EXAMPLES

+ +

Generate a 2048 bit RSA key:

+ +
#include <openssl/evp.h>
+#include <openssl/rsa.h>
+
+EVP_PKEY_CTX *ctx;
+EVP_PKEY *pkey = NULL;
+
+ctx = EVP_PKEY_CTX_new_id(EVP_PKEY_RSA, NULL);
+if (!ctx)
+    /* Error occurred */
+if (EVP_PKEY_keygen_init(ctx) <= 0)
+    /* Error */
+if (EVP_PKEY_CTX_set_rsa_keygen_bits(ctx, 2048) <= 0)
+    /* Error */
+
+/* Generate key */
+if (EVP_PKEY_keygen(ctx, &pkey) <= 0)
+    /* Error */
+ +

Generate a key from a set of parameters:

+ +
#include <openssl/evp.h>
+#include <openssl/rsa.h>
+
+EVP_PKEY_CTX *ctx;
+ENGINE *eng;
+EVP_PKEY *pkey = NULL, *param;
+
+/* Assumed param, eng are set up already */
+ctx = EVP_PKEY_CTX_new(param, eng);
+if (!ctx)
+    /* Error occurred */
+if (EVP_PKEY_keygen_init(ctx) <= 0)
+    /* Error */
+
+/* Generate key */
+if (EVP_PKEY_keygen(ctx, &pkey) <= 0)
+    /* Error */
+ +

Example of generation callback for OpenSSL public key implementations:

+ +
/* Application data is a BIO to output status to */
+
+EVP_PKEY_CTX_set_app_data(ctx, status_bio);
+
+static int genpkey_cb(EVP_PKEY_CTX *ctx)
+{
+    char c = '*';
+    BIO *b = EVP_PKEY_CTX_get_app_data(ctx);
+    int p = EVP_PKEY_CTX_get_keygen_info(ctx, 0);
+
+    if (p == 0)
+        c = '.';
+    if (p == 1)
+        c = '+';
+    if (p == 2)
+        c = '*';
+    if (p == 3)
+        c = '\n';
+    BIO_write(b, &c, 1);
+    (void)BIO_flush(b);
+    return 1;
+}
+ +

SEE ALSO

+ +

EVP_PKEY_CTX_new(3), EVP_PKEY_encrypt(3), EVP_PKEY_decrypt(3), EVP_PKEY_sign(3), EVP_PKEY_verify(3), EVP_PKEY_verify_recover(3), EVP_PKEY_derive(3)

+ +

HISTORY

+ +

These functions were added in OpenSSL 1.0.0.

+ +

EVP_PKEY_check(), EVP_PKEY_public_check() and EVP_PKEY_param_check() were added in OpenSSL 1.1.1.

+ +

COPYRIGHT

+ +

Copyright 2006-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_meth_get_count.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_meth_get_count.html new file mode 100644 index 00000000..ac93fa56 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_meth_get_count.html @@ -0,0 +1,67 @@ + + + + +EVP_PKEY_meth_get_count + + + + + + + + + + +

NAME

+ +

EVP_PKEY_meth_get_count, EVP_PKEY_meth_get0, EVP_PKEY_meth_get0_info - enumerate public key methods

+ +

SYNOPSIS

+ +
#include <openssl/evp.h>
+
+size_t EVP_PKEY_meth_get_count(void);
+const EVP_PKEY_METHOD *EVP_PKEY_meth_get0(size_t idx);
+void EVP_PKEY_meth_get0_info(int *ppkey_id, int *pflags,
+                             const EVP_PKEY_METHOD *meth);
+ +

DESCRIPTION

+ +

EVP_PKEY_meth_count() returns a count of the number of public key methods available: it includes standard methods and any methods added by the application.

+ +

EVP_PKEY_meth_get0() returns the public key method idx. The value of idx must be between zero and EVP_PKEY_meth_get_count() - 1.

+ +

EVP_PKEY_meth_get0_info() returns the public key ID (a NID) and any flags associated with the public key method *meth.

+ +

RETURN VALUES

+ +

EVP_PKEY_meth_count() returns the number of available public key methods.

+ +

EVP_PKEY_meth_get0() return a public key method or NULL if idx is out of range.

+ +

EVP_PKEY_meth_get0_info() does not return a value.

+ +

SEE ALSO

+ +

EVP_PKEY_new(3)

+ +

COPYRIGHT

+ +

Copyright 2002-2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_meth_new.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_meth_new.html new file mode 100644 index 00000000..5fd51558 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_meth_new.html @@ -0,0 +1,394 @@ + + + + +EVP_PKEY_meth_new + + + + + + + + + + +

NAME

+ +

EVP_PKEY_meth_new, EVP_PKEY_meth_free, EVP_PKEY_meth_copy, EVP_PKEY_meth_find, EVP_PKEY_meth_add0, EVP_PKEY_METHOD, EVP_PKEY_meth_set_init, EVP_PKEY_meth_set_copy, EVP_PKEY_meth_set_cleanup, EVP_PKEY_meth_set_paramgen, EVP_PKEY_meth_set_keygen, EVP_PKEY_meth_set_sign, EVP_PKEY_meth_set_verify, EVP_PKEY_meth_set_verify_recover, EVP_PKEY_meth_set_signctx, EVP_PKEY_meth_set_verifyctx, EVP_PKEY_meth_set_encrypt, EVP_PKEY_meth_set_decrypt, EVP_PKEY_meth_set_derive, EVP_PKEY_meth_set_ctrl, EVP_PKEY_meth_set_digestsign, EVP_PKEY_meth_set_digestverify, EVP_PKEY_meth_set_check, EVP_PKEY_meth_set_public_check, EVP_PKEY_meth_set_param_check, EVP_PKEY_meth_set_digest_custom, EVP_PKEY_meth_get_init, EVP_PKEY_meth_get_copy, EVP_PKEY_meth_get_cleanup, EVP_PKEY_meth_get_paramgen, EVP_PKEY_meth_get_keygen, EVP_PKEY_meth_get_sign, EVP_PKEY_meth_get_verify, EVP_PKEY_meth_get_verify_recover, EVP_PKEY_meth_get_signctx, EVP_PKEY_meth_get_verifyctx, EVP_PKEY_meth_get_encrypt, EVP_PKEY_meth_get_decrypt, EVP_PKEY_meth_get_derive, EVP_PKEY_meth_get_ctrl, EVP_PKEY_meth_get_digestsign, EVP_PKEY_meth_get_digestverify, EVP_PKEY_meth_get_check, EVP_PKEY_meth_get_public_check, EVP_PKEY_meth_get_param_check, EVP_PKEY_meth_get_digest_custom, EVP_PKEY_meth_remove - manipulating EVP_PKEY_METHOD structure

+ +

SYNOPSIS

+ +
#include <openssl/evp.h>
+
+typedef struct evp_pkey_method_st EVP_PKEY_METHOD;
+
+EVP_PKEY_METHOD *EVP_PKEY_meth_new(int id, int flags);
+void EVP_PKEY_meth_free(EVP_PKEY_METHOD *pmeth);
+void EVP_PKEY_meth_copy(EVP_PKEY_METHOD *dst, const EVP_PKEY_METHOD *src);
+const EVP_PKEY_METHOD *EVP_PKEY_meth_find(int type);
+int EVP_PKEY_meth_add0(const EVP_PKEY_METHOD *pmeth);
+int EVP_PKEY_meth_remove(const EVP_PKEY_METHOD *pmeth);
+
+void EVP_PKEY_meth_set_init(EVP_PKEY_METHOD *pmeth,
+                            int (*init) (EVP_PKEY_CTX *ctx));
+void EVP_PKEY_meth_set_copy(EVP_PKEY_METHOD *pmeth,
+                            int (*copy) (EVP_PKEY_CTX *dst,
+                                         EVP_PKEY_CTX *src));
+void EVP_PKEY_meth_set_cleanup(EVP_PKEY_METHOD *pmeth,
+                               void (*cleanup) (EVP_PKEY_CTX *ctx));
+void EVP_PKEY_meth_set_paramgen(EVP_PKEY_METHOD *pmeth,
+                                int (*paramgen_init) (EVP_PKEY_CTX *ctx),
+                                int (*paramgen) (EVP_PKEY_CTX *ctx,
+                                                 EVP_PKEY *pkey));
+void EVP_PKEY_meth_set_keygen(EVP_PKEY_METHOD *pmeth,
+                              int (*keygen_init) (EVP_PKEY_CTX *ctx),
+                              int (*keygen) (EVP_PKEY_CTX *ctx,
+                                             EVP_PKEY *pkey));
+void EVP_PKEY_meth_set_sign(EVP_PKEY_METHOD *pmeth,
+                            int (*sign_init) (EVP_PKEY_CTX *ctx),
+                            int (*sign) (EVP_PKEY_CTX *ctx,
+                                         unsigned char *sig, size_t *siglen,
+                                         const unsigned char *tbs,
+                                         size_t tbslen));
+void EVP_PKEY_meth_set_verify(EVP_PKEY_METHOD *pmeth,
+                              int (*verify_init) (EVP_PKEY_CTX *ctx),
+                              int (*verify) (EVP_PKEY_CTX *ctx,
+                                             const unsigned char *sig,
+                                             size_t siglen,
+                                             const unsigned char *tbs,
+                                             size_t tbslen));
+void EVP_PKEY_meth_set_verify_recover(EVP_PKEY_METHOD *pmeth,
+                                      int (*verify_recover_init) (EVP_PKEY_CTX
+                                                                  *ctx),
+                                      int (*verify_recover) (EVP_PKEY_CTX
+                                                             *ctx,
+                                                             unsigned char
+                                                             *sig,
+                                                             size_t *siglen,
+                                                             const unsigned
+                                                             char *tbs,
+                                                             size_t tbslen));
+void EVP_PKEY_meth_set_signctx(EVP_PKEY_METHOD *pmeth,
+                               int (*signctx_init) (EVP_PKEY_CTX *ctx,
+                                                    EVP_MD_CTX *mctx),
+                               int (*signctx) (EVP_PKEY_CTX *ctx,
+                                               unsigned char *sig,
+                                               size_t *siglen,
+                                               EVP_MD_CTX *mctx));
+void EVP_PKEY_meth_set_verifyctx(EVP_PKEY_METHOD *pmeth,
+                                 int (*verifyctx_init) (EVP_PKEY_CTX *ctx,
+                                                        EVP_MD_CTX *mctx),
+                                 int (*verifyctx) (EVP_PKEY_CTX *ctx,
+                                                   const unsigned char *sig,
+                                                   int siglen,
+                                                   EVP_MD_CTX *mctx));
+void EVP_PKEY_meth_set_encrypt(EVP_PKEY_METHOD *pmeth,
+                               int (*encrypt_init) (EVP_PKEY_CTX *ctx),
+                               int (*encryptfn) (EVP_PKEY_CTX *ctx,
+                                                 unsigned char *out,
+                                                 size_t *outlen,
+                                                 const unsigned char *in,
+                                                 size_t inlen));
+void EVP_PKEY_meth_set_decrypt(EVP_PKEY_METHOD *pmeth,
+                               int (*decrypt_init) (EVP_PKEY_CTX *ctx),
+                               int (*decrypt) (EVP_PKEY_CTX *ctx,
+                                               unsigned char *out,
+                                               size_t *outlen,
+                                               const unsigned char *in,
+                                               size_t inlen));
+void EVP_PKEY_meth_set_derive(EVP_PKEY_METHOD *pmeth,
+                              int (*derive_init) (EVP_PKEY_CTX *ctx),
+                              int (*derive) (EVP_PKEY_CTX *ctx,
+                                             unsigned char *key,
+                                             size_t *keylen));
+void EVP_PKEY_meth_set_ctrl(EVP_PKEY_METHOD *pmeth,
+                            int (*ctrl) (EVP_PKEY_CTX *ctx, int type, int p1,
+                                         void *p2),
+                            int (*ctrl_str) (EVP_PKEY_CTX *ctx,
+                                             const char *type,
+                                             const char *value));
+void EVP_PKEY_meth_set_digestsign(EVP_PKEY_METHOD *pmeth,
+                                  int (*digestsign) (EVP_MD_CTX *ctx,
+                                                     unsigned char *sig,
+                                                     size_t *siglen,
+                                                     const unsigned char *tbs,
+                                                     size_t tbslen));
+void EVP_PKEY_meth_set_digestverify(EVP_PKEY_METHOD *pmeth,
+                                    int (*digestverify) (EVP_MD_CTX *ctx,
+                                                         const unsigned char *sig,
+                                                         size_t siglen,
+                                                         const unsigned char *tbs,
+                                                         size_t tbslen));
+void EVP_PKEY_meth_set_check(EVP_PKEY_METHOD *pmeth,
+                             int (*check) (EVP_PKEY *pkey));
+void EVP_PKEY_meth_set_public_check(EVP_PKEY_METHOD *pmeth,
+                                    int (*check) (EVP_PKEY *pkey));
+void EVP_PKEY_meth_set_param_check(EVP_PKEY_METHOD *pmeth,
+                                   int (*check) (EVP_PKEY *pkey));
+void EVP_PKEY_meth_set_digest_custom(EVP_PKEY_METHOD *pmeth,
+                                    int (*digest_custom) (EVP_PKEY_CTX *ctx,
+                                                          EVP_MD_CTX *mctx));
+
+void EVP_PKEY_meth_get_init(const EVP_PKEY_METHOD *pmeth,
+                            int (**pinit) (EVP_PKEY_CTX *ctx));
+void EVP_PKEY_meth_get_copy(const EVP_PKEY_METHOD *pmeth,
+                            int (**pcopy) (EVP_PKEY_CTX *dst,
+                                           EVP_PKEY_CTX *src));
+void EVP_PKEY_meth_get_cleanup(const EVP_PKEY_METHOD *pmeth,
+                               void (**pcleanup) (EVP_PKEY_CTX *ctx));
+void EVP_PKEY_meth_get_paramgen(const EVP_PKEY_METHOD *pmeth,
+                                int (**pparamgen_init) (EVP_PKEY_CTX *ctx),
+                                int (**pparamgen) (EVP_PKEY_CTX *ctx,
+                                                   EVP_PKEY *pkey));
+void EVP_PKEY_meth_get_keygen(const EVP_PKEY_METHOD *pmeth,
+                              int (**pkeygen_init) (EVP_PKEY_CTX *ctx),
+                              int (**pkeygen) (EVP_PKEY_CTX *ctx,
+                                               EVP_PKEY *pkey));
+void EVP_PKEY_meth_get_sign(const EVP_PKEY_METHOD *pmeth,
+                            int (**psign_init) (EVP_PKEY_CTX *ctx),
+                            int (**psign) (EVP_PKEY_CTX *ctx,
+                                           unsigned char *sig, size_t *siglen,
+                                           const unsigned char *tbs,
+                                           size_t tbslen));
+void EVP_PKEY_meth_get_verify(const EVP_PKEY_METHOD *pmeth,
+                              int (**pverify_init) (EVP_PKEY_CTX *ctx),
+                              int (**pverify) (EVP_PKEY_CTX *ctx,
+                                               const unsigned char *sig,
+                                               size_t siglen,
+                                               const unsigned char *tbs,
+                                               size_t tbslen));
+void EVP_PKEY_meth_get_verify_recover(const EVP_PKEY_METHOD *pmeth,
+                                      int (**pverify_recover_init) (EVP_PKEY_CTX
+                                                                    *ctx),
+                                      int (**pverify_recover) (EVP_PKEY_CTX
+                                                               *ctx,
+                                                               unsigned char
+                                                               *sig,
+                                                               size_t *siglen,
+                                                               const unsigned
+                                                               char *tbs,
+                                                               size_t tbslen));
+void EVP_PKEY_meth_get_signctx(const EVP_PKEY_METHOD *pmeth,
+                               int (**psignctx_init) (EVP_PKEY_CTX *ctx,
+                                                      EVP_MD_CTX *mctx),
+                               int (**psignctx) (EVP_PKEY_CTX *ctx,
+                                                 unsigned char *sig,
+                                                 size_t *siglen,
+                                                 EVP_MD_CTX *mctx));
+void EVP_PKEY_meth_get_verifyctx(const EVP_PKEY_METHOD *pmeth,
+                                 int (**pverifyctx_init) (EVP_PKEY_CTX *ctx,
+                                                          EVP_MD_CTX *mctx),
+                                 int (**pverifyctx) (EVP_PKEY_CTX *ctx,
+                                                     const unsigned char *sig,
+                                                     int siglen,
+                                                     EVP_MD_CTX *mctx));
+void EVP_PKEY_meth_get_encrypt(const EVP_PKEY_METHOD *pmeth,
+                               int (**pencrypt_init) (EVP_PKEY_CTX *ctx),
+                               int (**pencryptfn) (EVP_PKEY_CTX *ctx,
+                                                   unsigned char *out,
+                                                   size_t *outlen,
+                                                   const unsigned char *in,
+                                                   size_t inlen));
+void EVP_PKEY_meth_get_decrypt(const EVP_PKEY_METHOD *pmeth,
+                               int (**pdecrypt_init) (EVP_PKEY_CTX *ctx),
+                               int (**pdecrypt) (EVP_PKEY_CTX *ctx,
+                                                 unsigned char *out,
+                                                 size_t *outlen,
+                                                 const unsigned char *in,
+                                                 size_t inlen));
+void EVP_PKEY_meth_get_derive(const EVP_PKEY_METHOD *pmeth,
+                              int (**pderive_init) (EVP_PKEY_CTX *ctx),
+                              int (**pderive) (EVP_PKEY_CTX *ctx,
+                                               unsigned char *key,
+                                               size_t *keylen));
+void EVP_PKEY_meth_get_ctrl(const EVP_PKEY_METHOD *pmeth,
+                            int (**pctrl) (EVP_PKEY_CTX *ctx, int type, int p1,
+                                           void *p2),
+                            int (**pctrl_str) (EVP_PKEY_CTX *ctx,
+                                               const char *type,
+                                               const char *value));
+void EVP_PKEY_meth_get_digestsign(EVP_PKEY_METHOD *pmeth,
+                                  int (**digestsign) (EVP_MD_CTX *ctx,
+                                                      unsigned char *sig,
+                                                      size_t *siglen,
+                                                      const unsigned char *tbs,
+                                                      size_t tbslen));
+void EVP_PKEY_meth_get_digestverify(EVP_PKEY_METHOD *pmeth,
+                                    int (**digestverify) (EVP_MD_CTX *ctx,
+                                                          const unsigned char *sig,
+                                                          size_t siglen,
+                                                          const unsigned char *tbs,
+                                                          size_t tbslen));
+void EVP_PKEY_meth_get_check(const EVP_PKEY_METHOD *pmeth,
+                             int (**pcheck) (EVP_PKEY *pkey));
+void EVP_PKEY_meth_get_public_check(const EVP_PKEY_METHOD *pmeth,
+                                    int (**pcheck) (EVP_PKEY *pkey));
+void EVP_PKEY_meth_get_param_check(const EVP_PKEY_METHOD *pmeth,
+                                   int (**pcheck) (EVP_PKEY *pkey));
+void EVP_PKEY_meth_get_digest_custom(EVP_PKEY_METHOD *pmeth,
+                                    int (**pdigest_custom) (EVP_PKEY_CTX *ctx,
+                                                            EVP_MD_CTX *mctx));
+ +

DESCRIPTION

+ +

EVP_PKEY_METHOD is a structure which holds a set of methods for a specific public key cryptographic algorithm. Those methods are usually used to perform different jobs, such as generating a key, signing or verifying, encrypting or decrypting, etc.

+ +

There are two places where the EVP_PKEY_METHOD objects are stored: one is a built-in static array representing the standard methods for different algorithms, and the other one is a stack of user-defined application-specific methods, which can be manipulated by using EVP_PKEY_meth_add0(3).

+ +

The EVP_PKEY_METHOD objects are usually referenced by EVP_PKEY_CTX objects.

+ +

Methods

+ +

The methods are the underlying implementations of a particular public key algorithm present by the EVP_PKEY_CTX object.

+ +
int (*init) (EVP_PKEY_CTX *ctx);
+int (*copy) (EVP_PKEY_CTX *dst, EVP_PKEY_CTX *src);
+void (*cleanup) (EVP_PKEY_CTX *ctx);
+ +

The init() method is called to initialize algorithm-specific data when a new EVP_PKEY_CTX is created. As opposed to init(), the cleanup() method is called when an EVP_PKEY_CTX is freed. The copy() method is called when an EVP_PKEY_CTX is being duplicated. Refer to EVP_PKEY_CTX_new(3), EVP_PKEY_CTX_new_id(3), EVP_PKEY_CTX_free(3) and EVP_PKEY_CTX_dup(3).

+ +
int (*paramgen_init) (EVP_PKEY_CTX *ctx);
+int (*paramgen) (EVP_PKEY_CTX *ctx, EVP_PKEY *pkey);
+ +

The paramgen_init() and paramgen() methods deal with key parameter generation. They are called by EVP_PKEY_paramgen_init(3) and EVP_PKEY_paramgen(3) to handle the parameter generation process.

+ +
int (*keygen_init) (EVP_PKEY_CTX *ctx);
+int (*keygen) (EVP_PKEY_CTX *ctx, EVP_PKEY *pkey);
+ +

The keygen_init() and keygen() methods are used to generate the actual key for the specified algorithm. They are called by EVP_PKEY_keygen_init(3) and EVP_PKEY_keygen(3).

+ +
int (*sign_init) (EVP_PKEY_CTX *ctx);
+int (*sign) (EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen,
+             const unsigned char *tbs, size_t tbslen);
+ +

The sign_init() and sign() methods are used to generate the signature of a piece of data using a private key. They are called by EVP_PKEY_sign_init(3) and EVP_PKEY_sign(3).

+ +
int (*verify_init) (EVP_PKEY_CTX *ctx);
+int (*verify) (EVP_PKEY_CTX *ctx,
+               const unsigned char *sig, size_t siglen,
+               const unsigned char *tbs, size_t tbslen);
+ +

The verify_init() and verify() methods are used to verify whether a signature is valid. They are called by EVP_PKEY_verify_init(3) and EVP_PKEY_verify(3).

+ +
int (*verify_recover_init) (EVP_PKEY_CTX *ctx);
+int (*verify_recover) (EVP_PKEY_CTX *ctx,
+                       unsigned char *rout, size_t *routlen,
+                       const unsigned char *sig, size_t siglen);
+ +

The verify_recover_init() and verify_recover() methods are used to verify a signature and then recover the digest from the signature (for instance, a signature that was generated by RSA signing algorithm). They are called by EVP_PKEY_verify_recover_init(3) and EVP_PKEY_verify_recover(3).

+ +
int (*signctx_init) (EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx);
+int (*signctx) (EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen,
+                EVP_MD_CTX *mctx);
+ +

The signctx_init() and signctx() methods are used to sign a digest present by a EVP_MD_CTX object. They are called by the EVP_DigestSign functions. See EVP_DigestSignInit(3) for details.

+ +
int (*verifyctx_init) (EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx);
+int (*verifyctx) (EVP_PKEY_CTX *ctx, const unsigned char *sig, int siglen,
+                  EVP_MD_CTX *mctx);
+ +

The verifyctx_init() and verifyctx() methods are used to verify a signature against the data in a EVP_MD_CTX object. They are called by the various EVP_DigestVerify functions. See EVP_DigestVerifyInit(3) for details.

+ +
int (*encrypt_init) (EVP_PKEY_CTX *ctx);
+int (*encrypt) (EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen,
+                const unsigned char *in, size_t inlen);
+ +

The encrypt_init() and encrypt() methods are used to encrypt a piece of data. They are called by EVP_PKEY_encrypt_init(3) and EVP_PKEY_encrypt(3).

+ +
int (*decrypt_init) (EVP_PKEY_CTX *ctx);
+int (*decrypt) (EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen,
+                const unsigned char *in, size_t inlen);
+ +

The decrypt_init() and decrypt() methods are used to decrypt a piece of data. They are called by EVP_PKEY_decrypt_init(3) and EVP_PKEY_decrypt(3).

+ +
int (*derive_init) (EVP_PKEY_CTX *ctx);
+int (*derive) (EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen);
+ +

The derive_init() and derive() methods are used to derive the shared secret from a public key algorithm (for instance, the DH algorithm). They are called by EVP_PKEY_derive_init(3) and EVP_PKEY_derive(3).

+ +
int (*ctrl) (EVP_PKEY_CTX *ctx, int type, int p1, void *p2);
+int (*ctrl_str) (EVP_PKEY_CTX *ctx, const char *type, const char *value);
+ +

The ctrl() and ctrl_str() methods are used to adjust algorithm-specific settings. See EVP_PKEY_CTX_ctrl(3) and related functions for details.

+ +
int (*digestsign) (EVP_MD_CTX *ctx, unsigned char *sig, size_t *siglen,
+                   const unsigned char *tbs, size_t tbslen);
+int (*digestverify) (EVP_MD_CTX *ctx, const unsigned char *sig,
+                     size_t siglen, const unsigned char *tbs,
+                     size_t tbslen);
+ +

The digestsign() and digestverify() methods are used to generate or verify a signature in a one-shot mode. They could be called by EVP_DigestSign(3) and EVP_DigestVerify(3).

+ +
int (*check) (EVP_PKEY *pkey);
+int (*public_check) (EVP_PKEY *pkey);
+int (*param_check) (EVP_PKEY *pkey);
+ +

The check(), public_check() and param_check() methods are used to validate a key-pair, the public component and parameters respectively for a given pkey. They could be called by EVP_PKEY_check(3), EVP_PKEY_public_check(3) and EVP_PKEY_param_check(3) respectively.

+ +
int (*digest_custom) (EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx);
+ +

The digest_custom() method is used to generate customized digest content before the real message is passed to functions like EVP_DigestSignUpdate(3) or EVP_DigestVerifyInit(3). This is usually required by some public key signature algorithms like SM2 which requires a hashed prefix to the message to be signed. The digest_custom() function will be called by EVP_DigestSignInit(3) and EVP_DigestVerifyInit(3).

+ +

Functions

+ +

EVP_PKEY_meth_new() creates and returns a new EVP_PKEY_METHOD object, and associates the given id and flags. The following flags are supported:

+ +
EVP_PKEY_FLAG_AUTOARGLEN
+EVP_PKEY_FLAG_SIGCTX_CUSTOM
+ +

If an EVP_PKEY_METHOD is set with the EVP_PKEY_FLAG_AUTOARGLEN flag, the maximum size of the output buffer will be automatically calculated or checked in corresponding EVP methods by the EVP framework. Thus the implementations of these methods don't need to care about handling the case of returning output buffer size by themselves. For details on the output buffer size, refer to EVP_PKEY_sign(3).

+ +

The EVP_PKEY_FLAG_SIGCTX_CUSTOM is used to indicate the signctx() method of an EVP_PKEY_METHOD is always called by the EVP framework while doing a digest signing operation by calling EVP_DigestSignFinal(3).

+ +

EVP_PKEY_meth_free() frees an existing EVP_PKEY_METHOD pointed by pmeth.

+ +

EVP_PKEY_meth_copy() copies an EVP_PKEY_METHOD object from src to dst.

+ +

EVP_PKEY_meth_find() finds an EVP_PKEY_METHOD object with the id. This function first searches through the user-defined method objects and then the built-in objects.

+ +

EVP_PKEY_meth_add0() adds pmeth to the user defined stack of methods.

+ +

EVP_PKEY_meth_remove() removes an EVP_PKEY_METHOD object added by EVP_PKEY_meth_add0().

+ +

The EVP_PKEY_meth_set functions set the corresponding fields of EVP_PKEY_METHOD structure with the arguments passed.

+ +

The EVP_PKEY_meth_get functions get the corresponding fields of EVP_PKEY_METHOD structure to the arguments provided.

+ +

RETURN VALUES

+ +

EVP_PKEY_meth_new() returns a pointer to a new EVP_PKEY_METHOD object or returns NULL on error.

+ +

EVP_PKEY_meth_free() and EVP_PKEY_meth_copy() do not return values.

+ +

EVP_PKEY_meth_find() returns a pointer to the found EVP_PKEY_METHOD object or returns NULL if not found.

+ +

EVP_PKEY_meth_add0() returns 1 if method is added successfully or 0 if an error occurred.

+ +

EVP_PKEY_meth_remove() returns 1 if method is removed successfully or 0 if an error occurred.

+ +

All EVP_PKEY_meth_set and EVP_PKEY_meth_get functions have no return values. For the 'get' functions, function pointers are returned by arguments.

+ +

COPYRIGHT

+ +

Copyright 2017-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_new.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_new.html new file mode 100644 index 00000000..6ded6b5e --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_new.html @@ -0,0 +1,106 @@ + + + + +EVP_PKEY_new + + + + + + + + + + +

NAME

+ +

EVP_PKEY_new, EVP_PKEY_up_ref, EVP_PKEY_free, EVP_PKEY_new_raw_private_key, EVP_PKEY_new_raw_public_key, EVP_PKEY_new_CMAC_key, EVP_PKEY_new_mac_key, EVP_PKEY_get_raw_private_key, EVP_PKEY_get_raw_public_key - public/private key allocation and raw key handling functions

+ +

SYNOPSIS

+ +
#include <openssl/evp.h>
+
+EVP_PKEY *EVP_PKEY_new(void);
+int EVP_PKEY_up_ref(EVP_PKEY *key);
+void EVP_PKEY_free(EVP_PKEY *key);
+
+EVP_PKEY *EVP_PKEY_new_raw_private_key(int type, ENGINE *e,
+                                       const unsigned char *key, size_t keylen);
+EVP_PKEY *EVP_PKEY_new_raw_public_key(int type, ENGINE *e,
+                                      const unsigned char *key, size_t keylen);
+EVP_PKEY *EVP_PKEY_new_CMAC_key(ENGINE *e, const unsigned char *priv,
+                                size_t len, const EVP_CIPHER *cipher);
+EVP_PKEY *EVP_PKEY_new_mac_key(int type, ENGINE *e, const unsigned char *key,
+                               int keylen);
+
+int EVP_PKEY_get_raw_private_key(const EVP_PKEY *pkey, unsigned char *priv,
+                                 size_t *len);
+int EVP_PKEY_get_raw_public_key(const EVP_PKEY *pkey, unsigned char *pub,
+                                size_t *len);
+ +

DESCRIPTION

+ +

The EVP_PKEY_new() function allocates an empty EVP_PKEY structure which is used by OpenSSL to store public and private keys. The reference count is set to 1.

+ +

EVP_PKEY_up_ref() increments the reference count of key.

+ +

EVP_PKEY_free() decrements the reference count of key and, if the reference count is zero, frees it up. If key is NULL, nothing is done.

+ +

EVP_PKEY_new_raw_private_key() allocates a new EVP_PKEY. If e is non-NULL then the new EVP_PKEY structure is associated with the engine e. The type argument indicates what kind of key this is. The value should be a NID for a public key algorithm that supports raw private keys, i.e. one of EVP_PKEY_HMAC, EVP_PKEY_POLY1305, EVP_PKEY_SIPHASH, EVP_PKEY_X25519, EVP_PKEY_ED25519, EVP_PKEY_X448 or EVP_PKEY_ED448. key points to the raw private key data for this EVP_PKEY which should be of length keylen. The length should be appropriate for the type of the key. The public key data will be automatically derived from the given private key data (if appropriate for the algorithm type).

+ +

EVP_PKEY_new_raw_public_key() works in the same way as EVP_PKEY_new_raw_private_key() except that key points to the raw public key data. The EVP_PKEY structure will be initialised without any private key information. Algorithm types that support raw public keys are EVP_PKEY_X25519, EVP_PKEY_ED25519, EVP_PKEY_X448 or 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 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 cipher argument.

+ +

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.

+ +

EVP_PKEY_get_raw_private_key() fills the buffer provided by priv with raw private key data. The size of the priv buffer should be in *len on entry to the function, and on exit *len is updated with the number of bytes actually written. If the buffer priv is NULL then *len is populated with the number of bytes required to hold the key. The calling application is responsible for ensuring that the buffer is large enough to receive the private key data. This function only works for algorithms that support raw private keys. Currently this is: EVP_PKEY_HMAC, EVP_PKEY_POLY1305, EVP_PKEY_SIPHASH, EVP_PKEY_X25519, EVP_PKEY_ED25519, EVP_PKEY_X448 or EVP_PKEY_ED448.

+ +

EVP_PKEY_get_raw_public_key() fills the buffer provided by pub with raw public key data. The size of the pub buffer should be in *len on entry to the function, and on exit *len is updated with the number of bytes actually written. If the buffer pub is NULL then *len is populated with the number of bytes required to hold the key. The calling application is responsible for ensuring that the buffer is large enough to receive the public key data. This function only works for algorithms that support raw public keys. Currently this is: EVP_PKEY_X25519, EVP_PKEY_ED25519, EVP_PKEY_X448 or EVP_PKEY_ED448.

+ +

NOTES

+ +

The EVP_PKEY structure is used by various OpenSSL functions which require a general private key without reference to any particular algorithm.

+ +

The structure returned by EVP_PKEY_new() is empty. To add a private or public key to this empty structure use the appropriate functions described in EVP_PKEY_set1_RSA(3), EVP_PKEY_set1_DSA, EVP_PKEY_set1_DH or EVP_PKEY_set1_EC_KEY.

+ +

RETURN VALUES

+ +

EVP_PKEY_new(), EVP_PKEY_new_raw_private_key(), EVP_PKEY_new_raw_public_key(), EVP_PKEY_new_CMAC_key() and EVP_PKEY_new_mac_key() return either the newly allocated EVP_PKEY structure or NULL if an error occurred.

+ +

EVP_PKEY_up_ref(), EVP_PKEY_get_raw_private_key() and EVP_PKEY_get_raw_public_key() return 1 for success and 0 for failure.

+ +

SEE ALSO

+ +

EVP_PKEY_set1_RSA(3), EVP_PKEY_set1_DSA, EVP_PKEY_set1_DH or EVP_PKEY_set1_EC_KEY

+ +

HISTORY

+ +

The EVP_PKEY_new() and EVP_PKEY_free() functions exist in all versions of OpenSSL.

+ +

The EVP_PKEY_up_ref() function was added in OpenSSL 1.1.0.

+ +

The EVP_PKEY_new_raw_private_key(), EVP_PKEY_new_raw_public_key(), EVP_PKEY_new_CMAC_key(), EVP_PKEY_new_raw_private_key() and EVP_PKEY_get_raw_public_key() functions were added in OpenSSL 1.1.1.

+ +

COPYRIGHT

+ +

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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_print_private.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_print_private.html new file mode 100644 index 00000000..4ef35295 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_print_private.html @@ -0,0 +1,75 @@ + + + + +EVP_PKEY_print_private + + + + + + + + + + +

NAME

+ +

EVP_PKEY_print_public, EVP_PKEY_print_private, EVP_PKEY_print_params - public key algorithm printing routines

+ +

SYNOPSIS

+ +
#include <openssl/evp.h>
+
+int EVP_PKEY_print_public(BIO *out, const EVP_PKEY *pkey,
+                          int indent, ASN1_PCTX *pctx);
+int EVP_PKEY_print_private(BIO *out, const EVP_PKEY *pkey,
+                           int indent, ASN1_PCTX *pctx);
+int EVP_PKEY_print_params(BIO *out, const EVP_PKEY *pkey,
+                          int indent, ASN1_PCTX *pctx);
+ +

DESCRIPTION

+ +

The functions EVP_PKEY_print_public(), EVP_PKEY_print_private() and EVP_PKEY_print_params() print out the public, private or parameter components of key pkey respectively. The key is sent to BIO out in human readable form. The parameter indent indicated how far the printout should be indented.

+ +

The pctx parameter allows the print output to be finely tuned by using ASN1 printing options. If pctx is set to NULL then default values will be used.

+ +

NOTES

+ +

Currently no public key algorithms include any options in the pctx parameter.

+ +

If the key does not include all the components indicated by the function then only those contained in the key will be printed. For example passing a public key to EVP_PKEY_print_private() will only print the public components.

+ +

RETURN VALUES

+ +

These functions all return 1 for success and 0 or a negative value for failure. In particular a return value of -2 indicates the operation is not supported by the public key algorithm.

+ +

SEE ALSO

+ +

EVP_PKEY_CTX_new(3), EVP_PKEY_keygen(3)

+ +

HISTORY

+ +

These functions were added in OpenSSL 1.0.0.

+ +

COPYRIGHT

+ +

Copyright 2006-2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_set1_RSA.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_set1_RSA.html new file mode 100644 index 00000000..897f8578 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_set1_RSA.html @@ -0,0 +1,135 @@ + + + + +EVP_PKEY_set1_RSA + + + + + + + + + + +

NAME

+ +

EVP_PKEY_set1_RSA, EVP_PKEY_set1_DSA, EVP_PKEY_set1_DH, EVP_PKEY_set1_EC_KEY, EVP_PKEY_get1_RSA, EVP_PKEY_get1_DSA, EVP_PKEY_get1_DH, EVP_PKEY_get1_EC_KEY, EVP_PKEY_get0_RSA, EVP_PKEY_get0_DSA, EVP_PKEY_get0_DH, EVP_PKEY_get0_EC_KEY, EVP_PKEY_assign_RSA, EVP_PKEY_assign_DSA, EVP_PKEY_assign_DH, EVP_PKEY_assign_EC_KEY, EVP_PKEY_assign_POLY1305, EVP_PKEY_assign_SIPHASH, EVP_PKEY_get0_hmac, EVP_PKEY_get0_poly1305, EVP_PKEY_get0_siphash, EVP_PKEY_type, EVP_PKEY_id, EVP_PKEY_base_id, EVP_PKEY_set_alias_type, EVP_PKEY_set1_engine, EVP_PKEY_get0_engine - EVP_PKEY assignment functions

+ +

SYNOPSIS

+ +
#include <openssl/evp.h>
+
+int EVP_PKEY_set1_RSA(EVP_PKEY *pkey, RSA *key);
+int EVP_PKEY_set1_DSA(EVP_PKEY *pkey, DSA *key);
+int EVP_PKEY_set1_DH(EVP_PKEY *pkey, DH *key);
+int EVP_PKEY_set1_EC_KEY(EVP_PKEY *pkey, EC_KEY *key);
+
+RSA *EVP_PKEY_get1_RSA(EVP_PKEY *pkey);
+DSA *EVP_PKEY_get1_DSA(EVP_PKEY *pkey);
+DH *EVP_PKEY_get1_DH(EVP_PKEY *pkey);
+EC_KEY *EVP_PKEY_get1_EC_KEY(EVP_PKEY *pkey);
+
+const unsigned char *EVP_PKEY_get0_hmac(const EVP_PKEY *pkey, size_t *len);
+const unsigned char *EVP_PKEY_get0_poly1305(const EVP_PKEY *pkey, size_t *len);
+const unsigned char *EVP_PKEY_get0_siphash(const EVP_PKEY *pkey, size_t *len);
+RSA *EVP_PKEY_get0_RSA(EVP_PKEY *pkey);
+DSA *EVP_PKEY_get0_DSA(EVP_PKEY *pkey);
+DH *EVP_PKEY_get0_DH(EVP_PKEY *pkey);
+EC_KEY *EVP_PKEY_get0_EC_KEY(EVP_PKEY *pkey);
+
+int EVP_PKEY_assign_RSA(EVP_PKEY *pkey, RSA *key);
+int EVP_PKEY_assign_DSA(EVP_PKEY *pkey, DSA *key);
+int EVP_PKEY_assign_DH(EVP_PKEY *pkey, DH *key);
+int EVP_PKEY_assign_EC_KEY(EVP_PKEY *pkey, EC_KEY *key);
+int EVP_PKEY_assign_POLY1305(EVP_PKEY *pkey, ASN1_OCTET_STRING *key);
+int EVP_PKEY_assign_SIPHASH(EVP_PKEY *pkey, ASN1_OCTET_STRING *key);
+
+int EVP_PKEY_id(const EVP_PKEY *pkey);
+int EVP_PKEY_base_id(const EVP_PKEY *pkey);
+int EVP_PKEY_type(int type);
+int EVP_PKEY_set_alias_type(EVP_PKEY *pkey, int type);
+
+ENGINE *EVP_PKEY_get0_engine(const EVP_PKEY *pkey);
+int EVP_PKEY_set1_engine(EVP_PKEY *pkey, ENGINE *engine);
+ +

DESCRIPTION

+ +

EVP_PKEY_set1_RSA(), EVP_PKEY_set1_DSA(), EVP_PKEY_set1_DH() and EVP_PKEY_set1_EC_KEY() set the key referenced by pkey to key.

+ +

EVP_PKEY_get1_RSA(), EVP_PKEY_get1_DSA(), EVP_PKEY_get1_DH() and EVP_PKEY_get1_EC_KEY() return the referenced key in pkey or NULL if the key is not of the correct type.

+ +

EVP_PKEY_get0_hmac(), EVP_PKEY_get0_poly1305(), EVP_PKEY_get0_siphash(), EVP_PKEY_get0_RSA(), EVP_PKEY_get0_DSA(), EVP_PKEY_get0_DH() and EVP_PKEY_get0_EC_KEY() also return the referenced key in pkey or NULL if the key is not of the correct type but the reference count of the returned key is not incremented and so must not be freed up after use.

+ +

EVP_PKEY_assign_RSA(), EVP_PKEY_assign_DSA(), EVP_PKEY_assign_DH(), EVP_PKEY_assign_EC_KEY(), EVP_PKEY_assign_POLY1305() and EVP_PKEY_assign_SIPHASH() also set the referenced key to key however these use the supplied key internally and so key will be freed when the parent pkey is freed.

+ +

EVP_PKEY_base_id() returns the type of pkey. For example an RSA key will return EVP_PKEY_RSA.

+ +

EVP_PKEY_id() returns the actual OID associated with pkey. Historically keys using the same algorithm could use different OIDs. For example an RSA key could use the OIDs corresponding to the NIDs NID_rsaEncryption (equivalent to EVP_PKEY_RSA) or NID_rsa (equivalent to EVP_PKEY_RSA2). The use of alternative non-standard OIDs is now rare so EVP_PKEY_RSA2 et al are not often seen in practice.

+ +

EVP_PKEY_type() returns the underlying type of the NID type. For example EVP_PKEY_type(EVP_PKEY_RSA2) will return EVP_PKEY_RSA.

+ +

EVP_PKEY_get0_engine() returns a reference to the ENGINE handling pkey.

+ +

EVP_PKEY_set1_engine() sets the ENGINE handling pkey to engine. It must be called after the key algorithm and components are set up. If engine does not include an EVP_PKEY_METHOD for pkey an error occurs.

+ +

EVP_PKEY_set_alias_type() allows modifying a EVP_PKEY to use a different set of algorithms than the default. This is currently used to support SM2 keys, which use an identical encoding to ECDSA.

+ +

NOTES

+ +

In accordance with the OpenSSL naming convention the key obtained from or assigned to the pkey using the 1 functions must be freed as well as pkey.

+ +

EVP_PKEY_assign_RSA(), EVP_PKEY_assign_DSA(), EVP_PKEY_assign_DH(), EVP_PKEY_assign_EC_KEY(), EVP_PKEY_assign_POLY1305() and EVP_PKEY_assign_SIPHASH() are implemented as macros.

+ +

Most applications wishing to know a key type will simply call EVP_PKEY_base_id() and will not care about the actual type: which will be identical in almost all cases.

+ +

Previous versions of this document suggested using EVP_PKEY_type(pkey->type) to determine the type of a key. Since EVP_PKEY is now opaque this is no longer possible: the equivalent is EVP_PKEY_base_id(pkey).

+ +

EVP_PKEY_set1_engine() is typically used by an ENGINE returning an HSM key as part of its routine to load a private key.

+ +

RETURN VALUES

+ +

EVP_PKEY_set1_RSA(), EVP_PKEY_set1_DSA(), EVP_PKEY_set1_DH() and EVP_PKEY_set1_EC_KEY() return 1 for success or 0 for failure.

+ +

EVP_PKEY_get1_RSA(), EVP_PKEY_get1_DSA(), EVP_PKEY_get1_DH() and EVP_PKEY_get1_EC_KEY() return the referenced key or NULL if an error occurred.

+ +

EVP_PKEY_assign_RSA(), EVP_PKEY_assign_DSA(), EVP_PKEY_assign_DH(), EVP_PKEY_assign_EC_KEY(), EVP_PKEY_assign_POLY1305() and EVP_PKEY_assign_SIPHASH() return 1 for success and 0 for failure.

+ +

EVP_PKEY_base_id(), EVP_PKEY_id() and EVP_PKEY_type() return a key type or NID_undef (equivalently EVP_PKEY_NONE) on error.

+ +

EVP_PKEY_set1_engine() returns 1 for success and 0 for failure.

+ +

EVP_PKEY_set_alias_type() returns 1 for success and 0 for error.

+ +

EXAMPLES

+ +

After loading an ECC key, it is possible to convert it to using SM2 algorithms with EVP_PKEY_set_alias_type:

+ +
EVP_PKEY_set_alias_type(pkey, EVP_PKEY_SM2);
+ +

SEE ALSO

+ +

EVP_PKEY_new(3)

+ +

COPYRIGHT

+ +

Copyright 2002-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_sign.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_sign.html new file mode 100644 index 00000000..eb7ef7a7 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_sign.html @@ -0,0 +1,118 @@ + + + + +EVP_PKEY_sign + + + + + + + + + + +

NAME

+ +

EVP_PKEY_sign_init, EVP_PKEY_sign - sign using a public key algorithm

+ +

SYNOPSIS

+ +
#include <openssl/evp.h>
+
+int EVP_PKEY_sign_init(EVP_PKEY_CTX *ctx);
+int EVP_PKEY_sign(EVP_PKEY_CTX *ctx,
+                  unsigned char *sig, size_t *siglen,
+                  const unsigned char *tbs, size_t tbslen);
+ +

DESCRIPTION

+ +

The EVP_PKEY_sign_init() function initializes a public key algorithm context using key pkey for a signing operation.

+ +

The EVP_PKEY_sign() function performs a public key signing operation using ctx. The data to be signed is specified using the tbs and tbslen parameters. If sig is NULL then the maximum size of the output buffer is written to the siglen parameter. If sig is not NULL then before the call the siglen parameter should contain the length of the sig buffer, if the call is successful the signature is written to sig and the amount of data written to siglen.

+ +

NOTES

+ +

EVP_PKEY_sign() does not hash the data to be signed, and therefore is normally used to sign digests. For signing arbitrary messages, see the EVP_DigestSignInit(3) and EVP_SignInit(3) signing interfaces instead.

+ +

After the call to EVP_PKEY_sign_init() algorithm specific control operations can be performed to set any appropriate parameters for the operation (see EVP_PKEY_CTX_ctrl(3)).

+ +

The function EVP_PKEY_sign() can be called more than once on the same context if several operations are performed using the same parameters.

+ +

RETURN VALUES

+ +

EVP_PKEY_sign_init() and EVP_PKEY_sign() return 1 for success and 0 or a negative value for failure. In particular a return value of -2 indicates the operation is not supported by the public key algorithm.

+ +

EXAMPLES

+ +

Sign data using RSA with PKCS#1 padding and SHA256 digest:

+ +
#include <openssl/evp.h>
+#include <openssl/rsa.h>
+
+EVP_PKEY_CTX *ctx;
+/* md is a SHA-256 digest in this example. */
+unsigned char *md, *sig;
+size_t mdlen = 32, siglen;
+EVP_PKEY *signing_key;
+
+/*
+ * NB: assumes signing_key and md are set up before the next
+ * step. signing_key must be an RSA private key and md must
+ * point to the SHA-256 digest to be signed.
+ */
+ctx = EVP_PKEY_CTX_new(signing_key, NULL /* no engine */);
+if (!ctx)
+    /* Error occurred */
+if (EVP_PKEY_sign_init(ctx) <= 0)
+    /* Error */
+if (EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_PKCS1_PADDING) <= 0)
+    /* Error */
+if (EVP_PKEY_CTX_set_signature_md(ctx, EVP_sha256()) <= 0)
+    /* Error */
+
+/* Determine buffer length */
+if (EVP_PKEY_sign(ctx, NULL, &siglen, md, mdlen) <= 0)
+    /* Error */
+
+sig = OPENSSL_malloc(siglen);
+
+if (!sig)
+    /* malloc failure */
+
+if (EVP_PKEY_sign(ctx, sig, &siglen, md, mdlen) <= 0)
+    /* Error */
+
+/* Signature is siglen bytes written to buffer sig */
+ +

SEE ALSO

+ +

EVP_PKEY_CTX_new(3), EVP_PKEY_CTX_ctrl(3), EVP_PKEY_encrypt(3), EVP_PKEY_decrypt(3), EVP_PKEY_verify(3), EVP_PKEY_verify_recover(3), EVP_PKEY_derive(3)

+ +

HISTORY

+ +

These functions were added in OpenSSL 1.0.0.

+ +

COPYRIGHT

+ +

Copyright 2006-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_size.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_size.html new file mode 100644 index 00000000..e6eeb69d --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_size.html @@ -0,0 +1,71 @@ + + + + +EVP_PKEY_size + + + + + + + + + + +

NAME

+ +

EVP_PKEY_size, EVP_PKEY_bits, EVP_PKEY_security_bits - EVP_PKEY information functions

+ +

SYNOPSIS

+ +
#include <openssl/evp.h>
+
+int EVP_PKEY_size(const EVP_PKEY *pkey);
+int EVP_PKEY_bits(const EVP_PKEY *pkey);
+int EVP_PKEY_security_bits(const EVP_PKEY *pkey);
+ +

DESCRIPTION

+ +

EVP_PKEY_size() returns the maximum suitable size for the output buffers for almost all operations that can be done with pkey. The primary documented use is with EVP_SignFinal(3) and EVP_SealInit(3), but it isn't limited there. The returned size is also large enough for the output buffer of EVP_PKEY_sign(3), EVP_PKEY_encrypt(3), EVP_PKEY_decrypt(3), EVP_PKEY_derive(3).

+ +

It must be stressed that, unless the documentation for the operation that's being performed says otherwise, the size returned by EVP_PKEY_size() is only preliminary and not exact, so the final contents of the target buffer may be smaller. It is therefore crucial to take note of the size given back by the function that performs the operation, such as EVP_PKEY_sign(3) (the siglen argument will receive that length), to avoid bugs.

+ +

EVP_PKEY_bits() returns the cryptographic length of the cryptosystem to which the key in pkey belongs, in bits. Note that the definition of cryptographic length is specific to the key cryptosystem.

+ +

EVP_PKEY_security_bits() returns the number of security bits of the given pkey, bits of security is defined in NIST SP800-57.

+ +

RETURN VALUES

+ +

EVP_PKEY_size(), EVP_PKEY_bits() and EVP_PKEY_security_bits() return a positive number, or 0 if this size isn't available.

+ +

NOTES

+ +

Most functions that have an output buffer and are mentioned with EVP_PKEY_size() have a functionality where you can pass NULL for the buffer and still pass a pointer to an integer and get the exact size that this function call delivers in the context that it's called in. This allows those functions to be called twice, once to find out the exact buffer size, then allocate the buffer in between, and call that function again actually output the data. For those functions, it isn't strictly necessary to call EVP_PKEY_size() to find out the buffer size, but may be useful in cases where it's desirable to know the upper limit in advance.

+ +

It should also be especially noted that EVP_PKEY_size() shouldn't be used to get the output size for EVP_DigestSignFinal(), according to "NOTES" in EVP_DigestSignFinal(3).

+ +

SEE ALSO

+ +

EVP_SignFinal(3), EVP_SealInit(3), EVP_PKEY_sign(3), EVP_PKEY_encrypt(3), EVP_PKEY_decrypt(3), EVP_PKEY_derive(3)

+ +

COPYRIGHT

+ +

Copyright 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_verify.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_verify.html new file mode 100644 index 00000000..318aa28d --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_verify.html @@ -0,0 +1,110 @@ + + + + +EVP_PKEY_verify + + + + + + + + + + +

NAME

+ +

EVP_PKEY_verify_init, EVP_PKEY_verify - signature verification using a public key algorithm

+ +

SYNOPSIS

+ +
#include <openssl/evp.h>
+
+int EVP_PKEY_verify_init(EVP_PKEY_CTX *ctx);
+int EVP_PKEY_verify(EVP_PKEY_CTX *ctx,
+                    const unsigned char *sig, size_t siglen,
+                    const unsigned char *tbs, size_t tbslen);
+ +

DESCRIPTION

+ +

The EVP_PKEY_verify_init() function initializes a public key algorithm context using key pkey for a signature verification operation.

+ +

The EVP_PKEY_verify() function performs a public key verification operation using ctx. The signature is specified using the sig and siglen parameters. The verified data (i.e. the data believed originally signed) is specified using the tbs and tbslen parameters.

+ +

NOTES

+ +

After the call to EVP_PKEY_verify_init() algorithm specific control operations can be performed to set any appropriate parameters for the operation.

+ +

The function EVP_PKEY_verify() can be called more than once on the same context if several operations are performed using the same parameters.

+ +

RETURN VALUES

+ +

EVP_PKEY_verify_init() and EVP_PKEY_verify() return 1 if the verification was successful and 0 if it failed. Unlike other functions the return value 0 from EVP_PKEY_verify() only indicates that the signature did not verify successfully (that is tbs did not match the original data or the signature was of invalid form) it is not an indication of a more serious error.

+ +

A negative value indicates an error other that signature verification failure. In particular a return value of -2 indicates the operation is not supported by the public key algorithm.

+ +

EXAMPLES

+ +

Verify signature using PKCS#1 and SHA256 digest:

+ +
#include <openssl/evp.h>
+#include <openssl/rsa.h>
+
+EVP_PKEY_CTX *ctx;
+unsigned char *md, *sig;
+size_t mdlen, siglen;
+EVP_PKEY *verify_key;
+
+/*
+ * NB: assumes verify_key, sig, siglen md and mdlen are already set up
+ * and that verify_key is an RSA public key
+ */
+ctx = EVP_PKEY_CTX_new(verify_key, NULL /* no engine */);
+if (!ctx)
+    /* Error occurred */
+if (EVP_PKEY_verify_init(ctx) <= 0)
+    /* Error */
+if (EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_PKCS1_PADDING) <= 0)
+    /* Error */
+if (EVP_PKEY_CTX_set_signature_md(ctx, EVP_sha256()) <= 0)
+    /* Error */
+
+/* Perform operation */
+ret = EVP_PKEY_verify(ctx, sig, siglen, md, mdlen);
+
+/*
+ * ret == 1 indicates success, 0 verify failure and < 0 for some
+ * other error.
+ */
+ +

SEE ALSO

+ +

EVP_PKEY_CTX_new(3), EVP_PKEY_encrypt(3), EVP_PKEY_decrypt(3), EVP_PKEY_sign(3), EVP_PKEY_verify_recover(3), EVP_PKEY_derive(3)

+ +

HISTORY

+ +

These functions were added in OpenSSL 1.0.0.

+ +

COPYRIGHT

+ +

Copyright 2006-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_verify_recover.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_verify_recover.html new file mode 100644 index 00000000..4accc148 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_PKEY_verify_recover.html @@ -0,0 +1,118 @@ + + + + +EVP_PKEY_verify_recover + + + + + + + + + + +

NAME

+ +

EVP_PKEY_verify_recover_init, EVP_PKEY_verify_recover - recover signature using a public key algorithm

+ +

SYNOPSIS

+ +
#include <openssl/evp.h>
+
+int EVP_PKEY_verify_recover_init(EVP_PKEY_CTX *ctx);
+int EVP_PKEY_verify_recover(EVP_PKEY_CTX *ctx,
+                            unsigned char *rout, size_t *routlen,
+                            const unsigned char *sig, size_t siglen);
+ +

DESCRIPTION

+ +

The EVP_PKEY_verify_recover_init() function initializes a public key algorithm context using key pkey for a verify recover operation.

+ +

The EVP_PKEY_verify_recover() function recovers signed data using ctx. The signature is specified using the sig and siglen parameters. If rout is NULL then the maximum size of the output buffer is written to the routlen parameter. If rout is not NULL then before the call the routlen parameter should contain the length of the rout buffer, if the call is successful recovered data is written to rout and the amount of data written to routlen.

+ +

NOTES

+ +

Normally an application is only interested in whether a signature verification operation is successful in those cases the EVP_verify() function should be used.

+ +

Sometimes however it is useful to obtain the data originally signed using a signing operation. Only certain public key algorithms can recover a signature in this way (for example RSA in PKCS padding mode).

+ +

After the call to EVP_PKEY_verify_recover_init() algorithm specific control operations can be performed to set any appropriate parameters for the operation.

+ +

The function EVP_PKEY_verify_recover() can be called more than once on the same context if several operations are performed using the same parameters.

+ +

RETURN VALUES

+ +

EVP_PKEY_verify_recover_init() and EVP_PKEY_verify_recover() return 1 for success and 0 or a negative value for failure. In particular a return value of -2 indicates the operation is not supported by the public key algorithm.

+ +

EXAMPLES

+ +

Recover digest originally signed using PKCS#1 and SHA256 digest:

+ +
#include <openssl/evp.h>
+#include <openssl/rsa.h>
+
+EVP_PKEY_CTX *ctx;
+unsigned char *rout, *sig;
+size_t routlen, siglen;
+EVP_PKEY *verify_key;
+
+/*
+ * NB: assumes verify_key, sig and siglen are already set up
+ * and that verify_key is an RSA public key
+ */
+ctx = EVP_PKEY_CTX_new(verify_key, NULL /* no engine */);
+if (!ctx)
+    /* Error occurred */
+if (EVP_PKEY_verify_recover_init(ctx) <= 0)
+    /* Error */
+if (EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_PKCS1_PADDING) <= 0)
+    /* Error */
+if (EVP_PKEY_CTX_set_signature_md(ctx, EVP_sha256()) <= 0)
+    /* Error */
+
+/* Determine buffer length */
+if (EVP_PKEY_verify_recover(ctx, NULL, &routlen, sig, siglen) <= 0)
+    /* Error */
+
+rout = OPENSSL_malloc(routlen);
+
+if (!rout)
+    /* malloc failure */
+
+if (EVP_PKEY_verify_recover(ctx, rout, &routlen, sig, siglen) <= 0)
+    /* Error */
+
+/* Recovered data is routlen bytes written to buffer rout */
+ +

SEE ALSO

+ +

EVP_PKEY_CTX_new(3), EVP_PKEY_encrypt(3), EVP_PKEY_decrypt(3), EVP_PKEY_sign(3), EVP_PKEY_verify(3), EVP_PKEY_derive(3)

+ +

HISTORY

+ +

These functions were added in OpenSSL 1.0.0.

+ +

COPYRIGHT

+ +

Copyright 2013-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_SealInit.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_SealInit.html new file mode 100644 index 00000000..670bea7b --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_SealInit.html @@ -0,0 +1,82 @@ + + + + +EVP_SealInit + + + + + + + + + + +

NAME

+ +

EVP_SealInit, EVP_SealUpdate, EVP_SealFinal - EVP envelope encryption

+ +

SYNOPSIS

+ +
#include <openssl/evp.h>
+
+int EVP_SealInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type,
+                 unsigned char **ek, int *ekl, unsigned char *iv,
+                 EVP_PKEY **pubk, int npubk);
+int EVP_SealUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out,
+                   int *outl, unsigned char *in, int inl);
+int EVP_SealFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl);
+ +

DESCRIPTION

+ +

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.

+ +

EVP_SealInit() initializes a cipher context ctx for encryption with cipher type using a random secret key and IV. type is normally supplied by a function such as EVP_aes_256_cbc(). The secret key is encrypted using one or more public keys, this allows the same encrypted data to be decrypted using any of the corresponding private keys. ek is an array of buffers where the public key encrypted secret key will be written, each buffer must contain enough room for the corresponding encrypted key: that is ek[i] must have room for EVP_PKEY_size(pubk[i]) bytes. The actual size of each encrypted secret key is written to the array ekl. pubk is an array of npubk public keys.

+ +

The iv parameter is a buffer where the generated IV is written to. It must contain enough room for the corresponding cipher's IV, as determined by (for example) EVP_CIPHER_iv_length(type).

+ +

If the cipher does not require an IV then the iv parameter is ignored and can be NULL.

+ +

EVP_SealUpdate() and EVP_SealFinal() have exactly the same properties as the EVP_EncryptUpdate() and EVP_EncryptFinal() routines, as documented on the EVP_EncryptInit(3) manual page.

+ +

RETURN VALUES

+ +

EVP_SealInit() returns 0 on error or npubk if successful.

+ +

EVP_SealUpdate() and EVP_SealFinal() return 1 for success and 0 for failure.

+ +

NOTES

+ +

Because a random secret key is generated the random number generator must be seeded when EVP_SealInit() is called. If the automatic seeding or reseeding of the OpenSSL CSPRNG fails due to external circumstances (see RAND(7)), the operation will fail.

+ +

The public key must be RSA because it is the only OpenSSL public key algorithm that supports key transport.

+ +

Envelope encryption is the usual method of using public key encryption on large amounts of data, this is because public key encryption is slow but symmetric encryption is fast. So symmetric encryption is used for bulk encryption and the small random symmetric key used is transferred using public key encryption.

+ +

It is possible to call EVP_SealInit() twice in the same way as EVP_EncryptInit(). The first call should have npubk set to 0 and (after setting any cipher parameters) it should be called again with type set to NULL.

+ +

SEE ALSO

+ +

evp(7), RAND_bytes(3), EVP_EncryptInit(3), EVP_OpenInit(3), RAND(7)

+ +

COPYRIGHT

+ +

Copyright 2000-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_SignInit.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_SignInit.html new file mode 100644 index 00000000..6821f115 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_SignInit.html @@ -0,0 +1,92 @@ + + + + +EVP_SignInit + + + + + + + + + + +

NAME

+ +

EVP_SignInit, EVP_SignInit_ex, EVP_SignUpdate, EVP_SignFinal - EVP signing functions

+ +

SYNOPSIS

+ +
#include <openssl/evp.h>
+
+int EVP_SignInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type, ENGINE *impl);
+int EVP_SignUpdate(EVP_MD_CTX *ctx, const void *d, unsigned int cnt);
+int EVP_SignFinal(EVP_MD_CTX *ctx, unsigned char *sig, unsigned int *s, EVP_PKEY *pkey);
+
+void EVP_SignInit(EVP_MD_CTX *ctx, const EVP_MD *type);
+ +

DESCRIPTION

+ +

The EVP signature routines are a high level interface to digital signatures.

+ +

EVP_SignInit_ex() sets up signing context ctx to use digest type from ENGINE impl. ctx must be created with EVP_MD_CTX_new() before calling this function.

+ +

EVP_SignUpdate() hashes cnt bytes of data at d into the signature context ctx. This function can be called several times on the same ctx to include additional data.

+ +

EVP_SignFinal() signs the data in ctx using the private key pkey and places the signature in sig. sig must be at least EVP_PKEY_size(pkey) bytes in size. s is an OUT parameter, and not used as an IN parameter. The number of bytes of data written (i.e. the length of the signature) will be written to the integer at s, at most EVP_PKEY_size(pkey) bytes will be written.

+ +

EVP_SignInit() initializes a signing context ctx to use the default implementation of digest type.

+ +

RETURN VALUES

+ +

EVP_SignInit_ex(), EVP_SignUpdate() and EVP_SignFinal() return 1 for success and 0 for failure.

+ +

The error codes can be obtained by ERR_get_error(3).

+ +

NOTES

+ +

The EVP interface to digital signatures should almost always be used in 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. If the automatic seeding or reseeding of the OpenSSL CSPRNG fails due to external circumstances (see RAND(7)), the operation will fail. This requirement does not hold for RSA signatures.

+ +

The call to EVP_SignFinal() internally finalizes a copy of the digest context. This means that calls to EVP_SignUpdate() and EVP_SignFinal() can be called later to digest and sign additional data.

+ +

Since only a copy of the digest context is ever finalized the context must be cleaned up after use by calling EVP_MD_CTX_free() or a memory leak will occur.

+ +

BUGS

+ +

Older versions of this documentation wrongly stated that calls to EVP_SignUpdate() could not be made after calling EVP_SignFinal().

+ +

Since the private key is passed in the call to EVP_SignFinal() any error relating to the private key (for example an unsuitable key and digest combination) will not be indicated until after potentially large amounts of data have been passed through EVP_SignUpdate().

+ +

It is not possible to change the signing parameters using these function.

+ +

The previous two bugs are fixed in the newer EVP_SignDigest*() function.

+ +

SEE ALSO

+ +

EVP_PKEY_size(3), EVP_PKEY_bits(3), EVP_PKEY_security_bits(3), EVP_VerifyInit(3), EVP_DigestInit(3), evp(7), HMAC(3), MD2(3), MD5(3), MDC2(3), RIPEMD160(3), SHA1(3), dgst(1)

+ +

COPYRIGHT

+ +

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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_VerifyInit.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_VerifyInit.html new file mode 100644 index 00000000..8a0d589f --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_VerifyInit.html @@ -0,0 +1,93 @@ + + + + +EVP_VerifyInit + + + + + + + + + + +

NAME

+ +

EVP_VerifyInit_ex, EVP_VerifyInit, EVP_VerifyUpdate, EVP_VerifyFinal - EVP signature verification functions

+ +

SYNOPSIS

+ +
#include <openssl/evp.h>
+
+int EVP_VerifyInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type, ENGINE *impl);
+int EVP_VerifyUpdate(EVP_MD_CTX *ctx, const void *d, unsigned int cnt);
+int EVP_VerifyFinal(EVP_MD_CTX *ctx, unsigned char *sigbuf, unsigned int siglen,
+                    EVP_PKEY *pkey);
+
+int EVP_VerifyInit(EVP_MD_CTX *ctx, const EVP_MD *type);
+ +

DESCRIPTION

+ +

The EVP signature verification routines are a high level interface to digital signatures.

+ +

EVP_VerifyInit_ex() sets up verification context ctx to use digest type from ENGINE impl. ctx must be created by calling EVP_MD_CTX_new() before calling this function.

+ +

EVP_VerifyUpdate() hashes cnt bytes of data at d into the verification context ctx. This function can be called several times on the same ctx to include additional data.

+ +

EVP_VerifyFinal() verifies the data in ctx using the public key pkey and against the siglen bytes at sigbuf.

+ +

EVP_VerifyInit() initializes verification context ctx to use the default implementation of digest type.

+ +

RETURN VALUES

+ +

EVP_VerifyInit_ex() and EVP_VerifyUpdate() return 1 for success and 0 for failure.

+ +

EVP_VerifyFinal() returns 1 for a correct signature, 0 for failure and -1 if some other error occurred.

+ +

The error codes can be obtained by ERR_get_error(3).

+ +

NOTES

+ +

The EVP interface to digital signatures should almost always be used in 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. This means that calls to EVP_VerifyUpdate() and EVP_VerifyFinal() can be called later to digest and verify additional data.

+ +

Since only a copy of the digest context is ever finalized the context must be cleaned up after use by calling EVP_MD_CTX_free() or a memory leak will occur.

+ +

BUGS

+ +

Older versions of this documentation wrongly stated that calls to EVP_VerifyUpdate() could not be made after calling EVP_VerifyFinal().

+ +

Since the public key is passed in the call to EVP_SignFinal() any error relating to the private key (for example an unsuitable key and digest combination) will not be indicated until after potentially large amounts of data have been passed through EVP_SignUpdate().

+ +

It is not possible to change the signing parameters using these function.

+ +

The previous two bugs are fixed in the newer EVP_DigestVerify*() function.

+ +

SEE ALSO

+ +

evp(7), EVP_SignInit(3), EVP_DigestInit(3), evp(7), HMAC(3), MD2(3), MD5(3), MDC2(3), RIPEMD160(3), SHA1(3), dgst(1)

+ +

COPYRIGHT

+ +

Copyright 2000-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_aes.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_aes.html new file mode 100644 index 00000000..c14b857c --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_aes.html @@ -0,0 +1,108 @@ + + + + +EVP_aes + + + + + + + + + + +

NAME

+ +

EVP_aes_128_cbc, EVP_aes_192_cbc, EVP_aes_256_cbc, EVP_aes_128_cfb, EVP_aes_192_cfb, EVP_aes_256_cfb, EVP_aes_128_cfb1, EVP_aes_192_cfb1, EVP_aes_256_cfb1, EVP_aes_128_cfb8, EVP_aes_192_cfb8, EVP_aes_256_cfb8, EVP_aes_128_cfb128, EVP_aes_192_cfb128, EVP_aes_256_cfb128, EVP_aes_128_ctr, EVP_aes_192_ctr, EVP_aes_256_ctr, EVP_aes_128_ecb, EVP_aes_192_ecb, EVP_aes_256_ecb, EVP_aes_128_ofb, EVP_aes_192_ofb, EVP_aes_256_ofb, EVP_aes_128_cbc_hmac_sha1, EVP_aes_256_cbc_hmac_sha1, EVP_aes_128_cbc_hmac_sha256, EVP_aes_256_cbc_hmac_sha256, EVP_aes_128_ccm, EVP_aes_192_ccm, EVP_aes_256_ccm, EVP_aes_128_gcm, EVP_aes_192_gcm, EVP_aes_256_gcm, EVP_aes_128_ocb, EVP_aes_192_ocb, EVP_aes_256_ocb, EVP_aes_128_wrap, EVP_aes_192_wrap, EVP_aes_256_wrap, EVP_aes_128_wrap_pad, EVP_aes_192_wrap_pad, EVP_aes_256_wrap_pad, EVP_aes_128_xts, EVP_aes_256_xts - EVP AES cipher

+ +

SYNOPSIS

+ +
#include <openssl/evp.h>
+
+const EVP_CIPHER *EVP_ciphername(void)
+ +

EVP_ciphername is used a placeholder for any of the described cipher functions, such as EVP_aes_128_cbc.

+ +

DESCRIPTION

+ +

The AES encryption algorithm for EVP.

+ +
+ +
EVP_aes_128_cbc(), EVP_aes_192_cbc(), EVP_aes_256_cbc(), EVP_aes_128_cfb(), EVP_aes_192_cfb(), EVP_aes_256_cfb(), EVP_aes_128_cfb1(), EVP_aes_192_cfb1(), EVP_aes_256_cfb1(), EVP_aes_128_cfb8(), EVP_aes_192_cfb8(), EVP_aes_256_cfb8(), EVP_aes_128_cfb128(), EVP_aes_192_cfb128(), EVP_aes_256_cfb128(), EVP_aes_128_ctr(), EVP_aes_192_ctr(), EVP_aes_256_ctr(), EVP_aes_128_ecb(), EVP_aes_192_ecb(), EVP_aes_256_ecb(), EVP_aes_128_ofb(), EVP_aes_192_ofb(), EVP_aes_256_ofb()
+
+ +

AES for 128, 192 and 256 bit keys in the following modes: CBC, CFB with 128-bit shift, CFB with 1-bit shift, CFB with 8-bit shift, CTR, ECB, and OFB.

+ +
+
EVP_aes_128_cbc_hmac_sha1(), EVP_aes_256_cbc_hmac_sha1()
+
+ +

Authenticated encryption with AES in CBC mode using SHA-1 as HMAC, with keys of 128 and 256 bits length respectively. The authentication tag is 160 bits long.

+ +

WARNING: this is not intended for usage outside of TLS and requires calling of some undocumented ctrl functions. These ciphers do not conform to the EVP AEAD interface.

+ +
+
EVP_aes_128_cbc_hmac_sha256(), EVP_aes_256_cbc_hmac_sha256()
+
+ +

Authenticated encryption with AES in CBC mode using SHA256 (SHA-2, 256-bits) as HMAC, with keys of 128 and 256 bits length respectively. The authentication tag is 256 bits long.

+ +

WARNING: this is not intended for usage outside of TLS and requires calling of some undocumented ctrl functions. These ciphers do not conform to the EVP AEAD interface.

+ +
+
EVP_aes_128_ccm(), EVP_aes_192_ccm(), EVP_aes_256_ccm(), EVP_aes_128_gcm(), EVP_aes_192_gcm(), EVP_aes_256_gcm(), EVP_aes_128_ocb(), EVP_aes_192_ocb(), EVP_aes_256_ocb()
+
+ +

AES for 128, 192 and 256 bit keys in CBC-MAC Mode (CCM), Galois Counter Mode (GCM) and OCB Mode respectively. These ciphers require additional control operations to function correctly, see the "AEAD Interface" in EVP_EncryptInit(3) section for details.

+ +
+
EVP_aes_128_wrap(), EVP_aes_192_wrap(), EVP_aes_256_wrap(), EVP_aes_128_wrap_pad(), EVP_aes_128_wrap(), EVP_aes_192_wrap(), EVP_aes_256_wrap(), EVP_aes_192_wrap_pad(), EVP_aes_128_wrap(), EVP_aes_192_wrap(), EVP_aes_256_wrap(), EVP_aes_256_wrap_pad()
+
+ +

AES key wrap with 128, 192 and 256 bit keys, as according to RFC 3394 section 2.2.1 ("wrap") and RFC 5649 section 4.1 ("wrap with padding") respectively.

+ +
+
EVP_aes_128_xts(), EVP_aes_256_xts()
+
+ +

AES XTS mode (XTS-AES) is standardized in IEEE Std. 1619-2007 and described in NIST SP 800-38E. The XTS (XEX-based tweaked-codebook mode with ciphertext stealing) mode was designed by Prof. Phillip Rogaway of University of California, Davis, intended for encrypting data on a storage device.

+ +

XTS-AES provides confidentiality but not authentication of data. It also requires a key of double-length for protection of a certain key size. In particular, XTS-AES-128 (EVP_aes_128_xts) takes input of a 256-bit key to achieve AES 128-bit security, and XTS-AES-256 (EVP_aes_256_xts) takes input of a 512-bit key to achieve AES 256-bit security.

+ +

The XTS implementation in OpenSSL does not support streaming. That is there must only be one EVP_EncryptUpdate(3) call per EVP_EncryptInit_ex(3) call (and similarly with the "Decrypt" functions).

+ +

The iv parameter to EVP_EncryptInit_ex(3) or EVP_DecryptInit_ex(3) is the XTS "tweak" value.

+ +
+
+ +

RETURN VALUES

+ +

These functions return an EVP_CIPHER structure that contains the implementation of the symmetric cipher. See EVP_CIPHER_meth_new(3) for details of the EVP_CIPHER structure.

+ +

SEE ALSO

+ +

evp(7), EVP_EncryptInit(3), EVP_CIPHER_meth_new(3)

+ +

COPYRIGHT

+ +

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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_aria.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_aria.html new file mode 100644 index 00000000..55948541 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_aria.html @@ -0,0 +1,74 @@ + + + + +EVP_aria + + + + + + + + + + +

NAME

+ +

EVP_aria_128_cbc, EVP_aria_192_cbc, EVP_aria_256_cbc, EVP_aria_128_cfb, EVP_aria_192_cfb, EVP_aria_256_cfb, EVP_aria_128_cfb1, EVP_aria_192_cfb1, EVP_aria_256_cfb1, EVP_aria_128_cfb8, EVP_aria_192_cfb8, EVP_aria_256_cfb8, EVP_aria_128_cfb128, EVP_aria_192_cfb128, EVP_aria_256_cfb128, EVP_aria_128_ctr, EVP_aria_192_ctr, EVP_aria_256_ctr, EVP_aria_128_ecb, EVP_aria_192_ecb, EVP_aria_256_ecb, EVP_aria_128_ofb, EVP_aria_192_ofb, EVP_aria_256_ofb, EVP_aria_128_ccm, EVP_aria_192_ccm, EVP_aria_256_ccm, EVP_aria_128_gcm, EVP_aria_192_gcm, EVP_aria_256_gcm, - EVP ARIA cipher

+ +

SYNOPSIS

+ +
#include <openssl/evp.h>
+
+const EVP_CIPHER *EVP_ciphername(void)
+ +

EVP_ciphername is used a placeholder for any of the described cipher functions, such as EVP_aria_128_cbc.

+ +

DESCRIPTION

+ +

The ARIA encryption algorithm for EVP.

+ +
+ +
EVP_aria_128_cbc(), EVP_aria_192_cbc(), EVP_aria_256_cbc(), EVP_aria_128_cfb(), EVP_aria_192_cfb(), EVP_aria_256_cfb(), EVP_aria_128_cfb1(), EVP_aria_192_cfb1(), EVP_aria_256_cfb1(), EVP_aria_128_cfb8(), EVP_aria_192_cfb8(), EVP_aria_256_cfb8(), EVP_aria_128_cfb128(), EVP_aria_192_cfb128(), EVP_aria_256_cfb128(), EVP_aria_128_ctr(), EVP_aria_192_ctr(), EVP_aria_256_ctr(), EVP_aria_128_ecb(), EVP_aria_192_ecb(), EVP_aria_256_ecb(), EVP_aria_128_ofb(), EVP_aria_192_ofb(), EVP_aria_256_ofb()
+
+ +

ARIA for 128, 192 and 256 bit keys in the following modes: CBC, CFB with 128-bit shift, CFB with 1-bit shift, CFB with 8-bit shift, CTR, ECB and OFB.

+ +
+
EVP_aria_128_ccm(), EVP_aria_192_ccm(), EVP_aria_256_ccm(), EVP_aria_128_gcm(), EVP_aria_192_gcm(), EVP_aria_256_gcm(),
+
+ +

ARIA for 128, 192 and 256 bit keys in CBC-MAC Mode (CCM) and Galois Counter Mode (GCM). These ciphers require additional control operations to function correctly, see the "AEAD Interface" in EVP_EncryptInit(3) section for details.

+ +
+
+ +

RETURN VALUES

+ +

These functions return an EVP_CIPHER structure that contains the implementation of the symmetric cipher. See EVP_CIPHER_meth_new(3) for details of the EVP_CIPHER structure.

+ +

SEE ALSO

+ +

evp(7), EVP_EncryptInit(3), EVP_CIPHER_meth_new(3)

+ +

COPYRIGHT

+ +

Copyright 2017-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_bf_cbc.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_bf_cbc.html new file mode 100644 index 00000000..4c6303ad --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_bf_cbc.html @@ -0,0 +1,72 @@ + + + + +EVP_bf_cbc + + + + + + + + + + +

NAME

+ +

EVP_bf_cbc, EVP_bf_cfb, EVP_bf_cfb64, EVP_bf_ecb, EVP_bf_ofb - EVP Blowfish cipher

+ +

SYNOPSIS

+ +
#include <openssl/evp.h>
+
+const EVP_CIPHER *EVP_bf_cbc(void)
+const EVP_CIPHER *EVP_bf_cfb(void)
+const EVP_CIPHER *EVP_bf_cfb64(void)
+const EVP_CIPHER *EVP_bf_ecb(void)
+const EVP_CIPHER *EVP_bf_ofb(void)
+ +

DESCRIPTION

+ +

The Blowfish encryption algorithm for EVP.

+ +

This is a variable key length cipher.

+ +
+ +
EVP_bf_cbc(), EVP_bf_cfb(), EVP_bf_cfb64(), EVP_bf_ecb(), EVP_bf_ofb()
+
+ +

Blowfish encryption algorithm in CBC, CFB, ECB and OFB modes respectively.

+ +
+
+ +

RETURN VALUES

+ +

These functions return an EVP_CIPHER structure that contains the implementation of the symmetric cipher. See EVP_CIPHER_meth_new(3) for details of the EVP_CIPHER structure.

+ +

SEE ALSO

+ +

evp(7), EVP_EncryptInit(3), EVP_CIPHER_meth_new(3)

+ +

COPYRIGHT

+ +

Copyright 2017-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_blake2b512.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_blake2b512.html new file mode 100644 index 00000000..39dee2b0 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_blake2b512.html @@ -0,0 +1,83 @@ + + + + +EVP_blake2b512 + + + + + + + + + + +

NAME

+ +

EVP_blake2b512, EVP_blake2s256 - BLAKE2 For EVP

+ +

SYNOPSIS

+ +
#include <openssl/evp.h>
+
+const EVP_MD *EVP_blake2b512(void);
+const EVP_MD *EVP_blake2s256(void);
+ +

DESCRIPTION

+ +

BLAKE2 is an improved version of BLAKE, which was submitted to the NIST SHA-3 algorithm competition. The BLAKE2s and BLAKE2b algorithms are described in RFC 7693.

+ +
+ +
EVP_blake2s256()
+
+ +

The BLAKE2s algorithm that produces a 256-bit output from a given input.

+ +
+
EVP_blake2b512()
+
+ +

The BLAKE2b algorithm that produces a 512-bit output from a given input.

+ +
+
+ +

RETURN VALUES

+ +

These functions return a EVP_MD structure that contains the implementation of the symmetric cipher. See EVP_MD_meth_new(3) for details of the EVP_MD structure.

+ +

CONFORMING TO

+ +

RFC 7693.

+ +

NOTES

+ +

While the BLAKE2b and BLAKE2s algorithms supports a variable length digest, this implementation outputs a digest of a fixed length (the maximum length supported), which is 512-bits for BLAKE2b and 256-bits for BLAKE2s.

+ +

SEE ALSO

+ +

evp(7), EVP_DigestInit(3)

+ +

COPYRIGHT

+ +

Copyright 2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_camellia.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_camellia.html new file mode 100644 index 00000000..c6eff3a1 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_camellia.html @@ -0,0 +1,68 @@ + + + + +EVP_camellia + + + + + + + + + + +

NAME

+ +

EVP_camellia_128_cbc, EVP_camellia_192_cbc, EVP_camellia_256_cbc, EVP_camellia_128_cfb, EVP_camellia_192_cfb, EVP_camellia_256_cfb, EVP_camellia_128_cfb1, EVP_camellia_192_cfb1, EVP_camellia_256_cfb1, EVP_camellia_128_cfb8, EVP_camellia_192_cfb8, EVP_camellia_256_cfb8, EVP_camellia_128_cfb128, EVP_camellia_192_cfb128, EVP_camellia_256_cfb128, EVP_camellia_128_ctr, EVP_camellia_192_ctr, EVP_camellia_256_ctr, EVP_camellia_128_ecb, EVP_camellia_192_ecb, EVP_camellia_256_ecb, EVP_camellia_128_ofb, EVP_camellia_192_ofb, EVP_camellia_256_ofb - EVP Camellia cipher

+ +

SYNOPSIS

+ +
#include <openssl/evp.h>
+
+const EVP_CIPHER *EVP_ciphername(void)
+ +

EVP_ciphername is used a placeholder for any of the described cipher functions, such as EVP_camellia_128_cbc.

+ +

DESCRIPTION

+ +

The Camellia encryption algorithm for EVP.

+ +
+ +
EVP_camellia_128_cbc(), EVP_camellia_192_cbc(), EVP_camellia_256_cbc(), EVP_camellia_128_cfb(), EVP_camellia_192_cfb(), EVP_camellia_256_cfb(), EVP_camellia_128_cfb1(), EVP_camellia_192_cfb1(), EVP_camellia_256_cfb1(), EVP_camellia_128_cfb8(), EVP_camellia_192_cfb8(), EVP_camellia_256_cfb8(), EVP_camellia_128_cfb128(), EVP_camellia_192_cfb128(), EVP_camellia_256_cfb128(), EVP_camellia_128_ctr(), EVP_camellia_192_ctr(), EVP_camellia_256_ctr(), EVP_camellia_128_ecb(), EVP_camellia_192_ecb(), EVP_camellia_256_ecb(), EVP_camellia_128_ofb(), EVP_camellia_192_ofb(), EVP_camellia_256_ofb()
+
+ +

Camellia for 128, 192 and 256 bit keys in the following modes: CBC, CFB with 128-bit shift, CFB with 1-bit shift, CFB with 8-bit shift, CTR, ECB and OFB.

+ +
+
+ +

RETURN VALUES

+ +

These functions return an EVP_CIPHER structure that contains the implementation of the symmetric cipher. See EVP_CIPHER_meth_new(3) for details of the EVP_CIPHER structure.

+ +

SEE ALSO

+ +

evp(7), EVP_EncryptInit(3), EVP_CIPHER_meth_new(3)

+ +

COPYRIGHT

+ +

Copyright 2017-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_cast5_cbc.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_cast5_cbc.html new file mode 100644 index 00000000..a1c37dda --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_cast5_cbc.html @@ -0,0 +1,72 @@ + + + + +EVP_cast5_cbc + + + + + + + + + + +

NAME

+ +

EVP_cast5_cbc, EVP_cast5_cfb, EVP_cast5_cfb64, EVP_cast5_ecb, EVP_cast5_ofb - EVP CAST cipher

+ +

SYNOPSIS

+ +
#include <openssl/evp.h>
+
+const EVP_CIPHER *EVP_cast5_cbc(void)
+const EVP_CIPHER *EVP_cast5_cfb(void)
+const EVP_CIPHER *EVP_cast5_cfb64(void)
+const EVP_CIPHER *EVP_cast5_ecb(void)
+const EVP_CIPHER *EVP_cast5_ofb(void)
+ +

DESCRIPTION

+ +

The CAST encryption algorithm for EVP.

+ +

This is a variable key length cipher.

+ +
+ +
EVP_cast5_cbc(), EVP_cast5_ecb(), EVP_cast5_cfb(), EVP_cast5_cfb64(), EVP_cast5_ofb()
+
+ +

CAST encryption algorithm in CBC, ECB, CFB and OFB modes respectively.

+ +
+
+ +

RETURN VALUES

+ +

These functions return an EVP_CIPHER structure that contains the implementation of the symmetric cipher. See EVP_CIPHER_meth_new(3) for details of the EVP_CIPHER structure.

+ +

SEE ALSO

+ +

evp(7), EVP_EncryptInit(3), EVP_CIPHER_meth_new(3)

+ +

COPYRIGHT

+ +

Copyright 2017-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_chacha20.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_chacha20.html new file mode 100644 index 00000000..51ae0af4 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_chacha20.html @@ -0,0 +1,79 @@ + + + + +EVP_chacha20 + + + + + + + + + + +

NAME

+ +

EVP_chacha20, EVP_chacha20_poly1305 - EVP ChaCha20 stream cipher

+ +

SYNOPSIS

+ +
#include <openssl/evp.h>
+
+const EVP_CIPHER *EVP_chacha20(void)
+const EVP_CIPHER *EVP_chacha20_poly1305(void)
+ +

DESCRIPTION

+ +

The ChaCha20 stream cipher for EVP.

+ +
+ +
EVP_chacha20()
+
+ +

The ChaCha20 stream cipher. The key length is 256 bits, the IV is 128 bits long. The first 32 bits consists of a counter in little-endian order followed by a 96 bit nonce. For example a nonce of:

+ +

000000000000000000000002

+ +

With an initial counter of 42 (2a in hex) would be expressed as:

+ +

2a000000000000000000000000000002

+ +
+
EVP_chacha20_poly1305()
+
+ +

Authenticated encryption with ChaCha20-Poly1305. Like EVP_chacha20(), the key is 256 bits and the IV is 96 bits. This supports additional authenticated data (AAD) and produces a 128-bit authentication tag. See the "AEAD Interface" in EVP_EncryptInit(3) section for more information.

+ +
+
+ +

RETURN VALUES

+ +

These functions return an EVP_CIPHER structure that contains the implementation of the symmetric cipher. See EVP_CIPHER_meth_new(3) for details of the EVP_CIPHER structure.

+ +

SEE ALSO

+ +

evp(7), EVP_EncryptInit(3), EVP_CIPHER_meth_new(3)

+ +

COPYRIGHT

+ +

Copyright 2017-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_des.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_des.html new file mode 100644 index 00000000..d463a0db --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_des.html @@ -0,0 +1,86 @@ + + + + +EVP_des + + + + + + + + + + +

NAME

+ +

EVP_des_cbc, EVP_des_cfb, EVP_des_cfb1, EVP_des_cfb8, EVP_des_cfb64, EVP_des_ecb, EVP_des_ofb, EVP_des_ede, EVP_des_ede_cbc, EVP_des_ede_cfb, EVP_des_ede_cfb64, EVP_des_ede_ecb, EVP_des_ede_ofb, EVP_des_ede3, EVP_des_ede3_cbc, EVP_des_ede3_cfb, EVP_des_ede3_cfb1, EVP_des_ede3_cfb8, EVP_des_ede3_cfb64, EVP_des_ede3_ecb, EVP_des_ede3_ofb, EVP_des_ede3_wrap - EVP DES cipher

+ +

SYNOPSIS

+ +
#include <openssl/evp.h>
+
+const EVP_CIPHER *EVP_ciphername(void)
+ +

EVP_ciphername is used a placeholder for any of the described cipher functions, such as EVP_des_cbc.

+ +

DESCRIPTION

+ +

The DES encryption algorithm for EVP.

+ +
+ +
EVP_des_cbc(), EVP_des_ecb(), EVP_des_cfb(), EVP_des_cfb1(), EVP_des_cfb8(), EVP_des_cfb64(), EVP_des_ofb()
+
+ +

DES in CBC, ECB, CFB with 64-bit shift, CFB with 1-bit shift, CFB with 8-bit shift and OFB modes.

+ +
+
EVP_des_ede(), EVP_des_ede_cbc(), EVP_des_ede_cfb(), EVP_des_ede_cfb64(), EVP_des_ede_ecb(), EVP_des_ede_ofb()
+
+ +

Two key triple DES in ECB, CBC, CFB with 64-bit shift and OFB modes.

+ +
+
EVP_des_ede3(), EVP_des_ede3_cbc(), EVP_des_ede3_cfb(), EVP_des_ede3_cfb1(), EVP_des_ede3_cfb8(), EVP_des_ede3_cfb64(), EVP_des_ede3_ecb(), EVP_des_ede3_ofb()
+
+ +

Three-key triple DES in ECB, CBC, CFB with 64-bit shift, CFB with 1-bit shift, CFB with 8-bit shift and OFB modes.

+ +
+
EVP_des_ede3_wrap()
+
+ +

Triple-DES key wrap according to RFC 3217 Section 3.

+ +
+
+ +

RETURN VALUES

+ +

These functions return an EVP_CIPHER structure that contains the implementation of the symmetric cipher. See EVP_CIPHER_meth_new(3) for details of the EVP_CIPHER structure.

+ +

SEE ALSO

+ +

evp(7), EVP_EncryptInit(3), EVP_CIPHER_meth_new(3)

+ +

COPYRIGHT

+ +

Copyright 2017-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_desx_cbc.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_desx_cbc.html new file mode 100644 index 00000000..db5ba954 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_desx_cbc.html @@ -0,0 +1,68 @@ + + + + +EVP_desx_cbc + + + + + + + + + + +

NAME

+ +

EVP_desx_cbc - EVP DES-X cipher

+ +

SYNOPSIS

+ +
#include <openssl/evp.h>
+
+const EVP_CIPHER *EVP_desx_cbc(void)
+ +

DESCRIPTION

+ +

The DES-X encryption algorithm for EVP.

+ +

All modes below use a key length of 128 bits and acts on blocks of 128-bits.

+ +
+ +
EVP_desx_cbc()
+
+ +

The DES-X algorithm in CBC mode.

+ +
+
+ +

RETURN VALUES

+ +

These functions return an EVP_CIPHER structure that contains the implementation of the symmetric cipher. See EVP_CIPHER_meth_new(3) for details of the EVP_CIPHER structure.

+ +

SEE ALSO

+ +

evp(7), EVP_EncryptInit(3), EVP_CIPHER_meth_new(3)

+ +

COPYRIGHT

+ +

Copyright 2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_idea_cbc.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_idea_cbc.html new file mode 100644 index 00000000..85ba7cd9 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_idea_cbc.html @@ -0,0 +1,70 @@ + + + + +EVP_idea_cbc + + + + + + + + + + +

NAME

+ +

EVP_idea_cbc, EVP_idea_cfb, EVP_idea_cfb64, EVP_idea_ecb, EVP_idea_ofb - EVP IDEA cipher

+ +

SYNOPSIS

+ +
#include <openssl/evp.h>
+
+const EVP_CIPHER *EVP_idea_cbc(void)
+const EVP_CIPHER *EVP_idea_cfb(void)
+const EVP_CIPHER *EVP_idea_cfb64(void)
+const EVP_CIPHER *EVP_idea_ecb(void)
+const EVP_CIPHER *EVP_idea_ofb(void)
+ +

DESCRIPTION

+ +

The IDEA encryption algorithm for EVP.

+ +
+ +
EVP_idea_cbc(), EVP_idea_cfb(), EVP_idea_cfb64(), EVP_idea_ecb(), EVP_idea_ofb()
+
+ +

The IDEA encryption algorithm in CBC, CFB, ECB and OFB modes respectively.

+ +
+
+ +

RETURN VALUES

+ +

These functions return an EVP_CIPHER structure that contains the implementation of the symmetric cipher. See EVP_CIPHER_meth_new(3) for details of the EVP_CIPHER structure.

+ +

SEE ALSO

+ +

evp(7), EVP_EncryptInit(3), EVP_CIPHER_meth_new(3)

+ +

COPYRIGHT

+ +

Copyright 2017-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_md2.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_md2.html new file mode 100644 index 00000000..9cf1d534 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_md2.html @@ -0,0 +1,71 @@ + + + + +EVP_md2 + + + + + + + + + + +

NAME

+ +

EVP_md2 - MD2 For EVP

+ +

SYNOPSIS

+ +
#include <openssl/evp.h>
+
+const EVP_MD *EVP_md2(void);
+ +

DESCRIPTION

+ +

MD2 is a cryptographic hash function standardized in RFC 1319 and designed by Ronald Rivest.

+ +
+ +
EVP_md2()
+
+ +

The MD2 algorithm which produces a 128-bit output from a given input.

+ +
+
+ +

RETURN VALUES

+ +

These functions return a EVP_MD structure that contains the implementation of the symmetric cipher. See EVP_MD_meth_new(3) for details of the EVP_MD structure.

+ +

CONFORMING TO

+ +

IETF RFC 1319.

+ +

SEE ALSO

+ +

evp(7), EVP_DigestInit(3)

+ +

COPYRIGHT

+ +

Copyright 2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_md4.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_md4.html new file mode 100644 index 00000000..cc4a6a3e --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_md4.html @@ -0,0 +1,71 @@ + + + + +EVP_md4 + + + + + + + + + + +

NAME

+ +

EVP_md4 - MD4 For EVP

+ +

SYNOPSIS

+ +
#include <openssl/evp.h>
+
+const EVP_MD *EVP_md4(void);
+ +

DESCRIPTION

+ +

MD4 is a cryptographic hash function standardized in RFC 1320 and designed by Ronald Rivest, first published in 1990.

+ +
+ +
EVP_md4()
+
+ +

The MD4 algorithm which produces a 128-bit output from a given input.

+ +
+
+ +

RETURN VALUES

+ +

These functions return a EVP_MD structure that contains the implementation of the symmetric cipher. See EVP_MD_meth_new(3) for details of the EVP_MD structure.

+ +

CONFORMING TO

+ +

IETF RFC 1320.

+ +

SEE ALSO

+ +

evp(7), EVP_DigestInit(3)

+ +

COPYRIGHT

+ +

Copyright 2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_md5.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_md5.html new file mode 100644 index 00000000..edb4d8c4 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_md5.html @@ -0,0 +1,82 @@ + + + + +EVP_md5 + + + + + + + + + + +

NAME

+ +

EVP_md5, EVP_md5_sha1 - MD5 For EVP

+ +

SYNOPSIS

+ +
#include <openssl/evp.h>
+
+const EVP_MD *EVP_md5(void);
+const EVP_MD *EVP_md5_sha1(void);
+ +

DESCRIPTION

+ +

MD5 is a cryptographic hash function standardized in RFC 1321 and designed by Ronald Rivest.

+ +

The CMU Software Engineering Institute considers MD5 unsuitable for further use since its security has been severely compromised.

+ +
+ +
EVP_md5()
+
+ +

The MD5 algorithm which produces a 128-bit output from a given input.

+ +
+
EVP_md5_sha1()
+
+ +

A hash algorithm of SSL v3 that combines MD5 with SHA-1 as described in RFC 6101.

+ +

WARNING: this algorithm is not intended for non-SSL usage.

+ +
+
+ +

RETURN VALUES

+ +

These functions return a EVP_MD structure that contains the implementation of the symmetric cipher. See EVP_MD_meth_new(3) for details of the EVP_MD structure.

+ +

CONFORMING TO

+ +

IETF RFC 1321.

+ +

SEE ALSO

+ +

evp(7), EVP_DigestInit(3)

+ +

COPYRIGHT

+ +

Copyright 2017-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_mdc2.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_mdc2.html new file mode 100644 index 00000000..8408d0b7 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_mdc2.html @@ -0,0 +1,71 @@ + + + + +EVP_mdc2 + + + + + + + + + + +

NAME

+ +

EVP_mdc2 - MDC-2 For EVP

+ +

SYNOPSIS

+ +
#include <openssl/evp.h>
+
+const EVP_MD *EVP_mdc2(void);
+ +

DESCRIPTION

+ +

MDC-2 (Modification Detection Code 2 or Meyer-Schilling) is a cryptographic hash function based on a block cipher.

+ +
+ +
EVP_mdc2()
+
+ +

The MDC-2DES algorithm of using MDC-2 with the DES block cipher. It produces a 128-bit output from a given input.

+ +
+
+ +

RETURN VALUES

+ +

These functions return a EVP_MD structure that contains the implementation of the symmetric cipher. See EVP_MD_meth_new(3) for details of the EVP_MD structure.

+ +

CONFORMING TO

+ +

ISO/IEC 10118-2:2000 Hash-Function 2, with DES as the underlying block cipher.

+ +

SEE ALSO

+ +

evp(7), EVP_DigestInit(3)

+ +

COPYRIGHT

+ +

Copyright 2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_rc2_cbc.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_rc2_cbc.html new file mode 100644 index 00000000..a494ff73 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_rc2_cbc.html @@ -0,0 +1,80 @@ + + + + +EVP_rc2_cbc + + + + + + + + + + +

NAME

+ +

EVP_rc2_cbc, EVP_rc2_cfb, EVP_rc2_cfb64, EVP_rc2_ecb, EVP_rc2_ofb, EVP_rc2_40_cbc, EVP_rc2_64_cbc - EVP RC2 cipher

+ +

SYNOPSIS

+ +
#include <openssl/evp.h>
+
+const EVP_CIPHER *EVP_rc2_cbc(void)
+const EVP_CIPHER *EVP_rc2_cfb(void)
+const EVP_CIPHER *EVP_rc2_cfb64(void)
+const EVP_CIPHER *EVP_rc2_ecb(void)
+const EVP_CIPHER *EVP_rc2_ofb(void)
+const EVP_CIPHER *EVP_rc2_40_cbc(void)
+const EVP_CIPHER *EVP_rc2_64_cbc(void)
+ +

DESCRIPTION

+ +

The RC2 encryption algorithm for EVP.

+ +
+ +
EVP_rc2_cbc(), EVP_rc2_cfb(), EVP_rc2_cfb64(), EVP_rc2_ecb(), EVP_rc2_ofb()
+
+ +

RC2 encryption algorithm in CBC, CFB, ECB and OFB modes respectively. This is a variable key length cipher with an additional parameter called "effective key bits" or "effective key length". By default both are set to 128 bits.

+ +
+
EVP_rc2_40_cbc(), EVP_rc2_64_cbc()
+
+ +

RC2 algorithm in CBC mode with a default key length and effective key length of 40 and 64 bits.

+ +

WARNING: these functions are obsolete. Their usage should be replaced with the EVP_rc2_cbc(), EVP_CIPHER_CTX_set_key_length() and EVP_CIPHER_CTX_ctrl() functions to set the key length and effective key length.

+ +
+
+ +

RETURN VALUES

+ +

These functions return an EVP_CIPHER structure that contains the implementation of the symmetric cipher. See EVP_CIPHER_meth_new(3) for details of the EVP_CIPHER structure.

+ +

SEE ALSO

+ +

evp(7), EVP_EncryptInit(3), EVP_CIPHER_meth_new(3)

+ +

COPYRIGHT

+ +

Copyright 2017-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_rc4.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_rc4.html new file mode 100644 index 00000000..2f9a1b5f --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_rc4.html @@ -0,0 +1,84 @@ + + + + +EVP_rc4 + + + + + + + + + + +

NAME

+ +

EVP_rc4, EVP_rc4_40, EVP_rc4_hmac_md5 - EVP RC4 stream cipher

+ +

SYNOPSIS

+ +
#include <openssl/evp.h>
+
+const EVP_CIPHER *EVP_rc4(void)
+const EVP_CIPHER *EVP_rc4_40(void)
+const EVP_CIPHER *EVP_rc4_hmac_md5(void)
+ +

DESCRIPTION

+ +

The RC4 stream cipher for EVP.

+ +
+ +
EVP_rc4()
+
+ +

RC4 stream cipher. This is a variable key length cipher with a default key length of 128 bits.

+ +
+
EVP_rc4_40()
+
+ +

RC4 stream cipher with 40 bit key length.

+ +

WARNING: this function is obsolete. Its usage should be replaced with the EVP_rc4() and the EVP_CIPHER_CTX_set_key_length() functions.

+ +
+
EVP_rc4_hmac_md5()
+
+ +

Authenticated encryption with the RC4 stream cipher with MD5 as HMAC.

+ +

WARNING: this is not intended for usage outside of TLS and requires calling of some undocumented ctrl functions. These ciphers do not conform to the EVP AEAD interface.

+ +
+
+ +

RETURN VALUES

+ +

These functions return an EVP_CIPHER structure that contains the implementation of the symmetric cipher. See EVP_CIPHER_meth_new(3) for details of the EVP_CIPHER structure.

+ +

SEE ALSO

+ +

evp(7), EVP_EncryptInit(3), EVP_CIPHER_meth_new(3)

+ +

COPYRIGHT

+ +

Copyright 2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_rc5_32_12_16_cbc.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_rc5_32_12_16_cbc.html new file mode 100644 index 00000000..01ee65a7 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_rc5_32_12_16_cbc.html @@ -0,0 +1,88 @@ + + + + +EVP_rc5_32_12_16_cbc + + + + + + + + + + +

NAME

+ +

EVP_rc5_32_12_16_cbc, EVP_rc5_32_12_16_cfb, EVP_rc5_32_12_16_cfb64, EVP_rc5_32_12_16_ecb, EVP_rc5_32_12_16_ofb - EVP RC5 cipher

+ +

SYNOPSIS

+ +
#include <openssl/evp.h>
+
+const EVP_CIPHER *EVP_rc5_32_12_16_cbc(void)
+const EVP_CIPHER *EVP_rc5_32_12_16_cfb(void)
+const EVP_CIPHER *EVP_rc5_32_12_16_cfb64(void)
+const EVP_CIPHER *EVP_rc5_32_12_16_ecb(void)
+const EVP_CIPHER *EVP_rc5_32_12_16_ofb(void)
+ +

DESCRIPTION

+ +

The RC5 encryption algorithm for EVP.

+ +
+ +
EVP_rc5_32_12_16_cbc(), EVP_rc5_32_12_16_cfb(), EVP_rc5_32_12_16_cfb64(), EVP_rc5_32_12_16_ecb(), EVP_rc5_32_12_16_ofb()
+
+ +

RC5 encryption algorithm in CBC, CFB, ECB and OFB modes respectively. This is a variable key length cipher with an additional "number of rounds" parameter. By default the key length is set to 128 bits and 12 rounds. Alternative key lengths can be set using EVP_CIPHER_CTX_set_key_length(3). The maximum key length is 2040 bits.

+ +

The following rc5 specific ctrls are supported (see EVP_CIPHER_CTX_ctrl(3)).

+ +
+ +
EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_SET_RC5_ROUNDS, rounds, NULL)
+
+ +

Sets the number of rounds to rounds. This must be one of RC5_8_ROUNDS, RC5_12_ROUNDS or RC5_16_ROUNDS.

+ +
+
EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GET_RC5_ROUNDS, 0, &rounds)
+
+ +

Stores the number of rounds currently configured in *rounds where *rounds is an int.

+ +
+
+ +
+
+ +

RETURN VALUES

+ +

These functions return an EVP_CIPHER structure that contains the implementation of the symmetric cipher. See EVP_CIPHER_meth_new(3) for details of the EVP_CIPHER structure.

+ +

SEE ALSO

+ +

evp(7), EVP_EncryptInit(3), EVP_CIPHER_meth_new(3)

+ +

COPYRIGHT

+ +

Copyright 2017-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_ripemd160.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_ripemd160.html new file mode 100644 index 00000000..8e5b880a --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_ripemd160.html @@ -0,0 +1,71 @@ + + + + +EVP_ripemd160 + + + + + + + + + + +

NAME

+ +

EVP_ripemd160 - RIPEMD160 For EVP

+ +

SYNOPSIS

+ +
#include <openssl/evp.h>
+
+const EVP_MD *EVP_ripemd160(void);
+ +

DESCRIPTION

+ +

RIPEMD-160 is a cryptographic hash function first published in 1996 belonging to the RIPEMD family (RACE Integrity Primitives Evaluation Message Digest).

+ +
+ +
EVP_ripemd160()
+
+ +

The RIPEMD-160 algorithm which produces a 160-bit output from a given input.

+ +
+
+ +

RETURN VALUES

+ +

These functions return a EVP_MD structure that contains the implementation of the symmetric cipher. See EVP_MD_meth_new(3) for details of the EVP_MD structure.

+ +

CONFORMING TO

+ +

ISO/IEC 10118-3:2016 Dedicated Hash-Function 1 (RIPEMD-160).

+ +

SEE ALSO

+ +

evp(7), EVP_DigestInit(3)

+ +

COPYRIGHT

+ +

Copyright 2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_seed_cbc.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_seed_cbc.html new file mode 100644 index 00000000..bb87fa06 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_seed_cbc.html @@ -0,0 +1,72 @@ + + + + +EVP_seed_cbc + + + + + + + + + + +

NAME

+ +

EVP_seed_cbc, EVP_seed_cfb, EVP_seed_cfb128, EVP_seed_ecb, EVP_seed_ofb - EVP SEED cipher

+ +

SYNOPSIS

+ +
#include <openssl/evp.h>
+
+const EVP_CIPHER *EVP_seed_cbc(void)
+const EVP_CIPHER *EVP_seed_cfb(void)
+const EVP_CIPHER *EVP_seed_cfb128(void)
+const EVP_CIPHER *EVP_seed_ecb(void)
+const EVP_CIPHER *EVP_seed_ofb(void)
+ +

DESCRIPTION

+ +

The SEED encryption algorithm for EVP.

+ +

All modes below use a key length of 128 bits and acts on blocks of 128-bits.

+ +
+ +
EVP_seed_cbc(), EVP_seed_cfb(), EVP_seed_cfb128(), EVP_seed_ecb(), EVP_seed_ofb()
+
+ +

The SEED encryption algorithm in CBC, CFB, ECB and OFB modes respectively.

+ +
+
+ +

RETURN VALUES

+ +

These functions return an EVP_CIPHER structure that contains the implementation of the symmetric cipher. See EVP_CIPHER_meth_new(3) for details of the EVP_CIPHER structure.

+ +

SEE ALSO

+ +

evp(7), EVP_EncryptInit(3), EVP_CIPHER_meth_new(3)

+ +

COPYRIGHT

+ +

Copyright 2017-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_sha1.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_sha1.html new file mode 100644 index 00000000..1ec7299d --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_sha1.html @@ -0,0 +1,71 @@ + + + + +EVP_sha1 + + + + + + + + + + +

NAME

+ +

EVP_sha1 - SHA-1 For EVP

+ +

SYNOPSIS

+ +
#include <openssl/evp.h>
+
+const EVP_MD *EVP_sha1(void);
+ +

DESCRIPTION

+ +

SHA-1 (Secure Hash Algorithm 1) is a cryptographic hash function standardized in NIST FIPS 180-4. The algorithm was designed by the United States National Security Agency and initially published in 1995.

+ +
+ +
EVP_sha1()
+
+ +

The SHA-1 algorithm which produces a 160-bit output from a given input.

+ +
+
+ +

RETURN VALUES

+ +

These functions return a EVP_MD structure that contains the implementation of the symmetric cipher. See EVP_MD_meth_new(3) for details of the EVP_MD structure.

+ +

CONFORMING TO

+ +

NIST FIPS 180-4.

+ +

SEE ALSO

+ +

evp(7), EVP_DigestInit(3)

+ +

COPYRIGHT

+ +

Copyright 2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_sha224.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_sha224.html new file mode 100644 index 00000000..81f3b433 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_sha224.html @@ -0,0 +1,78 @@ + + + + +EVP_sha224 + + + + + + + + + + +

NAME

+ +

EVP_sha224, EVP_sha256, EVP_sha512_224, EVP_sha512_256, EVP_sha384, EVP_sha512 - SHA-2 For EVP

+ +

SYNOPSIS

+ +
#include <openssl/evp.h>
+
+const EVP_MD *EVP_sha224(void);
+const EVP_MD *EVP_sha256(void);
+const EVP_MD *EVP_sha512_224(void);
+const EVP_MD *EVP_sha512_256(void);
+const EVP_MD *EVP_sha384(void);
+const EVP_MD *EVP_sha512(void);
+ +

DESCRIPTION

+ +

SHA-2 (Secure Hash Algorithm 2) is a family of cryptographic hash functions standardized in NIST FIPS 180-4, first published in 2001.

+ +
+ +
EVP_sha224(), EVP_sha256(), EVP_sha512_224, EVP_sha512_256, EVP_sha384(), EVP_sha512()
+
+ +

The SHA-2 SHA-224, SHA-256, SHA-512/224, SHA512/256, SHA-384 and SHA-512 algorithms, which generate 224, 256, 224, 256, 384 and 512 bits respectively of output from a given input.

+ +

The two algorithms: SHA-512/224 and SHA512/256 are truncated forms of the SHA-512 algorithm. They are distinct from SHA-224 and SHA-256 even though their outputs are of the same size.

+ +
+
+ +

RETURN VALUES

+ +

These functions return a EVP_MD structure that contains the implementation of the symmetric cipher. See EVP_MD_meth_new(3) for details of the EVP_MD structure.

+ +

CONFORMING TO

+ +

NIST FIPS 180-4.

+ +

SEE ALSO

+ +

evp(7), EVP_DigestInit(3)

+ +

COPYRIGHT

+ +

Copyright 2017-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_sha3_224.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_sha3_224.html new file mode 100644 index 00000000..72707088 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_sha3_224.html @@ -0,0 +1,85 @@ + + + + +EVP_sha3_224 + + + + + + + + + + +

NAME

+ +

EVP_sha3_224, EVP_sha3_256, EVP_sha3_384, EVP_sha3_512, EVP_shake128, EVP_shake256 - SHA-3 For EVP

+ +

SYNOPSIS

+ +
#include <openssl/evp.h>
+
+const EVP_MD *EVP_sha3_224(void);
+const EVP_MD *EVP_sha3_256(void);
+const EVP_MD *EVP_sha3_384(void);
+const EVP_MD *EVP_sha3_512(void);
+
+const EVP_MD *EVP_shake128(void);
+const EVP_MD *EVP_shake256(void);
+ +

DESCRIPTION

+ +

SHA-3 (Secure Hash Algorithm 3) is a family of cryptographic hash functions standardized in NIST FIPS 202, first published in 2015. It is based on the Keccak algorithm.

+ +
+ +
EVP_sha3_224(), EVP_sha3_256(), EVP_sha3_384(), EVP_sha3_512()
+
+ +

The SHA-3 SHA-3-224, SHA-3-256, SHA-3-384, and SHA-3-512 algorithms respectively. They produce 224, 256, 384 and 512 bits of output from a given input.

+ +
+
EVP_shake128(), EVP_shake256()
+
+ +

The SHAKE-128 and SHAKE-256 Extendable Output Functions (XOF) that can generate a variable hash length.

+ +

Specifically, EVP_shake128 provides an overall security of 128 bits, while EVP_shake256 provides that of 256 bits.

+ +
+
+ +

RETURN VALUES

+ +

These functions return a EVP_MD structure that contains the implementation of the symmetric cipher. See EVP_MD_meth_new(3) for details of the EVP_MD structure.

+ +

CONFORMING TO

+ +

NIST FIPS 202.

+ +

SEE ALSO

+ +

evp(7), EVP_DigestInit(3)

+ +

COPYRIGHT

+ +

Copyright 2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_sm3.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_sm3.html new file mode 100644 index 00000000..cca78651 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_sm3.html @@ -0,0 +1,71 @@ + + + + +EVP_sm3 + + + + + + + + + + +

NAME

+ +

EVP_sm3 - SM3 for EVP

+ +

SYNOPSIS

+ +
#include <openssl/evp.h>
+
+const EVP_MD *EVP_sm3(void);
+ +

DESCRIPTION

+ +

SM3 is a cryptographic hash function with a 256-bit output, defined in GB/T 32905-2016.

+ +
+ +
EVP_sm3()
+
+ +

The SM3 hash function.

+ +
+
+ +

RETURN VALUES

+ +

These functions return a EVP_MD structure that contains the implementation of the symmetric cipher. See EVP_MD_meth_new(3) for details of the EVP_MD structure.

+ +

CONFORMING TO

+ +

GB/T 32905-2016 and GM/T 0004-2012.

+ +

SEE ALSO

+ +

evp(7), EVP_DigestInit(3)

+ +

COPYRIGHT

+ +

Copyright 2017-2018 The OpenSSL Project Authors. All Rights Reserved. Copyright 2017 Ribose Inc. 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.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_sm4_cbc.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_sm4_cbc.html new file mode 100644 index 00000000..8579a1aa --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_sm4_cbc.html @@ -0,0 +1,73 @@ + + + + +EVP_sm4_cbc + + + + + + + + + + +

NAME

+ +

EVP_sm4_cbc, EVP_sm4_ecb, EVP_sm4_cfb, EVP_sm4_cfb128, EVP_sm4_ofb, EVP_sm4_ctr - EVP SM4 cipher

+ +

SYNOPSIS

+ +
#include <openssl/evp.h>
+
+const EVP_CIPHER *EVP_sm4_cbc(void);
+const EVP_CIPHER *EVP_sm4_ecb(void);
+const EVP_CIPHER *EVP_sm4_cfb(void);
+const EVP_CIPHER *EVP_sm4_cfb128(void);
+const EVP_CIPHER *EVP_sm4_ofb(void);
+const EVP_CIPHER *EVP_sm4_ctr(void);
+ +

DESCRIPTION

+ +

The SM4 blockcipher (GB/T 32907-2016) for EVP.

+ +

All modes below use a key length of 128 bits and acts on blocks of 128 bits.

+ +
+ +
EVP_sm4_cbc(), EVP_sm4_ecb(), EVP_sm4_cfb(), EVP_sm4_cfb128(), EVP_sm4_ofb(), EVP_sm4_ctr()
+
+ +

The SM4 blockcipher with a 128-bit key in CBC, ECB, CFB, OFB and CTR modes respectively.

+ +
+
+ +

RETURN VALUES

+ +

These functions return a EVP_CIPHER structure that contains the implementation of the symmetric cipher. See EVP_CIPHER_meth_new(3) for details of the EVP_CIPHER structure.

+ +

SEE ALSO

+ +

evp(7), EVP_EncryptInit(3), EVP_CIPHER_meth_new(3)

+ +

COPYRIGHT

+ +

Copyright 2017-2018 The OpenSSL Project Authors. All Rights Reserved. Copyright 2017 Ribose Inc. 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.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_whirlpool.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_whirlpool.html new file mode 100644 index 00000000..528d3578 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/EVP_whirlpool.html @@ -0,0 +1,71 @@ + + + + +EVP_whirlpool + + + + + + + + + + +

NAME

+ +

EVP_whirlpool - WHIRLPOOL For EVP

+ +

SYNOPSIS

+ +
#include <openssl/evp.h>
+
+const EVP_MD *EVP_whirlpool(void);
+ +

DESCRIPTION

+ +

WHIRLPOOL is a cryptographic hash function standardized in ISO/IEC 10118-3:2004 designed by Vincent Rijmen and Paulo S. L. M. Barreto.

+ +
+ +
EVP_whirlpool()
+
+ +

The WHIRLPOOL algorithm that produces a message digest of 512-bits from a given input.

+ +
+
+ +

RETURN VALUES

+ +

These functions return a EVP_MD structure that contains the implementation of the symmetric cipher. See EVP_MD_meth_new(3) for details of the EVP_MD structure.

+ +

CONFORMING TO

+ +

ISO/IEC 10118-3:2004.

+ +

SEE ALSO

+ +

evp(7), EVP_DigestInit(3)

+ +

COPYRIGHT

+ +

Copyright 2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/HMAC.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/HMAC.html new file mode 100644 index 00000000..528fd531 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/HMAC.html @@ -0,0 +1,137 @@ + + + + +HMAC + + + + + + + + + + +

NAME

+ +

HMAC, HMAC_CTX_new, HMAC_CTX_reset, HMAC_CTX_free, HMAC_Init, HMAC_Init_ex, HMAC_Update, HMAC_Final, HMAC_CTX_copy, HMAC_CTX_set_flags, HMAC_CTX_get_md, HMAC_size - HMAC message authentication code

+ +

SYNOPSIS

+ +
#include <openssl/hmac.h>
+
+unsigned char *HMAC(const EVP_MD *evp_md, const void *key,
+                    int key_len, const unsigned char *d, int n,
+                    unsigned char *md, unsigned int *md_len);
+
+HMAC_CTX *HMAC_CTX_new(void);
+int HMAC_CTX_reset(HMAC_CTX *ctx);
+
+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_Final(HMAC_CTX *ctx, unsigned char *md, unsigned int *len);
+
+void HMAC_CTX_free(HMAC_CTX *ctx);
+
+int HMAC_CTX_copy(HMAC_CTX *dctx, HMAC_CTX *sctx);
+void HMAC_CTX_set_flags(HMAC_CTX *ctx, unsigned long flags);
+const EVP_MD *HMAC_CTX_get_md(const HMAC_CTX *ctx);
+
+size_t HMAC_size(const HMAC_CTX *e);
+ +

Deprecated:

+ +
#if OPENSSL_API_COMPAT < 0x10100000L
+int HMAC_Init(HMAC_CTX *ctx, const void *key, int key_len,
+              const EVP_MD *md);
+#endif
+ +

DESCRIPTION

+ +

HMAC is a MAC (message authentication code), i.e. a keyed hash function used for message authentication, which is based on a hash function.

+ +

HMAC() computes the message authentication code of the n bytes at d using the hash function evp_md and the key key which is key_len bytes long.

+ +

It places the result in md (which must have space for the output of the hash function, which is no more than EVP_MAX_MD_SIZE bytes). If md is NULL, the digest is placed in a static array. The size of the output is placed in md_len, unless it is NULL. Note: passing a NULL value for md to use the static array is not thread safe.

+ +

evp_md is a message digest such as EVP_sha1(), EVP_ripemd160() etc. HMAC does not support variable output length digests such as EVP_shake128() and EVP_shake256().

+ +

HMAC_CTX_new() creates a new HMAC_CTX in heap memory.

+ +

HMAC_CTX_reset() zeroes an existing HMAC_CTX and associated resources, making it suitable for new computations as if it was newly created with HMAC_CTX_new().

+ +

HMAC_CTX_free() erases the key and other data from the HMAC_CTX, releases any associated resources and finally frees the HMAC_CTX itself.

+ +

The following functions may be used if the message is not completely stored in memory:

+ +

HMAC_Init_ex() initializes or reuses a HMAC_CTX structure to use the hash function evp_md and key key. If both are NULL, or if key is NULL and evp_md is the same as the previous call, then the existing key is reused. ctx must have been created with HMAC_CTX_new() before the first use of an HMAC_CTX in this function.

+ +

If HMAC_Init_ex() is called with key NULL and evp_md is not the same as the previous digest used by ctx then an error is returned because reuse of an existing key with a different digest is not supported.

+ +

HMAC_Init() initializes a HMAC_CTX structure to use the hash function evp_md and the key key which is key_len bytes long.

+ +

HMAC_Update() can be called repeatedly with chunks of the message to be authenticated (len bytes at data).

+ +

HMAC_Final() places the message authentication code in md, which must have space for the hash function output.

+ +

HMAC_CTX_copy() copies all of the internal state from sctx into dctx.

+ +

HMAC_CTX_set_flags() applies the specified flags to the internal EVP_MD_CTXs. These flags have the same meaning as for EVP_MD_CTX_set_flags(3).

+ +

HMAC_CTX_get_md() returns the EVP_MD that has previously been set for the supplied HMAC_CTX.

+ +

HMAC_size() returns the length in bytes of the underlying hash function output.

+ +

RETURN VALUES

+ +

HMAC() returns a pointer to the message authentication code or NULL if an error occurred.

+ +

HMAC_CTX_new() returns a pointer to a new HMAC_CTX on success or NULL if an error occurred.

+ +

HMAC_CTX_reset(), HMAC_Init_ex(), HMAC_Update(), HMAC_Final() and HMAC_CTX_copy() return 1 for success or 0 if an error occurred.

+ +

HMAC_CTX_get_md() return the EVP_MD previously set for the supplied HMAC_CTX or NULL if no EVP_MD has been set.

+ +

HMAC_size() returns the length in bytes of the underlying hash function output or zero on error.

+ +

CONFORMING TO

+ +

RFC 2104

+ +

SEE ALSO

+ +

SHA1(3), evp(7)

+ +

HISTORY

+ +

HMAC_CTX_init() was replaced with HMAC_CTX_reset() in OpenSSL 1.1.0.

+ +

HMAC_CTX_cleanup() existed in OpenSSL before version 1.1.0.

+ +

HMAC_CTX_new(), HMAC_CTX_free() and HMAC_CTX_get_md() are new in OpenSSL 1.1.0.

+ +

HMAC_Init_ex(), HMAC_Update() and HMAC_Final() did not return values in OpenSSL before version 1.0.0.

+ +

COPYRIGHT

+ +

Copyright 2000-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/MD5.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/MD5.html new file mode 100644 index 00000000..2e9c4f51 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/MD5.html @@ -0,0 +1,104 @@ + + + + +MD5 + + + + + + + + + + +

NAME

+ +

MD2, MD4, MD5, MD2_Init, MD2_Update, MD2_Final, MD4_Init, MD4_Update, MD4_Final, MD5_Init, MD5_Update, MD5_Final - MD2, MD4, and MD5 hash functions

+ +

SYNOPSIS

+ +
#include <openssl/md2.h>
+
+unsigned char *MD2(const unsigned char *d, unsigned long n, unsigned char *md);
+
+int MD2_Init(MD2_CTX *c);
+int MD2_Update(MD2_CTX *c, const unsigned char *data, unsigned long len);
+int MD2_Final(unsigned char *md, MD2_CTX *c);
+
+
+#include <openssl/md4.h>
+
+unsigned char *MD4(const unsigned char *d, unsigned long n, unsigned char *md);
+
+int MD4_Init(MD4_CTX *c);
+int MD4_Update(MD4_CTX *c, const void *data, unsigned long len);
+int MD4_Final(unsigned char *md, MD4_CTX *c);
+
+
+#include <openssl/md5.h>
+
+unsigned char *MD5(const unsigned char *d, unsigned long n, unsigned char *md);
+
+int MD5_Init(MD5_CTX *c);
+int MD5_Update(MD5_CTX *c, const void *data, unsigned long len);
+int MD5_Final(unsigned char *md, MD5_CTX *c);
+ +

DESCRIPTION

+ +

MD2, MD4, and MD5 are cryptographic hash functions with a 128 bit output.

+ +

MD2(), MD4(), and MD5() compute the MD2, MD4, and MD5 message digest of the n bytes at d and place it in md (which must have space for MD2_DIGEST_LENGTH == MD4_DIGEST_LENGTH == MD5_DIGEST_LENGTH == 16 bytes of output). If md is NULL, the digest is placed in a static array.

+ +

The following functions may be used if the message is not completely stored in memory:

+ +

MD2_Init() initializes a MD2_CTX structure.

+ +

MD2_Update() can be called repeatedly with chunks of the message to be hashed (len bytes at data).

+ +

MD2_Final() places the message digest in md, which must have space for MD2_DIGEST_LENGTH == 16 bytes of output, and erases the MD2_CTX.

+ +

MD4_Init(), MD4_Update(), MD4_Final(), MD5_Init(), MD5_Update(), and MD5_Final() are analogous using an MD4_CTX and MD5_CTX structure.

+ +

Applications should use the higher level functions EVP_DigestInit(3) etc. instead of calling the hash functions directly.

+ +

NOTE

+ +

MD2, MD4, and MD5 are recommended only for compatibility with existing applications. In new applications, SHA-1 or RIPEMD-160 should be preferred.

+ +

RETURN VALUES

+ +

MD2(), MD4(), and MD5() return pointers to the hash value.

+ +

MD2_Init(), MD2_Update(), MD2_Final(), MD4_Init(), MD4_Update(), MD4_Final(), MD5_Init(), MD5_Update(), and MD5_Final() return 1 for success, 0 otherwise.

+ +

CONFORMING TO

+ +

RFC 1319, RFC 1320, RFC 1321

+ +

SEE ALSO

+ +

EVP_DigestInit(3)

+ +

COPYRIGHT

+ +

Copyright 2000-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/MDC2_Init.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/MDC2_Init.html new file mode 100644 index 00000000..208f3274 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/MDC2_Init.html @@ -0,0 +1,81 @@ + + + + +MDC2_Init + + + + + + + + + + +

NAME

+ +

MDC2, MDC2_Init, MDC2_Update, MDC2_Final - MDC2 hash function

+ +

SYNOPSIS

+ +
#include <openssl/mdc2.h>
+
+unsigned char *MDC2(const unsigned char *d, unsigned long n,
+                    unsigned char *md);
+
+int MDC2_Init(MDC2_CTX *c);
+int MDC2_Update(MDC2_CTX *c, const unsigned char *data,
+                unsigned long len);
+int MDC2_Final(unsigned char *md, MDC2_CTX *c);
+ +

DESCRIPTION

+ +

MDC2 is a method to construct hash functions with 128 bit output from block ciphers. These functions are an implementation of MDC2 with DES.

+ +

MDC2() computes the MDC2 message digest of the n bytes at d and places it in md (which must have space for MDC2_DIGEST_LENGTH == 16 bytes of output). If md is NULL, the digest is placed in a static array.

+ +

The following functions may be used if the message is not completely stored in memory:

+ +

MDC2_Init() initializes a MDC2_CTX structure.

+ +

MDC2_Update() can be called repeatedly with chunks of the message to be hashed (len bytes at data).

+ +

MDC2_Final() places the message digest in md, which must have space for MDC2_DIGEST_LENGTH == 16 bytes of output, and erases the MDC2_CTX.

+ +

Applications should use the higher level functions EVP_DigestInit(3) etc. instead of calling the hash functions directly.

+ +

RETURN VALUES

+ +

MDC2() returns a pointer to the hash value.

+ +

MDC2_Init(), MDC2_Update() and MDC2_Final() return 1 for success, 0 otherwise.

+ +

CONFORMING TO

+ +

ISO/IEC 10118-2:2000 Hash-Function 2, with DES as the underlying block cipher.

+ +

SEE ALSO

+ +

EVP_DigestInit(3)

+ +

COPYRIGHT

+ +

Copyright 2000-2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OBJ_nid2obj.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OBJ_nid2obj.html new file mode 100644 index 00000000..3b60824d --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OBJ_nid2obj.html @@ -0,0 +1,165 @@ + + + + +OBJ_nid2obj + + + + + + + + + + +

NAME

+ +

i2t_ASN1_OBJECT, OBJ_length, OBJ_get0_data, OBJ_nid2obj, OBJ_nid2ln, OBJ_nid2sn, OBJ_obj2nid, OBJ_txt2nid, OBJ_ln2nid, OBJ_sn2nid, OBJ_cmp, OBJ_dup, OBJ_txt2obj, OBJ_obj2txt, OBJ_create, OBJ_cleanup - ASN1 object utility functions

+ +

SYNOPSIS

+ +
#include <openssl/objects.h>
+
+ASN1_OBJECT *OBJ_nid2obj(int n);
+const char *OBJ_nid2ln(int n);
+const char *OBJ_nid2sn(int n);
+
+int OBJ_obj2nid(const ASN1_OBJECT *o);
+int OBJ_ln2nid(const char *ln);
+int OBJ_sn2nid(const char *sn);
+
+int OBJ_txt2nid(const char *s);
+
+ASN1_OBJECT *OBJ_txt2obj(const char *s, int no_name);
+int OBJ_obj2txt(char *buf, int buf_len, const ASN1_OBJECT *a, int no_name);
+
+int i2t_ASN1_OBJECT(char *buf, int buf_len, const ASN1_OBJECT *a);
+
+int OBJ_cmp(const ASN1_OBJECT *a, const ASN1_OBJECT *b);
+ASN1_OBJECT *OBJ_dup(const ASN1_OBJECT *o);
+
+int OBJ_create(const char *oid, const char *sn, const char *ln);
+
+size_t OBJ_length(const ASN1_OBJECT *obj);
+const unsigned char *OBJ_get0_data(const ASN1_OBJECT *obj);
+ +

Deprecated:

+ +
#if OPENSSL_API_COMPAT < 0x10100000L
+void OBJ_cleanup(void)
+#endif
+ +

DESCRIPTION

+ +

The ASN1 object utility functions process ASN1_OBJECT structures which are a representation of the ASN1 OBJECT IDENTIFIER (OID) type. For convenience, OIDs are usually represented in source code as numeric identifiers, or NIDs. OpenSSL has an internal table of OIDs that are generated when the library is built, and their corresponding NIDs are available as defined constants. For the functions below, application code should treat all returned values -- OIDs, NIDs, or names -- as constants.

+ +

OBJ_nid2obj(), OBJ_nid2ln() and OBJ_nid2sn() convert the NID n to an ASN1_OBJECT structure, its long name and its short name respectively, or NULL if an error occurred.

+ +

OBJ_obj2nid(), OBJ_ln2nid(), OBJ_sn2nid() return the corresponding NID for the object o, the long name <ln> or the short name <sn> respectively or NID_undef if an error occurred.

+ +

OBJ_txt2nid() returns NID corresponding to text string <s>. s can be a long name, a short name or the numerical representation of an object.

+ +

OBJ_txt2obj() converts the text string s into an ASN1_OBJECT structure. If no_name is 0 then long names and short names will be interpreted as well as numerical forms. If no_name is 1 only the numerical form is acceptable.

+ +

OBJ_obj2txt() converts the ASN1_OBJECT a into a textual representation. The representation is written as a null terminated string to buf at most buf_len bytes are written, truncating the result if necessary. The total amount of space required is returned. If no_name is 0 then if the object has a long or short name then that will be used, otherwise the numerical form will be used. If no_name is 1 then the numerical form will always be used.

+ +

i2t_ASN1_OBJECT() is the same as OBJ_obj2txt() with the no_name set to zero.

+ +

OBJ_cmp() compares a to b. If the two are identical 0 is returned.

+ +

OBJ_dup() returns a copy of o.

+ +

OBJ_create() adds a new object to the internal table. oid is the numerical form of the object, sn the short name and ln the long name. A new NID is returned for the created object in case of success and NID_undef in case of failure.

+ +

OBJ_length() returns the size of the content octets of obj.

+ +

OBJ_get0_data() returns a pointer to the content octets of obj. The returned pointer is an internal pointer which must not be freed.

+ +

OBJ_cleanup() releases any resources allocated by creating new objects.

+ +

NOTES

+ +

Objects in OpenSSL can have a short name, a long name and a numerical identifier (NID) associated with them. A standard set of objects is represented in an internal table. The appropriate values are defined in the header file objects.h.

+ +

For example the OID for commonName has the following definitions:

+ +
#define SN_commonName                   "CN"
+#define LN_commonName                   "commonName"
+#define NID_commonName                  13
+ +

New objects can be added by calling OBJ_create().

+ +

Table objects have certain advantages over other objects: for example their NIDs can be used in a C language switch statement. They are also static constant structures which are shared: that is there is only a single constant structure for each table object.

+ +

Objects which are not in the table have the NID value NID_undef.

+ +

Objects do not need to be in the internal tables to be processed, the functions OBJ_txt2obj() and OBJ_obj2txt() can process the numerical form of an OID.

+ +

Some objects are used to represent algorithms which do not have a corresponding ASN.1 OBJECT IDENTIFIER encoding (for example no OID currently exists for a particular algorithm). As a result they cannot be encoded or decoded as part of ASN.1 structures. Applications can determine if there is a corresponding OBJECT IDENTIFIER by checking OBJ_length() is not zero.

+ +

These functions cannot return const because an ASN1_OBJECT can represent both an internal, constant, OID and a dynamically-created one. The latter cannot be constant because it needs to be freed after use.

+ +

RETURN VALUES

+ +

OBJ_nid2obj() returns an ASN1_OBJECT structure or NULL is an error occurred.

+ +

OBJ_nid2ln() and OBJ_nid2sn() returns a valid string or NULL on error.

+ +

OBJ_obj2nid(), OBJ_ln2nid(), OBJ_sn2nid() and OBJ_txt2nid() return a NID or NID_undef on error.

+ +

EXAMPLES

+ +

Create an object for commonName:

+ +
ASN1_OBJECT *o = OBJ_nid2obj(NID_commonName);
+ +

Check if an object is commonName

+ +
if (OBJ_obj2nid(obj) == NID_commonName)
+    /* Do something */
+ +

Create a new NID and initialize an object from it:

+ +
int new_nid = OBJ_create("1.2.3.4", "NewOID", "New Object Identifier");
+ASN1_OBJECT *obj = OBJ_nid2obj(new_nid);
+ +

Create a new object directly:

+ +
obj = OBJ_txt2obj("1.2.3.4", 1);
+ +

BUGS

+ +

OBJ_obj2txt() is awkward and messy to use: it doesn't follow the convention of other OpenSSL functions where the buffer can be set to NULL to determine the amount of data that should be written. Instead buf must point to a valid buffer and buf_len should be set to a positive value. A buffer length of 80 should be more than enough to handle any OID encountered in practice.

+ +

SEE ALSO

+ +

ERR_get_error(3)

+ +

HISTORY

+ +

OBJ_cleanup() was deprecated in OpenSSL 1.1.0 by OPENSSL_init_crypto(3) and should not be used.

+ +

COPYRIGHT

+ +

Copyright 2002-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OCSP_REQUEST_new.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OCSP_REQUEST_new.html new file mode 100644 index 00000000..dffbb711 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OCSP_REQUEST_new.html @@ -0,0 +1,117 @@ + + + + +OCSP_REQUEST_new + + + + + + + + + + +

NAME

+ +

OCSP_REQUEST_new, OCSP_REQUEST_free, OCSP_request_add0_id, OCSP_request_sign, OCSP_request_add1_cert, OCSP_request_onereq_count, OCSP_request_onereq_get0 - OCSP request functions

+ +

SYNOPSIS

+ +
#include <openssl/ocsp.h>
+
+OCSP_REQUEST *OCSP_REQUEST_new(void);
+void OCSP_REQUEST_free(OCSP_REQUEST *req);
+
+OCSP_ONEREQ *OCSP_request_add0_id(OCSP_REQUEST *req, OCSP_CERTID *cid);
+
+int OCSP_request_sign(OCSP_REQUEST *req,
+                      X509 *signer, EVP_PKEY *key, const EVP_MD *dgst,
+                      STACK_OF(X509) *certs, unsigned long flags);
+
+int OCSP_request_add1_cert(OCSP_REQUEST *req, X509 *cert);
+
+int OCSP_request_onereq_count(OCSP_REQUEST *req);
+OCSP_ONEREQ *OCSP_request_onereq_get0(OCSP_REQUEST *req, int i);
+ +

DESCRIPTION

+ +

OCSP_REQUEST_new() allocates and returns an empty OCSP_REQUEST structure.

+ +

OCSP_REQUEST_free() frees up the request structure req.

+ +

OCSP_request_add0_id() adds certificate ID cid to req. It returns the OCSP_ONEREQ structure added so an application can add additional extensions to the request. The id parameter MUST NOT be freed up after the operation.

+ +

OCSP_request_sign() signs OCSP request req using certificate signer, private key key, digest dgst and additional certificates certs. If the flags option OCSP_NOCERTS is set then no certificates will be included in the request.

+ +

OCSP_request_add1_cert() adds certificate cert to request req. The application is responsible for freeing up cert after use.

+ +

OCSP_request_onereq_count() returns the total number of OCSP_ONEREQ structures in req.

+ +

OCSP_request_onereq_get0() returns an internal pointer to the OCSP_ONEREQ contained in req of index i. The index value i runs from 0 to OCSP_request_onereq_count(req) - 1.

+ +

RETURN VALUES

+ +

OCSP_REQUEST_new() returns an empty OCSP_REQUEST structure or NULL if an error occurred.

+ +

OCSP_request_add0_id() returns the OCSP_ONEREQ structure containing cid or NULL if an error occurred.

+ +

OCSP_request_sign() and OCSP_request_add1_cert() return 1 for success and 0 for failure.

+ +

OCSP_request_onereq_count() returns the total number of OCSP_ONEREQ structures in req.

+ +

OCSP_request_onereq_get0() returns a pointer to an OCSP_ONEREQ structure or NULL if the index value is out or range.

+ +

NOTES

+ +

An OCSP request structure contains one or more OCSP_ONEREQ structures corresponding to each certificate.

+ +

OCSP_request_onereq_count() and OCSP_request_onereq_get0() are mainly used by OCSP responders.

+ +

EXAMPLES

+ +

Create an OCSP_REQUEST structure for certificate cert with issuer issuer:

+ +
OCSP_REQUEST *req;
+OCSP_ID *cid;
+
+req = OCSP_REQUEST_new();
+if (req == NULL)
+   /* error */
+cid = OCSP_cert_to_id(EVP_sha1(), cert, issuer);
+if (cid == NULL)
+   /* error */
+
+if (OCSP_REQUEST_add0_id(req, cid) == NULL)
+   /* error */
+
+/* Do something with req, e.g. query responder */
+
+OCSP_REQUEST_free(req);
+ +

SEE ALSO

+ +

crypto(7), OCSP_cert_to_id(3), OCSP_request_add1_nonce(3), OCSP_resp_find_status(3), OCSP_response_status(3), OCSP_sendreq_new(3)

+ +

COPYRIGHT

+ +

Copyright 2015-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OCSP_cert_to_id.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OCSP_cert_to_id.html new file mode 100644 index 00000000..e7d3fa00 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OCSP_cert_to_id.html @@ -0,0 +1,94 @@ + + + + +OCSP_cert_to_id + + + + + + + + + + +

NAME

+ +

OCSP_cert_to_id, OCSP_cert_id_new, OCSP_CERTID_free, OCSP_id_issuer_cmp, OCSP_id_cmp, OCSP_id_get0_info - OCSP certificate ID utility functions

+ +

SYNOPSIS

+ +
#include <openssl/ocsp.h>
+
+OCSP_CERTID *OCSP_cert_to_id(const EVP_MD *dgst,
+                             X509 *subject, X509 *issuer);
+
+OCSP_CERTID *OCSP_cert_id_new(const EVP_MD *dgst,
+                              X509_NAME *issuerName,
+                              ASN1_BIT_STRING *issuerKey,
+                              ASN1_INTEGER *serialNumber);
+
+void OCSP_CERTID_free(OCSP_CERTID *id);
+
+int OCSP_id_issuer_cmp(const OCSP_CERTID *a, const OCSP_CERTID *b);
+int OCSP_id_cmp(const OCSP_CERTID *a, const OCSP_CERTID *b);
+
+int OCSP_id_get0_info(ASN1_OCTET_STRING **piNameHash, ASN1_OBJECT **pmd,
+                      ASN1_OCTET_STRING **pikeyHash,
+                      ASN1_INTEGER **pserial, OCSP_CERTID *cid);
+ +

DESCRIPTION

+ +

OCSP_cert_to_id() creates and returns a new OCSP_CERTID structure using message digest dgst for certificate subject with issuer issuer. If dgst is NULL then SHA1 is used.

+ +

OCSP_cert_id_new() creates and returns a new OCSP_CERTID using dgst and issuer name issuerName, issuer key hash issuerKey and serial number serialNumber.

+ +

OCSP_CERTID_free() frees up id.

+ +

OCSP_id_cmp() compares OCSP_CERTID a and b.

+ +

OCSP_id_issuer_cmp() compares only the issuer name of OCSP_CERTID a and b.

+ +

OCSP_id_get0_info() returns the issuer name hash, hash OID, issuer key hash and serial number contained in cid. If any of the values are not required the corresponding parameter can be set to NULL.

+ +

RETURN VALUES

+ +

OCSP_cert_to_id() and OCSP_cert_id_new() return either a pointer to a valid OCSP_CERTID structure or NULL if an error occurred.

+ +

OCSP_id_cmp() and OCSP_id_issuer_cmp() returns zero for a match and non-zero otherwise.

+ +

OCSP_CERTID_free() does not return a value.

+ +

OCSP_id_get0_info() returns 1 for success and 0 for failure.

+ +

NOTES

+ +

OCSP clients will typically only use OCSP_cert_to_id() or OCSP_cert_id_new(): the other functions are used by responder applications.

+ +

The values returned by OCSP_id_get0_info() are internal pointers and MUST NOT be freed up by an application: they will be freed when the corresponding OCSP_CERTID structure is freed.

+ +

SEE ALSO

+ +

crypto(7), OCSP_request_add1_nonce(3), OCSP_REQUEST_new(3), OCSP_resp_find_status(3), OCSP_response_status(3), OCSP_sendreq_new(3)

+ +

COPYRIGHT

+ +

Copyright 2015-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OCSP_request_add1_nonce.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OCSP_request_add1_nonce.html new file mode 100644 index 00000000..1fb5c504 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OCSP_request_add1_nonce.html @@ -0,0 +1,82 @@ + + + + +OCSP_request_add1_nonce + + + + + + + + + + +

NAME

+ +

OCSP_request_add1_nonce, OCSP_basic_add1_nonce, OCSP_check_nonce, OCSP_copy_nonce - OCSP nonce functions

+ +

SYNOPSIS

+ +
#include <openssl/ocsp.h>
+
+int OCSP_request_add1_nonce(OCSP_REQUEST *req, unsigned char *val, int len);
+int OCSP_basic_add1_nonce(OCSP_BASICRESP *resp, unsigned char *val, int len);
+int OCSP_copy_nonce(OCSP_BASICRESP *resp, OCSP_REQUEST *req);
+int OCSP_check_nonce(OCSP_REQUEST *req, OCSP_BASICRESP *resp);
+ +

DESCRIPTION

+ +

OCSP_request_add1_nonce() adds a nonce of value val and length len to OCSP request req. If val is NULL a random nonce is used. If len is zero or negative a default length will be used (currently 16 bytes).

+ +

OCSP_basic_add1_nonce() is identical to OCSP_request_add1_nonce() except it adds a nonce to OCSP basic response resp.

+ +

OCSP_check_nonce() compares the nonce value in req and resp.

+ +

OCSP_copy_nonce() copies any nonce value present in req to resp.

+ +

RETURN VALUES

+ +

OCSP_request_add1_nonce() and OCSP_basic_add1_nonce() return 1 for success and 0 for failure.

+ +

OCSP_copy_nonce() returns 1 if a nonce was successfully copied, 2 if no nonce was present in req and 0 if an error occurred.

+ +

OCSP_check_nonce() returns the result of the nonce comparison between req and resp. The return value indicates the result of the comparison. If nonces are present and equal 1 is returned. If the nonces are absent 2 is returned. If a nonce is present in the response only 3 is returned. If nonces are present and unequal 0 is returned. If the nonce is present in the request only then -1 is returned.

+ +

NOTES

+ +

For most purposes the nonce value in a request is set to a random value so the val parameter in OCSP_request_add1_nonce() is usually NULL.

+ +

An OCSP nonce is typically added to an OCSP request to thwart replay attacks by checking the same nonce value appears in the response.

+ +

Some responders may include a nonce in all responses even if one is not supplied.

+ +

Some responders cache OCSP responses and do not sign each response for 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 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 condition.

+ +

SEE ALSO

+ +

crypto(7), OCSP_cert_to_id(3), OCSP_REQUEST_new(3), OCSP_resp_find_status(3), OCSP_response_status(3), OCSP_sendreq_new(3)

+ +

COPYRIGHT

+ +

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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OCSP_resp_find_status.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OCSP_resp_find_status.html new file mode 100644 index 00000000..cd47020d --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OCSP_resp_find_status.html @@ -0,0 +1,140 @@ + + + + +OCSP_resp_find_status + + + + + + + + + + +

NAME

+ +

OCSP_resp_get0_certs, OCSP_resp_get0_signer, OCSP_resp_get0_id, OCSP_resp_get1_id, OCSP_resp_get0_produced_at, OCSP_resp_get0_signature, OCSP_resp_get0_tbs_sigalg, OCSP_resp_get0_respdata, OCSP_resp_find_status, OCSP_resp_count, OCSP_resp_get0, OCSP_resp_find, OCSP_single_get0_status, OCSP_check_validity, OCSP_basic_verify - OCSP response utility functions

+ +

SYNOPSIS

+ +
#include <openssl/ocsp.h>
+
+int OCSP_resp_find_status(OCSP_BASICRESP *bs, OCSP_CERTID *id, int *status,
+                          int *reason,
+                          ASN1_GENERALIZEDTIME **revtime,
+                          ASN1_GENERALIZEDTIME **thisupd,
+                          ASN1_GENERALIZEDTIME **nextupd);
+
+int OCSP_resp_count(OCSP_BASICRESP *bs);
+OCSP_SINGLERESP *OCSP_resp_get0(OCSP_BASICRESP *bs, int idx);
+int OCSP_resp_find(OCSP_BASICRESP *bs, OCSP_CERTID *id, int last);
+int OCSP_single_get0_status(OCSP_SINGLERESP *single, int *reason,
+                            ASN1_GENERALIZEDTIME **revtime,
+                            ASN1_GENERALIZEDTIME **thisupd,
+                            ASN1_GENERALIZEDTIME **nextupd);
+
+const ASN1_GENERALIZEDTIME *OCSP_resp_get0_produced_at(
+                            const OCSP_BASICRESP* single);
+
+const ASN1_OCTET_STRING *OCSP_resp_get0_signature(const OCSP_BASICRESP *bs);
+const X509_ALGOR *OCSP_resp_get0_tbs_sigalg(const OCSP_BASICRESP *bs);
+const OCSP_RESPDATA *OCSP_resp_get0_respdata(const OCSP_BASICRESP *bs);
+const STACK_OF(X509) *OCSP_resp_get0_certs(const OCSP_BASICRESP *bs);
+
+int OCSP_resp_get0_signer(OCSP_BASICRESP *bs, X509 **signer,
+                          STACK_OF(X509) *extra_certs);
+
+int OCSP_resp_get0_id(const OCSP_BASICRESP *bs,
+                      const ASN1_OCTET_STRING **pid,
+                      const X509_NAME **pname);
+int OCSP_resp_get1_id(const OCSP_BASICRESP *bs,
+                      ASN1_OCTET_STRING **pid,
+                      X509_NAME **pname);
+
+int OCSP_check_validity(ASN1_GENERALIZEDTIME *thisupd,
+                        ASN1_GENERALIZEDTIME *nextupd,
+                        long sec, long maxsec);
+
+int OCSP_basic_verify(OCSP_BASICRESP *bs, STACK_OF(X509) *certs,
+                     X509_STORE *st, unsigned long flags);
+ +

DESCRIPTION

+ +

OCSP_resp_find_status() searches bs for an OCSP response for id. If it is successful the fields of the response are returned in *status, *reason, *revtime, *thisupd and *nextupd. The *status value will be one of V_OCSP_CERTSTATUS_GOOD, V_OCSP_CERTSTATUS_REVOKED or V_OCSP_CERTSTATUS_UNKNOWN. The *reason and *revtime fields are only set if the status is V_OCSP_CERTSTATUS_REVOKED. If set the *reason field will be set to the revocation reason which will be one of OCSP_REVOKED_STATUS_NOSTATUS, OCSP_REVOKED_STATUS_UNSPECIFIED, OCSP_REVOKED_STATUS_KEYCOMPROMISE, OCSP_REVOKED_STATUS_CACOMPROMISE, OCSP_REVOKED_STATUS_AFFILIATIONCHANGED, OCSP_REVOKED_STATUS_SUPERSEDED, OCSP_REVOKED_STATUS_CESSATIONOFOPERATION, OCSP_REVOKED_STATUS_CERTIFICATEHOLD or OCSP_REVOKED_STATUS_REMOVEFROMCRL.

+ +

OCSP_resp_count() returns the number of OCSP_SINGLERESP structures in bs.

+ +

OCSP_resp_get0() returns the OCSP_SINGLERESP structure in bs corresponding to index idx. Where idx runs from 0 to OCSP_resp_count(bs) - 1.

+ +

OCSP_resp_find() searches bs for id and returns the index of the first matching entry after last or starting from the beginning if last is -1.

+ +

OCSP_single_get0_status() extracts the fields of single in *reason, *revtime, *thisupd and *nextupd.

+ +

OCSP_resp_get0_produced_at() extracts the producedAt field from the single response bs.

+ +

OCSP_resp_get0_signature() returns the signature from bs.

+ +

OCSP_resp_get0_tbs_sigalg() returns the signatureAlgorithm from bs.

+ +

OCSP_resp_get0_respdata() returns the tbsResponseData from bs.

+ +

OCSP_resp_get0_certs() returns any certificates included in bs.

+ +

OCSP_resp_get0_signer() attempts to retrieve the certificate that directly signed bs. The OCSP protocol does not require that this certificate is included in the certs field of the response, so additional certificates can be supplied in extra_certs if the certificates that may have signed the response are known via some out-of-band mechanism.

+ +

OCSP_resp_get0_id() gets the responder id of bs. If the responder ID is a name then <*pname> is set to the name and *pid is set to NULL. If the responder ID is by key ID then *pid is set to the key ID and *pname is set to NULL. OCSP_resp_get1_id() leaves ownership of *pid and *pname with the caller, who is responsible for freeing them. Both functions return 1 in case of success and 0 in case of failure. If OCSP_resp_get1_id() returns 0, no freeing of the results is necessary.

+ +

OCSP_check_validity() checks the validity of thisupd and nextupd values which will be typically obtained from OCSP_resp_find_status() or OCSP_single_get0_status(). If sec is non-zero it indicates how many seconds leeway should be allowed in the check. If maxsec is positive it indicates the maximum age of thisupd in seconds.

+ +

OCSP_basic_verify() checks that the basic response message bs is correctly signed and that the signer certificate can be validated. It takes st as the trusted store and certs as a set of untrusted intermediate certificates. The function first tries to find the signer certificate of the response in <certs>. It also searches the certificates the responder may have included in bs unless the flags contain OCSP_NOINTERN. It fails if the signer certificate cannot be found. Next, the function checks the signature of bs and fails on error unless the flags contain OCSP_NOSIGS. Then the function already returns success if the flags contain OCSP_NOVERIFY or if the signer certificate was found in certs and the flags contain OCSP_TRUSTOTHER. Otherwise the function continues by validating the signer certificate. To this end, all certificates in cert and in bs are considered as untrusted certificates for the construction of the validation path for the signer certificate unless the OCSP_NOCHAIN flag is set. After successful path validation the function returns success if the OCSP_NOCHECKS flag is set. Otherwise it verifies that the signer certificate meets the OCSP issuer criteria including potential delegation. If this does not succeed and the flags do not contain OCSP_NOEXPLICIT the function checks for explicit trust for OCSP signing in the root CA certificate.

+ +

RETURN VALUES

+ +

OCSP_resp_find_status() returns 1 if id is found in bs and 0 otherwise.

+ +

OCSP_resp_count() returns the total number of OCSP_SINGLERESP fields in bs.

+ +

OCSP_resp_get0() returns a pointer to an OCSP_SINGLERESP structure or NULL if idx is out of range.

+ +

OCSP_resp_find() returns the index of id in bs (which may be 0) or -1 if id was not found.

+ +

OCSP_single_get0_status() returns the status of single or -1 if an error occurred.

+ +

OCSP_resp_get0_signer() returns 1 if the signing certificate was located, or 0 on error.

+ +

OCSP_basic_verify() returns 1 on success, 0 on error, or -1 on fatal error such as malloc failure.

+ +

NOTES

+ +

Applications will typically call OCSP_resp_find_status() using the certificate ID of interest and then check its validity using OCSP_check_validity(). They can then take appropriate action based on the status of the certificate.

+ +

An OCSP response for a certificate contains thisUpdate and nextUpdate fields. Normally the current time should be between these two values. To account for clock skew the maxsec field can be set to non-zero in OCSP_check_validity(). Some responders do not set the nextUpdate field, this would otherwise mean an ancient response would be considered valid: the maxsec parameter to OCSP_check_validity() can be used to limit the permitted age of responses.

+ +

The values written to *revtime, *thisupd and *nextupd by OCSP_resp_find_status() and OCSP_single_get0_status() are internal pointers which MUST NOT be freed up by the calling application. Any or all of these parameters can be set to NULL if their value is not required.

+ +

SEE ALSO

+ +

crypto(7), OCSP_cert_to_id(3), OCSP_request_add1_nonce(3), OCSP_REQUEST_new(3), OCSP_response_status(3), OCSP_sendreq_new(3)

+ +

COPYRIGHT

+ +

Copyright 2015-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OCSP_response_status.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OCSP_response_status.html new file mode 100644 index 00000000..5f978866 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OCSP_response_status.html @@ -0,0 +1,107 @@ + + + + +OCSP_response_status + + + + + + + + + + +

NAME

+ +

OCSP_response_status, OCSP_response_get1_basic, OCSP_response_create, OCSP_RESPONSE_free, OCSP_RESPID_set_by_name, OCSP_RESPID_set_by_key, OCSP_RESPID_match, OCSP_basic_sign, OCSP_basic_sign_ctx - OCSP response functions

+ +

SYNOPSIS

+ +
#include <openssl/ocsp.h>
+
+int OCSP_response_status(OCSP_RESPONSE *resp);
+OCSP_BASICRESP *OCSP_response_get1_basic(OCSP_RESPONSE *resp);
+OCSP_RESPONSE *OCSP_response_create(int status, OCSP_BASICRESP *bs);
+void OCSP_RESPONSE_free(OCSP_RESPONSE *resp);
+
+int OCSP_RESPID_set_by_name(OCSP_RESPID *respid, X509 *cert);
+int OCSP_RESPID_set_by_key(OCSP_RESPID *respid, X509 *cert);
+int OCSP_RESPID_match(OCSP_RESPID *respid, X509 *cert);
+
+int OCSP_basic_sign(OCSP_BASICRESP *brsp, X509 *signer, EVP_PKEY *key,
+                    const EVP_MD *dgst, STACK_OF(X509) *certs,
+                    unsigned long flags);
+int OCSP_basic_sign_ctx(OCSP_BASICRESP *brsp, X509 *signer, EVP_MD_CTX *ctx,
+                        STACK_OF(X509) *certs, unsigned long flags);
+ +

DESCRIPTION

+ +

OCSP_response_status() returns the OCSP response status of resp. It returns one of the values: OCSP_RESPONSE_STATUS_SUCCESSFUL, OCSP_RESPONSE_STATUS_MALFORMEDREQUEST, OCSP_RESPONSE_STATUS_INTERNALERROR, OCSP_RESPONSE_STATUS_TRYLATER OCSP_RESPONSE_STATUS_SIGREQUIRED, or OCSP_RESPONSE_STATUS_UNAUTHORIZED.

+ +

OCSP_response_get1_basic() decodes and returns the OCSP_BASICRESP structure contained in resp.

+ +

OCSP_response_create() creates and returns an OCSP_RESPONSE structure for status and optionally including basic response bs.

+ +

OCSP_RESPONSE_free() frees up OCSP response resp.

+ +

OCSP_RESPID_set_by_name() sets the name of the OCSP_RESPID to be the same as the subject name in the supplied X509 certificate cert for the OCSP responder.

+ +

OCSP_RESPID_set_by_key() sets the key of the OCSP_RESPID to be the same as the key in the supplied X509 certificate cert for the OCSP responder. The key is stored as a SHA1 hash.

+ +

Note that an OCSP_RESPID can only have one of the name, or the key set. Calling OCSP_RESPID_set_by_name() or OCSP_RESPID_set_by_key() will clear any existing setting.

+ +

OCSP_RESPID_match() tests whether the OCSP_RESPID given in respid matches with the X509 certificate cert.

+ +

OCSP_basic_sign() signs OCSP response brsp using certificate signer, private key key, digest dgst and additional certificates certs. If the flags option OCSP_NOCERTS is set then no certificates will be included in the response. If the flags option OCSP_RESPID_KEY is set then the responder is identified by key ID rather than by name. OCSP_basic_sign_ctx() also signs OCSP response brsp but uses the parameters contained in digest context ctx.

+ +

RETURN VALUES

+ +

OCSP_RESPONSE_status() returns a status value.

+ +

OCSP_response_get1_basic() returns an OCSP_BASICRESP structure pointer or NULL if an error occurred.

+ +

OCSP_response_create() returns an OCSP_RESPONSE structure pointer or NULL if an error occurred.

+ +

OCSP_RESPONSE_free() does not return a value.

+ +

OCSP_RESPID_set_by_name(), OCSP_RESPID_set_by_key(), OCSP_basic_sign(), and OCSP_basic_sign_ctx() return 1 on success or 0 on failure.

+ +

OCSP_RESPID_match() returns 1 if the OCSP_RESPID and the X509 certificate match or 0 otherwise.

+ +

NOTES

+ +

OCSP_response_get1_basic() is only called if the status of a response is OCSP_RESPONSE_STATUS_SUCCESSFUL.

+ +

SEE ALSO

+ +

crypto(7) OCSP_cert_to_id(3) OCSP_request_add1_nonce(3) OCSP_REQUEST_new(3) OCSP_resp_find_status(3) OCSP_sendreq_new(3) OCSP_RESPID_new(3) OCSP_RESPID_free(3)

+ +

HISTORY

+ +

The OCSP_RESPID_set_by_name(), OCSP_RESPID_set_by_key() and OCSP_RESPID_match() functions were added in OpenSSL 1.1.0a.

+ +

The OCSP_basic_sign_ctx() function was added in OpenSSL 1.1.1.

+ +

COPYRIGHT

+ +

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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OCSP_sendreq_new.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OCSP_sendreq_new.html new file mode 100644 index 00000000..2eba48a1 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OCSP_sendreq_new.html @@ -0,0 +1,107 @@ + + + + +OCSP_sendreq_new + + + + + + + + + + +

NAME

+ +

OCSP_sendreq_new, OCSP_sendreq_nbio, OCSP_REQ_CTX_free, OCSP_set_max_response_length, OCSP_REQ_CTX_add1_header, OCSP_REQ_CTX_set1_req, OCSP_sendreq_bio - OCSP responder query functions

+ +

SYNOPSIS

+ +
#include <openssl/ocsp.h>
+
+OCSP_REQ_CTX *OCSP_sendreq_new(BIO *io, const char *path, OCSP_REQUEST *req,
+                               int maxline);
+
+int OCSP_sendreq_nbio(OCSP_RESPONSE **presp, OCSP_REQ_CTX *rctx);
+
+void OCSP_REQ_CTX_free(OCSP_REQ_CTX *rctx);
+
+void OCSP_set_max_response_length(OCSP_REQ_CTX *rctx, unsigned long len);
+
+int OCSP_REQ_CTX_add1_header(OCSP_REQ_CTX *rctx,
+                             const char *name, const char *value);
+
+int OCSP_REQ_CTX_set1_req(OCSP_REQ_CTX *rctx, OCSP_REQUEST *req);
+
+OCSP_RESPONSE *OCSP_sendreq_bio(BIO *io, const char *path, OCSP_REQUEST *req);
+ +

DESCRIPTION

+ +

The function OCSP_sendreq_new() returns an OCSP_CTX structure using the responder io, the URL path path, the OCSP request req and with a response header maximum line length of maxline. If maxline is zero a default value of 4k is used. The OCSP request req may be set to NULL and provided later if required.

+ +

OCSP_sendreq_nbio() performs non-blocking I/O on the OCSP request context rctx. When the operation is complete it returns the response in *presp.

+ +

OCSP_REQ_CTX_free() frees up the OCSP context rctx.

+ +

OCSP_set_max_response_length() sets the maximum response length for rctx to len. If the response exceeds this length an error occurs. If not set a default value of 100k is used.

+ +

OCSP_REQ_CTX_add1_header() adds header name with value value to the context rctx. It can be called more than once to add multiple headers. It MUST be called before any calls to OCSP_sendreq_nbio(). The req parameter in the initial to OCSP_sendreq_new() call MUST be set to NULL if additional headers are set.

+ +

OCSP_REQ_CTX_set1_req() sets the OCSP request in rctx to req. This function should be called after any calls to OCSP_REQ_CTX_add1_header().

+ +

OCSP_sendreq_bio() performs an OCSP request using the responder io, the URL path path, and the OCSP request req with a response header maximum line length 4k. It waits indefinitely on a response.

+ +

RETURN VALUES

+ +

OCSP_sendreq_new() returns a valid OCSP_REQ_CTX structure or NULL if an error occurred.

+ +

OCSP_sendreq_nbio() returns 1 if the operation was completed successfully, -1 if the operation should be retried and 0 if an error occurred.

+ +

OCSP_REQ_CTX_add1_header() and OCSP_REQ_CTX_set1_req() return 1 for success and 0 for failure.

+ +

OCSP_sendreq_bio() returns the OCSP_RESPONSE structure sent by the responder or NULL if an error occurred.

+ +

OCSP_REQ_CTX_free() and OCSP_set_max_response_length() do not return values.

+ +

NOTES

+ +

These functions only perform a minimal HTTP query to a responder. If an application wishes to support more advanced features it should use an alternative more complete HTTP library.

+ +

Currently only HTTP POST queries to responders are supported.

+ +

The arguments to OCSP_sendreq_new() correspond to the components of the URL. For example if the responder URL is http://ocsp.com/ocspreq the BIO io should be connected to host ocsp.com on port 80 and path should be set to "/ocspreq"

+ +

The headers added with OCSP_REQ_CTX_add1_header() are of the form "name: value" or just "name" if value is NULL. So to add a Host header for ocsp.com you would call:

+ +
OCSP_REQ_CTX_add1_header(ctx, "Host", "ocsp.com");
+ +

If OCSP_sendreq_nbio() indicates an operation should be retried the 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 I/O efficiently. It is retained for compatibility and its use in new applications is not recommended.

+ +

SEE ALSO

+ +

crypto(7), OCSP_cert_to_id(3), OCSP_request_add1_nonce(3), OCSP_REQUEST_new(3), OCSP_resp_find_status(3), OCSP_response_status(3)

+ +

COPYRIGHT

+ +

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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OPENSSL_Applink.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OPENSSL_Applink.html new file mode 100644 index 00000000..6522064a --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OPENSSL_Applink.html @@ -0,0 +1,49 @@ + + + + +OPENSSL_Applink + + + + + + + + + + +

NAME

+ +

OPENSSL_Applink - glue between OpenSSL BIO and Win32 compiler run-time

+ +

SYNOPSIS

+ +
__declspec(dllexport) void **OPENSSL_Applink();
+ +

DESCRIPTION

+ +

OPENSSL_Applink is application-side interface which provides a glue between OpenSSL BIO layer and Win32 compiler run-time environment. Even though it appears at application side, it's essentially OpenSSL private interface. For this reason application developers are not expected to implement it, but to compile provided module with compiler of their choice and link it into the target application. The referred module is available as applink.c, located alongside the public header files (only on the platforms where applicable).

+ +

RETURN VALUES

+ +

Not available.

+ +

COPYRIGHT

+ +

Copyright 2004-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OPENSSL_LH_COMPFUNC.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OPENSSL_LH_COMPFUNC.html new file mode 100644 index 00000000..0afff468 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OPENSSL_LH_COMPFUNC.html @@ -0,0 +1,176 @@ + + + + +OPENSSL_LH_COMPFUNC + + + + + + + + + + +

NAME

+ +

LHASH, DECLARE_LHASH_OF, OPENSSL_LH_COMPFUNC, OPENSSL_LH_HASHFUNC, OPENSSL_LH_DOALL_FUNC, LHASH_DOALL_ARG_FN_TYPE, IMPLEMENT_LHASH_HASH_FN, IMPLEMENT_LHASH_COMP_FN, lh_TYPE_new, lh_TYPE_free, lh_TYPE_insert, lh_TYPE_delete, lh_TYPE_retrieve, lh_TYPE_doall, lh_TYPE_doall_arg, lh_TYPE_error - dynamic hash table

+ +

SYNOPSIS

+ +
#include <openssl/lhash.h>
+
+DECLARE_LHASH_OF(TYPE);
+
+LHASH *lh_TYPE_new(OPENSSL_LH_HASHFUNC hash, OPENSSL_LH_COMPFUNC compare);
+void lh_TYPE_free(LHASH_OF(TYPE) *table);
+
+TYPE *lh_TYPE_insert(LHASH_OF(TYPE) *table, TYPE *data);
+TYPE *lh_TYPE_delete(LHASH_OF(TYPE) *table, TYPE *data);
+TYPE *lh_retrieve(LHASH_OF(TYPE) *table, TYPE *data);
+
+void lh_TYPE_doall(LHASH_OF(TYPE) *table, OPENSSL_LH_DOALL_FUNC func);
+void lh_TYPE_doall_arg(LHASH_OF(TYPE) *table, OPENSSL_LH_DOALL_FUNCARG func,
+                       TYPE *arg);
+
+int lh_TYPE_error(LHASH_OF(TYPE) *table);
+
+typedef int (*OPENSSL_LH_COMPFUNC)(const void *, const void *);
+typedef unsigned long (*OPENSSL_LH_HASHFUNC)(const void *);
+typedef void (*OPENSSL_LH_DOALL_FUNC)(const void *);
+typedef void (*LHASH_DOALL_ARG_FN_TYPE)(const void *, const void *);
+ +

DESCRIPTION

+ +

This library implements type-checked dynamic hash tables. The hash table entries can be arbitrary structures. Usually they consist of key and value fields. In the description here, TYPE is used a placeholder for any of the OpenSSL datatypes, such as SSL_SESSION.

+ +

lh_TYPE_new() creates a new LHASH_OF(TYPE) structure to store arbitrary data entries, and specifies the 'hash' and 'compare' callbacks to be used in organising the table's entries. The hash callback takes a pointer to a table entry as its argument and returns 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 compare callback takes two arguments (pointers to two hash table entries), and returns 0 if their keys are equal, non-zero otherwise.

+ +

If your hash table will contain items of some particular type and the hash and compare callbacks hash/compare these types, then the IMPLEMENT_LHASH_HASH_FN and IMPLEMENT_LHASH_COMP_FN macros can be used to create callback wrappers of the prototypes required by lh_TYPE_new() as shown in this example:

+ +
/*
+ * Implement the hash and compare functions; "stuff" can be any word.
+ */
+static unsigned long stuff_hash(const TYPE *a)
+{
+    ...
+}
+static int stuff_cmp(const TYPE *a, const TYPE *b)
+{
+    ...
+}
+
+/*
+ * Implement the wrapper functions.
+ */
+static IMPLEMENT_LHASH_HASH_FN(stuff, TYPE)
+static IMPLEMENT_LHASH_COMP_FN(stuff, TYPE)
+ +

If the type is going to be used in several places, the following macros can be used in a common header file to declare the function wrappers:

+ +
DECLARE_LHASH_HASH_FN(stuff, TYPE)
+DECLARE_LHASH_COMP_FN(stuff, TYPE)
+ +

Then a hash table of TYPE objects can be created using this:

+ +
LHASH_OF(TYPE) *htable;
+
+htable = lh_TYPE_new(LHASH_HASH_FN(stuff), LHASH_COMP_FN(stuff));
+ +

lh_TYPE_free() frees the LHASH_OF(TYPE) structure table. Allocated hash table entries will not be freed; consider using lh_TYPE_doall() to deallocate any remaining entries in the hash table (see below).

+ +

lh_TYPE_insert() inserts the structure pointed to by data into table. If there already is an entry with the same key, the old value is replaced. Note that lh_TYPE_insert() stores pointers, the data are not copied.

+ +

lh_TYPE_delete() deletes an entry from table.

+ +

lh_TYPE_retrieve() looks up an entry in table. Normally, data is a structure with the key field(s) set; the function will return a pointer to a fully populated structure.

+ +

lh_TYPE_doall() will, for every entry in the hash table, call func with the data item as its parameter. For example:

+ +
/* Cleans up resources belonging to 'a' (this is implemented elsewhere) */
+void TYPE_cleanup_doall(TYPE *a);
+
+/* Implement a prototype-compatible wrapper for "TYPE_cleanup" */
+IMPLEMENT_LHASH_DOALL_FN(TYPE_cleanup, TYPE)
+
+/* Call "TYPE_cleanup" against all items in a hash table. */
+lh_TYPE_doall(hashtable, LHASH_DOALL_FN(TYPE_cleanup));
+
+/* Then the hash table itself can be deallocated */
+lh_TYPE_free(hashtable);
+ +

When doing this, be careful if you delete entries from the hash table in your callbacks: the table may decrease in size, moving the item that you are currently on down lower in the hash table - this could cause some entries to be skipped during the iteration. The second best solution to this problem is to set hash->down_load=0 before you start (which will stop the hash table ever decreasing in size). The best solution is probably to avoid deleting items from the hash table inside a "doall" callback!

+ +

lh_TYPE_doall_arg() is the same as lh_TYPE_doall() except that func will be called with arg as the second argument and func should be of type LHASH_DOALL_ARG_FN_TYPE (a callback prototype that is passed both the table entry and an extra argument). As with lh_doall(), you can instead choose to declare your callback with a prototype matching the types you are dealing with and use the declare/implement macros to create compatible wrappers that cast variables before calling your type-specific callbacks. An example of this is demonstrated here (printing all hash table entries to a BIO that is provided by the caller):

+ +
/* Prints item 'a' to 'output_bio' (this is implemented elsewhere) */
+void TYPE_print_doall_arg(const TYPE *a, BIO *output_bio);
+
+/* Implement a prototype-compatible wrapper for "TYPE_print" */
+static IMPLEMENT_LHASH_DOALL_ARG_FN(TYPE, const TYPE, BIO)
+
+/* Print out the entire hashtable to a particular BIO */
+lh_TYPE_doall_arg(hashtable, LHASH_DOALL_ARG_FN(TYPE_print), BIO,
+                  logging_bio);
+ +

lh_TYPE_error() can be used to determine if an error occurred in the last operation.

+ +

RETURN VALUES

+ +

lh_TYPE_new() returns NULL on error, otherwise a pointer to the new LHASH structure.

+ +

When a hash table entry is replaced, lh_TYPE_insert() returns the value being replaced. NULL is returned on normal operation and on error.

+ +

lh_TYPE_delete() returns the entry being deleted. NULL is returned if there is no such value in the hash table.

+ +

lh_TYPE_retrieve() returns the hash table entry if it has been found, NULL otherwise.

+ +

lh_TYPE_error() returns 1 if an error occurred in the last operation, 0 otherwise. It's meaningful only after non-retrieve operations.

+ +

lh_TYPE_free(), lh_TYPE_doall() and lh_TYPE_doall_arg() return no values.

+ +

NOTE

+ +

The LHASH code is not thread safe. All updating operations, as well as lh_TYPE_error call must be performed under a write lock. All retrieve operations should be performed under a read lock, unless accurate usage statistics are desired. In which case, a write lock should be used for retrieve operations as well. For output of the usage statistics, using the functions from OPENSSL_LH_stats(3), a read lock suffices.

+ +

The LHASH code regards table entries as constant data. As such, it internally represents lh_insert()'d items with a "const void *" pointer type. This is why callbacks such as those used by lh_doall() and lh_doall_arg() declare their prototypes with "const", even for the parameters that pass back the table items' data pointers - for consistency, user-provided data is "const" at all times as far as the LHASH code is concerned. However, as callers are themselves providing these pointers, they can choose whether they too should be treating 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 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 modifications to table item passed back in the lh_doall() or lh_doall_arg() callbacks (see the "TYPE_cleanup" example above). If so, the caller can either cast the "const" away (if they're providing the raw callbacks themselves) or use the macros to declare/implement the wrapper functions without "const" types.

+ +

Callers that only have "const" access to data they're indexing in a table, yet declare callbacks without constant types (or cast the "const" away themselves), are therefore creating their own risks/bugs without being encouraged to do so by the API. On a related note, those auditing code should pay special attention to any instances of DECLARE/IMPLEMENT_LHASH_DOALL_[ARG_]_FN macros that provide types without any "const" qualifiers.

+ +

BUGS

+ +

lh_TYPE_insert() returns NULL both for success and error.

+ +

SEE ALSO

+ +

OPENSSL_LH_stats(3)

+ +

HISTORY

+ +

In OpenSSL 1.0.0, the lhash interface was revamped for better type checking.

+ +

COPYRIGHT

+ +

Copyright 2000-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OPENSSL_LH_stats.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OPENSSL_LH_stats.html new file mode 100644 index 00000000..6b088f44 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OPENSSL_LH_stats.html @@ -0,0 +1,75 @@ + + + + +OPENSSL_LH_stats + + + + + + + + + + +

NAME

+ +

OPENSSL_LH_stats, OPENSSL_LH_node_stats, OPENSSL_LH_node_usage_stats, OPENSSL_LH_stats_bio, OPENSSL_LH_node_stats_bio, OPENSSL_LH_node_usage_stats_bio - LHASH statistics

+ +

SYNOPSIS

+ +
#include <openssl/lhash.h>
+
+void OPENSSL_LH_stats(LHASH *table, FILE *out);
+void OPENSSL_LH_node_stats(LHASH *table, FILE *out);
+void OPENSSL_LH_node_usage_stats(LHASH *table, FILE *out);
+
+void OPENSSL_LH_stats_bio(LHASH *table, BIO *out);
+void OPENSSL_LH_node_stats_bio(LHASH *table, BIO *out);
+void OPENSSL_LH_node_usage_stats_bio(LHASH *table, BIO *out);
+ +

DESCRIPTION

+ +

The LHASH structure records statistics about most aspects of accessing the hash table.

+ +

OPENSSL_LH_stats() prints out statistics on the size of the hash table, how many entries are in it, and the number and result of calls to the routines in this library.

+ +

OPENSSL_LH_node_stats() prints the number of entries for each 'bucket' in the hash table.

+ +

OPENSSL_LH_node_usage_stats() prints out a short summary of the state of the hash table. It prints the 'load' and the 'actual load'. The load is the average number of data items per 'bucket' in the hash table. The 'actual load' is the average number of items per 'bucket', but only for buckets which contain entries. So the 'actual load' is the average number of searches that will need to find an item in the hash table, while the 'load' is the average number that will be done to record a miss.

+ +

OPENSSL_LH_stats_bio(), OPENSSL_LH_node_stats_bio() and OPENSSL_LH_node_usage_stats_bio() are the same as the above, except that the output goes to a BIO.

+ +

RETURN VALUES

+ +

These functions do not return values.

+ +

NOTE

+ +

These calls should be made under a read lock. Refer to "NOTE" in OPENSSL_LH_COMPFUNC(3) for more details about the locks required when using the LHASH data structure.

+ +

SEE ALSO

+ +

bio(7), OPENSSL_LH_COMPFUNC(3)

+ +

COPYRIGHT

+ +

Copyright 2000-2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OPENSSL_VERSION_NUMBER.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OPENSSL_VERSION_NUMBER.html new file mode 100644 index 00000000..1e257b2d --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OPENSSL_VERSION_NUMBER.html @@ -0,0 +1,132 @@ + + + + +OPENSSL_VERSION_NUMBER + + + + + + + + + + +

NAME

+ +

OPENSSL_VERSION_NUMBER, OPENSSL_VERSION_TEXT, OpenSSL_version, OpenSSL_version_num - get OpenSSL version number

+ +

SYNOPSIS

+ +
#include <openssl/opensslv.h>
+#define OPENSSL_VERSION_NUMBER 0xnnnnnnnnnL
+#define OPENSSL_VERSION_TEXT "OpenSSL x.y.z xx XXX xxxx"
+
+#include <openssl/crypto.h>
+
+unsigned long OpenSSL_version_num();
+const char *OpenSSL_version(int t);
+ +

DESCRIPTION

+ +

OPENSSL_VERSION_NUMBER is a numeric release version identifier:

+ +
MNNFFPPS: major minor fix patch status
+ +

The status nibble has one of the values 0 for development, 1 to e for betas 1 to 14, and f for release.

+ +

for example

+ +
0x000906000 == 0.9.6 dev
+0x000906023 == 0.9.6b beta 3
+0x00090605f == 0.9.6e release
+ +

Versions prior to 0.9.3 have identifiers < 0x0930. Versions between 0.9.3 and 0.9.5 had a version identifier with this interpretation:

+ +
MMNNFFRBB major minor fix final beta/patch
+ +

for example

+ +
0x000904100 == 0.9.4 release
+0x000905000 == 0.9.5 dev
+ +

Version 0.9.5a had an interim interpretation that is like the current one, except the patch level got the highest bit set, to keep continuity. The number was therefore 0x0090581f.

+ +

OPENSSL_VERSION_TEXT is the text variant of the version number and the release date. For example, "OpenSSL 1.0.1a 15 Oct 2015".

+ +

OpenSSL_version_num() returns the version number.

+ +

OpenSSL_version() returns different strings depending on t:

+ +
+ +
OPENSSL_VERSION
+
+ +

The text variant of the version number and the release date. For example, "OpenSSL 1.0.1a 15 Oct 2015".

+ +
+
OPENSSL_CFLAGS
+
+ +

The compiler flags set for the compilation process in the form "compiler: ..." if available or "compiler: information not available" otherwise.

+ +
+
OPENSSL_BUILT_ON
+
+ +

The date of the build process in the form "built on: ..." if available or "built on: date not available" otherwise.

+ +
+
OPENSSL_PLATFORM
+
+ +

The "Configure" target of the library build in the form "platform: ..." if available or "platform: information not available" otherwise.

+ +
+
OPENSSL_DIR
+
+ +

The "OPENSSLDIR" setting of the library build in the form "OPENSSLDIR: "..."" if available or "OPENSSLDIR: N/A" otherwise.

+ +
+
OPENSSL_ENGINES_DIR
+
+ +

The "ENGINESDIR" setting of the library build in the form "ENGINESDIR: "..."" if available or "ENGINESDIR: N/A" otherwise.

+ +
+
+ +

For an unknown t, the text "not available" is returned.

+ +

RETURN VALUES

+ +

OpenSSL_version_num() returns the version number.

+ +

OpenSSL_version() returns requested version strings.

+ +

SEE ALSO

+ +

crypto(7)

+ +

COPYRIGHT

+ +

Copyright 2000-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OPENSSL_config.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OPENSSL_config.html new file mode 100644 index 00000000..3a6b8ba2 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OPENSSL_config.html @@ -0,0 +1,88 @@ + + + + +OPENSSL_config + + + + + + + + + + +

NAME

+ +

OPENSSL_config, OPENSSL_no_config - simple OpenSSL configuration functions

+ +

SYNOPSIS

+ +
#include <openssl/conf.h>
+
+#if OPENSSL_API_COMPAT < 0x10100000L
+void OPENSSL_config(const char *appname);
+void OPENSSL_no_config(void);
+#endif
+ +

DESCRIPTION

+ +

OPENSSL_config() configures OpenSSL using the standard openssl.cnf and reads from the application section appname. If appname is NULL then the default section, openssl_conf, will be used. Errors are silently ignored. Multiple calls have no effect.

+ +

OPENSSL_no_config() disables configuration. If called before OPENSSL_config() no configuration takes place.

+ +

If the application is built with OPENSSL_LOAD_CONF defined, then a call to OpenSSL_add_all_algorithms() will implicitly call OPENSSL_config() first.

+ +

NOTES

+ +

The OPENSSL_config() function is designed to be a very simple "call it and forget it" function. It is however much better than nothing. Applications which need finer control over their configuration functionality should use the configuration functions such as CONF_modules_load() directly. This function is deprecated and its use should be avoided. Applications should instead call CONF_modules_load() during 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 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 ENGINE control operations because they can be performed by editing a configuration file.

+ +

ENVIRONMENT

+ +
+ +
OPENSSL_CONF
+
+ +

The path to the config file. Ignored in set-user-ID and set-group-ID programs.

+ +
+
+ +

RETURN VALUES

+ +

Neither OPENSSL_config() nor OPENSSL_no_config() return a value.

+ +

SEE ALSO

+ +

config(5), CONF_modules_load_file(3)

+ +

HISTORY

+ +

The OPENSSL_no_config() and OPENSSL_config() functions were deprecated in OpenSSL 1.1.0 by OPENSSL_init_crypto().

+ +

COPYRIGHT

+ +

Copyright 2004-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OPENSSL_fork_prepare.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OPENSSL_fork_prepare.html new file mode 100644 index 00000000..55058e48 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OPENSSL_fork_prepare.html @@ -0,0 +1,67 @@ + + + + +OPENSSL_fork_prepare + + + + + + + + + + +

NAME

+ +

OPENSSL_fork_prepare, OPENSSL_fork_parent, OPENSSL_fork_child - OpenSSL fork handlers

+ +

SYNOPSIS

+ +
#include <openssl/crypto.h>
+
+void OPENSSL_fork_prepare(void);
+void OPENSSL_fork_parent(void);
+void OPENSSL_fork_child(void);
+ +

DESCRIPTION

+ +

OpenSSL has state that should be reset when a process forks. For example, the entropy pool used to generate random numbers (and therefore encryption keys) should not be shared across multiple programs. The OPENSSL_fork_prepare(), OPENSSL_fork_parent(), and OPENSSL_fork_child() functions are used to reset this internal state.

+ +

Platforms without fork(2) will probably not need to use these functions. Platforms with fork(2) but without pthread_atfork(3) will probably need to call them manually, as described in the following paragraph. Platforms such as Linux that have both functions will normally not need to call these functions as the OpenSSL library will do so automatically.

+ +

OPENSSL_init_crypto(3) will register these functions with the appropriate handler, when the OPENSSL_INIT_ATFORK flag is used. For other applications, these functions can be called directly. They should be used according to the calling sequence described by the pthread_atfork(3) documentation, which is summarized here. OPENSSL_fork_prepare() should be called before a fork() is done. After the fork() returns, the parent process should call OPENSSL_fork_parent() and the child process should call OPENSSL_fork_child().

+ +

RETURN VALUES

+ +

OPENSSL_fork_prepare(), OPENSSL_fork_parent() and OPENSSL_fork_child() do not return values.

+ +

SEE ALSO

+ +

OPENSSL_init_crypto(3)

+ +

HISTORY

+ +

These functions were added in OpenSSL 1.1.1.

+ +

COPYRIGHT

+ +

Copyright 2017-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OPENSSL_ia32cap.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OPENSSL_ia32cap.html new file mode 100644 index 00000000..473cf8fe --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OPENSSL_ia32cap.html @@ -0,0 +1,206 @@ + + + + +OPENSSL_ia32cap + + + + + + + + + + +

NAME

+ +

OPENSSL_ia32cap - the x86[_64] processor capabilities vector

+ +

SYNOPSIS

+ +
env OPENSSL_ia32cap=... <application>
+ +

DESCRIPTION

+ +

OpenSSL supports a range of x86[_64] instruction set extensions. These extensions are denoted by individual bits in capability vector returned by processor in EDX:ECX register pair after executing CPUID instruction with EAX=1 input value (see Intel Application Note #241618). This vector is copied to memory upon toolkit initialization and used to choose between different code paths to provide optimal performance across wide range of processors. For the moment of this writing following bits are significant:

+ +
+ +
bit #4 denoting presence of Time-Stamp Counter.
+
+ +
+
bit #19 denoting availability of CLFLUSH instruction;
+
+ +
+
bit #20, reserved by Intel, is used to choose among RC4 code paths;
+
+ +
+
bit #23 denoting MMX support;
+
+ +
+
bit #24, FXSR bit, denoting availability of XMM registers;
+
+ +
+
bit #25 denoting SSE support;
+
+ +
+
bit #26 denoting SSE2 support;
+
+ +
+
bit #28 denoting Hyperthreading, which is used to distinguish cores with shared cache;
+
+ +
+
bit #30, reserved by Intel, denotes specifically Intel CPUs;
+
+ +
+
bit #33 denoting availability of PCLMULQDQ instruction;
+
+ +
+
bit #41 denoting SSSE3, Supplemental SSE3, support;
+
+ +
+
bit #43 denoting AMD XOP support (forced to zero on non-AMD CPUs);
+
+ +
+
bit #54 denoting availability of MOVBE instruction;
+
+ +
+
bit #57 denoting AES-NI instruction set extension;
+
+ +
+
bit #58, XSAVE bit, lack of which in combination with MOVBE is used to identify Atom Silvermont core;
+
+ +
+
bit #59, OSXSAVE bit, denoting availability of YMM registers;
+
+ +
+
bit #60 denoting AVX extension;
+
+ +
+
bit #62 denoting availability of RDRAND instruction;
+
+ +
+
+ +

For example, in 32-bit application context clearing bit #26 at run-time disables high-performance SSE2 code present in the crypto library, while clearing bit #24 disables SSE2 code operating on 128-bit XMM register bank. You might have to do the latter if target OpenSSL application is executed on SSE2 capable CPU, but under control of OS that does not enable XMM registers. Historically address of the capability vector copy was exposed to application through OPENSSL_ia32cap_loc(), but not anymore. Now the only way to affect the capability detection is to set OPENSSL_ia32cap environment variable prior target application start. To give a specific example, on Intel P4 processor 'env OPENSSL_ia32cap=0x16980010 apps/openssl', or better yet 'env OPENSSL_ia32cap=~0x1000000 apps/openssl' would achieve the desired effect. Alternatively you can reconfigure the toolkit with no-sse2 option and recompile.

+ +

Less intuitive is clearing bit #28, or ~0x10000000 in the "environment variable" terms. The truth is that it's not copied from CPUID output verbatim, but is adjusted to reflect whether or not the data cache is actually shared between logical cores. This in turn affects the decision on whether or not expensive countermeasures against cache-timing attacks are applied, most notably in AES assembler module.

+ +

The capability vector is further extended with EBX value returned by CPUID with EAX=7 and ECX=0 as input. Following bits are significant:

+ +
+ +
bit #64+3 denoting availability of BMI1 instructions, e.g. ANDN;
+
+ +
+
bit #64+5 denoting availability of AVX2 instructions;
+
+ +
+
bit #64+8 denoting availability of BMI2 instructions, e.g. MULX and RORX;
+
+ +
+
bit #64+16 denoting availability of AVX512F extension;
+
+ +
+
bit #64+18 denoting availability of RDSEED instruction;
+
+ +
+
bit #64+19 denoting availability of ADCX and ADOX instructions;
+
+ +
+
bit #64+21 denoting availability of VPMADD52[LH]UQ instructions, a.k.a. AVX512IFMA extension;
+
+ +
+
bit #64+29 denoting availability of SHA extension;
+
+ +
+
bit #64+30 denoting availability of AVX512BW extension;
+
+ +
+
bit #64+31 denoting availability of AVX512VL extension;
+
+ +
+
bit #64+41 denoting availability of VAES extension;
+
+ +
+
bit #64+42 denoting availability of VPCLMULQDQ extension;
+
+ +
+
+ +

To control this extended capability word use ':' as delimiter when setting up OPENSSL_ia32cap environment variable. For example assigning ':~0x20' would disable AVX2 code paths, and ':0' - all post-AVX extensions.

+ +

It should be noted that whether or not some of the most "fancy" extension code paths are actually assembled depends on current assembler version. Base minimum of AES-NI/PCLMULQDQ, SSSE3 and SHA extension code paths are always assembled. Apart from that, minimum assembler version requirements are summarized in below table:

+ +
Extension   | GNU as | nasm   | llvm
+------------+--------+--------+--------
+AVX         | 2.19   | 2.09   | 3.0
+AVX2        | 2.22   | 2.10   | 3.1
+ADCX/ADOX   | 2.23   | 2.10   | 3.3
+AVX512      | 2.25   | 2.11.8 | see NOTES
+AVX512IFMA  | 2.26   | 2.11.8 | see NOTES
+VAES        | 2.30   | 2.13.3 |
+ +

NOTES

+ +

Even though AVX512 support was implemented in llvm 3.6, compilation of assembly modules apparently requires explicit -march flag. But then compiler generates processor-specific code, which in turn contradicts the mere idea of run-time switch execution facilitated by the variable in question. Till the limitation is lifted, it's possible to work around the problem by making build procedure use following script:

+ +
#!/bin/sh
+exec clang -no-integrated-as "$@"
+ +

instead of real clang. In which case it doesn't matter which clang version is used, as it is GNU assembler version that will be checked.

+ +

RETURN VALUES

+ +

Not available.

+ +

COPYRIGHT

+ +

Copyright 2004-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OPENSSL_init_crypto.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OPENSSL_init_crypto.html new file mode 100644 index 00000000..96905d69 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OPENSSL_init_crypto.html @@ -0,0 +1,221 @@ + + + + +OPENSSL_init_crypto + + + + + + + + + + +

NAME

+ +

OPENSSL_INIT_new, OPENSSL_INIT_set_config_filename, OPENSSL_INIT_set_config_appname, OPENSSL_INIT_set_config_file_flags, OPENSSL_INIT_free, OPENSSL_init_crypto, OPENSSL_cleanup, OPENSSL_atexit, OPENSSL_thread_stop - OpenSSL initialisation and deinitialisation functions

+ +

SYNOPSIS

+ +
#include <openssl/crypto.h>
+
+void OPENSSL_cleanup(void);
+int OPENSSL_init_crypto(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings);
+int OPENSSL_atexit(void (*handler)(void));
+void OPENSSL_thread_stop(void);
+
+OPENSSL_INIT_SETTINGS *OPENSSL_INIT_new(void);
+int OPENSSL_INIT_set_config_filename(OPENSSL_INIT_SETTINGS *init,
+                                     const char* filename);
+int OPENSSL_INIT_set_config_file_flags(OPENSSL_INIT_SETTINGS *init,
+                                       unsigned long flags);
+int OPENSSL_INIT_set_config_appname(OPENSSL_INIT_SETTINGS *init,
+                                    const char* name);
+void OPENSSL_INIT_free(OPENSSL_INIT_SETTINGS *init);
+ +

DESCRIPTION

+ +

During normal operation OpenSSL (libcrypto) will allocate various resources at start up that must, subsequently, be freed on close down of the library. Additionally some resources are allocated on a per thread basis (if the application is multi-threaded), and these resources must be freed prior to the thread closing.

+ +

As of version 1.1.0 OpenSSL will automatically allocate all resources that it 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 function OPENSSL_init_crypto() can be used for this purpose for libcrypto (see also OPENSSL_init_ssl(3) for the libssl equivalent).

+ +

Numerous internal OpenSSL functions call OPENSSL_init_crypto(). Therefore, in order to perform non-default initialisation, OPENSSL_init_crypto() MUST be called by application code prior to any other OpenSSL function calls.

+ +

The opts parameter specifies which aspects of libcrypto should be initialised. Valid options are:

+ +
+ +
OPENSSL_INIT_NO_LOAD_CRYPTO_STRINGS
+
+ +

Suppress automatic loading of the libcrypto error strings. This option is not a default option. Once selected subsequent calls to OPENSSL_init_crypto() with the option OPENSSL_INIT_LOAD_CRYPTO_STRINGS will be ignored.

+ +
+
OPENSSL_INIT_LOAD_CRYPTO_STRINGS
+
+ +

Automatic loading of the libcrypto error strings. With this option the library will automatically load the libcrypto error strings. This option is a default option. Once selected subsequent calls to OPENSSL_init_crypto() with the option OPENSSL_INIT_NO_LOAD_CRYPTO_STRINGS will be ignored.

+ +
+
OPENSSL_INIT_ADD_ALL_CIPHERS
+
+ +

With this option the library will automatically load and make available all libcrypto ciphers. This option is a default option. Once selected subsequent calls to OPENSSL_init_crypto() with the option OPENSSL_INIT_NO_ADD_ALL_CIPHERS will be ignored.

+ +
+
OPENSSL_INIT_ADD_ALL_DIGESTS
+
+ +

With this option the library will automatically load and make available all libcrypto digests. This option is a default option. Once selected subsequent calls to OPENSSL_init_crypto() with the option OPENSSL_INIT_NO_ADD_ALL_CIPHERS will be ignored.

+ +
+
OPENSSL_INIT_NO_ADD_ALL_CIPHERS
+
+ +

With this option the library will suppress automatic loading of libcrypto ciphers. This option is not a default option. Once selected subsequent calls to OPENSSL_init_crypto() with the option OPENSSL_INIT_ADD_ALL_CIPHERS will be ignored.

+ +
+
OPENSSL_INIT_NO_ADD_ALL_DIGESTS
+
+ +

With this option the library will suppress automatic loading of libcrypto digests. This option is not a default option. Once selected subsequent calls to OPENSSL_init_crypto() with the option OPENSSL_INIT_ADD_ALL_DIGESTS will be ignored.

+ +
+
OPENSSL_INIT_LOAD_CONFIG
+
+ +

With this option an OpenSSL configuration file will be automatically loaded and used by calling OPENSSL_config(). This is not a default option for libcrypto. As of OpenSSL 1.1.1 this is a default option for libssl (see OPENSSL_init_ssl(3) for further details about libssl initialisation). See the description of OPENSSL_INIT_new(), below.

+ +
+
OPENSSL_INIT_NO_LOAD_CONFIG
+
+ +

With this option the loading of OpenSSL configuration files will be suppressed. It is the equivalent of calling OPENSSL_no_config(). This is not a default option.

+ +
+
OPENSSL_INIT_ASYNC
+
+ +

With this option the library with automatically initialise the libcrypto async sub-library (see ASYNC_start_job(3)). This is a default option.

+ +
+
OPENSSL_INIT_ENGINE_RDRAND
+
+ +

With this option the library will automatically load and initialise the RDRAND engine (if available). This not a default option.

+ +
+
OPENSSL_INIT_ENGINE_DYNAMIC
+
+ +

With this option the library will automatically load and initialise the dynamic engine. This not a default option.

+ +
+
OPENSSL_INIT_ENGINE_OPENSSL
+
+ +

With this option the library will automatically load and initialise the openssl engine. This not a default option.

+ +
+
OPENSSL_INIT_ENGINE_CRYPTODEV
+
+ +

With this option the library will automatically load and initialise the cryptodev engine (if available). This not a default option.

+ +
+
OPENSSL_INIT_ENGINE_CAPI
+
+ +

With this option the library will automatically load and initialise the CAPI engine (if available). This not a default option.

+ +
+
OPENSSL_INIT_ENGINE_PADLOCK
+
+ +

With this option the library will automatically load and initialise the padlock engine (if available). This not a default option.

+ +
+
OPENSSL_INIT_ENGINE_AFALG
+
+ +

With this option the library will automatically load and initialise the AFALG engine. This not a default option.

+ +
+
OPENSSL_INIT_ENGINE_ALL_BUILTIN
+
+ +

With this option the library will automatically load and initialise all the built in engines listed above with the exception of the openssl and afalg engines. This not a default option.

+ +
+
OPENSSL_INIT_ATFORK
+
+ +

With this option the library will register its fork handlers. See OPENSSL_fork_prepare(3) for details.

+ +
+
OPENSSL_INIT_NO_ATEXIT
+
+ +

By default OpenSSL will attempt to clean itself up when the process exits via an "atexit" handler. Using this option suppresses that behaviour. This means that the application will have to clean up OpenSSL explicitly using OPENSSL_cleanup().

+ +
+
+ +

Multiple options may be combined together in a single call to OPENSSL_init_crypto(). For example:

+ +
OPENSSL_init_crypto(OPENSSL_INIT_NO_ADD_ALL_CIPHERS
+                    | OPENSSL_INIT_NO_ADD_ALL_DIGESTS, NULL);
+ +

The OPENSSL_cleanup() function deinitialises OpenSSL (both libcrypto and libssl). All resources allocated by OpenSSL are freed. Typically there should be no need to call this function directly as it is initiated automatically on application exit. This is done via the standard C library atexit() function. In the event that the application will close in a manner that will not call the registered atexit() handlers then the application should call OPENSSL_cleanup() directly. Developers of libraries using OpenSSL are discouraged from calling this function and should instead, typically, rely on auto-deinitialisation. This is to avoid error conditions where both an application and a library it depends on both use OpenSSL, and the library deinitialises it before the application has finished using it.

+ +

Once OPENSSL_cleanup() has been called the library cannot be reinitialised. Attempts to call OPENSSL_init_crypto() will fail and an ERR_R_INIT_FAIL error will be added to the error stack. Note that because initialisation has failed OpenSSL error strings will not be available, only an error code. This code can be put through the openssl errstr command line application to produce a human readable error (see errstr(1)).

+ +

The OPENSSL_atexit() function enables the registration of a function to be called during OPENSSL_cleanup(). Stop handlers are called after deinitialisation of resources local to a thread, but before other process wide resources are freed. In the event that multiple stop handlers are registered, no guarantees are made about the order of execution.

+ +

The OPENSSL_thread_stop() function deallocates resources associated with the current thread. Typically this function will be called automatically by the library when the thread exits. This should only be called directly if resources should be freed at an earlier time, or under the circumstances described in the NOTES section below.

+ +

The OPENSSL_INIT_LOAD_CONFIG flag will load a configuration file, as with CONF_modules_load_file(3) with NULL filename and application name and the CONF_MFLAGS_IGNORE_MISSING_FILE, CONF_MFLAGS_IGNORE_RETURN_CODES and CONF_MFLAGS_DEFAULT_SECTION flags. The filename, application name, and flags can be customized by providing a non-null OPENSSL_INIT_SETTINGS object. The object can be allocated via OPENSSL_init_new(). The 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. 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. If the CONF_MFLAGS_IGNORE_RETURN_CODES flag is not included, any errors in the configuration file will cause an error return from OPENSSL_init_crypto or indirectly OPENSSL_init_ssl(3). The object can be released with OPENSSL_INIT_free() when done.

+ +

NOTES

+ +

Resources local to a thread are deallocated automatically when the thread exits (e.g. in a pthreads environment, when pthread_exit() is called). On Windows platforms this is done in response to a DLL_THREAD_DETACH message being sent to the libcrypto32.dll entry point. Some windows functions may cause threads to exit without sending this message (for example ExitProcess()). If the application uses such functions, then the application must free up OpenSSL resources directly via a call to OPENSSL_thread_stop() on each thread. Similarly this message will also not be sent if OpenSSL is linked statically, and therefore applications using static linking should also call OPENSSL_thread_stop() on each thread. Additionally if OpenSSL is loaded dynamically via LoadLibrary() and the threads are not destroyed until after FreeLibrary() is called then each thread should call OPENSSL_thread_stop() prior to the FreeLibrary() call.

+ +

On Linux/Unix where OpenSSL has been loaded via dlopen() and the application is multi-threaded and if dlclose() is subsequently called prior to the threads being destroyed then OpenSSL will not be able to deallocate resources associated with those threads. The application should either call OPENSSL_thread_stop() on each thread prior to the dlclose() call, or alternatively the original dlopen() call should use the RTLD_NODELETE flag (where available on the platform).

+ +

RETURN VALUES

+ +

The functions OPENSSL_init_crypto, OPENSSL_atexit() and OPENSSL_INIT_set_config_appname() return 1 on success or 0 on error.

+ +

SEE ALSO

+ +

OPENSSL_init_ssl(3)

+ +

HISTORY

+ +

The OPENSSL_init_crypto(), OPENSSL_cleanup(), OPENSSL_atexit(), OPENSSL_thread_stop(), OPENSSL_INIT_new(), OPENSSL_INIT_set_config_appname() and OPENSSL_INIT_free() functions were added in OpenSSL 1.1.0.

+ +

COPYRIGHT

+ +

Copyright 2016-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OPENSSL_init_ssl.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OPENSSL_init_ssl.html new file mode 100644 index 00000000..464a3000 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OPENSSL_init_ssl.html @@ -0,0 +1,87 @@ + + + + +OPENSSL_init_ssl + + + + + + + + + + +

NAME

+ +

OPENSSL_init_ssl - OpenSSL (libssl and libcrypto) initialisation

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+int OPENSSL_init_ssl(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings);
+ +

DESCRIPTION

+ +

During normal operation OpenSSL (libssl and libcrypto) will allocate various resources at start up that must, subsequently, be freed on close down of the library. Additionally some resources are allocated on a per thread basis (if the application is multi-threaded), and these resources must be freed prior to the thread closing.

+ +

As of version 1.1.0 OpenSSL will automatically allocate all resources that it 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 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 OPENSSL_init_crypto(3) function.

+ +

Numerous internal OpenSSL functions call OPENSSL_init_ssl(). Therefore, in order to perform non-default initialisation, OPENSSL_init_ssl() MUST be called by application code prior to any other OpenSSL function calls.

+ +

The opts parameter specifies which aspects of libssl and libcrypto should be initialised. Valid options for libcrypto are described on the OPENSSL_init_crypto(3) page. In addition to any libcrypto specific option the following libssl options can also be used:

+ +
+ +
OPENSSL_INIT_NO_LOAD_SSL_STRINGS
+
+ +

Suppress automatic loading of the libssl error strings. This option is not a default option. Once selected subsequent calls to OPENSSL_init_ssl() with the option OPENSSL_INIT_LOAD_SSL_STRINGS will be ignored.

+ +
+
OPENSSL_INIT_LOAD_SSL_STRINGS
+
+ +

Automatic loading of the libssl error strings. This option is a default option. Once selected subsequent calls to OPENSSL_init_ssl() with the option OPENSSL_INIT_LOAD_SSL_STRINGS will be ignored.

+ +
+
+ +

OPENSSL_init_ssl() takes a settings parameter which can be used to set parameter values. See OPENSSL_init_crypto(3) for details.

+ +

RETURN VALUES

+ +

The function OPENSSL_init_ssl() returns 1 on success or 0 on error.

+ +

SEE ALSO

+ +

OPENSSL_init_crypto(3)

+ +

HISTORY

+ +

The OPENSSL_init_ssl() function was added in OpenSSL 1.1.0.

+ +

COPYRIGHT

+ +

Copyright 2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OPENSSL_instrument_bus.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OPENSSL_instrument_bus.html new file mode 100644 index 00000000..d4e332a4 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OPENSSL_instrument_bus.html @@ -0,0 +1,58 @@ + + + + +OPENSSL_instrument_bus + + + + + + + + + + +

NAME

+ +

OPENSSL_instrument_bus, OPENSSL_instrument_bus2 - instrument references to memory bus

+ +

SYNOPSIS

+ +
#ifdef OPENSSL_CPUID_OBJ
+size_t OPENSSL_instrument_bus(int *vector, size_t num);
+size_t OPENSSL_instrument_bus2(int *vector, size_t num, size_t max);
+#endif
+ +

DESCRIPTION

+ +

It was empirically found that timings of references to primary memory are subject to irregular, apparently non-deterministic variations. The subroutines in question instrument these references for purposes of gathering randomness for random number generator. In order to make it bus-bound a 'flush cache line' instruction is used between probes. In addition probes are added to vector elements in atomic or interlocked manner, which should contribute additional noise on multi-processor systems. This also means that vector[num] should be zeroed upon invocation (if you want to retrieve actual probe values).

+ +

OPENSSL_instrument_bus() performs num probes and records the number of oscillator cycles every probe took.

+ +

OPENSSL_instrument_bus2() on the other hand accumulates consecutive probes with the same value, i.e. in a way it records duration of periods when probe values appeared deterministic. The subroutine performs at most max probes in attempt to fill the vector[num], with max value of 0 meaning "as many as it takes."

+ +

RETURN VALUES

+ +

Return value of 0 indicates that CPU is not capable of performing the benchmark, either because oscillator counter or 'flush cache line' is not available on current platform. For reference, on x86 'flush cache line' was introduced with the SSE2 extensions.

+ +

Otherwise number of recorded values is returned.

+ +

COPYRIGHT

+ +

Copyright 2011-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OPENSSL_load_builtin_modules.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OPENSSL_load_builtin_modules.html new file mode 100644 index 00000000..35b573ab --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OPENSSL_load_builtin_modules.html @@ -0,0 +1,71 @@ + + + + +OPENSSL_load_builtin_modules + + + + + + + + + + +

NAME

+ +

OPENSSL_load_builtin_modules, ASN1_add_oid_module, ENGINE_add_conf_module - add standard configuration modules

+ +

SYNOPSIS

+ +
#include <openssl/conf.h>
+
+void OPENSSL_load_builtin_modules(void);
+void ASN1_add_oid_module(void);
+void ENGINE_add_conf_module(void);
+ +

DESCRIPTION

+ +

The function OPENSSL_load_builtin_modules() adds all the standard OpenSSL configuration modules to the internal list. They can then be used by the OpenSSL configuration code.

+ +

ASN1_add_oid_module() adds just the ASN1 OBJECT module.

+ +

ENGINE_add_conf_module() adds just the ENGINE configuration module.

+ +

NOTES

+ +

If the simple configuration function OPENSSL_config() is called then OPENSSL_load_builtin_modules() is called automatically.

+ +

Applications which use the configuration functions directly will need to call OPENSSL_load_builtin_modules() themselves before any other configuration code.

+ +

Applications should call OPENSSL_load_builtin_modules() to load all configuration modules instead of adding modules selectively: otherwise functionality may be missing from the application if an when new modules are added.

+ +

RETURN VALUES

+ +

None of the functions return a value.

+ +

SEE ALSO

+ +

config(5), OPENSSL_config(3)

+ +

COPYRIGHT

+ +

Copyright 2004-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OPENSSL_malloc.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OPENSSL_malloc.html new file mode 100644 index 00000000..5c15c2f6 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OPENSSL_malloc.html @@ -0,0 +1,164 @@ + + + + +OPENSSL_malloc + + + + + + + + + + +

NAME

+ +

OPENSSL_malloc_init, OPENSSL_malloc, OPENSSL_zalloc, OPENSSL_realloc, OPENSSL_free, OPENSSL_clear_realloc, OPENSSL_clear_free, OPENSSL_cleanse, CRYPTO_malloc, CRYPTO_zalloc, CRYPTO_realloc, CRYPTO_free, OPENSSL_strdup, OPENSSL_strndup, OPENSSL_memdup, OPENSSL_strlcpy, OPENSSL_strlcat, OPENSSL_hexstr2buf, OPENSSL_buf2hexstr, OPENSSL_hexchar2int, CRYPTO_strdup, CRYPTO_strndup, OPENSSL_mem_debug_push, OPENSSL_mem_debug_pop, CRYPTO_mem_debug_push, CRYPTO_mem_debug_pop, CRYPTO_clear_realloc, CRYPTO_clear_free, CRYPTO_get_mem_functions, CRYPTO_set_mem_functions, CRYPTO_get_alloc_counts, CRYPTO_set_mem_debug, CRYPTO_mem_ctrl, CRYPTO_mem_leaks, CRYPTO_mem_leaks_fp, CRYPTO_mem_leaks_cb, OPENSSL_MALLOC_FAILURES, OPENSSL_MALLOC_FD - Memory allocation functions

+ +

SYNOPSIS

+ +
#include <openssl/crypto.h>
+
+int OPENSSL_malloc_init(void)
+
+void *OPENSSL_malloc(size_t num)
+void *OPENSSL_zalloc(size_t num)
+void *OPENSSL_realloc(void *addr, size_t num)
+void OPENSSL_free(void *addr)
+char *OPENSSL_strdup(const char *str)
+char *OPENSSL_strndup(const char *str, size_t s)
+size_t OPENSSL_strlcat(char *dst, const char *src, size_t size);
+size_t OPENSSL_strlcpy(char *dst, const char *src, size_t size);
+void *OPENSSL_memdup(void *data, size_t s)
+void *OPENSSL_clear_realloc(void *p, size_t old_len, size_t num)
+void OPENSSL_clear_free(void *str, size_t num)
+void OPENSSL_cleanse(void *ptr, size_t len);
+
+unsigned char *OPENSSL_hexstr2buf(const char *str, long *len);
+char *OPENSSL_buf2hexstr(const unsigned char *buffer, long len);
+int OPENSSL_hexchar2int(unsigned char c);
+
+void *CRYPTO_malloc(size_t num, const char *file, int line)
+void *CRYPTO_zalloc(size_t num, const char *file, int line)
+void *CRYPTO_realloc(void *p, size_t num, const char *file, int line)
+void CRYPTO_free(void *str, const char *, int)
+char *CRYPTO_strdup(const char *p, const char *file, int line)
+char *CRYPTO_strndup(const char *p, size_t num, const char *file, int line)
+void *CRYPTO_clear_realloc(void *p, size_t old_len, size_t num,
+                           const char *file, int line)
+void CRYPTO_clear_free(void *str, size_t num, const char *, int)
+
+void CRYPTO_get_mem_functions(
+        void *(**m)(size_t, const char *, int),
+        void *(**r)(void *, size_t, const char *, int),
+        void (**f)(void *, const char *, int))
+int CRYPTO_set_mem_functions(
+        void *(*m)(size_t, const char *, int),
+        void *(*r)(void *, size_t, const char *, int),
+        void (*f)(void *, const char *, int))
+
+void CRYPTO_get_alloc_counts(int *m, int *r, int *f)
+
+int CRYPTO_set_mem_debug(int onoff)
+
+env OPENSSL_MALLOC_FAILURES=... <application>
+env OPENSSL_MALLOC_FD=... <application>
+
+int CRYPTO_mem_ctrl(int mode);
+
+int OPENSSL_mem_debug_push(const char *info)
+int OPENSSL_mem_debug_pop(void);
+
+int CRYPTO_mem_debug_push(const char *info, const char *file, int line);
+int CRYPTO_mem_debug_pop(void);
+
+int CRYPTO_mem_leaks(BIO *b);
+int CRYPTO_mem_leaks_fp(FILE *fp);
+int CRYPTO_mem_leaks_cb(int (*cb)(const char *str, size_t len, void *u),
+                        void *u);
+ +

DESCRIPTION

+ +

OpenSSL memory allocation is handled by the OPENSSL_xxx API. These are generally macro's that add the standard C __FILE__ and __LINE__ parameters and call a lower-level CRYPTO_xxx API. Some functions do not add those parameters, but exist for consistency.

+ +

OPENSSL_malloc_init() does nothing and does not need to be called. It is included for compatibility with older versions of OpenSSL.

+ +

OPENSSL_malloc(), OPENSSL_realloc(), and OPENSSL_free() are like the C malloc(), realloc(), and free() functions. OPENSSL_zalloc() calls memset() to zero the memory before returning.

+ +

OPENSSL_clear_realloc() and OPENSSL_clear_free() should be used when the buffer at addr holds sensitive information. The old buffer is filled with zero's by calling OPENSSL_cleanse() before ultimately calling OPENSSL_free().

+ +

OPENSSL_cleanse() fills ptr of size len with a string of 0's. Use OPENSSL_cleanse() with care if the memory is a mapping of a file. If the storage controller uses write compression, then its possible that sensitive tail bytes will survive zeroization because the block of zeros will be compressed. If the storage controller uses wear leveling, then the old sensitive data will not be overwritten; rather, a block of 0's will be written at a new physical location.

+ +

OPENSSL_strdup(), OPENSSL_strndup() and OPENSSL_memdup() are like the equivalent C functions, except that memory is allocated by calling the OPENSSL_malloc() and should be released by calling OPENSSL_free().

+ +

OPENSSL_strlcpy(), OPENSSL_strlcat() and OPENSSL_strnlen() are equivalents of the common C library functions and are provided for portability.

+ +

OPENSSL_hexstr2buf() parses str as a hex string and returns a pointer to the parsed value. The memory is allocated by calling OPENSSL_malloc() and should be released by calling OPENSSL_free(). If len is not NULL, it is filled in with the output length. Colons between two-character hex "bytes" are ignored. An odd number of hex digits is an error.

+ +

OPENSSL_buf2hexstr() takes the specified buffer and length, and returns a hex string for value, or NULL on error. Buffer cannot be NULL; if len is 0 an empty string is returned.

+ +

OPENSSL_hexchar2int() converts a character to the hexadecimal equivalent, or returns -1 on error.

+ +

If no allocations have been done, it is possible to "swap out" the default implementations for OPENSSL_malloc(), OPENSSL_realloc and OPENSSL_free() and replace them with alternate versions (hooks). CRYPTO_get_mem_functions() function fills in the given arguments with the function pointers for the current implementations. With CRYPTO_set_mem_functions(), you can specify a different set of functions. If any of m, r, or f are NULL, then the function is not changed.

+ +

The default implementation can include some debugging capability (if enabled at build-time). This adds some overhead by keeping a list of all memory allocations, and removes items from the list when they are free'd. This is most useful for identifying memory leaks. CRYPTO_set_mem_debug() turns this tracking on and off. In order to have any effect, is must be called before any of the allocation functions (e.g., CRYPTO_malloc()) are called, and is therefore normally one of the first lines of main() in an application. CRYPTO_mem_ctrl() provides fine-grained control of memory leak tracking. To enable tracking call CRYPTO_mem_ctrl() with a mode argument of the CRYPTO_MEM_CHECK_ON. To disable tracking call CRYPTO_mem_ctrl() with a mode argument of the CRYPTO_MEM_CHECK_OFF.

+ +

While checking memory, it can be useful to store additional context about what is being done. For example, identifying the field names when parsing a complicated data structure. OPENSSL_mem_debug_push() (which calls CRYPTO_mem_debug_push()) attaches an identifying string to the allocation stack. This must be a global or other static string; it is not copied. OPENSSL_mem_debug_pop() removes identifying state from the stack.

+ +

At the end of the program, calling CRYPTO_mem_leaks() or CRYPTO_mem_leaks_fp() will report all "leaked" memory, writing it to the specified BIO b or FILE fp. These functions return 1 if there are no leaks, 0 if there are leaks and -1 if an error occurred.

+ +

CRYPTO_mem_leaks_cb() does the same as CRYPTO_mem_leaks(), but instead of writing to a given BIO, the callback function is called for each output string with the string, length, and userdata u as the callback parameters.

+ +

If the library is built with the crypto-mdebug option, then one function, CRYPTO_get_alloc_counts(), and two additional environment variables, OPENSSL_MALLOC_FAILURES and OPENSSL_MALLOC_FD, are available.

+ +

The function CRYPTO_get_alloc_counts() fills in the number of times each of CRYPTO_malloc(), CRYPTO_realloc(), and CRYPTO_free() have been called, into the values pointed to by mcount, rcount, and fcount, respectively. If a pointer is NULL, then the corresponding count is not stored.

+ +

The variable OPENSSL_MALLOC_FAILURES controls how often allocations should fail. It is a set of fields separated by semicolons, which each field is a count (defaulting to zero) and an optional atsign and percentage (defaulting to 100). If the count is zero, then it lasts forever. For example, 100;@25 or 100@0;0@25 means the first 100 allocations pass, then all other allocations (until the program exits or crashes) have a 25% chance of failing.

+ +

If the variable OPENSSL_MALLOC_FD is parsed as a positive integer, then it is taken as an open file descriptor, and a record of all allocations is written to that descriptor. If an allocation will fail, and the platform supports it, then a backtrace will be written to the descriptor. This can be useful because a malloc may fail but not be checked, and problems will only occur later. The following example in classic shell syntax shows how to use this (will not work on all platforms):

+ +
OPENSSL_MALLOC_FAILURES='200;@10'
+export OPENSSL_MALLOC_FAILURES
+OPENSSL_MALLOC_FD=3
+export OPENSSL_MALLOC_FD
+...app invocation... 3>/tmp/log$$
+ +

RETURN VALUES

+ +

OPENSSL_malloc_init(), OPENSSL_free(), OPENSSL_clear_free() CRYPTO_free(), CRYPTO_clear_free() and CRYPTO_get_mem_functions() return no value.

+ +

CRYPTO_mem_leaks(), CRYPTO_mem_leaks_fp() and CRYPTO_mem_leaks_cb() return 1 if there are no leaks, 0 if there are leaks and -1 if an error occurred.

+ +

OPENSSL_malloc(), OPENSSL_zalloc(), OPENSSL_realloc(), OPENSSL_clear_realloc(), CRYPTO_malloc(), CRYPTO_zalloc(), CRYPTO_realloc(), CRYPTO_clear_realloc(), OPENSSL_buf2hexstr(), OPENSSL_hexstr2buf(), OPENSSL_strdup(), and OPENSSL_strndup() return a pointer to allocated memory or NULL on error.

+ +

CRYPTO_set_mem_functions() and CRYPTO_set_mem_debug() return 1 on success or 0 on failure (almost always because allocations have already happened).

+ +

CRYPTO_mem_ctrl() returns -1 if an error occurred, otherwise the previous value of the mode.

+ +

OPENSSL_mem_debug_push() and OPENSSL_mem_debug_pop() return 1 on success or 0 on failure.

+ +

NOTES

+ +

While it's permitted to swap out only a few and not all the functions with CRYPTO_set_mem_functions(), it's recommended to swap them all out at once. This applies specially if OpenSSL was built with the configuration option crypto-mdebug enabled. In case, swapping out only, say, the malloc() implementation is outright dangerous.

+ +

COPYRIGHT

+ +

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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OPENSSL_secure_malloc.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OPENSSL_secure_malloc.html new file mode 100644 index 00000000..fa09e139 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OPENSSL_secure_malloc.html @@ -0,0 +1,114 @@ + + + + +OPENSSL_secure_malloc + + + + + + + + + + +

NAME

+ +

CRYPTO_secure_malloc_init, CRYPTO_secure_malloc_initialized, CRYPTO_secure_malloc_done, OPENSSL_secure_malloc, CRYPTO_secure_malloc, OPENSSL_secure_zalloc, CRYPTO_secure_zalloc, OPENSSL_secure_free, CRYPTO_secure_free, OPENSSL_secure_clear_free, CRYPTO_secure_clear_free, OPENSSL_secure_actual_size, CRYPTO_secure_allocated, CRYPTO_secure_used - secure heap storage

+ +

SYNOPSIS

+ +
#include <openssl/crypto.h>
+
+int CRYPTO_secure_malloc_init(size_t size, int minsize);
+
+int CRYPTO_secure_malloc_initialized();
+
+int CRYPTO_secure_malloc_done();
+
+void *OPENSSL_secure_malloc(size_t num);
+void *CRYPTO_secure_malloc(size_t num, const char *file, int line);
+
+void *OPENSSL_secure_zalloc(size_t num);
+void *CRYPTO_secure_zalloc(size_t num, const char *file, int line);
+
+void OPENSSL_secure_free(void* ptr);
+void CRYPTO_secure_free(void *ptr, const char *, int);
+
+void OPENSSL_secure_clear_free(void* ptr, size_t num);
+void CRYPTO_secure_clear_free(void *ptr, size_t num, const char *, int);
+
+size_t OPENSSL_secure_actual_size(const void *ptr);
+
+int CRYPTO_secure_allocated(const void *ptr);
+size_t CRYPTO_secure_used();
+ +

DESCRIPTION

+ +

In order to help protect applications (particularly long-running servers) from pointer overruns or underruns that could return arbitrary data from the program's dynamic memory area, where keys and other sensitive information might be stored, OpenSSL supports the concept of a "secure heap." The level and type of security guarantees depend on the operating system. It is a good idea to review the code and see if it addresses your threat model and concerns.

+ +

If a secure heap is used, then private key BIGNUM values are stored there. This protects long-term storage of private keys, but will not necessarily put all intermediate values and computations there.

+ +

CRYPTO_secure_malloc_init() creates the secure heap, with the specified size in bytes. The minsize parameter is the minimum size to allocate from the heap. Both size and minsize must be a power of two.

+ +

CRYPTO_secure_malloc_initialized() indicates whether or not the secure heap as been initialized and is available.

+ +

CRYPTO_secure_malloc_done() releases the heap and makes the memory unavailable to the process if all secure memory has been freed. It can take noticeably long to complete.

+ +

OPENSSL_secure_malloc() allocates num bytes from the heap. If CRYPTO_secure_malloc_init() is not called, this is equivalent to calling OPENSSL_malloc(). It is a macro that expands to CRYPTO_secure_malloc() and adds the __FILE__ and __LINE__ parameters.

+ +

OPENSSL_secure_zalloc() and CRYPTO_secure_zalloc() are like OPENSSL_secure_malloc() and CRYPTO_secure_malloc(), respectively, except that they call memset() to zero the memory before returning.

+ +

OPENSSL_secure_free() releases the memory at ptr back to the heap. It must be called with a value previously obtained from OPENSSL_secure_malloc(). If CRYPTO_secure_malloc_init() is not called, this is equivalent to calling OPENSSL_free(). It exists for consistency with OPENSSL_secure_malloc() , and is a macro that expands to CRYPTO_secure_free() and adds the __FILE__ and __LINE__ parameters..

+ +

OPENSSL_secure_clear_free() is similar to OPENSSL_secure_free() except that it has an additional num parameter which is used to clear the memory if it was not allocated from the secure heap. If CRYPTO_secure_malloc_init() is not called, this is equivalent to calling OPENSSL_clear_free().

+ +

OPENSSL_secure_actual_size() tells the actual size allocated to the pointer; implementations may allocate more space than initially requested, in order to "round up" and reduce secure heap fragmentation.

+ +

OPENSSL_secure_allocated() tells if a pointer is allocated in the secure heap.

+ +

CRYPTO_secure_used() returns the number of bytes allocated in the secure heap.

+ +

RETURN VALUES

+ +

CRYPTO_secure_malloc_init() returns 0 on failure, 1 if successful, and 2 if successful but the heap could not be protected by memory mapping.

+ +

CRYPTO_secure_malloc_initialized() returns 1 if the secure heap is available (that is, if CRYPTO_secure_malloc_init() has been called, but CRYPTO_secure_malloc_done() has not been called or failed) or 0 if not.

+ +

OPENSSL_secure_malloc() and OPENSSL_secure_zalloc() return a pointer into the secure heap of the requested size, or NULL if memory could not be allocated.

+ +

CRYPTO_secure_allocated() returns 1 if the pointer is in the secure heap, or 0 if not.

+ +

CRYPTO_secure_malloc_done() returns 1 if the secure memory area is released, or 0 if not.

+ +

OPENSSL_secure_free() and OPENSSL_secure_clear_free() return no values.

+ +

SEE ALSO

+ +

OPENSSL_malloc(3), BN_new(3)

+ +

HISTORY

+ +

The OPENSSL_secure_clear_free() function was added in OpenSSL 1.1.0g.

+ +

COPYRIGHT

+ +

Copyright 2015-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OSSL_STORE_INFO.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OSSL_STORE_INFO.html new file mode 100644 index 00000000..ca1d9d8a --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OSSL_STORE_INFO.html @@ -0,0 +1,163 @@ + + + + +OSSL_STORE_INFO + + + + + + + + + + +

NAME

+ +

OSSL_STORE_INFO, OSSL_STORE_INFO_get_type, OSSL_STORE_INFO_get0_NAME, OSSL_STORE_INFO_get0_NAME_description, OSSL_STORE_INFO_get0_PARAMS, OSSL_STORE_INFO_get0_PKEY, OSSL_STORE_INFO_get0_CERT, OSSL_STORE_INFO_get0_CRL, OSSL_STORE_INFO_get1_NAME, OSSL_STORE_INFO_get1_NAME_description, OSSL_STORE_INFO_get1_PARAMS, OSSL_STORE_INFO_get1_PKEY, OSSL_STORE_INFO_get1_CERT, OSSL_STORE_INFO_get1_CRL, OSSL_STORE_INFO_type_string, OSSL_STORE_INFO_free, OSSL_STORE_INFO_new_NAME, OSSL_STORE_INFO_set0_NAME_description, OSSL_STORE_INFO_new_PARAMS, OSSL_STORE_INFO_new_PKEY, OSSL_STORE_INFO_new_CERT, OSSL_STORE_INFO_new_CRL - Functions to manipulate OSSL_STORE_INFO objects

+ +

SYNOPSIS

+ +
#include <openssl/store.h>
+
+typedef struct ossl_store_info_st OSSL_STORE_INFO;
+
+int OSSL_STORE_INFO_get_type(const OSSL_STORE_INFO *store_info);
+const char *OSSL_STORE_INFO_get0_NAME(const OSSL_STORE_INFO *store_info);
+char *OSSL_STORE_INFO_get1_NAME(const OSSL_STORE_INFO *store_info);
+const char *OSSL_STORE_INFO_get0_NAME_description(const OSSL_STORE_INFO
+                                                  *store_info);
+char *OSSL_STORE_INFO_get1_NAME_description(const OSSL_STORE_INFO *store_info);
+EVP_PKEY *OSSL_STORE_INFO_get0_PARAMS(const OSSL_STORE_INFO *store_info);
+EVP_PKEY *OSSL_STORE_INFO_get1_PARAMS(const OSSL_STORE_INFO *store_info);
+EVP_PKEY *OSSL_STORE_INFO_get0_PKEY(const OSSL_STORE_INFO *store_info);
+EVP_PKEY *OSSL_STORE_INFO_get1_PKEY(const OSSL_STORE_INFO *store_info);
+X509 *OSSL_STORE_INFO_get0_CERT(const OSSL_STORE_INFO *store_info);
+X509 *OSSL_STORE_INFO_get1_CERT(const OSSL_STORE_INFO *store_info);
+X509_CRL *OSSL_STORE_INFO_get0_CRL(const OSSL_STORE_INFO *store_info);
+X509_CRL *OSSL_STORE_INFO_get1_CRL(const OSSL_STORE_INFO *store_info);
+
+const char *OSSL_STORE_INFO_type_string(int type);
+
+void OSSL_STORE_INFO_free(OSSL_STORE_INFO *store_info);
+
+OSSL_STORE_INFO *OSSL_STORE_INFO_new_NAME(char *name);
+int OSSL_STORE_INFO_set0_NAME_description(OSSL_STORE_INFO *info, char *desc);
+OSSL_STORE_INFO *OSSL_STORE_INFO_new_PARAMS(DSA *dsa_params);
+OSSL_STORE_INFO *OSSL_STORE_INFO_new_PKEY(EVP_PKEY *pkey);
+OSSL_STORE_INFO *OSSL_STORE_INFO_new_CERT(X509 *x509);
+OSSL_STORE_INFO *OSSL_STORE_INFO_new_CRL(X509_CRL *crl);
+ +

DESCRIPTION

+ +

These functions are primarily useful for applications to retrieve supported objects from OSSL_STORE_INFO objects and for scheme specific loaders to create OSSL_STORE_INFO holders.

+ +

Types

+ +

OSSL_STORE_INFO is an opaque type that's just an intermediary holder for the objects that have been retrieved by OSSL_STORE_load() and similar functions. Supported OpenSSL type object can be extracted using one of STORE_INFO_get0_TYPE(). The life time of this extracted object is as long as the life time of the OSSL_STORE_INFO it was extracted from, so care should be taken not to free the latter too early. As an alternative, STORE_INFO_get1_TYPE() extracts a duplicate (or the same object with its reference count increased), which can be used after the containing OSSL_STORE_INFO has been freed. The object returned by STORE_INFO_get1_TYPE() must be freed separately by the caller. See "SUPPORTED OBJECTS" for more information on the types that are supported.

+ +

Functions

+ +

OSSL_STORE_INFO_get_type() takes a OSSL_STORE_INFO and returns the STORE type number for the object inside. STORE_INFO_get_type_string() takes a STORE type number and returns a short string describing it.

+ +

OSSL_STORE_INFO_get0_NAME(), OSSL_STORE_INFO_get0_NAME_description(), OSSL_STORE_INFO_get0_PARAMS(), OSSL_STORE_INFO_get0_PKEY(), OSSL_STORE_INFO_get0_CERT() and OSSL_STORE_INFO_get0_CRL() all take a OSSL_STORE_INFO and return the held object of the appropriate OpenSSL type provided that's what's held.

+ +

OSSL_STORE_INFO_get1_NAME(), OSSL_STORE_INFO_get1_NAME_description(), OSSL_STORE_INFO_get1_PARAMS(), OSSL_STORE_INFO_get1_PKEY(), OSSL_STORE_INFO_get1_CERT() and OSSL_STORE_INFO_get1_CRL() all take a OSSL_STORE_INFO and return a duplicate of the held object of the appropriate OpenSSL type provided that's what's held.

+ +

OSSL_STORE_INFO_free() frees a OSSL_STORE_INFO and its contained type.

+ +

OSSL_STORE_INFO_new_NAME() , OSSL_STORE_INFO_new_PARAMS(), OSSL_STORE_INFO_new_PKEY(), OSSL_STORE_INFO_new_CERT() and OSSL_STORE_INFO_new_CRL() create a OSSL_STORE_INFO object to hold the given input object. Additionally, for OSSL_STORE_INFO_NAME` objects, OSSL_STORE_INFO_set0_NAME_description() can be used to add an extra description. This description is meant to be human readable and should be used for information printout.

+ +

SUPPORTED OBJECTS

+ +

Currently supported object types are:

+ +
+ +
OSSL_STORE_INFO_NAME
+
+ +

A name is exactly that, a name. It's like a name in a directory, but formatted as a complete URI. For example, the path in URI file:/foo/bar/ could include a file named cookie.pem, and in that case, the returned OSSL_STORE_INFO_NAME object would have the URI file:/foo/bar/cookie.pem, which can be used by the application to get the objects in that file. This can be applied to all schemes that can somehow support a listing of object URIs.

+ +

For file: URIs that are used without the explicit scheme, the returned name will be the path of each object, so if /foo/bar was given and that path has the file cookie.pem, the name /foo/bar/cookie.pem will be returned.

+ +

The returned URI is considered canonical and must be unique and permanent for the storage where the object (or collection of objects) resides. Each loader is responsible for ensuring that it only returns canonical URIs. However, it's possible that certain schemes allow an object (or collection thereof) to be reached with alternative URIs; just because one URI is canonical doesn't mean that other variants can't be used.

+ +

At the discretion of the loader that was used to get these names, an extra description may be attached as well.

+ +
+
OSSL_STORE_INFO_PARAMS
+
+ +

Key parameters.

+ +
+
OSSL_STORE_INFO_PKEY
+
+ +

A private/public key of some sort.

+ +
+
OSSL_STORE_INFO_CERT
+
+ +

An X.509 certificate.

+ +
+
OSSL_STORE_INFO_CRL
+
+ +

A X.509 certificate revocation list.

+ +
+
+ +

RETURN VALUES

+ +

OSSL_STORE_INFO_get_type() returns the STORE type number of the given OSSL_STORE_INFO. There is no error value.

+ +

OSSL_STORE_INFO_get0_NAME(), OSSL_STORE_INFO_get0_NAME_description(), OSSL_STORE_INFO_get0_PARAMS(), OSSL_STORE_INFO_get0_PKEY(), OSSL_STORE_INFO_get0_CERT() and OSSL_STORE_INFO_get0_CRL() all return a pointer to the OpenSSL object on success, NULL otherwise.

+ +

OSSL_STORE_INFO_get0_NAME(), OSSL_STORE_INFO_get0_NAME_description(), OSSL_STORE_INFO_get0_PARAMS(), OSSL_STORE_INFO_get0_PKEY(), OSSL_STORE_INFO_get0_CERT() and OSSL_STORE_INFO_get0_CRL() all return a pointer to a duplicate of the OpenSSL object on success, NULL otherwise.

+ +

OSSL_STORE_INFO_type_string() returns a string on success, or NULL on failure.

+ +

OSSL_STORE_INFO_new_NAME(), OSSL_STORE_INFO_new_PARAMS(), OSSL_STORE_INFO_new_PKEY(), OSSL_STORE_INFO_new_CERT() and OSSL_STORE_INFO_new_CRL() return a OSSL_STORE_INFO pointer on success, or NULL on failure.

+ +

OSSL_STORE_INFO_set0_NAME_description() returns 1 on success, or 0 on failure.

+ +

SEE ALSO

+ +

ossl_store(7), OSSL_STORE_open(3), OSSL_STORE_register_loader(3)

+ +

HISTORY

+ +

OSSL_STORE_INFO(), OSSL_STORE_INFO_get_type(), OSSL_STORE_INFO_get0_NAME(), OSSL_STORE_INFO_get0_PARAMS(), OSSL_STORE_INFO_get0_PKEY(), OSSL_STORE_INFO_get0_CERT(), OSSL_STORE_INFO_get0_CRL(), OSSL_STORE_INFO_type_string(), OSSL_STORE_INFO_free(), OSSL_STORE_INFO_new_NAME(), OSSL_STORE_INFO_new_PARAMS(), OSSL_STORE_INFO_new_PKEY(), OSSL_STORE_INFO_new_CERT() and OSSL_STORE_INFO_new_CRL() were added in OpenSSL 1.1.1.

+ +

COPYRIGHT

+ +

Copyright 2016-2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OSSL_STORE_LOADER.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OSSL_STORE_LOADER.html new file mode 100644 index 00000000..ad4904c7 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OSSL_STORE_LOADER.html @@ -0,0 +1,219 @@ + + + + +OSSL_STORE_LOADER + + + + + + + + + + +

NAME

+ +

OSSL_STORE_LOADER, OSSL_STORE_LOADER_CTX, OSSL_STORE_LOADER_new, OSSL_STORE_LOADER_get0_engine, OSSL_STORE_LOADER_get0_scheme, OSSL_STORE_LOADER_set_open, OSSL_STORE_LOADER_set_ctrl, OSSL_STORE_LOADER_set_expect, OSSL_STORE_LOADER_set_find, OSSL_STORE_LOADER_set_load, OSSL_STORE_LOADER_set_eof, OSSL_STORE_LOADER_set_error, OSSL_STORE_LOADER_set_close, OSSL_STORE_LOADER_free, OSSL_STORE_register_loader, OSSL_STORE_unregister_loader, OSSL_STORE_open_fn, OSSL_STORE_ctrl_fn, OSSL_STORE_expect_fn, OSSL_STORE_find_fn, OSSL_STORE_load_fn, OSSL_STORE_eof_fn, OSSL_STORE_error_fn, OSSL_STORE_close_fn - Types and functions to manipulate, register and unregister STORE loaders for different URI schemes

+ +

SYNOPSIS

+ +
#include <openssl/store.h>
+
+typedef struct ossl_store_loader_st OSSL_STORE_LOADER;
+
+OSSL_STORE_LOADER *OSSL_STORE_LOADER_new(ENGINE *e, const char *scheme);
+const ENGINE *OSSL_STORE_LOADER_get0_engine(const OSSL_STORE_LOADER
+                                            *store_loader);
+const char *OSSL_STORE_LOADER_get0_scheme(const OSSL_STORE_LOADER
+                                          *store_loader);
+
+/* struct ossl_store_loader_ctx_st is defined differently by each loader */
+typedef struct ossl_store_loader_ctx_st OSSL_STORE_LOADER_CTX;
+
+typedef OSSL_STORE_LOADER_CTX *(*OSSL_STORE_open_fn)(const char *uri,
+                                                     const UI_METHOD *ui_method,
+                                                     void *ui_data);
+int OSSL_STORE_LOADER_set_open(OSSL_STORE_LOADER *store_loader,
+                               OSSL_STORE_open_fn store_open_function);
+typedef int (*OSSL_STORE_ctrl_fn)(OSSL_STORE_LOADER_CTX *ctx, int cmd,
+                                  va_list args);
+int OSSL_STORE_LOADER_set_ctrl(OSSL_STORE_LOADER *store_loader,
+                               OSSL_STORE_ctrl_fn store_ctrl_function);
+typedef int (*OSSL_STORE_expect_fn)(OSSL_STORE_LOADER_CTX *ctx, int expected);
+int OSSL_STORE_LOADER_set_expect(OSSL_STORE_LOADER *loader,
+                                 OSSL_STORE_expect_fn expect_function);
+typedef int (*OSSL_STORE_find_fn)(OSSL_STORE_LOADER_CTX *ctx,
+                                  OSSL_STORE_SEARCH *criteria);
+int OSSL_STORE_LOADER_set_find(OSSL_STORE_LOADER *loader,
+                               OSSL_STORE_find_fn find_function);
+typedef OSSL_STORE_INFO *(*OSSL_STORE_load_fn)(OSSL_STORE_LOADER_CTX *ctx,
+                                               UI_METHOD *ui_method,
+                                               void *ui_data);
+int OSSL_STORE_LOADER_set_load(OSSL_STORE_LOADER *store_loader,
+                               OSSL_STORE_load_fn store_load_function);
+typedef int (*OSSL_STORE_eof_fn)(OSSL_STORE_LOADER_CTX *ctx);
+int OSSL_STORE_LOADER_set_eof(OSSL_STORE_LOADER *store_loader,
+                              OSSL_STORE_eof_fn store_eof_function);
+typedef int (*OSSL_STORE_error_fn)(OSSL_STORE_LOADER_CTX *ctx);
+int OSSL_STORE_LOADER_set_error(OSSL_STORE_LOADER *store_loader,
+                                OSSL_STORE_error_fn store_error_function);
+typedef int (*OSSL_STORE_close_fn)(OSSL_STORE_LOADER_CTX *ctx);
+int OSSL_STORE_LOADER_set_close(OSSL_STORE_LOADER *store_loader,
+                                OSSL_STORE_close_fn store_close_function);
+void OSSL_STORE_LOADER_free(OSSL_STORE_LOADER *store_loader);
+
+int OSSL_STORE_register_loader(OSSL_STORE_LOADER *loader);
+OSSL_STORE_LOADER *OSSL_STORE_unregister_loader(const char *scheme);
+ +

DESCRIPTION

+ +

These functions help applications and engines to create loaders for schemes they support.

+ +

Types

+ +

OSSL_STORE_LOADER is the type to hold a loader. It contains a scheme and the functions needed to implement OSSL_STORE_open(), OSSL_STORE_load(), OSSL_STORE_eof(), OSSL_STORE_error() and OSSL_STORE_close() for this scheme.

+ +

OSSL_STORE_LOADER_CTX is a type template, to be defined by each loader using struct ossl_store_loader_ctx_st { ... }.

+ +

OSSL_STORE_open_fn, OSSL_STORE_ctrl_fn, OSSL_STORE_expect_fn, OSSL_STORE_find_fn, OSSL_STORE_load_fn, OSSL_STORE_eof_fn, and OSSL_STORE_close_fn are the function pointer types used within a STORE loader. The functions pointed at define the functionality of the given loader.

+ +
+ +
OSSL_STORE_open_fn
+
+ +

This function takes a URI and is expected to interpret it in the best manner possible according to the scheme the loader implements, it also takes a UI_METHOD and associated data, to be used any time something needs to be prompted for. Furthermore, this function is expected to initialize what needs to be initialized, to create a private data store (OSSL_STORE_LOADER_CTX, see above), and to return it. If something goes wrong, this function is expected to return NULL.

+ +
+
OSSL_STORE_ctrl_fn
+
+ +

This function takes a OSSL_STORE_LOADER_CTX pointer, a command number cmd and a va_list args and is used to manipulate loader specific parameters.

+ +

Loader specific command numbers must begin at OSSL_STORE_C_CUSTOM_START. Any number below that is reserved for future globally known command numbers.

+ +

This function is expected to return 1 on success, 0 on error.

+ +
+
OSSL_STORE_expect_fn
+
+ +

This function takes a OSSL_STORE_LOADER_CTX pointer and a OSSL_STORE_INFO identity expected, and is used to tell the loader what object type is expected. expected may be zero to signify that no specific object type is expected.

+ +

This function is expected to return 1 on success, 0 on error.

+ +
+
OSSL_STORE_find_fn
+
+ +

This function takes a OSSL_STORE_LOADER_CTX pointer and a OSSL_STORE_SEARCH search criterion, and is used to tell the loader what to search for.

+ +

When called with the loader context being NULL, this function is expected to return 1 if the loader supports the criterion, otherwise 0.

+ +

When called with the loader context being something other than NULL, this function is expected to return 1 on success, 0 on error.

+ +
+
OSSL_STORE_load_fn
+
+ +

This function takes a OSSL_STORE_LOADER_CTX pointer and a UI_METHOD with associated data. It's expected to load the next available data, mold it into a data structure that can be wrapped in a OSSL_STORE_INFO using one of the OSSL_STORE_INFO(3) functions. If no more data is available or an error occurs, this function is expected to return NULL. The OSSL_STORE_eof_fn and OSSL_STORE_error_fn functions must indicate if it was in fact the end of data or if an error occurred.

+ +

Note that this function retrieves one data item only.

+ +
+
OSSL_STORE_eof_fn
+
+ +

This function takes a OSSL_STORE_LOADER_CTX pointer and is expected to return 1 to indicate that the end of available data has been reached. It is otherwise expected to return 0.

+ +
+
OSSL_STORE_error_fn
+
+ +

This function takes a OSSL_STORE_LOADER_CTX pointer and is expected to return 1 to indicate that an error occurred in a previous call to the OSSL_STORE_load_fn function. It is otherwise expected to return 0.

+ +
+
OSSL_STORE_close_fn
+
+ +

This function takes a OSSL_STORE_LOADER_CTX pointer and is expected to close or shut down what needs to be closed, and finally free the contents of the OSSL_STORE_LOADER_CTX pointer. It returns 1 on success and 0 on error.

+ +
+
+ +

Functions

+ +

OSSL_STORE_LOADER_new() creates a new OSSL_STORE_LOADER. It takes an ENGINE e and a string scheme. scheme must always be set. Both e and scheme are used as is and must therefore be alive as long as the created loader is.

+ +

OSSL_STORE_LOADER_get0_engine() returns the engine of the store_loader. OSSL_STORE_LOADER_get0_scheme() returns the scheme of the store_loader.

+ +

OSSL_STORE_LOADER_set_open() sets the opener function for the store_loader.

+ +

OSSL_STORE_LOADER_set_ctrl() sets the control function for the store_loader.

+ +

OSSL_STORE_LOADER_set_expect() sets the expect function for the store_loader.

+ +

OSSL_STORE_LOADER_set_load() sets the loader function for the store_loader.

+ +

OSSL_STORE_LOADER_set_eof() sets the end of file checker function for the store_loader.

+ +

OSSL_STORE_LOADER_set_close() sets the closing function for the store_loader.

+ +

OSSL_STORE_LOADER_free() frees the given store_loader.

+ +

OSSL_STORE_register_loader() register the given store_loader and thereby makes it available for use with OSSL_STORE_open(), OSSL_STORE_load(), OSSL_STORE_eof() and OSSL_STORE_close().

+ +

OSSL_STORE_unregister_loader() unregister the store loader for the given scheme.

+ +

NOTES

+ +

The file: scheme has built in support.

+ +

RETURN VALUES

+ +

The functions with the types OSSL_STORE_open_fn, OSSL_STORE_ctrl_fn, OSSL_STORE_expect_fn, OSSL_STORE_load_fn, OSSL_STORE_eof_fn and OSSL_STORE_close_fn have the same return values as OSSL_STORE_open(), OSSL_STORE_ctrl(), OSSL_STORE_expect(), OSSL_STORE_load(), OSSL_STORE_eof() and OSSL_STORE_close(), respectively.

+ +

OSSL_STORE_LOADER_new() returns a pointer to a OSSL_STORE_LOADER on success, or NULL on failure.

+ +

OSSL_STORE_LOADER_set_open(), OSSL_STORE_LOADER_set_ctrl(), OSSL_STORE_LOADER_set_load(), OSSL_STORE_LOADER_set_eof() and OSSL_STORE_LOADER_set_close() return 1 on success, or 0 on failure.

+ +

OSSL_STORE_register_loader() returns 1 on success, or 0 on failure.

+ +

OSSL_STORE_unregister_loader() returns the unregistered loader on success, or NULL on failure.

+ +

SEE ALSO

+ +

ossl_store(7), OSSL_STORE_open(3)

+ +

HISTORY

+ +

OSSL_STORE_LOADER(), OSSL_STORE_LOADER_CTX(), OSSL_STORE_LOADER_new(), OSSL_STORE_LOADER_set0_scheme(), OSSL_STORE_LOADER_set_open(), OSSL_STORE_LOADER_set_ctrl(), OSSL_STORE_LOADER_set_load(), OSSL_STORE_LOADER_set_eof(), OSSL_STORE_LOADER_set_close(), OSSL_STORE_LOADER_free(), OSSL_STORE_register_loader(), OSSL_STORE_unregister_loader(), OSSL_STORE_open_fn(), OSSL_STORE_ctrl_fn(), OSSL_STORE_load_fn(), OSSL_STORE_eof_fn() and OSSL_STORE_close_fn() were added in OpenSSL 1.1.1.

+ +

COPYRIGHT

+ +

Copyright 2016-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OSSL_STORE_SEARCH.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OSSL_STORE_SEARCH.html new file mode 100644 index 00000000..078d308c --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OSSL_STORE_SEARCH.html @@ -0,0 +1,151 @@ + + + + +OSSL_STORE_SEARCH + + + + + + + + + + +

NAME

+ +

OSSL_STORE_SEARCH, OSSL_STORE_SEARCH_by_name, OSSL_STORE_SEARCH_by_issuer_serial, OSSL_STORE_SEARCH_by_key_fingerprint, OSSL_STORE_SEARCH_by_alias, OSSL_STORE_SEARCH_free, OSSL_STORE_SEARCH_get_type, OSSL_STORE_SEARCH_get0_name, OSSL_STORE_SEARCH_get0_serial, OSSL_STORE_SEARCH_get0_bytes, OSSL_STORE_SEARCH_get0_string, OSSL_STORE_SEARCH_get0_digest - Type and functions to create OSSL_STORE search criteria

+ +

SYNOPSIS

+ +
#include <openssl/store.h>
+
+typedef struct ossl_store_search_st OSSL_STORE_SEARCH;
+
+OSSL_STORE_SEARCH *OSSL_STORE_SEARCH_by_name(X509_NAME *name);
+OSSL_STORE_SEARCH *OSSL_STORE_SEARCH_by_issuer_serial(X509_NAME *name,
+                                                      const ASN1_INTEGER
+                                                      *serial);
+OSSL_STORE_SEARCH *OSSL_STORE_SEARCH_by_key_fingerprint(const EVP_MD *digest,
+                                                        const unsigned char
+                                                        *bytes, int len);
+OSSL_STORE_SEARCH *OSSL_STORE_SEARCH_by_alias(const char *alias);
+
+void OSSL_STORE_SEARCH_free(OSSL_STORE_SEARCH *search);
+
+int OSSL_STORE_SEARCH_get_type(const OSSL_STORE_SEARCH *criterion);
+X509_NAME *OSSL_STORE_SEARCH_get0_name(OSSL_STORE_SEARCH *criterion);
+const ASN1_INTEGER *OSSL_STORE_SEARCH_get0_serial(const OSSL_STORE_SEARCH
+                                                  *criterion);
+const unsigned char *OSSL_STORE_SEARCH_get0_bytes(const OSSL_STORE_SEARCH
+                                                  *criterion, size_t *length);
+const char *OSSL_STORE_SEARCH_get0_string(const OSSL_STORE_SEARCH *criterion);
+const EVP_MD *OSSL_STORE_SEARCH_get0_digest(const OSSL_STORE_SEARCH
+                                            *criterion);
+ +

DESCRIPTION

+ +

These functions are used to specify search criteria to help search for specific objects through other names than just the URI that's given to OSSL_STORE_open(). For example, this can be useful for an application that has received a URI and then wants to add on search criteria in a uniform and supported manner.

+ +

Types

+ +

OSSL_STORE_SEARCH is an opaque type that holds the constructed search criterion, and that can be given to an OSSL_STORE context with OSSL_STORE_find().

+ +

The calling application owns the allocation of an OSSL_STORE_SEARCH at all times, and should therefore be careful not to deallocate it before OSSL_STORE_close() has been called for the OSSL_STORE context it was given to.

+ +

Application Functions

+ +

OSSL_STORE_SEARCH_by_name(), OSSL_STORE_SEARCH_by_issuer_serial(), OSSL_STORE_SEARCH_by_key_fingerprint(), and OSSL_STORE_SEARCH_by_alias() are used to create an OSSL_STORE_SEARCH from a subject name, an issuer name and serial number pair, a key fingerprint, and an alias (for example a friendly name). The parameters that are provided are not copied, only referred to in a criterion, so they must have at least the same life time as the created OSSL_STORE_SEARCH.

+ +

OSSL_STORE_SEARCH_free() is used to free the OSSL_STORE_SEARCH.

+ +

Loader Functions

+ +

OSSL_STORE_SEARCH_get_type() returns the criterion type for the given OSSL_STORE_SEARCH.

+ +

OSSL_STORE_SEARCH_get0_name(), OSSL_STORE_SEARCH_get0_serial(), OSSL_STORE_SEARCH_get0_bytes(), OSSL_STORE_SEARCH_get0_string(), and OSSL_STORE_SEARCH_get0_digest() are used to retrieve different data from a OSSL_STORE_SEARCH, as available for each type. For more information, see "SUPPORTED CRITERION TYPES" below.

+ +

SUPPORTED CRITERION TYPES

+ +

Currently supported criterion types are:

+ +
+ +
OSSL_STORE_SEARCH_BY_NAME
+
+ +

This criterion supports a search by exact match of subject name. The subject name itself is a X509_NAME pointer. A criterion of this type is created with OSSL_STORE_SEARCH_by_name(), and the actual subject name is retrieved with OSSL_STORE_SEARCH_get0_name().

+ +
+
OSSL_STORE_SEARCH_BY_ISSUER_SERIAL
+
+ +

This criterion supports a search by exact match of both issuer name and serial number. The issuer name itself is a X509_NAME pointer, and the serial number is a ASN1_INTEGER pointer. A criterion of this type is created with OSSL_STORE_SEARCH_by_issuer_serial() and the actual issuer name and serial number are retrieved with OSSL_STORE_SEARCH_get0_name() and OSSL_STORE_SEARCH_get0_serial().

+ +
+
OSSL_STORE_SEARCH_BY_KEY_FINGERPRINT
+
+ +

This criterion supports a search by exact match of key fingerprint. The key fingerprint in itself is a string of bytes and its length, as well as the algorithm that was used to compute the fingerprint. The digest may be left unspecified (NULL), and in that case, the loader has to decide on a default digest and compare fingerprints accordingly. A criterion of this type is created with OSSL_STORE_SEARCH_by_key_fingerprint() and the actual fingerprint and its length can be retrieved with OSSL_STORE_SEARCH_get0_bytes(). The digest can be retrieved with OSSL_STORE_SEARCH_get0_digest().

+ +
+
OSSL_STORE_SEARCH_BY_ALIAS
+
+ +

This criterion supports a search by match of an alias of some kind. The alias in itself is a simple C string. A criterion of this type is created with OSSL_STORE_SEARCH_by_alias() and the actual alias is retrieved with OSSL_STORE_SEARCH_get0_string().

+ +
+
+ +

RETURN VALUES

+ +

OSSL_STORE_SEARCH_by_name(), OSSL_STORE_SEARCH_by_issuer_serial(), OSSL_STORE_SEARCH_by_key_fingerprint(), and OSSL_STORE_SEARCH_by_alias() return a OSSL_STORE_SEARCH pointer on success, or NULL on failure.

+ +

OSSL_STORE_SEARCH_get_type() returns the criterion type of the given OSSL_STORE_SEARCH. There is no error value.

+ +

OSSL_STORE_SEARCH_get0_name() returns a X509_NAME pointer on success, or NULL when the given OSSL_STORE_SEARCH was of a different type.

+ +

OSSL_STORE_SEARCH_get0_serial() returns a ASN1_INTEGER pointer on success, or NULL when the given OSSL_STORE_SEARCH was of a different type.

+ +

OSSL_STORE_SEARCH_get0_bytes() returns a const unsigned char pointer and sets *length to the strings length on success, or NULL when the given OSSL_STORE_SEARCH was of a different type.

+ +

OSSL_STORE_SEARCH_get0_string() returns a const char pointer on success, or NULL when the given OSSL_STORE_SEARCH was of a different type.

+ +

OSSL_STORE_SEARCH_get0_digest() returns a const EVP_MD pointer. NULL is a valid value and means that the store loader default will be used when applicable.

+ +

SEE ALSO

+ +

ossl_store(7), OSSL_STORE_supports_search(3), OSSL_STORE_find(3)

+ +

HISTORY

+ +

OSSL_STORE_SEARCH, OSSL_STORE_SEARCH_by_name(), OSSL_STORE_SEARCH_by_issuer_serial(), OSSL_STORE_SEARCH_by_key_fingerprint(), OSSL_STORE_SEARCH_by_alias(), OSSL_STORE_SEARCH_free(), OSSL_STORE_SEARCH_get_type(), OSSL_STORE_SEARCH_get0_name(), OSSL_STORE_SEARCH_get0_serial(), OSSL_STORE_SEARCH_get0_bytes(), and OSSL_STORE_SEARCH_get0_string() were added in OpenSSL 1.1.1.

+ +

COPYRIGHT

+ +

Copyright 2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OSSL_STORE_expect.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OSSL_STORE_expect.html new file mode 100644 index 00000000..e217af49 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OSSL_STORE_expect.html @@ -0,0 +1,82 @@ + + + + +OSSL_STORE_expect + + + + + + + + + + +

NAME

+ +

OSSL_STORE_expect, OSSL_STORE_supports_search, OSSL_STORE_find - Specify what object type is expected

+ +

SYNOPSIS

+ +
#include <openssl/store.h>
+
+int OSSL_STORE_expect(OSSL_STORE_CTX *ctx, int expected_type);
+
+int OSSL_STORE_supports_search(OSSL_STORE_CTX *ctx, int criterion_type);
+
+int OSSL_STORE_find(OSSL_STORE_CTX *ctx, OSSL_STORE_SEARCH *search);
+ +

DESCRIPTION

+ +

OSSL_STORE_expect() helps applications filter what OSSL_STORE_load() returns by specifying a OSSL_STORE_INFO type. For example, if file:/foo/bar/store.pem contains several different objects and only the certificates are interesting, the application can simply say that it expects the type OSSL_STORE_INFO_CERT. All known object types (see "SUPPORTED OBJECTS" in OSSL_STORE_INFO(3)) except for OSSL_STORE_INFO_NAME are supported.

+ +

OSSL_STORE_find() helps applications specify a criterion for a more fine grained search of objects.

+ +

OSSL_STORE_supports_search() checks if the loader of the given OSSL_STORE context supports the given search type. See "SUPPORTED CRITERION TYPES" in OSSL_STORE_SEARCH for information on the supported search criterion types.

+ +

OSSL_STORE_expect() and OSSL_STORE_find must be called before the first OSSL_STORE_load() of a given session, or they will fail.

+ +

NOTES

+ +

If a more elaborate filter is required by the application, a better choice would be to use a post-processing function. See OSSL_STORE_open(3) for more information.

+ +

However, some loaders may take advantage of the knowledge of an expected type to make object retrieval more efficient, so if a single type is expected, this method is usually preferable.

+ +

RETURN VALUES

+ +

OSSL_STORE_expect() returns 1 on success, or 0 on failure.

+ +

OSSL_STORE_supports_search() returns 1 if the criterion is supported, or 0 otherwise.

+ +

OSSL_STORE_find() returns 1 on success, or 0 on failure.

+ +

SEE ALSO

+ +

ossl_store(7), OSSL_STORE_INFO(3), OSSL_STORE_SEARCH(3), OSSL_STORE_load(3)

+ +

HISTORY

+ +

OSSL_STORE_expect(), OSSL_STORE_supports_search() and OSSL_STORE_find() were added in OpenSSL 1.1.1.

+ +

COPYRIGHT

+ +

Copyright 2018-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OSSL_STORE_open.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OSSL_STORE_open.html new file mode 100644 index 00000000..e6b96df3 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OSSL_STORE_open.html @@ -0,0 +1,133 @@ + + + + +OSSL_STORE_open + + + + + + + + + + +

NAME

+ +

OSSL_STORE_CTX, OSSL_STORE_post_process_info_fn, OSSL_STORE_open, OSSL_STORE_ctrl, OSSL_STORE_load, OSSL_STORE_eof, OSSL_STORE_error, OSSL_STORE_close - Types and functions to read objects from a URI

+ +

SYNOPSIS

+ +
#include <openssl/store.h>
+
+typedef struct ossl_store_ctx_st OSSL_STORE_CTX;
+
+typedef OSSL_STORE_INFO *(*OSSL_STORE_post_process_info_fn)(OSSL_STORE_INFO *,
+                                                            void *);
+
+OSSL_STORE_CTX *OSSL_STORE_open(const char *uri, const UI_METHOD *ui_method,
+                                void *ui_data,
+                                OSSL_STORE_post_process_info_fn post_process,
+                                void *post_process_data);
+int OSSL_STORE_ctrl(OSSL_STORE_CTX *ctx, int cmd, ... /* args */);
+OSSL_STORE_INFO *OSSL_STORE_load(OSSL_STORE_CTX *ctx);
+int OSSL_STORE_eof(OSSL_STORE_CTX *ctx);
+int OSSL_STORE_error(OSSL_STORE_CTX *ctx);
+int OSSL_STORE_close(OSSL_STORE_CTX *ctx);
+ +

DESCRIPTION

+ +

These functions help the application to fetch supported objects (see "SUPPORTED OBJECTS" in OSSL_STORE_INFO(3) for information on which those are) from a given URI (see "SUPPORTED SCHEMES" for more information on the supported URI schemes). The general method to do so is to "open" the URI using OSSL_STORE_open(), read each available and supported object using OSSL_STORE_load() as long as OSSL_STORE_eof() hasn't been reached, and finish it off with OSSL_STORE_close().

+ +

The retrieved information is stored in a OSSL_STORE_INFO, which is further described in OSSL_STORE_INFO(3).

+ +

Types

+ +

OSSL_STORE_CTX is a context variable that holds all the internal information for OSSL_STORE_open(), OSSL_STORE_load(), OSSL_STORE_eof() and OSSL_STORE_close() to work together.

+ +

Functions

+ +

OSSL_STORE_open() takes a uri or path uri, password UI method ui_method with associated data ui_data, and post processing callback post_process with associated data post_process_data, opens a channel to the data located at that URI and returns a OSSL_STORE_CTX with all necessary internal information. The given ui_method and ui_data_data will be reused by all functions that use OSSL_STORE_CTX when interaction is needed. The given post_process and post_process_data will be reused by OSSL_STORE_load() to manipulate or drop the value to be returned. The 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 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 OSSL_STORE_CTX, and command number 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 that loader.

+ +

There are also global controls available:

+ +
+ +
OSSL_STORE_C_USE_SECMEM
+
+ +

Controls if the loader should attempt to use secure memory for any allocated OSSL_STORE_INFO and its contents. This control expects one argument, a pointer to an int that is expected to have the value 1 (yes) or 0 (no). Any other value is an error.

+ +
+
+ +

OSSL_STORE_load() takes a OSSL_STORE_CTX, tries to load the next available object and return it wrapped with OSSL_STORE_INFO.

+ +

OSSL_STORE_eof() takes a OSSL_STORE_CTX and checks if we've reached the end of data.

+ +

OSSL_STORE_error() takes a OSSL_STORE_CTX and checks if an error occurred in the last OSSL_STORE_load() call. Note that it may still be meaningful to try and load more objects, unless OSSL_STORE_eof() shows that the end of data has been reached.

+ +

OSSL_STORE_close() takes a OSSL_STORE_CTX, closes the channel that was opened by OSSL_STORE_open() and frees all other information that was stored in the OSSL_STORE_CTX, as well as the OSSL_STORE_CTX itself.

+ +

SUPPORTED SCHEMES

+ +

The basic supported scheme is file:. Any other scheme can be added dynamically, using OSSL_STORE_register_loader().

+ +

NOTES

+ +

A string without a scheme prefix (that is, a non-URI string) is implicitly interpreted as using the file: scheme.

+ +

There are some tools that can be used together with OSSL_STORE_open() to determine if any failure is caused by an unparsable URI, or if it's a different error (such as memory allocation failures); if the URI was parsable but the scheme unregistered, the top error will have the reason OSSL_STORE_R_UNREGISTERED_SCHEME.

+ +

These functions make no direct assumption regarding the pass phrase received from the password callback. The loaders may make assumptions, however. For example, the file: scheme loader inherits the assumptions made by OpenSSL functionality that handles the different file types; this is mostly relevant for PKCS#12 objects. See passphrase-encoding(7) for further information.

+ +

RETURN VALUES

+ +

OSSL_STORE_open() returns a pointer to a OSSL_STORE_CTX on success, or NULL on failure.

+ +

OSSL_STORE_load() returns a pointer to a OSSL_STORE_INFO on success, or 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 NULL.

+ +

OSSL_STORE_eof() returns 1 if the end of data has been reached, otherwise 0.

+ +

OSSL_STORE_error() returns 1 if an error occurred in an OSSL_STORE_load() call, otherwise 0.

+ +

OSSL_STORE_ctrl() and OSSL_STORE_close() returns 1 on success, or 0 on failure.

+ +

SEE ALSO

+ +

ossl_store(7), OSSL_STORE_INFO(3), OSSL_STORE_register_loader(3), passphrase-encoding(7)

+ +

HISTORY

+ +

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.

+ +

COPYRIGHT

+ +

Copyright 2016-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OpenSSL_add_all_algorithms.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OpenSSL_add_all_algorithms.html new file mode 100644 index 00000000..44496b20 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/OpenSSL_add_all_algorithms.html @@ -0,0 +1,77 @@ + + + + +OpenSSL_add_all_algorithms + + + + + + + + + + +

NAME

+ +

OpenSSL_add_all_algorithms, OpenSSL_add_all_ciphers, OpenSSL_add_all_digests, EVP_cleanup - add algorithms to internal table

+ +

SYNOPSIS

+ +
#include <openssl/evp.h>
+ +

Deprecated:

+ +
 # if OPENSSL_API_COMPAT < 0x10100000L
+ void OpenSSL_add_all_algorithms(void);
+ void OpenSSL_add_all_ciphers(void);
+ void OpenSSL_add_all_digests(void);
+
+ void EVP_cleanup(void)
+# endif
+ +

DESCRIPTION

+ +

OpenSSL keeps an internal table of digest algorithms and ciphers. It uses this table to lookup ciphers via functions such as EVP_get_cipher_byname().

+ +

OpenSSL_add_all_digests() adds all digest algorithms to the table.

+ +

OpenSSL_add_all_algorithms() adds all algorithms to the table (digests and ciphers).

+ +

OpenSSL_add_all_ciphers() adds all encryption algorithms to the table including password based encryption algorithms.

+ +

In versions prior to 1.1.0 EVP_cleanup() removed all ciphers and digests from the table. It no longer has any effect in OpenSSL 1.1.0.

+ +

RETURN VALUES

+ +

None of the functions return a value.

+ +

SEE ALSO

+ +

evp(7), EVP_DigestInit(3), EVP_EncryptInit(3)

+ +

HISTORY

+ +

The OpenSSL_add_all_algorithms(), OpenSSL_add_all_ciphers(), OpenSSL_add_all_digests(), and EVP_cleanup(), functions were deprecated in OpenSSL 1.1.0 by OPENSSL_init_crypto() and should not be used.

+ +

COPYRIGHT

+ +

Copyright 2000-2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/PEM_bytes_read_bio.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/PEM_bytes_read_bio.html new file mode 100644 index 00000000..08027082 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/PEM_bytes_read_bio.html @@ -0,0 +1,81 @@ + + + + +PEM_bytes_read_bio + + + + + + + + + + +

NAME

+ +

PEM_bytes_read_bio, PEM_bytes_read_bio_secmem - read a PEM-encoded data structure from a BIO

+ +

SYNOPSIS

+ +
#include <openssl/pem.h>
+
+int PEM_bytes_read_bio(unsigned char **pdata, long *plen, char **pnm,
+                       const char *name, BIO *bp, pem_password_cb *cb,
+                       void *u);
+int PEM_bytes_read_bio_secmem(unsigned char **pdata, long *plen, char **pnm,
+                              const char *name, BIO *bp, pem_password_cb *cb,
+                              void *u);
+ +

DESCRIPTION

+ +

PEM_bytes_read_bio() reads PEM-formatted (IETF RFC 1421 and IETF RFC 7468) data from the BIO bp for the data type given in name (RSA PRIVATE KEY, CERTIFICATE, etc.). If multiple PEM-encoded data structures are present in the same stream, PEM_bytes_read_bio() will skip non-matching data types and continue reading. Non-PEM data present in the stream may cause an error.

+ +

The PEM header may indicate that the following data is encrypted; if so, the data will be decrypted, waiting on user input to supply a passphrase if needed. The password callback cb and rock u are used to obtain the decryption passphrase, if applicable.

+ +

Some data types have compatibility aliases, such as a file containing X509 CERTIFICATE matching a request for the deprecated type CERTIFICATE. The actual type indicated by the file is returned in *pnm if pnm is non-NULL. The caller must free the storage pointed to by *pnm.

+ +

The returned data is the DER-encoded form of the requested type, in *pdata with length *plen. The caller must free the storage pointed to by *pdata.

+ +

PEM_bytes_read_bio_secmem() is similar to PEM_bytes_read_bio(), but uses memory from the secure heap for its temporary buffers and the storage returned in *pdata and *pnm. Accordingly, the caller must use OPENSSL_secure_free() to free that storage.

+ +

NOTES

+ +

PEM_bytes_read_bio_secmem() only enforces that the secure heap is used for storage allocated within the PEM processing stack. The BIO stack from which input is read may also use temporary buffers, which are not necessarily allocated from the secure heap. In cases where it is desirable to ensure that the contents of the PEM file only appears in memory from the secure heap, care is needed in generating the BIO passed as bp. In particular, the use of BIO_s_file() indicates the use of the operating system stdio functionality, which includes buffering as a feature; BIO_s_fd() is likely to be more appropriate in such cases.

+ +

These functions make no assumption regarding the pass phrase received from the password callback. It will simply be treated as a byte sequence.

+ +

RETURN VALUES

+ +

PEM_bytes_read_bio() and PEM_bytes_read_bio_secmem() return 1 for success or 0 for failure.

+ +

SEE ALSO

+ +

PEM_read_bio_ex(3), passphrase-encoding(7)

+ +

HISTORY

+ +

PEM_bytes_read_bio_secmem() was introduced in OpenSSL 1.1.1

+ +

COPYRIGHT

+ +

Copyright 2017-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/PEM_read.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/PEM_read.html new file mode 100644 index 00000000..2f59013a --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/PEM_read.html @@ -0,0 +1,98 @@ + + + + +PEM_read + + + + + + + + + + +

NAME

+ +

PEM_write, PEM_write_bio, PEM_read, PEM_read_bio, PEM_do_header, PEM_get_EVP_CIPHER_INFO - PEM encoding routines

+ +

SYNOPSIS

+ +
#include <openssl/pem.h>
+
+int PEM_write(FILE *fp, const char *name, const char *header,
+              const unsigned char *data, long len)
+int PEM_write_bio(BIO *bp, const char *name, const char *header,
+                  const unsigned char *data, long len)
+
+int PEM_read(FILE *fp, char **name, char **header,
+             unsigned char **data, long *len);
+int PEM_read_bio(BIO *bp, char **name, char **header,
+                 unsigned char **data, long *len);
+
+int PEM_get_EVP_CIPHER_INFO(char *header, EVP_CIPHER_INFO *cinfo);
+int PEM_do_header(EVP_CIPHER_INFO *cinfo, unsigned char *data, long *len,
+                  pem_password_cb *cb, void *u);
+ +

DESCRIPTION

+ +

These functions read and write PEM-encoded objects, using the PEM type name, any additional header information, and the raw data of length len.

+ +

PEM is the term used for binary content encoding first defined in IETF RFC 1421. The content is a series of base64-encoded lines, surrounded by begin/end markers each on their own line. For example:

+ +
-----BEGIN PRIVATE KEY-----
+MIICdg....
+... bhTQ==
+-----END PRIVATE KEY-----
+ +

Optional header line(s) may appear after the begin line, and their existence depends on the type of object being written or read.

+ +

PEM_write() writes to the file fp, while PEM_write_bio() writes to the BIO bp. The name is the name to use in the marker, the header is the header value or NULL, and data and len specify the data and its length.

+ +

The final data buffer is typically an ASN.1 object which can be decoded with the d2i function appropriate to the type name; see d2i_X509(3) for examples.

+ +

PEM_read() reads from the file fp, while PEM_read_bio() reads from the BIO bp. Both skip any non-PEM data that precedes the start of the next PEM object. When an object is successfully retrieved, the type name from the "----BEGIN <type>-----" is returned via the name argument, any encapsulation headers are returned in header and the base64-decoded content and its length are returned via data and len respectively. The name, header and data pointers are allocated via OPENSSL_malloc() and should be freed by the caller via OPENSSL_free() when no longer needed.

+ +

PEM_get_EVP_CIPHER_INFO() can be used to determine the data returned by PEM_read() or PEM_read_bio() is encrypted and to retrieve the associated cipher and IV. The caller passes a pointer to structure of type EVP_CIPHER_INFO via the cinfo argument and the header returned via PEM_read() or PEM_read_bio(). If the call is successful 1 is returned and the cipher and IV are stored at the address pointed to by cinfo. When the header is malformed, or not supported or when the cipher is unknown or some internal error happens 0 is returned. This function is deprecated, see NOTES below.

+ +

PEM_do_header() can then be used to decrypt the data if the header indicates encryption. The cinfo argument is a pointer to the structure initialized by the previous call to PEM_get_EVP_CIPHER_INFO(). The data and len arguments are those returned by the previous call to PEM_read() or PEM_read_bio(). The cb and u arguments make it possible to override the default password prompt function as described in PEM_read_PrivateKey(3). On successful completion the data is decrypted in place, and len is updated to indicate the plaintext length. This function is deprecated, see NOTES below.

+ +

If the data is a priori known to not be encrypted, then neither PEM_do_header() nor PEM_get_EVP_CIPHER_INFO() need be called.

+ +

RETURN VALUES

+ +

PEM_read() and PEM_read_bio() return 1 on success and 0 on failure, the latter includes the case when no more PEM objects remain in the input file. To distinguish end of file from more serious errors the caller must peek at the error stack and check for PEM_R_NO_START_LINE, which indicates that no more PEM objects were found. See ERR_peek_last_error(3), ERR_GET_REASON(3).

+ +

PEM_get_EVP_CIPHER_INFO() and PEM_do_header() return 1 on success, and 0 on failure. The data is likely meaningless if these functions fail.

+ +

NOTES

+ +

The PEM_get_EVP_CIPHER_INFO() and PEM_do_header() functions are deprecated. This is because the underlying PEM encryption format is obsolete, and should be avoided. It uses an encryption format with an OpenSSL-specific key-derivation function, which employs MD5 with an iteration count of 1! Instead, private keys should be stored in PKCS#8 form, with a strong PKCS#5 v2.0 PBE. See PEM_write_PrivateKey(3) and d2i_PKCS8PrivateKey_bio(3).

+ +

PEM_do_header() makes no assumption regarding the pass phrase received from the password callback. It will simply be treated as a byte sequence.

+ +

SEE ALSO

+ +

ERR_peek_last_error(3), ERR_GET_LIB(3), d2i_PKCS8PrivateKey_bio(3), passphrase-encoding(7)

+ +

COPYRIGHT

+ +

Copyright 1998-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/PEM_read_CMS.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/PEM_read_CMS.html new file mode 100644 index 00000000..c850692f --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/PEM_read_CMS.html @@ -0,0 +1,78 @@ + + + + +PEM_read_CMS + + + + + + + + + + +

NAME

+ +

DECLARE_PEM_rw, PEM_read_CMS, PEM_read_bio_CMS, PEM_write_CMS, PEM_write_bio_CMS, PEM_write_DHxparams, PEM_write_bio_DHxparams, PEM_read_ECPKParameters, PEM_read_bio_ECPKParameters, PEM_write_ECPKParameters, PEM_write_bio_ECPKParameters, PEM_read_ECPrivateKey, PEM_write_ECPrivateKey, PEM_write_bio_ECPrivateKey, PEM_read_EC_PUBKEY, PEM_read_bio_EC_PUBKEY, PEM_write_EC_PUBKEY, PEM_write_bio_EC_PUBKEY, PEM_read_NETSCAPE_CERT_SEQUENCE, PEM_read_bio_NETSCAPE_CERT_SEQUENCE, PEM_write_NETSCAPE_CERT_SEQUENCE, PEM_write_bio_NETSCAPE_CERT_SEQUENCE, PEM_read_PKCS8, PEM_read_bio_PKCS8, PEM_write_PKCS8, PEM_write_bio_PKCS8, PEM_write_PKCS8_PRIV_KEY_INFO, PEM_read_bio_PKCS8_PRIV_KEY_INFO, PEM_read_PKCS8_PRIV_KEY_INFO, PEM_write_bio_PKCS8_PRIV_KEY_INFO, PEM_read_SSL_SESSION, PEM_read_bio_SSL_SESSION, PEM_write_SSL_SESSION, PEM_write_bio_SSL_SESSION - PEM object encoding routines

+ +

SYNOPSIS

+ +
#include <openssl/pem.h>
+
+DECLARE_PEM_rw(name, TYPE)
+
+TYPE *PEM_read_TYPE(FILE *fp, TYPE **a, pem_password_cb *cb, void *u);
+TYPE *PEM_read_bio_TYPE(BIO *bp, TYPE **a, pem_password_cb *cb, void *u);
+int PEM_write_TYPE(FILE *fp, const TYPE *a);
+int PEM_write_bio_TYPE(BIO *bp, const TYPE *a);
+ +

DESCRIPTION

+ +

In the description below, TYPE is used as a placeholder for any of the OpenSSL datatypes, such as X509. The macro DECLARE_PEM_rw expands to the set of declarations shown in the next four lines of the synopsis.

+ +

These routines convert between local instances of ASN1 datatypes and the PEM encoding. For more information on the templates, see ASN1_ITEM(3). For more information on the lower-level routines used by the functions here, see PEM_read(3).

+ +

PEM_read_TYPE() reads a PEM-encoded object of TYPE from the file fp and returns it. The cb and u parameters are as described in pem_password_cb(3).

+ +

PEM_read_bio_TYPE() is similar to PEM_read_TYPE() but reads from the BIO bp.

+ +

PEM_write_TYPE() writes the PEM encoding of the object a to the file fp.

+ +

PEM_write_bio_TYPE() similarly writes to the BIO bp.

+ +

NOTES

+ +

These functions make no assumption regarding the pass phrase received from the password callback. It will simply be treated as a byte sequence.

+ +

RETURN VALUES

+ +

PEM_read_TYPE() and PEM_read_bio_TYPE() return a pointer to an allocated object, which should be released by calling TYPE_free(), or NULL on error.

+ +

PEM_write_TYPE() and PEM_write_bio_TYPE() return the number of bytes written or zero on error.

+ +

SEE ALSO

+ +

PEM_read(3), passphrase-encoding(7)

+ +

COPYRIGHT

+ +

Copyright 1998-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/PEM_read_bio_PrivateKey.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/PEM_read_bio_PrivateKey.html new file mode 100644 index 00000000..dd68d34b --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/PEM_read_bio_PrivateKey.html @@ -0,0 +1,381 @@ + + + + +PEM_read_bio_PrivateKey + + + + + + + + + + +

NAME

+ +

pem_password_cb, PEM_read_bio_PrivateKey, PEM_read_PrivateKey, PEM_write_bio_PrivateKey, PEM_write_bio_PrivateKey_traditional, PEM_write_PrivateKey, PEM_write_bio_PKCS8PrivateKey, PEM_write_PKCS8PrivateKey, PEM_write_bio_PKCS8PrivateKey_nid, PEM_write_PKCS8PrivateKey_nid, PEM_read_bio_PUBKEY, PEM_read_PUBKEY, PEM_write_bio_PUBKEY, PEM_write_PUBKEY, PEM_read_bio_RSAPrivateKey, PEM_read_RSAPrivateKey, PEM_write_bio_RSAPrivateKey, PEM_write_RSAPrivateKey, PEM_read_bio_RSAPublicKey, PEM_read_RSAPublicKey, PEM_write_bio_RSAPublicKey, PEM_write_RSAPublicKey, PEM_read_bio_RSA_PUBKEY, PEM_read_RSA_PUBKEY, PEM_write_bio_RSA_PUBKEY, PEM_write_RSA_PUBKEY, PEM_read_bio_DSAPrivateKey, PEM_read_DSAPrivateKey, PEM_write_bio_DSAPrivateKey, PEM_write_DSAPrivateKey, PEM_read_bio_DSA_PUBKEY, PEM_read_DSA_PUBKEY, PEM_write_bio_DSA_PUBKEY, PEM_write_DSA_PUBKEY, PEM_read_bio_Parameters, PEM_write_bio_Parameters, PEM_read_bio_DSAparams, PEM_read_DSAparams, PEM_write_bio_DSAparams, PEM_write_DSAparams, PEM_read_bio_DHparams, PEM_read_DHparams, PEM_write_bio_DHparams, PEM_write_DHparams, PEM_read_bio_X509, PEM_read_X509, PEM_write_bio_X509, PEM_write_X509, PEM_read_bio_X509_AUX, PEM_read_X509_AUX, PEM_write_bio_X509_AUX, PEM_write_X509_AUX, PEM_read_bio_X509_REQ, PEM_read_X509_REQ, PEM_write_bio_X509_REQ, PEM_write_X509_REQ, PEM_write_bio_X509_REQ_NEW, PEM_write_X509_REQ_NEW, PEM_read_bio_X509_CRL, PEM_read_X509_CRL, PEM_write_bio_X509_CRL, PEM_write_X509_CRL, PEM_read_bio_PKCS7, PEM_read_PKCS7, PEM_write_bio_PKCS7, PEM_write_PKCS7 - PEM routines

+ +

SYNOPSIS

+ +
#include <openssl/pem.h>
+
+typedef int pem_password_cb(char *buf, int size, int rwflag, void *u);
+
+EVP_PKEY *PEM_read_bio_PrivateKey(BIO *bp, EVP_PKEY **x,
+                                  pem_password_cb *cb, void *u);
+EVP_PKEY *PEM_read_PrivateKey(FILE *fp, EVP_PKEY **x,
+                              pem_password_cb *cb, void *u);
+int PEM_write_bio_PrivateKey(BIO *bp, EVP_PKEY *x, const EVP_CIPHER *enc,
+                             unsigned char *kstr, int klen,
+                             pem_password_cb *cb, void *u);
+int PEM_write_bio_PrivateKey_traditional(BIO *bp, EVP_PKEY *x,
+                                         const EVP_CIPHER *enc,
+                                         unsigned char *kstr, int klen,
+                                         pem_password_cb *cb, void *u);
+int PEM_write_PrivateKey(FILE *fp, EVP_PKEY *x, const EVP_CIPHER *enc,
+                         unsigned char *kstr, int klen,
+                         pem_password_cb *cb, void *u);
+
+int PEM_write_bio_PKCS8PrivateKey(BIO *bp, EVP_PKEY *x, const EVP_CIPHER *enc,
+                                  char *kstr, int klen,
+                                  pem_password_cb *cb, void *u);
+int PEM_write_PKCS8PrivateKey(FILE *fp, EVP_PKEY *x, const EVP_CIPHER *enc,
+                              char *kstr, int klen,
+                              pem_password_cb *cb, void *u);
+int PEM_write_bio_PKCS8PrivateKey_nid(BIO *bp, EVP_PKEY *x, int nid,
+                                      char *kstr, int klen,
+                                      pem_password_cb *cb, void *u);
+int PEM_write_PKCS8PrivateKey_nid(FILE *fp, EVP_PKEY *x, int nid,
+                                  char *kstr, int klen,
+                                  pem_password_cb *cb, void *u);
+
+EVP_PKEY *PEM_read_bio_PUBKEY(BIO *bp, EVP_PKEY **x,
+                              pem_password_cb *cb, void *u);
+EVP_PKEY *PEM_read_PUBKEY(FILE *fp, EVP_PKEY **x,
+                          pem_password_cb *cb, void *u);
+int PEM_write_bio_PUBKEY(BIO *bp, EVP_PKEY *x);
+int PEM_write_PUBKEY(FILE *fp, EVP_PKEY *x);
+
+RSA *PEM_read_bio_RSAPrivateKey(BIO *bp, RSA **x,
+                                pem_password_cb *cb, void *u);
+RSA *PEM_read_RSAPrivateKey(FILE *fp, RSA **x,
+                            pem_password_cb *cb, void *u);
+int PEM_write_bio_RSAPrivateKey(BIO *bp, RSA *x, const EVP_CIPHER *enc,
+                                unsigned char *kstr, int klen,
+                                pem_password_cb *cb, void *u);
+int PEM_write_RSAPrivateKey(FILE *fp, RSA *x, const EVP_CIPHER *enc,
+                            unsigned char *kstr, int klen,
+                            pem_password_cb *cb, void *u);
+
+RSA *PEM_read_bio_RSAPublicKey(BIO *bp, RSA **x,
+                               pem_password_cb *cb, void *u);
+RSA *PEM_read_RSAPublicKey(FILE *fp, RSA **x,
+                           pem_password_cb *cb, void *u);
+int PEM_write_bio_RSAPublicKey(BIO *bp, RSA *x);
+int PEM_write_RSAPublicKey(FILE *fp, RSA *x);
+
+RSA *PEM_read_bio_RSA_PUBKEY(BIO *bp, RSA **x,
+                             pem_password_cb *cb, void *u);
+RSA *PEM_read_RSA_PUBKEY(FILE *fp, RSA **x,
+                         pem_password_cb *cb, void *u);
+int PEM_write_bio_RSA_PUBKEY(BIO *bp, RSA *x);
+int PEM_write_RSA_PUBKEY(FILE *fp, RSA *x);
+
+DSA *PEM_read_bio_DSAPrivateKey(BIO *bp, DSA **x,
+                                pem_password_cb *cb, void *u);
+DSA *PEM_read_DSAPrivateKey(FILE *fp, DSA **x,
+                            pem_password_cb *cb, void *u);
+int PEM_write_bio_DSAPrivateKey(BIO *bp, DSA *x, const EVP_CIPHER *enc,
+                                unsigned char *kstr, int klen,
+                                pem_password_cb *cb, void *u);
+int PEM_write_DSAPrivateKey(FILE *fp, DSA *x, const EVP_CIPHER *enc,
+                            unsigned char *kstr, int klen,
+                            pem_password_cb *cb, void *u);
+
+DSA *PEM_read_bio_DSA_PUBKEY(BIO *bp, DSA **x,
+                             pem_password_cb *cb, void *u);
+DSA *PEM_read_DSA_PUBKEY(FILE *fp, DSA **x,
+                         pem_password_cb *cb, void *u);
+int PEM_write_bio_DSA_PUBKEY(BIO *bp, DSA *x);
+int PEM_write_DSA_PUBKEY(FILE *fp, DSA *x);
+
+EVP_PKEY *PEM_read_bio_Parameters(BIO *bp, EVP_PKEY **x);
+int PEM_write_bio_Parameters(BIO *bp, const EVP_PKEY *x);
+
+DSA *PEM_read_bio_DSAparams(BIO *bp, DSA **x, pem_password_cb *cb, void *u);
+DSA *PEM_read_DSAparams(FILE *fp, DSA **x, pem_password_cb *cb, void *u);
+int PEM_write_bio_DSAparams(BIO *bp, DSA *x);
+int PEM_write_DSAparams(FILE *fp, DSA *x);
+
+DH *PEM_read_bio_DHparams(BIO *bp, DH **x, pem_password_cb *cb, void *u);
+DH *PEM_read_DHparams(FILE *fp, DH **x, pem_password_cb *cb, void *u);
+int PEM_write_bio_DHparams(BIO *bp, DH *x);
+int PEM_write_DHparams(FILE *fp, DH *x);
+
+X509 *PEM_read_bio_X509(BIO *bp, X509 **x, pem_password_cb *cb, void *u);
+X509 *PEM_read_X509(FILE *fp, X509 **x, pem_password_cb *cb, void *u);
+int PEM_write_bio_X509(BIO *bp, X509 *x);
+int PEM_write_X509(FILE *fp, X509 *x);
+
+X509 *PEM_read_bio_X509_AUX(BIO *bp, X509 **x, pem_password_cb *cb, void *u);
+X509 *PEM_read_X509_AUX(FILE *fp, X509 **x, pem_password_cb *cb, void *u);
+int PEM_write_bio_X509_AUX(BIO *bp, X509 *x);
+int PEM_write_X509_AUX(FILE *fp, X509 *x);
+
+X509_REQ *PEM_read_bio_X509_REQ(BIO *bp, X509_REQ **x,
+                                pem_password_cb *cb, void *u);
+X509_REQ *PEM_read_X509_REQ(FILE *fp, X509_REQ **x,
+                            pem_password_cb *cb, void *u);
+int PEM_write_bio_X509_REQ(BIO *bp, X509_REQ *x);
+int PEM_write_X509_REQ(FILE *fp, X509_REQ *x);
+int PEM_write_bio_X509_REQ_NEW(BIO *bp, X509_REQ *x);
+int PEM_write_X509_REQ_NEW(FILE *fp, X509_REQ *x);
+
+X509_CRL *PEM_read_bio_X509_CRL(BIO *bp, X509_CRL **x,
+                                pem_password_cb *cb, void *u);
+X509_CRL *PEM_read_X509_CRL(FILE *fp, X509_CRL **x,
+                            pem_password_cb *cb, void *u);
+int PEM_write_bio_X509_CRL(BIO *bp, X509_CRL *x);
+int PEM_write_X509_CRL(FILE *fp, X509_CRL *x);
+
+PKCS7 *PEM_read_bio_PKCS7(BIO *bp, PKCS7 **x, pem_password_cb *cb, void *u);
+PKCS7 *PEM_read_PKCS7(FILE *fp, PKCS7 **x, pem_password_cb *cb, void *u);
+int PEM_write_bio_PKCS7(BIO *bp, PKCS7 *x);
+int PEM_write_PKCS7(FILE *fp, PKCS7 *x);
+ +

DESCRIPTION

+ +

The PEM functions read or write structures in PEM format. In this sense PEM format is simply base64 encoded data surrounded by header lines.

+ +

For more details about the meaning of arguments see the PEM FUNCTION ARGUMENTS section.

+ +

Each operation has four functions associated with it. For brevity the term "TYPE functions" will be used below to collectively refer to the PEM_read_bio_TYPE(), PEM_read_TYPE(), PEM_write_bio_TYPE(), and PEM_write_TYPE() functions.

+ +

The PrivateKey functions read or write a private key in PEM format using an EVP_PKEY structure. The write routines use PKCS#8 private key format and are equivalent to PEM_write_bio_PKCS8PrivateKey().The read functions transparently handle traditional and PKCS#8 format encrypted and unencrypted keys.

+ +

PEM_write_bio_PrivateKey_traditional() writes out a private key in the "traditional" format with a simple private key marker and should only be used for compatibility with legacy programs.

+ +

PEM_write_bio_PKCS8PrivateKey() and PEM_write_PKCS8PrivateKey() write a private key in an EVP_PKEY structure in PKCS#8 EncryptedPrivateKeyInfo format using PKCS#5 v2.0 password based encryption algorithms. The cipher argument specifies the encryption algorithm to use: unlike some other PEM routines the encryption is applied at the PKCS#8 level and not in the PEM headers. If cipher is NULL then no encryption is used and a PKCS#8 PrivateKeyInfo structure is used instead.

+ +

PEM_write_bio_PKCS8PrivateKey_nid() and PEM_write_PKCS8PrivateKey_nid() also write out a private key as a PKCS#8 EncryptedPrivateKeyInfo however it uses PKCS#5 v1.5 or PKCS#12 encryption algorithms instead. The algorithm to use is specified in the nid parameter and should be the NID of the corresponding OBJECT IDENTIFIER (see NOTES section).

+ +

The PUBKEY functions process a public key using an EVP_PKEY structure. The public key is encoded as a SubjectPublicKeyInfo structure.

+ +

The RSAPrivateKey functions process an RSA private key using an RSA structure. The write routines uses traditional format. The read routines handles the same formats as the PrivateKey functions but an error occurs if the private key is not RSA.

+ +

The RSAPublicKey functions process an RSA public key using an RSA structure. The public key is encoded using a PKCS#1 RSAPublicKey structure.

+ +

The RSA_PUBKEY functions also process an RSA public key using an RSA structure. However the public key is encoded using a SubjectPublicKeyInfo structure and an error occurs if the public key is not RSA.

+ +

The DSAPrivateKey functions process a DSA private key using a DSA structure. The write routines uses traditional format. The read routines handles the same formats as the PrivateKey functions but an error occurs if the private key is not DSA.

+ +

The DSA_PUBKEY functions process a DSA public key using a DSA structure. The public key is encoded using a SubjectPublicKeyInfo structure and an error occurs if the public key is not DSA.

+ +

The Parameters functions read or write key parameters in PEM format using an EVP_PKEY structure. The encoding depends on the type of key; for DSA key parameters, it will be a Dss-Parms structure as defined in RFC2459, and for DH key parameters, it will be a PKCS#3 DHparameter structure. These functions only exist for the BIO type.

+ +

The DSAparams functions process DSA parameters using a DSA structure. The parameters are encoded using a Dss-Parms structure as defined in RFC2459.

+ +

The DHparams functions process DH parameters using a DH structure. The parameters are encoded using a PKCS#3 DHparameter structure.

+ +

The X509 functions process an X509 certificate using an X509 structure. They will also process a trusted X509 certificate but any trust settings are discarded.

+ +

The X509_AUX functions process a trusted X509 certificate using an X509 structure.

+ +

The X509_REQ and X509_REQ_NEW functions process a PKCS#10 certificate request using an X509_REQ structure. The X509_REQ write functions use CERTIFICATE REQUEST in the header whereas the X509_REQ_NEW functions use NEW CERTIFICATE REQUEST (as required by some CAs). The X509_REQ read functions will handle either form so there are no X509_REQ_NEW read functions.

+ +

The X509_CRL functions process an X509 CRL using an X509_CRL structure.

+ +

The PKCS7 functions process a PKCS#7 ContentInfo using a PKCS7 structure.

+ +

PEM FUNCTION ARGUMENTS

+ +

The PEM functions have many common arguments.

+ +

The bp BIO parameter (if present) specifies the BIO to read from or write to.

+ +

The fp FILE parameter (if present) specifies the FILE pointer to read from or write to.

+ +

The PEM read functions all take an argument TYPE **x and return a TYPE * pointer. Where TYPE is whatever structure the function uses. If x is NULL then the parameter is ignored. If x is not NULL but *x is NULL then the structure returned will be written to *x. If neither x nor *x is NULL then an attempt is made to reuse the structure at *x (but see BUGS and EXAMPLES sections). Irrespective of the value of x a pointer to the structure is always returned (or NULL if an error occurred).

+ +

The PEM functions which write private keys take an enc parameter which specifies the encryption algorithm to use, encryption is done at the PEM level. If this parameter is set to NULL then the private key is written in unencrypted form.

+ +

The cb argument is the callback to use when querying for the pass phrase used for encrypted PEM structures (normally only private keys).

+ +

For the PEM write routines if the kstr parameter is not NULL then klen bytes at kstr are used as the passphrase and cb is ignored.

+ +

If the cb parameters is set to NULL and the u parameter is not NULL then the u parameter is interpreted as a null terminated string to use as the passphrase. If both cb and u are NULL then the default callback routine is used which will typically prompt for the passphrase on the current terminal with echoing turned off.

+ +

The default passphrase callback is sometimes inappropriate (for example in a GUI application) so an alternative can be supplied. The callback routine has the following form:

+ +
int cb(char *buf, int size, int rwflag, void *u);
+ +

buf is the buffer to write the passphrase to. size is the maximum length of the passphrase (i.e. the size of buf). rwflag is a flag which is set to 0 when reading and 1 when writing. A typical routine will ask the user to verify the passphrase (for example by prompting for it twice) if rwflag is 1. The u parameter has the same value as the u parameter passed to the PEM routine. It allows arbitrary data to be passed to the callback by the application (for example a window handle in a GUI application). The callback must return the number of characters in the passphrase or -1 if an error occurred.

+ +

NOTES

+ +

The old PrivateKey write routines are retained for compatibility. New applications should write private keys using the PEM_write_bio_PKCS8PrivateKey() or PEM_write_PKCS8PrivateKey() routines because they are more secure (they use an iteration count of 2048 whereas the traditional routines use a count of 1) unless compatibility with older versions of OpenSSL is important.

+ +

The PrivateKey read routines can be used in all applications because they handle all formats transparently.

+ +

A frequent cause of problems is attempting to use the PEM routines like this:

+ +
X509 *x;
+
+PEM_read_bio_X509(bp, &x, 0, NULL);
+ +

this is a bug because an attempt will be made to reuse the data at x which is an uninitialised pointer.

+ +

These functions make no assumption regarding the pass phrase received from the password callback. It will simply be treated as a byte sequence.

+ +

PEM ENCRYPTION FORMAT

+ +

These old PrivateKey routines use a non standard technique for encryption.

+ +

The private key (or other data) takes the following form:

+ +
-----BEGIN RSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: DES-EDE3-CBC,3F17F5316E2BAC89
+
+...base64 encoded data...
+-----END RSA PRIVATE KEY-----
+ +

The line beginning with Proc-Type contains the version and the protection on the encapsulated data. The line beginning DEK-Info contains two comma separated values: the encryption algorithm name as used by EVP_get_cipherbyname() and an initialization vector used by the cipher encoded as a set of hexadecimal digits. After those two lines is the base64-encoded encrypted data.

+ +

The encryption key is derived using EVP_BytesToKey(). The cipher's initialization vector is passed to EVP_BytesToKey() as the salt parameter. Internally, PKCS5_SALT_LEN bytes of the salt are used (regardless of the size of the initialization vector). The user's password is passed to EVP_BytesToKey() using the data and datal parameters. Finally, the library uses an iteration count of 1 for EVP_BytesToKey().

+ +

The key derived by EVP_BytesToKey() along with the original initialization vector is then used to decrypt the encrypted data. The iv produced by EVP_BytesToKey() is not utilized or needed, and NULL should be passed to the function.

+ +

The pseudo code to derive the key would look similar to:

+ +
EVP_CIPHER* cipher = EVP_des_ede3_cbc();
+EVP_MD* md = EVP_md5();
+
+unsigned int nkey = EVP_CIPHER_key_length(cipher);
+unsigned int niv = EVP_CIPHER_iv_length(cipher);
+unsigned char key[nkey];
+unsigned char iv[niv];
+
+memcpy(iv, HexToBin("3F17F5316E2BAC89"), niv);
+rc = EVP_BytesToKey(cipher, md, iv /*salt*/, pword, plen, 1, key, NULL /*iv*/);
+if (rc != nkey)
+    /* Error */
+
+/* On success, use key and iv to initialize the cipher */
+ +

BUGS

+ +

The PEM read routines in some versions of OpenSSL will not correctly reuse an existing structure. Therefore the following:

+ +
PEM_read_bio_X509(bp, &x, 0, NULL);
+ +

where x already contains a valid certificate, may not work, whereas:

+ +
X509_free(x);
+x = PEM_read_bio_X509(bp, NULL, 0, NULL);
+ +

is guaranteed to work.

+ +

RETURN VALUES

+ +

The read routines return either a pointer to the structure read or NULL if an error occurred.

+ +

The write routines return 1 for success or 0 for failure.

+ +

EXAMPLES

+ +

Although the PEM routines take several arguments in almost all applications most of them are set to 0 or NULL.

+ +

Read a certificate in PEM format from a BIO:

+ +
X509 *x;
+
+x = PEM_read_bio_X509(bp, NULL, 0, NULL);
+if (x == NULL)
+    /* Error */
+ +

Alternative method:

+ +
X509 *x = NULL;
+
+if (!PEM_read_bio_X509(bp, &x, 0, NULL))
+    /* Error */
+ +

Write a certificate to a BIO:

+ +
if (!PEM_write_bio_X509(bp, x))
+    /* Error */
+ +

Write a private key (using traditional format) to a BIO using triple DES encryption, the pass phrase is prompted for:

+ +
if (!PEM_write_bio_PrivateKey(bp, key, EVP_des_ede3_cbc(), NULL, 0, 0, NULL))
+    /* Error */
+ +

Write a private key (using PKCS#8 format) to a BIO using triple DES encryption, using the pass phrase "hello":

+ +
if (!PEM_write_bio_PKCS8PrivateKey(bp, key, EVP_des_ede3_cbc(),
+                                   NULL, 0, 0, "hello"))
+    /* Error */
+ +

Read a private key from a BIO using a pass phrase callback:

+ +
key = PEM_read_bio_PrivateKey(bp, NULL, pass_cb, "My Private Key");
+if (key == NULL)
+    /* Error */
+ +

Skeleton pass phrase callback:

+ +
int pass_cb(char *buf, int size, int rwflag, void *u)
+{
+
+    /* We'd probably do something else if 'rwflag' is 1 */
+    printf("Enter pass phrase for \"%s\"\n", (char *)u);
+
+    /* get pass phrase, length 'len' into 'tmp' */
+    char *tmp = "hello";
+    if (tmp == NULL) /* An error occurred */
+        return -1;
+
+    size_t len = strlen(tmp);
+
+    if (len > size)
+        len = size;
+    memcpy(buf, tmp, len);
+    return len;
+}
+ +

SEE ALSO

+ +

EVP_EncryptInit(3), EVP_BytesToKey(3), passphrase-encoding(7)

+ +

HISTORY

+ +

The old Netscape certificate sequences were no longer documented in OpenSSL 1.1.0; applications should use the PKCS7 standard instead as they will be formally deprecated in a future releases.

+ +

COPYRIGHT

+ +

Copyright 2001-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/PEM_read_bio_ex.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/PEM_read_bio_ex.html new file mode 100644 index 00000000..0a48ad99 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/PEM_read_bio_ex.html @@ -0,0 +1,80 @@ + + + + +PEM_read_bio_ex + + + + + + + + + + +

NAME

+ +

PEM_read_bio_ex, PEM_FLAG_SECURE, PEM_FLAG_EAY_COMPATIBLE, PEM_FLAG_ONLY_B64 - read PEM format files with custom processing

+ +

SYNOPSIS

+ +
#include <openssl/pem.h>
+
+#define PEM_FLAG_SECURE             0x1
+#define PEM_FLAG_EAY_COMPATIBLE     0x2
+#define PEM_FLAG_ONLY_B64           0x4
+int PEM_read_bio_ex(BIO *in, char **name, char **header,
+                    unsigned char **data, long *len, unsigned int flags);
+ +

DESCRIPTION

+ +

PEM_read_bio_ex() reads in PEM formatted data from an input BIO, outputting the name of the type of contained data, the header information regarding the possibly encrypted data, and the binary data payload (after base64 decoding). It should generally only be used to implement PEM_read_bio_-family functions for specific data types or other usage, but is exposed to allow greater flexibility over how processing is performed, if needed.

+ +

If PEM_FLAG_SECURE is set, the intermediate buffers used to read in lines of input are allocated from the secure heap.

+ +

If PEM_FLAG_EAY_COMPATIBLE is set, a simple algorithm is used to remove whitespace and control characters from the end of each line, so as to be compatible with the historical behavior of PEM_read_bio().

+ +

If PEM_FLAG_ONLY_B64 is set, all characters are required to be valid base64 characters (or newlines); non-base64 characters are treated as end of input.

+ +

If neither PEM_FLAG_EAY_COMPATIBLE or PEM_FLAG_ONLY_B64 is set, control characters are ignored.

+ +

If both PEM_FLAG_EAY_COMPATIBLE and PEM_FLAG_ONLY_B64 are set, an error is returned; these options are not compatible with each other.

+ +

NOTES

+ +

The caller must release the storage allocated for *name, *header, and *data. If PEM_FLAG_SECURE was set, use OPENSSL_secure_free(); otherwise, OPENSSL_free() is used.

+ +

RETURN VALUES

+ +

PEM_read_bio_ex() returns 1 for success or 0 for failure.

+ +

SEE ALSO

+ +

PEM_bytes_read_bio(3)

+ +

HISTORY

+ +

The PEM_read_bio_ex() function was added in OpenSSL 1.1.1.

+ +

COPYRIGHT

+ +

Copyright 2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/PEM_write_bio_CMS_stream.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/PEM_write_bio_CMS_stream.html new file mode 100644 index 00000000..37ff67df --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/PEM_write_bio_CMS_stream.html @@ -0,0 +1,68 @@ + + + + +PEM_write_bio_CMS_stream + + + + + + + + + + +

NAME

+ +

PEM_write_bio_CMS_stream - output CMS_ContentInfo structure in PEM format

+ +

SYNOPSIS

+ +
#include <openssl/cms.h>
+
+int PEM_write_bio_CMS_stream(BIO *out, CMS_ContentInfo *cms, BIO *data, int flags);
+ +

DESCRIPTION

+ +

PEM_write_bio_CMS_stream() outputs a CMS_ContentInfo structure in PEM format.

+ +

It is otherwise identical to the function SMIME_write_CMS().

+ +

NOTES

+ +

This function is effectively a version of the PEM_write_bio_CMS() supporting streaming.

+ +

RETURN VALUES

+ +

PEM_write_bio_CMS_stream() returns 1 for success or 0 for failure.

+ +

SEE ALSO

+ +

ERR_get_error(3), CMS_sign(3), CMS_verify(3), CMS_encrypt(3) CMS_decrypt(3), PEM_write(3), SMIME_write_CMS(3), i2d_CMS_bio_stream(3)

+ +

HISTORY

+ +

The PEM_write_bio_CMS_stream() function was added in OpenSSL 1.0.0.

+ +

COPYRIGHT

+ +

Copyright 2008-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/PEM_write_bio_PKCS7_stream.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/PEM_write_bio_PKCS7_stream.html new file mode 100644 index 00000000..f99bcf93 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/PEM_write_bio_PKCS7_stream.html @@ -0,0 +1,68 @@ + + + + +PEM_write_bio_PKCS7_stream + + + + + + + + + + +

NAME

+ +

PEM_write_bio_PKCS7_stream - output PKCS7 structure in PEM format

+ +

SYNOPSIS

+ +
#include <openssl/pkcs7.h>
+
+int PEM_write_bio_PKCS7_stream(BIO *out, PKCS7 *p7, BIO *data, int flags);
+ +

DESCRIPTION

+ +

PEM_write_bio_PKCS7_stream() outputs a PKCS7 structure in PEM format.

+ +

It is otherwise identical to the function SMIME_write_PKCS7().

+ +

NOTES

+ +

This function is effectively a version of the PEM_write_bio_PKCS7() supporting streaming.

+ +

RETURN VALUES

+ +

PEM_write_bio_PKCS7_stream() returns 1 for success or 0 for failure.

+ +

SEE ALSO

+ +

ERR_get_error(3), PKCS7_sign(3), PKCS7_verify(3), PKCS7_encrypt(3) PKCS7_decrypt(3), SMIME_write_PKCS7(3), i2d_PKCS7_bio_stream(3)

+ +

HISTORY

+ +

The PEM_write_bio_PKCS7_stream() function was added in OpenSSL 1.0.0.

+ +

COPYRIGHT

+ +

Copyright 2007-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/PKCS12_create.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/PKCS12_create.html new file mode 100644 index 00000000..05762365 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/PKCS12_create.html @@ -0,0 +1,83 @@ + + + + +PKCS12_create + + + + + + + + + + +

NAME

+ +

PKCS12_create - create a PKCS#12 structure

+ +

SYNOPSIS

+ +
#include <openssl/pkcs12.h>
+
+PKCS12 *PKCS12_create(const char *pass, const char *name, EVP_PKEY *pkey,
+                      X509 *cert, STACK_OF(X509) *ca,
+                      int nid_key, int nid_cert, int iter, int mac_iter, int keytype);
+ +

DESCRIPTION

+ +

PKCS12_create() creates a PKCS#12 structure.

+ +

pass is the passphrase to use. name is the friendlyName to use for the supplied certificate and key. pkey is the private key to include in the structure and cert its corresponding certificates. ca, if not NULL is an optional set of certificates to also include in the structure.

+ +

nid_key and nid_cert are the encryption algorithms that should be used for the key and certificate respectively. The modes GCM, CCM, XTS, and OCB are unsupported. iter is the encryption algorithm iteration count to use and mac_iter is the MAC iteration count to use. keytype is the type of key.

+ +

NOTES

+ +

The parameters nid_key, nid_cert, iter, mac_iter and keytype can all be set to zero and sensible defaults will be used.

+ +

These defaults are: 40 bit RC2 encryption for certificates, triple DES encryption for private keys, a key iteration count of PKCS12_DEFAULT_ITER (currently 2048) and a MAC iteration count of 1.

+ +

The default MAC iteration count is 1 in order to retain compatibility with old software which did not interpret MAC iteration counts. If such compatibility is not required then mac_iter should be set to PKCS12_DEFAULT_ITER.

+ +

keytype adds a flag to the store private key. This is a non standard extension that is only currently interpreted by MSIE. If set to zero the flag is omitted, if set to KEY_SIG the key can be used for signing only, if set to KEY_EX it can be used for signing and encryption. This option was useful for old export grade software which could use signing only keys of arbitrary size but had restrictions on the permissible sizes of keys which could be used for encryption.

+ +

If a certificate contains an alias or keyid then this will be used for the corresponding friendlyName or localKeyID in the PKCS12 structure.

+ +

Either pkey, cert or both can be NULL to indicate that no key or certificate is required. In previous versions both had to be present or a fatal error is returned.

+ +

nid_key or nid_cert can be set to -1 indicating that no encryption should be used.

+ +

mac_iter can be set to -1 and the MAC will then be omitted entirely.

+ +

PKCS12_create() makes assumptions regarding the encoding of the given pass phrase. See passphrase-encoding(7) for more information.

+ +

RETURN VALUES

+ +

PKCS12_create() returns a valid PKCS12 structure or NULL if an error occurred.

+ +

SEE ALSO

+ +

d2i_PKCS12(3), passphrase-encoding(7)

+ +

COPYRIGHT

+ +

Copyright 2002-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/PKCS12_newpass.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/PKCS12_newpass.html new file mode 100644 index 00000000..bf5b6054 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/PKCS12_newpass.html @@ -0,0 +1,125 @@ + + + + +PKCS12_newpass + + + + + + + + + + +

NAME

+ +

PKCS12_newpass - change the password of a PKCS12 structure

+ +

SYNOPSIS

+ +
#include <openssl/pkcs12.h>
+
+int PKCS12_newpass(PKCS12 *p12, const char *oldpass, const char *newpass);
+ +

DESCRIPTION

+ +

PKCS12_newpass() changes the password of a PKCS12 structure.

+ +

p12 is a pointer to a PKCS12 structure. oldpass is the existing password and newpass is the new password.

+ +

NOTES

+ +

Each of oldpass and newpass is independently interpreted as a string in the UTF-8 encoding. If it is not valid UTF-8, it is assumed to be ISO8859-1 instead.

+ +

In particular, this means that passwords in the locale character set (or code page on Windows) must potentially be converted to UTF-8 before use. This may include passwords from local text files, or input from the terminal or command line. Refer to the documentation of UI_OpenSSL(3), for example.

+ +

RETURN VALUES

+ +

PKCS12_newpass() returns 1 on success or 0 on failure. Applications can retrieve the most recent error from PKCS12_newpass() with ERR_get_error().

+ +

EXAMPLES

+ +

This example loads a PKCS#12 file, changes its password and writes out the result to a new file.

+ +
#include <stdio.h>
+#include <stdlib.h>
+#include <openssl/pem.h>
+#include <openssl/err.h>
+#include <openssl/pkcs12.h>
+
+int main(int argc, char **argv)
+{
+    FILE *fp;
+    PKCS12 *p12;
+
+    if (argc != 5) {
+        fprintf(stderr, "Usage: pkread p12file password newpass opfile\n");
+        return 1;
+    }
+    if ((fp = fopen(argv[1], "rb")) == NULL) {
+        fprintf(stderr, "Error opening file %s\n", argv[1]);
+        return 1;
+    }
+    p12 = d2i_PKCS12_fp(fp, NULL);
+    fclose(fp);
+    if (p12 == NULL) {
+        fprintf(stderr, "Error reading PKCS#12 file\n");
+        ERR_print_errors_fp(stderr);
+        return 1;
+    }
+    if (PKCS12_newpass(p12, argv[2], argv[3]) == 0) {
+        fprintf(stderr, "Error changing password\n");
+        ERR_print_errors_fp(stderr);
+        PKCS12_free(p12);
+        return 1;
+    }
+    if ((fp = fopen(argv[4], "wb")) == NULL) {
+        fprintf(stderr, "Error opening file %s\n", argv[4]);
+        PKCS12_free(p12);
+        return 1;
+    }
+    i2d_PKCS12_fp(fp, p12);
+    PKCS12_free(p12);
+    fclose(fp);
+    return 0;
+}
+ +

NOTES

+ +

If the PKCS#12 structure does not have a password, then you must use the empty string "" for oldpass. Using NULL for oldpass will result in a PKCS12_newpass() failure.

+ +

If the wrong password is used for oldpass then the function will fail, with a MAC verification error. In rare cases the PKCS12 structure does not contain a MAC: in this case it will usually fail with a decryption padding error.

+ +

BUGS

+ +

The password format is a NULL terminated ASCII string which is converted to Unicode form internally. As a result some passwords cannot be supplied to this function.

+ +

SEE ALSO

+ +

PKCS12_create(3), ERR_get_error(3), passphrase-encoding(7)

+ +

COPYRIGHT

+ +

Copyright 2016-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/PKCS12_parse.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/PKCS12_parse.html new file mode 100644 index 00000000..d9394d3e --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/PKCS12_parse.html @@ -0,0 +1,81 @@ + + + + +PKCS12_parse + + + + + + + + + + +

NAME

+ +

PKCS12_parse - parse a PKCS#12 structure

+ +

SYNOPSIS

+ +
#include <openssl/pkcs12.h>
+
+int PKCS12_parse(PKCS12 *p12, const char *pass, EVP_PKEY **pkey, X509 **cert,
+                 STACK_OF(X509) **ca);
+ +

DESCRIPTION

+ +

PKCS12_parse() parses a PKCS12 structure.

+ +

p12 is the PKCS12 structure to parse. pass is the passphrase to use. If successful the private key will be written to *pkey, the corresponding certificate to *cert and any additional certificates to *ca.

+ +

NOTES

+ +

The parameters pkey and cert cannot be NULL. ca can be <NULL> in which case additional certificates will be discarded. *ca can also be a valid STACK in which case additional certificates are appended to *ca. If *ca is NULL a new STACK will be allocated.

+ +

The friendlyName and localKeyID attributes (if present) on each certificate will be stored in the alias and keyid attributes of the X509 structure.

+ +

The parameter pass is interpreted as a string in the UTF-8 encoding. If it is not valid UTF-8, then it is assumed to be ISO8859-1 instead.

+ +

In particular, this means that passwords in the locale character set (or code page on Windows) must potentially be converted to UTF-8 before use. This may include passwords from local text files, or input from the terminal or command line. Refer to the documentation of UI_OpenSSL(3), for example.

+ +

RETURN VALUES

+ +

PKCS12_parse() returns 1 for success and zero if an error occurred.

+ +

The error can be obtained from ERR_get_error(3)

+ +

BUGS

+ +

Only a single private key and corresponding certificate is returned by this function. More complex PKCS#12 files with multiple private keys will only return the first match.

+ +

Only friendlyName and localKeyID attributes are currently stored in certificates. Other attributes are discarded.

+ +

Attributes currently cannot be stored in the private key EVP_PKEY structure.

+ +

SEE ALSO

+ +

d2i_PKCS12(3), passphrase-encoding(7)

+ +

COPYRIGHT

+ +

Copyright 2002-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/PKCS5_PBKDF2_HMAC.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/PKCS5_PBKDF2_HMAC.html new file mode 100644 index 00000000..fccc784c --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/PKCS5_PBKDF2_HMAC.html @@ -0,0 +1,82 @@ + + + + +PKCS5_PBKDF2_HMAC + + + + + + + + + + +

NAME

+ +

PKCS5_PBKDF2_HMAC, PKCS5_PBKDF2_HMAC_SHA1 - password based derivation routines with salt and iteration count

+ +

SYNOPSIS

+ +
#include <openssl/evp.h>
+
+int PKCS5_PBKDF2_HMAC(const char *pass, int passlen,
+                      const unsigned char *salt, int saltlen, int iter,
+                      const EVP_MD *digest,
+                      int keylen, unsigned char *out);
+
+int PKCS5_PBKDF2_HMAC_SHA1(const char *pass, int passlen,
+                           const unsigned char *salt, int saltlen, int iter,
+                           int keylen, unsigned char *out);
+ +

DESCRIPTION

+ +

PKCS5_PBKDF2_HMAC() derives a key from a password using a salt and iteration count as specified in RFC 2898.

+ +

pass is the password used in the derivation of length passlen. pass is an optional parameter and can be NULL. If passlen is -1, then the function will calculate the length of pass using strlen().

+ +

salt is the salt used in the derivation of length saltlen. If the salt is NULL, then saltlen must be 0. The function will not attempt to calculate the length of the salt because it is not assumed to be NULL terminated.

+ +

iter is the iteration count and its value should be greater than or equal to 1. RFC 2898 suggests an iteration count of at least 1000. Any iter less than 1 is treated as a single iteration.

+ +

digest is the message digest function used in the derivation. Values include any of the EVP_* message digests. PKCS5_PBKDF2_HMAC_SHA1() calls PKCS5_PBKDF2_HMAC() with EVP_sha1().

+ +

The derived key will be written to out. The size of the out buffer is specified via keylen.

+ +

NOTES

+ +

A typical application of this function is to derive keying material for an encryption algorithm from a password in the pass, a salt in salt, and an iteration count.

+ +

Increasing the iter parameter slows down the algorithm which makes it harder for an attacker to perform a brute force attack using a large number of candidate passwords.

+ +

These functions make no assumption regarding the given password. It will simply be treated as a byte sequence.

+ +

RETURN VALUES

+ +

PKCS5_PBKDF2_HMAC() and PBKCS5_PBKDF2_HMAC_SHA1() return 1 on success or 0 on error.

+ +

SEE ALSO

+ +

evp(7), RAND_bytes(3), EVP_BytesToKey(3), passphrase-encoding(7)

+ +

COPYRIGHT

+ +

Copyright 2014-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/PKCS7_decrypt.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/PKCS7_decrypt.html new file mode 100644 index 00000000..e429fe7c --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/PKCS7_decrypt.html @@ -0,0 +1,72 @@ + + + + +PKCS7_decrypt + + + + + + + + + + +

NAME

+ +

PKCS7_decrypt - decrypt content from a PKCS#7 envelopedData structure

+ +

SYNOPSIS

+ +
#include <openssl/pkcs7.h>
+
+int PKCS7_decrypt(PKCS7 *p7, EVP_PKEY *pkey, X509 *cert, BIO *data, int flags);
+ +

DESCRIPTION

+ +

PKCS7_decrypt() extracts and decrypts the content from a PKCS#7 envelopedData structure. pkey is the private key of the recipient, cert is the recipients certificate, data is a BIO to write the content to and flags is an optional set of flags.

+ +

NOTES

+ +

Although the recipients certificate is not needed to decrypt the data it is needed to locate the appropriate (of possible several) recipients in the PKCS#7 structure.

+ +

The following flags can be passed in the flags parameter.

+ +

If the PKCS7_TEXT flag is set MIME headers for type text/plain are deleted from the content. If the content is not of type text/plain then an error is returned.

+ +

RETURN VALUES

+ +

PKCS7_decrypt() returns either 1 for success or 0 for failure. The error can be obtained from ERR_get_error(3)

+ +

BUGS

+ +

PKCS7_decrypt() must be passed the correct recipient key and certificate. It would be better if it could look up the correct key and certificate from a database.

+ +

The lack of single pass processing and need to hold all data in memory as mentioned in PKCS7_sign() also applies to PKCS7_verify().

+ +

SEE ALSO

+ +

ERR_get_error(3), PKCS7_encrypt(3)

+ +

COPYRIGHT

+ +

Copyright 2002-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/PKCS7_encrypt.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/PKCS7_encrypt.html new file mode 100644 index 00000000..c1bacd03 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/PKCS7_encrypt.html @@ -0,0 +1,90 @@ + + + + +PKCS7_encrypt + + + + + + + + + + +

NAME

+ +

PKCS7_encrypt - create a PKCS#7 envelopedData structure

+ +

SYNOPSIS

+ +
#include <openssl/pkcs7.h>
+
+PKCS7 *PKCS7_encrypt(STACK_OF(X509) *certs, BIO *in, const EVP_CIPHER *cipher,
+                     int flags);
+ +

DESCRIPTION

+ +

PKCS7_encrypt() creates and returns a PKCS#7 envelopedData structure. certs is a list of recipient certificates. in is the content to be encrypted. cipher is the symmetric cipher to use. flags is an optional set of flags.

+ +

NOTES

+ +

Only RSA keys are supported in PKCS#7 and envelopedData so the recipient certificates supplied to this function must all contain RSA public keys, though they do not have to be signed using the RSA algorithm.

+ +

EVP_des_ede3_cbc() (triple DES) is the algorithm of choice for S/MIME use because most clients will support it.

+ +

Some old "export grade" clients may only support weak encryption using 40 or 64 bit RC2. These can be used by passing EVP_rc2_40_cbc() and EVP_rc2_64_cbc() respectively.

+ +

The algorithm passed in the cipher parameter must support ASN1 encoding of its parameters.

+ +

Many browsers implement a "sign and encrypt" option which is simply an S/MIME envelopedData containing an S/MIME signed message. This can be readily produced by storing the S/MIME signed message in a memory BIO and passing it to PKCS7_encrypt().

+ +

The following flags can be passed in the flags parameter.

+ +

If the PKCS7_TEXT flag is set MIME headers for type text/plain are prepended to the data.

+ +

Normally the supplied content is translated into MIME canonical format (as required by the S/MIME specifications) if PKCS7_BINARY is set no translation occurs. This option should be used if the supplied data is in binary format otherwise the translation will corrupt it. If PKCS7_BINARY is set then PKCS7_TEXT is ignored.

+ +

If the PKCS7_STREAM flag is set a partial PKCS7 structure is output suitable for streaming I/O: no data is read from the BIO in.

+ +

NOTES

+ +

If the flag PKCS7_STREAM is set the returned PKCS7 structure is not complete and outputting its contents via a function that does not properly finalize the PKCS7 structure will give unpredictable results.

+ +

Several functions including SMIME_write_PKCS7(), i2d_PKCS7_bio_stream(), PEM_write_bio_PKCS7_stream() finalize the structure. Alternatively finalization can be performed by obtaining the streaming ASN1 BIO directly using BIO_new_PKCS7().

+ +

RETURN VALUES

+ +

PKCS7_encrypt() returns either a PKCS7 structure or NULL if an error occurred. The error can be obtained from ERR_get_error(3).

+ +

SEE ALSO

+ +

ERR_get_error(3), PKCS7_decrypt(3)

+ +

HISTORY

+ +

The PKCS7_STREAM flag was added in OpenSSL 1.0.0.

+ +

COPYRIGHT

+ +

Copyright 2002-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/PKCS7_sign.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/PKCS7_sign.html new file mode 100644 index 00000000..7d443339 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/PKCS7_sign.html @@ -0,0 +1,109 @@ + + + + +PKCS7_sign + + + + + + + + + + +

NAME

+ +

PKCS7_sign - create a PKCS#7 signedData structure

+ +

SYNOPSIS

+ +
#include <openssl/pkcs7.h>
+
+PKCS7 *PKCS7_sign(X509 *signcert, EVP_PKEY *pkey, STACK_OF(X509) *certs,
+                  BIO *data, int flags);
+ +

DESCRIPTION

+ +

PKCS7_sign() creates and returns a PKCS#7 signedData structure. signcert is the certificate to sign with, pkey is the corresponding private key. certs is an optional additional set of certificates to include in the PKCS#7 structure (for example any intermediate CAs in the chain).

+ +

The data to be signed is read from BIO data.

+ +

flags is an optional set of flags.

+ +

NOTES

+ +

Any of the following flags (ored together) can be passed in the flags parameter.

+ +

Many S/MIME clients expect the signed content to include valid MIME headers. If the PKCS7_TEXT flag is set MIME headers for type text/plain are prepended to the data.

+ +

If PKCS7_NOCERTS is set the signer's certificate will not be included in the PKCS7 structure, the signer's certificate must still be supplied in the signcert parameter though. This can reduce the size of the signature if the signers certificate can be obtained by other means: for example a previously signed message.

+ +

The data being signed is included in the PKCS7 structure, unless PKCS7_DETACHED is set in which case it is omitted. This is used for PKCS7 detached signatures which are used in S/MIME plaintext signed messages for example.

+ +

Normally the supplied content is translated into MIME canonical format (as required by the S/MIME specifications) if PKCS7_BINARY is set no translation occurs. This option should be used if the supplied data is in binary format otherwise the translation will corrupt it.

+ +

The signedData structure includes several PKCS#7 authenticatedAttributes including the signing time, the PKCS#7 content type and the supported list of ciphers in an SMIMECapabilities attribute. If PKCS7_NOATTR is set then no authenticatedAttributes will be used. If PKCS7_NOSMIMECAP is set then just the SMIMECapabilities are omitted.

+ +

If present the SMIMECapabilities attribute indicates support for the following algorithms: triple DES, 128 bit RC2, 64 bit RC2, DES and 40 bit RC2. If any of these algorithms is disabled then it will not be included.

+ +

If the flags PKCS7_STREAM is set then the returned PKCS7 structure is just initialized ready to perform the signing operation. The signing is however not performed and the data to be signed is not read from the data parameter. Signing is deferred until after the data has been written. In this way data can be signed in a single pass.

+ +

If the PKCS7_PARTIAL flag is set a partial PKCS7 structure is output to which additional signers and capabilities can be added before finalization.

+ +

NOTES

+ +

If the flag PKCS7_STREAM is set the returned PKCS7 structure is not complete and outputting its contents via a function that does not properly finalize the PKCS7 structure will give unpredictable results.

+ +

Several functions including SMIME_write_PKCS7(), i2d_PKCS7_bio_stream(), PEM_write_bio_PKCS7_stream() finalize the structure. Alternatively finalization can be performed by obtaining the streaming ASN1 BIO directly using BIO_new_PKCS7().

+ +

If a signer is specified it will use the default digest for the signing algorithm. This is SHA1 for both RSA and DSA keys.

+ +

The certs, signcert and pkey parameters can all be NULL if the PKCS7_PARTIAL flag is set. One or more signers can be added using the function PKCS7_sign_add_signer(). PKCS7_final() must also be called to finalize the structure if streaming is not enabled. Alternative signing digests can also be specified using this method.

+ +

If signcert and pkey are NULL then a certificates only PKCS#7 structure is output.

+ +

In versions of OpenSSL before 1.0.0 the signcert and pkey parameters must NOT be NULL.

+ +

BUGS

+ +

Some advanced attributes such as counter signatures are not supported.

+ +

RETURN VALUES

+ +

PKCS7_sign() returns either a valid PKCS7 structure or NULL if an error occurred. The error can be obtained from ERR_get_error(3).

+ +

SEE ALSO

+ +

ERR_get_error(3), PKCS7_verify(3)

+ +

HISTORY

+ +

The PKCS7_PARTIAL flag, and the ability for certs, signcert, and pkey parameters to be NULL were added in OpenSSL 1.0.0.

+ +

The PKCS7_STREAM flag was added in OpenSSL 1.0.0.

+ +

COPYRIGHT

+ +

Copyright 2002-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/PKCS7_sign_add_signer.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/PKCS7_sign_add_signer.html new file mode 100644 index 00000000..af1bec17 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/PKCS7_sign_add_signer.html @@ -0,0 +1,87 @@ + + + + +PKCS7_sign_add_signer + + + + + + + + + + +

NAME

+ +

PKCS7_sign_add_signer - add a signer PKCS7 signed data structure

+ +

SYNOPSIS

+ +
#include <openssl/pkcs7.h>
+
+PKCS7_SIGNER_INFO *PKCS7_sign_add_signer(PKCS7 *p7, X509 *signcert,
+                                         EVP_PKEY *pkey, const EVP_MD *md, int flags);
+ +

DESCRIPTION

+ +

PKCS7_sign_add_signer() adds a signer with certificate signcert and private key pkey using message digest md to a PKCS7 signed data structure p7.

+ +

The PKCS7 structure should be obtained from an initial call to PKCS7_sign() with the flag PKCS7_PARTIAL set or in the case or re-signing a valid PKCS7 signed data structure.

+ +

If the md parameter is NULL then the default digest for the public key algorithm will be used.

+ +

Unless the PKCS7_REUSE_DIGEST flag is set the returned PKCS7 structure is not complete and must be finalized either by streaming (if applicable) or a call to PKCS7_final().

+ +

NOTES

+ +

The main purpose of this function is to provide finer control over a PKCS#7 signed data structure where the simpler PKCS7_sign() function defaults are not appropriate. For example if multiple signers or non default digest algorithms are needed.

+ +

Any of the following flags (ored together) can be passed in the flags parameter.

+ +

If PKCS7_REUSE_DIGEST is set then an attempt is made to copy the content digest value from the PKCS7 structure: to add a signer to an existing structure. An error occurs if a matching digest value cannot be found to copy. The returned PKCS7 structure will be valid and finalized when this flag is set.

+ +

If PKCS7_PARTIAL is set in addition to PKCS7_REUSE_DIGEST then the PKCS7_SIGNER_INO structure will not be finalized so additional attributes can be added. In this case an explicit call to PKCS7_SIGNER_INFO_sign() is needed to finalize it.

+ +

If PKCS7_NOCERTS is set the signer's certificate will not be included in the PKCS7 structure, the signer's certificate must still be supplied in the signcert parameter though. This can reduce the size of the signature if the signers certificate can be obtained by other means: for example a previously signed message.

+ +

The signedData structure includes several PKCS#7 authenticatedAttributes including the signing time, the PKCS#7 content type and the supported list of ciphers in an SMIMECapabilities attribute. If PKCS7_NOATTR is set then no authenticatedAttributes will be used. If PKCS7_NOSMIMECAP is set then just the SMIMECapabilities are omitted.

+ +

If present the SMIMECapabilities attribute indicates support for the following algorithms: triple DES, 128 bit RC2, 64 bit RC2, DES and 40 bit RC2. If any of these algorithms is disabled then it will not be included.

+ +

PKCS7_sign_add_signers() returns an internal pointer to the PKCS7_SIGNER_INFO structure just added, this can be used to set additional attributes before it is finalized.

+ +

RETURN VALUES

+ +

PKCS7_sign_add_signers() returns an internal pointer to the PKCS7_SIGNER_INFO structure just added or NULL if an error occurs.

+ +

SEE ALSO

+ +

ERR_get_error(3), PKCS7_sign(3), PKCS7_final(3),

+ +

HISTORY

+ +

The PPKCS7_sign_add_signer() function was added in OpenSSL 1.0.0.

+ +

COPYRIGHT

+ +

Copyright 2007-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/PKCS7_verify.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/PKCS7_verify.html new file mode 100644 index 00000000..140846c3 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/PKCS7_verify.html @@ -0,0 +1,110 @@ + + + + +PKCS7_verify + + + + + + + + + + +

NAME

+ +

PKCS7_verify, PKCS7_get0_signers - verify a PKCS#7 signedData structure

+ +

SYNOPSIS

+ +
#include <openssl/pkcs7.h>
+
+int PKCS7_verify(PKCS7 *p7, STACK_OF(X509) *certs, X509_STORE *store,
+                 BIO *indata, BIO *out, int flags);
+
+STACK_OF(X509) *PKCS7_get0_signers(PKCS7 *p7, STACK_OF(X509) *certs, int flags);
+ +

DESCRIPTION

+ +

PKCS7_verify() verifies a PKCS#7 signedData structure. p7 is the PKCS7 structure to verify. certs is a set of certificates in which to search for the signer's certificate. store is a trusted certificate store (used for chain verification). indata is the signed data if the content is not present in p7 (that is it is detached). The content is written to out if it is not NULL.

+ +

flags is an optional set of flags, which can be used to modify the verify operation.

+ +

PKCS7_get0_signers() retrieves the signer's certificates from p7, it does not check their validity or whether any signatures are valid. The certs and flags parameters have the same meanings as in PKCS7_verify().

+ +

VERIFY PROCESS

+ +

Normally the verify process proceeds as follows.

+ +

Initially some sanity checks are performed on p7. The type of p7 must be signedData. There must be at least one signature on the data and if the content is detached indata cannot be NULL. If the content is not detached and indata is not NULL, then the structure has both embedded and external content. To treat this as an error, use the flag PKCS7_NO_DUAL_CONTENT. The default behavior allows this, for compatibility with older versions of OpenSSL.

+ +

An attempt is made to locate all the signer's certificates, first looking in the certs parameter (if it is not NULL) and then looking in any certificates contained in the p7 structure itself. If any signer's certificates cannot be located the operation fails.

+ +

Each signer's certificate is chain verified using the smimesign purpose and the supplied trusted certificate store. Any internal certificates in the message are used as untrusted CAs. If any chain verify fails an error code is returned.

+ +

Finally the signed content is read (and written to out is it is not NULL) and the signature's checked.

+ +

If all signature's verify correctly then the function is successful.

+ +

Any of the following flags (ored together) can be passed in the flags parameter to change the default verify behaviour. Only the flag PKCS7_NOINTERN is meaningful to PKCS7_get0_signers().

+ +

If PKCS7_NOINTERN is set the certificates in the message itself are not searched when locating the signer's certificate. This means that all the signers certificates must be in the certs parameter.

+ +

If the PKCS7_TEXT flag is set MIME headers for type text/plain are deleted from the content. If the content is not of type text/plain then an error is returned.

+ +

If PKCS7_NOVERIFY is set the signer's certificates are not chain verified.

+ +

If PKCS7_NOCHAIN is set then the certificates contained in the message are not used as untrusted CAs. This means that the whole verify chain (apart from the signer's certificate) must be contained in the trusted store.

+ +

If PKCS7_NOSIGS is set then the signatures on the data are not checked.

+ +

NOTES

+ +

One application of PKCS7_NOINTERN is to only accept messages signed by a small number of certificates. The acceptable certificates would be passed in the certs parameter. In this case if the signer is not one of the certificates supplied in certs then the verify will fail because the signer cannot be found.

+ +

Care should be taken when modifying the default verify behaviour, for example setting PKCS7_NOVERIFY|PKCS7_NOSIGS will totally disable all verification and any signed message will be considered valid. This combination is however useful if one merely wishes to write the content to 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 signer it cannot be trusted without additional evidence (such as a trusted timestamp).

+ +

RETURN VALUES

+ +

PKCS7_verify() returns one for a successful verification and zero if an error occurs.

+ +

PKCS7_get0_signers() returns all signers or NULL if an error occurred.

+ +

The error can be obtained from ERR_get_error(3)

+ +

BUGS

+ +

The trusted certificate store is not searched for the signers certificate, this is primarily due to the inadequacies of the current X509_STORE functionality.

+ +

The lack of single pass processing and need to hold all data in memory as mentioned in PKCS7_sign() also applies to PKCS7_verify().

+ +

SEE ALSO

+ +

ERR_get_error(3), PKCS7_sign(3)

+ +

COPYRIGHT

+ +

Copyright 2002-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RAND_DRBG_generate.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RAND_DRBG_generate.html new file mode 100644 index 00000000..35f151c2 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RAND_DRBG_generate.html @@ -0,0 +1,80 @@ + + + + +RAND_DRBG_generate + + + + + + + + + + +

NAME

+ +

RAND_DRBG_generate, RAND_DRBG_bytes - generate random bytes using the given drbg instance

+ +

SYNOPSIS

+ +
#include <openssl/rand_drbg.h>
+
+int RAND_DRBG_generate(RAND_DRBG *drbg,
+                       unsigned char *out, size_t outlen,
+                       int prediction_resistance,
+                       const unsigned char *adin, size_t adinlen);
+
+int RAND_DRBG_bytes(RAND_DRBG *drbg,
+                    unsigned char *out, size_t outlen);
+ +

DESCRIPTION

+ +

RAND_DRBG_generate() generates outlen random bytes using the given DRBG instance drbg and stores them in the buffer at out.

+ +

Before generating the output, the DRBG instance checks whether the maximum number of generate requests (reseed interval) or the maximum timespan (reseed time interval) since its last seeding have been reached. If this is the case, the DRBG reseeds automatically. Additionally, an immediate reseeding can be requested by setting the prediction_resistance flag to 1. See NOTES section for more details.

+ +

The caller can optionally provide additional data to be used for reseeding by passing a pointer adin to a buffer of length adinlen. This additional data is mixed into the internal state of the random generator but does not contribute to the entropy count. The additional data can be omitted by setting adin to NULL and adinlen to 0;

+ +

RAND_DRBG_bytes() generates outlen random bytes using the given DRBG instance drbg and stores them in the buffer at out. This function is a wrapper around the RAND_DRBG_generate() call, which collects some additional data from low entropy sources (e.g., a high resolution timer) and calls RAND_DRBG_generate(drbg, out, outlen, 0, adin, adinlen).

+ +

RETURN VALUES

+ +

RAND_DRBG_generate() and RAND_DRBG_bytes() return 1 on success, and 0 on failure.

+ +

NOTES

+ +

The reseed interval and reseed time interval of the drbg are set to reasonable default values, which in general do not have to be adjusted. If necessary, they can be changed using RAND_DRBG_set_reseed_interval(3) and RAND_DRBG_set_reseed_time_interval(3), respectively.

+ +

A request for prediction resistance can only be satisfied by pulling fresh entropy from one of the approved entropy sources listed in section 5.5.2 of [NIST SP 800-90C]. Since the default DRBG implementation does not have access to such an approved entropy source, a request for prediction resistance will always fail. In other words, prediction resistance is currently not supported yet by the DRBG.

+ +

SEE ALSO

+ +

RAND_bytes(3), RAND_DRBG_set_reseed_interval(3), RAND_DRBG_set_reseed_time_interval(3), RAND_DRBG(7)

+ +

HISTORY

+ +

The RAND_DRBG functions were added in OpenSSL 1.1.1.

+ +

COPYRIGHT

+ +

Copyright 2017-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RAND_DRBG_get0_master.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RAND_DRBG_get0_master.html new file mode 100644 index 00000000..8e5b68e9 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RAND_DRBG_get0_master.html @@ -0,0 +1,80 @@ + + + + +RAND_DRBG_get0_master + + + + + + + + + + +

NAME

+ +

RAND_DRBG_get0_master, RAND_DRBG_get0_public, RAND_DRBG_get0_private - get access to the global RAND_DRBG instances

+ +

SYNOPSIS

+ +
#include <openssl/rand_drbg.h>
+
+RAND_DRBG *RAND_DRBG_get0_master(void);
+RAND_DRBG *RAND_DRBG_get0_public(void);
+RAND_DRBG *RAND_DRBG_get0_private(void);
+ +

DESCRIPTION

+ +

The default RAND API implementation (RAND_OpenSSL()) utilizes three shared DRBG instances which are accessed via the RAND API:

+ +

The <public> and <private> DRBG are thread-local instances, which are used by RAND_bytes() and RAND_priv_bytes(), respectively. The <master> DRBG is a global instance, which is not intended to be used directly, but is used internally to reseed the other two instances.

+ +

These functions here provide access to the shared DRBG instances.

+ +

RETURN VALUES

+ +

RAND_DRBG_get0_master() returns a pointer to the <master> DRBG instance.

+ +

RAND_DRBG_get0_public() returns a pointer to the <public> DRBG instance.

+ +

RAND_DRBG_get0_private() returns a pointer to the <private> DRBG instance.

+ +

NOTES

+ +

It is not thread-safe to access the <master> DRBG instance. The <public> and <private> DRBG instance can be accessed safely, because they are thread-local. Note however, that changes to these two instances apply only to the current thread.

+ +

For that reason it is recommended not to change the settings of these three instances directly. Instead, an application should change the default settings for new DRBG instances at initialization time, before creating additional threads.

+ +

During initialization, it is possible to change the reseed interval and reseed time interval. It is also possible to exchange the reseeding callbacks entirely.

+ +

SEE ALSO

+ +

RAND_DRBG_set_callbacks(3), RAND_DRBG_set_reseed_defaults(3), RAND_DRBG_set_reseed_interval(3), RAND_DRBG_set_reseed_time_interval(3), RAND_DRBG_set_callbacks(3), RAND_DRBG_generate(3), RAND_DRBG(7)

+ +

HISTORY

+ +

The RAND_DRBG functions were added in OpenSSL 1.1.1.

+ +

COPYRIGHT

+ +

Copyright 2017-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RAND_DRBG_new.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RAND_DRBG_new.html new file mode 100644 index 00000000..950459c3 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RAND_DRBG_new.html @@ -0,0 +1,105 @@ + + + + +RAND_DRBG_new + + + + + + + + + + +

NAME

+ +

RAND_DRBG_new, RAND_DRBG_secure_new, RAND_DRBG_set, RAND_DRBG_set_defaults, RAND_DRBG_instantiate, RAND_DRBG_uninstantiate, RAND_DRBG_free - initialize and cleanup a RAND_DRBG instance

+ +

SYNOPSIS

+ +
#include <openssl/rand_drbg.h>
+
+
+RAND_DRBG *RAND_DRBG_new(int type,
+                         unsigned int flags,
+                         RAND_DRBG *parent);
+
+RAND_DRBG *RAND_DRBG_secure_new(int type,
+                                unsigned int flags,
+                                RAND_DRBG *parent);
+
+int RAND_DRBG_set(RAND_DRBG *drbg,
+                  int type, unsigned int flags);
+
+int RAND_DRBG_set_defaults(int type, unsigned int flags);
+
+int RAND_DRBG_instantiate(RAND_DRBG *drbg,
+                          const unsigned char *pers, size_t perslen);
+
+int RAND_DRBG_uninstantiate(RAND_DRBG *drbg);
+
+void RAND_DRBG_free(RAND_DRBG *drbg);
+ +

DESCRIPTION

+ +

RAND_DRBG_new() and RAND_DRBG_secure_new() create a new DRBG instance of the given type, allocated from the heap resp. the secure heap (using OPENSSL_zalloc() resp. OPENSSL_secure_zalloc()).

+ +

RAND_DRBG_set() initializes the drbg with the given type and flags.

+ +

RAND_DRBG_set_defaults() sets the default type and flags for new DRBG instances.

+ +

Currently, all DRBG types are based on AES-CTR, so type can be one of the following values: NID_aes_128_ctr, NID_aes_192_ctr, NID_aes_256_ctr. Before the DRBG can be used to generate random bits, it is necessary to set its type and to instantiate it.

+ +

The optional 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 ctr_df. For an explanation, see [NIST SP 800-90A Rev. 1].

+ +

If a parent instance is specified then this will be used instead of the default entropy source for reseeding the drbg. It is said that the drbg is chained to its parent. For more information, see the NOTES section.

+ +

RAND_DRBG_instantiate() seeds the drbg instance using random input from trusted entropy sources. Optionally, a personalization string pers of length perslen can be specified. To omit the personalization string, set pers=NULL and perslen=0;

+ +

RAND_DRBG_uninstantiate() clears the internal state of the drbg and puts it back in the uninstantiated state.

+ +

RETURN VALUES

+ +

RAND_DRBG_new() and RAND_DRBG_secure_new() return a pointer to a DRBG instance allocated on the heap, resp. secure heap.

+ +

RAND_DRBG_set(), RAND_DRBG_instantiate(), and RAND_DRBG_uninstantiate() return 1 on success, and 0 on failure.

+ +

RAND_DRBG_free() does not return a value.

+ +

NOTES

+ +

The DRBG design supports chaining, which means that a DRBG instance can use another parent DRBG instance instead of the default entropy source to obtain fresh random input for reseeding, provided that parent DRBG instance was properly instantiated, either from a trusted entropy source, or from yet another parent DRBG instance. For a detailed description of the reseeding process, see RAND_DRBG(7).

+ +

The default DRBG type and flags are applied only during creation of a DRBG instance. To ensure that they are applied to the global and thread-local DRBG instances (<master>, resp. <public> and <private>), it is necessary to call RAND_DRBG_set_defaults() before creating any thread and before calling any cryptographic routines that obtain random data directly or indirectly.

+ +

SEE ALSO

+ +

OPENSSL_zalloc(3), OPENSSL_secure_zalloc(3), RAND_DRBG_generate(3), RAND_DRBG(7)

+ +

HISTORY

+ +

The RAND_DRBG functions were added in OpenSSL 1.1.1.

+ +

COPYRIGHT

+ +

Copyright 2017-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RAND_DRBG_reseed.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RAND_DRBG_reseed.html new file mode 100644 index 00000000..90c1015b --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RAND_DRBG_reseed.html @@ -0,0 +1,91 @@ + + + + +RAND_DRBG_reseed + + + + + + + + + + +

NAME

+ +

RAND_DRBG_reseed, RAND_DRBG_set_reseed_interval, RAND_DRBG_set_reseed_time_interval, RAND_DRBG_set_reseed_defaults - reseed a RAND_DRBG instance

+ +

SYNOPSIS

+ +
#include <openssl/rand_drbg.h>
+
+int RAND_DRBG_reseed(RAND_DRBG *drbg,
+                     const unsigned char *adin, size_t adinlen,
+                     int prediction_resistance);
+
+int RAND_DRBG_set_reseed_interval(RAND_DRBG *drbg,
+                                  unsigned int interval);
+
+int RAND_DRBG_set_reseed_time_interval(RAND_DRBG *drbg,
+                                       time_t interval);
+
+int RAND_DRBG_set_reseed_defaults(
+                                  unsigned int master_reseed_interval,
+                                  unsigned int slave_reseed_interval,
+                                  time_t master_reseed_time_interval,
+                                  time_t slave_reseed_time_interval
+                                  );
+ +

DESCRIPTION

+ +

RAND_DRBG_reseed() reseeds the given drbg, obtaining entropy input from its entropy source and mixing in the specified additional data provided in the buffer adin of length adinlen. The additional data can be omitted by setting adin to NULL and adinlen to 0. An immediate reseeding from a live entropy source can be requested by setting the prediction_resistance flag to 1. This feature is not implemented yet, so reseeding with prediction resistance requested will always fail.

+ +

RAND_DRBG_set_reseed_interval() sets the reseed interval of the drbg, which is the maximum allowed number of generate requests between consecutive reseedings. If interval > 0, then the drbg will reseed automatically whenever the number of generate requests since its last seeding exceeds the given reseed interval. If interval == 0, then this feature is disabled.

+ +

RAND_DRBG_set_reseed_time_interval() sets the reseed time interval of the drbg, which is the maximum allowed number of seconds between consecutive reseedings. If interval > 0, then the drbg will reseed automatically whenever the elapsed time since its last reseeding exceeds the given reseed time interval. If interval == 0, then this feature is disabled.

+ +

RAND_DRBG_set_reseed_defaults() sets the default values for the reseed interval (master_reseed_interval and slave_reseed_interval) and the reseed time interval (master_reseed_time_interval and slave_reseed_tme_interval) of DRBG instances. The default values are set independently for master DRBG instances (which don't have a parent) and slave DRBG instances (which are chained to a parent DRBG).

+ +

RETURN VALUES

+ +

RAND_DRBG_reseed(), RAND_DRBG_set_reseed_interval(), and RAND_DRBG_set_reseed_time_interval(), return 1 on success, 0 on failure.

+ +

NOTES

+ +

The default OpenSSL random generator is already set up for automatic reseeding, so in general it is not necessary to reseed it explicitly, or to modify its reseeding thresholds.

+ +

Normally, the entropy input for seeding a DRBG is either obtained from a trusted os entropy source or from a parent DRBG instance, which was seeded (directly or indirectly) from a trusted os entropy source. In exceptional cases it is possible to replace the reseeding mechanism entirely by providing application defined callbacks using RAND_DRBG_set_callbacks().

+ +

The reseeding default values are applied only during creation of a DRBG instance. To ensure that they are applied to the global and thread-local DRBG instances (<master>, resp. <public> and <private>), it is necessary to call RAND_DRBG_set_reseed_defaults() before creating any thread and before calling any cryptographic routines that obtain random data directly or indirectly.

+ +

SEE ALSO

+ +

RAND_DRBG_generate(3), RAND_DRBG_bytes(3), RAND_DRBG_set_callbacks(3). RAND_DRBG(7)

+ +

HISTORY

+ +

The RAND_DRBG functions were added in OpenSSL 1.1.1.

+ +

COPYRIGHT

+ +

Copyright 2017-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RAND_DRBG_set_callbacks.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RAND_DRBG_set_callbacks.html new file mode 100644 index 00000000..4d162b17 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RAND_DRBG_set_callbacks.html @@ -0,0 +1,120 @@ + + + + +RAND_DRBG_set_callbacks + + + + + + + + + + +

NAME

+ +

RAND_DRBG_set_callbacks, RAND_DRBG_get_entropy_fn, RAND_DRBG_cleanup_entropy_fn, RAND_DRBG_get_nonce_fn, RAND_DRBG_cleanup_nonce_fn - set callbacks for reseeding

+ +

SYNOPSIS

+ +
#include <openssl/rand_drbg.h>
+
+
+int RAND_DRBG_set_callbacks(RAND_DRBG *drbg,
+                            RAND_DRBG_get_entropy_fn get_entropy,
+                            RAND_DRBG_cleanup_entropy_fn cleanup_entropy,
+                            RAND_DRBG_get_nonce_fn get_nonce,
+                            RAND_DRBG_cleanup_nonce_fn cleanup_nonce);
+ +

Callback Functions

+ +
typedef size_t (*RAND_DRBG_get_entropy_fn)(
+                      RAND_DRBG *drbg,
+                      unsigned char **pout,
+                      int entropy,
+                      size_t min_len, size_t max_len,
+                      int prediction_resistance);
+
+typedef void (*RAND_DRBG_cleanup_entropy_fn)(
+                    RAND_DRBG *drbg,
+                    unsigned char *out, size_t outlen);
+
+typedef size_t (*RAND_DRBG_get_nonce_fn)(
+                      RAND_DRBG *drbg,
+                      unsigned char **pout,
+                      int entropy,
+                      size_t min_len, size_t max_len);
+
+typedef void (*RAND_DRBG_cleanup_nonce_fn)(
+                    RAND_DRBG *drbg,
+                    unsigned char *out, size_t outlen);
+ +

DESCRIPTION

+ +

RAND_DRBG_set_callbacks() sets the callbacks for obtaining fresh entropy and the nonce when reseeding the given drbg. The callback functions are implemented and provided by the caller. Their parameter lists need to match the function prototypes above.

+ +

Setting the callbacks is allowed only if the DRBG has not been initialized yet. Otherwise, the operation will fail. To change the settings for one of the three shared DRBGs it is necessary to call RAND_DRBG_uninstantiate() first.

+ +

The get_entropy() callback is called by the drbg when it requests fresh random input. It is expected that the callback allocates and fills a random buffer of size min_len <= size <= max_len (in bytes) which contains at least entropy bits of randomness. The prediction_resistance flag indicates whether the reseeding was triggered by a prediction resistance request.

+ +

The buffer's address is to be returned in *pout and the number of collected randomness bytes as return value.

+ +

If the callback fails to acquire at least entropy bits of randomness, it must indicate an error by returning a buffer length of 0.

+ +

If prediction_resistance was requested and the random source of the DRBG 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 cleanup_entropy() callback is called from the drbg to to clear and free the buffer allocated previously by get_entropy(). The values out and outlen are the random buffer's address and length, as returned by the get_entropy() callback.

+ +

The get_nonce() and cleanup_nonce() callbacks are used to obtain a nonce and free it again. A nonce is only required for instantiation (not for reseeding) and only in the case where the DRBG uses a derivation function. The callbacks are analogous to get_entropy() and cleanup_entropy(), except for the missing prediction_resistance flag.

+ +

If the derivation function is disabled, then no nonce is used for instantiation, and the get_nonce() and cleanup_nonce() callbacks can be omitted by setting them to NULL.

+ +

RETURN VALUES

+ +

RAND_DRBG_set_callbacks() return 1 on success, and 0 on failure

+ +

NOTES

+ +

It is important that cleanup_entropy() and cleanup_nonce() clear the buffer contents safely before freeing it, in order not to leave sensitive information about the DRBG's state in memory.

+ +

A request for prediction resistance can only be satisfied by pulling fresh entropy from one of the approved entropy sources listed in section 5.5.2 of [NIST SP 800-90C]. Since the default implementation of the get_entropy callback does not have access to such an approved entropy source, a request for prediction resistance will always fail. In other words, prediction resistance is currently not supported yet by the DRBG.

+ +

The derivation function is disabled during initialization by calling the RAND_DRBG_set() function with the RAND_DRBG_FLAG_CTR_NO_DF flag. For more information on the derivation function and when it can be omitted, see [NIST SP 800-90A Rev. 1]. Roughly speaking it can be omitted if the random source has "full entropy", i.e., contains 8 bits of entropy per byte.

+ +

Even if a nonce is required, the get_nonce() and cleanup_nonce() callbacks can be omitted by setting them to NULL. In this case the DRBG will automatically request an extra amount of entropy (using the get_entropy() and cleanup_entropy() callbacks) which it will utilize for the nonce, following the recommendations of [NIST SP 800-90A Rev. 1], section 8.6.7.

+ +

SEE ALSO

+ +

RAND_DRBG_new(3), RAND_DRBG_reseed(3), RAND_DRBG(7)

+ +

HISTORY

+ +

The RAND_DRBG functions were added in OpenSSL 1.1.1.

+ +

COPYRIGHT

+ +

Copyright 2017-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RAND_DRBG_set_ex_data.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RAND_DRBG_set_ex_data.html new file mode 100644 index 00000000..04f2c26d --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RAND_DRBG_set_ex_data.html @@ -0,0 +1,74 @@ + + + + +RAND_DRBG_set_ex_data + + + + + + + + + + +

NAME

+ +

RAND_DRBG_set_ex_data, RAND_DRBG_get_ex_data, RAND_DRBG_get_ex_new_index - store and retrieve extra data from the DRBG instance

+ +

SYNOPSIS

+ +
#include <openssl/rand_drbg.h>
+
+int RAND_DRBG_set_ex_data(RAND_DRBG *drbg, int idx, void *data);
+
+void *RAND_DRBG_get_ex_data(const RAND_DRBG *drbg, int idx);
+
+int RAND_DRBG_get_ex_new_index(long argl, void *argp,
+                               CRYPTO_EX_new *new_func,
+                               CRYPTO_EX_dup *dup_func,
+                               CRYPTO_EX_free *free_func);
+ +

DESCRIPTION

+ +

RAND_DRBG_set_ex_data() enables an application to store arbitrary application specific data data in a RAND_DRBG instance drbg. The index idx should be a value previously returned from a call to RAND_DRBG_get_ex_new_index().

+ +

RAND_DRBG_get_ex_data() retrieves application specific data previously stored in an RAND_DRBG instance drbg. The idx value should be the same as that used when originally storing the data.

+ +

For more detailed information see CRYPTO_get_ex_data(3) and CRYPTO_set_ex_data(3) which implement these functions and CRYPTO_get_ex_new_index(3) for generating a unique index.

+ +

RETURN VALUES

+ +

RAND_DRBG_set_ex_data() returns 1 for success or 0 for failure.

+ +

RAND_DRBG_get_ex_data() returns the previously stored value or NULL on failure. NULL may also be a valid value.

+ +

NOTES

+ +

RAND_DRBG_get_ex_new_index(...) is implemented as a macro and equivalent to CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_DRBG,...).

+ +

SEE ALSO

+ +

CRYPTO_get_ex_data(3), CRYPTO_set_ex_data(3), CRYPTO_get_ex_new_index(3), RAND_DRBG(7)

+ +

COPYRIGHT

+ +

Copyright 2017-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RAND_add.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RAND_add.html new file mode 100644 index 00000000..ec1ce24b --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RAND_add.html @@ -0,0 +1,92 @@ + + + + +RAND_add + + + + + + + + + + +

NAME

+ +

RAND_add, RAND_poll, RAND_seed, RAND_status, RAND_event, RAND_screen, RAND_keep_random_devices_open - add randomness to the PRNG or get its status

+ +

SYNOPSIS

+ +
#include <openssl/rand.h>
+
+int RAND_status(void);
+int RAND_poll();
+
+void RAND_add(const void *buf, int num, double randomness);
+void RAND_seed(const void *buf, int num);
+
+void RAND_keep_random_devices_open(int keep);
+ +

Deprecated:

+ +
#if OPENSSL_API_COMPAT < 0x10100000L
+int RAND_event(UINT iMsg, WPARAM wParam, LPARAM lParam);
+void RAND_screen(void);
+#endif
+ +

DESCRIPTION

+ +

These functions can be used to seed the random generator and to check its seeded state. In general, manual (re-)seeding of the default OpenSSL random generator (RAND_OpenSSL(3)) is not necessary (but allowed), since it does (re-)seed itself automatically using trusted system entropy sources. This holds unless the default RAND_METHOD has been replaced or OpenSSL was built with automatic reseeding disabled, see RAND(7) for more details.

+ +

RAND_status() indicates whether or not the random generator has been sufficiently seeded. If not, functions such as RAND_bytes(3) will fail.

+ +

RAND_poll() uses the system's capabilities to seed the random generator using random input obtained from polling various trusted entropy sources. The default choice of the entropy source can be modified at build time, see RAND(7) for more details.

+ +

RAND_add() mixes the num bytes at buf into the internal state of the random generator. This function will not normally be needed, as mentioned above. The randomness argument is an estimate of how much randomness is contained in buf, in bytes, and should be a number between zero and num. Details about sources of randomness and how to estimate their randomness can be found in the literature; for example [NIST SP 800-90B]. The content of buf cannot be recovered from subsequent random generator output. Applications that intend to save and restore random state in an external file should consider using RAND_load_file(3) instead.

+ +

RAND_seed() is equivalent to RAND_add() with randomness set to num.

+ +

RAND_keep_random_devices_open() is used to control file descriptor 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 keep argument is zero, this call disables the retention of file descriptors. Conversely, a non-zero argument enables the retention of file descriptors. This function is usually called during initialization and it takes effect immediately.

+ +

RAND_event() and RAND_screen() are equivalent to RAND_poll() and exist for compatibility reasons only. See HISTORY section below.

+ +

RETURN VALUES

+ +

RAND_status() returns 1 if the random generator has been seeded with enough data, 0 otherwise.

+ +

RAND_poll() returns 1 if it generated seed data, 0 otherwise.

+ +

RAND_event() returns RAND_status().

+ +

The other functions do not return values.

+ +

SEE ALSO

+ +

RAND_bytes(3), RAND_egd(3), RAND_load_file(3), RAND(7)

+ +

HISTORY

+ +

RAND_event() and RAND_screen() were deprecated in OpenSSL 1.1.0 and should not be used.

+ +

COPYRIGHT

+ +

Copyright 2000-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RAND_bytes.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RAND_bytes.html new file mode 100644 index 00000000..537a7015 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RAND_bytes.html @@ -0,0 +1,87 @@ + + + + +RAND_bytes + + + + + + + + + + +

NAME

+ +

RAND_bytes, RAND_priv_bytes, RAND_pseudo_bytes - generate random data

+ +

SYNOPSIS

+ +
#include <openssl/rand.h>
+
+int RAND_bytes(unsigned char *buf, int num);
+int RAND_priv_bytes(unsigned char *buf, int num);
+ +

Deprecated:

+ +
#if OPENSSL_API_COMPAT < 0x10100000L
+int RAND_pseudo_bytes(unsigned char *buf, int num);
+#endif
+ +

DESCRIPTION

+ +

RAND_bytes() generates num random bytes using a cryptographically secure pseudo random generator (CSPRNG) and stores them in buf.

+ +

RAND_priv_bytes() has the same semantics as RAND_bytes(). It is intended to be used for generating values that should remain private. If using the default RAND_METHOD, this function uses a separate "private" PRNG instance so that a compromise of the "public" PRNG instance will not affect the secrecy of these private values, as described in RAND(7) and RAND_DRBG(7).

+ +

NOTES

+ +

By default, the OpenSSL CSPRNG supports a security level of 256 bits, provided it was able to seed itself from a trusted entropy source. On all major platforms supported by OpenSSL (including the Unix-like platforms and Windows), OpenSSL is configured to automatically seed the CSPRNG on first use using the operating systems's random generator.

+ +

If the entropy source fails or is not available, the CSPRNG will enter an error state and refuse to generate random bytes. For that reason, it is important to always check the error return value of RAND_bytes() and RAND_priv_bytes() and not take randomness for granted.

+ +

On other platforms, there might not be a trusted entropy source available or OpenSSL might have been explicitly configured to use different entropy sources. If you are in doubt about the quality of the entropy source, don't hesitate to ask your operating system vendor or post a question on GitHub or the openssl-users mailing list.

+ +

RETURN VALUES

+ +

RAND_bytes() and RAND_priv_bytes() return 1 on success, -1 if not supported by the current RAND method, or 0 on other failure. The error code can be obtained by ERR_get_error(3).

+ +

SEE ALSO

+ +

RAND_add(3), RAND_bytes(3), RAND_priv_bytes(3), ERR_get_error(3), RAND(7), RAND_DRBG(7)

+ +

HISTORY

+ +
    + +
  • RAND_pseudo_bytes() was deprecated in OpenSSL 1.1.0; use RAND_bytes() instead.

    + +
  • +
  • The RAND_priv_bytes() function was added in OpenSSL 1.1.1.

    + +
  • +
+ +

COPYRIGHT

+ +

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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RAND_cleanup.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RAND_cleanup.html new file mode 100644 index 00000000..8528cd60 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RAND_cleanup.html @@ -0,0 +1,63 @@ + + + + +RAND_cleanup + + + + + + + + + + +

NAME

+ +

RAND_cleanup - erase the PRNG state

+ +

SYNOPSIS

+ +
#include <openssl/rand.h>
+
+#if OPENSSL_API_COMPAT < 0x10100000L
+void RAND_cleanup(void)
+#endif
+ +

DESCRIPTION

+ +

Prior to OpenSSL 1.1.0, RAND_cleanup() released all resources used by the PRNG. As of version 1.1.0, it does nothing and should not be called, since no explicit initialisation or de-initialisation is necessary. See OPENSSL_init_crypto(3).

+ +

RETURN VALUES

+ +

RAND_cleanup() returns no value.

+ +

SEE ALSO

+ +

RAND(7)

+ +

HISTORY

+ +

RAND_cleanup() was deprecated in OpenSSL 1.1.0; do not use it. See OPENSSL_init_crypto(3)

+ +

COPYRIGHT

+ +

Copyright 2000-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RAND_egd.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RAND_egd.html new file mode 100644 index 00000000..8a3ef6d3 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RAND_egd.html @@ -0,0 +1,67 @@ + + + + +RAND_egd + + + + + + + + + + +

NAME

+ +

RAND_egd, RAND_egd_bytes, RAND_query_egd_bytes - query entropy gathering daemon

+ +

SYNOPSIS

+ +
#include <openssl/rand.h>
+
+int RAND_egd_bytes(const char *path, int num);
+int RAND_egd(const char *path);
+
+int RAND_query_egd_bytes(const char *path, unsigned char *buf, int num);
+ +

DESCRIPTION

+ +

On older platforms without a good source of randomness such as /dev/urandom, it is possible to query an Entropy Gathering Daemon (EGD) over a local socket to obtain randomness and seed the OpenSSL RNG. The protocol used is defined by the EGDs available at http://egd.sourceforge.net/ or http://prngd.sourceforge.net.

+ +

RAND_egd_bytes() requests num bytes of randomness from an EGD at the specified socket path, and passes the data it receives into RAND_add(). RAND_egd() is equivalent to RAND_egd_bytes() with num set to 255.

+ +

RAND_query_egd_bytes() requests num bytes of randomness from an EGD at the specified socket path, where num must be less than 256. If buf is NULL, it is equivalent to RAND_egd_bytes(). If buf is not NULL, then the data is copied to the buffer and RAND_add() is not called.

+ +

OpenSSL can be configured at build time to try to use the EGD for seeding automatically.

+ +

RETURN VALUES

+ +

RAND_egd() and RAND_egd_bytes() return the number of bytes read from the daemon on success, or -1 if the connection failed or the daemon did not return enough data to fully seed the PRNG.

+ +

RAND_query_egd_bytes() returns the number of bytes read from the daemon on success, or -1 if the connection failed.

+ +

SEE ALSO

+ +

RAND_add(3), RAND_bytes(3), RAND(7)

+ +

COPYRIGHT

+ +

Copyright 2000-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RAND_load_file.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RAND_load_file.html new file mode 100644 index 00000000..8e48e5ff --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RAND_load_file.html @@ -0,0 +1,94 @@ + + + + +RAND_load_file + + + + + + + + + + +

NAME

+ +

RAND_load_file, RAND_write_file, RAND_file_name - PRNG seed file

+ +

SYNOPSIS

+ +
#include <openssl/rand.h>
+
+int RAND_load_file(const char *filename, long max_bytes);
+
+int RAND_write_file(const char *filename);
+
+const char *RAND_file_name(char *buf, size_t num);
+ +

DESCRIPTION

+ +

RAND_load_file() reads a number of bytes from file filename and adds them to the PRNG. If max_bytes is non-negative, up to max_bytes are read; if max_bytes is -1, the complete file is read. Do not load the same file multiple times unless its contents have been updated by RAND_write_file() between reads. Also, note that filename should be adequately protected so that an attacker cannot replace or examine the contents. If filename is not a regular file, then user is considered to be responsible for any side effects, e.g. non-anticipated blocking or capture of controlling terminal.

+ +

RAND_write_file() writes a number of random bytes (currently 128) to file filename which can be used to initialize the PRNG by calling RAND_load_file() in a later session.

+ +

RAND_file_name() generates a default path for the random seed file. buf points to a buffer of size num in which to store the filename.

+ +

On all systems, if the environment variable RANDFILE is set, its value will be used as the seed file name. Otherwise, the file is called .rnd, found in platform dependent locations:

+ +
+ +
On Windows (in order of preference)
+
+ +
%HOME%, %USERPROFILE%, %SYSTEMROOT%, C:\
+ +
+
On VMS
+
+ +
SYS$LOGIN:
+ +
+
On all other systems
+
+ +
$HOME
+ +
+
+ +

If $HOME (on non-Windows and non-VMS system) is not set either, or num is too small for the path name, an error occurs.

+ +

RETURN VALUES

+ +

RAND_load_file() returns the number of bytes read or -1 on error.

+ +

RAND_write_file() returns the number of bytes written, or -1 if the bytes written were generated without appropriate seeding.

+ +

RAND_file_name() returns a pointer to buf on success, and NULL on error.

+ +

SEE ALSO

+ +

RAND_add(3), RAND_bytes(3), RAND(7)

+ +

COPYRIGHT

+ +

Copyright 2000-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RAND_set_rand_method.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RAND_set_rand_method.html new file mode 100644 index 00000000..c1a4a7a1 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RAND_set_rand_method.html @@ -0,0 +1,82 @@ + + + + +RAND_set_rand_method + + + + + + + + + + +

NAME

+ +

RAND_set_rand_method, RAND_get_rand_method, RAND_OpenSSL - select RAND method

+ +

SYNOPSIS

+ +
#include <openssl/rand.h>
+
+RAND_METHOD *RAND_OpenSSL(void);
+
+int RAND_set_rand_method(const RAND_METHOD *meth);
+
+const RAND_METHOD *RAND_get_rand_method(void);
+ +

DESCRIPTION

+ +

A RAND_METHOD specifies the functions that OpenSSL uses for random number generation.

+ +

RAND_OpenSSL() returns the default RAND_METHOD implementation by OpenSSL. This implementation ensures that the PRNG state is unique for each thread.

+ +

If an ENGINE is loaded that provides the RAND API, however, it will be used instead of the method returned by RAND_OpenSSL().

+ +

RAND_set_rand_method() makes meth the method for PRNG use. If an ENGINE was providing the method, it will be released first.

+ +

RAND_get_rand_method() returns a pointer to the current RAND_METHOD.

+ +

THE RAND_METHOD STRUCTURE

+ +
typedef struct rand_meth_st {
+    int (*seed)(const void *buf, int num);
+    int (*bytes)(unsigned char *buf, int num);
+    void (*cleanup)(void);
+    int (*add)(const void *buf, int num, double entropy);
+    int (*pseudorand)(unsigned char *buf, int num);
+    int (*status)(void);
+} RAND_METHOD;
+ +

The fields point to functions that are used by, in order, RAND_seed(), RAND_bytes(), internal RAND cleanup, RAND_add(), RAND_pseudo_rand() and RAND_status(). Each pointer may be NULL if the function is not implemented.

+ +

RETURN VALUES

+ +

RAND_set_rand_method() returns 1 on success and 0 on failure. RAND_get_rand_method() and RAND_OpenSSL() return pointers to the respective methods.

+ +

SEE ALSO

+ +

RAND_bytes(3), ENGINE_by_id(3), RAND(7)

+ +

COPYRIGHT

+ +

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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RC4_set_key.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RC4_set_key.html new file mode 100644 index 00000000..1cd3445a --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RC4_set_key.html @@ -0,0 +1,76 @@ + + + + +RC4_set_key + + + + + + + + + + +

NAME

+ +

RC4_set_key, RC4 - RC4 encryption

+ +

SYNOPSIS

+ +
#include <openssl/rc4.h>
+
+void RC4_set_key(RC4_KEY *key, int len, const unsigned char *data);
+
+void RC4(RC4_KEY *key, unsigned long len, const unsigned char *indata,
+         unsigned char *outdata);
+ +

DESCRIPTION

+ +

This library implements the Alleged RC4 cipher, which is described for example in Applied Cryptography. It is believed to be compatible with RC4[TM], a proprietary cipher of RSA Security Inc.

+ +

RC4 is a stream cipher with variable key length. Typically, 128 bit (16 byte) keys are used for strong encryption, but shorter insecure key sizes have been widely used due to export restrictions.

+ +

RC4 consists of a key setup phase and the actual encryption or decryption phase.

+ +

RC4_set_key() sets up the RC4_KEY key using the len bytes long key at data.

+ +

RC4() encrypts or decrypts the len bytes of data at indata using key and places the result at outdata. Repeated RC4() calls with the same key yield a continuous key stream.

+ +

Since RC4 is a stream cipher (the input is XORed with a pseudo-random key stream to produce the output), decryption uses the same function calls as encryption.

+ +

RETURN VALUES

+ +

RC4_set_key() and RC4() do not return values.

+ +

NOTE

+ +

Applications should use the higher level functions EVP_EncryptInit(3) etc. instead of calling these functions directly.

+ +

It is difficult to securely use stream ciphers. For example, do not perform multiple encryptions using the same key stream.

+ +

SEE ALSO

+ +

EVP_EncryptInit(3)

+ +

COPYRIGHT

+ +

Copyright 2000-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RIPEMD160_Init.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RIPEMD160_Init.html new file mode 100644 index 00000000..4b500ea6 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RIPEMD160_Init.html @@ -0,0 +1,83 @@ + + + + +RIPEMD160_Init + + + + + + + + + + +

NAME

+ +

RIPEMD160, RIPEMD160_Init, RIPEMD160_Update, RIPEMD160_Final - RIPEMD-160 hash function

+ +

SYNOPSIS

+ +
#include <openssl/ripemd.h>
+
+unsigned char *RIPEMD160(const unsigned char *d, unsigned long n,
+                         unsigned char *md);
+
+int RIPEMD160_Init(RIPEMD160_CTX *c);
+int RIPEMD160_Update(RIPEMD160_CTX *c, const void *data, unsigned long len);
+int RIPEMD160_Final(unsigned char *md, RIPEMD160_CTX *c);
+ +

DESCRIPTION

+ +

RIPEMD-160 is a cryptographic hash function with a 160 bit output.

+ +

RIPEMD160() computes the RIPEMD-160 message digest of the n bytes at d and places it in md (which must have space for RIPEMD160_DIGEST_LENGTH == 20 bytes of output). If md is NULL, the digest is placed in a static array.

+ +

The following functions may be used if the message is not completely stored in memory:

+ +

RIPEMD160_Init() initializes a RIPEMD160_CTX structure.

+ +

RIPEMD160_Update() can be called repeatedly with chunks of the message to be hashed (len bytes at data).

+ +

RIPEMD160_Final() places the message digest in md, which must have space for RIPEMD160_DIGEST_LENGTH == 20 bytes of output, and erases the RIPEMD160_CTX.

+ +

RETURN VALUES

+ +

RIPEMD160() returns a pointer to the hash value.

+ +

RIPEMD160_Init(), RIPEMD160_Update() and RIPEMD160_Final() return 1 for success, 0 otherwise.

+ +

NOTE

+ +

Applications should use the higher level functions EVP_DigestInit(3) etc. instead of calling these functions directly.

+ +

CONFORMING TO

+ +

ISO/IEC 10118-3:2016 Dedicated Hash-Function 1 (RIPEMD-160).

+ +

SEE ALSO

+ +

EVP_DigestInit(3)

+ +

COPYRIGHT

+ +

Copyright 2000-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RSA_blinding_on.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RSA_blinding_on.html new file mode 100644 index 00000000..31616b51 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RSA_blinding_on.html @@ -0,0 +1,59 @@ + + + + +RSA_blinding_on + + + + + + + + + + +

NAME

+ +

RSA_blinding_on, RSA_blinding_off - protect the RSA operation from timing attacks

+ +

SYNOPSIS

+ +
#include <openssl/rsa.h>
+
+int RSA_blinding_on(RSA *rsa, BN_CTX *ctx);
+
+void RSA_blinding_off(RSA *rsa);
+ +

DESCRIPTION

+ +

RSA is vulnerable to timing attacks. In a setup where attackers can 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 rsa and generates a random blinding factor. ctx is NULL or a pre-allocated and initialized BN_CTX.

+ +

RSA_blinding_off() turns blinding off and frees the memory used for the blinding factor.

+ +

RETURN VALUES

+ +

RSA_blinding_on() returns 1 on success, and 0 if an error occurred.

+ +

RSA_blinding_off() returns no value.

+ +

COPYRIGHT

+ +

Copyright 2000-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RSA_check_key.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RSA_check_key.html new file mode 100644 index 00000000..44b10932 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RSA_check_key.html @@ -0,0 +1,81 @@ + + + + +RSA_check_key + + + + + + + + + + +

NAME

+ +

RSA_check_key_ex, RSA_check_key - validate private RSA keys

+ +

SYNOPSIS

+ +
#include <openssl/rsa.h>
+
+int RSA_check_key_ex(RSA *rsa, BN_GENCB *cb);
+
+int RSA_check_key(RSA *rsa);
+ +

DESCRIPTION

+ +

RSA_check_key_ex() function validates RSA keys. It checks that p and q are in fact prime, and that n = p*q.

+ +

It does not work on RSA public keys that have only the modulus and public exponent elements populated. It also checks that d*e = 1 mod (p-1*q-1), and that dmp1, dmq1 and iqmp are set correctly or are NULL. It performs integrity checks on all the RSA key material, so the RSA key structure must contain all the private key data too. Therefore, it cannot be used with any arbitrary RSA key object, even if it is otherwise fit for regular RSA operation.

+ +

The cb parameter is a callback that will be invoked in the same manner as BN_is_prime_ex(3).

+ +

RSA_check_key() is equivalent to RSA_check_key_ex() with a NULL cb.

+ +

RETURN VALUES

+ +

RSA_check_key_ex() and RSA_check_key() return 1 if rsa is a valid RSA key, and 0 otherwise. They return -1 if an error occurs while checking the key.

+ +

If the key is invalid or an error occurred, the reason code can be obtained using ERR_get_error(3).

+ +

NOTES

+ +

Unlike most other RSA functions, this function does not work transparently with any underlying ENGINE implementation because it uses the key data in the RSA structure directly. An ENGINE implementation can override the way key data is stored and handled, and can even provide support for HSM keys - in which case the RSA structure may contain no key data at all! If the ENGINE in question is only being used for acceleration or analysis purposes, then in all likelihood the RSA key data is complete and untouched, but this can't be assumed in the general case.

+ +

BUGS

+ +

A method of verifying the RSA key using opaque RSA API functions might need to be considered. Right now RSA_check_key() simply uses the RSA structure elements directly, bypassing the RSA_METHOD table altogether (and completely violating encapsulation and object-orientation in the process). The best fix will probably be to introduce a "check_key()" handler to the RSA_METHOD function table so that alternative implementations can also provide their own verifiers.

+ +

SEE ALSO

+ +

BN_is_prime_ex(3), ERR_get_error(3)

+ +

HISTORY

+ +

RSA_check_key_ex() appeared after OpenSSL 1.0.2.

+ +

COPYRIGHT

+ +

Copyright 2000-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RSA_generate_key.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RSA_generate_key.html new file mode 100644 index 00000000..86542050 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RSA_generate_key.html @@ -0,0 +1,105 @@ + + + + +RSA_generate_key + + + + + + + + + + +

NAME

+ +

RSA_generate_key_ex, RSA_generate_key, RSA_generate_multi_prime_key - generate RSA key pair

+ +

SYNOPSIS

+ +
#include <openssl/rsa.h>
+
+int RSA_generate_key_ex(RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb);
+int RSA_generate_multi_prime_key(RSA *rsa, int bits, int primes, BIGNUM *e, BN_GENCB *cb);
+ +

Deprecated:

+ +
#if OPENSSL_API_COMPAT < 0x00908000L
+RSA *RSA_generate_key(int bits, unsigned long e,
+                      void (*callback)(int, int, void *), void *cb_arg);
+#endif
+ +

DESCRIPTION

+ +

RSA_generate_key_ex() generates a 2-prime RSA key pair and stores it in the RSA structure provided in rsa. The pseudo-random number generator must be seeded prior to calling RSA_generate_key_ex().

+ +

RSA_generate_multi_prime_key() generates a multi-prime RSA key pair and stores it in the RSA structure provided in rsa. The number of primes is given by the primes parameter. The random number generator must be seeded when calling RSA_generate_multi_prime_key(). If the automatic seeding or reseeding of the OpenSSL CSPRNG fails due to external circumstances (see RAND(7)), the operation will fail.

+ +

The modulus size will be of length bits, the number of primes to form the modulus will be primes, and the public exponent will be e. Key sizes with num < 1024 should be considered insecure. The exponent is an odd number, typically 3, 17 or 65537.

+ +

In order to maintain adequate security level, the maximum number of permitted primes depends on modulus bit length:

+ +
<1024 | >=1024 | >=4096 | >=8192
+------+--------+--------+-------
+  2   |   3    |   4    |   5
+ +

A callback function may be used to provide feedback about the progress of the key generation. If cb is not NULL, it will be called as follows using the BN_GENCB_call() function described on the BN_generate_prime(3) page.

+ +

RSA_generate_key() is similar to RSA_generate_key_ex() but expects an old-style callback function; see BN_generate_prime(3) for information on the old-style callback.

+ +
    + +
  • While a random prime number is generated, it is called as described in BN_generate_prime(3).

    + +
  • +
  • When the n-th randomly generated prime is rejected as not suitable for the key, BN_GENCB_call(cb, 2, n) is called.

    + +
  • +
  • When a random p has been found with p-1 relatively prime to e, it is called as BN_GENCB_call(cb, 3, 0).

    + +
  • +
+ +

The process is then repeated for prime q and other primes (if any) with BN_GENCB_call(cb, 3, i) where i indicates the i-th prime.

+ +

RETURN VALUES

+ +

RSA_generate_multi_prime_key() returns 1 on success or 0 on error. RSA_generate_key_ex() returns 1 on success or 0 on error. The error codes can be obtained by ERR_get_error(3).

+ +

RSA_generate_key() returns a pointer to the RSA structure or NULL if the key generation fails.

+ +

BUGS

+ +

BN_GENCB_call(cb, 2, x) is used with two different meanings.

+ +

SEE ALSO

+ +

ERR_get_error(3), RAND_bytes(3), BN_generate_prime(3), RAND(7)

+ +

HISTORY

+ +

RSA_generate_key() was deprecated in OpenSSL 0.9.8; use RSA_generate_key_ex() instead.

+ +

COPYRIGHT

+ +

Copyright 2000-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RSA_get0_key.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RSA_get0_key.html new file mode 100644 index 00000000..a019eb14 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RSA_get0_key.html @@ -0,0 +1,136 @@ + + + + +RSA_get0_key + + + + + + + + + + +

NAME

+ +

RSA_set0_key, RSA_set0_factors, RSA_set0_crt_params, RSA_get0_key, RSA_get0_factors, RSA_get0_crt_params, RSA_get0_n, RSA_get0_e, RSA_get0_d, RSA_get0_p, RSA_get0_q, RSA_get0_dmp1, RSA_get0_dmq1, RSA_get0_iqmp, RSA_get0_pss_params, RSA_clear_flags, RSA_test_flags, RSA_set_flags, RSA_get0_engine, RSA_get_multi_prime_extra_count, RSA_get0_multi_prime_factors, RSA_get0_multi_prime_crt_params, RSA_set0_multi_prime_params, RSA_get_version - Routines for getting and setting data in an RSA object

+ +

SYNOPSIS

+ +
#include <openssl/rsa.h>
+
+int RSA_set0_key(RSA *r, BIGNUM *n, BIGNUM *e, BIGNUM *d);
+int RSA_set0_factors(RSA *r, BIGNUM *p, BIGNUM *q);
+int RSA_set0_crt_params(RSA *r, BIGNUM *dmp1, BIGNUM *dmq1, BIGNUM *iqmp);
+void RSA_get0_key(const RSA *r,
+                  const BIGNUM **n, const BIGNUM **e, const BIGNUM **d);
+void RSA_get0_factors(const RSA *r, const BIGNUM **p, const BIGNUM **q);
+void RSA_get0_crt_params(const RSA *r,
+                         const BIGNUM **dmp1, const BIGNUM **dmq1,
+                         const BIGNUM **iqmp);
+const BIGNUM *RSA_get0_n(const RSA *d);
+const BIGNUM *RSA_get0_e(const RSA *d);
+const BIGNUM *RSA_get0_d(const RSA *d);
+const BIGNUM *RSA_get0_p(const RSA *d);
+const BIGNUM *RSA_get0_q(const RSA *d);
+const BIGNUM *RSA_get0_dmp1(const RSA *r);
+const BIGNUM *RSA_get0_dmq1(const RSA *r);
+const BIGNUM *RSA_get0_iqmp(const RSA *r);
+const RSA_PSS_PARAMS *RSA_get0_pss_params(const RSA *r);
+void RSA_clear_flags(RSA *r, int flags);
+int RSA_test_flags(const RSA *r, int flags);
+void RSA_set_flags(RSA *r, int flags);
+ENGINE *RSA_get0_engine(RSA *r);
+int RSA_get_multi_prime_extra_count(const RSA *r);
+int RSA_get0_multi_prime_factors(const RSA *r, const BIGNUM *primes[]);
+int RSA_get0_multi_prime_crt_params(const RSA *r, const BIGNUM *exps[],
+                                    const BIGNUM *coeffs[]);
+int RSA_set0_multi_prime_params(RSA *r, BIGNUM *primes[], BIGNUM *exps[],
+                               BIGNUM *coeffs[], int pnum);
+int RSA_get_version(RSA *r);
+ +

DESCRIPTION

+ +

An RSA object contains the components for the public and private key, n, e, d, p, q, dmp1, dmq1 and iqmp. n is the modulus common to both public and private key, e is the public exponent and d is the private exponent. p, q, dmp1, dmq1 and iqmp are the factors for the second representation of a private key (see PKCS#1 section 3 Key Types), where p and q are the first and second factor of n and dmp1, dmq1 and iqmp are the exponents and coefficient for CRT calculations.

+ +

For multi-prime RSA (defined in RFC 8017), there are also one or more 'triplet' in an RSA object. A triplet contains three members, r, d and t. r is the additional prime besides p and q. d and t are the exponent and coefficient for CRT calculations.

+ +

The n, e and d parameters can be obtained by calling RSA_get0_key(). If they have not been set yet, then *n, *e and *d will be set to NULL. Otherwise, they are set to pointers to their respective values. These point directly to the internal representations of the values and therefore should not be freed by the caller.

+ +

The n, e and d parameter values can be set by calling RSA_set0_key() and passing the new values for n, e and d as parameters to the function. The values n and e must be non-NULL the first time this function is called on a given RSA object. The value d may be NULL. On subsequent calls any of these values may be NULL which means the corresponding RSA field is left untouched. Calling this function transfers the memory management of the values to the RSA object, and therefore the values that have been passed in should not be freed by the caller after this function has been called.

+ +

In a similar fashion, the p and q parameters can be obtained and set with RSA_get0_factors() and RSA_set0_factors(), and the dmp1, dmq1 and iqmp parameters can be obtained and set with RSA_get0_crt_params() and RSA_set0_crt_params().

+ +

For RSA_get0_key(), RSA_get0_factors(), and RSA_get0_crt_params(), NULL value BIGNUM ** output parameters are permitted. The functions ignore NULL parameters but return values for other, non-NULL, parameters.

+ +

For multi-prime RSA, RSA_get0_multi_prime_factors() and RSA_get0_multi_prime_params() can be used to obtain other primes and related CRT parameters. The return values are stored in an array of BIGNUM *. RSA_set0_multi_prime_params() sets a collect of multi-prime 'triplet' members (prime, exponent and coefficient) into an RSA object.

+ +

Any of the values n, e, d, p, q, dmp1, dmq1, and iqmp can also be retrieved separately by the corresponding function RSA_get0_n(), RSA_get0_e(), RSA_get0_d(), RSA_get0_p(), RSA_get0_q(), RSA_get0_dmp1(), RSA_get0_dmq1(), and RSA_get0_iqmp(), respectively.

+ +

RSA_get0_pss_params() is used to retrieve the RSA-PSS parameters.

+ +

RSA_set_flags() sets the flags in the flags parameter on the RSA object. Multiple flags can be passed in one go (bitwise ORed together). Any flags that are already set are left set. RSA_test_flags() tests to see whether the flags passed in the flags parameter are currently set in the RSA object. Multiple flags can be tested in one go. All flags that are currently set are returned, or zero if none of the flags are set. RSA_clear_flags() clears the specified flags within the RSA object.

+ +

RSA_get0_engine() returns a handle to the ENGINE that has been set for this RSA object, or NULL if no such ENGINE has been set.

+ +

RSA_get_version() returns the version of an RSA object r.

+ +

NOTES

+ +

Values retrieved with RSA_get0_key() are owned by the RSA object used in the call and may therefore not be passed to RSA_set0_key(). If needed, duplicate the received value using BN_dup() and pass the duplicate. The same applies to RSA_get0_factors() and RSA_set0_factors() as well as RSA_get0_crt_params() and RSA_set0_crt_params().

+ +

The caller should obtain the size by calling RSA_get_multi_prime_extra_count() in advance and allocate sufficient buffer to store the return values before calling RSA_get0_multi_prime_factors() and RSA_get0_multi_prime_params().

+ +

RSA_set0_multi_prime_params() always clears the original multi-prime triplets in RSA object r and assign the new set of triplets into it.

+ +

RETURN VALUES

+ +

RSA_set0_key(), RSA_set0_factors(), RSA_set0_crt_params() and RSA_set0_multi_prime_params() return 1 on success or 0 on failure.

+ +

RSA_get0_n(), RSA_get0_e(), RSA_get0_d(), RSA_get0_p(), RSA_get0_q(), RSA_get0_dmp1(), RSA_get0_dmq1(), and RSA_get0_iqmp() return the respective value.

+ +

RSA_get0_multi_prime_factors() and RSA_get0_multi_prime_crt_params() return 1 on success or 0 on failure.

+ +

RSA_get_multi_prime_extra_count() returns two less than the number of primes in use, which is 0 for traditional RSA and the number of extra primes for multi-prime RSA.

+ +

RSA_get_version() returns RSA_ASN1_VERSION_MULTI for multi-prime RSA and RSA_ASN1_VERSION_DEFAULT for normal two-prime RSA, as defined in RFC 8017.

+ +

RSA_test_flags() returns the current state of the flags in the RSA object.

+ +

RSA_get0_engine() returns the ENGINE set for the RSA object or NULL if no ENGINE has been set.

+ +

SEE ALSO

+ +

RSA_new(3), RSA_size(3)

+ +

HISTORY

+ +

The RSA_get0_pss_params() function was added in OpenSSL 1.1.1e.

+ +

The RSA_get_multi_prime_extra_count(), RSA_get0_multi_prime_factors(), RSA_get0_multi_prime_crt_params(), RSA_set0_multi_prime_params(), and RSA_get_version() functions were added in OpenSSL 1.1.1.

+ +

Other functions described here were added in OpenSSL 1.1.0.

+ +

COPYRIGHT

+ +

Copyright 2016-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RSA_meth_new.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RSA_meth_new.html new file mode 100644 index 00000000..4c144099 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RSA_meth_new.html @@ -0,0 +1,202 @@ + + + + +RSA_meth_new + + + + + + + + + + +

NAME

+ +

RSA_meth_get0_app_data, RSA_meth_set0_app_data, RSA_meth_new, RSA_meth_free, RSA_meth_dup, RSA_meth_get0_name, RSA_meth_set1_name, RSA_meth_get_flags, RSA_meth_set_flags, RSA_meth_get_pub_enc, RSA_meth_set_pub_enc, RSA_meth_get_pub_dec, RSA_meth_set_pub_dec, RSA_meth_get_priv_enc, RSA_meth_set_priv_enc, RSA_meth_get_priv_dec, RSA_meth_set_priv_dec, RSA_meth_get_mod_exp, RSA_meth_set_mod_exp, RSA_meth_get_bn_mod_exp, RSA_meth_set_bn_mod_exp, RSA_meth_get_init, RSA_meth_set_init, RSA_meth_get_finish, RSA_meth_set_finish, RSA_meth_get_sign, RSA_meth_set_sign, RSA_meth_get_verify, RSA_meth_set_verify, RSA_meth_get_keygen, RSA_meth_set_keygen, RSA_meth_get_multi_prime_keygen, RSA_meth_set_multi_prime_keygen - Routines to build up RSA methods

+ +

SYNOPSIS

+ +
#include <openssl/rsa.h>
+
+RSA_METHOD *RSA_meth_new(const char *name, int flags);
+void RSA_meth_free(RSA_METHOD *meth);
+
+RSA_METHOD *RSA_meth_dup(const RSA_METHOD *meth);
+
+const char *RSA_meth_get0_name(const RSA_METHOD *meth);
+int RSA_meth_set1_name(RSA_METHOD *meth, const char *name);
+
+int RSA_meth_get_flags(const RSA_METHOD *meth);
+int RSA_meth_set_flags(RSA_METHOD *meth, int flags);
+
+void *RSA_meth_get0_app_data(const RSA_METHOD *meth);
+int RSA_meth_set0_app_data(RSA_METHOD *meth, void *app_data);
+
+int (*RSA_meth_get_pub_enc(const RSA_METHOD *meth))(int flen, const unsigned char *from,
+                                                    unsigned char *to, RSA *rsa, int padding);
+int RSA_meth_set_pub_enc(RSA_METHOD *rsa,
+                         int (*pub_enc)(int flen, const unsigned char *from,
+                                        unsigned char *to, RSA *rsa,
+                                        int padding));
+
+int (*RSA_meth_get_pub_dec(const RSA_METHOD *meth))
+    (int flen, const unsigned char *from,
+     unsigned char *to, RSA *rsa, int padding);
+int RSA_meth_set_pub_dec(RSA_METHOD *rsa,
+                         int (*pub_dec)(int flen, const unsigned char *from,
+                                        unsigned char *to, RSA *rsa,
+                                        int padding));
+
+int (*RSA_meth_get_priv_enc(const RSA_METHOD *meth))(int flen, const unsigned char *from,
+                                                     unsigned char *to, RSA *rsa,
+                                                     int padding);
+int RSA_meth_set_priv_enc(RSA_METHOD *rsa,
+                          int (*priv_enc)(int flen, const unsigned char *from,
+                                          unsigned char *to, RSA *rsa, int padding));
+
+int (*RSA_meth_get_priv_dec(const RSA_METHOD *meth))(int flen, const unsigned char *from,
+                                                     unsigned char *to, RSA *rsa,
+                                                     int padding);
+int RSA_meth_set_priv_dec(RSA_METHOD *rsa,
+                          int (*priv_dec)(int flen, const unsigned char *from,
+                                          unsigned char *to, RSA *rsa, int padding));
+
+/* Can be null */
+int (*RSA_meth_get_mod_exp(const RSA_METHOD *meth))(BIGNUM *r0, const BIGNUM *i,
+                                                    RSA *rsa, BN_CTX *ctx);
+int RSA_meth_set_mod_exp(RSA_METHOD *rsa,
+                         int (*mod_exp)(BIGNUM *r0, const BIGNUM *i, RSA *rsa,
+                                        BN_CTX *ctx));
+
+/* Can be null */
+int (*RSA_meth_get_bn_mod_exp(const RSA_METHOD *meth))(BIGNUM *r, const BIGNUM *a,
+                                                       const BIGNUM *p, const BIGNUM *m,
+                                                       BN_CTX *ctx, BN_MONT_CTX *m_ctx);
+int RSA_meth_set_bn_mod_exp(RSA_METHOD *rsa,
+                            int (*bn_mod_exp)(BIGNUM *r, const BIGNUM *a,
+                                              const BIGNUM *p, const BIGNUM *m,
+                                              BN_CTX *ctx, BN_MONT_CTX *m_ctx));
+
+/* called at new */
+int (*RSA_meth_get_init(const RSA_METHOD *meth) (RSA *rsa);
+int RSA_meth_set_init(RSA_METHOD *rsa, int (*init (RSA *rsa));
+
+/* called at free */
+int (*RSA_meth_get_finish(const RSA_METHOD *meth))(RSA *rsa);
+int RSA_meth_set_finish(RSA_METHOD *rsa, int (*finish)(RSA *rsa));
+
+int (*RSA_meth_get_sign(const RSA_METHOD *meth))(int type, const unsigned char *m,
+                                                 unsigned int m_length,
+                                                 unsigned char *sigret,
+                                                 unsigned int *siglen, const RSA *rsa);
+int RSA_meth_set_sign(RSA_METHOD *rsa,
+                      int (*sign)(int type, const unsigned char *m,
+                                  unsigned int m_length, unsigned char *sigret,
+                                  unsigned int *siglen, const RSA *rsa));
+
+int (*RSA_meth_get_verify(const RSA_METHOD *meth))(int dtype, const unsigned char *m,
+                                                   unsigned int m_length,
+                                                   const unsigned char *sigbuf,
+                                                   unsigned int siglen, const RSA *rsa);
+int RSA_meth_set_verify(RSA_METHOD *rsa,
+                        int (*verify)(int dtype, const unsigned char *m,
+                                      unsigned int m_length,
+                                      const unsigned char *sigbuf,
+                                      unsigned int siglen, const RSA *rsa));
+
+int (*RSA_meth_get_keygen(const RSA_METHOD *meth))(RSA *rsa, int bits, BIGNUM *e,
+                                                   BN_GENCB *cb);
+int RSA_meth_set_keygen(RSA_METHOD *rsa,
+                        int (*keygen)(RSA *rsa, int bits, BIGNUM *e,
+                                      BN_GENCB *cb));
+
+int (*RSA_meth_get_multi_prime_keygen(const RSA_METHOD *meth))(RSA *rsa, int bits,
+                                                               int primes, BIGNUM *e,
+                                                               BN_GENCB *cb);
+
+int RSA_meth_set_multi_prime_keygen(RSA_METHOD *meth,
+                                    int (*keygen) (RSA *rsa, int bits,
+                                                   int primes, BIGNUM *e,
+                                                   BN_GENCB *cb));
+ +

DESCRIPTION

+ +

The RSA_METHOD type is a structure used for the provision of custom RSA implementations. It provides a set of functions used by OpenSSL for the implementation of the various RSA capabilities. See the rsa page for more information.

+ +

RSA_meth_new() creates a new RSA_METHOD structure. It should be given a unique name and a set of flags. The name should be a NULL terminated string, which will be duplicated and stored in the RSA_METHOD object. It is the callers responsibility to free the original string. The flags will be used during the construction of a new RSA object based on this RSA_METHOD. Any new RSA object will have those flags set by default.

+ +

RSA_meth_dup() creates a duplicate copy of the RSA_METHOD object passed as a parameter. This might be useful for creating a new RSA_METHOD based on an existing one, but with some differences.

+ +

RSA_meth_free() destroys an RSA_METHOD structure and frees up any memory associated with it.

+ +

RSA_meth_get0_name() will return a pointer to the name of this RSA_METHOD. This is a pointer to the internal name string and so should not be freed by the caller. RSA_meth_set1_name() sets the name of the RSA_METHOD to name. The string is duplicated and the copy is stored in the RSA_METHOD structure, so the caller remains responsible for freeing the memory associated with the name.

+ +

RSA_meth_get_flags() returns the current value of the flags associated with this RSA_METHOD. RSA_meth_set_flags() provides the ability to set these flags.

+ +

The functions RSA_meth_get0_app_data() and RSA_meth_set0_app_data() provide the ability to associate implementation specific data with the RSA_METHOD. It is the application's responsibility to free this data before the RSA_METHOD is freed via a call to RSA_meth_free().

+ +

RSA_meth_get_sign() and RSA_meth_set_sign() get and set the function used for creating an RSA signature respectively. This function will be called in response to the application calling RSA_sign(). The parameters for the function have the same meaning as for RSA_sign().

+ +

RSA_meth_get_verify() and RSA_meth_set_verify() get and set the function used for verifying an RSA signature respectively. This function will be called in response to the application calling RSA_verify(). The parameters for the function have the same meaning as for RSA_verify().

+ +

RSA_meth_get_mod_exp() and RSA_meth_set_mod_exp() get and set the function used for CRT computations.

+ +

RSA_meth_get_bn_mod_exp() and RSA_meth_set_bn_mod_exp() get and set the function used for CRT computations, specifically the following value:

+ +
r = a ^ p mod m
+ +

Both the mod_exp() and bn_mod_exp() functions are called by the default OpenSSL method during encryption, decryption, signing and verification.

+ +

RSA_meth_get_init() and RSA_meth_set_init() get and set the function used for creating a new RSA instance respectively. This function will be called in response to the application calling RSA_new() (if the current default RSA_METHOD is this one) or RSA_new_method(). The RSA_new() and RSA_new_method() functions will allocate the memory for the new RSA object, and a pointer to this newly allocated structure will be passed as a parameter to the function. This function may be NULL.

+ +

RSA_meth_get_finish() and RSA_meth_set_finish() get and set the function used for destroying an instance of an RSA object respectively. This function will be called in response to the application calling RSA_free(). A pointer to the RSA to be destroyed is passed as a parameter. The destroy function should be used for RSA implementation specific clean up. The memory for the RSA itself should not be freed by this function. This function may be NULL.

+ +

RSA_meth_get_keygen() and RSA_meth_set_keygen() get and set the function used for generating a new RSA key pair respectively. This function will be called in response to the application calling RSA_generate_key_ex(). The parameter for the function has the same meaning as for RSA_generate_key_ex().

+ +

RSA_meth_get_multi_prime_keygen() and RSA_meth_set_multi_prime_keygen() get and set the function used for generating a new multi-prime RSA key pair respectively. This function will be called in response to the application calling RSA_generate_multi_prime_key(). The parameter for the function has the same meaning as for RSA_generate_multi_prime_key().

+ +

RSA_meth_get_pub_enc(), RSA_meth_set_pub_enc(), RSA_meth_get_pub_dec(), RSA_meth_set_pub_dec(), RSA_meth_get_priv_enc(), RSA_meth_set_priv_enc(), RSA_meth_get_priv_dec(), RSA_meth_set_priv_dec() get and set the functions used for public and private key encryption and decryption. These functions will be called in response to the application calling RSA_public_encrypt(), RSA_private_decrypt(), RSA_private_encrypt() and RSA_public_decrypt() and take the same parameters as those.

+ +

RETURN VALUES

+ +

RSA_meth_new() and RSA_meth_dup() return the newly allocated RSA_METHOD object or NULL on failure.

+ +

RSA_meth_get0_name() and RSA_meth_get_flags() return the name and flags associated with the RSA_METHOD respectively.

+ +

All other RSA_meth_get_*() functions return the appropriate function pointer that has been set in the RSA_METHOD, or NULL if no such pointer has yet been set.

+ +

RSA_meth_set1_name and all RSA_meth_set_*() functions return 1 on success or 0 on failure.

+ +

SEE ALSO

+ +

RSA_new(3), RSA_generate_key_ex(3), RSA_sign(3), RSA_set_method(3), RSA_size(3), RSA_get0_key(3), RSA_generate_multi_prime_key(3)

+ +

HISTORY

+ +

RSA_meth_get_multi_prime_keygen() and RSA_meth_set_multi_prime_keygen() were added in OpenSSL 1.1.1.

+ +

Other functions described here were added in OpenSSL 1.1.0.

+ +

COPYRIGHT

+ +

Copyright 2016-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RSA_new.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RSA_new.html new file mode 100644 index 00000000..82eefc8a --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RSA_new.html @@ -0,0 +1,62 @@ + + + + +RSA_new + + + + + + + + + + +

NAME

+ +

RSA_new, RSA_free - allocate and free RSA objects

+ +

SYNOPSIS

+ +
#include <openssl/rsa.h>
+
+RSA *RSA_new(void);
+
+void RSA_free(RSA *rsa);
+ +

DESCRIPTION

+ +

RSA_new() allocates and initializes an RSA structure. It is equivalent to calling RSA_new_method(NULL).

+ +

RSA_free() frees the RSA structure and its components. The key is erased before the memory is returned to the system. If rsa is NULL nothing is done.

+ +

RETURN VALUES

+ +

If the allocation fails, RSA_new() returns NULL and sets an error code that can be obtained by ERR_get_error(3). Otherwise it returns a pointer to the newly allocated structure.

+ +

RSA_free() returns no value.

+ +

SEE ALSO

+ +

ERR_get_error(3), RSA_generate_key(3), RSA_new_method(3)

+ +

COPYRIGHT

+ +

Copyright 2000-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RSA_padding_add_PKCS1_type_1.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RSA_padding_add_PKCS1_type_1.html new file mode 100644 index 00000000..961981b9 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RSA_padding_add_PKCS1_type_1.html @@ -0,0 +1,149 @@ + + + + +RSA_padding_add_PKCS1_type_1 + + + + + + + + + + +

NAME

+ +

RSA_padding_add_PKCS1_type_1, RSA_padding_check_PKCS1_type_1, RSA_padding_add_PKCS1_type_2, RSA_padding_check_PKCS1_type_2, RSA_padding_add_PKCS1_OAEP, RSA_padding_check_PKCS1_OAEP, RSA_padding_add_PKCS1_OAEP_mgf1, RSA_padding_check_PKCS1_OAEP_mgf1, RSA_padding_add_SSLv23, RSA_padding_check_SSLv23, RSA_padding_add_none, RSA_padding_check_none - asymmetric encryption padding

+ +

SYNOPSIS

+ +
#include <openssl/rsa.h>
+
+int RSA_padding_add_PKCS1_type_1(unsigned char *to, int tlen,
+                                 const unsigned char *f, int fl);
+
+int RSA_padding_check_PKCS1_type_1(unsigned char *to, int tlen,
+                                   const unsigned char *f, int fl, int rsa_len);
+
+int RSA_padding_add_PKCS1_type_2(unsigned char *to, int tlen,
+                                 const unsigned char *f, int fl);
+
+int RSA_padding_check_PKCS1_type_2(unsigned char *to, int tlen,
+                                   const unsigned char *f, int fl, int rsa_len);
+
+int RSA_padding_add_PKCS1_OAEP(unsigned char *to, int tlen,
+                               const unsigned char *f, int fl,
+                               const unsigned char *p, int pl);
+
+int RSA_padding_check_PKCS1_OAEP(unsigned char *to, int tlen,
+                                 const unsigned char *f, int fl, int rsa_len,
+                                 const unsigned char *p, int pl);
+
+int RSA_padding_add_PKCS1_OAEP_mgf1(unsigned char *to, int tlen,
+                                    const unsigned char *f, int fl,
+                                    const unsigned char *p, int pl,
+                                    const EVP_MD *md, const EVP_MD *mgf1md);
+
+int RSA_padding_check_PKCS1_OAEP_mgf1(unsigned char *to, int tlen,
+                                      const unsigned char *f, int fl, int rsa_len,
+                                      const unsigned char *p, int pl,
+                                      const EVP_MD *md, const EVP_MD *mgf1md);
+
+int RSA_padding_add_SSLv23(unsigned char *to, int tlen,
+                           const unsigned char *f, int fl);
+
+int RSA_padding_check_SSLv23(unsigned char *to, int tlen,
+                             const unsigned char *f, int fl, int rsa_len);
+
+int RSA_padding_add_none(unsigned char *to, int tlen,
+                         const unsigned char *f, int fl);
+
+int RSA_padding_check_none(unsigned char *to, int tlen,
+                           const unsigned char *f, int fl, int rsa_len);
+ +

DESCRIPTION

+ +

The RSA_padding_xxx_xxx() functions are called from the RSA encrypt, decrypt, sign and verify functions. Normally they should not be called from application programs.

+ +

However, they can also be called directly to implement padding for other asymmetric ciphers. RSA_padding_add_PKCS1_OAEP() and RSA_padding_check_PKCS1_OAEP() may be used in an application combined with RSA_NO_PADDING in order to implement OAEP with an encoding parameter.

+ +

RSA_padding_add_xxx() encodes fl bytes from f so as to fit into tlen bytes and stores the result at to. An error occurs if fl does not meet the size requirements of the encoding method.

+ +

The following encoding methods are implemented:

+ +
+ +
PKCS1_type_1
+
+ +

PKCS #1 v2.0 EMSA-PKCS1-v1_5 (PKCS #1 v1.5 block type 1); used for signatures

+ +
+
PKCS1_type_2
+
+ +

PKCS #1 v2.0 EME-PKCS1-v1_5 (PKCS #1 v1.5 block type 2)

+ +
+
PKCS1_OAEP
+
+ +

PKCS #1 v2.0 EME-OAEP

+ +
+
SSLv23
+
+ +

PKCS #1 EME-PKCS1-v1_5 with SSL-specific modification

+ +
+
none
+
+ +

simply copy the data

+ +
+
+ +

The random number generator must be seeded prior to calling RSA_padding_add_xxx(). If the automatic seeding or reseeding of the OpenSSL CSPRNG fails due to external circumstances (see RAND(7)), the operation will fail.

+ +

RSA_padding_check_xxx() verifies that the fl bytes at f contain a valid encoding for a rsa_len byte RSA key in the respective encoding method and stores the recovered data of at most tlen bytes (for RSA_NO_PADDING: of size tlen) at to.

+ +

For RSA_padding_xxx_OAEP(), p points to the encoding parameter of length pl. p may be NULL if pl is 0.

+ +

For RSA_padding_xxx_OAEP_mgf1(), md points to the md hash, if md is NULL that means md=sha1, and mgf1md points to the mgf1 hash, if mgf1md is NULL that means mgf1md=md.

+ +

RETURN VALUES

+ +

The RSA_padding_add_xxx() functions return 1 on success, 0 on error. The RSA_padding_check_xxx() functions return the length of the recovered data, -1 on error. Error codes can be obtained by calling ERR_get_error(3).

+ +

WARNINGS

+ +

The result of RSA_padding_check_PKCS1_type_2() is a very sensitive information which can potentially be used to mount a Bleichenbacher padding oracle attack. This is an inherent weakness in the PKCS #1 v1.5 padding design. Prefer PKCS1_OAEP padding. If that is not possible, the result of RSA_padding_check_PKCS1_type_2() should be checked in constant time if it matches the expected length of the plaintext and additionally some application specific consistency checks on the plaintext need to be performed in constant time. If the plaintext is rejected it must be kept secret which of the checks caused the application to reject the message. Do not remove the zero-padding from the decrypted raw RSA data which was computed by RSA_private_decrypt() with RSA_NO_PADDING, as this would create a small timing side channel which could be used to mount a Bleichenbacher attack against any padding mode including PKCS1_OAEP.

+ +

SEE ALSO

+ +

RSA_public_encrypt(3), RSA_private_decrypt(3), RSA_sign(3), RSA_verify(3), RAND(7)

+ +

COPYRIGHT

+ +

Copyright 2000-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RSA_print.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RSA_print.html new file mode 100644 index 00000000..26bf0ce6 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RSA_print.html @@ -0,0 +1,71 @@ + + + + +RSA_print + + + + + + + + + + +

NAME

+ +

RSA_print, RSA_print_fp, DSAparams_print, DSAparams_print_fp, DSA_print, DSA_print_fp, DHparams_print, DHparams_print_fp - print cryptographic parameters

+ +

SYNOPSIS

+ +
#include <openssl/rsa.h>
+
+int RSA_print(BIO *bp, RSA *x, int offset);
+int RSA_print_fp(FILE *fp, RSA *x, int offset);
+
+#include <openssl/dsa.h>
+
+int DSAparams_print(BIO *bp, DSA *x);
+int DSAparams_print_fp(FILE *fp, DSA *x);
+int DSA_print(BIO *bp, DSA *x, int offset);
+int DSA_print_fp(FILE *fp, DSA *x, int offset);
+
+#include <openssl/dh.h>
+
+int DHparams_print(BIO *bp, DH *x);
+int DHparams_print_fp(FILE *fp, DH *x);
+ +

DESCRIPTION

+ +

A human-readable hexadecimal output of the components of the RSA key, DSA parameters or key or DH parameters is printed to bp or fp.

+ +

The output lines are indented by offset spaces.

+ +

RETURN VALUES

+ +

These functions return 1 on success, 0 on error.

+ +

SEE ALSO

+ +

BN_bn2bin(3)

+ +

COPYRIGHT

+ +

Copyright 2000-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RSA_private_encrypt.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RSA_private_encrypt.html new file mode 100644 index 00000000..f8ffeb19 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RSA_private_encrypt.html @@ -0,0 +1,84 @@ + + + + +RSA_private_encrypt + + + + + + + + + + +

NAME

+ +

RSA_private_encrypt, RSA_public_decrypt - low level signature operations

+ +

SYNOPSIS

+ +
#include <openssl/rsa.h>
+
+int RSA_private_encrypt(int flen, unsigned char *from,
+                        unsigned char *to, RSA *rsa, int padding);
+
+int RSA_public_decrypt(int flen, unsigned char *from,
+                       unsigned char *to, RSA *rsa, int padding);
+ +

DESCRIPTION

+ +

These functions handle RSA signatures at a low level.

+ +

RSA_private_encrypt() signs the flen bytes at from (usually a message digest with an algorithm identifier) using the private key rsa and stores the signature in to. to must point to RSA_size(rsa) bytes of memory.

+ +

padding denotes one of the following modes:

+ +
+ +
RSA_PKCS1_PADDING
+
+ +

PKCS #1 v1.5 padding. This function does not handle the algorithmIdentifier specified in PKCS #1. When generating or verifying PKCS #1 signatures, RSA_sign(3) and RSA_verify(3) should be used.

+ +
+
RSA_NO_PADDING
+
+ +

Raw RSA signature. This mode should only be used to implement cryptographically sound padding modes in the application code. Signing user data directly with RSA is insecure.

+ +
+
+ +

RSA_public_decrypt() recovers the message digest from the flen bytes long signature at from using the signer's public key rsa. to must point to a memory section large enough to hold the message digest (which is smaller than RSA_size(rsa) - 11). padding is the padding mode that was used to sign the data.

+ +

RETURN VALUES

+ +

RSA_private_encrypt() returns the size of the signature (i.e., RSA_size(rsa)). RSA_public_decrypt() returns the size of the recovered message digest.

+ +

On error, -1 is returned; the error codes can be obtained by ERR_get_error(3).

+ +

SEE ALSO

+ +

ERR_get_error(3), RSA_sign(3), RSA_verify(3)

+ +

COPYRIGHT

+ +

Copyright 2000-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RSA_public_encrypt.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RSA_public_encrypt.html new file mode 100644 index 00000000..25524612 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RSA_public_encrypt.html @@ -0,0 +1,106 @@ + + + + +RSA_public_encrypt + + + + + + + + + + +

NAME

+ +

RSA_public_encrypt, RSA_private_decrypt - RSA public key cryptography

+ +

SYNOPSIS

+ +
#include <openssl/rsa.h>
+
+int RSA_public_encrypt(int flen, const unsigned char *from,
+                       unsigned char *to, RSA *rsa, int padding);
+
+int RSA_private_decrypt(int flen, const unsigned char *from,
+                        unsigned char *to, RSA *rsa, int padding);
+ +

DESCRIPTION

+ +

RSA_public_encrypt() encrypts the flen bytes at from (usually a session key) using the public key rsa and stores the ciphertext in to. to must point to RSA_size(rsa) bytes of memory.

+ +

padding denotes one of the following modes:

+ +
+ +
RSA_PKCS1_PADDING
+
+ +

PKCS #1 v1.5 padding. This currently is the most widely used mode. However, it is highly recommended to use RSA_PKCS1_OAEP_PADDING in new applications. SEE WARNING BELOW.

+ +
+
RSA_PKCS1_OAEP_PADDING
+
+ +

EME-OAEP as defined in PKCS #1 v2.0 with SHA-1, MGF1 and an empty encoding parameter. This mode is recommended for all new applications.

+ +
+
RSA_SSLV23_PADDING
+
+ +

PKCS #1 v1.5 padding with an SSL-specific modification that denotes that the server is SSL3 capable.

+ +
+
RSA_NO_PADDING
+
+ +

Raw RSA encryption. This mode should only be used to implement cryptographically sound padding modes in the application code. Encrypting user data directly with RSA is insecure.

+ +
+
+ +

flen must not be more than RSA_size(rsa) - 11 for the PKCS #1 v1.5 based padding modes, not more than RSA_size(rsa) - 42 for RSA_PKCS1_OAEP_PADDING and exactly RSA_size(rsa) for RSA_NO_PADDING. When a padding mode other than RSA_NO_PADDING is in use, then RSA_public_encrypt() will include some random bytes into the ciphertext and therefore the ciphertext will be different each time, even if the plaintext and the public key are exactly identical. The returned ciphertext in to will always be zero padded to exactly RSA_size(rsa) bytes. to and from may overlap.

+ +

RSA_private_decrypt() decrypts the flen bytes at from using the private key rsa and stores the plaintext in to. flen should be equal to RSA_size(rsa) but may be smaller, when leading zero bytes are in the ciphertext. Those are not important and may be removed, but RSA_public_encrypt() does not do that. to must point to a memory section large enough to hold the maximal possible decrypted data (which is equal to RSA_size(rsa) for RSA_NO_PADDING, RSA_size(rsa) - 11 for the PKCS #1 v1.5 based padding modes and RSA_size(rsa) - 42 for RSA_PKCS1_OAEP_PADDING). padding is the padding mode that was used to encrypt the data. to and from may overlap.

+ +

RETURN VALUES

+ +

RSA_public_encrypt() returns the size of the encrypted data (i.e., RSA_size(rsa)). RSA_private_decrypt() returns the size of the recovered plaintext. A return value of 0 is not an error and means only that the plaintext was empty.

+ +

On error, -1 is returned; the error codes can be obtained by ERR_get_error(3).

+ +

WARNINGS

+ +

Decryption failures in the RSA_PKCS1_PADDING mode leak information which can potentially be used to mount a Bleichenbacher padding oracle attack. This is an inherent weakness in the PKCS #1 v1.5 padding design. Prefer RSA_PKCS1_OAEP_PADDING.

+ +

CONFORMING TO

+ +

SSL, PKCS #1 v2.0

+ +

SEE ALSO

+ +

ERR_get_error(3), RAND_bytes(3), RSA_size(3)

+ +

COPYRIGHT

+ +

Copyright 2000-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RSA_set_method.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RSA_set_method.html new file mode 100644 index 00000000..b45f26bc --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RSA_set_method.html @@ -0,0 +1,161 @@ + + + + +RSA_set_method + + + + + + + + + + +

NAME

+ +

RSA_set_default_method, RSA_get_default_method, RSA_set_method, RSA_get_method, RSA_PKCS1_OpenSSL, RSA_flags, RSA_new_method - select RSA method

+ +

SYNOPSIS

+ +
#include <openssl/rsa.h>
+
+void RSA_set_default_method(const RSA_METHOD *meth);
+
+RSA_METHOD *RSA_get_default_method(void);
+
+int RSA_set_method(RSA *rsa, const RSA_METHOD *meth);
+
+RSA_METHOD *RSA_get_method(const RSA *rsa);
+
+RSA_METHOD *RSA_PKCS1_OpenSSL(void);
+
+int RSA_flags(const RSA *rsa);
+
+RSA *RSA_new_method(ENGINE *engine);
+ +

DESCRIPTION

+ +

An RSA_METHOD specifies the functions that OpenSSL uses for RSA operations. By modifying the method, alternative implementations such as hardware accelerators may be used. IMPORTANT: See the NOTES section for important information about how these RSA API functions are affected by the use of ENGINE API calls.

+ +

Initially, the default RSA_METHOD is the OpenSSL internal implementation, as returned by RSA_PKCS1_OpenSSL().

+ +

RSA_set_default_method() makes meth the default method for all RSA structures created later. NB: This is true only whilst no ENGINE has been set as a default for RSA, so this function is no longer recommended. This function is not thread-safe and should not be called at the same time as other OpenSSL functions.

+ +

RSA_get_default_method() returns a pointer to the current default RSA_METHOD. However, the meaningfulness of this result is dependent on whether the ENGINE API is being used, so this function is no longer recommended.

+ +

RSA_set_method() selects meth to perform all operations using the key 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 that supports embedded hardware-protected keys), and in such cases attempting to change the RSA_METHOD for the key can have unexpected results.

+ +

RSA_get_method() returns a pointer to the RSA_METHOD being used by rsa. This method may or may not be supplied by an ENGINE implementation, but if it is, the return value can only be guaranteed to be valid as long as the RSA key itself is valid and does not have its implementation changed by RSA_set_method().

+ +

RSA_flags() returns the flags that are set for rsa's current RSA_METHOD. See the BUGS section.

+ +

RSA_new_method() allocates and initializes an RSA structure so that engine will be used for the RSA operations. If engine is NULL, the default ENGINE for RSA operations is used, and if no default ENGINE is set, the RSA_METHOD controlled by RSA_set_default_method() is used.

+ +

RSA_flags() returns the flags that are set for rsa's current method.

+ +

RSA_new_method() allocates and initializes an RSA structure so that method will be used for the RSA operations. If method is NULL, the default method is used.

+ +

THE RSA_METHOD STRUCTURE

+ +
typedef struct rsa_meth_st
+{
+    /* name of the implementation */
+    const char *name;
+
+    /* encrypt */
+    int (*rsa_pub_enc)(int flen, unsigned char *from,
+                       unsigned char *to, RSA *rsa, int padding);
+
+    /* verify arbitrary data */
+    int (*rsa_pub_dec)(int flen, unsigned char *from,
+                       unsigned char *to, RSA *rsa, int padding);
+
+    /* sign arbitrary data */
+    int (*rsa_priv_enc)(int flen, unsigned char *from,
+                        unsigned char *to, RSA *rsa, int padding);
+
+    /* decrypt */
+    int (*rsa_priv_dec)(int flen, unsigned char *from,
+                        unsigned char *to, RSA *rsa, int padding);
+
+    /* compute r0 = r0 ^ I mod rsa->n (May be NULL for some implementations) */
+    int (*rsa_mod_exp)(BIGNUM *r0, BIGNUM *I, RSA *rsa);
+
+    /* compute r = a ^ p mod m (May be NULL for some implementations) */
+    int (*bn_mod_exp)(BIGNUM *r, BIGNUM *a, const BIGNUM *p,
+                      const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx);
+
+    /* called at RSA_new */
+    int (*init)(RSA *rsa);
+
+    /* called at RSA_free */
+    int (*finish)(RSA *rsa);
+
+    /*
+     * RSA_FLAG_EXT_PKEY        - rsa_mod_exp is called for private key
+     *                            operations, even if p,q,dmp1,dmq1,iqmp
+     *                            are NULL
+     * RSA_METHOD_FLAG_NO_CHECK - don't check pub/private match
+     */
+    int flags;
+
+    char *app_data; /* ?? */
+
+    int (*rsa_sign)(int type,
+                    const unsigned char *m, unsigned int m_length,
+                    unsigned char *sigret, unsigned int *siglen, const RSA *rsa);
+    int (*rsa_verify)(int dtype,
+                      const unsigned char *m, unsigned int m_length,
+                      const unsigned char *sigbuf, unsigned int siglen,
+                      const RSA *rsa);
+    /* keygen. If NULL builtin RSA key generation will be used */
+    int (*rsa_keygen)(RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb);
+
+} RSA_METHOD;
+ +

RETURN VALUES

+ +

RSA_PKCS1_OpenSSL(), RSA_PKCS1_null_method(), RSA_get_default_method() and RSA_get_method() return pointers to the respective RSA_METHODs.

+ +

RSA_set_default_method() returns no value.

+ +

RSA_set_method() returns a pointer to the old RSA_METHOD implementation that was replaced. However, this return value should probably be ignored because if it was supplied by an ENGINE, the pointer could be invalidated at any time if the ENGINE is unloaded (in fact it could be unloaded as a result of the RSA_set_method() function releasing its handle to the ENGINE). For this reason, the return type may be replaced with a void declaration in a future release.

+ +

RSA_new_method() returns NULL and sets an error code that can be obtained by ERR_get_error(3) if the allocation fails. Otherwise it returns a pointer to the newly allocated structure.

+ +

BUGS

+ +

The behaviour of RSA_flags() is a mis-feature that is left as-is for now to avoid creating compatibility problems. RSA functionality, such as the encryption functions, are controlled by the flags value in the RSA key itself, not by the flags value in the RSA_METHOD attached to the RSA key (which is what this function returns). If the flags element of an RSA key is changed, the changes will be honoured by RSA functionality but will not be reflected in the return value of the RSA_flags() function - in effect RSA_flags() behaves more like an RSA_default_flags() function (which does not currently exist).

+ +

SEE ALSO

+ +

RSA_new(3)

+ +

HISTORY

+ +

The RSA_null_method(), which was a partial attempt to avoid patent issues, was replaced to always return NULL in OpenSSL 1.1.1.

+ +

COPYRIGHT

+ +

Copyright 2000-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RSA_sign.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RSA_sign.html new file mode 100644 index 00000000..bc6d974c --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RSA_sign.html @@ -0,0 +1,71 @@ + + + + +RSA_sign + + + + + + + + + + +

NAME

+ +

RSA_sign, RSA_verify - RSA signatures

+ +

SYNOPSIS

+ +
#include <openssl/rsa.h>
+
+int RSA_sign(int type, const unsigned char *m, unsigned int m_len,
+             unsigned char *sigret, unsigned int *siglen, RSA *rsa);
+
+int RSA_verify(int type, const unsigned char *m, unsigned int m_len,
+               unsigned char *sigbuf, unsigned int siglen, RSA *rsa);
+ +

DESCRIPTION

+ +

RSA_sign() signs the message digest m of size m_len using the private key rsa using RSASSA-PKCS1-v1_5 as specified in RFC 3447. It stores the signature in sigret and the signature size in siglen. sigret must point to RSA_size(rsa) bytes of memory. Note that PKCS #1 adds meta-data, placing limits on the size of the key that can be used. See RSA_private_encrypt(3) for lower-level operations.

+ +

type denotes the message digest algorithm that was used to generate m. If type is NID_md5_sha1, an SSL signature (MD5 and SHA1 message digests with PKCS #1 padding and no algorithm identifier) is created.

+ +

RSA_verify() verifies that the signature sigbuf of size siglen matches a given message digest m of size m_len. type denotes the message digest algorithm that was used to generate the signature. rsa is the signer's public key.

+ +

RETURN VALUES

+ +

RSA_sign() returns 1 on success. RSA_verify() returns 1 on successful verification.

+ +

The error codes can be obtained by ERR_get_error(3).

+ +

CONFORMING TO

+ +

SSL, PKCS #1 v2.0

+ +

SEE ALSO

+ +

ERR_get_error(3), RSA_private_encrypt(3), RSA_public_decrypt(3)

+ +

COPYRIGHT

+ +

Copyright 2000-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RSA_sign_ASN1_OCTET_STRING.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RSA_sign_ASN1_OCTET_STRING.html new file mode 100644 index 00000000..43e53e8a --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RSA_sign_ASN1_OCTET_STRING.html @@ -0,0 +1,75 @@ + + + + +RSA_sign_ASN1_OCTET_STRING + + + + + + + + + + +

NAME

+ +

RSA_sign_ASN1_OCTET_STRING, RSA_verify_ASN1_OCTET_STRING - RSA signatures

+ +

SYNOPSIS

+ +
#include <openssl/rsa.h>
+
+int RSA_sign_ASN1_OCTET_STRING(int dummy, unsigned char *m,
+                               unsigned int m_len, unsigned char *sigret,
+                               unsigned int *siglen, RSA *rsa);
+
+int RSA_verify_ASN1_OCTET_STRING(int dummy, unsigned char *m,
+                                 unsigned int m_len, unsigned char *sigbuf,
+                                 unsigned int siglen, RSA *rsa);
+ +

DESCRIPTION

+ +

RSA_sign_ASN1_OCTET_STRING() signs the octet string m of size m_len using the private key rsa represented in DER using PKCS #1 padding. It stores the signature in sigret and the signature size in siglen. sigret must point to RSA_size(rsa) bytes of memory.

+ +

dummy is ignored.

+ +

The random number generator must be seeded when calling RSA_sign_ASN1_OCTET_STRING(). If the automatic seeding or reseeding of the OpenSSL CSPRNG fails due to external circumstances (see RAND(7)), the operation will fail.

+ +

RSA_verify_ASN1_OCTET_STRING() verifies that the signature sigbuf of size siglen is the DER representation of a given octet string m of size m_len. dummy is ignored. rsa is the signer's public key.

+ +

RETURN VALUES

+ +

RSA_sign_ASN1_OCTET_STRING() returns 1 on success, 0 otherwise. RSA_verify_ASN1_OCTET_STRING() returns 1 on successful verification, 0 otherwise.

+ +

The error codes can be obtained by ERR_get_error(3).

+ +

BUGS

+ +

These functions serve no recognizable purpose.

+ +

SEE ALSO

+ +

ERR_get_error(3), RAND_bytes(3), RSA_sign(3), RSA_verify(3), RAND(7)

+ +

COPYRIGHT

+ +

Copyright 2000-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RSA_size.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RSA_size.html new file mode 100644 index 00000000..03067d92 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/RSA_size.html @@ -0,0 +1,75 @@ + + + + +RSA_size + + + + + + + + + + +

NAME

+ +

RSA_size, RSA_bits, RSA_security_bits - get RSA modulus size or security bits

+ +

SYNOPSIS

+ +
#include <openssl/rsa.h>
+
+int RSA_size(const RSA *rsa);
+
+int RSA_bits(const RSA *rsa);
+
+int RSA_security_bits(const RSA *rsa)
+ +

DESCRIPTION

+ +

RSA_size() returns the RSA modulus size in bytes. It can be used to determine how much memory must be allocated for an RSA encrypted value.

+ +

RSA_bits() returns the number of significant bits.

+ +

rsa and rsa->n must not be NULL.

+ +

RSA_security_bits() returns the number of security bits of the given rsa key. See BN_security_bits(3).

+ +

RETURN VALUES

+ +

RSA_size() returns the size of modulus in bytes.

+ +

DSA_bits() returns the number of bits in the key.

+ +

RSA_security_bits() returns the number of security bits.

+ +

SEE ALSO

+ +

BN_num_bits(3)

+ +

HISTORY

+ +

The RSA_bits() function was added in OpenSSL 1.1.0.

+ +

COPYRIGHT

+ +

Copyright 2000-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SCT_new.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SCT_new.html new file mode 100644 index 00000000..6be46be9 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SCT_new.html @@ -0,0 +1,199 @@ + + + + +SCT_new + + + + + + + + + + +

NAME

+ +

SCT_new, SCT_new_from_base64, SCT_free, SCT_LIST_free, SCT_get_version, SCT_set_version, SCT_get_log_entry_type, SCT_set_log_entry_type, SCT_get0_log_id, SCT_set0_log_id, SCT_set1_log_id, SCT_get_timestamp, SCT_set_timestamp, SCT_get_signature_nid, SCT_set_signature_nid, SCT_get0_signature, SCT_set0_signature, SCT_set1_signature, SCT_get0_extensions, SCT_set0_extensions, SCT_set1_extensions, SCT_get_source, SCT_set_source - A Certificate Transparency Signed Certificate Timestamp

+ +

SYNOPSIS

+ +
#include <openssl/ct.h>
+
+typedef enum {
+    CT_LOG_ENTRY_TYPE_NOT_SET = -1,
+    CT_LOG_ENTRY_TYPE_X509 = 0,
+    CT_LOG_ENTRY_TYPE_PRECERT = 1
+} ct_log_entry_type_t;
+
+typedef enum {
+    SCT_VERSION_NOT_SET = -1,
+    SCT_VERSION_V1 = 0
+} sct_version_t;
+
+typedef enum {
+    SCT_SOURCE_UNKNOWN,
+    SCT_SOURCE_TLS_EXTENSION,
+    SCT_SOURCE_X509V3_EXTENSION,
+    SCT_SOURCE_OCSP_STAPLED_RESPONSE
+} sct_source_t;
+
+SCT *SCT_new(void);
+SCT *SCT_new_from_base64(unsigned char version,
+                         const char *logid_base64,
+                         ct_log_entry_type_t entry_type,
+                         uint64_t timestamp,
+                         const char *extensions_base64,
+                         const char *signature_base64);
+
+void SCT_free(SCT *sct);
+void SCT_LIST_free(STACK_OF(SCT) *a);
+
+sct_version_t SCT_get_version(const SCT *sct);
+int SCT_set_version(SCT *sct, sct_version_t version);
+
+ct_log_entry_type_t SCT_get_log_entry_type(const SCT *sct);
+int SCT_set_log_entry_type(SCT *sct, ct_log_entry_type_t entry_type);
+
+size_t SCT_get0_log_id(const SCT *sct, unsigned char **log_id);
+int SCT_set0_log_id(SCT *sct, unsigned char *log_id, size_t log_id_len);
+int SCT_set1_log_id(SCT *sct, const unsigned char *log_id, size_t log_id_len);
+
+uint64_t SCT_get_timestamp(const SCT *sct);
+void SCT_set_timestamp(SCT *sct, uint64_t timestamp);
+
+int SCT_get_signature_nid(const SCT *sct);
+int SCT_set_signature_nid(SCT *sct, int nid);
+
+size_t SCT_get0_signature(const SCT *sct, unsigned char **sig);
+void SCT_set0_signature(SCT *sct, unsigned char *sig, size_t sig_len);
+int SCT_set1_signature(SCT *sct, const unsigned char *sig, size_t sig_len);
+
+size_t SCT_get0_extensions(const SCT *sct, unsigned char **ext);
+void SCT_set0_extensions(SCT *sct, unsigned char *ext, size_t ext_len);
+int SCT_set1_extensions(SCT *sct, const unsigned char *ext, size_t ext_len);
+
+sct_source_t SCT_get_source(const SCT *sct);
+int SCT_set_source(SCT *sct, sct_source_t source);
+ +

DESCRIPTION

+ +

Signed Certificate Timestamps (SCTs) are defined by RFC 6962, Section 3.2. They constitute a promise by a Certificate Transparency (CT) log to publicly record a certificate. By cryptographically verifying that a log did indeed issue an SCT, some confidence can be gained that the certificate is publicly known.

+ +

An internal representation of an SCT can be created in one of two ways. The first option is to create a blank SCT, using SCT_new(), and then populate it using:

+ +
    + +
  • SCT_set_version() to set the SCT version.

    + +

    Only SCT_VERSION_V1 is currently supported.

    + +
  • +
  • SCT_set_log_entry_type() to set the type of certificate the SCT was issued for:

    + +

    CT_LOG_ENTRY_TYPE_X509 for a normal certificate. CT_LOG_ENTRY_TYPE_PRECERT for a pre-certificate.

    + +
  • +
  • SCT_set0_log_id() or SCT_set1_log_id() to set the LogID of the CT log that the SCT came from.

    + +

    The former takes ownership, whereas the latter makes a copy. See RFC 6962, Section 3.2 for the definition of LogID.

    + +
  • +
  • SCT_set_timestamp() to set the time the SCT was issued (epoch time in milliseconds).

    + +
  • +
  • SCT_set_signature_nid() to set the NID of the signature.

    + +
  • +
  • SCT_set0_signature() or SCT_set1_signature() to set the raw signature value.

    + +

    The former takes ownership, whereas the latter makes a copy.

    + +
  • +
  • SCT_set0_extensions() or SCT_set1_extensions to provide SCT extensions.

    + +

    The former takes ownership, whereas the latter makes a copy.

    + +
  • +
+ +

Alternatively, the SCT can be pre-populated from the following data using SCT_new_from_base64():

+ +
    + +
  • The SCT version (only SCT_VERSION_V1 is currently supported).

    + +
  • +
  • The LogID (see RFC 6962, Section 3.2), base64 encoded.

    + +
  • +
  • The type of certificate the SCT was issued for: CT_LOG_ENTRY_TYPE_X509 for a normal certificate. CT_LOG_ENTRY_TYPE_PRECERT for a pre-certificate.

    + +
  • +
  • The time that the SCT was issued (epoch time in milliseconds).

    + +
  • +
  • The SCT extensions, base64 encoded.

    + +
  • +
  • The SCT signature, base64 encoded.

    + +
  • +
+ +

SCT_set_source() can be used to record where the SCT was found (TLS extension, X.509 certificate extension or OCSP response). This is not required for verifying the SCT.

+ +

NOTES

+ +

Some of the setters return int, instead of void. These will all return 1 on success, 0 on failure. They will not make changes on failure.

+ +

All of the setters will reset the validation status of the SCT to SCT_VALIDATION_STATUS_NOT_SET (see SCT_validate(3)).

+ +

SCT_set_source() will call SCT_set_log_entry_type() if the type of certificate the SCT was issued for can be inferred from where the SCT was found. For example, an SCT found in an X.509 extension must have been issued for a pre- certificate.

+ +

SCT_set_source() will not refuse unknown values.

+ +

RETURN VALUES

+ +

SCT_set_version() returns 1 if the specified version is supported, 0 otherwise.

+ +

SCT_set_log_entry_type() returns 1 if the specified log entry type is supported, 0 otherwise.

+ +

SCT_set0_log_id() and SCT_set1_log_id return 1 if the specified LogID is a valid SHA-256 hash, 0 otherwise. Additionally, SCT_set1_log_id returns 0 if malloc fails.

+ +

SCT_set_signature_nid returns 1 if the specified NID is supported, 0 otherwise.

+ +

SCT_set1_extensions and SCT_set1_signature return 1 if the supplied buffer is copied successfully, 0 otherwise (i.e. if malloc fails).

+ +

SCT_set_source returns 1 on success, 0 otherwise.

+ +

SEE ALSO

+ +

ct(7), SCT_validate(3), OBJ_nid2obj(3)

+ +

HISTORY

+ +

These functions were added in OpenSSL 1.1.0.

+ +

COPYRIGHT

+ +

Copyright 2016-2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SCT_print.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SCT_print.html new file mode 100644 index 00000000..a3723c56 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SCT_print.html @@ -0,0 +1,68 @@ + + + + +SCT_print + + + + + + + + + + +

NAME

+ +

SCT_print, SCT_LIST_print, SCT_validation_status_string - Prints Signed Certificate Timestamps in a human-readable way

+ +

SYNOPSIS

+ +
#include <openssl/ct.h>
+
+void SCT_print(const SCT *sct, BIO *out, int indent, const CTLOG_STORE *logs);
+void SCT_LIST_print(const STACK_OF(SCT) *sct_list, BIO *out, int indent,
+                    const char *separator, const CTLOG_STORE *logs);
+const char *SCT_validation_status_string(const SCT *sct);
+ +

DESCRIPTION

+ +

SCT_print() prints a single Signed Certificate Timestamp (SCT) to a bio in a human-readable format. SCT_LIST_print() prints an entire list of SCTs in a similar way. A separator can be specified to delimit each SCT in the output.

+ +

The output can be indented by a specified number of spaces. If a CTLOG_STORE is provided, it will be used to print the description of the CT log that issued each SCT (if that log is in the CTLOG_STORE). Alternatively, NULL can be passed as the CTLOG_STORE parameter to disable this feature.

+ +

SCT_validation_status_string() will return the validation status of an SCT as a human-readable string. Call SCT_validate() or SCT_LIST_validate() beforehand in order to set the validation status of an SCT first.

+ +

RETURN VALUES

+ +

SCT_validation_status_string() returns a null-terminated string representing the validation status of an SCT object.

+ +

SEE ALSO

+ +

ct(7), bio(7), CTLOG_STORE_new(3), SCT_validate(3)

+ +

HISTORY

+ +

These functions were added in OpenSSL 1.1.0.

+ +

COPYRIGHT

+ +

Copyright 2016-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SCT_validate.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SCT_validate.html new file mode 100644 index 00000000..676a384d --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SCT_validate.html @@ -0,0 +1,108 @@ + + + + +SCT_validate + + + + + + + + + + +

NAME

+ +

SCT_validate, SCT_LIST_validate, SCT_get_validation_status - checks Signed Certificate Timestamps (SCTs) are valid

+ +

SYNOPSIS

+ +
#include <openssl/ct.h>
+
+typedef enum {
+    SCT_VALIDATION_STATUS_NOT_SET,
+    SCT_VALIDATION_STATUS_UNKNOWN_LOG,
+    SCT_VALIDATION_STATUS_VALID,
+    SCT_VALIDATION_STATUS_INVALID,
+    SCT_VALIDATION_STATUS_UNVERIFIED,
+    SCT_VALIDATION_STATUS_UNKNOWN_VERSION
+} sct_validation_status_t;
+
+int SCT_validate(SCT *sct, const CT_POLICY_EVAL_CTX *ctx);
+int SCT_LIST_validate(const STACK_OF(SCT) *scts, CT_POLICY_EVAL_CTX *ctx);
+sct_validation_status_t SCT_get_validation_status(const SCT *sct);
+ +

DESCRIPTION

+ +

SCT_validate() will check that an SCT is valid and verify its signature. SCT_LIST_validate() performs the same checks on an entire stack of SCTs. The result of the validation checks can be obtained by passing the SCT to SCT_get_validation_status().

+ +

A CT_POLICY_EVAL_CTX must be provided that specifies:

+ +
    + +
  • The certificate the SCT was issued for.

    + +

    Failure to provide the certificate will result in the validation status being SCT_VALIDATION_STATUS_UNVERIFIED.

    + +
  • +
  • The issuer of that certificate.

    + +

    This is only required if the SCT was issued for a pre-certificate (see RFC 6962). If it is required but not provided, the validation status will be SCT_VALIDATION_STATUS_UNVERIFIED.

    + +
  • +
  • A CTLOG_STORE that contains the CT log that issued this SCT.

    + +

    If the SCT was issued by a log that is not in this CTLOG_STORE, the validation status will be SCT_VALIDATION_STATUS_UNKNOWN_LOG.

    + +
  • +
+ +

If the SCT is of an unsupported version (only v1 is currently supported), the validation status will be SCT_VALIDATION_STATUS_UNKNOWN_VERSION.

+ +

If the SCT's signature is incorrect, its timestamp is in the future (relative to the time in CT_POLICY_EVAL_CTX), or if it is otherwise invalid, the validation status will be SCT_VALIDATION_STATUS_INVALID.

+ +

If all checks pass, the validation status will be SCT_VALIDATION_STATUS_VALID.

+ +

NOTES

+ +

A return value of 0 from SCT_LIST_validate() should not be interpreted as a failure. At a minimum, only one valid SCT may provide sufficient confidence that a certificate has been publicly logged.

+ +

RETURN VALUES

+ +

SCT_validate() returns a negative integer if an internal error occurs, 0 if the SCT fails validation, or 1 if the SCT passes validation.

+ +

SCT_LIST_validate() returns a negative integer if an internal error occurs, 0 if any of SCTs fails validation, or 1 if they all pass validation.

+ +

SCT_get_validation_status() returns the validation status of the SCT. If SCT_validate() or SCT_LIST_validate() have not been passed that SCT, the returned value will be SCT_VALIDATION_STATUS_NOT_SET.

+ +

SEE ALSO

+ +

ct(7)

+ +

HISTORY

+ +

These functions were added in OpenSSL 1.1.0.

+ +

COPYRIGHT

+ +

Copyright 2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SHA256_Init.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SHA256_Init.html new file mode 100644 index 00000000..b16a0a5c --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SHA256_Init.html @@ -0,0 +1,107 @@ + + + + +SHA256_Init + + + + + + + + + + +

NAME

+ +

SHA1, SHA1_Init, SHA1_Update, SHA1_Final, SHA224, SHA224_Init, SHA224_Update, SHA224_Final, SHA256, SHA256_Init, SHA256_Update, SHA256_Final, SHA384, SHA384_Init, SHA384_Update, SHA384_Final, SHA512, SHA512_Init, SHA512_Update, SHA512_Final - Secure Hash Algorithm

+ +

SYNOPSIS

+ +
#include <openssl/sha.h>
+
+int SHA1_Init(SHA_CTX *c);
+int SHA1_Update(SHA_CTX *c, const void *data, size_t len);
+int SHA1_Final(unsigned char *md, SHA_CTX *c);
+unsigned char *SHA1(const unsigned char *d, size_t n,
+                    unsigned char *md);
+
+int SHA224_Init(SHA256_CTX *c);
+int SHA224_Update(SHA256_CTX *c, const void *data, size_t len);
+int SHA224_Final(unsigned char *md, SHA256_CTX *c);
+unsigned char *SHA224(const unsigned char *d, size_t n,
+                      unsigned char *md);
+
+int SHA256_Init(SHA256_CTX *c);
+int SHA256_Update(SHA256_CTX *c, const void *data, size_t len);
+int SHA256_Final(unsigned char *md, SHA256_CTX *c);
+unsigned char *SHA256(const unsigned char *d, size_t n,
+                      unsigned char *md);
+
+int SHA384_Init(SHA512_CTX *c);
+int SHA384_Update(SHA512_CTX *c, const void *data, size_t len);
+int SHA384_Final(unsigned char *md, SHA512_CTX *c);
+unsigned char *SHA384(const unsigned char *d, size_t n,
+                      unsigned char *md);
+
+int SHA512_Init(SHA512_CTX *c);
+int SHA512_Update(SHA512_CTX *c, const void *data, size_t len);
+int SHA512_Final(unsigned char *md, SHA512_CTX *c);
+unsigned char *SHA512(const unsigned char *d, size_t n,
+                      unsigned char *md);
+ +

DESCRIPTION

+ +

Applications should use the higher level functions EVP_DigestInit(3) etc. instead of calling the hash functions directly.

+ +

SHA-1 (Secure Hash Algorithm) is a cryptographic hash function with a 160 bit output.

+ +

SHA1() computes the SHA-1 message digest of the n bytes at d and places it in md (which must have space for SHA_DIGEST_LENGTH == 20 bytes of output). If md is NULL, the digest is placed in a static array. Note: setting md to NULL is not thread safe.

+ +

The following functions may be used if the message is not completely stored in memory:

+ +

SHA1_Init() initializes a SHA_CTX structure.

+ +

SHA1_Update() can be called repeatedly with chunks of the message to be hashed (len bytes at data).

+ +

SHA1_Final() places the message digest in md, which must have space for SHA_DIGEST_LENGTH == 20 bytes of output, and erases the SHA_CTX.

+ +

The SHA224, SHA256, SHA384 and SHA512 families of functions operate in the same way as for the SHA1 functions. Note that SHA224 and SHA256 use a SHA256_CTX object instead of SHA_CTX. SHA384 and SHA512 use SHA512_CTX. The buffer md must have space for the output from the SHA variant being used (defined by SHA224_DIGEST_LENGTH, SHA256_DIGEST_LENGTH, SHA384_DIGEST_LENGTH and SHA512_DIGEST_LENGTH). Also note that, as for the SHA1() function above, the SHA224(), SHA256(), SHA384() and SHA512() functions are not thread safe if md is NULL.

+ +

The predecessor of SHA-1, SHA, is also implemented, but it should be used only when backward compatibility is required.

+ +

RETURN VALUES

+ +

SHA1(), SHA224(), SHA256(), SHA384() and SHA512() return a pointer to the hash value.

+ +

SHA1_Init(), SHA1_Update() and SHA1_Final() and equivalent SHA224, SHA256, SHA384 and SHA512 functions return 1 for success, 0 otherwise.

+ +

CONFORMING TO

+ +

US Federal Information Processing Standard FIPS PUB 180-4 (Secure Hash Standard), ANSI X9.30

+ +

SEE ALSO

+ +

EVP_DigestInit(3)

+ +

COPYRIGHT

+ +

Copyright 2000-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SMIME_read_CMS.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SMIME_read_CMS.html new file mode 100644 index 00000000..997086c2 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SMIME_read_CMS.html @@ -0,0 +1,85 @@ + + + + +SMIME_read_CMS + + + + + + + + + + +

NAME

+ +

SMIME_read_CMS - parse S/MIME message

+ +

SYNOPSIS

+ +
#include <openssl/cms.h>
+
+CMS_ContentInfo *SMIME_read_CMS(BIO *in, BIO **bcont);
+ +

DESCRIPTION

+ +

SMIME_read_CMS() parses a message in S/MIME format.

+ +

in is a BIO to read the message from.

+ +

If cleartext signing is used then the content is saved in a memory bio which is written to *bcont, otherwise *bcont is set to NULL.

+ +

The parsed CMS_ContentInfo structure is returned or NULL if an error occurred.

+ +

NOTES

+ +

If *bcont is not NULL then the message is clear text signed. *bcont can then be passed to CMS_verify() with the CMS_DETACHED flag set.

+ +

Otherwise the type of the returned structure can be determined using CMS_get0_type().

+ +

To support future functionality if bcont is not NULL *bcont should be initialized to NULL. For example:

+ +
BIO *cont = NULL;
+CMS_ContentInfo *cms;
+
+cms = SMIME_read_CMS(in, &cont);
+ +

BUGS

+ +

The MIME parser used by SMIME_read_CMS() is somewhat primitive. While it will handle most S/MIME messages more complex compound formats may not work.

+ +

The parser assumes that the CMS_ContentInfo structure is always base64 encoded and will not handle the case where it is in binary format or uses quoted printable format.

+ +

The use of a memory BIO to hold the signed content limits the size of message which can be processed due to memory restraints: a streaming single pass option should be available.

+ +

RETURN VALUES

+ +

SMIME_read_CMS() returns a valid CMS_ContentInfo structure or NULL if an error occurred. The error can be obtained from ERR_get_error(3).

+ +

SEE ALSO

+ +

ERR_get_error(3), CMS_type(3), SMIME_read_CMS(3), CMS_sign(3), CMS_verify(3), CMS_encrypt(3), CMS_decrypt(3)

+ +

COPYRIGHT

+ +

Copyright 2008-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SMIME_read_PKCS7.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SMIME_read_PKCS7.html new file mode 100644 index 00000000..fc97995a --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SMIME_read_PKCS7.html @@ -0,0 +1,85 @@ + + + + +SMIME_read_PKCS7 + + + + + + + + + + +

NAME

+ +

SMIME_read_PKCS7 - parse S/MIME message

+ +

SYNOPSIS

+ +
#include <openssl/pkcs7.h>
+
+PKCS7 *SMIME_read_PKCS7(BIO *in, BIO **bcont);
+ +

DESCRIPTION

+ +

SMIME_read_PKCS7() parses a message in S/MIME format.

+ +

in is a BIO to read the message from.

+ +

If cleartext signing is used then the content is saved in a memory bio which is written to *bcont, otherwise *bcont is set to NULL.

+ +

The parsed PKCS#7 structure is returned or NULL if an error occurred.

+ +

NOTES

+ +

If *bcont is not NULL then the message is clear text signed. *bcont can then be passed to PKCS7_verify() with the PKCS7_DETACHED flag set.

+ +

Otherwise the type of the returned structure can be determined using PKCS7_type_is_enveloped(), etc.

+ +

To support future functionality if bcont is not NULL *bcont should be initialized to NULL. For example:

+ +
BIO *cont = NULL;
+PKCS7 *p7;
+
+p7 = SMIME_read_PKCS7(in, &cont);
+ +

BUGS

+ +

The MIME parser used by SMIME_read_PKCS7() is somewhat primitive. While it will handle most S/MIME messages more complex compound formats may not work.

+ +

The parser assumes that the PKCS7 structure is always base64 encoded and will not handle the case where it is in binary format or uses quoted printable format.

+ +

The use of a memory BIO to hold the signed content limits the size of message which can be processed due to memory restraints: a streaming single pass option should be available.

+ +

RETURN VALUES

+ +

SMIME_read_PKCS7() returns a valid PKCS7 structure or NULL if an error occurred. The error can be obtained from ERR_get_error(3).

+ +

SEE ALSO

+ +

ERR_get_error(3), SMIME_read_PKCS7(3), PKCS7_sign(3), PKCS7_verify(3), PKCS7_encrypt(3) PKCS7_decrypt(3)

+ +

COPYRIGHT

+ +

Copyright 2002-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SMIME_write_CMS.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SMIME_write_CMS.html new file mode 100644 index 00000000..706c840f --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SMIME_write_CMS.html @@ -0,0 +1,78 @@ + + + + +SMIME_write_CMS + + + + + + + + + + +

NAME

+ +

SMIME_write_CMS - convert CMS structure to S/MIME format

+ +

SYNOPSIS

+ +
#include <openssl/cms.h>
+
+int SMIME_write_CMS(BIO *out, CMS_ContentInfo *cms, BIO *data, int flags);
+ +

DESCRIPTION

+ +

SMIME_write_CMS() adds the appropriate MIME headers to a CMS structure to produce an S/MIME message.

+ +

out is the BIO to write the data to. cms is the appropriate CMS_ContentInfo structure. If streaming is enabled then the content must be supplied in the data argument. flags is an optional set of flags.

+ +

NOTES

+ +

The following flags can be passed in the flags parameter.

+ +

If CMS_DETACHED is set then cleartext signing will be used, this option only makes sense for SignedData where CMS_DETACHED is also set when CMS_sign() is called.

+ +

If the CMS_TEXT flag is set MIME headers for type text/plain are added to the content, this only makes sense if CMS_DETACHED is also set.

+ +

If the CMS_STREAM flag is set streaming is performed. This flag should only be set if CMS_STREAM was also set in the previous call to a CMS_ContentInfo creation function.

+ +

If cleartext signing is being used and CMS_STREAM not set then the data must be read twice: once to compute the signature in CMS_sign() and once to output the S/MIME message.

+ +

If streaming is performed the content is output in BER format using indefinite length constructed encoding except in the case of signed data with detached content where the content is absent and DER format is used.

+ +

BUGS

+ +

SMIME_write_CMS() always base64 encodes CMS structures, there should be an option to disable this.

+ +

RETURN VALUES

+ +

SMIME_write_CMS() returns 1 for success or 0 for failure.

+ +

SEE ALSO

+ +

ERR_get_error(3), CMS_sign(3), CMS_verify(3), CMS_encrypt(3) CMS_decrypt(3)

+ +

COPYRIGHT

+ +

Copyright 2008-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SMIME_write_PKCS7.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SMIME_write_PKCS7.html new file mode 100644 index 00000000..a0a7999e --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SMIME_write_PKCS7.html @@ -0,0 +1,78 @@ + + + + +SMIME_write_PKCS7 + + + + + + + + + + +

NAME

+ +

SMIME_write_PKCS7 - convert PKCS#7 structure to S/MIME format

+ +

SYNOPSIS

+ +
#include <openssl/pkcs7.h>
+
+int SMIME_write_PKCS7(BIO *out, PKCS7 *p7, BIO *data, int flags);
+ +

DESCRIPTION

+ +

SMIME_write_PKCS7() adds the appropriate MIME headers to a PKCS#7 structure to produce an S/MIME message.

+ +

out is the BIO to write the data to. p7 is the appropriate PKCS7 structure. If streaming is enabled then the content must be supplied in the data argument. flags is an optional set of flags.

+ +

NOTES

+ +

The following flags can be passed in the flags parameter.

+ +

If PKCS7_DETACHED is set then cleartext signing will be used, this option only makes sense for signedData where PKCS7_DETACHED is also set when PKCS7_sign() is also called.

+ +

If the PKCS7_TEXT flag is set MIME headers for type text/plain are added to the content, this only makes sense if PKCS7_DETACHED is also set.

+ +

If the PKCS7_STREAM flag is set streaming is performed. This flag should only be set if PKCS7_STREAM was also set in the previous call to PKCS7_sign() or PKCS7_encrypt().

+ +

If cleartext signing is being used and PKCS7_STREAM not set then the data must be read twice: once to compute the signature in PKCS7_sign() and once to output the S/MIME message.

+ +

If streaming is performed the content is output in BER format using indefinite length constructed encoding except in the case of signed data with detached content where the content is absent and DER format is used.

+ +

BUGS

+ +

SMIME_write_PKCS7() always base64 encodes PKCS#7 structures, there should be an option to disable this.

+ +

RETURN VALUES

+ +

SMIME_write_PKCS7() returns 1 for success or 0 for failure.

+ +

SEE ALSO

+ +

ERR_get_error(3), PKCS7_sign(3), PKCS7_verify(3), PKCS7_encrypt(3) PKCS7_decrypt(3)

+ +

COPYRIGHT

+ +

Copyright 2002-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CIPHER_get_name.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CIPHER_get_name.html new file mode 100644 index 00000000..850ae6ba --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CIPHER_get_name.html @@ -0,0 +1,181 @@ + + + + +SSL_CIPHER_get_name + + + + + + + + + + +

NAME

+ +

SSL_CIPHER_get_name, SSL_CIPHER_standard_name, OPENSSL_cipher_name, SSL_CIPHER_get_bits, SSL_CIPHER_get_version, SSL_CIPHER_description, SSL_CIPHER_get_cipher_nid, SSL_CIPHER_get_digest_nid, SSL_CIPHER_get_handshake_digest, SSL_CIPHER_get_kx_nid, SSL_CIPHER_get_auth_nid, SSL_CIPHER_is_aead, SSL_CIPHER_find, SSL_CIPHER_get_id, SSL_CIPHER_get_protocol_id - get SSL_CIPHER properties

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+const char *SSL_CIPHER_get_name(const SSL_CIPHER *cipher);
+const char *SSL_CIPHER_standard_name(const SSL_CIPHER *cipher);
+const char *OPENSSL_cipher_name(const char *stdname);
+int SSL_CIPHER_get_bits(const SSL_CIPHER *cipher, int *alg_bits);
+char *SSL_CIPHER_get_version(const SSL_CIPHER *cipher);
+char *SSL_CIPHER_description(const SSL_CIPHER *cipher, char *buf, int size);
+int SSL_CIPHER_get_cipher_nid(const SSL_CIPHER *c);
+int SSL_CIPHER_get_digest_nid(const SSL_CIPHER *c);
+const EVP_MD *SSL_CIPHER_get_handshake_digest(const SSL_CIPHER *c);
+int SSL_CIPHER_get_kx_nid(const SSL_CIPHER *c);
+int SSL_CIPHER_get_auth_nid(const SSL_CIPHER *c);
+int SSL_CIPHER_is_aead(const SSL_CIPHER *c);
+const SSL_CIPHER *SSL_CIPHER_find(SSL *ssl, const unsigned char *ptr);
+uint32_t SSL_CIPHER_get_id(const SSL_CIPHER *c);
+uint32_t SSL_CIPHER_get_protocol_id(const SSL_CIPHER *c);
+ +

DESCRIPTION

+ +

SSL_CIPHER_get_name() returns a pointer to the name of cipher. If the cipher is NULL, it returns "(NONE)".

+ +

SSL_CIPHER_standard_name() returns a pointer to the standard RFC name of cipher. If the cipher is NULL, it returns "(NONE)". If the cipher has no standard name, it returns NULL. If cipher was defined in both SSLv3 and TLS, it returns the TLS name.

+ +

OPENSSL_cipher_name() returns a pointer to the OpenSSL name of stdname. If the stdname is NULL, or stdname has no corresponding OpenSSL name, it returns "(NONE)". Where both exist, stdname should be the TLS name rather than the SSLv3 name.

+ +

SSL_CIPHER_get_bits() returns the number of secret bits used for cipher. If cipher is NULL, 0 is returned.

+ +

SSL_CIPHER_get_version() returns string which indicates the SSL/TLS protocol version that first defined the cipher. It returns "(NONE)" if cipher is NULL.

+ +

SSL_CIPHER_get_cipher_nid() returns the cipher NID corresponding to c. If there is no cipher (e.g. for cipher suites with no encryption) then NID_undef is returned.

+ +

SSL_CIPHER_get_digest_nid() returns the digest NID corresponding to the MAC used by c during record encryption/decryption. If there is no digest (e.g. for AEAD cipher suites) then NID_undef is returned.

+ +

SSL_CIPHER_get_handshake_digest() returns an EVP_MD for the digest used during the SSL/TLS handshake when using the SSL_CIPHER c. Note that this may be different to the digest used to calculate the MAC for encrypted records.

+ +

SSL_CIPHER_get_kx_nid() returns the key exchange NID corresponding to the method used by c. If there is no key exchange, then NID_undef is returned. If any appropriate key exchange algorithm can be used (as in the case of TLS 1.3 cipher suites) NID_kx_any is returned. Examples (not comprehensive):

+ +
NID_kx_rsa
+NID_kx_ecdhe
+NID_kx_dhe
+NID_kx_psk
+ +

SSL_CIPHER_get_auth_nid() returns the authentication NID corresponding to the method used by c. If there is no authentication, then NID_undef is returned. If any appropriate authentication algorithm can be used (as in the case of TLS 1.3 cipher suites) NID_auth_any is returned. Examples (not comprehensive):

+ +
NID_auth_rsa
+NID_auth_ecdsa
+NID_auth_psk
+ +

SSL_CIPHER_is_aead() returns 1 if the cipher c is AEAD (e.g. GCM or ChaCha20/Poly1305), and 0 if it is not AEAD.

+ +

SSL_CIPHER_find() returns a SSL_CIPHER structure which has the cipher ID stored in ptr. The ptr parameter is a two element array of char, which stores the two-byte TLS cipher ID (as allocated by IANA) in network byte order. This parameter is usually retrieved from a TLS packet by using functions like SSL_client_hello_get0_ciphers(3). SSL_CIPHER_find() returns NULL if an error occurs or the indicated cipher is not found.

+ +

SSL_CIPHER_get_id() returns the OpenSSL-specific ID of the given cipher c. That ID is not the same as the IANA-specific ID.

+ +

SSL_CIPHER_get_protocol_id() returns the two-byte ID used in the TLS protocol of the given cipher c.

+ +

SSL_CIPHER_description() returns a textual description of the cipher used into the buffer buf of length len provided. If buf is provided, it must be at least 128 bytes, otherwise a buffer will be allocated using OPENSSL_malloc(). If the provided buffer is too small, or the allocation fails, NULL is returned.

+ +

The string returned by SSL_CIPHER_description() consists of several fields separated by whitespace:

+ +
+ +
<ciphername>
+
+ +

Textual representation of the cipher name.

+ +
+
<protocol version>
+
+ +

The minimum protocol version that the ciphersuite supports, such as TLSv1.2. Note that this is not always the same as the protocol version in which the ciphersuite was first defined because some ciphersuites are backwards compatible with earlier protocol versions.

+ +
+
Kx=<key exchange>
+
+ +

Key exchange method such as RSA, ECDHE, etc.

+ +
+
Au=<authentication>
+
+ +

Authentication method such as RSA, None, etc.. None is the representation of anonymous ciphers.

+ +
+
Enc=<symmetric encryption method>
+
+ +

Encryption method, with number of secret bits, such as AESGCM(128).

+ +
+
Mac=<message authentication code>
+
+ +

Message digest, such as SHA256.

+ +
+
+ +

Some examples for the output of SSL_CIPHER_description():

+ +
ECDHE-RSA-AES256-GCM-SHA256 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AESGCM(256) Mac=AEAD
+RSA-PSK-AES256-CBC-SHA384 TLSv1.0 Kx=RSAPSK   Au=RSA  Enc=AES(256)  Mac=SHA384
+ +

RETURN VALUES

+ +

SSL_CIPHER_get_name(), SSL_CIPHER_standard_name(), OPENSSL_cipher_name(), SSL_CIPHER_get_version() and SSL_CIPHER_description() return the corresponding value in a null-terminated string for a specific cipher or "(NONE)" if the cipher is not found.

+ +

SSL_CIPHER_get_bits() returns a positive integer representing the number of secret bits or 0 if an error occurred.

+ +

SSL_CIPHER_get_cipher_nid(), SSL_CIPHER_get_digest_nid(), SSL_CIPHER_get_kx_nid() and SSL_CIPHER_get_auth_nid() return the NID value or NID_undef if an error occurred.

+ +

SSL_CIPHER_get_handshake_digest() returns a valid EVP_MD structure or NULL if an error occurred.

+ +

SSL_CIPHER_is_aead() returns 1 if the cipher is AEAD or 0 otherwise.

+ +

SSL_CIPHER_find() returns a valid SSL_CIPHER structure or NULL if an error occurred.

+ +

SSL_CIPHER_get_id() returns a 4-byte integer representing the OpenSSL-specific ID.

+ +

SSL_CIPHER_get_protocol_id() returns a 2-byte integer representing the TLS protocol-specific ID.

+ +

SEE ALSO

+ +

ssl(7), SSL_get_current_cipher(3), SSL_get_ciphers(3), ciphers(1)

+ +

HISTORY

+ +

The SSL_CIPHER_get_version() function was updated to always return the correct protocol string in OpenSSL 1.1.0.

+ +

The SSL_CIPHER_description() function was changed to return NULL on error, rather than a fixed string, in OpenSSL 1.1.0.

+ +

The SSL_CIPHER_get_handshake_digest() function was added in OpenSSL 1.1.1.

+ +

The SSL_CIPHER_standard_name() function was globally available in OpenSSL 1.1.1. Before OpenSSL 1.1.1, tracing (enable-ssl-trace argument to Configure) was required to enable this function.

+ +

The OPENSSL_cipher_name() function was added in OpenSSL 1.1.1.

+ +

COPYRIGHT

+ +

Copyright 2000-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_COMP_add_compression_method.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_COMP_add_compression_method.html new file mode 100644 index 00000000..3253f753 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_COMP_add_compression_method.html @@ -0,0 +1,111 @@ + + + + +SSL_COMP_add_compression_method + + + + + + + + + + +

NAME

+ +

SSL_COMP_add_compression_method, SSL_COMP_get_compression_methods, SSL_COMP_get0_name, SSL_COMP_get_id, SSL_COMP_free_compression_methods - handle SSL/TLS integrated compression methods

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+int SSL_COMP_add_compression_method(int id, COMP_METHOD *cm);
+STACK_OF(SSL_COMP) *SSL_COMP_get_compression_methods(void);
+const char *SSL_COMP_get0_name(const SSL_COMP *comp);
+int SSL_COMP_get_id(const SSL_COMP *comp);
+ +

Deprecated:

+ +
#if OPENSSL_API_COMPAT < 0x10100000L
+void SSL_COMP_free_compression_methods(void)
+#endif
+ +

DESCRIPTION

+ +

SSL_COMP_add_compression_method() adds the compression method cm with the identifier id to the list of available compression methods. This list is globally maintained for all SSL operations within this application. It cannot be set for specific SSL_CTX or SSL objects.

+ +

SSL_COMP_get_compression_methods() returns a stack of all of the available compression methods or NULL on error.

+ +

SSL_COMP_get0_name() returns the name of the compression method comp.

+ +

SSL_COMP_get_id() returns the id of the compression method comp.

+ +

SSL_COMP_free_compression_methods() releases any resources acquired to maintain the internal table of compression methods.

+ +

NOTES

+ +

The TLS standard (or SSLv3) allows the integration of compression methods into the communication. The TLS RFC does however not specify compression methods or their corresponding identifiers, so there is currently no compatible way to integrate compression with unknown peers. It is therefore currently not recommended to integrate compression into applications. Applications for non-public use may agree on certain compression methods. Using different compression methods with the same identifier will lead to connection failure.

+ +

An OpenSSL client speaking a protocol that allows compression (SSLv3, TLSv1) will unconditionally send the list of all compression methods enabled with SSL_COMP_add_compression_method() to the server during the handshake. Unlike the mechanisms to set a cipher list, there is no method available to restrict the list of compression method on a per connection basis.

+ +

An OpenSSL server will match the identifiers listed by a client against its own compression methods and will unconditionally activate compression when a matching identifier is found. There is no way to restrict the list of compression methods supported on a per connection basis.

+ +

If enabled during compilation, the OpenSSL library will have the COMP_zlib() compression method available.

+ +

RETURN VALUES

+ +

SSL_COMP_add_compression_method() may return the following values:

+ +
+ +
0
+
+ +

The operation succeeded.

+ +
+
1
+
+ +

The operation failed. Check the error queue to find out the reason.

+ +
+
+ +

SSL_COMP_get_compression_methods() returns the stack of compressions methods or NULL on error.

+ +

SSL_COMP_get0_name() returns the name of the compression method or NULL on error.

+ +

SSL_COMP_get_id() returns the name of the compression method or -1 on error.

+ +

SEE ALSO

+ +

ssl(7)

+ +

HISTORY

+ +

The SSL_COMP_free_compression_methods() function was deprecated in OpenSSL 1.1.0. The SSL_COMP_get0_name() and SSL_comp_get_id() functions were added in OpenSSL 1.1.0d.

+ +

COPYRIGHT

+ +

Copyright 2001-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CONF_CTX_new.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CONF_CTX_new.html new file mode 100644 index 00000000..c3371bc6 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CONF_CTX_new.html @@ -0,0 +1,66 @@ + + + + +SSL_CONF_CTX_new + + + + + + + + + + +

NAME

+ +

SSL_CONF_CTX_new, SSL_CONF_CTX_free - SSL configuration allocation functions

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+SSL_CONF_CTX *SSL_CONF_CTX_new(void);
+void SSL_CONF_CTX_free(SSL_CONF_CTX *cctx);
+ +

DESCRIPTION

+ +

The function SSL_CONF_CTX_new() allocates and initialises an SSL_CONF_CTX structure for use with the SSL_CONF functions.

+ +

The function SSL_CONF_CTX_free() frees up the context cctx. If cctx is NULL nothing is done.

+ +

RETURN VALUES

+ +

SSL_CONF_CTX_new() returns either the newly allocated SSL_CONF_CTX structure or NULL if an error occurs.

+ +

SSL_CONF_CTX_free() does not return a value.

+ +

SEE ALSO

+ +

SSL_CONF_CTX_set_flags(3), SSL_CONF_CTX_set_ssl_ctx(3), SSL_CONF_CTX_set1_prefix(3), SSL_CONF_cmd(3), SSL_CONF_cmd_argv(3)

+ +

HISTORY

+ +

These functions were added in OpenSSL 1.0.2.

+ +

COPYRIGHT

+ +

Copyright 2012-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CONF_CTX_set1_prefix.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CONF_CTX_set1_prefix.html new file mode 100644 index 00000000..b49e0dcf --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CONF_CTX_set1_prefix.html @@ -0,0 +1,70 @@ + + + + +SSL_CONF_CTX_set1_prefix + + + + + + + + + + +

NAME

+ +

SSL_CONF_CTX_set1_prefix - Set configuration context command prefix

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+unsigned int SSL_CONF_CTX_set1_prefix(SSL_CONF_CTX *cctx, const char *prefix);
+ +

DESCRIPTION

+ +

The function SSL_CONF_CTX_set1_prefix() sets the command prefix of cctx to prefix. If prefix is NULL it is restored to the default value.

+ +

NOTES

+ +

Command prefixes alter the commands recognised by subsequent SSL_CONF_cmd() calls. For example for files, if the prefix "SSL" is set then command names such as "SSLProtocol", "SSLOptions" etc. are recognised instead of "Protocol" and "Options". Similarly for command lines if the prefix is "--ssl-" then "--ssl-no_tls1_2" is recognised instead of "-no_tls1_2".

+ +

If the SSL_CONF_FLAG_CMDLINE flag is set then prefix checks are case sensitive and "-" is the default. In the unlikely even an application explicitly wants to set no prefix it must be explicitly set to "".

+ +

If the SSL_CONF_FLAG_FILE flag is set then prefix checks are case insensitive and no prefix is the default.

+ +

RETURN VALUES

+ +

SSL_CONF_CTX_set1_prefix() returns 1 for success and 0 for failure.

+ +

SEE ALSO

+ +

SSL_CONF_CTX_new(3), SSL_CONF_CTX_set_flags(3), SSL_CONF_CTX_set_ssl_ctx(3), SSL_CONF_cmd(3), SSL_CONF_cmd_argv(3)

+ +

HISTORY

+ +

These functions were added in OpenSSL 1.0.2.

+ +

COPYRIGHT

+ +

Copyright 2012-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CONF_CTX_set_flags.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CONF_CTX_set_flags.html new file mode 100644 index 00000000..280bf767 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CONF_CTX_set_flags.html @@ -0,0 +1,105 @@ + + + + +SSL_CONF_CTX_set_flags + + + + + + + + + + +

NAME

+ +

SSL_CONF_CTX_set_flags, SSL_CONF_CTX_clear_flags - Set or clear SSL configuration context flags

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+unsigned int SSL_CONF_CTX_set_flags(SSL_CONF_CTX *cctx, unsigned int flags);
+unsigned int SSL_CONF_CTX_clear_flags(SSL_CONF_CTX *cctx, unsigned int flags);
+ +

DESCRIPTION

+ +

The function SSL_CONF_CTX_set_flags() sets flags in the context cctx.

+ +

The function SSL_CONF_CTX_clear_flags() clears flags in the context cctx.

+ +

NOTES

+ +

The flags set affect how subsequent calls to SSL_CONF_cmd() or SSL_CONF_argv() behave.

+ +

Currently the following flags values are recognised:

+ +
+ +
SSL_CONF_FLAG_CMDLINE, SSL_CONF_FLAG_FILE
+
+ +

recognise options intended for command line or configuration file use. At least one of these flags must be set.

+ +
+
SSL_CONF_FLAG_CLIENT, SSL_CONF_FLAG_SERVER
+
+ +

recognise options intended for use in SSL/TLS clients or servers. One or both of these flags must be set.

+ +
+
SSL_CONF_FLAG_CERTIFICATE
+
+ +

recognise certificate and private key options.

+ +
+
SSL_CONF_FLAG_REQUIRE_PRIVATE
+
+ +

If this option is set then if a private key is not specified for a certificate it will attempt to load a private key from the certificate file when SSL_CONF_CTX_finish() is called. If a key cannot be loaded from the certificate file an error occurs.

+ +
+
SSL_CONF_FLAG_SHOW_ERRORS
+
+ +

indicate errors relating to unrecognised options or missing arguments in the error queue. If this option isn't set such errors are only reflected in the return values of SSL_CONF_set_cmd() or SSL_CONF_set_argv()

+ +
+
+ +

RETURN VALUES

+ +

SSL_CONF_CTX_set_flags() and SSL_CONF_CTX_clear_flags() returns the new flags value after setting or clearing flags.

+ +

SEE ALSO

+ +

SSL_CONF_CTX_new(3), SSL_CONF_CTX_set_ssl_ctx(3), SSL_CONF_CTX_set1_prefix(3), SSL_CONF_cmd(3), SSL_CONF_cmd_argv(3)

+ +

HISTORY

+ +

These functions were added in OpenSSL 1.0.2.

+ +

COPYRIGHT

+ +

Copyright 2012-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CONF_CTX_set_ssl_ctx.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CONF_CTX_set_ssl_ctx.html new file mode 100644 index 00000000..031cda52 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CONF_CTX_set_ssl_ctx.html @@ -0,0 +1,69 @@ + + + + +SSL_CONF_CTX_set_ssl_ctx + + + + + + + + + + +

NAME

+ +

SSL_CONF_CTX_set_ssl_ctx, SSL_CONF_CTX_set_ssl - set context to configure

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+void SSL_CONF_CTX_set_ssl_ctx(SSL_CONF_CTX *cctx, SSL_CTX *ctx);
+void SSL_CONF_CTX_set_ssl(SSL_CONF_CTX *cctx, SSL *ssl);
+ +

DESCRIPTION

+ +

SSL_CONF_CTX_set_ssl_ctx() sets the context associated with cctx to the SSL_CTX structure ctx. Any previous SSL or SSL_CTX associated with cctx is cleared. Subsequent calls to SSL_CONF_cmd() will be sent to ctx.

+ +

SSL_CONF_CTX_set_ssl() sets the context associated with cctx to the SSL structure ssl. Any previous SSL or SSL_CTX associated with cctx is cleared. Subsequent calls to SSL_CONF_cmd() will be sent to ssl.

+ +

NOTES

+ +

The context need not be set or it can be set to NULL in which case only syntax checking of commands is performed, where possible.

+ +

RETURN VALUES

+ +

SSL_CONF_CTX_set_ssl_ctx() and SSL_CTX_set_ssl() do not return a value.

+ +

SEE ALSO

+ +

SSL_CONF_CTX_new(3), SSL_CONF_CTX_set_flags(3), SSL_CONF_CTX_set1_prefix(3), SSL_CONF_cmd(3), SSL_CONF_cmd_argv(3)

+ +

HISTORY

+ +

These functions were added in OpenSSL 1.0.2.

+ +

COPYRIGHT

+ +

Copyright 2012-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CONF_cmd.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CONF_cmd.html new file mode 100644 index 00000000..9934b55d --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CONF_cmd.html @@ -0,0 +1,556 @@ + + + + +SSL_CONF_cmd + + + + + + + + + + +

NAME

+ +

SSL_CONF_cmd_value_type, SSL_CONF_cmd - send configuration command

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+int SSL_CONF_cmd(SSL_CONF_CTX *cctx, const char *cmd, const char *value);
+int SSL_CONF_cmd_value_type(SSL_CONF_CTX *cctx, const char *cmd);
+ +

DESCRIPTION

+ +

The function SSL_CONF_cmd() performs configuration operation cmd with optional parameter value on ctx. Its purpose is to simplify application configuration of SSL_CTX or SSL structures by providing a common framework for command line options or configuration files.

+ +

SSL_CONF_cmd_value_type() returns the type of value that cmd refers to.

+ +

SUPPORTED COMMAND LINE COMMANDS

+ +

Currently supported cmd names for command lines (i.e. when the flag SSL_CONF_CMDLINE is set) are listed below. Note: all cmd names are case sensitive. Unless otherwise stated commands can be used by both clients and servers and the value parameter is not used. The default prefix for command line commands is - and that is reflected below.

+ +
+ +
-sigalgs
+
+ +

This sets the supported signature algorithms for TLSv1.2 and TLSv1.3. For clients this value is used directly for the supported signature algorithms extension. For servers it is used to determine which signature algorithms to support.

+ +

The value argument should be a colon separated list of signature algorithms in order of decreasing preference of the form algorithm+hash or signature_scheme. algorithm is one of RSA, DSA or ECDSA and hash is a supported algorithm OID short name such as SHA1, SHA224, SHA256, SHA384 of SHA512. Note: algorithm and hash names are case sensitive. signature_scheme is one of the signature schemes defined in TLSv1.3, specified using the IETF name, e.g., ecdsa_secp256r1_sha256, ed25519, or rsa_pss_pss_sha256.

+ +

If this option is not set then all signature algorithms supported by the OpenSSL library are permissible.

+ +

Note: algorithms which specify a PKCS#1 v1.5 signature scheme (either by using RSA as the algorithm or by using one of the rsa_pkcs1_* identifiers) are ignored in TLSv1.3 and will not be negotiated.

+ +
+
-client_sigalgs
+
+ +

This sets the supported signature algorithms associated with client authentication for TLSv1.2 and TLSv1.3. For servers the value is used in the signature_algorithms field of a CertificateRequest message. For clients it is used to determine which signature algorithm to use with the client certificate. If a server does not request a certificate this option has no effect.

+ +

The syntax of value is identical to -sigalgs. If not set then the value set for -sigalgs will be used instead.

+ +
+
-groups
+
+ +

This sets the supported groups. For clients, the groups are sent using the supported groups extension. For servers, it is used to determine which group to use. This setting affects groups used for signatures (in TLSv1.2 and earlier) and key exchange. The first group listed will also be used for the key_share sent by a client in a TLSv1.3 ClientHello.

+ +

The value argument is a colon separated list of groups. The group can be either the NIST name (e.g. P-256), some other commonly used name where applicable (e.g. X25519) or an OpenSSL OID name (e.g prime256v1). Group names are case sensitive. The list should be in order of preference with the most preferred group first.

+ +
+
-curves
+
+ +

This is a synonym for the "-groups" command.

+ +
+
-named_curve
+
+ +

This sets the temporary curve used for ephemeral ECDH modes. Only used by servers

+ +

The value argument is a curve name or the special value auto which picks an appropriate curve based on client and server preferences. The curve can be either the NIST name (e.g. P-256) or an OpenSSL OID name (e.g prime256v1). Curve names are case sensitive.

+ +
+
-cipher
+
+ +

Sets the TLSv1.2 and below ciphersuite list to value. This list will be combined with any configured TLSv1.3 ciphersuites. Note: syntax checking of value is currently not performed unless a SSL or SSL_CTX structure is associated with cctx.

+ +
+
-ciphersuites
+
+ +

Sets the available ciphersuites for TLSv1.3 to value. This is a simple colon (":") separated list of TLSv1.3 ciphersuite names in order of preference. This list will be combined any configured TLSv1.2 and below ciphersuites. See ciphers(1) for more information.

+ +
+
-cert
+
+ +

Attempts to use the file value as the certificate for the appropriate context. It currently uses SSL_CTX_use_certificate_chain_file() if an SSL_CTX structure is set or SSL_use_certificate_file() with filetype PEM if an SSL structure is set. This option is only supported if certificate operations are permitted.

+ +
+
-key
+
+ +

Attempts to use the file value as the private key for the appropriate context. This option is only supported if certificate operations are permitted. Note: if no -key option is set then a private key is not loaded unless the flag SSL_CONF_FLAG_REQUIRE_PRIVATE is set.

+ +
+
-dhparam
+
+ +

Attempts to use the file value as the set of temporary DH parameters for the appropriate context. This option is only supported if certificate operations are permitted.

+ +
+
-record_padding
+
+ +

Attempts to pad TLSv1.3 records so that they are a multiple of value in length on send. A value of 0 or 1 turns off padding. Otherwise, the value must be >1 or <=16384.

+ +
+
-no_renegotiation
+
+ +

Disables all attempts at renegotiation in TLSv1.2 and earlier, same as setting SSL_OP_NO_RENEGOTIATION.

+ +
+
-min_protocol, -max_protocol
+
+ +

Sets the minimum and maximum supported protocol. Currently supported protocol values are SSLv3, TLSv1, TLSv1.1, TLSv1.2, TLSv1.3 for TLS and DTLSv1, DTLSv1.2 for DTLS, and 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.

+ +
+
-no_ssl3, -no_tls1, -no_tls1_1, -no_tls1_2, -no_tls1_3
+
+ +

Disables protocol support for SSLv3, TLSv1.0, TLSv1.1, TLSv1.2 or TLSv1.3 by setting the corresponding options SSL_OP_NO_SSLv3, SSL_OP_NO_TLSv1, SSL_OP_NO_TLSv1_1, SSL_OP_NO_TLSv1_2 and SSL_OP_NO_TLSv1_3 respectively. These options are deprecated, instead use -min_protocol and -max_protocol.

+ +
+
-bugs
+
+ +

Various bug workarounds are set, same as setting SSL_OP_ALL.

+ +
+
-comp
+
+ +

Enables support for SSL/TLS compression, same as clearing SSL_OP_NO_COMPRESSION. This command was introduced in OpenSSL 1.1.0. As of OpenSSL 1.1.0, compression is off by default.

+ +
+
-no_comp
+
+ +

Disables support for SSL/TLS compression, same as setting SSL_OP_NO_COMPRESSION. As of OpenSSL 1.1.0, compression is off by default.

+ +
+
-no_ticket
+
+ +

Disables support for session tickets, same as setting SSL_OP_NO_TICKET.

+ +
+
-serverpref
+
+ +

Use server and not client preference order when determining which cipher suite, signature algorithm or elliptic curve to use for an incoming connection. Equivalent to SSL_OP_CIPHER_SERVER_PREFERENCE. Only used by servers.

+ +
+
-prioritize_chacha
+
+ +

Prioritize ChaCha ciphers when the client has a ChaCha20 cipher at the top of its preference list. This usually indicates a client without AES hardware acceleration (e.g. mobile) is in use. Equivalent to SSL_OP_PRIORITIZE_CHACHA. Only used by servers. Requires -serverpref.

+ +
+
-no_resumption_on_reneg
+
+ +

set SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION flag. Only used by servers.

+ +
+
-legacyrenegotiation
+
+ +

permits the use of unsafe legacy renegotiation. Equivalent to setting SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION.

+ +
+
-legacy_server_connect, -no_legacy_server_connect
+
+ +

permits or prohibits the use of unsafe legacy renegotiation for OpenSSL clients only. Equivalent to setting or clearing SSL_OP_LEGACY_SERVER_CONNECT. Set by default.

+ +
+
-allow_no_dhe_kex
+
+ +

In TLSv1.3 allow a non-(ec)dhe based key exchange mode on resumption. This means that there will be no forward secrecy for the resumed session.

+ +
+
-strict
+
+ +

enables strict mode protocol handling. Equivalent to setting SSL_CERT_FLAG_TLS_STRICT.

+ +
+
-anti_replay, -no_anti_replay
+
+ +

Switches replay protection, on or off respectively. With replay protection on, OpenSSL will automatically detect if a session ticket has been used more than once, TLSv1.3 has been negotiated, and early data is enabled on the server. A full handshake is forced if a session ticket is used a second or subsequent time. Anti-Replay is on by default unless overridden by a configuration file and is only used by servers. Anti-replay measures are required for compliance with the TLSv1.3 specification. Some applications may be able to mitigate the replay risks in other ways and in such cases the built-in OpenSSL functionality is not required. Switching off anti-replay is equivalent to SSL_OP_NO_ANTI_REPLAY.

+ +
+
+ +

SUPPORTED CONFIGURATION FILE COMMANDS

+ +

Currently supported cmd names for configuration files (i.e. when the flag SSL_CONF_FLAG_FILE is set) are listed below. All configuration file cmd names are case insensitive so signaturealgorithms is recognised as well as SignatureAlgorithms. Unless otherwise stated the value names are also case insensitive.

+ +

Note: the command prefix (if set) alters the recognised cmd values.

+ +
+ +
CipherString
+
+ +

Sets the ciphersuite list for TLSv1.2 and below to value. This list will be combined with any configured TLSv1.3 ciphersuites. Note: syntax checking of value is currently not performed unless an SSL or SSL_CTX structure is associated with cctx.

+ +
+
Ciphersuites
+
+ +

Sets the available ciphersuites for TLSv1.3 to value. This is a simple colon (":") separated list of TLSv1.3 ciphersuite names in order of preference. This list will be combined any configured TLSv1.2 and below ciphersuites. See ciphers(1) for more information.

+ +
+
Certificate
+
+ +

Attempts to use the file value as the certificate for the appropriate context. It currently uses SSL_CTX_use_certificate_chain_file() if an SSL_CTX structure is set or SSL_use_certificate_file() with filetype PEM if an SSL structure is set. This option is only supported if certificate operations are permitted.

+ +
+
PrivateKey
+
+ +

Attempts to use the file value as the private key for the appropriate context. This option is only supported if certificate operations are permitted. Note: if no PrivateKey option is set then a private key is not loaded unless the SSL_CONF_FLAG_REQUIRE_PRIVATE is set.

+ +
+
ChainCAFile, ChainCAPath, VerifyCAFile, VerifyCAPath
+
+ +

These options indicate a file or directory used for building certificate chains or verifying certificate chains. These options are only supported if certificate operations are permitted.

+ +
+
RequestCAFile
+
+ +

This option indicates a file containing a set of certificates in PEM form. The subject names of the certificates are sent to the peer in the certificate_authorities extension for TLS 1.3 (in ClientHello or CertificateRequest) or in a certificate request for previous versions or TLS.

+ +
+
ServerInfoFile
+
+ +

Attempts to use the file value in the "serverinfo" extension using the function SSL_CTX_use_serverinfo_file.

+ +
+
DHParameters
+
+ +

Attempts to use the file value as the set of temporary DH parameters for the appropriate context. This option is only supported if certificate operations are permitted.

+ +
+
RecordPadding
+
+ +

Attempts to pad TLSv1.3 records so that they are a multiple of value in length on send. A value of 0 or 1 turns off padding. Otherwise, the value must be >1 or <=16384.

+ +
+
SignatureAlgorithms
+
+ +

This sets the supported signature algorithms for TLSv1.2 and TLSv1.3. For clients this value is used directly for the supported signature algorithms extension. For servers it is used to determine which signature algorithms to support.

+ +

The value argument should be a colon separated list of signature algorithms in order of decreasing preference of the form algorithm+hash or signature_scheme. algorithm is one of RSA, DSA or ECDSA and hash is a supported algorithm OID short name such as SHA1, SHA224, SHA256, SHA384 of SHA512. Note: algorithm and hash names are case sensitive. signature_scheme is one of the signature schemes defined in TLSv1.3, specified using the IETF name, e.g., ecdsa_secp256r1_sha256, ed25519, or rsa_pss_pss_sha256.

+ +

If this option is not set then all signature algorithms supported by the OpenSSL library are permissible.

+ +

Note: algorithms which specify a PKCS#1 v1.5 signature scheme (either by using RSA as the algorithm or by using one of the rsa_pkcs1_* identifiers) are ignored in TLSv1.3 and will not be negotiated.

+ +
+
ClientSignatureAlgorithms
+
+ +

This sets the supported signature algorithms associated with client authentication for TLSv1.2 and TLSv1.3. For servers the value is used in the signature_algorithms field of a CertificateRequest message. For clients it is used to determine which signature algorithm to use with the client certificate. If a server does not request a certificate this option has no effect.

+ +

The syntax of value is identical to SignatureAlgorithms. If not set then the value set for SignatureAlgorithms will be used instead.

+ +
+
Groups
+
+ +

This sets the supported groups. For clients, the groups are sent using the supported groups extension. For servers, it is used to determine which group to use. This setting affects groups used for signatures (in TLSv1.2 and earlier) and key exchange. The first group listed will also be used for the key_share sent by a client in a TLSv1.3 ClientHello.

+ +

The value argument is a colon separated list of groups. The group can be either the NIST name (e.g. P-256), some other commonly used name where applicable (e.g. X25519) or an OpenSSL OID name (e.g prime256v1). Group names are case sensitive. The list should be in order of preference with the most preferred group first.

+ +
+
Curves
+
+ +

This is a synonym for the "Groups" command.

+ +
+
MinProtocol
+
+ +

This sets the minimum supported SSL, TLS or DTLS version.

+ +

Currently supported protocol values are SSLv3, TLSv1, TLSv1.1, TLSv1.2, TLSv1.3, DTLSv1 and DTLSv1.2. The value None will disable the limit.

+ +
+
MaxProtocol
+
+ +

This sets the maximum supported SSL, TLS or DTLS version.

+ +

Currently supported protocol values are SSLv3, TLSv1, TLSv1.1, TLSv1.2, TLSv1.3, DTLSv1 and DTLSv1.2. The value None will disable the limit.

+ +
+
Protocol
+
+ +

This can be used to enable or disable certain versions of the SSL, TLS or DTLS protocol.

+ +

The value argument is a comma separated list of supported protocols to enable or disable. If a protocol is preceded by - that version is disabled.

+ +

All protocol versions are enabled by default. You need to disable at least one protocol version for this setting have any effect. Only enabling some protocol versions does not disable the other protocol versions.

+ +

Currently supported protocol values are SSLv3, TLSv1, TLSv1.1, TLSv1.2, TLSv1.3, DTLSv1 and DTLSv1.2. The special value ALL refers to all supported versions.

+ +

This can't enable protocols that are disabled using MinProtocol or MaxProtocol, but can disable protocols that are still allowed by them.

+ +

The Protocol command is fragile and deprecated; do not use it. Use MinProtocol and MaxProtocol instead. If you do use Protocol, make sure that the resulting range of enabled protocols has no "holes", e.g. if TLS 1.0 and TLS 1.2 are both enabled, make sure to also leave TLS 1.1 enabled.

+ +
+
Options
+
+ +

The value argument is a comma separated list of various flags to set. If a flag string is preceded - it is disabled. See the SSL_CTX_set_options(3) function for more details of individual options.

+ +

Each option is listed below. Where an operation is enabled by default the -flag syntax is needed to disable it.

+ +

SessionTicket: session ticket support, enabled by default. Inverse of SSL_OP_NO_TICKET: that is -SessionTicket is the same as setting SSL_OP_NO_TICKET.

+ +

Compression: SSL/TLS compression support, enabled by default. Inverse of SSL_OP_NO_COMPRESSION.

+ +

EmptyFragments: use empty fragments as a countermeasure against a SSL 3.0/TLS 1.0 protocol vulnerability affecting CBC ciphers. It is set by default. Inverse of SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS.

+ +

Bugs: enable various bug workarounds. Same as SSL_OP_ALL.

+ +

DHSingle: enable single use DH keys, set by default. Inverse of SSL_OP_DH_SINGLE. Only used by servers.

+ +

ECDHSingle: enable single use ECDH keys, set by default. Inverse of SSL_OP_ECDH_SINGLE. Only used by servers.

+ +

ServerPreference: use server and not client preference order when determining which cipher suite, signature algorithm or elliptic curve to use for an incoming connection. Equivalent to SSL_OP_CIPHER_SERVER_PREFERENCE. Only used by servers.

+ +

PrioritizeChaCha: prioritizes ChaCha ciphers when the client has a ChaCha20 cipher at the top of its preference list. This usually indicates a mobile client is in use. Equivalent to SSL_OP_PRIORITIZE_CHACHA. Only used by servers.

+ +

NoResumptionOnRenegotiation: set SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION flag. Only used by servers.

+ +

NoRenegotiation: disables all attempts at renegotiation in TLSv1.2 and earlier, same as setting SSL_OP_NO_RENEGOTIATION.

+ +

UnsafeLegacyRenegotiation: permits the use of unsafe legacy renegotiation. Equivalent to SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION.

+ +

UnsafeLegacyServerConnect: permits the use of unsafe legacy renegotiation for OpenSSL clients only. Equivalent to SSL_OP_LEGACY_SERVER_CONNECT. Set by default.

+ +

EncryptThenMac: use encrypt-then-mac extension, enabled by default. Inverse of SSL_OP_NO_ENCRYPT_THEN_MAC: that is, -EncryptThenMac is the same as setting SSL_OP_NO_ENCRYPT_THEN_MAC.

+ +

AllowNoDHEKEX: In TLSv1.3 allow a non-(ec)dhe based key exchange mode on resumption. This means that there will be no forward secrecy for the resumed session. Equivalent to SSL_OP_ALLOW_NO_DHE_KEX.

+ +

MiddleboxCompat: If set then dummy Change Cipher Spec (CCS) messages are sent in TLSv1.3. This has the effect of making TLSv1.3 look more like TLSv1.2 so that middleboxes that do not understand TLSv1.3 will not drop the connection. This option is set by default. A future version of OpenSSL may not set this by default. Equivalent to SSL_OP_ENABLE_MIDDLEBOX_COMPAT.

+ +

AntiReplay: If set then OpenSSL will automatically detect if a session ticket has been used more than once, TLSv1.3 has been negotiated, and early data is enabled on the server. A full handshake is forced if a session ticket is used a second or subsequent time. This option is set by default and is only used by servers. Anti-replay measures are required to comply with the TLSv1.3 specification. Some applications may be able to mitigate the replay risks in other ways and in such cases the built-in OpenSSL functionality is not required. Disabling anti-replay is equivalent to setting SSL_OP_NO_ANTI_REPLAY.

+ +
+
VerifyMode
+
+ +

The value argument is a comma separated list of flags to set.

+ +

Peer enables peer verification: for clients only.

+ +

Request requests but does not require a certificate from the client. Servers only.

+ +

Require requests and requires a certificate from the client: an error occurs if the client does not present a certificate. Servers only.

+ +

Once requests a certificate from a client only on the initial connection: not when renegotiating. Servers only.

+ +

RequestPostHandshake configures the connection to support requests but does not require a certificate from the client post-handshake. A certificate will not be requested during the initial handshake. The server application must provide a mechanism to request a certificate post-handshake. Servers only. TLSv1.3 only.

+ +

RequiresPostHandshake configures the connection to support requests and requires a certificate from the client post-handshake: an error occurs if the client does not present a certificate. A certificate will not be requested during the initial handshake. The server application must provide a mechanism to request a certificate post-handshake. Servers only. TLSv1.3 only.

+ +
+
ClientCAFile, ClientCAPath
+
+ +

A file or directory of certificates in PEM format whose names are used as the set of acceptable names for client CAs. Servers only. This option is only supported if certificate operations are permitted.

+ +
+
+ +

SUPPORTED COMMAND TYPES

+ +

The function SSL_CONF_cmd_value_type() currently returns one of the following types:

+ +
+ +
SSL_CONF_TYPE_UNKNOWN
+
+ +

The cmd string is unrecognised, this return value can be use to flag syntax errors.

+ +
+
SSL_CONF_TYPE_STRING
+
+ +

The value is a string without any specific structure.

+ +
+
SSL_CONF_TYPE_FILE
+
+ +

The value is a file name.

+ +
+
SSL_CONF_TYPE_DIR
+
+ +

The value is a directory name.

+ +
+
SSL_CONF_TYPE_NONE
+
+ +

The value string is not used e.g. a command line option which doesn't take an argument.

+ +
+
+ +

NOTES

+ +

The order of operations is significant. This can be used to set either defaults or values which cannot be overridden. For example if an application calls:

+ +
SSL_CONF_cmd(ctx, "Protocol", "-SSLv3");
+SSL_CONF_cmd(ctx, userparam, uservalue);
+ +

it will disable SSLv3 support by default but the user can override it. If however the call sequence is:

+ +
SSL_CONF_cmd(ctx, userparam, uservalue);
+SSL_CONF_cmd(ctx, "Protocol", "-SSLv3");
+ +

SSLv3 is always disabled and attempt to override this by the user are ignored.

+ +

By checking the return code of SSL_CONF_cmd() it is possible to query if a given cmd is recognised, this is useful if SSL_CONF_cmd() values are mixed with additional application specific operations.

+ +

For example an application might call SSL_CONF_cmd() and if it returns -2 (unrecognised command) continue with processing of application specific commands.

+ +

Applications can also use SSL_CONF_cmd() to process command lines though the utility function SSL_CONF_cmd_argv() is normally used instead. One way to do this is to set the prefix to an appropriate value using SSL_CONF_CTX_set1_prefix(), pass the current argument to cmd and the following argument to value (which may be NULL).

+ +

In this case if the return value is positive then it is used to skip that number of arguments as they have been processed by SSL_CONF_cmd(). If -2 is returned then cmd is not recognised and application specific arguments can be checked instead. If -3 is returned a required argument is missing and an error is indicated. If 0 is returned some other error occurred and this can be reported back to the user.

+ +

The function SSL_CONF_cmd_value_type() can be used by applications to check for the existence of a command or to perform additional syntax checking or translation of the command value. For example if the return value is SSL_CONF_TYPE_FILE an application could translate a relative pathname to an absolute pathname.

+ +

RETURN VALUES

+ +

SSL_CONF_cmd() returns 1 if the value of cmd is recognised and value is NOT used and 2 if both cmd and value are used. In other words it returns the number of arguments processed. This is useful when processing command lines.

+ +

A return value of -2 means cmd is not recognised.

+ +

A return value of -3 means cmd is recognised and the command requires a value but value is NULL.

+ +

A return code of 0 indicates that both cmd and value are valid but an error occurred attempting to perform the operation: for example due to an error in the syntax of value in this case the error queue may provide additional information.

+ +

EXAMPLES

+ +

Set supported signature algorithms:

+ +
SSL_CONF_cmd(ctx, "SignatureAlgorithms", "ECDSA+SHA256:RSA+SHA256:DSA+SHA256");
+ +

There are various ways to select the supported protocols.

+ +

This set the minimum protocol version to TLSv1, and so disables SSLv3. This is the recommended way to disable protocols.

+ +
SSL_CONF_cmd(ctx, "MinProtocol", "TLSv1");
+ +

The following also disables SSLv3:

+ +
SSL_CONF_cmd(ctx, "Protocol", "-SSLv3");
+ +

The following will first enable all protocols, and then disable SSLv3. If no protocol versions were disabled before this has the same effect as "-SSLv3", but if some versions were disables this will re-enable them before disabling SSLv3.

+ +
SSL_CONF_cmd(ctx, "Protocol", "ALL,-SSLv3");
+ +

Only enable TLSv1.2:

+ +
SSL_CONF_cmd(ctx, "MinProtocol", "TLSv1.2");
+SSL_CONF_cmd(ctx, "MaxProtocol", "TLSv1.2");
+ +

This also only enables TLSv1.2:

+ +
SSL_CONF_cmd(ctx, "Protocol", "-ALL,TLSv1.2");
+ +

Disable TLS session tickets:

+ +
SSL_CONF_cmd(ctx, "Options", "-SessionTicket");
+ +

Enable compression:

+ +
SSL_CONF_cmd(ctx, "Options", "Compression");
+ +

Set supported curves to P-256, P-384:

+ +
SSL_CONF_cmd(ctx, "Curves", "P-256:P-384");
+ +

SEE ALSO

+ +

SSL_CONF_CTX_new(3), SSL_CONF_CTX_set_flags(3), SSL_CONF_CTX_set1_prefix(3), SSL_CONF_CTX_set_ssl_ctx(3), SSL_CONF_cmd_argv(3), SSL_CTX_set_options(3)

+ +

HISTORY

+ +

The SSL_CONF_cmd() function was added in OpenSSL 1.0.2.

+ +

The SSL_OP_NO_SSL2 option doesn't have effect since 1.1.0, but the macro is retained for backwards compatibility.

+ +

The SSL_CONF_TYPE_NONE was added in OpenSSL 1.1.0. In earlier versions of OpenSSL passing a command which didn't take an argument would return SSL_CONF_TYPE_UNKNOWN.

+ +

MinProtocol and MaxProtocol where added in OpenSSL 1.1.0.

+ +

AllowNoDHEKEX and PrioritizeChaCha were added in OpenSSL 1.1.1.

+ +

COPYRIGHT

+ +

Copyright 2012-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CONF_cmd_argv.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CONF_cmd_argv.html new file mode 100644 index 00000000..213d482b --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CONF_cmd_argv.html @@ -0,0 +1,65 @@ + + + + +SSL_CONF_cmd_argv + + + + + + + + + + +

NAME

+ +

SSL_CONF_cmd_argv - SSL configuration command line processing

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+int SSL_CONF_cmd_argv(SSL_CONF_CTX *cctx, int *pargc, char ***pargv);
+ +

DESCRIPTION

+ +

The function SSL_CONF_cmd_argv() processes at most two command line arguments from pargv and pargc. The values of pargv and pargc are updated to reflect the number of command options processed. The pargc argument can be set to NULL if it is not used.

+ +

RETURN VALUES

+ +

SSL_CONF_cmd_argv() returns the number of command arguments processed: 0, 1, 2 or a negative error code.

+ +

If -2 is returned then an argument for a command is missing.

+ +

If -1 is returned the command is recognised but couldn't be processed due to an error: for example a syntax error in the argument.

+ +

SEE ALSO

+ +

SSL_CONF_CTX_new(3), SSL_CONF_CTX_set_flags(3), SSL_CONF_CTX_set1_prefix(3), SSL_CONF_CTX_set_ssl_ctx(3), SSL_CONF_cmd(3)

+ +

HISTORY

+ +

These functions were added in OpenSSL 1.0.2.

+ +

COPYRIGHT

+ +

Copyright 2012-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_add1_chain_cert.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_add1_chain_cert.html new file mode 100644 index 00000000..3c17541d --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_add1_chain_cert.html @@ -0,0 +1,122 @@ + + + + +SSL_CTX_add1_chain_cert + + + + + + + + + + +

NAME

+ +

SSL_CTX_set0_chain, SSL_CTX_set1_chain, SSL_CTX_add0_chain_cert, SSL_CTX_add1_chain_cert, SSL_CTX_get0_chain_certs, SSL_CTX_clear_chain_certs, SSL_set0_chain, SSL_set1_chain, SSL_add0_chain_cert, SSL_add1_chain_cert, SSL_get0_chain_certs, SSL_clear_chain_certs, SSL_CTX_build_cert_chain, SSL_build_cert_chain, SSL_CTX_select_current_cert, SSL_select_current_cert, SSL_CTX_set_current_cert, SSL_set_current_cert - extra chain certificate processing

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+int SSL_CTX_set0_chain(SSL_CTX *ctx, STACK_OF(X509) *sk);
+int SSL_CTX_set1_chain(SSL_CTX *ctx, STACK_OF(X509) *sk);
+int SSL_CTX_add0_chain_cert(SSL_CTX *ctx, X509 *x509);
+int SSL_CTX_add1_chain_cert(SSL_CTX *ctx, X509 *x509);
+int SSL_CTX_get0_chain_certs(SSL_CTX *ctx, STACK_OF(X509) **sk);
+int SSL_CTX_clear_chain_certs(SSL_CTX *ctx);
+
+int SSL_set0_chain(SSL *ssl, STACK_OF(X509) *sk);
+int SSL_set1_chain(SSL *ssl, STACK_OF(X509) *sk);
+int SSL_add0_chain_cert(SSL *ssl, X509 *x509);
+int SSL_add1_chain_cert(SSL *ssl, X509 *x509);
+int SSL_get0_chain_certs(SSL *ssl, STACK_OF(X509) **sk);
+int SSL_clear_chain_certs(SSL *ssl);
+
+int SSL_CTX_build_cert_chain(SSL_CTX *ctx, flags);
+int SSL_build_cert_chain(SSL *ssl, flags);
+
+int SSL_CTX_select_current_cert(SSL_CTX *ctx, X509 *x509);
+int SSL_select_current_cert(SSL *ssl, X509 *x509);
+int SSL_CTX_set_current_cert(SSL_CTX *ctx, long op);
+int SSL_set_current_cert(SSL *ssl, long op);
+ +

DESCRIPTION

+ +

SSL_CTX_set0_chain() and SSL_CTX_set1_chain() set the certificate chain associated with the current certificate of ctx to sk.

+ +

SSL_CTX_add0_chain_cert() and SSL_CTX_add1_chain_cert() append the single certificate x509 to the chain associated with the current certificate of ctx.

+ +

SSL_CTX_get0_chain_certs() retrieves the chain associated with the current certificate of ctx.

+ +

SSL_CTX_clear_chain_certs() clears any existing chain associated with the current certificate of ctx. (This is implemented by calling SSL_CTX_set0_chain() with sk set to NULL).

+ +

SSL_CTX_build_cert_chain() builds the certificate chain for ctx normally this uses the chain store or the verify store if the chain store is not set. If the function is successful the built chain will replace any existing chain. The flags parameter can be set to SSL_BUILD_CHAIN_FLAG_UNTRUSTED to use existing chain certificates as untrusted CAs, SSL_BUILD_CHAIN_FLAG_NO_ROOT to omit the root CA from the built chain, SSL_BUILD_CHAIN_FLAG_CHECK to use all existing chain certificates only to build the chain (effectively sanity checking and rearranging them if necessary), the flag SSL_BUILD_CHAIN_FLAG_IGNORE_ERROR ignores any errors during verification: if flag SSL_BUILD_CHAIN_FLAG_CLEAR_ERROR is also set verification errors are cleared from the error queue.

+ +

Each of these functions operates on the current end entity (i.e. server or client) certificate. This is the last certificate loaded or selected on the corresponding ctx structure.

+ +

SSL_CTX_select_current_cert() selects x509 as the current end entity certificate, but only if x509 has already been loaded into ctx using a function such as SSL_CTX_use_certificate().

+ +

SSL_set0_chain(), SSL_set1_chain(), SSL_add0_chain_cert(), SSL_add1_chain_cert(), SSL_get0_chain_certs(), SSL_clear_chain_certs(), SSL_build_cert_chain(), SSL_select_current_cert() and SSL_set_current_cert() are similar except they apply to SSL structure ssl.

+ +

SSL_CTX_set_current_cert() changes the current certificate to a value based on the op argument. Currently op can be SSL_CERT_SET_FIRST to use the first valid certificate or SSL_CERT_SET_NEXT to set the next valid certificate after the current certificate. These two operations can be used to iterate over all certificates in an SSL_CTX structure.

+ +

SSL_set_current_cert() also supports the option SSL_CERT_SET_SERVER. If ssl is a server and has sent a certificate to a connected client this option sets that certificate to the current certificate and returns 1. If the negotiated cipher suite is anonymous (and thus no certificate will be sent) 2 is returned and the current certificate is unchanged. If ssl is not a server or a certificate has not been sent 0 is returned and the current certificate is unchanged.

+ +

All these functions are implemented as macros. Those containing a 1 increment the reference count of the supplied certificate or chain so it must be freed at some point after the operation. Those containing a 0 do not increment reference counts and the supplied certificate or chain MUST NOT be freed after the operation.

+ +

NOTES

+ +

The chains associate with an SSL_CTX structure are copied to any SSL structures when SSL_new() is called. SSL structures will not be affected by any chains subsequently changed in the parent SSL_CTX.

+ +

One chain can be set for each key type supported by a server. So, for example, an RSA and a DSA certificate can (and often will) have different chains.

+ +

The functions SSL_CTX_build_cert_chain() and SSL_build_cert_chain() can be used to check application configuration and to ensure any necessary subordinate CAs are sent in the correct order. Misconfigured applications sending incorrect certificate chains often cause problems with peers.

+ +

For example an application can add any set of certificates using SSL_CTX_use_certificate_chain_file() then call SSL_CTX_build_cert_chain() with the option SSL_BUILD_CHAIN_FLAG_CHECK to check and reorder them.

+ +

Applications can issue non fatal warnings when checking chains by setting the flag SSL_BUILD_CHAIN_FLAG_IGNORE_ERRORS and checking the return value.

+ +

Calling SSL_CTX_build_cert_chain() or SSL_build_cert_chain() is more efficient than the automatic chain building as it is only performed once. Automatic chain building is performed on each new session.

+ +

If any certificates are added using these functions no certificates added using SSL_CTX_add_extra_chain_cert() will be used.

+ +

RETURN VALUES

+ +

SSL_set_current_cert() with SSL_CERT_SET_SERVER return 1 for success, 2 if no server certificate is used because the cipher suites is anonymous and 0 for failure.

+ +

SSL_CTX_build_cert_chain() and SSL_build_cert_chain() return 1 for success and 0 for failure. If the flag SSL_BUILD_CHAIN_FLAG_IGNORE_ERROR and a verification error occurs then 2 is returned.

+ +

All other functions return 1 for success and 0 for failure.

+ +

SEE ALSO

+ +

SSL_CTX_add_extra_chain_cert(3)

+ +

HISTORY

+ +

These functions were added in OpenSSL 1.0.2.

+ +

COPYRIGHT

+ +

Copyright 2013-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_add_extra_chain_cert.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_add_extra_chain_cert.html new file mode 100644 index 00000000..a9443a1b --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_add_extra_chain_cert.html @@ -0,0 +1,75 @@ + + + + +SSL_CTX_add_extra_chain_cert + + + + + + + + + + +

NAME

+ +

SSL_CTX_add_extra_chain_cert, SSL_CTX_clear_extra_chain_certs - add or clear extra chain certificates

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+long SSL_CTX_add_extra_chain_cert(SSL_CTX *ctx, X509 *x509);
+long SSL_CTX_clear_extra_chain_certs(SSL_CTX *ctx);
+ +

DESCRIPTION

+ +

SSL_CTX_add_extra_chain_cert() adds the certificate x509 to the extra chain certificates associated with ctx. Several certificates can be added one after another.

+ +

SSL_CTX_clear_extra_chain_certs() clears all extra chain certificates associated with ctx.

+ +

These functions are implemented as macros.

+ +

NOTES

+ +

When sending a certificate chain, extra chain certificates are sent in order following the end entity certificate.

+ +

If no chain is specified, the library will try to complete the chain from the available CA certificates in the trusted CA storage, see SSL_CTX_load_verify_locations(3).

+ +

The x509 certificate provided to SSL_CTX_add_extra_chain_cert() will be freed by the library when the SSL_CTX is destroyed. An application should not free the x509 object.

+ +

RESTRICTIONS

+ +

Only one set of extra chain certificates can be specified per SSL_CTX structure. Different chains for different certificates (for example if both RSA and DSA certificates are specified by the same server) or different SSL structures with the same parent SSL_CTX cannot be specified using this function. For more flexibility functions such as SSL_add1_chain_cert() should be used instead.

+ +

RETURN VALUES

+ +

SSL_CTX_add_extra_chain_cert() and SSL_CTX_clear_extra_chain_certs() return 1 on success and 0 for failure. Check out the error stack to find out the reason for failure.

+ +

SEE ALSO

+ +

ssl(7), SSL_CTX_use_certificate(3), SSL_CTX_set_client_cert_cb(3), SSL_CTX_load_verify_locations(3) SSL_CTX_set0_chain(3) SSL_CTX_set1_chain(3) SSL_CTX_add0_chain_cert(3) SSL_CTX_add1_chain_cert(3) SSL_set0_chain(3) SSL_set1_chain(3) SSL_add0_chain_cert(3) SSL_add1_chain_cert(3) SSL_CTX_build_cert_chain(3) SSL_build_cert_chain(3)

+ +

COPYRIGHT

+ +

Copyright 2000-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_add_session.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_add_session.html new file mode 100644 index 00000000..08140fee --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_add_session.html @@ -0,0 +1,83 @@ + + + + +SSL_CTX_add_session + + + + + + + + + + +

NAME

+ +

SSL_CTX_add_session, SSL_CTX_remove_session - manipulate session cache

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+int SSL_CTX_add_session(SSL_CTX *ctx, SSL_SESSION *c);
+
+int SSL_CTX_remove_session(SSL_CTX *ctx, SSL_SESSION *c);
+ +

DESCRIPTION

+ +

SSL_CTX_add_session() adds the session c to the context ctx. The reference count for session c is incremented by 1. If a session with the same session id already exists, the old session is removed by calling SSL_SESSION_free(3).

+ +

SSL_CTX_remove_session() removes the session c from the context ctx and marks it as non-resumable. SSL_SESSION_free(3) is called once for c.

+ +

NOTES

+ +

When adding a new session to the internal session cache, it is examined whether a session with the same session id already exists. In this case it is assumed that both sessions are identical. If the same session is stored in a different SSL_SESSION object, The old session is removed and replaced by the new session. If the session is actually identical (the SSL_SESSION object is identical), SSL_CTX_add_session() is a no-op, and the return value is 0.

+ +

If a server SSL_CTX is configured with the SSL_SESS_CACHE_NO_INTERNAL_STORE flag then the internal cache will not be populated automatically by new sessions negotiated by the SSL/TLS implementation, even though the internal cache will be searched automatically for session-resume requests (the latter can be suppressed by SSL_SESS_CACHE_NO_INTERNAL_LOOKUP). So the application can use SSL_CTX_add_session() directly to have full control over the sessions that can be resumed if desired.

+ +

RETURN VALUES

+ +

The following values are returned by all functions:

+ +
+ +
0
+
+ +

The operation failed. In case of the add operation, it was tried to add the same (identical) session twice. In case of the remove operation, the session was not found in the cache.

+ +
+
1
+
+ +

The operation succeeded.

+ +
+
+ +

SEE ALSO

+ +

ssl(7), SSL_CTX_set_session_cache_mode(3), SSL_SESSION_free(3)

+ +

COPYRIGHT

+ +

Copyright 2001-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_config.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_config.html new file mode 100644 index 00000000..de3dfed2 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_config.html @@ -0,0 +1,105 @@ + + + + +SSL_CTX_config + + + + + + + + + + +

NAME

+ +

SSL_CTX_config, SSL_config - configure SSL_CTX or SSL structure

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+int SSL_CTX_config(SSL_CTX *ctx, const char *name);
+int SSL_config(SSL *s, const char *name);
+ +

DESCRIPTION

+ +

The functions SSL_CTX_config() and SSL_config() configure an SSL_CTX or SSL structure using the configuration name.

+ +

NOTES

+ +

By calling SSL_CTX_config() or SSL_config() an application can perform many complex tasks based on the contents of the configuration file: greatly simplifying application configuration code. A degree of future proofing can also be achieved: an application can support configuration features in newer versions of OpenSSL automatically.

+ +

A configuration file must have been previously loaded, for example using CONF_modules_load_file(). See config(5) for details of the configuration file syntax.

+ +

RETURN VALUES

+ +

SSL_CTX_config() and SSL_config() return 1 for success or 0 if an error occurred.

+ +

EXAMPLES

+ +

If the file "config.cnf" contains the following:

+ +
testapp = test_sect
+
+[test_sect]
+# list of configuration modules
+
+ssl_conf = ssl_sect
+
+[ssl_sect]
+server = server_section
+
+[server_section]
+RSA.Certificate = server-rsa.pem
+ECDSA.Certificate = server-ecdsa.pem
+Ciphers = ALL:!RC4
+ +

An application could call:

+ +
if (CONF_modules_load_file("config.cnf", "testapp", 0) <= 0) {
+    fprintf(stderr, "Error processing config file\n");
+    goto err;
+}
+
+ctx = SSL_CTX_new(TLS_server_method());
+
+if (SSL_CTX_config(ctx, "server") == 0) {
+    fprintf(stderr, "Error configuring server.\n");
+    goto err;
+}
+ +

In this example two certificates and the cipher list are configured without the need for any additional application code.

+ +

SEE ALSO

+ +

config(5), SSL_CONF_cmd(3), CONF_modules_load_file(3)

+ +

HISTORY

+ +

The SSL_CTX_config() and SSL_config() functions were added in OpenSSL 1.1.0.

+ +

COPYRIGHT

+ +

Copyright 2015-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_ctrl.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_ctrl.html new file mode 100644 index 00000000..d9aeb1b7 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_ctrl.html @@ -0,0 +1,60 @@ + + + + +SSL_CTX_ctrl + + + + + + + + + + +

NAME

+ +

SSL_CTX_ctrl, SSL_CTX_callback_ctrl, SSL_ctrl, SSL_callback_ctrl - internal handling functions for SSL_CTX and SSL objects

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+long SSL_CTX_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg);
+long SSL_CTX_callback_ctrl(SSL_CTX *, int cmd, void (*fp)());
+
+long SSL_ctrl(SSL *ssl, int cmd, long larg, void *parg);
+long SSL_callback_ctrl(SSL *, int cmd, void (*fp)());
+ +

DESCRIPTION

+ +

The SSL_*_ctrl() family of functions is used to manipulate settings of the SSL_CTX and SSL objects. Depending on the command cmd the arguments larg, parg, or fp are evaluated. These functions should never be called directly. All functionalities needed are made available via other functions or macros.

+ +

RETURN VALUES

+ +

The return values of the SSL*_ctrl() functions depend on the command supplied via the cmd parameter.

+ +

SEE ALSO

+ +

ssl(7)

+ +

COPYRIGHT

+ +

Copyright 2001-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_dane_enable.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_dane_enable.html new file mode 100644 index 00000000..42f4684d --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_dane_enable.html @@ -0,0 +1,252 @@ + + + + +SSL_CTX_dane_enable + + + + + + + + + + +

NAME

+ +

SSL_CTX_dane_enable, SSL_CTX_dane_mtype_set, SSL_dane_enable, SSL_dane_tlsa_add, SSL_get0_dane_authority, SSL_get0_dane_tlsa, SSL_CTX_dane_set_flags, SSL_CTX_dane_clear_flags, SSL_dane_set_flags, SSL_dane_clear_flags - enable DANE TLS authentication of the remote TLS server in the local TLS client

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+int SSL_CTX_dane_enable(SSL_CTX *ctx);
+int SSL_CTX_dane_mtype_set(SSL_CTX *ctx, const EVP_MD *md,
+                           uint8_t mtype, uint8_t ord);
+int SSL_dane_enable(SSL *s, const char *basedomain);
+int SSL_dane_tlsa_add(SSL *s, uint8_t usage, uint8_t selector,
+                      uint8_t mtype, unsigned const char *data, size_t dlen);
+int SSL_get0_dane_authority(SSL *s, X509 **mcert, EVP_PKEY **mspki);
+int SSL_get0_dane_tlsa(SSL *s, uint8_t *usage, uint8_t *selector,
+                       uint8_t *mtype, unsigned const char **data,
+                       size_t *dlen);
+unsigned long SSL_CTX_dane_set_flags(SSL_CTX *ctx, unsigned long flags);
+unsigned long SSL_CTX_dane_clear_flags(SSL_CTX *ctx, unsigned long flags);
+unsigned long SSL_dane_set_flags(SSL *ssl, unsigned long flags);
+unsigned long SSL_dane_clear_flags(SSL *ssl, unsigned long flags);
+ +

DESCRIPTION

+ +

These functions implement support for DANE TLSA (RFC6698 and RFC7671) peer authentication.

+ +

SSL_CTX_dane_enable() must be called first to initialize the shared state required for DANE support. Individual connections associated with the context can then enable per-connection DANE support as appropriate. DANE authentication is implemented in the X509_verify_cert(3) function, and applications that override X509_verify_cert(3) via SSL_CTX_set_cert_verify_callback(3) are responsible to authenticate the peer chain in whatever manner they see fit.

+ +

SSL_CTX_dane_mtype_set() may then be called zero or more times to adjust the supported digest algorithms. This must be done before any SSL handles are created for the context.

+ +

The mtype argument specifies a DANE TLSA matching type and the md argument specifies the associated digest algorithm handle. The ord argument specifies a strength ordinal. Algorithms with a larger strength ordinal are considered more secure. Strength ordinals are used to implement RFC7671 digest algorithm agility. Specifying a NULL digest algorithm for a matching type disables support for that matching type. Matching type Full(0) cannot be modified or disabled.

+ +

By default, matching type SHA2-256(1) (see RFC7218 for definitions of the DANE TLSA parameter acronyms) is mapped to EVP_sha256() with a strength ordinal of 1 and matching type SHA2-512(2) is mapped to EVP_sha512() with a strength ordinal of 2.

+ +

SSL_dane_enable() must be called before the SSL handshake is initiated with SSL_connect(3) if (and only if) you want to enable DANE for that connection. (The connection must be associated with a DANE-enabled SSL context). The basedomain argument specifies the RFC7671 TLSA base domain, which will be the primary peer reference identifier for certificate name checks. Additional server names can be specified via SSL_add1_host(3). The basedomain is used as the default SNI hint if none has yet been specified via SSL_set_tlsext_host_name(3).

+ +

SSL_dane_tlsa_add() may then be called one or more times, to load each of the TLSA records that apply to the remote TLS peer. (This too must be done prior to the beginning of the SSL handshake). The arguments specify the fields of the TLSA record. The data field is provided in binary (wire RDATA) form, not the hexadecimal ASCII presentation form, with an explicit length passed via dlen. The library takes a copy of the data buffer contents and the caller may free the original data buffer when convenient. A return value of 0 indicates that "unusable" TLSA records (with invalid or unsupported parameters) were provided. A negative return value indicates an internal error in processing the record.

+ +

The caller is expected to check the return value of each SSL_dane_tlsa_add() call and take appropriate action if none are usable or an internal error is encountered in processing some records.

+ +

If no TLSA records are added successfully, DANE authentication is not enabled, and authentication will be based on any configured traditional trust-anchors; authentication success in this case does not mean that the peer was DANE-authenticated.

+ +

SSL_get0_dane_authority() can be used to get more detailed information about the matched DANE trust-anchor after successful connection completion. The return value is negative if DANE verification failed (or was not enabled), 0 if an EE TLSA record directly matched the leaf certificate, or a positive number indicating the depth at which a TA record matched an issuer certificate. The complete verified chain can be retrieved via SSL_get0_verified_chain(3). The return value is an index into this verified chain, rather than the list of certificates sent by the peer as returned by SSL_get_peer_cert_chain(3).

+ +

If the mcert argument is not NULL and a TLSA record matched a chain certificate, a pointer to the matching certificate is returned via mcert. The returned address is a short-term internal reference to the certificate and must not be freed by the application. Applications that want to retain access to the certificate can call X509_up_ref(3) to obtain a long-term reference which must then be freed via X509_free(3) once no longer needed.

+ +

If no TLSA records directly matched any elements of the certificate chain, but a DANE-TA(2) SPKI(1) Full(0) record provided the public key that signed an element of the chain, then that key is returned via mspki argument (if not NULL). In this case the return value is the depth of the top-most element of the validated certificate chain. As with mcert this is a short-term internal reference, and EVP_PKEY_up_ref(3) and EVP_PKEY_free(3) can be used to acquire and release long-term references respectively.

+ +

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 usage, selector, mtype and data parameters is updated to the corresponding TLSA record fields. The data field is in binary wire form, and is therefore not NUL-terminated, its length is returned via the dlen parameter. If any of these parameters is NULL, the corresponding field is not returned. The data parameter is set to a short-term internal-copy of the associated data field and must not be freed by the application. Applications that need long-term access to this field need to copy the content.

+ +

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 flags argument is a bitmask of the features to enable or disable. The flags set for an SSL_CTX context are copied to each SSL handle associated with that context at the time the handle is created. Subsequent changes in the context's flags have no effect on the flags set for the handle.

+ +

At present, the only available option is DANE_FLAG_NO_DANE_EE_NAMECHECKS which can be used to disable server name checks when authenticating via DANE-EE(3) TLSA records. For some applications, primarily web browsers, it is not safe to disable name checks due to "unknown key share" attacks, in which a malicious server can convince a client that a connection to a victim server is instead a secure connection to the malicious server. The malicious server may then be able to violate cross-origin scripting restrictions. Thus, despite the text of RFC7671, name checks are by default enabled for DANE-EE(3) TLSA records, and can be disabled in applications where it is safe to do so. In particular, SMTP and XMPP clients should set this option as SRV and MX records already make it possible for a remote domain to redirect client connections to any server of its choice, and in any case SMTP and XMPP clients do not execute scripts downloaded from remote servers.

+ +

RETURN VALUES

+ +

The functions SSL_CTX_dane_enable(), SSL_CTX_dane_mtype_set(), SSL_dane_enable() and SSL_dane_tlsa_add() return a positive value on success. Negative return values indicate resource problems (out of memory, etc.) in the SSL library, while a return value of 0 indicates incorrect usage or invalid input, such as an unsupported TLSA record certificate usage, selector or matching type. Invalid input also includes malformed data, either a digest length that does not match the digest algorithm, or a Full(0) (binary ASN.1 DER form) 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 chain certificate, or the depth of the top-most certificate, when the TLSA record is a full public key that is its signer.

+ +

The functions SSL_CTX_dane_set_flags(), SSL_CTX_dane_clear_flags(), SSL_dane_set_flags() and SSL_dane_clear_flags() return the flags in effect before they were called.

+ +

EXAMPLES

+ +

Suppose "smtp.example.com" is the MX host of the domain "example.com", and has DNSSEC-validated TLSA records. The calls below will perform DANE authentication and arrange to match either the MX hostname or the destination domain name in the SMTP server certificate. Wildcards are supported, but must match the entire label. The actual name matched in the certificate (which might be a wildcard) is retrieved, and must be copied by the application if it is to be retained beyond the lifetime of the SSL connection.

+ +
SSL_CTX *ctx;
+SSL *ssl;
+int (*verify_cb)(int ok, X509_STORE_CTX *sctx) = NULL;
+int num_usable = 0;
+const char *nexthop_domain = "example.com";
+const char *dane_tlsa_domain = "smtp.example.com";
+uint8_t usage, selector, mtype;
+
+if ((ctx = SSL_CTX_new(TLS_client_method())) == NULL)
+    /* error */
+if (SSL_CTX_dane_enable(ctx) <= 0)
+    /* error */
+if ((ssl = SSL_new(ctx)) == NULL)
+    /* error */
+if (SSL_dane_enable(ssl, dane_tlsa_domain) <= 0)
+    /* error */
+
+/*
+ * For many applications it is safe to skip DANE-EE(3) namechecks.  Do not
+ * disable the checks unless "unknown key share" attacks pose no risk for
+ * your application.
+ */
+SSL_dane_set_flags(ssl, DANE_FLAG_NO_DANE_EE_NAMECHECKS);
+
+if (!SSL_add1_host(ssl, nexthop_domain))
+    /* error */
+SSL_set_hostflags(ssl, X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS);
+
+for (... each TLSA record ...) {
+    unsigned char *data;
+    size_t len;
+    int ret;
+
+    /* set usage, selector, mtype, data, len */
+
+    /*
+     * Opportunistic DANE TLS clients support only DANE-TA(2) or DANE-EE(3).
+     * They treat all other certificate usages, and in particular PKIX-TA(0)
+     * and PKIX-EE(1), as unusable.
+     */
+    switch (usage) {
+    default:
+    case 0:     /* PKIX-TA(0) */
+    case 1:     /* PKIX-EE(1) */
+        continue;
+    case 2:     /* DANE-TA(2) */
+    case 3:     /* DANE-EE(3) */
+        break;
+    }
+
+    ret = SSL_dane_tlsa_add(ssl, usage, selector, mtype, data, len);
+    /* free data as appropriate */
+
+    if (ret < 0)
+        /* handle SSL library internal error */
+    else if (ret == 0)
+        /* handle unusable TLSA record */
+    else
+        ++num_usable;
+}
+
+/*
+ * At this point, the verification mode is still the default SSL_VERIFY_NONE.
+ * Opportunistic DANE clients use unauthenticated TLS when all TLSA records
+ * are unusable, so continue the handshake even if authentication fails.
+ */
+if (num_usable == 0) {
+    /* Log all records unusable? */
+
+    /* Optionally set verify_cb to a suitable non-NULL callback. */
+    SSL_set_verify(ssl, SSL_VERIFY_NONE, verify_cb);
+} else {
+    /* At least one usable record.  We expect to verify the peer */
+
+    /* Optionally set verify_cb to a suitable non-NULL callback. */
+
+    /*
+     * Below we elect to fail the handshake when peer verification fails.
+     * Alternatively, use the permissive SSL_VERIFY_NONE verification mode,
+     * complete the handshake, check the verification status, and if not
+     * verified disconnect gracefully at the application layer, especially if
+     * application protocol supports informing the server that authentication
+     * failed.
+     */
+    SSL_set_verify(ssl, SSL_VERIFY_PEER, verify_cb);
+}
+
+/*
+ * Load any saved session for resumption, making sure that the previous
+ * session applied the same security and authentication requirements that
+ * would be expected of a fresh connection.
+ */
+
+/* Perform SSL_connect() handshake and handle errors here */
+
+if (SSL_session_reused(ssl)) {
+    if (SSL_get_verify_result(ssl) == X509_V_OK) {
+        /*
+         * Resumed session was originally verified, this connection is
+         * authenticated.
+         */
+    } else {
+        /*
+         * Resumed session was not originally verified, this connection is not
+         * authenticated.
+         */
+    }
+} else if (SSL_get_verify_result(ssl) == X509_V_OK) {
+    const char *peername = SSL_get0_peername(ssl);
+    EVP_PKEY *mspki = NULL;
+
+    int depth = SSL_get0_dane_authority(ssl, NULL, &mspki);
+    if (depth >= 0) {
+        (void) SSL_get0_dane_tlsa(ssl, &usage, &selector, &mtype, NULL, NULL);
+        printf("DANE TLSA %d %d %d %s at depth %d\n", usage, selector, mtype,
+               (mspki != NULL) ? "TA public key verified certificate" :
+               depth ? "matched TA certificate" : "matched EE certificate",
+               depth);
+    }
+    if (peername != NULL) {
+        /* Name checks were in scope and matched the peername */
+        printf("Verified peername: %s\n", peername);
+    }
+} else {
+    /*
+     * Not authenticated, presumably all TLSA rrs unusable, but possibly a
+     * callback suppressed connection termination despite the presence of
+     * usable TLSA RRs none of which matched.  Do whatever is appropriate for
+     * fresh unauthenticated connections.
+     */
+}
+ +

NOTES

+ +

It is expected that the majority of clients employing DANE TLS will be doing "opportunistic DANE TLS" in the sense of RFC7672 and RFC7435. That is, they will use DANE authentication when DNSSEC-validated TLSA records are published for a given peer, and otherwise will use unauthenticated TLS or even cleartext.

+ +

Such applications should generally treat any TLSA records published by the peer with usages PKIX-TA(0) and PKIX-EE(1) as "unusable", and should not include them among the TLSA records used to authenticate peer connections. In addition, some TLSA records with supported usages may be "unusable" as a result of invalid or unsupported parameters.

+ +

When a peer has TLSA records, but none are "usable", an opportunistic application must avoid cleartext, but cannot authenticate the peer, and so should generally proceed with an unauthenticated connection. Opportunistic applications need to note the return value of each call to SSL_dane_tlsa_add(), and if all return 0 (due to invalid or unsupported parameters) disable peer authentication by calling SSL_set_verify(3) with mode equal to SSL_VERIFY_NONE.

+ +

SEE ALSO

+ +

SSL_new(3), SSL_add1_host(3), SSL_set_hostflags(3), SSL_set_tlsext_host_name(3), SSL_set_verify(3), SSL_CTX_set_cert_verify_callback(3), SSL_get0_verified_chain(3), SSL_get_peer_cert_chain(3), SSL_get_verify_result(3), SSL_connect(3), SSL_get0_peername(3), X509_verify_cert(3), X509_up_ref(3), X509_free(3), EVP_get_digestbyname(3), EVP_PKEY_up_ref(3), EVP_PKEY_free(3)

+ +

HISTORY

+ +

These functions were added in OpenSSL 1.1.0.

+ +

COPYRIGHT

+ +

Copyright 2016-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_flush_sessions.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_flush_sessions.html new file mode 100644 index 00000000..1973598d --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_flush_sessions.html @@ -0,0 +1,65 @@ + + + + +SSL_CTX_flush_sessions + + + + + + + + + + +

NAME

+ +

SSL_CTX_flush_sessions - remove expired sessions

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+void SSL_CTX_flush_sessions(SSL_CTX *ctx, long tm);
+ +

DESCRIPTION

+ +

SSL_CTX_flush_sessions() causes a run through the session cache of ctx to remove sessions expired at time tm.

+ +

NOTES

+ +

If enabled, the internal session cache will collect all sessions established up to the specified maximum number (see SSL_CTX_sess_set_cache_size()). As sessions will not be reused ones they are expired, they should be removed from the cache to save resources. This can either be done automatically whenever 255 new sessions were established (see SSL_CTX_set_session_cache_mode(3)) or manually by calling SSL_CTX_flush_sessions().

+ +

The parameter tm specifies the time which should be used for the expiration test, in most cases the actual time given by time(0) will be used.

+ +

SSL_CTX_flush_sessions() will only check sessions stored in the internal cache. When a session is found and removed, the remove_session_cb is however called to synchronize with the external cache (see SSL_CTX_sess_set_get_cb(3)).

+ +

RETURN VALUES

+ +

SSL_CTX_flush_sessions() does not return a value.

+ +

SEE ALSO

+ +

ssl(7), SSL_CTX_set_session_cache_mode(3), SSL_CTX_set_timeout(3), SSL_CTX_sess_set_get_cb(3)

+ +

COPYRIGHT

+ +

Copyright 2001-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_free.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_free.html new file mode 100644 index 00000000..b1844a21 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_free.html @@ -0,0 +1,65 @@ + + + + +SSL_CTX_free + + + + + + + + + + +

NAME

+ +

SSL_CTX_free - free an allocated SSL_CTX object

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+void SSL_CTX_free(SSL_CTX *ctx);
+ +

DESCRIPTION

+ +

SSL_CTX_free() decrements the reference count of ctx, and removes the SSL_CTX object pointed to by ctx and frees up the allocated memory if the reference count has reached 0.

+ +

It also calls the free()ing procedures for indirectly affected items, if applicable: the session cache, the list of ciphers, the list of Client CAs, the certificates and keys.

+ +

If ctx is NULL nothing is done.

+ +

WARNINGS

+ +

If a session-remove callback is set (SSL_CTX_sess_set_remove_cb()), this callback will be called for each session being freed from ctx's session cache. This implies, that all corresponding sessions from an external session cache are removed as well. If this is not desired, the user should explicitly unset the callback by calling SSL_CTX_sess_set_remove_cb(ctx, NULL) prior to calling SSL_CTX_free().

+ +

RETURN VALUES

+ +

SSL_CTX_free() does not provide diagnostic information.

+ +

SEE ALSO

+ +

SSL_CTX_new(3), ssl(7), SSL_CTX_sess_set_get_cb(3)

+ +

COPYRIGHT

+ +

Copyright 2000-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_get0_param.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_get0_param.html new file mode 100644 index 00000000..f87495e2 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_get0_param.html @@ -0,0 +1,81 @@ + + + + +SSL_CTX_get0_param + + + + + + + + + + +

NAME

+ +

SSL_CTX_get0_param, SSL_get0_param, SSL_CTX_set1_param, SSL_set1_param - get and set verification parameters

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+X509_VERIFY_PARAM *SSL_CTX_get0_param(SSL_CTX *ctx)
+X509_VERIFY_PARAM *SSL_get0_param(SSL *ssl)
+int SSL_CTX_set1_param(SSL_CTX *ctx, X509_VERIFY_PARAM *vpm)
+int SSL_set1_param(SSL *ssl, X509_VERIFY_PARAM *vpm)
+ +

DESCRIPTION

+ +

SSL_CTX_get0_param() and SSL_get0_param() retrieve an internal pointer to the verification parameters for ctx or ssl respectively. The returned pointer must not be freed by the calling application.

+ +

SSL_CTX_set1_param() and SSL_set1_param() set the verification parameters to vpm for ctx or ssl.

+ +

NOTES

+ +

Typically parameters are retrieved from an SSL_CTX or SSL structure using SSL_CTX_get0_param() or SSL_get0_param() and an application modifies them to suit its needs: for example to add a hostname check.

+ +

RETURN VALUES

+ +

SSL_CTX_get0_param() and SSL_get0_param() return a pointer to an X509_VERIFY_PARAM structure.

+ +

SSL_CTX_set1_param() and SSL_set1_param() return 1 for success and 0 for failure.

+ +

EXAMPLES

+ +

Check hostname matches "www.foo.com" in peer certificate:

+ +
X509_VERIFY_PARAM *vpm = SSL_get0_param(ssl);
+X509_VERIFY_PARAM_set1_host(vpm, "www.foo.com", 0);
+ +

SEE ALSO

+ +

X509_VERIFY_PARAM_set_flags(3)

+ +

HISTORY

+ +

These functions were added in OpenSSL 1.0.2.

+ +

COPYRIGHT

+ +

Copyright 2015-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_get_verify_mode.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_get_verify_mode.html new file mode 100644 index 00000000..44bc3b05 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_get_verify_mode.html @@ -0,0 +1,71 @@ + + + + +SSL_CTX_get_verify_mode + + + + + + + + + + +

NAME

+ +

SSL_CTX_get_verify_mode, SSL_get_verify_mode, SSL_CTX_get_verify_depth, SSL_get_verify_depth, SSL_get_verify_callback, SSL_CTX_get_verify_callback - get currently set verification parameters

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+int SSL_CTX_get_verify_mode(const SSL_CTX *ctx);
+int SSL_get_verify_mode(const SSL *ssl);
+int SSL_CTX_get_verify_depth(const SSL_CTX *ctx);
+int SSL_get_verify_depth(const SSL *ssl);
+int (*SSL_CTX_get_verify_callback(const SSL_CTX *ctx))(int, X509_STORE_CTX *);
+int (*SSL_get_verify_callback(const SSL *ssl))(int, X509_STORE_CTX *);
+ +

DESCRIPTION

+ +

SSL_CTX_get_verify_mode() returns the verification mode currently set in ctx.

+ +

SSL_get_verify_mode() returns the verification mode currently set in ssl.

+ +

SSL_CTX_get_verify_depth() returns the verification depth limit currently set in ctx. If no limit has been explicitly set, -1 is returned and the default value will be used.

+ +

SSL_get_verify_depth() returns the verification depth limit currently set in ssl. If no limit has been explicitly set, -1 is returned and the default value will be used.

+ +

SSL_CTX_get_verify_callback() returns a function pointer to the verification callback currently set in ctx. If no callback was explicitly set, the NULL pointer is returned and the default callback will be used.

+ +

SSL_get_verify_callback() returns a function pointer to the verification callback currently set in ssl. If no callback was explicitly set, the NULL pointer is returned and the default callback will be used.

+ +

RETURN VALUES

+ +

See DESCRIPTION

+ +

SEE ALSO

+ +

ssl(7), SSL_CTX_set_verify(3)

+ +

COPYRIGHT

+ +

Copyright 2000-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_has_client_custom_ext.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_has_client_custom_ext.html new file mode 100644 index 00000000..4ee01e99 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_has_client_custom_ext.html @@ -0,0 +1,56 @@ + + + + +SSL_CTX_has_client_custom_ext + + + + + + + + + + +

NAME

+ +

SSL_CTX_has_client_custom_ext - check whether a handler exists for a particular client extension type

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+int SSL_CTX_has_client_custom_ext(const SSL_CTX *ctx, unsigned int ext_type);
+ +

DESCRIPTION

+ +

SSL_CTX_has_client_custom_ext() checks whether a handler has been set for a client extension of type ext_type using SSL_CTX_add_client_custom_ext().

+ +

RETURN VALUES

+ +

Returns 1 if a handler has been set, 0 otherwise.

+ +

SEE ALSO

+ +

ssl(7), SSL_CTX_add_client_custom_ext(3)

+ +

COPYRIGHT

+ +

Copyright 2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_load_verify_locations.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_load_verify_locations.html new file mode 100644 index 00000000..369a444e --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_load_verify_locations.html @@ -0,0 +1,131 @@ + + + + +SSL_CTX_load_verify_locations + + + + + + + + + + +

NAME

+ +

SSL_CTX_load_verify_locations, SSL_CTX_set_default_verify_paths, SSL_CTX_set_default_verify_dir, SSL_CTX_set_default_verify_file - set default locations for trusted CA certificates

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+int SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile,
+                                  const char *CApath);
+
+int SSL_CTX_set_default_verify_paths(SSL_CTX *ctx);
+
+int SSL_CTX_set_default_verify_dir(SSL_CTX *ctx);
+
+int SSL_CTX_set_default_verify_file(SSL_CTX *ctx);
+ +

DESCRIPTION

+ +

SSL_CTX_load_verify_locations() specifies the locations for ctx, at which CA certificates for verification purposes are located. The certificates available via CAfile and CApath are trusted.

+ +

SSL_CTX_set_default_verify_paths() specifies that the default locations from which CA certificates are loaded should be used. There is one default directory and one default file. The default CA certificates directory is called "certs" in the default OpenSSL directory. Alternatively the SSL_CERT_DIR environment variable can be defined to override this location. The default CA certificates file is called "cert.pem" in the default OpenSSL directory. Alternatively the SSL_CERT_FILE environment variable can be defined to override this location.

+ +

SSL_CTX_set_default_verify_dir() is similar to SSL_CTX_set_default_verify_paths() except that just the default directory is used.

+ +

SSL_CTX_set_default_verify_file() is similar to SSL_CTX_set_default_verify_paths() except that just the default file is used.

+ +

NOTES

+ +

If CAfile is not NULL, it points to a file of CA certificates in PEM format. The file can contain several CA certificates identified by

+ +
-----BEGIN CERTIFICATE-----
+... (CA certificate in base64 encoding) ...
+-----END CERTIFICATE-----
+ +

sequences. Before, between, and after the certificates text is allowed which can be used e.g. for descriptions of the certificates.

+ +

The CAfile is processed on execution of the SSL_CTX_load_verify_locations() function.

+ +

If CApath is not NULL, it points to a directory containing CA certificates in PEM format. The files each contain one CA certificate. The files are looked up by the CA subject name hash value, which must hence be available. If more than one CA certificate with the same name hash value exist, the extension must be different (e.g. 9d66eef0.0, 9d66eef0.1 etc). The search is performed in the ordering of the extension number, regardless of other properties of the certificates. Use the c_rehash utility to create the necessary links.

+ +

The certificates in CApath are only looked up when required, e.g. when building the certificate chain or when actually performing the verification of a peer certificate.

+ +

When looking up CA certificates, the OpenSSL library will first search the certificates in CAfile, then those in CApath. Certificate matching is done based on the subject name, the key identifier (if present), and the serial number as taken from the certificate to be verified. If these data do not match, the next certificate will be tried. If a first certificate matching the parameters is found, the verification process will be performed; no other certificates for the same parameters will be searched in case of failure.

+ +

In server mode, when requesting a client certificate, the server must send the list of CAs of which it will accept client certificates. This list is not influenced by the contents of CAfile or CApath and must explicitly be set using the SSL_CTX_set_client_CA_list(3) family of functions.

+ +

When building its own certificate chain, an OpenSSL client/server will try to fill in missing certificates from CAfile/CApath, if the certificate chain was not explicitly specified (see SSL_CTX_add_extra_chain_cert(3), SSL_CTX_use_certificate(3).

+ +

WARNINGS

+ +

If several CA certificates matching the name, key identifier, and serial number condition are available, only the first one will be examined. This may lead to unexpected results if the same CA certificate is available with different expiration dates. If a "certificate expired" verification error occurs, no other certificate will be searched. Make sure to not have expired certificates mixed with valid ones.

+ +

RETURN VALUES

+ +

For SSL_CTX_load_verify_locations the following return values can occur:

+ +
+ +
0
+
+ +

The operation failed because CAfile and CApath are NULL or the processing at one of the locations specified failed. Check the error stack to find out the reason.

+ +
+
1
+
+ +

The operation succeeded.

+ +
+
+ +

SSL_CTX_set_default_verify_paths(), SSL_CTX_set_default_verify_dir() and SSL_CTX_set_default_verify_file() all return 1 on success or 0 on failure. A missing default location is still treated as a success.

+ +

EXAMPLES

+ +

Generate a CA certificate file with descriptive text from the CA certificates ca1.pem ca2.pem ca3.pem:

+ +
#!/bin/sh
+rm CAfile.pem
+for i in ca1.pem ca2.pem ca3.pem ; do
+    openssl x509 -in $i -text >> CAfile.pem
+done
+ +

Prepare the directory /some/where/certs containing several CA certificates for use as CApath:

+ +
cd /some/where/certs
+c_rehash .
+ +

SEE ALSO

+ +

ssl(7), SSL_CTX_set_client_CA_list(3), SSL_get_client_CA_list(3), SSL_CTX_use_certificate(3), SSL_CTX_add_extra_chain_cert(3), SSL_CTX_set_cert_store(3), SSL_CTX_set_client_CA_list(3)

+ +

COPYRIGHT

+ +

Copyright 2000-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_new.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_new.html new file mode 100644 index 00000000..b8fba1be --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_new.html @@ -0,0 +1,205 @@ + + + + +SSL_CTX_new + + + + + + + + + + +

NAME

+ +

TLSv1_2_method, TLSv1_2_server_method, TLSv1_2_client_method, SSL_CTX_new, SSL_CTX_up_ref, SSLv3_method, SSLv3_server_method, SSLv3_client_method, TLSv1_method, TLSv1_server_method, TLSv1_client_method, TLSv1_1_method, TLSv1_1_server_method, TLSv1_1_client_method, TLS_method, TLS_server_method, TLS_client_method, SSLv23_method, SSLv23_server_method, SSLv23_client_method, DTLS_method, DTLS_server_method, DTLS_client_method, DTLSv1_method, DTLSv1_server_method, DTLSv1_client_method, DTLSv1_2_method, DTLSv1_2_server_method, DTLSv1_2_client_method - create a new SSL_CTX object as framework for TLS/SSL or DTLS enabled functions

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+SSL_CTX *SSL_CTX_new(const SSL_METHOD *method);
+int SSL_CTX_up_ref(SSL_CTX *ctx);
+
+const SSL_METHOD *TLS_method(void);
+const SSL_METHOD *TLS_server_method(void);
+const SSL_METHOD *TLS_client_method(void);
+
+const SSL_METHOD *SSLv23_method(void);
+const SSL_METHOD *SSLv23_server_method(void);
+const SSL_METHOD *SSLv23_client_method(void);
+
+#ifndef OPENSSL_NO_SSL3_METHOD
+const SSL_METHOD *SSLv3_method(void);
+const SSL_METHOD *SSLv3_server_method(void);
+const SSL_METHOD *SSLv3_client_method(void);
+#endif
+
+#ifndef OPENSSL_NO_TLS1_METHOD
+const SSL_METHOD *TLSv1_method(void);
+const SSL_METHOD *TLSv1_server_method(void);
+const SSL_METHOD *TLSv1_client_method(void);
+#endif
+
+#ifndef OPENSSL_NO_TLS1_1_METHOD
+const SSL_METHOD *TLSv1_1_method(void);
+const SSL_METHOD *TLSv1_1_server_method(void);
+const SSL_METHOD *TLSv1_1_client_method(void);
+#endif
+
+#ifndef OPENSSL_NO_TLS1_2_METHOD
+const SSL_METHOD *TLSv1_2_method(void);
+const SSL_METHOD *TLSv1_2_server_method(void);
+const SSL_METHOD *TLSv1_2_client_method(void);
+#endif
+
+const SSL_METHOD *DTLS_method(void);
+const SSL_METHOD *DTLS_server_method(void);
+const SSL_METHOD *DTLS_client_method(void);
+
+#ifndef OPENSSL_NO_DTLS1_METHOD
+const SSL_METHOD *DTLSv1_method(void);
+const SSL_METHOD *DTLSv1_server_method(void);
+const SSL_METHOD *DTLSv1_client_method(void);
+#endif
+
+#ifndef OPENSSL_NO_DTLS1_2_METHOD
+const SSL_METHOD *DTLSv1_2_method(void);
+const SSL_METHOD *DTLSv1_2_server_method(void);
+const SSL_METHOD *DTLSv1_2_client_method(void);
+#endif
+ +

DESCRIPTION

+ +

SSL_CTX_new() creates a new SSL_CTX object as framework to establish TLS/SSL or DTLS enabled connections. An SSL_CTX object is reference counted. Creating an SSL_CTX object for the first time increments the reference count. Freeing it (using SSL_CTX_free) decrements it. When the reference count drops to zero, any memory or resources allocated to the SSL_CTX object are freed. SSL_CTX_up_ref() increments the reference count for an existing SSL_CTX structure.

+ +

NOTES

+ +

The SSL_CTX object uses method as connection method. The methods exist in a generic type (for client and server use), a server only type, and a client only type. method can be of the following types:

+ +
+ +
TLS_method(), TLS_server_method(), TLS_client_method()
+
+ +

These are the general-purpose version-flexible SSL/TLS methods. The actual protocol version used will be negotiated to the highest version mutually supported by the client and the server. The supported protocols are SSLv3, TLSv1, TLSv1.1, TLSv1.2 and TLSv1.3. Applications should use these methods, and avoid the version-specific methods described below, which are deprecated.

+ +
+
SSLv23_method(), SSLv23_server_method(), SSLv23_client_method()
+
+ +

These functions do not exist anymore, they have been renamed to TLS_method(), TLS_server_method() and TLS_client_method() respectively. Currently, the old function calls are renamed to the corresponding new ones by preprocessor macros, to ensure that existing code which uses the old function names still compiles. However, using the old function names is deprecated and new code should call the new functions instead.

+ +
+
TLSv1_2_method(), TLSv1_2_server_method(), TLSv1_2_client_method()
+
+ +

A TLS/SSL connection established with these methods will only understand the TLSv1.2 protocol. These methods are deprecated.

+ +
+
TLSv1_1_method(), TLSv1_1_server_method(), TLSv1_1_client_method()
+
+ +

A TLS/SSL connection established with these methods will only understand the TLSv1.1 protocol. These methods are deprecated.

+ +
+
TLSv1_method(), TLSv1_server_method(), TLSv1_client_method()
+
+ +

A TLS/SSL connection established with these methods will only understand the TLSv1 protocol. These methods are deprecated.

+ +
+
SSLv3_method(), SSLv3_server_method(), SSLv3_client_method()
+
+ +

A TLS/SSL connection established with these methods will only understand the SSLv3 protocol. The SSLv3 protocol is deprecated and should not be used.

+ +
+
DTLS_method(), DTLS_server_method(), DTLS_client_method()
+
+ +

These are the version-flexible DTLS methods. Currently supported protocols are DTLS 1.0 and DTLS 1.2.

+ +
+
DTLSv1_2_method(), DTLSv1_2_server_method(), DTLSv1_2_client_method()
+
+ +

These are the version-specific methods for DTLSv1.2. These methods are deprecated.

+ +
+
DTLSv1_method(), DTLSv1_server_method(), DTLSv1_client_method()
+
+ +

These are the version-specific methods for DTLSv1. These methods are deprecated.

+ +
+
+ +

SSL_CTX_new() initializes the list of ciphers, the session cache setting, the callbacks, the keys and certificates and the options to their default values.

+ +

TLS_method(), TLS_server_method(), TLS_client_method(), DTLS_method(), DTLS_server_method() and DTLS_client_method() are the version-flexible methods. All other methods only support one specific protocol version. Use the version-flexible methods instead of the version specific methods.

+ +

If you want to limit the supported protocols for the version flexible methods you can use SSL_CTX_set_min_proto_version(3), SSL_set_min_proto_version(3), SSL_CTX_set_max_proto_version(3) and SSL_set_max_proto_version(3) functions. Using these functions it is possible to choose e.g. TLS_server_method() and be able to negotiate with all possible clients, but to only allow newer protocols like TLS 1.0, TLS 1.1, TLS 1.2 or TLS 1.3.

+ +

The list of protocols available can also be limited using the SSL_OP_NO_SSLv3, SSL_OP_NO_TLSv1, SSL_OP_NO_TLSv1_1, SSL_OP_NO_TLSv1_3, SSL_OP_NO_TLSv1_2 and SSL_OP_NO_TLSv1_3 options of the SSL_CTX_set_options(3) or SSL_set_options(3) functions, but this approach is not recommended. Clients should avoid creating "holes" in the set of protocols they support. When disabling a protocol, make sure that you also disable either all previous or all subsequent protocol versions. In clients, when a protocol version is disabled without disabling all previous protocol versions, the effect is to also disable all subsequent protocol versions.

+ +

The SSLv3 protocol is deprecated and should generally not be used. Applications should typically use SSL_CTX_set_min_proto_version(3) to set the minimum protocol to at least TLS1_VERSION.

+ +

RETURN VALUES

+ +

The following return values can occur:

+ +
+ +
NULL
+
+ +

The creation of a new SSL_CTX object failed. Check the error stack to find out the reason.

+ +
+
Pointer to an SSL_CTX object
+
+ +

The return value points to an allocated SSL_CTX object.

+ +

SSL_CTX_up_ref() returns 1 for success and 0 for failure.

+ +
+
+ +

SEE ALSO

+ +

SSL_CTX_set_options(3), SSL_CTX_free(3), SSL_accept(3), SSL_CTX_set_min_proto_version(3), ssl(7), SSL_set_connect_state(3)

+ +

HISTORY

+ +

Support for SSLv2 and the corresponding SSLv2_method(), SSLv2_server_method() and SSLv2_client_method() functions where removed in OpenSSL 1.1.0.

+ +

SSLv23_method(), SSLv23_server_method() and SSLv23_client_method() were deprecated and the preferred TLS_method(), TLS_server_method() and TLS_client_method() functions were added in OpenSSL 1.1.0.

+ +

All version-specific methods were deprecated in OpenSSL 1.1.0.

+ +

COPYRIGHT

+ +

Copyright 2000-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_sess_number.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_sess_number.html new file mode 100644 index 00000000..a40f8b64 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_sess_number.html @@ -0,0 +1,89 @@ + + + + +SSL_CTX_sess_number + + + + + + + + + + +

NAME

+ +

SSL_CTX_sess_number, SSL_CTX_sess_connect, SSL_CTX_sess_connect_good, SSL_CTX_sess_connect_renegotiate, SSL_CTX_sess_accept, SSL_CTX_sess_accept_good, SSL_CTX_sess_accept_renegotiate, SSL_CTX_sess_hits, SSL_CTX_sess_cb_hits, SSL_CTX_sess_misses, SSL_CTX_sess_timeouts, SSL_CTX_sess_cache_full - obtain session cache statistics

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+long SSL_CTX_sess_number(SSL_CTX *ctx);
+long SSL_CTX_sess_connect(SSL_CTX *ctx);
+long SSL_CTX_sess_connect_good(SSL_CTX *ctx);
+long SSL_CTX_sess_connect_renegotiate(SSL_CTX *ctx);
+long SSL_CTX_sess_accept(SSL_CTX *ctx);
+long SSL_CTX_sess_accept_good(SSL_CTX *ctx);
+long SSL_CTX_sess_accept_renegotiate(SSL_CTX *ctx);
+long SSL_CTX_sess_hits(SSL_CTX *ctx);
+long SSL_CTX_sess_cb_hits(SSL_CTX *ctx);
+long SSL_CTX_sess_misses(SSL_CTX *ctx);
+long SSL_CTX_sess_timeouts(SSL_CTX *ctx);
+long SSL_CTX_sess_cache_full(SSL_CTX *ctx);
+ +

DESCRIPTION

+ +

SSL_CTX_sess_number() returns the current number of sessions in the internal session cache.

+ +

SSL_CTX_sess_connect() returns the number of started SSL/TLS handshakes in client mode.

+ +

SSL_CTX_sess_connect_good() returns the number of successfully established SSL/TLS sessions in client mode.

+ +

SSL_CTX_sess_connect_renegotiate() returns the number of started renegotiations in client mode.

+ +

SSL_CTX_sess_accept() returns the number of started SSL/TLS handshakes in server mode.

+ +

SSL_CTX_sess_accept_good() returns the number of successfully established SSL/TLS sessions in server mode.

+ +

SSL_CTX_sess_accept_renegotiate() returns the number of started renegotiations in server mode.

+ +

SSL_CTX_sess_hits() returns the number of successfully reused sessions. In client mode a session set with SSL_set_session(3) successfully reused is counted as a hit. In server mode a session successfully retrieved from internal or external cache is counted as a hit.

+ +

SSL_CTX_sess_cb_hits() returns the number of successfully retrieved sessions from the external session cache in server mode.

+ +

SSL_CTX_sess_misses() returns the number of sessions proposed by clients that were not found in the internal session cache in server mode.

+ +

SSL_CTX_sess_timeouts() returns the number of sessions proposed by clients and either found in the internal or external session cache in server mode, but that were invalid due to timeout. These sessions are not included in the SSL_CTX_sess_hits() count.

+ +

SSL_CTX_sess_cache_full() returns the number of sessions that were removed because the maximum session cache size was exceeded.

+ +

RETURN VALUES

+ +

The functions return the values indicated in the DESCRIPTION section.

+ +

SEE ALSO

+ +

ssl(7), SSL_set_session(3), SSL_CTX_set_session_cache_mode(3) SSL_CTX_sess_set_cache_size(3)

+ +

COPYRIGHT

+ +

Copyright 2001-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_sess_set_cache_size.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_sess_set_cache_size.html new file mode 100644 index 00000000..a10dc722 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_sess_set_cache_size.html @@ -0,0 +1,70 @@ + + + + +SSL_CTX_sess_set_cache_size + + + + + + + + + + +

NAME

+ +

SSL_CTX_sess_set_cache_size, SSL_CTX_sess_get_cache_size - manipulate session cache size

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+long SSL_CTX_sess_set_cache_size(SSL_CTX *ctx, long t);
+long SSL_CTX_sess_get_cache_size(SSL_CTX *ctx);
+ +

DESCRIPTION

+ +

SSL_CTX_sess_set_cache_size() sets the size of the internal session cache of context ctx to t. This value is a hint and not an absolute; see the notes below.

+ +

SSL_CTX_sess_get_cache_size() returns the currently valid session cache size.

+ +

NOTES

+ +

The internal session cache size is SSL_SESSION_CACHE_MAX_SIZE_DEFAULT, currently 1024*20, so that up to 20000 sessions can be held. This size can be modified using the SSL_CTX_sess_set_cache_size() call. A special case is the size 0, which is used for unlimited size.

+ +

If adding the session makes the cache exceed its size, then unused sessions are dropped from the end of the cache. Cache space may also be reclaimed by calling SSL_CTX_flush_sessions(3) to remove expired sessions.

+ +

If the size of the session cache is reduced and more sessions are already in the session cache, old session will be removed at the next time a session shall be added. This removal is not synchronized with the expiration of sessions.

+ +

RETURN VALUES

+ +

SSL_CTX_sess_set_cache_size() returns the previously valid size.

+ +

SSL_CTX_sess_get_cache_size() returns the currently valid size.

+ +

SEE ALSO

+ +

ssl(7), SSL_CTX_set_session_cache_mode(3), SSL_CTX_sess_number(3), SSL_CTX_flush_sessions(3)

+ +

COPYRIGHT

+ +

Copyright 2001-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_sess_set_get_cb.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_sess_set_get_cb.html new file mode 100644 index 00000000..82e583f7 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_sess_set_get_cb.html @@ -0,0 +1,93 @@ + + + + +SSL_CTX_sess_set_get_cb + + + + + + + + + + +

NAME

+ +

SSL_CTX_sess_set_new_cb, SSL_CTX_sess_set_remove_cb, SSL_CTX_sess_set_get_cb, SSL_CTX_sess_get_new_cb, SSL_CTX_sess_get_remove_cb, SSL_CTX_sess_get_get_cb - provide callback functions for server side external session caching

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+void SSL_CTX_sess_set_new_cb(SSL_CTX *ctx,
+                             int (*new_session_cb)(SSL *, SSL_SESSION *));
+void SSL_CTX_sess_set_remove_cb(SSL_CTX *ctx,
+                                void (*remove_session_cb)(SSL_CTX *ctx,
+                                                          SSL_SESSION *));
+void SSL_CTX_sess_set_get_cb(SSL_CTX *ctx,
+                             SSL_SESSION (*get_session_cb)(SSL *,
+                                                           const unsigned char *,
+                                                           int, int *));
+
+int (*SSL_CTX_sess_get_new_cb(SSL_CTX *ctx))(struct ssl_st *ssl,
+                                             SSL_SESSION *sess);
+void (*SSL_CTX_sess_get_remove_cb(SSL_CTX *ctx))(struct ssl_ctx_st *ctx,
+                                                 SSL_SESSION *sess);
+SSL_SESSION *(*SSL_CTX_sess_get_get_cb(SSL_CTX *ctx))(struct ssl_st *ssl,
+                                                      const unsigned char *data,
+                                                      int len, int *copy);
+ +

DESCRIPTION

+ +

SSL_CTX_sess_set_new_cb() sets the callback function that is called whenever a new session was negotiated.

+ +

SSL_CTX_sess_set_remove_cb() sets the callback function that is called whenever a session is removed by the SSL engine. For example, this can occur because a session is considered faulty or has become obsolete because of exceeding the timeout value.

+ +

SSL_CTX_sess_set_get_cb() sets the callback function that is called whenever a TLS client proposed to resume a session but the session could not be found in the internal session cache (see SSL_CTX_set_session_cache_mode(3)). (TLS server only.)

+ +

SSL_CTX_sess_get_new_cb(), SSL_CTX_sess_get_remove_cb(), and SSL_CTX_sess_get_get_cb() retrieve the function pointers set by the corresponding set callback functions. If a callback function has not been set, the NULL pointer is returned.

+ +

NOTES

+ +

In order to allow external session caching, synchronization with the internal session cache is realized via callback functions. Inside these callback functions, session can be saved to disk or put into a database using the d2i_SSL_SESSION(3) interface.

+ +

The new_session_cb() is called whenever a new session has been negotiated and session caching is enabled (see SSL_CTX_set_session_cache_mode(3)). The new_session_cb() is passed the ssl connection and the nascent ssl session sess. Since sessions are reference-counted objects, the reference count on the session is incremented before the callback, on behalf of the application. If the callback returns 0, the session will be immediately removed from the internal cache and the reference count released. If the callback returns 1, the application retains the reference (for an entry in the application-maintained "external session cache"), and is responsible for calling SSL_SESSION_free() when the session reference is no longer in use.

+ +

Note that in TLSv1.3, sessions are established after the main handshake has completed. The server decides when to send the client the session information and this may occur some time after the end of the handshake (or not at all). This means that applications should expect the new_session_cb() function to be invoked during the handshake (for <= TLSv1.2) or after the handshake (for TLSv1.3). It is also possible in TLSv1.3 for multiple sessions to be established with a single connection. In these case the new_session_cb() function will be invoked multiple times.

+ +

In TLSv1.3 it is recommended that each SSL_SESSION object is only used for resumption once. One way of enforcing that is for applications to call SSL_CTX_remove_session(3) after a session has been used.

+ +

The remove_session_cb() is called whenever the SSL engine removes a session from the internal cache. This can happen when the session is removed because it is expired or when a connection was not shutdown cleanly. It also happens for all sessions in the internal session cache when SSL_CTX_free(3) is called. The remove_session_cb() is passed the ctx and the ssl session sess. It does not provide any feedback.

+ +

The get_session_cb() is only called on SSL/TLS servers, and is given the session id proposed by the client. The get_session_cb() is always called, even when session caching was disabled. The get_session_cb() is passed the ssl connection and the session id of length length at the memory location data. By setting the parameter copy to 1, the callback can require the SSL engine to increment the reference count of the SSL_SESSION object; setting copy to 0 causes the reference count to remain unchanged. If the get_session_cb() does not write to copy, the reference count is incremented and the session must be explicitly freed with SSL_SESSION_free(3).

+ +

RETURN VALUES

+ +

SSL_CTX_sess_get_new_cb(), SSL_CTX_sess_get_remove_cb() and SSL_CTX_sess_get_get_cb() return different callback function pointers respectively.

+ +

SEE ALSO

+ +

ssl(7), d2i_SSL_SESSION(3), SSL_CTX_set_session_cache_mode(3), SSL_CTX_flush_sessions(3), SSL_SESSION_free(3), SSL_CTX_free(3)

+ +

COPYRIGHT

+ +

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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_sessions.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_sessions.html new file mode 100644 index 00000000..b2990840 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_sessions.html @@ -0,0 +1,61 @@ + + + + +SSL_CTX_sessions + + + + + + + + + + +

NAME

+ +

SSL_CTX_sessions - access internal session cache

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+struct lhash_st *SSL_CTX_sessions(SSL_CTX *ctx);
+ +

DESCRIPTION

+ +

SSL_CTX_sessions() returns a pointer to the lhash databases containing the internal session cache for ctx.

+ +

NOTES

+ +

The sessions in the internal session cache are kept in an LHASH(3) type database. It is possible to directly access this database e.g. for searching. In parallel, the sessions form a linked list which is maintained separately from the LHASH(3) operations, so that the database must not be modified directly but by using the SSL_CTX_add_session(3) family of functions.

+ +

RETURN VALUES

+ +

SSL_CTX_sessions() returns a pointer to the lhash of SSL_SESSION.

+ +

SEE ALSO

+ +

ssl(7), LHASH(3), SSL_CTX_add_session(3), SSL_CTX_set_session_cache_mode(3)

+ +

COPYRIGHT

+ +

Copyright 2001-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set0_CA_list.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set0_CA_list.html new file mode 100644 index 00000000..76ca3839 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set0_CA_list.html @@ -0,0 +1,130 @@ + + + + +SSL_CTX_set0_CA_list + + + + + + + + + + +

NAME

+ +

SSL_CTX_set_client_CA_list, SSL_set_client_CA_list, SSL_get_client_CA_list, SSL_CTX_get_client_CA_list, SSL_CTX_add_client_CA, SSL_add_client_CA, SSL_set0_CA_list, SSL_CTX_set0_CA_list, SSL_get0_CA_list, SSL_CTX_get0_CA_list, SSL_add1_to_CA_list, SSL_CTX_add1_to_CA_list, SSL_get0_peer_CA_list - get or set CA list

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+void SSL_CTX_set_client_CA_list(SSL_CTX *ctx, STACK_OF(X509_NAME) *list);
+void SSL_set_client_CA_list(SSL *s, STACK_OF(X509_NAME) *list);
+STACK_OF(X509_NAME) *SSL_get_client_CA_list(const SSL *s);
+STACK_OF(X509_NAME) *SSL_CTX_get_client_CA_list(const SSL_CTX *ctx);
+int SSL_CTX_add_client_CA(SSL_CTX *ctx, X509 *cacert);
+int SSL_add_client_CA(SSL *ssl, X509 *cacert);
+
+void SSL_CTX_set0_CA_list(SSL_CTX *ctx, STACK_OF(X509_NAME) *name_list);
+void SSL_set0_CA_list(SSL *s, STACK_OF(X509_NAME) *name_list);
+const STACK_OF(X509_NAME) *SSL_CTX_get0_CA_list(const SSL_CTX *ctx);
+const STACK_OF(X509_NAME) *SSL_get0_CA_list(const SSL *s);
+int SSL_CTX_add1_to_CA_list(SSL_CTX *ctx, const X509 *x);
+int SSL_add1_to_CA_list(SSL *ssl, const X509 *x);
+
+const STACK_OF(X509_NAME) *SSL_get0_peer_CA_list(const SSL *s);
+ +

DESCRIPTION

+ +

The functions described here set and manage the list of CA names that are sent between two communicating peers.

+ +

For TLS versions 1.2 and earlier the list of CA names is only sent from the server to the client when requesting a client certificate. So any list of CA names set is never sent from client to server and the list of CA names retrieved by SSL_get0_peer_CA_list() is always NULL.

+ +

For TLS 1.3 the list of CA names is sent using the certificate_authorities extension and may be sent by a client (in the ClientHello message) or by a server (when requesting a certificate).

+ +

In most cases it is not necessary to set CA names on the client side. The list of CA names that are acceptable to the client will be sent in plaintext to the server. This has privacy implications and may also have performance implications if the list is large. This optional capability was introduced as part of TLSv1.3 and therefore setting CA names on the client side will have no impact if that protocol version has been disabled. Most servers do not need this and so this should be avoided unless required.

+ +

The "client CA list" functions below only have an effect when called on the server side.

+ +

SSL_CTX_set_client_CA_list() sets the list of CAs sent to the client when requesting a client certificate for ctx. Ownership of list is transferred to ctx and it should not be freed by the caller.

+ +

SSL_set_client_CA_list() sets the list of CAs sent to the client when requesting a client certificate for the chosen ssl, overriding the setting valid for ssl's SSL_CTX object. Ownership of list is transferred to s and it should not be freed by the caller.

+ +

SSL_CTX_get_client_CA_list() returns the list of client CAs explicitly set for ctx using SSL_CTX_set_client_CA_list(). The returned list should not be freed by the caller.

+ +

SSL_get_client_CA_list() returns the list of client CAs explicitly set for ssl using SSL_set_client_CA_list() or ssl's SSL_CTX object with SSL_CTX_set_client_CA_list(), when in server mode. In client mode, SSL_get_client_CA_list returns the list of client CAs sent from the server, if any. The returned list should not be freed by the caller.

+ +

SSL_CTX_add_client_CA() adds the CA name extracted from cacert to the list of CAs sent to the client when requesting a client certificate for ctx.

+ +

SSL_add_client_CA() adds the CA name extracted from cacert to the list of CAs sent to the client when requesting a client certificate for the chosen ssl, overriding the setting valid for ssl's SSL_CTX object.

+ +

SSL_get0_peer_CA_list() retrieves the list of CA names (if any) the peer has sent. This can be called on either the server or the client side. The returned list should not be freed by the caller.

+ +

The "generic CA list" functions below are very similar to the "client CA list" functions except that they have an effect on both the server and client sides. The lists of CA names managed are separate - so you cannot (for example) set CA names using the "client CA list" functions and then get them using the "generic CA list" functions. Where a mix of the two types of functions has been used on the server side then the "client CA list" functions take precedence. Typically, on the server side, the "client CA list " functions should be used in preference. As noted above in most cases it is not necessary to set CA names on the client side.

+ +

SSL_CTX_set0_CA_list() sets the list of CAs to be sent to the peer to name_list. Ownership of name_list is transferred to ctx and it should not be freed by the caller.

+ +

SSL_set0_CA_list() sets the list of CAs to be sent to the peer to name_list overriding any list set in the parent SSL_CTX of s. Ownership of name_list is transferred to s and it should not be freed by the caller.

+ +

SSL_CTX_get0_CA_list() retrieves any previously set list of CAs set for ctx. The returned list should not be freed by the caller.

+ +

SSL_get0_CA_list() retrieves any previously set list of CAs set for s or if none are set the list from the parent SSL_CTX is retrieved. The returned list should not be freed by the caller.

+ +

SSL_CTX_add1_to_CA_list() appends the CA subject name extracted from x to the list of CAs sent to peer for ctx.

+ +

SSL_add1_to_CA_list() appends the CA subject name extracted from x to the list of CAs sent to the peer for s, overriding the setting in the parent SSL_CTX.

+ +

NOTES

+ +

When a TLS/SSL server requests a client certificate (see SSL_CTX_set_verify(3)), it sends a list of CAs, for which it will accept certificates, to the client.

+ +

This list must explicitly be set using SSL_CTX_set_client_CA_list() or SSL_CTX_set0_CA_list() for ctx and SSL_set_client_CA_list() or SSL_set0_CA_list() for the specific ssl. The list specified overrides the previous setting. The CAs listed do not become trusted (list only contains the names, not the complete certificates); use SSL_CTX_load_verify_locations(3) to additionally load them for verification.

+ +

If the list of acceptable CAs is compiled in a file, the SSL_load_client_CA_file(3) function can be used to help to import the necessary data.

+ +

SSL_CTX_add_client_CA(), SSL_CTX_add1_to_CA_list(), SSL_add_client_CA() and SSL_add1_to_CA_list() can be used to add additional items the list of CAs. If no list was specified before using SSL_CTX_set_client_CA_list(), SSL_CTX_set0_CA_list(), SSL_set_client_CA_list() or SSL_set0_CA_list(), a new CA list for ctx or ssl (as appropriate) is opened.

+ +

RETURN VALUES

+ +

SSL_CTX_set_client_CA_list(), SSL_set_client_CA_list(), SSL_CTX_set_client_CA_list(), SSL_set_client_CA_list(), SSL_CTX_set0_CA_list() and SSL_set0_CA_list() do not return a value.

+ +

SSL_CTX_get_client_CA_list(), SSL_get_client_CA_list(), SSL_CTX_get0_CA_list() and SSL_get0_CA_list() return a stack of CA names or NULL is no CA names are set.

+ +

SSL_CTX_add_client_CA(),SSL_add_client_CA(), SSL_CTX_add1_to_CA_list() and SSL_add1_to_CA_list() return 1 for success and 0 for failure.

+ +

SSL_get0_peer_CA_list() returns a stack of CA names sent by the peer or NULL or an empty stack if no list was sent.

+ +

EXAMPLES

+ +

Scan all certificates in CAfile and list them as acceptable CAs:

+ +
SSL_CTX_set_client_CA_list(ctx, SSL_load_client_CA_file(CAfile));
+ +

SEE ALSO

+ +

ssl(7), SSL_load_client_CA_file(3), SSL_CTX_load_verify_locations(3)

+ +

COPYRIGHT

+ +

Copyright 2000-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set1_curves.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set1_curves.html new file mode 100644 index 00000000..4d026098 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set1_curves.html @@ -0,0 +1,102 @@ + + + + +SSL_CTX_set1_curves + + + + + + + + + + +

NAME

+ +

SSL_CTX_set1_groups, SSL_CTX_set1_groups_list, SSL_set1_groups, SSL_set1_groups_list, SSL_get1_groups, SSL_get_shared_group, SSL_CTX_set1_curves, SSL_CTX_set1_curves_list, SSL_set1_curves, SSL_set1_curves_list, SSL_get1_curves, SSL_get_shared_curve - EC supported curve functions

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+int SSL_CTX_set1_groups(SSL_CTX *ctx, int *glist, int glistlen);
+int SSL_CTX_set1_groups_list(SSL_CTX *ctx, char *list);
+
+int SSL_set1_groups(SSL *ssl, int *glist, int glistlen);
+int SSL_set1_groups_list(SSL *ssl, char *list);
+
+int SSL_get1_groups(SSL *ssl, int *groups);
+int SSL_get_shared_group(SSL *s, int n);
+
+int SSL_CTX_set1_curves(SSL_CTX *ctx, int *clist, int clistlen);
+int SSL_CTX_set1_curves_list(SSL_CTX *ctx, char *list);
+
+int SSL_set1_curves(SSL *ssl, int *clist, int clistlen);
+int SSL_set1_curves_list(SSL *ssl, char *list);
+
+int SSL_get1_curves(SSL *ssl, int *curves);
+int SSL_get_shared_curve(SSL *s, int n);
+ +

DESCRIPTION

+ +

For all of the functions below that set the supported groups there must be at least one group in the list.

+ +

SSL_CTX_set1_groups() sets the supported groups for ctx to glistlen groups in the array glist. The array consist of all NIDs of groups in preference order. For a TLS client the groups are used directly in the supported groups extension. For a TLS server the groups are used to determine the set of shared groups.

+ +

SSL_CTX_set1_groups_list() sets the supported groups for ctx to string list. The string is a colon separated list of group NIDs or names, for example "P-521:P-384:P-256".

+ +

SSL_set1_groups() and SSL_set1_groups_list() are similar except they set supported groups for the SSL structure ssl.

+ +

SSL_get1_groups() returns the set of supported groups sent by a client in the supported groups extension. It returns the total number of supported groups. The groups parameter can be NULL to simply return the number of groups for memory allocation purposes. The groups array is in the form of a set of group NIDs in preference order. It can return zero if the client did not send a supported groups extension.

+ +

SSL_get_shared_group() returns shared group n for a server-side SSL ssl. If n is -1 then the total number of shared groups is returned, which may be zero. Other than for diagnostic purposes, most applications will only be interested in the first shared group so n is normally set to zero. If the value n is out of range, NID_undef is returned.

+ +

All these functions are implemented as macros.

+ +

The curve functions are synonyms for the equivalently named group functions and are identical in every respect. They exist because, prior to TLS1.3, there was only the concept of supported curves. In TLS1.3 this was renamed to supported groups, and extended to include Diffie Hellman groups. The group functions should be used in preference.

+ +

NOTES

+ +

If an application wishes to make use of several of these functions for configuration purposes either on a command line or in a file it should consider using the SSL_CONF interface instead of manually parsing options.

+ +

RETURN VALUES

+ +

SSL_CTX_set1_groups(), SSL_CTX_set1_groups_list(), SSL_set1_groups() and SSL_set1_groups_list(), return 1 for success and 0 for failure.

+ +

SSL_get1_groups() returns the number of groups, which may be zero.

+ +

SSL_get_shared_group() returns the NID of shared group n or NID_undef if there is no shared group n; or the total number of shared groups if n is -1.

+ +

When called on a client ssl, SSL_get_shared_group() has no meaning and returns -1.

+ +

SEE ALSO

+ +

SSL_CTX_add_extra_chain_cert(3)

+ +

HISTORY

+ +

The curve functions were added in OpenSSL 1.0.2. The equivalent group functions were added in OpenSSL 1.1.1.

+ +

COPYRIGHT

+ +

Copyright 2013-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set1_sigalgs.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set1_sigalgs.html new file mode 100644 index 00000000..7efae4fe --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set1_sigalgs.html @@ -0,0 +1,106 @@ + + + + +SSL_CTX_set1_sigalgs + + + + + + + + + + +

NAME

+ +

SSL_CTX_set1_sigalgs, SSL_set1_sigalgs, SSL_CTX_set1_sigalgs_list, SSL_set1_sigalgs_list, SSL_CTX_set1_client_sigalgs, SSL_set1_client_sigalgs, SSL_CTX_set1_client_sigalgs_list, SSL_set1_client_sigalgs_list - set supported signature algorithms

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+long SSL_CTX_set1_sigalgs(SSL_CTX *ctx, const int *slist, long slistlen);
+long SSL_set1_sigalgs(SSL *ssl, const int *slist, long slistlen);
+long SSL_CTX_set1_sigalgs_list(SSL_CTX *ctx, const char *str);
+long SSL_set1_sigalgs_list(SSL *ssl, const char *str);
+
+long SSL_CTX_set1_client_sigalgs(SSL_CTX *ctx, const int *slist, long slistlen);
+long SSL_set1_client_sigalgs(SSL *ssl, const int *slist, long slistlen);
+long SSL_CTX_set1_client_sigalgs_list(SSL_CTX *ctx, const char *str);
+long SSL_set1_client_sigalgs_list(SSL *ssl, const char *str);
+ +

DESCRIPTION

+ +

SSL_CTX_set1_sigalgs() and SSL_set1_sigalgs() set the supported signature algorithms for ctx or ssl. The array slist of length slistlen must consist of pairs of NIDs corresponding to digest and public key algorithms.

+ +

SSL_CTX_set1_sigalgs_list() and SSL_set1_sigalgs_list() set the supported signature algorithms for ctx or ssl. The str parameter must be a null terminated string consisting of a colon separated list of elements, where each element is either a combination of a public key algorithm and a digest separated by +, or a TLS 1.3-style named SignatureScheme such as rsa_pss_pss_sha256.

+ +

SSL_CTX_set1_client_sigalgs(), SSL_set1_client_sigalgs(), SSL_CTX_set1_client_sigalgs_list() and SSL_set1_client_sigalgs_list() set signature algorithms related to client authentication, otherwise they are identical to SSL_CTX_set1_sigalgs(), SSL_set1_sigalgs(), SSL_CTX_set1_sigalgs_list() and SSL_set1_sigalgs_list().

+ +

All these functions are implemented as macros. The signature algorithm parameter (integer array or string) is not freed: the application should free it, if necessary.

+ +

NOTES

+ +

If an application wishes to allow the setting of signature algorithms as one of many user configurable options it should consider using the more flexible SSL_CONF API instead.

+ +

The signature algorithms set by a client are used directly in the supported signature algorithm in the client hello message.

+ +

The supported signature algorithms set by a server are not sent to the client but are used to determine the set of shared signature algorithms and (if server preferences are set with SSL_OP_CIPHER_SERVER_PREFERENCE) their order.

+ +

The client authentication signature algorithms set by a server are sent in a certificate request message if client authentication is enabled, otherwise they are unused.

+ +

Similarly client authentication signature algorithms set by a client are used to determined the set of client authentication shared signature algorithms.

+ +

Signature algorithms will neither be advertised nor used if the security level prohibits them (for example SHA1 if the security level is 4 or more).

+ +

Currently the NID_md5, NID_sha1, NID_sha224, NID_sha256, NID_sha384 and NID_sha512 digest NIDs are supported and the public key algorithm NIDs EVP_PKEY_RSA, EVP_PKEY_RSA_PSS, EVP_PKEY_DSA and EVP_PKEY_EC.

+ +

The short or long name values for digests can be used in a string (for example "MD5", "SHA1", "SHA224", "SHA256", "SHA384", "SHA512") and the public key algorithm strings "RSA", "RSA-PSS", "DSA" or "ECDSA".

+ +

The TLS 1.3 signature scheme names (such as "rsa_pss_pss_sha256") can also be used with the _list forms of the API.

+ +

The use of MD5 as a digest is strongly discouraged due to security weaknesses.

+ +

RETURN VALUES

+ +

All these functions return 1 for success and 0 for failure.

+ +

EXAMPLES

+ +

Set supported signature algorithms to SHA256 with ECDSA and SHA256 with RSA using an array:

+ +
const int slist[] = {NID_sha256, EVP_PKEY_EC, NID_sha256, EVP_PKEY_RSA};
+
+SSL_CTX_set1_sigalgs(ctx, slist, 4);
+ +

Set supported signature algorithms to SHA256 with ECDSA and SHA256 with RSA using a string:

+ +
SSL_CTX_set1_sigalgs_list(ctx, "ECDSA+SHA256:RSA+SHA256");
+ +

SEE ALSO

+ +

ssl(7), SSL_get_shared_sigalgs(3), SSL_CONF_CTX_new(3)

+ +

COPYRIGHT

+ +

Copyright 2015-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set1_verify_cert_store.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set1_verify_cert_store.html new file mode 100644 index 00000000..8d08b842 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set1_verify_cert_store.html @@ -0,0 +1,90 @@ + + + + +SSL_CTX_set1_verify_cert_store + + + + + + + + + + +

NAME

+ +

SSL_CTX_set0_verify_cert_store, SSL_CTX_set1_verify_cert_store, SSL_CTX_set0_chain_cert_store, SSL_CTX_set1_chain_cert_store, SSL_set0_verify_cert_store, SSL_set1_verify_cert_store, SSL_set0_chain_cert_store, SSL_set1_chain_cert_store - set certificate verification or chain store

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+int SSL_CTX_set0_verify_cert_store(SSL_CTX *ctx, X509_STORE *st);
+int SSL_CTX_set1_verify_cert_store(SSL_CTX *ctx, X509_STORE *st);
+int SSL_CTX_set0_chain_cert_store(SSL_CTX *ctx, X509_STORE *st);
+int SSL_CTX_set1_chain_cert_store(SSL_CTX *ctx, X509_STORE *st);
+
+int SSL_set0_verify_cert_store(SSL *ctx, X509_STORE *st);
+int SSL_set1_verify_cert_store(SSL *ctx, X509_STORE *st);
+int SSL_set0_chain_cert_store(SSL *ctx, X509_STORE *st);
+int SSL_set1_chain_cert_store(SSL *ctx, X509_STORE *st);
+ +

DESCRIPTION

+ +

SSL_CTX_set0_verify_cert_store() and SSL_CTX_set1_verify_cert_store() set the certificate store used for certificate verification to st.

+ +

SSL_CTX_set0_chain_cert_store() and SSL_CTX_set1_chain_cert_store() set the certificate store used for certificate chain building to st.

+ +

SSL_set0_verify_cert_store(), SSL_set1_verify_cert_store(), SSL_set0_chain_cert_store() and SSL_set1_chain_cert_store() are similar except they apply to SSL structure ssl.

+ +

All these functions are implemented as macros. Those containing a 1 increment the reference count of the supplied store so it must be freed at some point after the operation. Those containing a 0 do not increment reference counts and the supplied store MUST NOT be freed after the operation.

+ +

NOTES

+ +

The stores pointers associated with an SSL_CTX structure are copied to any SSL structures when SSL_new() is called. As a result SSL structures will not be affected if the parent SSL_CTX store pointer is set to a new value.

+ +

The verification store is used to verify the certificate chain sent by the peer: that is an SSL/TLS client will use the verification store to verify the server's certificate chain and a SSL/TLS server will use it to verify any client certificate chain.

+ +

The chain store is used to build the certificate chain.

+ +

If the mode SSL_MODE_NO_AUTO_CHAIN is set or a certificate chain is configured already (for example using the functions such as SSL_CTX_add1_chain_cert(3) or SSL_CTX_add_extra_chain_cert(3)) then automatic chain building is disabled.

+ +

If the mode SSL_MODE_NO_AUTO_CHAIN is set then automatic chain building is disabled.

+ +

If the chain or the verification store is not set then the store associated with the parent SSL_CTX is used instead to retain compatibility with previous versions of OpenSSL.

+ +

RETURN VALUES

+ +

All these functions return 1 for success and 0 for failure.

+ +

SEE ALSO

+ +

SSL_CTX_add_extra_chain_cert(3) SSL_CTX_set0_chain(3) SSL_CTX_set1_chain(3) SSL_CTX_add0_chain_cert(3) SSL_CTX_add1_chain_cert(3) SSL_set0_chain(3) SSL_set1_chain(3) SSL_add0_chain_cert(3) SSL_add1_chain_cert(3) SSL_CTX_build_cert_chain(3) SSL_build_cert_chain(3)

+ +

HISTORY

+ +

These functions were added in OpenSSL 1.0.2.

+ +

COPYRIGHT

+ +

Copyright 2013-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_alpn_select_cb.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_alpn_select_cb.html new file mode 100644 index 00000000..7315d486 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_alpn_select_cb.html @@ -0,0 +1,167 @@ + + + + +SSL_CTX_set_alpn_select_cb + + + + + + + + + + +

NAME

+ +

SSL_CTX_set_alpn_protos, SSL_set_alpn_protos, SSL_CTX_set_alpn_select_cb, SSL_CTX_set_next_proto_select_cb, SSL_CTX_set_next_protos_advertised_cb, SSL_select_next_proto, SSL_get0_alpn_selected, SSL_get0_next_proto_negotiated - handle application layer protocol negotiation (ALPN)

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+int SSL_CTX_set_alpn_protos(SSL_CTX *ctx, const unsigned char *protos,
+                            unsigned int protos_len);
+int SSL_set_alpn_protos(SSL *ssl, const unsigned char *protos,
+                        unsigned int protos_len);
+void SSL_CTX_set_alpn_select_cb(SSL_CTX *ctx,
+                                int (*cb) (SSL *ssl,
+                                           const unsigned char **out,
+                                           unsigned char *outlen,
+                                           const unsigned char *in,
+                                           unsigned int inlen,
+                                           void *arg), void *arg);
+void SSL_get0_alpn_selected(const SSL *ssl, const unsigned char **data,
+                            unsigned int *len);
+
+void SSL_CTX_set_next_protos_advertised_cb(SSL_CTX *ctx,
+                                           int (*cb)(SSL *ssl,
+                                                     const unsigned char **out,
+                                                     unsigned int *outlen,
+                                                     void *arg),
+                                           void *arg);
+void SSL_CTX_set_next_proto_select_cb(SSL_CTX *ctx,
+                              int (*cb)(SSL *s,
+                                        unsigned char **out,
+                                        unsigned char *outlen,
+                                        const unsigned char *in,
+                                        unsigned int inlen,
+                                        void *arg),
+                              void *arg);
+int SSL_select_next_proto(unsigned char **out, unsigned char *outlen,
+                          const unsigned char *server,
+                          unsigned int server_len,
+                          const unsigned char *client,
+                          unsigned int client_len)
+void SSL_get0_next_proto_negotiated(const SSL *s, const unsigned char **data,
+                            unsigned *len);
+ +

DESCRIPTION

+ +

SSL_CTX_set_alpn_protos() and SSL_set_alpn_protos() are used by the client to set the list of protocols available to be negotiated. The protos must be in protocol-list format, described below. The length of protos is specified in protos_len.

+ +

SSL_CTX_set_alpn_select_cb() sets the application callback cb used by a server to select which protocol to use for the incoming connection. When cb is NULL, ALPN is not used. The arg value is a pointer which is passed to the application callback.

+ +

cb is the application defined callback. The in, inlen parameters are a vector in protocol-list format. The value of the out, outlen vector should be set to the value of a single protocol selected from the in, inlen vector. The out buffer may point directly into in, or to a buffer that outlives the handshake. The arg parameter is the pointer set via SSL_CTX_set_alpn_select_cb().

+ +

SSL_select_next_proto() is a helper function used to select protocols. It implements the standard protocol selection. It is expected that this function is called from the application callback cb. The protocol data in server, server_len and client, client_len must be in the protocol-list format described below. The first item in the server, server_len list that matches an item in the client, client_len list is selected, and returned in out, outlen. The out value will point into either server or client, so it should be copied immediately. If no match is found, the first item in client, client_len is returned in out, outlen. This function can also be used in the NPN callback.

+ +

SSL_CTX_set_next_proto_select_cb() sets a callback cb that is called when a client needs to select a protocol from the server's provided list, and a user-defined pointer argument arg which will be passed to this callback. For the callback itself, out must be set to point to the selected protocol (which may be within in). The length of the protocol name must be written into outlen. The server's advertised protocols are provided in in and inlen. The callback can assume that in is syntactically valid. The client must select a protocol. It is fatal to the connection if this callback returns a value other than SSL_TLSEXT_ERR_OK. The arg parameter is the pointer set via SSL_CTX_set_next_proto_select_cb().

+ +

SSL_CTX_set_next_protos_advertised_cb() sets a callback cb that is called when a TLS server needs a list of supported protocols for Next Protocol Negotiation. The returned list must be in protocol-list format, described below. The list is returned by setting out to point to it and outlen to its length. This memory will not be modified, but the SSL does keep a reference to it. The callback should return SSL_TLSEXT_ERR_OK if it wishes to advertise. Otherwise, no such extension will be included in the ServerHello.

+ +

SSL_get0_alpn_selected() returns a pointer to the selected protocol in data with length len. It is not NUL-terminated. data is set to NULL and len is set to 0 if no protocol has been selected. data must not be freed.

+ +

SSL_get0_next_proto_negotiated() sets data and len to point to the client's requested protocol for this connection. If the client did not request any protocol or NPN is not enabled, then data is set to NULL and len to 0. Note that the client can request any protocol it chooses. The value returned from this function need not be a member of the list of supported protocols provided by the callback.

+ +

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 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.

+ +

Example:

+ +
unsigned char vector[] = {
+    6, 's', 'p', 'd', 'y', '/', '1',
+    8, 'h', 't', 't', 'p', '/', '1', '.', '1'
+};
+unsigned int length = sizeof(vector);
+ +

The ALPN callback is executed after the servername callback; as that servername callback may update the SSL_CTX, and subsequently, the ALPN callback.

+ +

If there is no ALPN proposed in the ClientHello, the ALPN callback is not invoked.

+ +

RETURN VALUES

+ +

SSL_CTX_set_alpn_protos() and SSL_set_alpn_protos() return 0 on success, and non-0 on failure. WARNING: these functions reverse the return value convention.

+ +

SSL_select_next_proto() returns one of the following:

+ +
+ +
OPENSSL_NPN_NEGOTIATED
+
+ +

A match was found and is returned in out, outlen.

+ +
+
OPENSSL_NPN_NO_OVERLAP
+
+ +

No match was found. The first item in client, client_len is returned in out, outlen.

+ +
+
+ +

The ALPN select callback cb, must return one of the following:

+ +
+ +
SSL_TLSEXT_ERR_OK
+
+ +

ALPN protocol selected.

+ +
+
SSL_TLSEXT_ERR_ALERT_FATAL
+
+ +

There was no overlap between the client's supplied list and the server configuration.

+ +
+
SSL_TLSEXT_ERR_NOACK
+
+ +

ALPN protocol not selected, e.g., because no ALPN protocols are configured for this connection.

+ +
+
+ +

The callback set using SSL_CTX_set_next_proto_select_cb() should return SSL_TLSEXT_ERR_OK if successful. Any other value is fatal to the connection.

+ +

The callback set using SSL_CTX_set_next_protos_advertised_cb() should return SSL_TLSEXT_ERR_OK if it wishes to advertise. Otherwise, no such extension will be included in the ServerHello.

+ +

SEE ALSO

+ +

ssl(7), SSL_CTX_set_tlsext_servername_callback(3), SSL_CTX_set_tlsext_servername_arg(3)

+ +

COPYRIGHT

+ +

Copyright 2016-2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_cert_cb.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_cert_cb.html new file mode 100644 index 00000000..f249a6ed --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_cert_cb.html @@ -0,0 +1,77 @@ + + + + +SSL_CTX_set_cert_cb + + + + + + + + + + +

NAME

+ +

SSL_CTX_set_cert_cb, SSL_set_cert_cb - handle certificate callback function

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+void SSL_CTX_set_cert_cb(SSL_CTX *c, int (*cert_cb)(SSL *ssl, void *arg),
+                         void *arg);
+void SSL_set_cert_cb(SSL *s, int (*cert_cb)(SSL *ssl, void *arg), void *arg);
+
+int (*cert_cb)(SSL *ssl, void *arg);
+ +

DESCRIPTION

+ +

SSL_CTX_set_cert_cb() and SSL_set_cert_cb() sets the cert_cb() callback, arg value is pointer which is passed to the application callback.

+ +

When cert_cb() is NULL, no callback function is used.

+ +

cert_cb() is the application defined callback. It is called before a certificate will be used by a client or server. The callback can then inspect the passed ssl structure and set or clear any appropriate certificates. If the callback is successful it MUST return 1 even if no certificates have been set. A zero is returned on error which will abort the handshake with a fatal internal error alert. A negative return value will suspend the handshake and the handshake function will return immediately. SSL_get_error(3) will return SSL_ERROR_WANT_X509_LOOKUP to indicate, that the handshake was suspended. The next call to the handshake function will again lead to the call of cert_cb(). It is the job of the cert_cb() to store information about the state of the last call, if required to continue.

+ +

NOTES

+ +

An application will typically call SSL_use_certificate() and SSL_use_PrivateKey() to set the end entity certificate and private key. It can add intermediate and optionally the root CA certificates using SSL_add1_chain_cert().

+ +

It might also call SSL_certs_clear() to delete any certificates associated with the SSL object.

+ +

The certificate callback functionality supersedes the (largely broken) functionality provided by the old client certificate callback interface. It is always called even is a certificate is already set so the callback can modify or delete the existing certificate.

+ +

A more advanced callback might examine the handshake parameters and set whatever chain is appropriate. For example a legacy client supporting only TLSv1.0 might receive a certificate chain signed using SHA1 whereas a TLSv1.2 or later client which advertises support for SHA256 could receive a chain using SHA256.

+ +

Normal server sanity checks are performed on any certificates set by the callback. So if an EC chain is set for a curve the client does not support it will not be used.

+ +

RETURN VALUES

+ +

SSL_CTX_set_cert_cb() and SSL_set_cert_cb() do not return values.

+ +

SEE ALSO

+ +

ssl(7), SSL_use_certificate(3), SSL_add1_chain_cert(3), SSL_get_client_CA_list(3), SSL_clear(3), SSL_free(3)

+ +

COPYRIGHT

+ +

Copyright 2014-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_cert_store.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_cert_store.html new file mode 100644 index 00000000..53acd914 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_cert_store.html @@ -0,0 +1,84 @@ + + + + +SSL_CTX_set_cert_store + + + + + + + + + + +

NAME

+ +

SSL_CTX_set_cert_store, SSL_CTX_set1_cert_store, SSL_CTX_get_cert_store - manipulate X509 certificate verification storage

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+void SSL_CTX_set_cert_store(SSL_CTX *ctx, X509_STORE *store);
+void SSL_CTX_set1_cert_store(SSL_CTX *ctx, X509_STORE *store);
+X509_STORE *SSL_CTX_get_cert_store(const SSL_CTX *ctx);
+ +

DESCRIPTION

+ +

SSL_CTX_set_cert_store() sets/replaces the certificate verification storage of ctx to/with store. If another X509_STORE object is currently set in ctx, it will be X509_STORE_free()ed.

+ +

SSL_CTX_set1_cert_store() sets/replaces the certificate verification storage of ctx to/with store. The store's reference count is incremented. If another X509_STORE object is currently set in ctx, it will be X509_STORE_free()ed.

+ +

SSL_CTX_get_cert_store() returns a pointer to the current certificate verification storage.

+ +

NOTES

+ +

In order to verify the certificates presented by the peer, trusted CA certificates must be accessed. These CA certificates are made available via lookup methods, handled inside the X509_STORE. From the X509_STORE the X509_STORE_CTX used when verifying certificates is created.

+ +

Typically the trusted certificate store is handled indirectly via using SSL_CTX_load_verify_locations(3). Using the SSL_CTX_set_cert_store() and SSL_CTX_get_cert_store() functions it is possible to manipulate the X509_STORE object beyond the SSL_CTX_load_verify_locations(3) call.

+ +

Currently no detailed documentation on how to use the X509_STORE object is available. Not all members of the X509_STORE are used when the verification takes place. So will e.g. the verify_callback() be overridden with the verify_callback() set via the SSL_CTX_set_verify(3) family of functions. This document must therefore be updated when documentation about the X509_STORE object and its handling becomes available.

+ +

SSL_CTX_set_cert_store() does not increment the store's reference count, so it should not be used to assign an X509_STORE that is owned by another SSL_CTX.

+ +

To share X509_STOREs between two SSL_CTXs, use SSL_CTX_get_cert_store() to get the X509_STORE from the first SSL_CTX, and then use SSL_CTX_set1_cert_store() to assign to the second SSL_CTX and increment the reference count of the X509_STORE.

+ +

RESTRICTIONS

+ +

The X509_STORE structure used by an SSL_CTX is used for verifying peer certificates and building certificate chains, it is also shared by every child SSL structure. Applications wanting finer control can use functions such as SSL_CTX_set1_verify_cert_store() instead.

+ +

RETURN VALUES

+ +

SSL_CTX_set_cert_store() does not return diagnostic output.

+ +

SSL_CTX_set1_cert_store() does not return diagnostic output.

+ +

SSL_CTX_get_cert_store() returns the current setting.

+ +

SEE ALSO

+ +

ssl(7), SSL_CTX_load_verify_locations(3), SSL_CTX_set_verify(3)

+ +

COPYRIGHT

+ +

Copyright 2001-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_cert_verify_callback.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_cert_verify_callback.html new file mode 100644 index 00000000..c6c8b4b6 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_cert_verify_callback.html @@ -0,0 +1,81 @@ + + + + +SSL_CTX_set_cert_verify_callback + + + + + + + + + + +

NAME

+ +

SSL_CTX_set_cert_verify_callback - set peer certificate verification procedure

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+void SSL_CTX_set_cert_verify_callback(SSL_CTX *ctx,
+                                      int (*callback)(X509_STORE_CTX *, void *),
+                                      void *arg);
+ +

DESCRIPTION

+ +

SSL_CTX_set_cert_verify_callback() sets the verification callback function for ctx. SSL objects that are created from ctx inherit the setting valid at the time when SSL_new(3) is called.

+ +

NOTES

+ +

Whenever a certificate is verified during a SSL/TLS handshake, a verification function is called. If the application does not explicitly specify a verification callback function, the built-in verification function is used. If a verification callback callback is specified via SSL_CTX_set_cert_verify_callback(), the supplied callback function is called instead. By setting callback to NULL, the default behaviour is restored.

+ +

When the verification must be performed, callback will be called with the arguments callback(X509_STORE_CTX *x509_store_ctx, void *arg). The argument arg is specified by the application when setting callback.

+ +

callback should return 1 to indicate verification success and 0 to indicate verification failure. If SSL_VERIFY_PEER is set and callback returns 0, the handshake will fail. As the verification procedure may allow the connection to continue in the case of failure (by always returning 1) the verification result must be set in any case using the error member of x509_store_ctx so that the calling application will be informed about the detailed result of the verification procedure!

+ +

Within x509_store_ctx, callback has access to the verify_callback function set using SSL_CTX_set_verify(3).

+ +

RETURN VALUES

+ +

SSL_CTX_set_cert_verify_callback() does not return a value.

+ +

WARNINGS

+ +

Do not mix the verification callback described in this function with the verify_callback function called during the verification process. The latter is set using the SSL_CTX_set_verify(3) family of functions.

+ +

Providing a complete verification procedure including certificate purpose settings etc is a complex task. The built-in procedure is quite powerful and in most cases it should be sufficient to modify its behaviour using the verify_callback function.

+ +

BUGS

+ +

SSL_CTX_set_cert_verify_callback() does not provide diagnostic information.

+ +

SEE ALSO

+ +

ssl(7), SSL_CTX_set_verify(3), SSL_get_verify_result(3), SSL_CTX_load_verify_locations(3)

+ +

COPYRIGHT

+ +

Copyright 2001-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_cipher_list.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_cipher_list.html new file mode 100644 index 00000000..8e93cdb7 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_cipher_list.html @@ -0,0 +1,109 @@ + + + + +SSL_CTX_set_cipher_list + + + + + + + + + + +

NAME

+ +

SSL_CTX_set_cipher_list, SSL_set_cipher_list, SSL_CTX_set_ciphersuites, SSL_set_ciphersuites - choose list of available SSL_CIPHERs

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+int SSL_CTX_set_cipher_list(SSL_CTX *ctx, const char *str);
+int SSL_set_cipher_list(SSL *ssl, const char *str);
+
+int SSL_CTX_set_ciphersuites(SSL_CTX *ctx, const char *str);
+int SSL_set_ciphersuites(SSL *s, const char *str);
+ +

DESCRIPTION

+ +

SSL_CTX_set_cipher_list() sets the list of available ciphers (TLSv1.2 and below) for ctx using the control string str. The format of the string is described in ciphers(1). The list of ciphers is inherited by all ssl objects created from ctx. This function does not impact TLSv1.3 ciphersuites. Use SSL_CTX_set_ciphersuites() to configure those.

+ +

SSL_set_cipher_list() sets the list of ciphers (TLSv1.2 and below) only for ssl.

+ +

SSL_CTX_set_ciphersuites() is used to configure the available TLSv1.3 ciphersuites for ctx. This is a simple colon (":") separated list of TLSv1.3 ciphersuite names in order of preference. Valid TLSv1.3 ciphersuite names are:

+ +
+ +
TLS_AES_128_GCM_SHA256
+
+ +
+
TLS_AES_256_GCM_SHA384
+
+ +
+
TLS_CHACHA20_POLY1305_SHA256
+
+ +
+
TLS_AES_128_CCM_SHA256
+
+ +
+
TLS_AES_128_CCM_8_SHA256
+
+ +
+
+ +

An empty list is permissible. The default value for the this setting is:

+ +

"TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256"

+ +

SSL_set_ciphersuites() is the same as SSL_CTX_set_ciphersuites() except it configures the ciphersuites for ssl.

+ +

NOTES

+ +

The control string str for SSL_CTX_set_cipher_list() and SSL_set_cipher_list() should be universally usable and not depend on details of the library configuration (ciphers compiled in). Thus no syntax checking takes place. Items that are not recognized, because the corresponding ciphers are not compiled in or because they are mistyped, are simply ignored. Failure is only flagged if no ciphers could be collected at all.

+ +

It should be noted, that inclusion of a cipher to be used into the list is a necessary condition. On the client side, the inclusion into the list is also sufficient unless the security level excludes it. On the server side, additional restrictions apply. All ciphers have additional requirements. ADH ciphers don't need a certificate, but DH-parameters must have been set. All other ciphers need a corresponding certificate and key.

+ +

A RSA cipher can only be chosen, when a RSA certificate is available. RSA ciphers using DHE need a certificate and key and additional DH-parameters (see SSL_CTX_set_tmp_dh_callback(3)).

+ +

A DSA cipher can only be chosen, when a DSA certificate is available. DSA ciphers always use DH key exchange and therefore need DH-parameters (see SSL_CTX_set_tmp_dh_callback(3)).

+ +

When these conditions are not met for any cipher in the list (e.g. a client only supports export RSA ciphers with an asymmetric key length of 512 bits and the server is not configured to use temporary RSA keys), the "no shared cipher" (SSL_R_NO_SHARED_CIPHER) error is generated and the handshake will fail.

+ +

RETURN VALUES

+ +

SSL_CTX_set_cipher_list() and SSL_set_cipher_list() return 1 if any cipher could be selected and 0 on complete failure.

+ +

SSL_CTX_set_ciphersuites() and SSL_set_ciphersuites() return 1 if the requested ciphersuite list was configured, and 0 otherwise.

+ +

SEE ALSO

+ +

ssl(7), SSL_get_ciphers(3), SSL_CTX_use_certificate(3), SSL_CTX_set_tmp_dh_callback(3), ciphers(1)

+ +

COPYRIGHT

+ +

Copyright 2000-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_client_cert_cb.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_client_cert_cb.html new file mode 100644 index 00000000..5a7546c6 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_client_cert_cb.html @@ -0,0 +1,83 @@ + + + + +SSL_CTX_set_client_cert_cb + + + + + + + + + + +

NAME

+ +

SSL_CTX_set_client_cert_cb, SSL_CTX_get_client_cert_cb - handle client certificate callback function

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+void SSL_CTX_set_client_cert_cb(SSL_CTX *ctx,
+                                int (*client_cert_cb)(SSL *ssl, X509 **x509,
+                                                      EVP_PKEY **pkey));
+int (*SSL_CTX_get_client_cert_cb(SSL_CTX *ctx))(SSL *ssl, X509 **x509,
+                                                EVP_PKEY **pkey);
+int (*client_cert_cb)(SSL *ssl, X509 **x509, EVP_PKEY **pkey);
+ +

DESCRIPTION

+ +

SSL_CTX_set_client_cert_cb() sets the client_cert_cb() callback, that is called when a client certificate is requested by a server and no certificate was yet set for the SSL object.

+ +

When client_cert_cb() is NULL, no callback function is used.

+ +

SSL_CTX_get_client_cert_cb() returns a pointer to the currently set callback function.

+ +

client_cert_cb() is the application defined callback. If it wants to set a certificate, a certificate/private key combination must be set using the x509 and pkey arguments and "1" must be returned. The certificate will be installed into ssl, see the NOTES and BUGS sections. If no certificate should be set, "0" has to be returned and no certificate will be sent. A negative return value will suspend the handshake and the handshake function will return immediately. SSL_get_error(3) will return SSL_ERROR_WANT_X509_LOOKUP to indicate, that the handshake was suspended. The next call to the handshake function will again lead to the call of client_cert_cb(). It is the job of the client_cert_cb() to store information about the state of the last call, if required to continue.

+ +

NOTES

+ +

During a handshake (or renegotiation) a server may request a certificate from the client. A client certificate must only be sent, when the server did send the request.

+ +

When a certificate was set using the SSL_CTX_use_certificate(3) family of functions, it will be sent to the server. The TLS standard requires that only a certificate is sent, if it matches the list of acceptable CAs sent by the server. This constraint is violated by the default behavior of the OpenSSL library. Using the callback function it is possible to implement a proper selection routine or to allow a user interaction to choose the certificate to be sent.

+ +

If a callback function is defined and no certificate was yet defined for the SSL object, the callback function will be called. If the callback function returns a certificate, the OpenSSL library will try to load the private key and certificate data into the SSL object using the SSL_use_certificate() and SSL_use_private_key() functions. Thus it will permanently install the certificate and key for this SSL object. It will not be reset by calling SSL_clear(3). If the callback returns no certificate, the OpenSSL library will not send a certificate.

+ +

RETURN VALUES

+ +

SSL_CTX_get_client_cert_cb() returns function pointer of client_cert_cb() or NULL if the callback is not set.

+ +

BUGS

+ +

The client_cert_cb() cannot return a complete certificate chain, it can only return one client certificate. If the chain only has a length of 2, the root CA certificate may be omitted according to the TLS standard and thus a standard conforming answer can be sent to the server. For a longer chain, the client must send the complete chain (with the option to leave out the root CA certificate). This can only be accomplished by either adding the intermediate CA certificates into the trusted certificate store for the SSL_CTX object (resulting in having to add CA certificates that otherwise maybe would not be trusted), or by adding the chain certificates using the SSL_CTX_add_extra_chain_cert(3) function, which is only available for the SSL_CTX object as a whole and that therefore probably can only apply for one client certificate, making the concept of the callback function (to allow the choice from several certificates) questionable.

+ +

Once the SSL object has been used in conjunction with the callback function, the certificate will be set for the SSL object and will not be cleared even when SSL_clear(3) is being called. It is therefore mandatory to destroy the SSL object using SSL_free(3) and create a new one to return to the previous state.

+ +

SEE ALSO

+ +

ssl(7), SSL_CTX_use_certificate(3), SSL_CTX_add_extra_chain_cert(3), SSL_get_client_CA_list(3), SSL_clear(3), SSL_free(3)

+ +

COPYRIGHT

+ +

Copyright 2002-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_client_hello_cb.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_client_hello_cb.html new file mode 100644 index 00000000..09467e5c --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_client_hello_cb.html @@ -0,0 +1,97 @@ + + + + +SSL_CTX_set_client_hello_cb + + + + + + + + + + +

NAME

+ +

SSL_CTX_set_client_hello_cb, SSL_client_hello_cb_fn, SSL_client_hello_isv2, SSL_client_hello_get0_legacy_version, SSL_client_hello_get0_random, SSL_client_hello_get0_session_id, SSL_client_hello_get0_ciphers, SSL_client_hello_get0_compression_methods, SSL_client_hello_get1_extensions_present, SSL_client_hello_get0_ext - callback functions for early server-side ClientHello processing

+ +

SYNOPSIS

+ +
typedef int (*SSL_client_hello_cb_fn)(SSL *s, int *al, void *arg);
+void SSL_CTX_set_client_hello_cb(SSL_CTX *c, SSL_client_hello_cb_fn *f,
+                                 void *arg);
+int SSL_client_hello_isv2(SSL *s);
+unsigned int SSL_client_hello_get0_legacy_version(SSL *s);
+size_t SSL_client_hello_get0_random(SSL *s, const unsigned char **out);
+size_t SSL_client_hello_get0_session_id(SSL *s, const unsigned char **out);
+size_t SSL_client_hello_get0_ciphers(SSL *s, const unsigned char **out);
+size_t SSL_client_hello_get0_compression_methods(SSL *s,
+                                                 const unsigned char **out);
+int SSL_client_hello_get1_extensions_present(SSL *s, int **out,
+                                             size_t *outlen);
+int SSL_client_hello_get0_ext(SSL *s, int type, const unsigned char **out,
+                              size_t *outlen);
+ +

DESCRIPTION

+ +

SSL_CTX_set_client_hello_cb() sets the callback function, which is automatically called during the early stages of ClientHello processing on the server. The argument supplied when setting the callback is passed back to the callback at runtime. A callback that returns failure (0) will cause the connection to terminate, and callbacks returning failure should indicate what alert value is to be sent in the al parameter. A callback may also return a negative value to suspend the handshake, and the handshake function will return immediately. SSL_get_error(3) will return SSL_ERROR_WANT_CLIENT_HELLO_CB to indicate that the handshake was suspended. It is the job of the ClientHello callback to store information about the state of the last call if needed to continue. On the next call into the handshake function, the ClientHello callback will be called again, and, if it returns success, normal handshake processing will continue from that point.

+ +

SSL_client_hello_isv2() indicates whether the ClientHello was carried in a SSLv2 record and is in the SSLv2 format. The SSLv2 format has substantial differences from the normal SSLv3 format, including using three bytes per cipher suite, and not allowing extensions. Additionally, the SSLv2 format 'challenge' field is exposed via SSL_client_hello_get0_random(), padded to SSL3_RANDOM_SIZE bytes with zeros if needed. For SSLv2 format ClientHellos, SSL_client_hello_get0_compression_methods() returns a dummy list that only includes the null compression method, since the SSLv2 format does not include a mechanism by which to negotiate compression.

+ +

SSL_client_hello_get0_random(), SSL_client_hello_get0_session_id(), SSL_client_hello_get0_ciphers(), and SSL_client_hello_get0_compression_methods() provide access to the corresponding ClientHello fields, returning the field length and optionally setting an out pointer to the octets of that field.

+ +

Similarly, SSL_client_hello_get0_ext() provides access to individual extensions from the ClientHello on a per-extension basis. For the provided wire protocol extension type value, the extension value and length are returned in the output parameters (if present).

+ +

SSL_client_hello_get1_extensions_present() can be used prior to SSL_client_hello_get0_ext(), to determine which extensions are present in the ClientHello before querying for them. The out and outlen parameters are both required, and on success the caller must release the storage allocated for *out using OPENSSL_free(). The contents of *out is an array of integers holding the numerical value of the TLS extension types in the order they appear in the ClientHello. *outlen contains the number of elements in the array. In situations when the ClientHello has no extensions, the function will return success with *out set to NULL and *outlen set to 0.

+ +

NOTES

+ +

The ClientHello callback provides a vast window of possibilities for application code to affect the TLS handshake. A primary use of the callback is to allow the server to examine the server name indication extension provided by the client in order to select an appropriate certificate to present, and make other configuration adjustments relevant to that server name and its configuration. Such configuration changes can include swapping out the associated SSL_CTX pointer, modifying the server's list of permitted TLS versions, changing the server's cipher list in response to the client's cipher list, etc.

+ +

It is also recommended that applications utilize a ClientHello callback and not use a servername callback, in order to avoid unexpected behavior that occurs due to the relative order of processing between things like session resumption and the historical servername callback.

+ +

The SSL_client_hello_* family of functions may only be called from code executing within a ClientHello callback.

+ +

RETURN VALUES

+ +

The application's supplied ClientHello callback returns SSL_CLIENT_HELLO_SUCCESS on success, SSL_CLIENT_HELLO_ERROR on failure, and SSL_CLIENT_HELLO_RETRY to suspend processing.

+ +

SSL_client_hello_isv2() returns 1 for SSLv2-format ClientHellos and 0 otherwise.

+ +

SSL_client_hello_get0_random(), SSL_client_hello_get0_session_id(), SSL_client_hello_get0_ciphers(), and SSL_client_hello_get0_compression_methods() return the length of the corresponding ClientHello fields. If zero is returned, the output pointer should not be assumed to be valid.

+ +

SSL_client_hello_get0_ext() returns 1 if the extension of type 'type' is present, and 0 otherwise.

+ +

SSL_client_hello_get1_extensions_present() returns 1 on success and 0 on failure.

+ +

SEE ALSO

+ +

ssl(7), SSL_CTX_set_tlsext_servername_callback(3), SSL_bytes_to_cipher_list

+ +

HISTORY

+ +

The SSL ClientHello callback, SSL_client_hello_isv2(), SSL_client_hello_get0_random(), SSL_client_hello_get0_session_id(), SSL_client_hello_get0_ciphers(), SSL_client_hello_get0_compression_methods(), SSL_client_hello_get0_ext(), and SSL_client_hello_get1_extensions_present() were added in OpenSSL 1.1.1.

+ +

COPYRIGHT

+ +

Copyright 2017-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_ct_validation_callback.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_ct_validation_callback.html new file mode 100644 index 00000000..9f97e740 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_ct_validation_callback.html @@ -0,0 +1,101 @@ + + + + +SSL_CTX_set_ct_validation_callback + + + + + + + + + + +

NAME

+ +

ssl_ct_validation_cb, SSL_enable_ct, SSL_CTX_enable_ct, SSL_disable_ct, SSL_CTX_disable_ct, SSL_set_ct_validation_callback, SSL_CTX_set_ct_validation_callback, SSL_ct_is_enabled, SSL_CTX_ct_is_enabled - control Certificate Transparency policy

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+typedef int (*ssl_ct_validation_cb)(const CT_POLICY_EVAL_CTX *ctx,
+                                   const STACK_OF(SCT) *scts, void *arg);
+
+int SSL_enable_ct(SSL *s, int validation_mode);
+int SSL_CTX_enable_ct(SSL_CTX *ctx, int validation_mode);
+int SSL_set_ct_validation_callback(SSL *s, ssl_ct_validation_cb callback,
+                                   void *arg);
+int SSL_CTX_set_ct_validation_callback(SSL_CTX *ctx,
+                                       ssl_ct_validation_cb callback,
+                                       void *arg);
+void SSL_disable_ct(SSL *s);
+void SSL_CTX_disable_ct(SSL_CTX *ctx);
+int SSL_ct_is_enabled(const SSL *s);
+int SSL_CTX_ct_is_enabled(const SSL_CTX *ctx);
+ +

DESCRIPTION

+ +

SSL_enable_ct() and SSL_CTX_enable_ct() enable the processing of signed certificate timestamps (SCTs) either for a given SSL connection or for all connections that share the given SSL context, respectively. This is accomplished by setting a built-in CT validation callback. The behaviour of the callback is determined by the validation_mode argument, which can be either of SSL_CT_VALIDATION_PERMISSIVE or SSL_CT_VALIDATION_STRICT as described below.

+ +

If validation_mode is equal to SSL_CT_VALIDATION_STRICT, then in a full TLS handshake with the verification mode set to SSL_VERIFY_PEER, if the peer presents no valid SCTs the handshake will be aborted. If the verification mode is SSL_VERIFY_NONE, the handshake will continue despite lack of valid SCTs. However, in that case if the verification status before the built-in callback was X509_V_OK it will be set to X509_V_ERR_NO_VALID_SCTS after the callback. Applications can call SSL_get_verify_result(3) to check the status at handshake completion, even after session resumption since the verification status is part of the saved session state. See SSL_set_verify(3), <SSL_get_verify_result(3)>, SSL_session_reused(3).

+ +

If validation_mode is equal to SSL_CT_VALIDATION_PERMISSIVE, then the handshake continues, and the verification status is not modified, regardless of the validation status of any SCTs. The application can still inspect the validation status of the SCTs at handshake completion. Note that with session resumption there will not be any SCTs presented during the handshake. Therefore, in applications that delay SCT policy enforcement until after handshake completion, such delayed SCT checks should only be performed when the session is not resumed.

+ +

SSL_set_ct_validation_callback() and SSL_CTX_set_ct_validation_callback() register a custom callback that may implement a different policy than either of the above. This callback can examine the peer's SCTs and determine whether they are sufficient to allow the connection to continue. The TLS handshake is aborted if the verification mode is not SSL_VERIFY_NONE and the callback returns a non-positive result.

+ +

An arbitrary callback context argument, arg, can be passed in when setting the callback. This will be passed to the callback whenever it is invoked. Ownership of this context remains with the caller.

+ +

If no callback is set, SCTs will not be requested and Certificate Transparency validation will not occur.

+ +

No callback will be invoked when the peer presents no certificate, e.g. by employing an anonymous (aNULL) cipher suite. In that case the handshake continues as it would had no callback been requested. Callbacks are also not invoked when the peer certificate chain is invalid or validated via DANE-TA(2) or DANE-EE(3) TLSA records which use a private X.509 PKI, or no X.509 PKI at all, respectively. Clients that require SCTs are expected to not have enabled any aNULL ciphers nor to have specified server verification via DANE-TA(2) or DANE-EE(3) TLSA records.

+ +

SSL_disable_ct() and SSL_CTX_disable_ct() turn off CT processing, whether enabled via the built-in or the custom callbacks, by setting a NULL callback. These may be implemented as macros.

+ +

SSL_ct_is_enabled() and SSL_CTX_ct_is_enabled() return 1 if CT processing is enabled via either SSL_enable_ct() or a non-null custom callback, and 0 otherwise.

+ +

NOTES

+ +

When SCT processing is enabled, OCSP stapling will be enabled. This is because one possible source of SCTs is the OCSP response from a server.

+ +

The time returned by SSL_SESSION_get_time() will be used to evaluate whether any presented SCTs have timestamps that are in the future (and therefore invalid).

+ +

RESTRICTIONS

+ +

Certificate Transparency validation cannot be enabled and so a callback cannot be set if a custom client extension handler has been registered to handle SCT extensions (TLSEXT_TYPE_signed_certificate_timestamp).

+ +

RETURN VALUES

+ +

SSL_enable_ct(), SSL_CTX_enable_ct(), SSL_CTX_set_ct_validation_callback() and SSL_set_ct_validation_callback() return 1 if the callback is successfully set. They return 0 if an error occurs, e.g. a custom client extension handler has been setup to handle SCTs.

+ +

SSL_disable_ct() and SSL_CTX_disable_ct() do not return a result.

+ +

SSL_CTX_ct_is_enabled() and SSL_ct_is_enabled() return a 1 if a non-null CT validation callback is set, or 0 if no callback (or equivalently a NULL callback) is set.

+ +

SEE ALSO

+ +

ssl(7), <SSL_get_verify_result(3)>, SSL_session_reused(3), SSL_set_verify(3), SSL_CTX_set_verify(3), SSL_SESSION_get_time(3)

+ +

COPYRIGHT

+ +

Copyright 2016-2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_ctlog_list_file.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_ctlog_list_file.html new file mode 100644 index 00000000..49375335 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_ctlog_list_file.html @@ -0,0 +1,66 @@ + + + + +SSL_CTX_set_ctlog_list_file + + + + + + + + + + +

NAME

+ +

SSL_CTX_set_default_ctlog_list_file, SSL_CTX_set_ctlog_list_file - load a Certificate Transparency log list from a file

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+int SSL_CTX_set_default_ctlog_list_file(SSL_CTX *ctx);
+int SSL_CTX_set_ctlog_list_file(SSL_CTX *ctx, const char *path);
+ +

DESCRIPTION

+ +

SSL_CTX_set_default_ctlog_list_file() loads a list of Certificate Transparency (CT) logs from the default file location, "ct_log_list.cnf", found in the directory where OpenSSL is installed.

+ +

SSL_CTX_set_ctlog_list_file() loads a list of CT logs from a specific path. See CTLOG_STORE_new(3) for the file format.

+ +

NOTES

+ +

These functions will not clear the existing CT log list - it will be appended to. To replace the existing list, use SSL_CTX_set0_ctlog_store first.

+ +

If an error occurs whilst parsing a particular log entry in the file, that log entry will be skipped.

+ +

RETURN VALUES

+ +

SSL_CTX_set_default_ctlog_list_file() and SSL_CTX_set_ctlog_list_file() return 1 if the log list is successfully loaded, and 0 if an error occurs. In the case of an error, the log list may have been partially loaded.

+ +

SEE ALSO

+ +

ssl(7), SSL_CTX_set_ct_validation_callback(3), CTLOG_STORE_new(3)

+ +

COPYRIGHT

+ +

Copyright 2016-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_default_passwd_cb.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_default_passwd_cb.html new file mode 100644 index 00000000..492f4565 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_default_passwd_cb.html @@ -0,0 +1,100 @@ + + + + +SSL_CTX_set_default_passwd_cb + + + + + + + + + + +

NAME

+ +

SSL_CTX_set_default_passwd_cb, SSL_CTX_set_default_passwd_cb_userdata, SSL_CTX_get_default_passwd_cb, SSL_CTX_get_default_passwd_cb_userdata, SSL_set_default_passwd_cb, SSL_set_default_passwd_cb_userdata, SSL_get_default_passwd_cb, SSL_get_default_passwd_cb_userdata - set or get passwd callback for encrypted PEM file handling

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+void SSL_CTX_set_default_passwd_cb(SSL_CTX *ctx, pem_password_cb *cb);
+void SSL_CTX_set_default_passwd_cb_userdata(SSL_CTX *ctx, void *u);
+pem_password_cb *SSL_CTX_get_default_passwd_cb(SSL_CTX *ctx);
+void *SSL_CTX_get_default_passwd_cb_userdata(SSL_CTX *ctx);
+
+void SSL_set_default_passwd_cb(SSL *s, pem_password_cb *cb);
+void SSL_set_default_passwd_cb_userdata(SSL *s, void *u);
+pem_password_cb *SSL_get_default_passwd_cb(SSL *s);
+void *SSL_get_default_passwd_cb_userdata(SSL *s);
+ +

DESCRIPTION

+ +

SSL_CTX_set_default_passwd_cb() sets the default password callback called when loading/storing a PEM certificate with encryption.

+ +

SSL_CTX_set_default_passwd_cb_userdata() sets a pointer to userdata, u, which will be provided to the password callback on invocation.

+ +

SSL_CTX_get_default_passwd_cb() returns a function pointer to the password callback currently set in ctx. If no callback was explicitly set, the NULL pointer is returned.

+ +

SSL_CTX_get_default_passwd_cb_userdata() returns a pointer to the userdata currently set in ctx. If no userdata was explicitly set, the NULL pointer is returned.

+ +

SSL_set_default_passwd_cb(), SSL_set_default_passwd_cb_userdata(), SSL_get_default_passwd_cb() and SSL_get_default_passwd_cb_userdata() perform the same function as their SSL_CTX counterparts, but using an SSL object.

+ +

The password callback, which must be provided by the application, hands back the password to be used during decryption. On invocation a pointer to userdata is provided. The function must store the password into the provided buffer buf which is of size size. The actual length of the password must be returned to the calling function. rwflag indicates whether the callback is used for reading/decryption (rwflag=0) or writing/encryption (rwflag=1). For more details, see pem_password_cb(3).

+ +

NOTES

+ +

When loading or storing private keys, a password might be supplied to protect the private key. The way this password can be supplied may depend on the application. If only one private key is handled, it can be practical to have the callback handle the password dialog interactively. If several keys have to be handled, it can be practical to ask for the password once, then keep it in memory and use it several times. In the last case, the password could be stored into the userdata storage and the callback only returns the password already stored.

+ +

When asking for the password interactively, the callback can use rwflag to check, whether an item shall be encrypted (rwflag=1). In this case the password dialog may ask for the same password twice for comparison in order to catch typos, that would make decryption impossible.

+ +

Other items in PEM formatting (certificates) can also be encrypted, it is however not usual, as certificate information is considered public.

+ +

RETURN VALUES

+ +

These functions do not provide diagnostic information.

+ +

EXAMPLES

+ +

The following example returns the password provided as userdata to the calling function. The password is considered to be a '\0' terminated string. If the password does not fit into the buffer, the password is truncated.

+ +
int my_cb(char *buf, int size, int rwflag, void *u)
+{
+    strncpy(buf, (char *)u, size);
+    buf[size - 1] = '\0';
+    return strlen(buf);
+}
+ +

SEE ALSO

+ +

ssl(7), SSL_CTX_use_certificate(3)

+ +

HISTORY

+ +

SSL_CTX_get_default_passwd_cb(), SSL_CTX_get_default_passwd_cb_userdata(), SSL_set_default_passwd_cb() and SSL_set_default_passwd_cb_userdata() were added in OpenSSL 1.1.0.

+ +

COPYRIGHT

+ +

Copyright 2000-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_ex_data.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_ex_data.html new file mode 100644 index 00000000..1a7eeb81 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_ex_data.html @@ -0,0 +1,64 @@ + + + + +SSL_CTX_set_ex_data + + + + + + + + + + +

NAME

+ +

SSL_CTX_get_ex_data, SSL_CTX_set_ex_data, SSL_get_ex_data, SSL_set_ex_data - Store and retrieve extra data from the SSL_CTX, SSL or SSL_SESSION

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+void *SSL_CTX_get_ex_data(const SSL_CTX *s, int idx);
+
+int SSL_CTX_set_ex_data(SSL_CTX *s, int idx, void *arg);
+
+void *SSL_get_ex_data(const SSL *s, int idx);
+
+int SSL_set_ex_data(SSL *s, int idx, void *arg);
+ +

DESCRIPTION

+ +

SSL*_set_ex_data() functions can be used to store arbitrary user data into the SSL_CTX, or SSL object. The user must supply a unique index which they can subsequently use to retrieve the data using SSL*_get_ex_data().

+ +

For more detailed information see CRYPTO_get_ex_data(3) and CRYPTO_set_ex_data(3) which implement these functions and CRYPTO_get_ex_new_index(3) for generating a unique index.

+ +

RETURN VALUES

+ +

The SSL*_set_ex_data() functions return 1 if the item is successfully stored and 0 if it is not. The SSL*_get_ex_data() functions return the ex_data pointer if successful, otherwise NULL.

+ +

SEE ALSO

+ +

CRYPTO_get_ex_data(3), CRYPTO_set_ex_data(3), CRYPTO_get_ex_new_index(3)

+ +

COPYRIGHT

+ +

Copyright 2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_generate_session_id.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_generate_session_id.html new file mode 100644 index 00000000..c005b7a8 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_generate_session_id.html @@ -0,0 +1,116 @@ + + + + +SSL_CTX_set_generate_session_id + + + + + + + + + + +

NAME

+ +

SSL_CTX_set_generate_session_id, SSL_set_generate_session_id, SSL_has_matching_session_id, GEN_SESSION_CB - manipulate generation of SSL session IDs (server only)

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+typedef int (*GEN_SESSION_CB)(SSL *ssl, unsigned char *id,
+                              unsigned int *id_len);
+
+int SSL_CTX_set_generate_session_id(SSL_CTX *ctx, GEN_SESSION_CB cb);
+int SSL_set_generate_session_id(SSL *ssl, GEN_SESSION_CB, cb);
+int SSL_has_matching_session_id(const SSL *ssl, const unsigned char *id,
+                                unsigned int id_len);
+ +

DESCRIPTION

+ +

SSL_CTX_set_generate_session_id() sets the callback function for generating new session ids for SSL/TLS sessions for ctx to be cb.

+ +

SSL_set_generate_session_id() sets the callback function for generating new session ids for SSL/TLS sessions for ssl to be cb.

+ +

SSL_has_matching_session_id() checks, whether a session with id id (of length id_len) is already contained in the internal session cache of the parent context of ssl.

+ +

NOTES

+ +

When a new session is established between client and server, the server generates a session id. The session id is an arbitrary sequence of bytes. The length of the session id is between 1 and 32 bytes. The session id is not security critical but must be unique for the server. Additionally, the session id is transmitted in the clear when reusing the session so it must not contain sensitive information.

+ +

Without a callback being set, an OpenSSL server will generate a unique session id from pseudo random numbers of the maximum possible length. Using the callback function, the session id can be changed to contain additional information like e.g. a host id in order to improve load balancing or external caching techniques.

+ +

The callback function receives a pointer to the memory location to put id into and a pointer to the maximum allowed length id_len. The buffer at location id is only guaranteed to have the size id_len. The callback is only allowed to generate a shorter id and reduce id_len; the callback must never increase id_len or write to the location id exceeding the given limit.

+ +

The location id is filled with 0x00 before the callback is called, so the callback may only fill part of the possible length and leave id_len untouched while maintaining reproducibility.

+ +

Since the sessions must be distinguished, session ids must be unique. Without the callback a random number is used, so that the probability of generating the same session id is extremely small (2^256 for SSLv3/TLSv1). In order to assure the uniqueness of the generated session id, the callback must call SSL_has_matching_session_id() and generate another id if a conflict occurs. If an id conflict is not resolved, the handshake will fail. If the application codes e.g. a unique host id, a unique process number, and a unique sequence number into the session id, uniqueness could easily be achieved without randomness added (it should however be taken care that no confidential information is leaked this way). If the application can not guarantee uniqueness, it is recommended to use the maximum id_len and fill in the bytes not used to code special information with random data to avoid collisions.

+ +

SSL_has_matching_session_id() will only query the internal session cache, not the external one. Since the session id is generated before the handshake is completed, it is not immediately added to the cache. If another thread is using the same internal session cache, a race condition can occur in that another thread generates the same session id. Collisions can also occur when using an external session cache, since the external cache is not tested with SSL_has_matching_session_id() and the same race condition applies.

+ +

The callback must return 0 if it cannot generate a session id for whatever reason and return 1 on success.

+ +

RETURN VALUES

+ +

SSL_CTX_set_generate_session_id() and SSL_set_generate_session_id() always return 1.

+ +

SSL_has_matching_session_id() returns 1 if another session with the same id is already in the cache.

+ +

EXAMPLES

+ +

The callback function listed will generate a session id with the server id given, and will fill the rest with pseudo random bytes:

+ +
const char session_id_prefix = "www-18";
+
+#define MAX_SESSION_ID_ATTEMPTS 10
+static int generate_session_id(SSL *ssl, unsigned char *id,
+                               unsigned int *id_len)
+{
+    unsigned int count = 0;
+
+    do {
+        RAND_pseudo_bytes(id, *id_len);
+        /*
+         * 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
+         * fail due to conflicts.
+         */
+        memcpy(id, session_id_prefix, strlen(session_id_prefix) < *id_len ?
+                                      strlen(session_id_prefix) : *id_len);
+    } while (SSL_has_matching_session_id(ssl, id, *id_len)
+              && ++count < MAX_SESSION_ID_ATTEMPTS);
+    if (count >= MAX_SESSION_ID_ATTEMPTS)
+        return 0;
+    return 1;
+}
+ +

SEE ALSO

+ +

ssl(7), SSL_get_version(3)

+ +

COPYRIGHT

+ +

Copyright 2001-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_info_callback.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_info_callback.html new file mode 100644 index 00000000..a8b1acd0 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_info_callback.html @@ -0,0 +1,186 @@ + + + + +SSL_CTX_set_info_callback + + + + + + + + + + +

NAME

+ +

SSL_CTX_set_info_callback, SSL_CTX_get_info_callback, SSL_set_info_callback, SSL_get_info_callback - handle information callback for SSL connections

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+void SSL_CTX_set_info_callback(SSL_CTX *ctx, void (*callback)());
+void (*SSL_CTX_get_info_callback(const SSL_CTX *ctx))();
+
+void SSL_set_info_callback(SSL *ssl, void (*callback)());
+void (*SSL_get_info_callback(const SSL *ssl))();
+ +

DESCRIPTION

+ +

SSL_CTX_set_info_callback() sets the callback function, that can be used to obtain state information for SSL objects created from ctx during connection setup and use. The setting for ctx is overridden from the setting for a specific SSL object, if specified. When callback is NULL, no callback function is used.

+ +

SSL_set_info_callback() sets the callback function, that can be used to obtain state information for ssl during connection setup and use. When callback is NULL, the callback setting currently valid for ctx is used.

+ +

SSL_CTX_get_info_callback() returns a pointer to the currently set information callback function for ctx.

+ +

SSL_get_info_callback() returns a pointer to the currently set information callback function for ssl.

+ +

NOTES

+ +

When setting up a connection and during use, it is possible to obtain state information from the SSL/TLS engine. When set, an information callback function is called whenever a significant event occurs such as: the state changes, an alert appears, or an error occurs.

+ +

The callback function is called as callback(SSL *ssl, int where, int ret). The where argument specifies information about where (in which context) the callback function was called. If ret is 0, an error condition occurred. If an alert is handled, SSL_CB_ALERT is set and ret specifies the alert information.

+ +

where is a bitmask made up of the following bits:

+ +
+ +
SSL_CB_LOOP
+
+ +

Callback has been called to indicate state change or some other significant state machine event. This may mean that the callback gets invoked more than once per state in some situations.

+ +
+
SSL_CB_EXIT
+
+ +

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.

+ +
+
SSL_CB_READ
+
+ +

Callback has been called during read operation.

+ +
+
SSL_CB_WRITE
+
+ +

Callback has been called during write operation.

+ +
+
SSL_CB_ALERT
+
+ +

Callback has been called due to an alert being sent or received.

+ +
+
SSL_CB_READ_ALERT (SSL_CB_ALERT|SSL_CB_READ)
+
+ +
+
SSL_CB_WRITE_ALERT (SSL_CB_ALERT|SSL_CB_WRITE)
+
+ +
+
SSL_CB_ACCEPT_LOOP (SSL_ST_ACCEPT|SSL_CB_LOOP)
+
+ +
+
SSL_CB_ACCEPT_EXIT (SSL_ST_ACCEPT|SSL_CB_EXIT)
+
+ +
+
SSL_CB_CONNECT_LOOP (SSL_ST_CONNECT|SSL_CB_LOOP)
+
+ +
+
SSL_CB_CONNECT_EXIT (SSL_ST_CONNECT|SSL_CB_EXIT)
+
+ +
+
SSL_CB_HANDSHAKE_START
+
+ +

Callback has been called because a new handshake is started. It also occurs when resuming a handshake following a pause to handle early data.

+ +
+
SSL_CB_HANDSHAKE_DONE
+
+ +

Callback has been called because a handshake is finished. It also occurs if the handshake is paused to allow the exchange of early data.

+ +
+
+ +

The current state information can be obtained using the SSL_state_string(3) family of functions.

+ +

The ret information can be evaluated using the SSL_alert_type_string(3) family of functions.

+ +

RETURN VALUES

+ +

SSL_set_info_callback() does not provide diagnostic information.

+ +

SSL_get_info_callback() returns the current setting.

+ +

EXAMPLES

+ +

The following example callback function prints state strings, information about alerts being handled and error messages to the bio_err BIO.

+ +
void apps_ssl_info_callback(SSL *s, int where, int ret)
+{
+    const char *str;
+    int w = where & ~SSL_ST_MASK;
+
+    if (w & SSL_ST_CONNECT)
+        str = "SSL_connect";
+    else if (w & SSL_ST_ACCEPT)
+        str = "SSL_accept";
+    else
+        str = "undefined";
+
+    if (where & SSL_CB_LOOP) {
+        BIO_printf(bio_err, "%s:%s\n", str, SSL_state_string_long(s));
+    } else if (where & SSL_CB_ALERT) {
+        str = (where & SSL_CB_READ) ? "read" : "write";
+        BIO_printf(bio_err, "SSL3 alert %s:%s:%s\n", str,
+                   SSL_alert_type_string_long(ret),
+                   SSL_alert_desc_string_long(ret));
+    } else if (where & SSL_CB_EXIT) {
+        if (ret == 0) {
+            BIO_printf(bio_err, "%s:failed in %s\n",
+                       str, SSL_state_string_long(s));
+        } else if (ret < 0) {
+            BIO_printf(bio_err, "%s:error in %s\n",
+                       str, SSL_state_string_long(s));
+        }
+    }
+}
+ +

SEE ALSO

+ +

ssl(7), SSL_state_string(3), SSL_alert_type_string(3)

+ +

COPYRIGHT

+ +

Copyright 2001-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_keylog_callback.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_keylog_callback.html new file mode 100644 index 00000000..53964bed --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_keylog_callback.html @@ -0,0 +1,63 @@ + + + + +SSL_CTX_set_keylog_callback + + + + + + + + + + +

NAME

+ +

SSL_CTX_set_keylog_callback, SSL_CTX_get_keylog_callback, SSL_CTX_keylog_cb_func - logging TLS key material

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+typedef void (*SSL_CTX_keylog_cb_func)(const SSL *ssl, const char *line);
+
+void SSL_CTX_set_keylog_callback(SSL_CTX *ctx, SSL_CTX_keylog_cb_func cb);
+SSL_CTX_keylog_cb_func SSL_CTX_get_keylog_callback(const SSL_CTX *ctx);
+ +

DESCRIPTION

+ +

SSL_CTX_set_keylog_callback() sets the TLS key logging callback. This callback is called whenever TLS key material is generated or received, in order to allow applications to store this keying material for debugging purposes.

+ +

SSL_CTX_get_keylog_callback() retrieves the previously set TLS key logging callback. If no callback has been set, this will return NULL. When there is no key logging callback, or if SSL_CTX_set_keylog_callback is called with NULL as the value of cb, no logging of key material will be done.

+ +

The key logging callback is called with two items: the ssl object associated with the connection, and line, a string containing the key material in the format used by NSS for its SSLKEYLOGFILE debugging output. To recreate that file, the key logging callback should log line, followed by a newline. line will always be a NULL-terminated string.

+ +

RETURN VALUES

+ +

SSL_CTX_get_keylog_callback() returns a pointer to SSL_CTX_keylog_cb_func or NULL if the callback is not set.

+ +

SEE ALSO

+ +

ssl(7)

+ +

COPYRIGHT

+ +

Copyright 2016-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_max_cert_list.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_max_cert_list.html new file mode 100644 index 00000000..4e2530ff --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_max_cert_list.html @@ -0,0 +1,81 @@ + + + + +SSL_CTX_set_max_cert_list + + + + + + + + + + +

NAME

+ +

SSL_CTX_set_max_cert_list, SSL_CTX_get_max_cert_list, SSL_set_max_cert_list, SSL_get_max_cert_list - manipulate allowed size for the peer's certificate chain

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+long SSL_CTX_set_max_cert_list(SSL_CTX *ctx, long size);
+long SSL_CTX_get_max_cert_list(SSL_CTX *ctx);
+
+long SSL_set_max_cert_list(SSL *ssl, long size);
+long SSL_get_max_cert_list(SSL *ctx);
+ +

DESCRIPTION

+ +

SSL_CTX_set_max_cert_list() sets the maximum size allowed for the peer's certificate chain for all SSL objects created from ctx to be <size> bytes. The SSL objects inherit the setting valid for ctx at the time SSL_new(3) is being called.

+ +

SSL_CTX_get_max_cert_list() returns the currently set maximum size for ctx.

+ +

SSL_set_max_cert_list() sets the maximum size allowed for the peer's certificate chain for ssl to be <size> bytes. This setting stays valid until a new value is set.

+ +

SSL_get_max_cert_list() returns the currently set maximum size for ssl.

+ +

NOTES

+ +

During the handshake process, the peer may send a certificate chain. The TLS/SSL standard does not give any maximum size of the certificate chain. The OpenSSL library handles incoming data by a dynamically allocated buffer. In order to prevent this buffer from growing without bounds due to data 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 chains (OpenSSL's default maximum chain length is 10, see SSL_CTX_set_verify(3), and certificates without special extensions have a typical size of 1-2kB).

+ +

For special applications it can be necessary to extend the maximum certificate chain size allowed to be sent by the peer, see e.g. the work on "Internet X.509 Public Key Infrastructure Proxy Certificate Profile" and "TLS Delegation Protocol" at http://www.ietf.org/ and http://www.globus.org/ .

+ +

Under normal conditions it should never be necessary to set a value smaller than the default, as the buffer is handled dynamically and only uses the memory actually required by the data sent by the peer.

+ +

If the maximum certificate chain size allowed is exceeded, the handshake will fail with a SSL_R_EXCESSIVE_MESSAGE_SIZE error.

+ +

RETURN VALUES

+ +

SSL_CTX_set_max_cert_list() and SSL_set_max_cert_list() return the previously set value.

+ +

SSL_CTX_get_max_cert_list() and SSL_get_max_cert_list() return the currently set value.

+ +

SEE ALSO

+ +

ssl(7), SSL_new(3), SSL_CTX_set_verify(3)

+ +

COPYRIGHT

+ +

Copyright 2001-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_min_proto_version.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_min_proto_version.html new file mode 100644 index 00000000..0c9c8846 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_min_proto_version.html @@ -0,0 +1,80 @@ + + + + +SSL_CTX_set_min_proto_version + + + + + + + + + + +

NAME

+ +

SSL_CTX_set_min_proto_version, SSL_CTX_set_max_proto_version, SSL_CTX_get_min_proto_version, SSL_CTX_get_max_proto_version, SSL_set_min_proto_version, SSL_set_max_proto_version, SSL_get_min_proto_version, SSL_get_max_proto_version - Get and set minimum and maximum supported protocol version

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+int SSL_CTX_set_min_proto_version(SSL_CTX *ctx, int version);
+int SSL_CTX_set_max_proto_version(SSL_CTX *ctx, int version);
+int SSL_CTX_get_min_proto_version(SSL_CTX *ctx);
+int SSL_CTX_get_max_proto_version(SSL_CTX *ctx);
+
+int SSL_set_min_proto_version(SSL *ssl, int version);
+int SSL_set_max_proto_version(SSL *ssl, int version);
+int SSL_get_min_proto_version(SSL *ssl);
+int SSL_get_max_proto_version(SSL *ssl);
+ +

DESCRIPTION

+ +

The functions get or set the minimum and maximum supported protocol versions for the ctx or ssl. This works in combination with the options set via SSL_CTX_set_options(3) that also make it possible to disable specific protocol versions. Use these functions instead of disabling specific protocol versions.

+ +

Setting the minimum or maximum version to 0, will enable protocol versions down to the lowest version, or up to the highest version supported by the library, respectively.

+ +

Getters return 0 in case ctx or ssl have been configured to automatically use the lowest or highest version supported by the library.

+ +

Currently supported versions are SSL3_VERSION, TLS1_VERSION, TLS1_1_VERSION, TLS1_2_VERSION, TLS1_3_VERSION for TLS and DTLS1_VERSION, DTLS1_2_VERSION for DTLS.

+ +

RETURN VALUES

+ +

These setter functions return 1 on success and 0 on failure. The getter functions return the configured version or 0 for auto-configuration of lowest or highest protocol, respectively.

+ +

NOTES

+ +

All these functions are implemented using macros.

+ +

SEE ALSO

+ +

SSL_CTX_set_options(3), SSL_CONF_cmd(3)

+ +

HISTORY

+ +

The setter functions were added in OpenSSL 1.1.0. The getter functions were added in OpenSSL 1.1.1.

+ +

COPYRIGHT

+ +

Copyright 2016-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_mode.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_mode.html new file mode 100644 index 00000000..9fd3a569 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_mode.html @@ -0,0 +1,136 @@ + + + + +SSL_CTX_set_mode + + + + + + + + + + +

NAME

+ +

SSL_CTX_set_mode, SSL_CTX_clear_mode, SSL_set_mode, SSL_clear_mode, SSL_CTX_get_mode, SSL_get_mode - manipulate SSL engine mode

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+long SSL_CTX_set_mode(SSL_CTX *ctx, long mode);
+long SSL_CTX_clear_mode(SSL_CTX *ctx, long mode);
+long SSL_set_mode(SSL *ssl, long mode);
+long SSL_clear_mode(SSL *ssl, long mode);
+
+long SSL_CTX_get_mode(SSL_CTX *ctx);
+long SSL_get_mode(SSL *ssl);
+ +

DESCRIPTION

+ +

SSL_CTX_set_mode() adds the mode set via bitmask in mode to ctx. Options already set before are not cleared. SSL_CTX_clear_mode() removes the mode set via bitmask in mode from ctx.

+ +

SSL_set_mode() adds the mode set via bitmask in mode to ssl. Options already set before are not cleared. SSL_clear_mode() removes the mode set via bitmask in mode from ssl.

+ +

SSL_CTX_get_mode() returns the mode set for ctx.

+ +

SSL_get_mode() returns the mode set for ssl.

+ +

NOTES

+ +

The following mode changes are available:

+ +
+ +
SSL_MODE_ENABLE_PARTIAL_WRITE
+
+ +

Allow SSL_write_ex(..., n, &r) to return with 0 < r < n (i.e. report success when just a single record has been written). This works in a similar way for SSL_write(). When not set (the default), SSL_write_ex() or SSL_write() will only report success once the complete chunk was written. Once SSL_write_ex() or SSL_write() returns successful, r bytes have been written and the next call to SSL_write_ex() or SSL_write() must only send the n-r bytes left, imitating the behaviour of write().

+ +
+
SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER
+
+ +

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().

+ +
+
SSL_MODE_AUTO_RETRY
+
+ +

During normal operations, non-application data records might need to be sent or received that the application is not aware of. If a non-application data record was processed, SSL_read_ex(3) and SSL_read(3) can return with a failure and indicate the need to retry with SSL_ERROR_WANT_READ. If such a non-application data record was processed, the flag 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 incomplete read/write operations. Setting SSL_MODE_AUTO_RETRY for a non-blocking BIO will process non-application data records until either no more data is available or an application data record has been processed.

+ +

In a blocking environment, applications are not always prepared to deal with the functions returning intermediate reports such as retry requests, and setting the SSL_MODE_AUTO_RETRY flag will cause the functions to only return after successfully processing an application data record or a failure.

+ +

Turning off SSL_MODE_AUTO_RETRY can be useful with blocking BIOs in case they are used in combination with something like select() or poll(). Otherwise the call to SSL_read() or SSL_read_ex() might hang when a non-application record was sent and no application data was sent.

+ +
+
SSL_MODE_RELEASE_BUFFERS
+
+ +

When we no longer need a read buffer or a write buffer for a given SSL, then release the memory we were using to hold it. Using this flag can save around 34k per idle SSL connection. This flag has no effect on SSL v2 connections, or on DTLS connections.

+ +
+
SSL_MODE_SEND_FALLBACK_SCSV
+
+ +

Send TLS_FALLBACK_SCSV in the ClientHello. To be set only by applications that reconnect with a downgraded protocol version; see draft-ietf-tls-downgrade-scsv-00 for details.

+ +

DO NOT ENABLE THIS if your application attempts a normal handshake. Only use this in explicit fallback retries, following the guidance in draft-ietf-tls-downgrade-scsv-00.

+ +
+
SSL_MODE_ASYNC
+
+ +

Enable asynchronous processing. TLS I/O operations may indicate a retry with SSL_ERROR_WANT_ASYNC with this mode set if an asynchronous capable engine is used to perform cryptographic operations. See SSL_get_error(3).

+ +
+
SSL_MODE_DTLS_SCTP_LABEL_LENGTH_BUG
+
+ +

Older versions of OpenSSL had a bug in the computation of the label length used for computing the endpoint-pair shared secret. The bug was that the terminating zero was included in the length of the label. Setting this option enables this behaviour to allow interoperability with such broken implementations. Please note that setting this option breaks interoperability with correct implementations. This option only applies to DTLS over SCTP.

+ +
+
+ +

All modes are off by default except for SSL_MODE_AUTO_RETRY which is on by default since 1.1.1.

+ +

RETURN VALUES

+ +

SSL_CTX_set_mode() and SSL_set_mode() return the new mode bitmask after adding mode.

+ +

SSL_CTX_get_mode() and SSL_get_mode() return the current bitmask.

+ +

SEE ALSO

+ +

ssl(7), SSL_read_ex(3), SSL_read(3), SSL_write_ex(3) or SSL_write(3), SSL_get_error(3)

+ +

HISTORY

+ +

SSL_MODE_ASYNC was added in OpenSSL 1.1.0.

+ +

COPYRIGHT

+ +

Copyright 2001-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_msg_callback.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_msg_callback.html new file mode 100644 index 00000000..e5ea154d --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_msg_callback.html @@ -0,0 +1,142 @@ + + + + +SSL_CTX_set_msg_callback + + + + + + + + + + +

NAME

+ +

SSL_CTX_set_msg_callback, SSL_CTX_set_msg_callback_arg, SSL_set_msg_callback, SSL_set_msg_callback_arg - install callback for observing protocol messages

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+void SSL_CTX_set_msg_callback(SSL_CTX *ctx,
+                              void (*cb)(int write_p, int version,
+                                         int content_type, const void *buf,
+                                         size_t len, SSL *ssl, void *arg));
+void SSL_CTX_set_msg_callback_arg(SSL_CTX *ctx, void *arg);
+
+void SSL_set_msg_callback(SSL *ssl,
+                          void (*cb)(int write_p, int version,
+                                     int content_type, const void *buf,
+                                     size_t len, SSL *ssl, void *arg));
+void SSL_set_msg_callback_arg(SSL *ssl, void *arg);
+ +

DESCRIPTION

+ +

SSL_CTX_set_msg_callback() or SSL_set_msg_callback() can be used to define a message callback function cb for observing all SSL/TLS protocol messages (such as handshake messages) that are received or sent, as well as other events that occur during processing. SSL_CTX_set_msg_callback_arg() and SSL_set_msg_callback_arg() can be used to set argument arg to the callback function, which is available for arbitrary application use.

+ +

SSL_CTX_set_msg_callback() and SSL_CTX_set_msg_callback_arg() specify default settings that will be copied to new SSL objects by SSL_new(3). SSL_set_msg_callback() and SSL_set_msg_callback_arg() modify the actual settings of an SSL object. Using a NULL pointer for cb disables the message callback.

+ +

When cb is called by the SSL/TLS library the function arguments have the following meaning:

+ +
+ +
write_p
+
+ +

This flag is 0 when a protocol message has been received and 1 when a protocol message has been sent.

+ +
+
version
+
+ +

The protocol version according to which the protocol message is interpreted by the library such as TLS1_3_VERSION, TLS1_2_VERSION etc. This is set to 0 for the SSL3_RT_HEADER pseudo content type (see NOTES below).

+ +
+
content_type
+
+ +

This is one of the content type values defined in the protocol specification (SSL3_RT_CHANGE_CIPHER_SPEC, SSL3_RT_ALERT, SSL3_RT_HANDSHAKE; but never SSL3_RT_APPLICATION_DATA because the callback will only be called for protocol messages). Alternatively it may be a "pseudo" content type. These pseudo content types are used to signal some other event in the processing of data (see NOTES below).

+ +
+
buf, len
+
+ +

buf points to a buffer containing the protocol message or other data (in the case of pseudo content types), which consists of len bytes. The buffer is no longer valid after the callback function has returned.

+ +
+
ssl
+
+ +

The SSL object that received or sent the message.

+ +
+
arg
+
+ +

The user-defined argument optionally defined by SSL_CTX_set_msg_callback_arg() or SSL_set_msg_callback_arg().

+ +
+
+ +

NOTES

+ +

Protocol messages are passed to the callback function after decryption and fragment collection where applicable. (Thus record boundaries are not visible.)

+ +

If processing a received protocol message results in an error, the callback function may not be called. For example, the callback function will never see messages that are considered too large to be processed.

+ +

Due to automatic protocol version negotiation, version is not necessarily the protocol version used by the sender of the message: If a TLS 1.0 ClientHello message is received by an SSL 3.0-only server, version will be SSL3_VERSION.

+ +

Pseudo content type values may be sent at various points during the processing of data. The following pseudo content types are currently defined:

+ +
+ +
SSL3_RT_HEADER
+
+ +

Used when a record is sent or received. The buf contains the record header bytes only.

+ +
+
SSL3_RT_INNER_CONTENT_TYPE
+
+ +

Used when an encrypted TLSv1.3 record is sent or received. In encrypted TLSv1.3 records the content type in the record header is always SSL3_RT_APPLICATION_DATA. The real content type for the record is contained in an "inner" content type. buf contains the encoded "inner" content type byte.

+ +
+
+ +

RETURN VALUES

+ +

SSL_CTX_set_msg_callback(), SSL_CTX_set_msg_callback_arg(), SSL_set_msg_callback() and SSL_set_msg_callback_arg() do not return values.

+ +

SEE ALSO

+ +

ssl(7), SSL_new(3)

+ +

HISTORY

+ +

The pseudo content type SSL3_RT_INNER_CONTENT_TYPE was added in OpenSSL 1.1.1.

+ +

COPYRIGHT

+ +

Copyright 2001-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_num_tickets.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_num_tickets.html new file mode 100644 index 00000000..f469f92b --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_num_tickets.html @@ -0,0 +1,67 @@ + + + + +SSL_CTX_set_num_tickets + + + + + + + + + + +

NAME

+ +

SSL_set_num_tickets, SSL_get_num_tickets, SSL_CTX_set_num_tickets, SSL_CTX_get_num_tickets - control the number of TLSv1.3 session tickets that are issued

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+int SSL_set_num_tickets(SSL *s, size_t num_tickets);
+size_t SSL_get_num_tickets(SSL *s);
+int SSL_CTX_set_num_tickets(SSL_CTX *ctx, size_t num_tickets);
+size_t SSL_CTX_get_num_tickets(SSL_CTX *ctx);
+ +

DESCRIPTION

+ +

SSL_CTX_set_num_tickets() and SSL_set_num_tickets() can be called for a server application and set the number of TLSv1.3 session tickets that will be sent to the client after a full handshake. Set the desired value (which could be 0) in the num_tickets argument. Typically these functions should be called before the start of the handshake.

+ +

The default number of tickets is 2; the default number of tickets sent following a resumption handshake is 1 but this cannot be changed using these functions. The number of tickets following a resumption handshake can be reduced to 0 using custom session ticket callbacks (see SSL_CTX_set_session_ticket_cb(3)).

+ +

Tickets are also issued on receipt of a post-handshake certificate from the client following a request by the server using SSL_verify_client_post_handshake(3). These new tickets will be associated with the updated client identity (i.e. including their certificate and verification status). The number of tickets issued will normally be the same as was used for the initial handshake. If the initial handshake was a full handshake then SSL_set_num_tickets() can be called again prior to calling SSL_verify_client_post_handshake() to update the number of tickets that will be sent.

+ +

SSL_CTX_get_num_tickets() and SSL_get_num_tickets() return the number of tickets set by a previous call to SSL_CTX_set_num_tickets() or SSL_set_num_tickets(), or 2 if no such call has been made.

+ +

RETURN VALUES

+ +

SSL_CTX_set_num_tickets() and SSL_set_num_tickets() return 1 on success or 0 on failure.

+ +

SSL_CTX_get_num_tickets() and SSL_get_num_tickets() return the number of tickets that have been previously set.

+ +

HISTORY

+ +

These functions were added in OpenSSL 1.1.1.

+ +

COPYRIGHT

+ +

Copyright 2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_options.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_options.html new file mode 100644 index 00000000..cd6ea3b7 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_options.html @@ -0,0 +1,350 @@ + + + + +SSL_CTX_set_options + + + + + + + + + + +

NAME

+ +

SSL_CTX_set_options, SSL_set_options, SSL_CTX_clear_options, SSL_clear_options, SSL_CTX_get_options, SSL_get_options, SSL_get_secure_renegotiation_support - manipulate SSL options

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+long SSL_CTX_set_options(SSL_CTX *ctx, long options);
+long SSL_set_options(SSL *ssl, long options);
+
+long SSL_CTX_clear_options(SSL_CTX *ctx, long options);
+long SSL_clear_options(SSL *ssl, long options);
+
+long SSL_CTX_get_options(SSL_CTX *ctx);
+long SSL_get_options(SSL *ssl);
+
+long SSL_get_secure_renegotiation_support(SSL *ssl);
+ +

DESCRIPTION

+ +

SSL_CTX_set_options() adds the options set via bitmask in options to ctx. Options already set before are not cleared!

+ +

SSL_set_options() adds the options set via bitmask in options to ssl. Options already set before are not cleared!

+ +

SSL_CTX_clear_options() clears the options set via bitmask in options to ctx.

+ +

SSL_clear_options() clears the options set via bitmask in options to ssl.

+ +

SSL_CTX_get_options() returns the options set for ctx.

+ +

SSL_get_options() returns the options set for ssl.

+ +

SSL_get_secure_renegotiation_support() indicates whether the peer supports secure renegotiation. Note, this is implemented via a macro.

+ +

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 or operation (|).

+ +

SSL_CTX_set_options() and SSL_set_options() affect the (external) protocol behaviour of the SSL library. The (internal) behaviour of the API can be changed by using the similar SSL_CTX_set_mode(3) and SSL_set_mode() functions.

+ +

During a handshake, the option settings of the SSL object are used. When a new SSL object is created from a context using SSL_new(), the current option setting is copied. Changes to ctx do not affect already created SSL objects. SSL_clear() does not affect the settings.

+ +

The following bug workaround options are available:

+ +
+ +
SSL_OP_SAFARI_ECDHE_ECDSA_BUG
+
+ +

Don't prefer ECDHE-ECDSA ciphers when the client appears to be Safari on OS X. OS X 10.8..10.8.3 has broken support for ECDHE-ECDSA ciphers.

+ +
+
SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS
+
+ +

Disables a countermeasure against a SSL 3.0/TLS 1.0 protocol vulnerability affecting CBC ciphers, which cannot be handled by some broken SSL implementations. This option has no effect for connections using other ciphers.

+ +
+
SSL_OP_TLSEXT_PADDING
+
+ +

Adds a padding extension to ensure the ClientHello size is never between 256 and 511 bytes in length. This is needed as a workaround for some implementations.

+ +
+
SSL_OP_ALL
+
+ +

All of the above bug workarounds plus SSL_OP_LEGACY_SERVER_CONNECT as mentioned below.

+ +
+
+ +

It is usually safe to use SSL_OP_ALL to enable the bug workaround options if compatibility with somewhat broken implementations is desired.

+ +

The following modifying options are available:

+ +
+ +
SSL_OP_TLS_ROLLBACK_BUG
+
+ +

Disable version rollback attack detection.

+ +

During the client key exchange, the client must send the same information about acceptable SSL/TLS protocol levels as during the first hello. Some clients violate this rule by adapting to the server's answer. (Example: the client sends a SSLv2 hello and accepts up to SSLv3.1=TLSv1, the server only understands up to SSLv3. In this case the client must still use the same SSLv3.1=TLSv1 announcement. Some clients step down to SSLv3 with respect to the server's answer and violate the version rollback protection.)

+ +
+
SSL_OP_CIPHER_SERVER_PREFERENCE
+
+ +

When choosing a cipher, use the server's preferences instead of the client preferences. When not set, the SSL server will always follow the clients preferences. When set, the SSL/TLS server will choose following its own preferences.

+ +
+
SSL_OP_NO_SSLv3, SSL_OP_NO_TLSv1, SSL_OP_NO_TLSv1_1, SSL_OP_NO_TLSv1_2, SSL_OP_NO_TLSv1_3, SSL_OP_NO_DTLSv1, SSL_OP_NO_DTLSv1_2
+
+ +

These options turn off the SSLv3, TLSv1, TLSv1.1, TLSv1.2 or TLSv1.3 protocol versions with TLS or the DTLSv1, DTLSv1.2 versions with DTLS, respectively. As of OpenSSL 1.1.0, these options are deprecated, use SSL_CTX_set_min_proto_version(3) and SSL_CTX_set_max_proto_version(3) instead.

+ +
+
SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION
+
+ +

When performing renegotiation as a server, always start a new session (i.e., session resumption requests are only accepted in the initial handshake). This option is not needed for clients.

+ +
+
SSL_OP_NO_COMPRESSION
+
+ +

Do not use compression even if it is supported.

+ +
+
SSL_OP_NO_QUERY_MTU
+
+ +

Do not query the MTU. Only affects DTLS connections.

+ +
+ +
+ +

Turn on Cookie Exchange as described in RFC4347 Section 4.2.1. Only affects DTLS connections.

+ +
+
SSL_OP_NO_TICKET
+
+ +

SSL/TLS supports two mechanisms for resuming sessions: session ids and stateless session tickets.

+ +

When using session ids a copy of the session information is cached on the server and a unique id is sent to the client. When the client wishes to resume it provides the unique id so that the server can retrieve the session information from its cache.

+ +

When using stateless session tickets the server uses a session ticket encryption key to encrypt the session information. This encrypted data is sent to the client as a "ticket". When the client wishes to resume it sends the encrypted data back to the server. The server uses its key to decrypt the data and resume 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 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 in a ticket and sent back to the client. When the client wishes to resume, it presents a ticket in the same way as for stateless tickets. The server can then extract the session id from the ticket and retrieve the session information from its cache.

+ +

By default OpenSSL will use stateless tickets. The SSL_OP_NO_TICKET option will cause stateless tickets to not be issued. In TLSv1.2 and below this means no ticket gets sent to the client at all. In TLSv1.3 a stateful ticket will be sent. This is a server-side option only.

+ +

In TLSv1.3 it is possible to suppress all tickets (stateful and stateless) from being sent by calling SSL_CTX_set_num_tickets(3) or SSL_set_num_tickets(3).

+ +
+
SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION
+
+ +

Allow legacy insecure renegotiation between OpenSSL and unpatched clients or servers. See the SECURE RENEGOTIATION section for more details.

+ +
+
SSL_OP_LEGACY_SERVER_CONNECT
+
+ +

Allow legacy insecure renegotiation between OpenSSL and unpatched servers only: this option is currently set by default. See the SECURE RENEGOTIATION section for more details.

+ +
+
SSL_OP_NO_ENCRYPT_THEN_MAC
+
+ +

Normally clients and servers will transparently attempt to negotiate the RFC7366 Encrypt-then-MAC option on TLS and DTLS connection.

+ +

If this option is set, Encrypt-then-MAC is disabled. Clients will not propose, and servers will not accept the extension.

+ +
+
SSL_OP_NO_RENEGOTIATION
+
+ +

Disable all renegotiation in TLSv1.2 and earlier. Do not send HelloRequest messages, and ignore renegotiation requests via ClientHello.

+ +
+
SSL_OP_ALLOW_NO_DHE_KEX
+
+ +

In TLSv1.3 allow a non-(ec)dhe based key exchange mode on resumption. This means that there will be no forward secrecy for the resumed session.

+ +
+
SSL_OP_PRIORITIZE_CHACHA
+
+ +

When SSL_OP_CIPHER_SERVER_PREFERENCE is set, temporarily reprioritize ChaCha20-Poly1305 ciphers to the top of the server cipher list if a ChaCha20-Poly1305 cipher is at the top of the client cipher list. This helps those clients (e.g. mobile) use ChaCha20-Poly1305 if that cipher is anywhere in the server cipher list; but still allows other clients to use AES and other ciphers. Requires SSL_OP_CIPHER_SERVER_PREFERENCE.

+ +
+
SSL_OP_ENABLE_MIDDLEBOX_COMPAT
+
+ +

If set then dummy Change Cipher Spec (CCS) messages are sent in TLSv1.3. This has the effect of making TLSv1.3 look more like TLSv1.2 so that middleboxes that do not understand TLSv1.3 will not drop the connection. Regardless of whether this option is set or not CCS messages received from the peer will always be ignored in TLSv1.3. This option is set by default. To switch it off use SSL_clear_options(). A future version of OpenSSL may not set this by default.

+ +
+
SSL_OP_NO_ANTI_REPLAY
+
+ +

By default, when a server is configured for early data (i.e., max_early_data > 0), OpenSSL will switch on replay protection. See SSL_read_early_data(3) for a description of the replay protection feature. Anti-replay measures are required to comply with the TLSv1.3 specification. Some applications may be able to mitigate the replay risks in other ways and in such cases the built in OpenSSL functionality is not required. Those applications can turn this feature off by setting this option. This is a server-side opton only. It is ignored by clients.

+ +
+
+ +

The following options no longer have any effect but their identifiers are retained for compatibility purposes:

+ +
+ +
SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG
+
+ +
+
SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER
+
+ +
+
SSL_OP_SSLEAY_080_CLIENT_DH_BUG
+
+ +
+
SSL_OP_TLS_D5_BUG
+
+ +
+
SSL_OP_TLS_BLOCK_PADDING_BUG
+
+ +
+
SSL_OP_MSIE_SSLV2_RSA_PADDING
+
+ +
+
SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG
+
+ +
+
SSL_OP_MICROSOFT_SESS_ID_BUG
+
+ +
+
SSL_OP_NETSCAPE_CHALLENGE_BUG
+
+ +
+
SSL_OP_PKCS1_CHECK_1
+
+ +
+
SSL_OP_PKCS1_CHECK_2
+
+ +
+
SSL_OP_SINGLE_DH_USE
+
+ +
+
SSL_OP_SINGLE_ECDH_USE
+
+ +
+
SSL_OP_EPHEMERAL_RSA
+
+ +
+
+ +

SECURE RENEGOTIATION

+ +

OpenSSL always attempts to use secure renegotiation as described in RFC5746. This counters the prefix attack described in CVE-2009-3555 and elsewhere.

+ +

This attack has far reaching consequences which application writers should be aware of. In the description below an implementation supporting secure renegotiation is referred to as patched. A server not supporting secure renegotiation is referred to as unpatched.

+ +

The following sections describe the operations permitted by OpenSSL's secure renegotiation implementation.

+ +

Patched client and server

+ +

Connections and renegotiation are always permitted by OpenSSL implementations.

+ +

Unpatched client and patched OpenSSL server

+ +

The initial connection succeeds but client renegotiation is denied by the server with a no_renegotiation warning alert if TLS v1.0 is used or a fatal handshake_failure alert in SSL v3.0.

+ +

If the patched OpenSSL server attempts to renegotiate a fatal handshake_failure alert is sent. This is because the server code may be unaware of the unpatched nature of the client.

+ +

If the option SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION is set then renegotiation always succeeds.

+ +

Patched OpenSSL client and unpatched server.

+ +

If the option SSL_OP_LEGACY_SERVER_CONNECT or SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION is set then initial connections and renegotiation between patched OpenSSL clients and unpatched servers succeeds. If neither option is set then initial connections to unpatched servers will fail.

+ +

The option SSL_OP_LEGACY_SERVER_CONNECT is currently set by default even though it has security implications: otherwise it would be impossible to connect to unpatched servers (i.e. all of them initially) and this is clearly not acceptable. Renegotiation is permitted because this does not add any additional security issues: during an attack clients do not see any renegotiations anyway.

+ +

As more servers become patched the option SSL_OP_LEGACY_SERVER_CONNECT will not be set by default in a future version of OpenSSL.

+ +

OpenSSL client applications wishing to ensure they can connect to unpatched servers should always set SSL_OP_LEGACY_SERVER_CONNECT

+ +

OpenSSL client applications that want to ensure they can not connect to unpatched servers (and thus avoid any security issues) should always clear SSL_OP_LEGACY_SERVER_CONNECT using SSL_CTX_clear_options() or SSL_clear_options().

+ +

The difference between the SSL_OP_LEGACY_SERVER_CONNECT and SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION options is that SSL_OP_LEGACY_SERVER_CONNECT enables initial connections and secure renegotiation between OpenSSL clients and unpatched servers only, while SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION allows initial connections and renegotiation between OpenSSL and unpatched clients or servers.

+ +

RETURN VALUES

+ +

SSL_CTX_set_options() and SSL_set_options() return the new options bitmask after adding options.

+ +

SSL_CTX_clear_options() and SSL_clear_options() return the new options bitmask after clearing options.

+ +

SSL_CTX_get_options() and SSL_get_options() return the current bitmask.

+ +

SSL_get_secure_renegotiation_support() returns 1 is the peer supports secure renegotiation and 0 if it does not.

+ +

SEE ALSO

+ +

ssl(7), SSL_new(3), SSL_clear(3), SSL_CTX_set_tmp_dh_callback(3), SSL_CTX_set_min_proto_version(3), dhparam(1)

+ +

HISTORY

+ +

The attempt to always try to use secure renegotiation was added in OpenSSL 0.9.8m.

+ +

The SSL_OP_PRIORITIZE_CHACHA and SSL_OP_NO_RENEGOTIATION options were added in OpenSSL 1.1.1.

+ +

COPYRIGHT

+ +

Copyright 2001-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_psk_client_callback.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_psk_client_callback.html new file mode 100644 index 00000000..ecc81231 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_psk_client_callback.html @@ -0,0 +1,143 @@ + + + + +SSL_CTX_set_psk_client_callback + + + + + + + + + + +

NAME

+ +

SSL_psk_client_cb_func, SSL_psk_use_session_cb_func, SSL_CTX_set_psk_client_callback, SSL_set_psk_client_callback, SSL_CTX_set_psk_use_session_callback, SSL_set_psk_use_session_callback - set PSK client callback

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+typedef int (*SSL_psk_use_session_cb_func)(SSL *ssl, const EVP_MD *md,
+                                           const unsigned char **id,
+                                           size_t *idlen,
+                                           SSL_SESSION **sess);
+
+
+void SSL_CTX_set_psk_use_session_callback(SSL_CTX *ctx,
+                                          SSL_psk_use_session_cb_func cb);
+void SSL_set_psk_use_session_callback(SSL *s, SSL_psk_use_session_cb_func cb);
+
+
+typedef unsigned int (*SSL_psk_client_cb_func)(SSL *ssl,
+                                               const char *hint,
+                                               char *identity,
+                                               unsigned int max_identity_len,
+                                               unsigned char *psk,
+                                               unsigned int max_psk_len);
+
+void SSL_CTX_set_psk_client_callback(SSL_CTX *ctx, SSL_psk_client_cb_func cb);
+void SSL_set_psk_client_callback(SSL *ssl, SSL_psk_client_cb_func cb);
+ +

DESCRIPTION

+ +

A client application wishing to use TLSv1.3 PSKs should use either SSL_CTX_set_psk_use_session_callback() or SSL_set_psk_use_session_callback() as appropriate. These functions cannot be used for TLSv1.2 and below PSKs.

+ +

The callback function is given a pointer to the SSL connection in ssl.

+ +

The first time the callback is called for a connection the md parameter is NULL. In some circumstances the callback will be called a second time. In that case the server will have specified a ciphersuite to use already and the PSK must be compatible with the digest for that ciphersuite. The digest will be given in md. The PSK returned by the callback is allowed to be different between the first and second time it is called.

+ +

On successful completion the callback must store a pointer to an identifier for the PSK in *id. The identifier length in bytes should be stored in *idlen. The memory pointed to by *id remains owned by the application and should be freed by it as required at any point after the handshake is complete.

+ +

Additionally the callback should store a pointer to an SSL_SESSION object in *sess. This is used as the basis for the PSK, and should, at a minimum, have the following fields set:

+ +
+ +
The master key
+
+ +

This can be set via a call to SSL_SESSION_set1_master_key(3).

+ +
+
A ciphersuite
+
+ +

Only the handshake digest associated with the ciphersuite is relevant for the PSK (the server may go on to negotiate any ciphersuite which is compatible with the digest). The application can use any TLSv1.3 ciphersuite. If md is not NULL the handshake digest for the ciphersuite should be the same. The ciphersuite can be set via a call to <SSL_SESSION_set_cipher(3)>. The handshake digest of an SSL_CIPHER object can be checked using <SSL_CIPHER_get_handshake_digest(3)>.

+ +
+
The protocol version
+
+ +

This can be set via a call to SSL_SESSION_set_protocol_version(3) and should be TLS1_3_VERSION.

+ +
+
+ +

Additionally the maximum early data value should be set via a call to SSL_SESSION_set_max_early_data(3) if the PSK will be used for sending early data.

+ +

Alternatively an SSL_SESSION created from a previous non-PSK handshake may also be used as the basis for a PSK.

+ +

Ownership of the SSL_SESSION object is passed to the OpenSSL library and so it should not be freed by the application.

+ +

It is also possible for the callback to succeed but not supply a PSK. In this case no PSK will be sent to the server but the handshake will continue. To do this the callback should return successfully and ensure that *sess is NULL. The contents of *id and *idlen will be ignored.

+ +

A client application wishing to use PSK ciphersuites for TLSv1.2 and below must provide a different callback function. This function will be called when the client is sending the ClientKeyExchange message to the server.

+ +

The purpose of the callback function is to select the PSK identity and the pre-shared key to use during the connection setup phase.

+ +

The callback is set using functions SSL_CTX_set_psk_client_callback() or SSL_set_psk_client_callback(). The callback function is given the connection in parameter ssl, a NULL-terminated PSK identity hint sent by the server in parameter hint, a buffer identity of length max_identity_len bytes where the resulting NUL-terminated identity is to be stored, and a buffer psk of length max_psk_len bytes where the resulting pre-shared key is to be stored.

+ +

The callback for use in TLSv1.2 will also work in TLSv1.3 although it is recommended to use SSL_CTX_set_psk_use_session_callback() or SSL_set_psk_use_session_callback() for this purpose instead. If TLSv1.3 has been negotiated then OpenSSL will first check to see if a callback has been set via SSL_CTX_set_psk_use_session_callback() or SSL_set_psk_use_session_callback() 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 hint value will always be NULL and the handshake digest will default to SHA-256 for any returned PSK.

+ +

NOTES

+ +

Note that parameter hint given to the callback may be NULL.

+ +

A connection established via a TLSv1.3 PSK will appear as if session resumption has occurred so that 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:

+ +

"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 ensure safety from cross-protocol related output by not reusing PSKs between TLS 1.3 and TLS 1.2."

+ +

RETURN VALUES

+ +

Return values from the SSL_psk_client_cb_func callback are interpreted as follows:

+ +

On success (callback found a PSK identity and a pre-shared key to use) the length (> 0) of psk in bytes is returned.

+ +

Otherwise or on errors the callback should return 0. In this case the connection setup fails.

+ +

The SSL_psk_use_session_cb_func callback should return 1 on success or 0 on failure. In the event of failure the connection setup fails.

+ +

SEE ALSO

+ +

SSL_CTX_set_psk_find_session_callback(3), SSL_set_psk_find_session_callback(3)

+ +

HISTORY

+ +

SSL_CTX_set_psk_use_session_callback() and SSL_set_psk_use_session_callback() were added in OpenSSL 1.1.1.

+ +

COPYRIGHT

+ +

Copyright 2006-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_quiet_shutdown.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_quiet_shutdown.html new file mode 100644 index 00000000..8e7e9103 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_quiet_shutdown.html @@ -0,0 +1,77 @@ + + + + +SSL_CTX_set_quiet_shutdown + + + + + + + + + + +

NAME

+ +

SSL_CTX_set_quiet_shutdown, SSL_CTX_get_quiet_shutdown, SSL_set_quiet_shutdown, SSL_get_quiet_shutdown - manipulate shutdown behaviour

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+void SSL_CTX_set_quiet_shutdown(SSL_CTX *ctx, int mode);
+int SSL_CTX_get_quiet_shutdown(const SSL_CTX *ctx);
+
+void SSL_set_quiet_shutdown(SSL *ssl, int mode);
+int SSL_get_quiet_shutdown(const SSL *ssl);
+ +

DESCRIPTION

+ +

SSL_CTX_set_quiet_shutdown() sets the "quiet shutdown" flag for ctx to be mode. SSL objects created from ctx inherit the mode valid at the time SSL_new(3) is called. mode may be 0 or 1.

+ +

SSL_CTX_get_quiet_shutdown() returns the "quiet shutdown" setting of ctx.

+ +

SSL_set_quiet_shutdown() sets the "quiet shutdown" flag for ssl to be mode. The setting stays valid until ssl is removed with SSL_free(3) or SSL_set_quiet_shutdown() is called again. It is not changed when SSL_clear(3) is called. mode may be 0 or 1.

+ +

SSL_get_quiet_shutdown() returns the "quiet shutdown" setting of ssl.

+ +

NOTES

+ +

Normally when a SSL connection is finished, the parties must send out close_notify alert messages using SSL_shutdown(3) for a clean shutdown.

+ +

When setting the "quiet shutdown" flag to 1, SSL_shutdown(3) will set the internal flags to SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN. (SSL_shutdown(3) then behaves like SSL_set_shutdown(3) called with SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN.) The session is thus considered to be shutdown, but no close_notify alert is sent to the peer. This behaviour violates the TLS standard.

+ +

The default is normal shutdown behaviour as described by the TLS standard.

+ +

RETURN VALUES

+ +

SSL_CTX_set_quiet_shutdown() and SSL_set_quiet_shutdown() do not return diagnostic information.

+ +

SSL_CTX_get_quiet_shutdown() and SSL_get_quiet_shutdown return the current setting.

+ +

SEE ALSO

+ +

ssl(7), SSL_shutdown(3), SSL_set_shutdown(3), SSL_new(3), SSL_clear(3), SSL_free(3)

+ +

COPYRIGHT

+ +

Copyright 2001-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_read_ahead.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_read_ahead.html new file mode 100644 index 00000000..9f7ba2da --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_read_ahead.html @@ -0,0 +1,72 @@ + + + + +SSL_CTX_set_read_ahead + + + + + + + + + + +

NAME

+ +

SSL_CTX_set_read_ahead, SSL_CTX_get_read_ahead, SSL_set_read_ahead, SSL_get_read_ahead, SSL_CTX_get_default_read_ahead - manage whether to read as many input bytes as possible

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+void SSL_set_read_ahead(SSL *s, int yes);
+int SSL_get_read_ahead(const SSL *s);
+
+SSL_CTX_set_read_ahead(SSL_CTX *ctx, int yes);
+long SSL_CTX_get_read_ahead(SSL_CTX *ctx);
+long SSL_CTX_get_default_read_ahead(SSL_CTX *ctx);
+ +

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 x bytes are currently required by OpenSSL, but y bytes are available from the underlying BIO (where y > x), then OpenSSL will read all y bytes into its buffer (providing that the buffer is large enough) if reading ahead is on, or x bytes otherwise. Setting the parameter yes to 0 turns reading ahead is off, other values turn it on. SSL_CTX_set_default_read_ahead() is identical to SSL_CTX_set_read_ahead().

+ +

SSL_CTX_get_read_ahead() and SSL_get_read_ahead() indicate whether reading ahead has been set or not. SSL_CTX_get_default_read_ahead() is identical to SSL_CTX_get_read_ahead().

+ +

NOTES

+ +

These functions have no impact when used with DTLS. The return values for SSL_CTX_get_read_head() and SSL_get_read_ahead() are undefined for DTLS. Setting read_ahead can impact the behaviour of the SSL_pending() function (see SSL_pending(3)).

+ +

Since SSL_read() can return SSL_ERROR_WANT_READ for non-application data records, and SSL_has_pending() can't tell the difference between processed and unprocessed data, it's recommended that if read ahead is turned on that SSL_MODE_AUTO_RETRY is not turned off using SSL_CTX_clear_mode(). That will prevent getting SSL_ERROR_WANT_READ when there is still a complete record available that hasn't been processed.

+ +

If the application wants to continue to use the underlying transport (e.g. TCP connection) after the SSL connection is finished using SSL_shutdown() reading ahead should be turned off. Otherwise the SSL structure might read data that it shouldn't.

+ +

RETURN VALUES

+ +

SSL_get_read_ahead() and SSL_CTX_get_read_ahead() return 0 if reading ahead is off, and non zero otherwise.

+ +

SEE ALSO

+ +

ssl(7), SSL_pending(3)

+ +

COPYRIGHT

+ +

Copyright 2015-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_record_padding_callback.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_record_padding_callback.html new file mode 100644 index 00000000..b61277b2 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_record_padding_callback.html @@ -0,0 +1,94 @@ + + + + +SSL_CTX_set_record_padding_callback + + + + + + + + + + +

NAME

+ +

SSL_CTX_set_record_padding_callback, SSL_set_record_padding_callback, SSL_CTX_set_record_padding_callback_arg, SSL_set_record_padding_callback_arg, SSL_CTX_get_record_padding_callback_arg, SSL_get_record_padding_callback_arg, SSL_CTX_set_block_padding, SSL_set_block_padding - install callback to specify TLS 1.3 record padding

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+void SSL_CTX_set_record_padding_callback(SSL_CTX *ctx, size_t (*cb)(SSL *s, int type, size_t len, void *arg));
+void SSL_set_record_padding_callback(SSL *ssl, size_t (*cb)(SSL *s, int type, size_t len, void *arg));
+
+void SSL_CTX_set_record_padding_callback_arg(SSL_CTX *ctx, void *arg);
+void *SSL_CTX_get_record_padding_callback_arg(const SSL_CTX *ctx);
+
+void SSL_set_record_padding_callback_arg(SSL *ssl, void *arg);
+void *SSL_get_record_padding_callback_arg(const SSL *ssl);
+
+int SSL_CTX_set_block_padding(SSL_CTX *ctx, size_t block_size);
+int SSL_set_block_padding(SSL *ssl, size_t block_size);
+ +

DESCRIPTION

+ +

SSL_CTX_set_record_padding_callback() or SSL_set_record_padding_callback() can be used to assign a callback function cb to specify the padding for TLS 1.3 records. The value set in ctx is copied to a new SSL by SSL_new().

+ +

SSL_CTX_set_record_padding_callback_arg() and SSL_set_record_padding_callback_arg() assign a value arg that is passed to the callback when it is invoked. The value set in ctx is copied to a new SSL by SSL_new().

+ +

SSL_CTX_get_record_padding_callback_arg() and SSL_get_record_padding_callback_arg() retrieve the arg value that is passed to the callback.

+ +

SSL_CTX_set_block_padding() and SSL_set_block_padding() pads the record to a multiple of the block_size. A block_size of 0 or 1 disables block padding. The limit of block_size is SSL3_RT_MAX_PLAIN_LENGTH.

+ +

The callback is invoked for every record before encryption. The type parameter is the TLS record type that is being processed; may be one of SSL3_RT_APPLICATION_DATA, SSL3_RT_HANDSHAKE, or SSL3_RT_ALERT. The len parameter is the current plaintext length of the record before encryption. The arg parameter is the value set via SSL_CTX_set_record_padding_callback_arg() or SSL_set_record_padding_callback_arg().

+ +

RETURN VALUES

+ +

The SSL_CTX_get_record_padding_callback_arg() and SSL_get_record_padding_callback_arg() functions return the arg value assigned in the corresponding set functions.

+ +

The SSL_CTX_set_block_padding() and SSL_set_block_padding() functions return 1 on success or 0 if block_size is too large.

+ +

The cb returns the number of padding bytes to add to the record. A return of 0 indicates no padding will be added. A return value that causes the record to exceed the maximum record size (SSL3_RT_MAX_PLAIN_LENGTH) will pad out to the maximum record size.

+ +

NOTES

+ +

The default behavior is to add no padding to the record.

+ +

A user-supplied padding callback function will override the behavior set by SSL_set_block_padding() or SSL_CTX_set_block_padding(). Setting the user-supplied callback to NULL will restore the configured block padding behavior.

+ +

These functions only apply to TLS 1.3 records being written.

+ +

Padding bytes are not added in constant-time.

+ +

SEE ALSO

+ +

ssl(7), SSL_new(3)

+ +

HISTORY

+ +

The record padding API was added for TLS 1.3 support in OpenSSL 1.1.1.

+ +

COPYRIGHT

+ +

Copyright 2017-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_security_level.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_security_level.html new file mode 100644 index 00000000..18e730d4 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_security_level.html @@ -0,0 +1,167 @@ + + + + +SSL_CTX_set_security_level + + + + + + + + + + +

NAME

+ +

SSL_CTX_set_security_level, SSL_set_security_level, SSL_CTX_get_security_level, SSL_get_security_level, SSL_CTX_set_security_callback, SSL_set_security_callback, SSL_CTX_get_security_callback, SSL_get_security_callback, SSL_CTX_set0_security_ex_data, SSL_set0_security_ex_data, SSL_CTX_get0_security_ex_data, SSL_get0_security_ex_data - SSL/TLS security framework

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+void SSL_CTX_set_security_level(SSL_CTX *ctx, int level);
+void SSL_set_security_level(SSL *s, int level);
+
+int SSL_CTX_get_security_level(const SSL_CTX *ctx);
+int SSL_get_security_level(const SSL *s);
+
+void SSL_CTX_set_security_callback(SSL_CTX *ctx,
+                                   int (*cb)(SSL *s, SSL_CTX *ctx, int op,
+                                             int bits, int nid,
+                                             void *other, void *ex));
+
+void SSL_set_security_callback(SSL *s, int (*cb)(SSL *s, SSL_CTX *ctx, int op,
+                                                 int bits, int nid,
+                                                 void *other, void *ex));
+
+int (*SSL_CTX_get_security_callback(const SSL_CTX *ctx))(SSL *s, SSL_CTX *ctx, int op,
+                                                         int bits, int nid, void *other,
+                                                         void *ex);
+int (*SSL_get_security_callback(const SSL *s))(SSL *s, SSL_CTX *ctx, int op,
+                                               int bits, int nid, void *other,
+                                               void *ex);
+
+void SSL_CTX_set0_security_ex_data(SSL_CTX *ctx, void *ex);
+void SSL_set0_security_ex_data(SSL *s, void *ex);
+
+void *SSL_CTX_get0_security_ex_data(const SSL_CTX *ctx);
+void *SSL_get0_security_ex_data(const SSL *s);
+ +

DESCRIPTION

+ +

The functions SSL_CTX_set_security_level() and SSL_set_security_level() set the security level to level. If not set the library default security level is used.

+ +

The functions SSL_CTX_get_security_level() and SSL_get_security_level() retrieve the current security level.

+ +

SSL_CTX_set_security_callback(), SSL_set_security_callback(), SSL_CTX_get_security_callback() and SSL_get_security_callback() get or set the security callback associated with ctx or s. If not set a default security callback is used. The meaning of the parameters and the behaviour of the default callbacks is described below.

+ +

SSL_CTX_set0_security_ex_data(), SSL_set0_security_ex_data(), SSL_CTX_get0_security_ex_data() and SSL_get0_security_ex_data() set the extra data pointer passed to the ex parameter of the callback. This value is passed to the callback verbatim and can be set to any convenient application specific value.

+ +

DEFAULT CALLBACK BEHAVIOUR

+ +

If an application doesn't set its own security callback the default callback is used. It is intended to provide sane defaults. The meaning of each level is described below.

+ +
+ +
Level 0
+
+ +

Everything is permitted. This retains compatibility with previous versions of OpenSSL.

+ +
+
Level 1
+
+ +

The security level corresponds to a minimum of 80 bits of security. Any parameters offering below 80 bits of security are excluded. As a result RSA, DSA and DH keys shorter than 1024 bits and ECC keys shorter than 160 bits are prohibited. All export cipher suites are prohibited since they all offer less than 80 bits of security. SSL version 2 is prohibited. Any cipher suite using MD5 for the MAC is also prohibited.

+ +
+
Level 2
+
+ +

Security level set to 112 bits of security. As a result RSA, DSA and DH keys shorter than 2048 bits and ECC keys shorter than 224 bits are prohibited. In addition to the level 1 exclusions any cipher suite using RC4 is also prohibited. SSL version 3 is also not allowed. Compression is disabled.

+ +
+
Level 3
+
+ +

Security level set to 128 bits of security. As a result RSA, DSA and DH keys shorter than 3072 bits and ECC keys shorter than 256 bits are prohibited. In addition to the level 2 exclusions cipher suites not offering forward secrecy are prohibited. TLS versions below 1.1 are not permitted. Session tickets are disabled.

+ +
+
Level 4
+
+ +

Security level set to 192 bits of security. As a result RSA, DSA and DH keys shorter than 7680 bits and ECC keys shorter than 384 bits are prohibited. Cipher suites using SHA1 for the MAC are prohibited. TLS versions below 1.2 are not permitted.

+ +
+
Level 5
+
+ +

Security level set to 256 bits of security. As a result RSA, DSA and DH keys shorter than 15360 bits and ECC keys shorter than 512 bits are prohibited.

+ +
+
+ +

APPLICATION DEFINED SECURITY CALLBACKS

+ +

Documentation to be provided.

+ +

NOTES

+ +

WARNING at this time setting the security level higher than 1 for general internet use is likely to cause considerable interoperability issues and is not recommended. This is because the 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 -DOPENSSL_TLS_SECURITY_LEVEL=level. If not set then 1 is used.

+ +

The security framework disables or reject parameters inconsistent with the set security level. In the past this was difficult as applications had to set a number of distinct parameters (supported ciphers, supported curves supported signature algorithms) to achieve this end and some cases (DH parameter size for example) could not be checked at all.

+ +

By setting an appropriate security level much of this complexity can be avoided.

+ +

The bits of security limits affect all relevant parameters including cipher suite encryption algorithms, supported ECC curves, supported signature algorithms, DH parameter sizes, certificate key sizes and signature algorithms. This limit applies no matter what other custom settings an application has set: so if the cipher suite is set to ALL then only cipher suites consistent with the security level are permissible.

+ +

See SP800-57 for how the security limits are related to individual algorithms.

+ +

Some security levels require large key sizes for non-ECC public key algorithms which can severely degrade performance. For example 256 bits of security requires the use of RSA keys of at least 15360 bits in size.

+ +

Some restrictions can be gracefully handled: for example cipher suites offering insufficient security are not sent by the client and will not be selected by the server. Other restrictions such as the peer certificate key size or the DH parameter size will abort the handshake with a fatal alert.

+ +

Attempts to set certificates or parameters with insufficient security are also blocked. For example trying to set a certificate using a 512 bit RSA key using SSL_CTX_use_certificate() at level 1. Applications which do not check the return values for errors will misbehave: for example it might appear that a certificate is not set at all because it had been rejected.

+ +

RETURN VALUES

+ +

SSL_CTX_set_security_level() and SSL_set_security_level() do not return values.

+ +

SSL_CTX_get_security_level() and SSL_get_security_level() return a integer that represents the security level with SSL_CTX or SSL, respectively.

+ +

SSL_CTX_set_security_callback() and SSL_set_security_callback() do not return values.

+ +

SSL_CTX_get_security_callback() and SSL_get_security_callback() return the pointer to the security callback or NULL if the callback is not set.

+ +

SSL_CTX_get0_security_ex_data() and SSL_get0_security_ex_data() return the extra data pointer or NULL if the ex data is not set.

+ +

HISTORY

+ +

These functions were added in OpenSSL 1.1.0.

+ +

COPYRIGHT

+ +

Copyright 2014-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_session_cache_mode.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_session_cache_mode.html new file mode 100644 index 00000000..75d89689 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_session_cache_mode.html @@ -0,0 +1,128 @@ + + + + +SSL_CTX_set_session_cache_mode + + + + + + + + + + +

NAME

+ +

SSL_CTX_set_session_cache_mode, SSL_CTX_get_session_cache_mode - enable/disable session caching

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+long SSL_CTX_set_session_cache_mode(SSL_CTX ctx, long mode);
+long SSL_CTX_get_session_cache_mode(SSL_CTX ctx);
+ +

DESCRIPTION

+ +

SSL_CTX_set_session_cache_mode() enables/disables session caching by setting the operational mode for ctx to <mode>.

+ +

SSL_CTX_get_session_cache_mode() returns the currently used cache mode.

+ +

NOTES

+ +

The OpenSSL library can store/retrieve SSL/TLS sessions for later reuse. The sessions can be held in memory for each ctx, if more than one SSL_CTX object is being maintained, the sessions are unique for each SSL_CTX object.

+ +

In order to reuse a session, a client must send the session's id to the server. It can only send exactly one id. The server then either agrees to reuse the session or it starts a full handshake (to create a new session).

+ +

A server will look up the session in its internal session storage. If the session is not found in internal storage or lookups for the internal storage have been deactivated (SSL_SESS_CACHE_NO_INTERNAL_LOOKUP), the server will try the external storage if available.

+ +

Since a client may try to reuse a session intended for use in a different context, the session id context must be set by the server (see SSL_CTX_set_session_id_context(3)).

+ +

The following session cache modes and modifiers are available:

+ +
+ +
SSL_SESS_CACHE_OFF
+
+ +

No session caching for client or server takes place.

+ +
+
SSL_SESS_CACHE_CLIENT
+
+ +

Client sessions are added to the session cache. As there is no reliable way for the OpenSSL library to know whether a session should be reused or which session to choose (due to the abstract BIO layer the SSL engine does not have details about the connection), the application must select the session to be reused by using the SSL_set_session(3) function. This option is not activated by default.

+ +
+
SSL_SESS_CACHE_SERVER
+
+ +

Server sessions are added to the session cache. When a client proposes a session to be reused, the server looks for the corresponding session in (first) the internal session cache (unless SSL_SESS_CACHE_NO_INTERNAL_LOOKUP is set), then (second) in the external cache if available. If the session is found, the server will try to reuse the session. This is the default.

+ +
+
SSL_SESS_CACHE_BOTH
+
+ +

Enable both SSL_SESS_CACHE_CLIENT and SSL_SESS_CACHE_SERVER at the same time.

+ +
+
SSL_SESS_CACHE_NO_AUTO_CLEAR
+
+ +

Normally the session cache is checked for expired sessions every 255 connections using the SSL_CTX_flush_sessions(3) function. Since this may lead to a delay which cannot be controlled, the automatic flushing may be disabled and SSL_CTX_flush_sessions(3) can be called explicitly by the application.

+ +
+
SSL_SESS_CACHE_NO_INTERNAL_LOOKUP
+
+ +

By setting this flag, session-resume operations in an SSL/TLS server will not automatically look up sessions in the internal cache, even if sessions are automatically stored there. If external session caching callbacks are in use, this flag guarantees that all lookups are directed to the external cache. As automatic lookup only applies for SSL/TLS servers, the flag has no effect on clients.

+ +
+
SSL_SESS_CACHE_NO_INTERNAL_STORE
+
+ +

Depending on the presence of SSL_SESS_CACHE_CLIENT and/or SSL_SESS_CACHE_SERVER, sessions negotiated in an SSL/TLS handshake may be cached for possible reuse. Normally a new session is added to the internal cache as well as any external 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 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 normally be copied into the local cache before processing continues - this flag prevents these additions to the internal cache as well.

+ +
+
SSL_SESS_CACHE_NO_INTERNAL
+
+ +

Enable both SSL_SESS_CACHE_NO_INTERNAL_LOOKUP and SSL_SESS_CACHE_NO_INTERNAL_STORE at the same time.

+ +
+
+ +

The default mode is SSL_SESS_CACHE_SERVER.

+ +

RETURN VALUES

+ +

SSL_CTX_set_session_cache_mode() returns the previously set cache mode.

+ +

SSL_CTX_get_session_cache_mode() returns the currently set cache mode.

+ +

SEE ALSO

+ +

ssl(7), SSL_set_session(3), SSL_session_reused(3), SSL_CTX_add_session(3), SSL_CTX_sess_number(3), SSL_CTX_sess_set_cache_size(3), SSL_CTX_sess_set_get_cb(3), SSL_CTX_set_session_id_context(3), SSL_CTX_set_timeout(3), SSL_CTX_flush_sessions(3)

+ +

COPYRIGHT

+ +

Copyright 2001-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_session_id_context.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_session_id_context.html new file mode 100644 index 00000000..ca281b2c --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_session_id_context.html @@ -0,0 +1,95 @@ + + + + +SSL_CTX_set_session_id_context + + + + + + + + + + +

NAME

+ +

SSL_CTX_set_session_id_context, SSL_set_session_id_context - set context within which session can be reused (server side only)

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+int SSL_CTX_set_session_id_context(SSL_CTX *ctx, const unsigned char *sid_ctx,
+                                   unsigned int sid_ctx_len);
+int SSL_set_session_id_context(SSL *ssl, const unsigned char *sid_ctx,
+                               unsigned int sid_ctx_len);
+ +

DESCRIPTION

+ +

SSL_CTX_set_session_id_context() sets the context sid_ctx of length sid_ctx_len within which a session can be reused for the ctx object.

+ +

SSL_set_session_id_context() sets the context sid_ctx of length sid_ctx_len within which a session can be reused for the ssl object.

+ +

NOTES

+ +

Sessions are generated within a certain context. When exporting/importing sessions with i2d_SSL_SESSION/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 must set its own session id context sid_ctx which is used to distinguish the contexts and is stored in exported sessions. The sid_ctx can be any kind of binary data with a given length, it is therefore possible to use e.g. the name of the application and/or the hostname and/or service name ...

+ +

The session id context becomes part of the session. The session id context is set by the SSL/TLS server. The SSL_CTX_set_session_id_context() and SSL_set_session_id_context() functions are therefore only useful on the server side.

+ +

OpenSSL clients will check the session id context returned by the server when reusing a session.

+ +

The maximum length of the sid_ctx is limited to SSL_MAX_SID_CTX_LENGTH.

+ +

WARNINGS

+ +

If the session id context is not set on an SSL/TLS server and client certificates are used, stored sessions will not be reused but a fatal error will be flagged and the handshake will fail.

+ +

If a server returns a different session id context to an OpenSSL client when reusing a session, an error will be flagged and the handshake will fail. OpenSSL servers will always return the correct session id context, as an OpenSSL server checks the session id context itself before reusing a session as described above.

+ +

RETURN VALUES

+ +

SSL_CTX_set_session_id_context() and SSL_set_session_id_context() return the following values:

+ +
+ +
0
+
+ +

The length sid_ctx_len of the session id context sid_ctx exceeded the maximum allowed length of SSL_MAX_SID_CTX_LENGTH. The error is logged to the error stack.

+ +
+
1
+
+ +

The operation succeeded.

+ +
+
+ +

SEE ALSO

+ +

ssl(7)

+ +

COPYRIGHT

+ +

Copyright 2001-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_session_ticket_cb.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_session_ticket_cb.html new file mode 100644 index 00000000..d2ba22ca --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_session_ticket_cb.html @@ -0,0 +1,169 @@ + + + + +SSL_CTX_set_session_ticket_cb + + + + + + + + + + +

NAME

+ +

SSL_CTX_set_session_ticket_cb, SSL_SESSION_get0_ticket_appdata, SSL_SESSION_set1_ticket_appdata, SSL_CTX_generate_session_ticket_fn, SSL_CTX_decrypt_session_ticket_fn - manage session ticket application data

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+typedef int (*SSL_CTX_generate_session_ticket_fn)(SSL *s, void *arg);
+typedef SSL_TICKET_RETURN (*SSL_CTX_decrypt_session_ticket_fn)(SSL *s, SSL_SESSION *ss,
+                                                               const unsigned char *keyname,
+                                                               size_t keyname_len,
+                                                               SSL_TICKET_STATUS status,
+                                                               void *arg);
+int SSL_CTX_set_session_ticket_cb(SSL_CTX *ctx,
+                                  SSL_CTX_generate_session_ticket_fn gen_cb,
+                                  SSL_CTX_decrypt_session_ticket_fn dec_cb,
+                                  void *arg);
+int SSL_SESSION_set1_ticket_appdata(SSL_SESSION *ss, const void *data, size_t len);
+int SSL_SESSION_get0_ticket_appdata(SSL_SESSION *ss, void **data, size_t *len);
+ +

DESCRIPTION

+ +

SSL_CTX_set_set_session_ticket_cb() sets the application callbacks gen_cb and dec_cb that are used by a server to set and get application data stored with a session, and placed into a session ticket. Either callback function may be set to NULL. The value of arg is passed to the callbacks.

+ +

gen_cb is the application defined callback invoked when a session ticket is about to be created. The application can call SSL_SESSION_set1_ticket_appdata() at this time to add application data to the session ticket. The value of arg is the same as that given to SSL_CTX_set_session_ticket_cb(). The gen_cb callback is defined as type SSL_CTX_generate_session_ticket_fn.

+ +

dec_cb is the application defined callback invoked after session ticket decryption has been attempted and any session ticket application data is available. If ticket decryption was successful then the ss argument contains the session data. The keyname and keyname_len arguments identify the key used to decrypt the session ticket. The status argument is the result of the ticket decryption. See the NOTES section below for further details. The value of arg is the same as that given to SSL_CTX_set_session_ticket_cb(). The dec_cb callback is defined as type SSL_CTX_decrypt_session_ticket_fn.

+ +

SSL_SESSION_set1_ticket_appdata() sets the application data specified by data and len into ss which is then placed into any generated session tickets. It can be called at any time before a session ticket is created to update the data placed into the session ticket. However, given that sessions and tickets are created by the handshake, the gen_cb is provided to notify the application that a session ticket is about to be generated.

+ +

SSL_SESSION_get0_ticket_appdata() assigns data to the session ticket application data and assigns len to the length of the session ticket application data from ss. The application data can be set via SSL_SESSION_set1_ticket_appdata() or by a session ticket. NULL will be assigned to data and 0 will be assigned to len if there is no session ticket application data. SSL_SESSION_get0_ticket_appdata() can be called any time after a session has been created. The dec_cb is provided to notify the application that a session ticket has just been decrypted.

+ +

NOTES

+ +

When the dec_cb callback is invoked, the SSL_SESSION ss has not yet been assigned to the SSL s. The status indicates the result of the ticket decryption. The callback must check the status value before performing any action, as it is called even if ticket decryption fails.

+ +

The keyname and keyname_len arguments to dec_cb may be used to identify the key that was used to encrypt the session ticket.

+ +

The status argument can be any of these values:

+ +
+ +
SSL_TICKET_EMPTY
+
+ +

Empty ticket present. No ticket data will be used and a new ticket should be sent to the client. This only occurs in TLSv1.2 or below. In TLSv1.3 it is not valid for a client to send an empty ticket.

+ +
+
SSL_TICKET_NO_DECRYPT
+
+ +

The ticket couldn't be decrypted. No ticket data will be used and a new ticket should be sent to the client.

+ +
+
SSL_TICKET_SUCCESS
+
+ +

A ticket was successfully decrypted, any session ticket application data should be available. A new ticket should not be sent to the client.

+ +
+
SSL_TICKET_SUCCESS_RENEW
+
+ +

Same as SSL_TICKET_SUCCESS, but a new ticket should be sent to the client.

+ +
+
+ +

The return value can be any of these values:

+ +
+ +
SSL_TICKET_RETURN_ABORT
+
+ +

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 that all of them are. For this reason this option should be used with caution.

+ +
+
SSL_TICKET_RETURN_IGNORE
+
+ +

Do not use a ticket (if one was available). Do not send a renewed ticket to the client.

+ +
+
SSL_TICKET_RETURN_IGNORE_RENEW
+
+ +

Do not use a ticket (if one was available). Send a renewed ticket to the client.

+ +

If the callback does not wish to change the default ticket behaviour then it should return this value if status is SSL_TICKET_EMPTY or SSL_TICKET_NO_DECRYPT.

+ +
+
SSL_TICKET_RETURN_USE
+
+ +

Use the ticket. Do not send a renewed ticket to the client. It is an error for the callback to return this value if status has a value other than SSL_TICKET_SUCCESS or SSL_TICKET_SUCCESS_RENEW.

+ +

If the callback does not wish to change the default ticket behaviour then it should return this value if status is SSL_TICKET_SUCCESS.

+ +
+
SSL_TICKET_RETURN_USE_RENEW
+
+ +

Use the ticket. Send a renewed ticket to the client. It is an error for the callback to return this value if status has a value other than SSL_TICKET_SUCCESS or SSL_TICKET_SUCCESS_RENEW.

+ +

If the callback does not wish to change the default ticket behaviour then it should return this value if status is SSL_TICKET_SUCCESS_RENEW.

+ +
+
+ +

If status has the value SSL_TICKET_EMPTY or SSL_TICKET_NO_DECRYPT then no session data will be available and the callback must not use the ss argument. If status has the value SSL_TICKET_SUCCESS or SSL_TICKET_SUCCESS_RENEW then the application can call SSL_SESSION_get0_ticket_appdata() using the session provided in the ss argument to retrieve the application data.

+ +

When the gen_cb callback is invoked, the SSL_get_session() function can be used to retrieve the SSL_SESSION for SSL_SESSION_set1_ticket_appdata().

+ +

By default, in TLSv1.2 and below, a new session ticket is not issued on a successful resumption and therefore gen_cb will not be called. In TLSv1.3 the default behaviour is to always issue a new ticket on resumption. In both cases this behaviour can be changed if a ticket key callback is in use (see SSL_CTX_set_tlsext_ticket_key_cb(3)).

+ +

RETURN VALUES

+ +

The SSL_CTX_set_session_ticket_cb(), SSL_SESSION_set1_ticket_appdata() and SSL_SESSION_get0_ticket_appdata() functions return 1 on success and 0 on failure.

+ +

The gen_cb callback must return 1 to continue the connection. A return of 0 will terminate the connection with an INTERNAL_ERROR alert.

+ +

The dec_cb callback must return a value as described in NOTES above.

+ +

SEE ALSO

+ +

ssl(7), SSL_get_session(3)

+ +

HISTORY

+ +

The SSL_CTX_set_session_ticket_cb(), SSSL_SESSION_set1_ticket_appdata() and SSL_SESSION_get_ticket_appdata() functions were added in OpenSSL 1.1.1.

+ +

COPYRIGHT

+ +

Copyright 2017-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_split_send_fragment.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_split_send_fragment.html new file mode 100644 index 00000000..dd5e75db --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_split_send_fragment.html @@ -0,0 +1,150 @@ + + + + +SSL_CTX_set_split_send_fragment + + + + + + + + + + +

NAME

+ +

SSL_CTX_set_max_send_fragment, SSL_set_max_send_fragment, SSL_CTX_set_split_send_fragment, SSL_set_split_send_fragment, SSL_CTX_set_max_pipelines, SSL_set_max_pipelines, SSL_CTX_set_default_read_buffer_len, SSL_set_default_read_buffer_len, SSL_CTX_set_tlsext_max_fragment_length, SSL_set_tlsext_max_fragment_length, SSL_SESSION_get_max_fragment_length - Control fragment size settings and pipelining operations

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+long SSL_CTX_set_max_send_fragment(SSL_CTX *ctx, long);
+long SSL_set_max_send_fragment(SSL *ssl, long m);
+
+long SSL_CTX_set_max_pipelines(SSL_CTX *ctx, long m);
+long SSL_set_max_pipelines(SSL_CTX *ssl, long m);
+
+long SSL_CTX_set_split_send_fragment(SSL_CTX *ctx, long m);
+long SSL_set_split_send_fragment(SSL *ssl, long m);
+
+void SSL_CTX_set_default_read_buffer_len(SSL_CTX *ctx, size_t len);
+void SSL_set_default_read_buffer_len(SSL *s, size_t len);
+
+int SSL_CTX_set_tlsext_max_fragment_length(SSL_CTX *ctx, uint8_t mode);
+int SSL_set_tlsext_max_fragment_length(SSL *ssl, uint8_t mode);
+uint8_t SSL_SESSION_get_max_fragment_length(SSL_SESSION *session);
+ +

DESCRIPTION

+ +

Some engines are able to process multiple simultaneous crypto operations. This capability could be utilised to parallelise the processing of a single connection. For example a single write can be split into multiple records and each one encrypted independently and in parallel. Note: this will only work in TLS1.1+. There is no support in SSLv3, TLSv1.0 or DTLS (any version). This 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 development and test purposes only.

+ +

SSL_CTX_set_max_send_fragment() and SSL_set_max_send_fragment() set the max_send_fragment parameter for SSL_CTX and SSL objects respectively. This value restricts the amount of plaintext bytes that will be sent in any one SSL/TLS record. By default its value is SSL3_RT_MAX_PLAIN_LENGTH (16384). These functions will only accept a value in the range 512 - SSL3_RT_MAX_PLAIN_LENGTH.

+ +

SSL_CTX_set_max_pipelines() and SSL_set_max_pipelines() set the maximum number of pipelines that will be used at any one time. This value applies to both "read" pipelining and "write" pipelining. By default only one pipeline will be used (i.e. normal non-parallel operation). The number of pipelines set must be in the range 1 - SSL_MAX_PIPELINES (32). Setting this to a value > 1 will also automatically turn on "read_ahead" (see SSL_CTX_set_read_ahead(3)). This is explained further below. OpenSSL will only every use more than one pipeline if a cipher suite is negotiated that uses a pipeline capable cipher provided by an engine.

+ +

Pipelining operates slightly differently for reading encrypted data compared to writing encrypted data. SSL_CTX_set_split_send_fragment() and SSL_set_split_send_fragment() define how data is split up into pipelines when writing encrypted data. The number of pipelines used will be determined by the amount of data provided to the SSL_write_ex() or SSL_write() call divided by split_send_fragment.

+ +

For example if split_send_fragment is set to 2000 and max_pipelines is 4 then:

+ +

SSL_write/SSL_write_ex called with 0-2000 bytes == 1 pipeline used

+ +

SSL_write/SSL_write_ex called with 2001-4000 bytes == 2 pipelines used

+ +

SSL_write/SSL_write_ex called with 4001-6000 bytes == 3 pipelines used

+ +

SSL_write/SSL_write_ex called with 6001+ bytes == 4 pipelines used

+ +

split_send_fragment must always be less than or equal to max_send_fragment. By default it is set to be equal to max_send_fragment. This will mean that the same number of records will always be created as would have been created in the non-parallel case, although the data will be apportioned differently. In the parallel case data will be spread equally between the pipelines.

+ +

Read pipelining is controlled in a slightly different way than with write pipelining. While reading we are constrained by the number of records that the peer (and the network) can provide to us in one go. The more records we can get in one go the more opportunity we have to parallelise the processing. As noted above when setting max_pipelines to a value greater than one, read_ahead is automatically set. The read_ahead parameter causes OpenSSL to attempt to read as much data into the read buffer as the network can provide and will fit into the buffer. Without this set data is read into the read buffer one record at a time. The more data that can be read, the more opportunity there is for parallelising the processing at the cost of increased memory overhead per connection. Setting read_ahead can impact the behaviour of the SSL_pending() function (see SSL_pending(3)).

+ +

The SSL_CTX_set_default_read_buffer_len() and SSL_set_default_read_buffer_len() functions control the size of the read buffer that will be used. The len parameter sets the size of the buffer. The value will only be used if it is greater than the default that would have been used anyway. The normal default value depends on a number of factors but it will be at least SSL3_RT_MAX_PLAIN_LENGTH + SSL3_RT_MAX_ENCRYPTED_OVERHEAD (16704) bytes.

+ +

SSL_CTX_set_tlsext_max_fragment_length() sets the default maximum fragment length negotiation mode via value mode to ctx. This setting affects only SSL instances created after this function is called. It affects the client-side as only its side may initiate this extension use.

+ +

SSL_set_tlsext_max_fragment_length() sets the maximum fragment length negotiation mode via value mode to ssl. This setting will be used during a handshake when extensions are exchanged between client and server. So it only affects SSL sessions created after this function is called. It affects the client-side as only its side may initiate this extension use.

+ +

SSL_SESSION_get_max_fragment_length() gets the maximum fragment length negotiated in session.

+ +

RETURN VALUES

+ +

All non-void functions return 1 on success and 0 on failure.

+ +

NOTES

+ +

The Maximum Fragment Length extension support is optional on the server side. If the server does not support this extension then SSL_SESSION_get_max_fragment_length() will return: TLSEXT_max_fragment_length_DISABLED.

+ +

The following modes are available:

+ +
+ +
TLSEXT_max_fragment_length_DISABLED
+
+ +

Disables Maximum Fragment Length Negotiation (default).

+ +
+
TLSEXT_max_fragment_length_512
+
+ +

Sets Maximum Fragment Length to 512 bytes.

+ +
+
TLSEXT_max_fragment_length_1024
+
+ +

Sets Maximum Fragment Length to 1024.

+ +
+
TLSEXT_max_fragment_length_2048
+
+ +

Sets Maximum Fragment Length to 2048.

+ +
+
TLSEXT_max_fragment_length_4096
+
+ +

Sets Maximum Fragment Length to 4096.

+ +
+
+ +

With the exception of SSL_CTX_set_default_read_buffer_len() SSL_set_default_read_buffer_len(), SSL_CTX_set_tlsext_max_fragment_length(), SSL_set_tlsext_max_fragment_length() and SSL_SESSION_get_max_fragment_length() all these functions are implemented using macros.

+ +

SEE ALSO

+ +

SSL_CTX_set_read_ahead(3), SSL_pending(3)

+ +

HISTORY

+ +

The SSL_CTX_set_max_pipelines(), SSL_set_max_pipelines(), SSL_CTX_set_split_send_fragment(), SSL_set_split_send_fragment(), SSL_CTX_set_default_read_buffer_len() and SSL_set_default_read_buffer_len() functions were added in OpenSSL 1.1.0.

+ +

The SSL_CTX_set_tlsext_max_fragment_length(), SSL_set_tlsext_max_fragment_length() and SSL_SESSION_get_max_fragment_length() functions were added in OpenSSL 1.1.1.

+ +

COPYRIGHT

+ +

Copyright 2016-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_ssl_version.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_ssl_version.html new file mode 100644 index 00000000..d44ecd5e --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_ssl_version.html @@ -0,0 +1,85 @@ + + + + +SSL_CTX_set_ssl_version + + + + + + + + + + +

NAME

+ +

SSL_CTX_set_ssl_version, SSL_set_ssl_method, SSL_get_ssl_method - choose a new TLS/SSL method

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+int SSL_CTX_set_ssl_version(SSL_CTX *ctx, const SSL_METHOD *method);
+int SSL_set_ssl_method(SSL *s, const SSL_METHOD *method);
+const SSL_METHOD *SSL_get_ssl_method(const SSL *ssl);
+ +

DESCRIPTION

+ +

SSL_CTX_set_ssl_version() sets a new default TLS/SSL method for SSL objects newly created from this ctx. SSL objects already created with SSL_new(3) are not affected, except when SSL_clear(3) is being called.

+ +

SSL_set_ssl_method() sets a new TLS/SSL method for a particular ssl object. It may be reset, when SSL_clear() is called.

+ +

SSL_get_ssl_method() returns a function pointer to the TLS/SSL method set in ssl.

+ +

NOTES

+ +

The available method choices are described in SSL_CTX_new(3).

+ +

When SSL_clear(3) is called and no session is connected to an SSL object, the method of the SSL object is reset to the method currently set in the corresponding SSL_CTX object.

+ +

RETURN VALUES

+ +

The following return values can occur for SSL_CTX_set_ssl_version() and SSL_set_ssl_method():

+ +
+ +
0
+
+ +

The new choice failed, check the error stack to find out the reason.

+ +
+
1
+
+ +

The operation succeeded.

+ +
+
+ +

SEE ALSO

+ +

SSL_CTX_new(3), SSL_new(3), SSL_clear(3), ssl(7), SSL_set_connect_state(3)

+ +

COPYRIGHT

+ +

Copyright 2000-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_stateless_cookie_generate_cb.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_stateless_cookie_generate_cb.html new file mode 100644 index 00000000..e22d5c52 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_stateless_cookie_generate_cb.html @@ -0,0 +1,89 @@ + + + + +SSL_CTX_set_stateless_cookie_generate_cb + + + + + + + + + + +

NAME

+ +

SSL_CTX_set_stateless_cookie_generate_cb, SSL_CTX_set_stateless_cookie_verify_cb, SSL_CTX_set_cookie_generate_cb, SSL_CTX_set_cookie_verify_cb - Callback functions for stateless TLS1.3 cookies

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+void SSL_CTX_set_stateless_cookie_generate_cb(
+    SSL_CTX *ctx,
+    int (*gen_stateless_cookie_cb) (SSL *ssl,
+                                    unsigned char *cookie,
+                                    size_t *cookie_len));
+void SSL_CTX_set_stateless_cookie_verify_cb(
+    SSL_CTX *ctx,
+    int (*verify_stateless_cookie_cb) (SSL *ssl,
+                                       const unsigned char *cookie,
+                                       size_t cookie_len));
+
+void SSL_CTX_set_cookie_generate_cb(SSL_CTX *ctx,
+                                    int (*app_gen_cookie_cb) (SSL *ssl,
+                                                              unsigned char
+                                                              *cookie,
+                                                              unsigned int
+                                                              *cookie_len));
+void SSL_CTX_set_cookie_verify_cb(SSL_CTX *ctx,
+                                  int (*app_verify_cookie_cb) (SSL *ssl,
+                                                               const unsigned
+                                                               char *cookie,
+                                                               unsigned int
+                                                               cookie_len));
+ +

DESCRIPTION

+ +

SSL_CTX_set_stateless_cookie_generate_cb() sets the callback used by SSL_stateless(3) to generate the application-controlled portion of the cookie provided to clients in the HelloRetryRequest transmitted as a response to a ClientHello with a missing or invalid cookie. gen_stateless_cookie_cb() must write at most SSL_COOKIE_LENGTH bytes into cookie, and must write the number of bytes written to cookie_len. If a cookie cannot be generated, a zero return value can be used to abort the handshake.

+ +

SSL_CTX_set_stateless_cookie_verify_cb() sets the callback used by SSL_stateless(3) to determine whether the application-controlled portion of a ClientHello cookie is valid. The cookie data is pointed to by cookie and is of length cookie_len. A nonzero return value from verify_stateless_cookie_cb() communicates that the cookie is valid. The integrity of the entire cookie, including the application-controlled portion, is automatically verified by HMAC before verify_stateless_cookie_cb() is called.

+ +

SSL_CTX_set_cookie_generate_cb() sets the callback used by DTLSv1_listen(3) to generate the cookie provided to clients in the HelloVerifyRequest transmitted as a response to a ClientHello with a missing or invalid cookie. app_gen_cookie_cb() must write at most DTLS1_COOKIE_LENGTH bytes into cookie, and must write the number of bytes written to cookie_len. If a cookie cannot be generated, a zero return value can be used to abort the handshake.

+ +

SSL_CTX_set_cookie_verify_cb() sets the callback used by DTLSv1_listen(3) to determine whether the cookie in a ClientHello is valid. The cookie data is pointed to by cookie and is of length cookie_len. A nonzero return value from app_verify_cookie_cb() communicates that the cookie is valid. The integrity of the cookie is not verified by OpenSSL. This is an application responsibility.

+ +

RETURN VALUES

+ +

Neither function returns a value.

+ +

SEE ALSO

+ +

SSL_stateless(3), DTLSv1_listen(3)

+ +

HISTORY

+ +

SSL_CTX_set_stateless_cookie_generate_cb() and SSL_CTX_set_stateless_cookie_verify_cb() were added in OpenSSL 1.1.1.

+ +

COPYRIGHT

+ +

Copyright 2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_timeout.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_timeout.html new file mode 100644 index 00000000..632f3b2a --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_timeout.html @@ -0,0 +1,74 @@ + + + + +SSL_CTX_set_timeout + + + + + + + + + + +

NAME

+ +

SSL_CTX_set_timeout, SSL_CTX_get_timeout - manipulate timeout values for session caching

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+long SSL_CTX_set_timeout(SSL_CTX *ctx, long t);
+long SSL_CTX_get_timeout(SSL_CTX *ctx);
+ +

DESCRIPTION

+ +

SSL_CTX_set_timeout() sets the timeout for newly created sessions for ctx to t. The timeout value t must be given in seconds.

+ +

SSL_CTX_get_timeout() returns the currently set timeout value for ctx.

+ +

NOTES

+ +

Whenever a new session is created, it is assigned a maximum lifetime. This lifetime is specified by storing the creation time of the session and the timeout value valid at this time. If the actual time is later than creation time plus timeout, the session is not reused.

+ +

Due to this realization, all sessions behave according to the timeout value valid at the time of the session negotiation. Changes of the timeout value do not affect already established sessions.

+ +

The expiration time of a single session can be modified using the SSL_SESSION_get_time(3) family of functions.

+ +

Expired sessions are removed from the internal session cache, whenever SSL_CTX_flush_sessions(3) is called, either directly by the application or automatically (see SSL_CTX_set_session_cache_mode(3))

+ +

The default value for session timeout is decided on a per protocol basis, see SSL_get_default_timeout(3). All currently supported protocols have the same default timeout value of 300 seconds.

+ +

RETURN VALUES

+ +

SSL_CTX_set_timeout() returns the previously set timeout value.

+ +

SSL_CTX_get_timeout() returns the currently set timeout value.

+ +

SEE ALSO

+ +

ssl(7), SSL_CTX_set_session_cache_mode(3), SSL_SESSION_get_time(3), SSL_CTX_flush_sessions(3), SSL_get_default_timeout(3)

+ +

COPYRIGHT

+ +

Copyright 2001-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_tlsext_servername_callback.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_tlsext_servername_callback.html new file mode 100644 index 00000000..55c9673a --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_tlsext_servername_callback.html @@ -0,0 +1,167 @@ + + + + +SSL_CTX_set_tlsext_servername_callback + + + + + + + + + + +

NAME

+ +

SSL_CTX_set_tlsext_servername_callback, SSL_CTX_set_tlsext_servername_arg, SSL_get_servername_type, SSL_get_servername, SSL_set_tlsext_host_name - handle server name indication (SNI)

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+long SSL_CTX_set_tlsext_servername_callback(SSL_CTX *ctx,
+                                  int (*cb)(SSL *s, int *al, void *arg));
+long SSL_CTX_set_tlsext_servername_arg(SSL_CTX *ctx, void *arg);
+
+const char *SSL_get_servername(const SSL *s, const int type);
+int SSL_get_servername_type(const SSL *s);
+
+int SSL_set_tlsext_host_name(const SSL *s, const char *name);
+ +

DESCRIPTION

+ +

The functionality provided by the servername callback is mostly superseded by the ClientHello callback, which can be set using SSL_CTX_set_client_hello_cb(). However, even where the ClientHello callback is used, the servername callback is still necessary in order to acknowledge the servername requested by the client.

+ +

SSL_CTX_set_tlsext_servername_callback() sets the application callback cb used by a server to perform any actions or configuration required based on the servername extension received in the incoming connection. When cb is NULL, SNI is not used.

+ +

The servername callback should return one of the following values:

+ +
+ +
SSL_TLSEXT_ERR_OK
+
+ +

This is used to indicate that the servername requested by the client has been accepted. Typically a server will call SSL_set_SSL_CTX() in the callback to set up a different configuration for the selected servername in this case.

+ +
+
SSL_TLSEXT_ERR_ALERT_FATAL
+
+ +

In this case the servername requested by the client is not accepted and the handshake will be aborted. The value of the alert to be used should be stored in the location pointed to by the al parameter to the callback. By default this value is initialised to SSL_AD_UNRECOGNIZED_NAME.

+ +
+
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 of the alert should be stored in the location pointed to by the 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 treated the same way as SSL_TLSEXT_ERR_NOACK.

+ +
+
SSL_TLSEXT_ERR_NOACK
+
+ +

This return value indicates that the servername is not accepted by the server. No alerts are sent and the server will not acknowledge the requested servername.

+ +
+
+ +

SSL_CTX_set_tlsext_servername_arg() sets a context-specific argument to be passed into the callback (via the arg parameter) for this SSL_CTX.

+ +

The behaviour of SSL_get_servername() depends on a number of different factors. In particular note that in TLSv1.3 the servername is negotiated in every handshake. In TLSv1.2 the servername is only negotiated on initial handshakes and not on resumption handshakes.

+ +
+ +
On the client, before the handshake
+
+ +

If a servername has been set via a call to SSL_set_tlsext_host_name() then it will return that servername.

+ +

If one has not been set, but a TLSv1.2 resumption is being attempted and the session from the original handshake had a servername accepted by the server then it will return that servername.

+ +

Otherwise it returns NULL.

+ +
+
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 server then it will return that servername.

+ +

Otherwise it returns the servername set via SSL_set_tlsext_host_name() or NULL if it was not called.

+ +
+
On the client, during or after the handshake and a TLSv1.2 (or below) resumption did not occur
+
+ +

It will return the servername set via SSL_set_tlsext_host_name() or NULL if it was not called.

+ +
+
On the server, before the handshake
+
+ +

The function will always return NULL before the handshake

+ +
+
On the server, after the servername extension has been processed and a TLSv1.2 (or below) resumption occurred
+
+ +

If a servername was accepted by the server in the original handshake then it will return that servername, or NULL otherwise.

+ +
+
On the server, after the servername extension has been processed and a TLSv1.2 (or below) resumption did not occur
+
+ +

The function will return the servername requested by the client in this handshake or NULL if none was requested.

+ +
+
+ +

Note that the ClientHello callback occurs before a servername extension from the client is processed. The servername, certificate and ALPN callbacks occur after a servername extension from the client is processed.

+ +

SSL_get_servername_type() returns the servername type or -1 if no servername is present. Currently the only supported type (defined in RFC3546) is TLSEXT_NAMETYPE_host_name.

+ +

SSL_set_tlsext_host_name() sets the server name indication ClientHello extension to contain the value name. The type of server name indication extension is set to TLSEXT_NAMETYPE_host_name (defined in RFC3546).

+ +

NOTES

+ +

Several callbacks are executed during ClientHello processing, including the ClientHello, ALPN, and servername callbacks. The ClientHello callback is executed first, then the servername callback, followed by the ALPN callback.

+ +

The SSL_set_tlsext_host_name() function should only be called on SSL objects that will act as clients; otherwise the configured name will be ignored.

+ +

RETURN VALUES

+ +

SSL_CTX_set_tlsext_servername_callback() and SSL_CTX_set_tlsext_servername_arg() both always return 1 indicating success. SSL_set_tlsext_host_name() returns 1 on success, 0 in case of error.

+ +

SEE ALSO

+ +

ssl(7), SSL_CTX_set_alpn_select_cb(3), SSL_get0_alpn_selected(3), SSL_CTX_set_client_hello_cb(3)

+ +

HISTORY

+ +

SSL_get_servername() historically provided some unexpected results in certain 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 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 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.

+ +

COPYRIGHT

+ +

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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_tlsext_status_cb.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_tlsext_status_cb.html new file mode 100644 index 00000000..e8b8127a --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_tlsext_status_cb.html @@ -0,0 +1,87 @@ + + + + +SSL_CTX_set_tlsext_status_cb + + + + + + + + + + +

NAME

+ +

SSL_CTX_set_tlsext_status_cb, SSL_CTX_get_tlsext_status_cb, SSL_CTX_set_tlsext_status_arg, SSL_CTX_get_tlsext_status_arg, SSL_CTX_set_tlsext_status_type, SSL_CTX_get_tlsext_status_type, SSL_set_tlsext_status_type, SSL_get_tlsext_status_type, SSL_get_tlsext_status_ocsp_resp, SSL_set_tlsext_status_ocsp_resp - OCSP Certificate Status Request functions

+ +

SYNOPSIS

+ +
#include <openssl/tls1.h>
+
+long SSL_CTX_set_tlsext_status_cb(SSL_CTX *ctx, int (*callback)(SSL *, void *));
+long SSL_CTX_get_tlsext_status_cb(SSL_CTX *ctx, int (**callback)(SSL *, void *));
+
+long SSL_CTX_set_tlsext_status_arg(SSL_CTX *ctx, void *arg);
+long SSL_CTX_get_tlsext_status_arg(SSL_CTX *ctx, void **arg);
+
+long SSL_CTX_set_tlsext_status_type(SSL_CTX *ctx, int type);
+long SSL_CTX_get_tlsext_status_type(SSL_CTX *ctx);
+
+long SSL_set_tlsext_status_type(SSL *s, int type);
+long SSL_get_tlsext_status_type(SSL *s);
+
+long SSL_get_tlsext_status_ocsp_resp(ssl, unsigned char **resp);
+long SSL_set_tlsext_status_ocsp_resp(ssl, unsigned char *resp, int len);
+ +

DESCRIPTION

+ +

A client application may request that a server send back an OCSP status response (also known as OCSP stapling). To do so the client should call the SSL_CTX_set_tlsext_status_type() function prior to the creation of any SSL objects. Alternatively an application can call the SSL_set_tlsext_status_type() function on an individual SSL object prior to the start of the handshake. Currently the only supported type is TLSEXT_STATUSTYPE_ocsp. This value should be passed in the type argument. Calling SSL_CTX_get_tlsext_status_type() will return the type TLSEXT_STATUSTYPE_ocsp previously set via SSL_CTX_set_tlsext_status_type() or -1 if not set.

+ +

The client should additionally provide a callback function to decide what to do with the returned OCSP response by calling SSL_CTX_set_tlsext_status_cb(). The callback function should determine whether the returned OCSP response is acceptable or not. The callback will be passed as an argument the value previously set via a call to SSL_CTX_set_tlsext_status_arg(). Note that the callback will not be called in the event of a handshake where session resumption occurs (because there are no Certificates exchanged in such a handshake). The callback previously set via SSL_CTX_set_tlsext_status_cb() can be retrieved by calling SSL_CTX_get_tlsext_status_cb(), and the argument by calling SSL_CTX_get_tlsext_status_arg().

+ +

On the client side SSL_get_tlsext_status_type() can be used to determine whether the client has previously called SSL_set_tlsext_status_type(). It will return TLSEXT_STATUSTYPE_ocsp if it has been called or -1 otherwise. On the server side SSL_get_tlsext_status_type() can be used to determine whether the client requested OCSP stapling. If the client requested it then this function will return TLSEXT_STATUSTYPE_ocsp, or -1 otherwise.

+ +

The response returned by the server can be obtained via a call to SSL_get_tlsext_status_ocsp_resp(). The value *resp will be updated to point to the OCSP response data and the return value will be the length of that data. Typically a callback would obtain an OCSP_RESPONSE object from this data via a call to the d2i_OCSP_RESPONSE() function. If the server has not provided any response data then *resp will be NULL and the return value from SSL_get_tlsext_status_ocsp_resp() will be -1.

+ +

A server application must also call the SSL_CTX_set_tlsext_status_cb() function if it wants to be able to provide clients with OCSP Certificate Status responses. Typically the server callback would obtain the server certificate that is being sent back to the client via a call to SSL_get_certificate(); obtain the OCSP response to be sent back; and then set that response data by calling SSL_set_tlsext_status_ocsp_resp(). A pointer to the response data should be provided in the resp argument, and the length of that data should be in the len argument.

+ +

RETURN VALUES

+ +

The callback when used on the client side should return a negative value on error; 0 if the response is not acceptable (in which case the handshake will fail) or a positive value if it is acceptable.

+ +

The callback when used on the server side should return with either SSL_TLSEXT_ERR_OK (meaning that the OCSP response that has been set should be returned), SSL_TLSEXT_ERR_NOACK (meaning that an OCSP response should not be returned) or SSL_TLSEXT_ERR_ALERT_FATAL (meaning that a fatal error has occurred).

+ +

SSL_CTX_set_tlsext_status_cb(), SSL_CTX_set_tlsext_status_arg(), SSL_CTX_set_tlsext_status_type(), SSL_set_tlsext_status_type() and SSL_set_tlsext_status_ocsp_resp() return 0 on error or 1 on success.

+ +

SSL_CTX_get_tlsext_status_type() returns the value previously set by SSL_CTX_set_tlsext_status_type(), or -1 if not set.

+ +

SSL_get_tlsext_status_ocsp_resp() returns the length of the OCSP response data or -1 if there is no OCSP response data.

+ +

SSL_get_tlsext_status_type() returns TLSEXT_STATUSTYPE_ocsp on the client side if SSL_set_tlsext_status_type() was previously called, or on the server side if the client requested OCSP stapling. Otherwise -1 is returned.

+ +

HISTORY

+ +

The SSL_get_tlsext_status_type(), SSL_CTX_get_tlsext_status_type() and SSL_CTX_set_tlsext_status_type() functions were added in OpenSSL 1.1.0.

+ +

COPYRIGHT

+ +

Copyright 2015-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_tlsext_ticket_key_cb.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_tlsext_ticket_key_cb.html new file mode 100644 index 00000000..6116bf59 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_tlsext_ticket_key_cb.html @@ -0,0 +1,175 @@ + + + + +SSL_CTX_set_tlsext_ticket_key_cb + + + + + + + + + + +

NAME

+ +

SSL_CTX_set_tlsext_ticket_key_cb - set a callback for session ticket processing

+ +

SYNOPSIS

+ +
#include <openssl/tls1.h>
+
+long SSL_CTX_set_tlsext_ticket_key_cb(SSL_CTX sslctx,
+    int (*cb)(SSL *s, unsigned char key_name[16],
+              unsigned char iv[EVP_MAX_IV_LENGTH],
+              EVP_CIPHER_CTX *ctx, HMAC_CTX *hctx, int enc));
+ +

DESCRIPTION

+ +

SSL_CTX_set_tlsext_ticket_key_cb() sets a callback function cb for handling session tickets for the ssl context sslctx. Session tickets, defined in RFC5077 provide an enhanced session resumption capability where the server implementation is not required to maintain per session state. It only applies to TLS and there is no SSLv3 implementation.

+ +

The callback function cb will be called for every client instigated TLS session when session ticket extension is presented in the TLS hello message. It is the responsibility of this function to create or retrieve the cryptographic parameters and to maintain their state.

+ +

The OpenSSL library uses your callback function to help implement a common TLS ticket construction state according to RFC5077 Section 4 such that per session state is unnecessary and a small set of cryptographic variables needs to be maintained by the callback function implementation.

+ +

In order to reuse a session, a TLS client must send the a session ticket extension to the server. The client can only send exactly one session ticket. The server, through the callback function, either agrees to reuse the session ticket information or it starts a full TLS handshake to create a new session ticket.

+ +

Before the callback function is started ctx and hctx have been initialised with EVP_CIPHER_CTX_reset(3) and HMAC_CTX_reset(3) respectively.

+ +

For new sessions tickets, when the client doesn't present a session ticket, or an attempted retrieval of the ticket failed, or a renew option was indicated, the callback function will be called with enc equal to 1. The OpenSSL library expects that the function will set an arbitrary name, initialize iv, and set the cipher context ctx and the hash context hctx.

+ +

The name is 16 characters long and is used as a key identifier.

+ +

The iv length is the length of the IV of the corresponding cipher. The maximum IV length is EVP_MAX_IV_LENGTH bytes defined in evp.h.

+ +

The initialization vector iv should be a random value. The cipher context ctx should use the initialisation vector iv. The cipher context can be set using EVP_EncryptInit_ex(3). The hmac context can be set using HMAC_Init_ex(3).

+ +

When the client presents a session ticket, the callback function with be called with enc set to 0 indicating that the cb function should retrieve a set of parameters. In this case name and iv have already been parsed out of the session ticket. The OpenSSL library expects that the name will be used to retrieve a cryptographic parameters and that the cryptographic context ctx will be set with the retrieved parameters and the initialization vector iv. using a function like EVP_DecryptInit_ex(3). The hctx needs to be set using HMAC_Init_ex(3).

+ +

If the name is still valid but a renewal of the ticket is required the callback function should return 2. The library will call the callback again with an argument of enc equal to 1 to set the new ticket.

+ +

The return value of the cb function is used by OpenSSL to determine what further processing will occur. The following return values have meaning:

+ +
+ +
2
+
+ +

This indicates that the ctx and hctx have been set and the session can continue on those parameters. Additionally it indicates that the session ticket is in a renewal period and should be replaced. The OpenSSL library will call cb again with an enc argument of 1 to set the new ticket (see RFC5077 3.3 paragraph 2).

+ +
+
1
+
+ +

This indicates that the ctx and hctx have been set and the session can continue on those parameters.

+ +
+
0
+
+ +

This indicates that it was not possible to set/retrieve a session ticket and the SSL/TLS session will continue by negotiating a set of cryptographic parameters or using the alternate SSL/TLS resumption mechanism, session ids.

+ +

If called with enc equal to 0 the library will call the cb again to get a new set of parameters.

+ +
+
less than 0
+
+ +

This indicates an error.

+ +
+
+ +

NOTES

+ +

Session resumption shortcuts the TLS so that the client certificate negotiation don't occur. It makes up for this by storing client certificate an all other negotiated state information encrypted within the ticket. In a resumed session the applications will have all this state information available exactly as if a full negotiation had occurred.

+ +

If an attacker can obtain the key used to encrypt a session ticket, they can obtain the master secret for any ticket using that key and decrypt any traffic using that session: even if the cipher suite supports forward secrecy. As a result applications may wish to use multiple keys and avoid using long term keys stored in files.

+ +

Applications can use longer keys to maintain a consistent level of security. For example if a cipher suite uses 256 bit ciphers but only a 128 bit ticket key the overall security is only 128 bits because breaking the ticket key will enable an attacker to obtain the session keys.

+ +

RETURN VALUES

+ +

returns 0 to indicate the callback function was set.

+ +

EXAMPLES

+ +

Reference Implementation:

+ +
SSL_CTX_set_tlsext_ticket_key_cb(SSL, ssl_tlsext_ticket_key_cb);
+...
+
+static int ssl_tlsext_ticket_key_cb(SSL *s, unsigned char key_name[16],
+                                    unsigned char *iv, EVP_CIPHER_CTX *ctx,
+                                    HMAC_CTX *hctx, int enc)
+{
+    if (enc) { /* create new session */
+        if (RAND_bytes(iv, EVP_MAX_IV_LENGTH) <= 0)
+            return -1; /* insufficient random */
+
+        key = currentkey(); /* something that you need to implement */
+        if (key == NULL) {
+            /* current key doesn't exist or isn't valid */
+            key = createkey(); /*
+                                * Something that you need to implement.
+                                * createkey needs to initialise a name,
+                                * an aes_key, a hmac_key and optionally
+                                * an expire time.
+                                */
+            if (key == NULL) /* key couldn't be created */
+                return 0;
+        }
+        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);
+
+        return 1;
+
+    } else { /* retrieve session */
+        key = findkey(name);
+
+        if (key == NULL || key->expire < now())
+            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);
+
+        if (key->expire < now() - RENEW_TIME) {
+            /*
+             * return 2 - This session will get a new ticket even though the
+             * current one is still valid.
+             */
+            return 2;
+        }
+        return 1;
+    }
+}
+ +

SEE ALSO

+ +

ssl(7), SSL_set_session(3), SSL_session_reused(3), SSL_CTX_add_session(3), SSL_CTX_sess_number(3), SSL_CTX_sess_set_get_cb(3), SSL_CTX_set_session_id_context(3),

+ +

COPYRIGHT

+ +

Copyright 2014-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_tlsext_use_srtp.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_tlsext_use_srtp.html new file mode 100644 index 00000000..e4db222c --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_tlsext_use_srtp.html @@ -0,0 +1,106 @@ + + + + +SSL_CTX_set_tlsext_use_srtp + + + + + + + + + + +

NAME

+ +

SSL_CTX_set_tlsext_use_srtp, SSL_set_tlsext_use_srtp, SSL_get_srtp_profiles, SSL_get_selected_srtp_profile - Configure and query SRTP support

+ +

SYNOPSIS

+ +
#include <openssl/srtp.h>
+
+int SSL_CTX_set_tlsext_use_srtp(SSL_CTX *ctx, const char *profiles);
+int SSL_set_tlsext_use_srtp(SSL *ssl, const char *profiles);
+
+STACK_OF(SRTP_PROTECTION_PROFILE) *SSL_get_srtp_profiles(SSL *ssl);
+SRTP_PROTECTION_PROFILE *SSL_get_selected_srtp_profile(SSL *s);
+ +

DESCRIPTION

+ +

SRTP is the Secure Real-Time Transport Protocol. OpenSSL implements support for the "use_srtp" DTLS extension defined in RFC5764. This provides a mechanism for establishing SRTP keying material, algorithms and parameters using DTLS. This capability may be used as part of an implementation that conforms to RFC5763. OpenSSL does not implement SRTP itself or RFC5763. Note that OpenSSL does not support the use of SRTP Master Key Identifiers (MKIs). Also note that this extension is only supported in DTLS. Any SRTP configuration will be ignored if a TLS connection is attempted.

+ +

An OpenSSL client wishing to send the "use_srtp" extension should call SSL_CTX_set_tlsext_use_srtp() to set its use for all SSL objects subsequently created from an SSL_CTX. Alternatively a client may call SSL_set_tlsext_use_srtp() to set its use for an individual SSL object. The profiles parameters should point to a NUL-terminated, colon delimited list of SRTP protection profile names.

+ +

The currently supported protection profile names are:

+ +
+ +
SRTP_AES128_CM_SHA1_80
+
+ +

This corresponds to SRTP_AES128_CM_HMAC_SHA1_80 defined in RFC5764.

+ +
+
SRTP_AES128_CM_SHA1_32
+
+ +

This corresponds to SRTP_AES128_CM_HMAC_SHA1_32 defined in RFC5764.

+ +
+
SRTP_AEAD_AES_128_GCM
+
+ +

This corresponds to the profile of the same name defined in RFC7714.

+ +
+
SRTP_AEAD_AES_256_GCM
+
+ +

This corresponds to the profile of the same name defined in RFC7714.

+ +
+
+ +

Supplying an unrecognised protection profile name will result in an error.

+ +

An OpenSSL server wishing to support the "use_srtp" extension should also call SSL_CTX_set_tlsext_use_srtp() or SSL_set_tlsext_use_srtp() to indicate the protection profiles that it is willing to negotiate.

+ +

The currently configured list of protection profiles for either a client or a server can be obtained by calling SSL_get_srtp_profiles(). This returns a stack of SRTP_PROTECTION_PROFILE objects. The memory pointed to in the return value of this function should not be freed by the caller.

+ +

After a handshake has been completed the negotiated SRTP protection profile (if any) can be obtained (on the client or the server) by calling SSL_get_selected_srtp_profile(). This function will return NULL if no SRTP protection profile was negotiated. The memory returned from this function should not be freed by the caller.

+ +

If an SRTP protection profile has been successfully negotiated then the SRTP keying material (on both the client and server) should be obtained via a call to SSL_export_keying_material(3). This call should provide a label value of "EXTRACTOR-dtls_srtp" and a NULL context value (use_context is 0). The total length of keying material obtained should be equal to two times the sum of the master key length and the salt length as defined for the protection profile in use. This provides the client write master key, the server write master key, the client write master salt and the server write master salt in that order.

+ +

RETURN VALUES

+ +

SSL_CTX_set_tlsext_use_srtp() and SSL_set_tlsext_use_srtp() return 0 on success or 1 on error.

+ +

SSL_get_srtp_profiles() returns a stack of SRTP_PROTECTION_PROFILE objects on success or NULL on error or if no protection profiles have been configured.

+ +

SSL_get_selected_srtp_profile() returns a pointer to an SRTP_PROTECTION_PROFILE object if one has been negotiated or NULL otherwise.

+ +

SEE ALSO

+ +

SSL_export_keying_material(3)

+ +

COPYRIGHT

+ +

Copyright 2017-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_tmp_dh_callback.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_tmp_dh_callback.html new file mode 100644 index 00000000..1cdbef51 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_tmp_dh_callback.html @@ -0,0 +1,119 @@ + + + + +SSL_CTX_set_tmp_dh_callback + + + + + + + + + + +

NAME

+ +

SSL_CTX_set_tmp_dh_callback, SSL_CTX_set_tmp_dh, SSL_set_tmp_dh_callback, SSL_set_tmp_dh - handle DH keys for ephemeral key exchange

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+void SSL_CTX_set_tmp_dh_callback(SSL_CTX *ctx,
+                                 DH *(*tmp_dh_callback)(SSL *ssl, int is_export,
+                                                        int keylength));
+long SSL_CTX_set_tmp_dh(SSL_CTX *ctx, DH *dh);
+
+void SSL_set_tmp_dh_callback(SSL *ctx,
+                             DH *(*tmp_dh_callback)(SSL *ssl, int is_export,
+                                                    int keylength));
+long SSL_set_tmp_dh(SSL *ssl, DH *dh)
+ +

DESCRIPTION

+ +

SSL_CTX_set_tmp_dh_callback() sets the callback function for ctx to be used when a DH parameters are required to tmp_dh_callback. The callback is inherited by all ssl objects created from ctx.

+ +

SSL_CTX_set_tmp_dh() sets DH parameters to be used to be dh. The key is inherited by all ssl objects created from ctx.

+ +

SSL_set_tmp_dh_callback() sets the callback only for ssl.

+ +

SSL_set_tmp_dh() sets the parameters only for ssl.

+ +

These functions apply to SSL/TLS servers only.

+ +

NOTES

+ +

When using a cipher with RSA authentication, an ephemeral DH key exchange can take place. Ciphers with DSA keys always use ephemeral DH keys as well. In these cases, the session data are negotiated using the ephemeral/temporary DH key and the key supplied and certified by the certificate chain is only used for signing. Anonymous ciphers (without a permanent server key) also use ephemeral DH keys.

+ +

Using ephemeral DH key exchange yields forward secrecy, as the connection can only be decrypted, when the DH key is known. By generating a temporary DH key inside the server application that is lost when the application is left, it becomes impossible for an attacker to decrypt past sessions, even if he gets hold of the normal (certified) key, as this key was only used for signing.

+ +

In order to perform a DH key exchange the server must use a DH group (DH parameters) and generate a DH key. The server will always generate a new DH key during the negotiation.

+ +

As generating DH parameters is extremely time consuming, an application should not generate the parameters on the fly but supply the parameters. DH parameters can be reused, as the actual key is newly generated during the negotiation. The risk in reusing DH parameters is that an attacker may specialize on a very often used DH group. Applications should therefore generate their own DH parameters during the installation process using the openssl dhparam(1) application. This application guarantees that "strong" primes are used.

+ +

Files dh2048.pem, and dh4096.pem in the 'apps' directory of the current version of the OpenSSL distribution contain the 'SKIP' DH parameters, which use safe primes and were generated verifiably pseudo-randomly. These files can be converted into C code using the -C option of the dhparam(1) application. Generation of custom DH parameters during installation should still be preferred to stop an attacker from specializing on a commonly used group. File dh1024.pem contains old parameters that must not be used by applications.

+ +

An application may either directly specify the DH parameters or can supply the DH parameters via a callback function.

+ +

Previous versions of the callback used is_export and keylength parameters to control parameter generation for export and non-export cipher suites. Modern servers that do not support export cipher suites are advised to either use SSL_CTX_set_tmp_dh() or alternatively, use the callback but ignore keylength and is_export and simply supply at least 2048-bit parameters in the callback.

+ +

RETURN VALUES

+ +

SSL_CTX_set_tmp_dh_callback() and SSL_set_tmp_dh_callback() do not return diagnostic output.

+ +

SSL_CTX_set_tmp_dh() and SSL_set_tmp_dh() do return 1 on success and 0 on failure. Check the error queue to find out the reason of failure.

+ +

EXAMPLES

+ +

Setup DH parameters with a key length of 2048 bits. (Error handling partly left out.)

+ +

Command-line parameter generation:

+ +
$ openssl dhparam -out dh_param_2048.pem 2048
+ +

Code for setting up parameters during server initialization:

+ +
SSL_CTX ctx = SSL_CTX_new();
+
+DH *dh_2048 = NULL;
+FILE *paramfile = fopen("dh_param_2048.pem", "r");
+
+if (paramfile) {
+    dh_2048 = PEM_read_DHparams(paramfile, NULL, NULL, NULL);
+    fclose(paramfile);
+} else {
+    /* Error. */
+}
+if (dh_2048 == NULL)
+    /* Error. */
+if (SSL_CTX_set_tmp_dh(ctx, dh_2048) != 1)
+    /* Error. */
+...
+ +

SEE ALSO

+ +

ssl(7), SSL_CTX_set_cipher_list(3), SSL_CTX_set_options(3), ciphers(1), dhparam(1)

+ +

COPYRIGHT

+ +

Copyright 2001-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_verify.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_verify.html new file mode 100644 index 00000000..1f41ec04 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_set_verify.html @@ -0,0 +1,264 @@ + + + + +SSL_CTX_set_verify + + + + + + + + + + +

NAME

+ +

SSL_get_ex_data_X509_STORE_CTX_idx, SSL_CTX_set_verify, SSL_set_verify, SSL_CTX_set_verify_depth, SSL_set_verify_depth, SSL_verify_cb, SSL_verify_client_post_handshake, SSL_set_post_handshake_auth, SSL_CTX_set_post_handshake_auth - set peer certificate verification parameters

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+typedef int (*SSL_verify_cb)(int preverify_ok, X509_STORE_CTX *x509_ctx);
+
+void SSL_CTX_set_verify(SSL_CTX *ctx, int mode, SSL_verify_cb verify_callback);
+void SSL_set_verify(SSL *ssl, int mode, SSL_verify_cb verify_callback);
+SSL_get_ex_data_X509_STORE_CTX_idx(void);
+
+void SSL_CTX_set_verify_depth(SSL_CTX *ctx, int depth);
+void SSL_set_verify_depth(SSL *ssl, int depth);
+
+int SSL_verify_client_post_handshake(SSL *ssl);
+void SSL_CTX_set_post_handshake_auth(SSL_CTX *ctx, int val);
+void SSL_set_post_handshake_auth(SSL *ssl, int val);
+ +

DESCRIPTION

+ +

SSL_CTX_set_verify() sets the verification flags for ctx to be mode and specifies the verify_callback function to be used. If no callback function shall be specified, the NULL pointer can be used for verify_callback.

+ +

SSL_set_verify() sets the verification flags for ssl to be mode and specifies the verify_callback function to be used. If no callback function shall be specified, the NULL pointer can be used for verify_callback. In this case last verify_callback set specifically for this ssl remains. If no special callback was set before, the default callback for the underlying ctx is used, that was valid at the time ssl was created with SSL_new(3). Within the callback function, SSL_get_ex_data_X509_STORE_CTX_idx can be called to get the data index of the current SSL object that is doing the verification.

+ +

SSL_CTX_set_verify_depth() sets the maximum depth for the certificate chain verification that shall be allowed for ctx.

+ +

SSL_set_verify_depth() sets the maximum depth for the certificate chain verification that shall be allowed for ssl.

+ +

SSL_CTX_set_post_handshake_auth() and SSL_set_post_handshake_auth() enable the Post-Handshake Authentication extension to be added to the ClientHello such that post-handshake authentication can be requested by the server. If val is 0 then the extension is not sent, otherwise it is. By default the extension is not sent. A certificate callback will need to be set via SSL_CTX_set_client_cert_cb() if no certificate is provided at initialization.

+ +

SSL_verify_client_post_handshake() causes a CertificateRequest message to be sent by a server on the given ssl connection. The SSL_VERIFY_PEER flag must be set; the SSL_VERIFY_POST_HANDSHAKE flag is optional.

+ +

NOTES

+ +

The verification of certificates can be controlled by a set of logically or'ed mode flags:

+ +
+ +
SSL_VERIFY_NONE
+
+ +

Server mode: the server will not send a client certificate request to the client, so the client will not send a certificate.

+ +

Client mode: if not using an anonymous cipher (by default disabled), the server will send a certificate which will be checked. The result of the certificate verification process can be checked after the TLS/SSL handshake using the SSL_get_verify_result(3) function. The handshake will be continued regardless of the verification result.

+ +
+
SSL_VERIFY_PEER
+
+ +

Server mode: the server sends a client certificate request to the client. The certificate returned (if any) is checked. If the verification process fails, the TLS/SSL handshake is immediately terminated with an alert message containing the reason for the verification failure. The behaviour can be controlled by the additional SSL_VERIFY_FAIL_IF_NO_PEER_CERT, SSL_VERIFY_CLIENT_ONCE and SSL_VERIFY_POST_HANDSHAKE flags.

+ +

Client mode: the server certificate is verified. If the verification process fails, the TLS/SSL handshake is immediately terminated with an alert message containing the reason for the verification failure. If no server certificate is sent, because an anonymous cipher is used, SSL_VERIFY_PEER is ignored.

+ +
+
SSL_VERIFY_FAIL_IF_NO_PEER_CERT
+
+ +

Server mode: if the client did not return a certificate, the TLS/SSL handshake is immediately terminated with a "handshake failure" alert. This flag must be used together with SSL_VERIFY_PEER.

+ +

Client mode: ignored (see BUGS)

+ +
+
SSL_VERIFY_CLIENT_ONCE
+
+ +

Server mode: only request a client certificate once during the connection. Do not ask for a client certificate again during renegotiation or post-authentication if a certificate was requested during the initial handshake. This flag must be used together with SSL_VERIFY_PEER.

+ +

Client mode: ignored (see BUGS)

+ +
+
SSL_VERIFY_POST_HANDSHAKE
+
+ +

Server mode: the server will not send a client certificate request during the initial handshake, but will send the request via SSL_verify_client_post_handshake(). This allows the SSL_CTX or SSL to be configured for post-handshake peer verification before the handshake occurs. This flag must be used together with SSL_VERIFY_PEER. TLSv1.3 only; no effect on pre-TLSv1.3 connections.

+ +

Client mode: ignored (see BUGS)

+ +
+
+ +

If the mode is SSL_VERIFY_NONE none of the other flags may be set.

+ +

The actual verification procedure is performed either using the built-in verification procedure or using another application provided verification function set with SSL_CTX_set_cert_verify_callback(3). The following descriptions apply in the case of the built-in procedure. An application provided procedure also has access to the verify depth information and the verify_callback() function, but the way this information is used may be different.

+ +

SSL_CTX_set_verify_depth() and SSL_set_verify_depth() set a limit on the number of certificates between the end-entity and trust-anchor certificates. Neither the end-entity nor the trust-anchor certificates count against depth. If the certificate chain needed to reach a trusted issuer is longer than depth+2, X509_V_ERR_CERT_CHAIN_TOO_LONG will be issued. The depth count is "level 0:peer certificate", "level 1: CA certificate", "level 2: higher level CA certificate", and so on. Setting the maximum depth to 2 allows the levels 0, 1, 2 and 3 (0 being the end-entity and 3 the trust-anchor). The default depth limit is 100, allowing for the peer certificate, at most 100 intermediate CA certificates and a final trust anchor certificate.

+ +

The verify_callback function is used to control the behaviour when the SSL_VERIFY_PEER flag is set. It must be supplied by the application and receives two arguments: preverify_ok indicates, whether the verification of the certificate in question was passed (preverify_ok=1) or not (preverify_ok=0). x509_ctx is a pointer to the complete context used for the certificate chain verification.

+ +

The certificate chain is checked starting with the deepest nesting level (the root CA certificate) and worked upward to the peer's certificate. At each level signatures and issuer attributes are checked. Whenever a verification error is found, the error number is stored in x509_ctx and verify_callback is called with preverify_ok=0. By applying X509_CTX_store_* functions verify_callback can locate the certificate in question and perform additional steps (see EXAMPLES). If no error is found for a certificate, verify_callback is called with preverify_ok=1 before advancing to the next level.

+ +

The return value of verify_callback controls the strategy of the further verification process. If verify_callback returns 0, the verification process is immediately stopped with "verification failed" state. If SSL_VERIFY_PEER is set, a verification failure alert is sent to the peer and the TLS/SSL handshake is terminated. If verify_callback returns 1, the verification process is continued. If verify_callback always returns 1, the TLS/SSL handshake will not be terminated with respect to verification failures and the connection will be established. The calling process can however retrieve the error code of the last verification error using SSL_get_verify_result(3) or by maintaining its own error storage managed by verify_callback.

+ +

If no verify_callback is specified, the default callback will be used. Its return value is identical to preverify_ok, so that any verification failure will lead to a termination of the TLS/SSL handshake with an alert message, if SSL_VERIFY_PEER is set.

+ +

After calling SSL_set_post_handshake_auth(), the client will need to add a certificate or certificate callback to its configuration before it can successfully authenticate. This must be called before SSL_connect().

+ +

SSL_verify_client_post_handshake() requires that verify flags have been previously set, and that a client sent the post-handshake authentication extension. When the client returns a certificate the verify callback will be invoked. A write operation must take place for the Certificate Request to be sent to the client, this can be done with SSL_do_handshake() or SSL_write_ex(). Only one certificate request may be outstanding at any time.

+ +

When post-handshake authentication occurs, a refreshed NewSessionTicket message is sent to the client.

+ +

BUGS

+ +

In client mode, it is not checked whether the SSL_VERIFY_PEER flag is set, but whether any flags other than SSL_VERIFY_NONE are set. This can lead to unexpected behaviour if SSL_VERIFY_PEER and other flags are not used as required.

+ +

RETURN VALUES

+ +

The SSL*_set_verify*() functions do not provide diagnostic information.

+ +

The SSL_verify_client_post_handshake() function returns 1 if the request succeeded, and 0 if the request failed. The error stack can be examined to determine the failure reason.

+ +

EXAMPLES

+ +

The following code sequence realizes an example verify_callback function that will always continue the TLS/SSL handshake regardless of verification failure, if wished. The callback realizes a verification depth limit with more informational output.

+ +

All verification errors are printed; information about the certificate chain is printed on request. The example is realized for a server that does allow but not require client certificates.

+ +

The example makes use of the ex_data technique to store application data into/retrieve application data from the SSL structure (see CRYPTO_get_ex_new_index(3), SSL_get_ex_data_X509_STORE_CTX_idx(3)).

+ +
...
+typedef struct {
+  int verbose_mode;
+  int verify_depth;
+  int always_continue;
+} mydata_t;
+int mydata_index;
+
+...
+static int verify_callback(int preverify_ok, X509_STORE_CTX *ctx)
+{
+    char    buf[256];
+    X509   *err_cert;
+    int     err, depth;
+    SSL    *ssl;
+    mydata_t *mydata;
+
+    err_cert = X509_STORE_CTX_get_current_cert(ctx);
+    err = X509_STORE_CTX_get_error(ctx);
+    depth = X509_STORE_CTX_get_error_depth(ctx);
+
+    /*
+     * Retrieve the pointer to the SSL of the connection currently treated
+     * and the application specific data stored into the SSL object.
+     */
+    ssl = X509_STORE_CTX_get_ex_data(ctx, SSL_get_ex_data_X509_STORE_CTX_idx());
+    mydata = SSL_get_ex_data(ssl, mydata_index);
+
+    X509_NAME_oneline(X509_get_subject_name(err_cert), buf, 256);
+
+    /*
+     * Catch a too long certificate chain. The depth limit set using
+     * SSL_CTX_set_verify_depth() is by purpose set to "limit+1" so
+     * that whenever the "depth>verify_depth" condition is met, we
+     * have violated the limit and want to log this error condition.
+     * We must do it here, because the CHAIN_TOO_LONG error would not
+     * be found explicitly; only errors introduced by cutting off the
+     * additional certificates would be logged.
+     */
+    if (depth > mydata->verify_depth) {
+        preverify_ok = 0;
+        err = X509_V_ERR_CERT_CHAIN_TOO_LONG;
+        X509_STORE_CTX_set_error(ctx, err);
+    }
+    if (!preverify_ok) {
+        printf("verify error:num=%d:%s:depth=%d:%s\n", err,
+               X509_verify_cert_error_string(err), depth, buf);
+    } else if (mydata->verbose_mode) {
+        printf("depth=%d:%s\n", depth, buf);
+    }
+
+    /*
+     * At this point, err contains the last verification error. We can use
+     * it for something special
+     */
+    if (!preverify_ok && (err == X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT)) {
+        X509_NAME_oneline(X509_get_issuer_name(err_cert), buf, 256);
+        printf("issuer= %s\n", buf);
+    }
+
+    if (mydata->always_continue)
+        return 1;
+    else
+        return preverify_ok;
+}
+...
+
+mydata_t mydata;
+
+...
+mydata_index = SSL_get_ex_new_index(0, "mydata index", NULL, NULL, NULL);
+
+...
+SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER | SSL_VERIFY_CLIENT_ONCE,
+                   verify_callback);
+
+/*
+ * Let the verify_callback catch the verify_depth error so that we get
+ * an appropriate error in the logfile.
+ */
+SSL_CTX_set_verify_depth(verify_depth + 1);
+
+/*
+ * Set up the SSL specific data into "mydata" and store it into th SSL
+ * structure.
+ */
+mydata.verify_depth = verify_depth; ...
+SSL_set_ex_data(ssl, mydata_index, &mydata);
+
+...
+SSL_accept(ssl);       /* check of success left out for clarity */
+if (peer = SSL_get_peer_certificate(ssl)) {
+    if (SSL_get_verify_result(ssl) == X509_V_OK) {
+        /* The client sent a certificate which verified OK */
+    }
+}
+ +

SEE ALSO

+ +

ssl(7), SSL_new(3), SSL_CTX_get_verify_mode(3), SSL_get_verify_result(3), SSL_CTX_load_verify_locations(3), SSL_get_peer_certificate(3), SSL_CTX_set_cert_verify_callback(3), SSL_get_ex_data_X509_STORE_CTX_idx(3), SSL_CTX_set_client_cert_cb(3), CRYPTO_get_ex_new_index(3)

+ +

HISTORY

+ +

The SSL_VERIFY_POST_HANDSHAKE option, and the SSL_verify_client_post_handshake() and SSL_set_post_handshake_auth() functions were added in OpenSSL 1.1.1.

+ +

COPYRIGHT

+ +

Copyright 2000-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_use_certificate.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_use_certificate.html new file mode 100644 index 00000000..3bc55103 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_use_certificate.html @@ -0,0 +1,121 @@ + + + + +SSL_CTX_use_certificate + + + + + + + + + + +

NAME

+ +

SSL_CTX_use_certificate, SSL_CTX_use_certificate_ASN1, SSL_CTX_use_certificate_file, SSL_use_certificate, SSL_use_certificate_ASN1, SSL_use_certificate_file, SSL_CTX_use_certificate_chain_file, SSL_use_certificate_chain_file, SSL_CTX_use_PrivateKey, SSL_CTX_use_PrivateKey_ASN1, SSL_CTX_use_PrivateKey_file, SSL_CTX_use_RSAPrivateKey, SSL_CTX_use_RSAPrivateKey_ASN1, SSL_CTX_use_RSAPrivateKey_file, SSL_use_PrivateKey_file, SSL_use_PrivateKey_ASN1, SSL_use_PrivateKey, SSL_use_RSAPrivateKey, SSL_use_RSAPrivateKey_ASN1, SSL_use_RSAPrivateKey_file, SSL_CTX_check_private_key, SSL_check_private_key, SSL_CTX_use_cert_and_key, SSL_use_cert_and_key - load certificate and key data

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+int SSL_CTX_use_certificate(SSL_CTX *ctx, X509 *x);
+int SSL_CTX_use_certificate_ASN1(SSL_CTX *ctx, int len, unsigned char *d);
+int SSL_CTX_use_certificate_file(SSL_CTX *ctx, const char *file, int type);
+int SSL_use_certificate(SSL *ssl, X509 *x);
+int SSL_use_certificate_ASN1(SSL *ssl, unsigned char *d, int len);
+int SSL_use_certificate_file(SSL *ssl, const char *file, int type);
+
+int SSL_CTX_use_certificate_chain_file(SSL_CTX *ctx, const char *file);
+int SSL_use_certificate_chain_file(SSL *ssl, const char *file);
+
+int SSL_CTX_use_PrivateKey(SSL_CTX *ctx, EVP_PKEY *pkey);
+int SSL_CTX_use_PrivateKey_ASN1(int pk, SSL_CTX *ctx, unsigned char *d,
+                                long len);
+int SSL_CTX_use_PrivateKey_file(SSL_CTX *ctx, const char *file, int type);
+int SSL_CTX_use_RSAPrivateKey(SSL_CTX *ctx, RSA *rsa);
+int SSL_CTX_use_RSAPrivateKey_ASN1(SSL_CTX *ctx, unsigned char *d, long len);
+int SSL_CTX_use_RSAPrivateKey_file(SSL_CTX *ctx, const char *file, int type);
+int SSL_use_PrivateKey(SSL *ssl, EVP_PKEY *pkey);
+int SSL_use_PrivateKey_ASN1(int pk, SSL *ssl, unsigned char *d, long len);
+int SSL_use_PrivateKey_file(SSL *ssl, const char *file, int type);
+int SSL_use_RSAPrivateKey(SSL *ssl, RSA *rsa);
+int SSL_use_RSAPrivateKey_ASN1(SSL *ssl, unsigned char *d, long len);
+int SSL_use_RSAPrivateKey_file(SSL *ssl, const char *file, int type);
+
+int SSL_CTX_check_private_key(const SSL_CTX *ctx);
+int SSL_check_private_key(const SSL *ssl);
+
+int SSL_CTX_use_cert_and_key(SSL_CTX *ctx, X509 *x, EVP_PKEY *pkey, STACK_OF(X509) *chain, int override);
+int SSL_use_cert_and_key(SSL *ssl, X509 *x, EVP_PKEY *pkey, STACK_OF(X509) *chain, int override);
+ +

DESCRIPTION

+ +

These functions load the certificates and private keys into the SSL_CTX or SSL object, respectively.

+ +

The SSL_CTX_* class of functions loads the certificates and keys into the SSL_CTX object ctx. The information is passed to SSL objects ssl created from ctx with SSL_new(3) by copying, so that changes applied to ctx do not propagate to already existing SSL objects.

+ +

The SSL_* class of functions only loads certificates and keys into a specific SSL object. The specific information is kept, when SSL_clear(3) is called for this SSL object.

+ +

SSL_CTX_use_certificate() loads the certificate x into ctx, SSL_use_certificate() loads x into ssl. The rest of the certificates needed to form the complete certificate chain can be specified using the SSL_CTX_add_extra_chain_cert(3) function.

+ +

SSL_CTX_use_certificate_ASN1() loads the ASN1 encoded certificate from the memory location d (with length len) into ctx, SSL_use_certificate_ASN1() loads the ASN1 encoded certificate into ssl.

+ +

SSL_CTX_use_certificate_file() loads the first certificate stored in file into ctx. The formatting type of the certificate must be specified from the known types SSL_FILETYPE_PEM, SSL_FILETYPE_ASN1. SSL_use_certificate_file() loads the certificate from file into ssl. See the NOTES section on why SSL_CTX_use_certificate_chain_file() should be preferred.

+ +

SSL_CTX_use_certificate_chain_file() loads a certificate chain from file into ctx. The certificates must be in PEM format and must be sorted starting with the subject's certificate (actual client or server certificate), followed by intermediate CA certificates if applicable, and ending at the highest level (root) CA. SSL_use_certificate_chain_file() is similar except it loads the certificate chain into ssl.

+ +

SSL_CTX_use_PrivateKey() adds pkey as private key to ctx. SSL_CTX_use_RSAPrivateKey() adds the private key rsa of type RSA to ctx. SSL_use_PrivateKey() adds pkey as private key to ssl; SSL_use_RSAPrivateKey() adds rsa as private key of type RSA to ssl. If a certificate has already been set and the private does not belong to the certificate an error is returned. To change a certificate, private key pair the new certificate needs to be set with SSL_use_certificate() or SSL_CTX_use_certificate() before setting the private key with SSL_CTX_use_PrivateKey() or SSL_use_PrivateKey().

+ +

SSL_CTX_use_cert_and_key() and SSL_use_cert_and_key() assign the X.509 certificate x, private key key, and certificate chain onto the corresponding ssl or ctx. The pkey argument must be the private key of the X.509 certificate x. If the override argument is 0, then x, pkey and chain are set only if all were not previously set. If override is non-0, then the certificate, private key and chain certs are always set. If pkey is NULL, then the public key of x is used as the private key. This is intended to be used with hardware (via the ENGINE interface) that stores the private key securely, such that it cannot be accessed by OpenSSL. The reference count of the public key is incremented (twice if there is no private key); it is not copied nor duplicated. This allows all private key validations checks to succeed without an actual private key being assigned via SSL_CTX_use_PrivateKey(), etc.

+ +

SSL_CTX_use_PrivateKey_ASN1() adds the private key of type pk stored at memory location d (length len) to ctx. SSL_CTX_use_RSAPrivateKey_ASN1() adds the private key of type RSA stored at memory location d (length len) to ctx. SSL_use_PrivateKey_ASN1() and SSL_use_RSAPrivateKey_ASN1() add the private key to ssl.

+ +

SSL_CTX_use_PrivateKey_file() adds the first private key found in file to ctx. The formatting type of the private key must be specified from the known types SSL_FILETYPE_PEM, SSL_FILETYPE_ASN1. SSL_CTX_use_RSAPrivateKey_file() adds the first private RSA key found in file to ctx. SSL_use_PrivateKey_file() adds the first private key found in file to ssl; SSL_use_RSAPrivateKey_file() adds the first private RSA key found to ssl.

+ +

SSL_CTX_check_private_key() checks the consistency of a private key with the corresponding certificate loaded into ctx. If more than one key/certificate pair (RSA/DSA) is installed, the last item installed will be checked. If e.g. the last item was a RSA certificate or key, the RSA key/certificate pair will be checked. SSL_check_private_key() performs the same check for ssl. If no key/certificate was explicitly added for this ssl, the last item added into ctx will be checked.

+ +

NOTES

+ +

The internal certificate store of OpenSSL can hold several private key/certificate pairs at a time. The certificate used depends on the cipher selected, see also SSL_CTX_set_cipher_list(3).

+ +

When reading certificates and private keys from file, files of type SSL_FILETYPE_ASN1 (also known as DER, binary encoding) can only contain one certificate or private key, consequently SSL_CTX_use_certificate_chain_file() is only applicable to PEM formatting. Files of type SSL_FILETYPE_PEM can contain more than one item.

+ +

SSL_CTX_use_certificate_chain_file() adds the first certificate found in the file to the certificate store. The other certificates are added to the store of chain certificates using SSL_CTX_add1_chain_cert(3). Note: versions of OpenSSL before 1.0.2 only had a single certificate chain store for all certificate types, OpenSSL 1.0.2 and later have a separate chain store for each type. SSL_CTX_use_certificate_chain_file() should be used instead of the SSL_CTX_use_certificate_file() function in order to allow the use of complete certificate chains even when no trusted CA storage is used or when the CA issuing the certificate shall not be added to the trusted CA storage.

+ +

If additional certificates are needed to complete the chain during the TLS negotiation, CA certificates are additionally looked up in the locations of trusted CA certificates, see SSL_CTX_load_verify_locations(3).

+ +

The private keys loaded from file can be encrypted. In order to successfully load encrypted keys, a function returning the passphrase must have been supplied, see SSL_CTX_set_default_passwd_cb(3). (Certificate files might be encrypted as well from the technical point of view, it however does not make sense as the data in the certificate is considered public anyway.)

+ +

All of the functions to set a new certificate will replace any existing certificate of the same type that has already been set. Similarly all of the functions to set a new private key will replace any private key that has already been set. Applications should call SSL_CTX_check_private_key(3) or SSL_check_private_key(3) as appropriate after loading a new certificate and private key to confirm that the certificate and key match.

+ +

RETURN VALUES

+ +

On success, the functions return 1. Otherwise check out the error stack to find out the reason.

+ +

SEE ALSO

+ +

ssl(7), SSL_new(3), SSL_clear(3), SSL_CTX_load_verify_locations(3), SSL_CTX_set_default_passwd_cb(3), SSL_CTX_set_cipher_list(3), SSL_CTX_set_client_CA_list(3), SSL_CTX_set_client_cert_cb(3), SSL_CTX_add_extra_chain_cert(3)

+ +

COPYRIGHT

+ +

Copyright 2000-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_use_psk_identity_hint.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_use_psk_identity_hint.html new file mode 100644 index 00000000..01507c96 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_use_psk_identity_hint.html @@ -0,0 +1,126 @@ + + + + +SSL_CTX_use_psk_identity_hint + + + + + + + + + + +

NAME

+ +

SSL_psk_server_cb_func, SSL_psk_find_session_cb_func, SSL_CTX_use_psk_identity_hint, SSL_use_psk_identity_hint, SSL_CTX_set_psk_server_callback, SSL_set_psk_server_callback, SSL_CTX_set_psk_find_session_callback, SSL_set_psk_find_session_callback - set PSK identity hint to use

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+typedef int (*SSL_psk_find_session_cb_func)(SSL *ssl,
+                                            const unsigned char *identity,
+                                            size_t identity_len,
+                                            SSL_SESSION **sess);
+
+
+void SSL_CTX_set_psk_find_session_callback(SSL_CTX *ctx,
+                                           SSL_psk_find_session_cb_func cb);
+void SSL_set_psk_find_session_callback(SSL *s, SSL_psk_find_session_cb_func cb);
+
+typedef unsigned int (*SSL_psk_server_cb_func)(SSL *ssl,
+                                               const char *identity,
+                                               unsigned char *psk,
+                                               unsigned int max_psk_len);
+
+int SSL_CTX_use_psk_identity_hint(SSL_CTX *ctx, const char *hint);
+int SSL_use_psk_identity_hint(SSL *ssl, const char *hint);
+
+void SSL_CTX_set_psk_server_callback(SSL_CTX *ctx, SSL_psk_server_cb_func cb);
+void SSL_set_psk_server_callback(SSL *ssl, SSL_psk_server_cb_func cb);
+ +

DESCRIPTION

+ +

A server application wishing to use TLSv1.3 PSKs should set a callback using either SSL_CTX_set_psk_find_session_callback() or SSL_set_psk_find_session_callback() as appropriate.

+ +

The callback function is given a pointer to the SSL connection in ssl and an identity in identity of length identity_len. The callback function should identify an SSL_SESSION object that provides the PSK details and store it in *sess. The SSL_SESSION object should, as a minimum, set the master key, the ciphersuite and the protocol version. See SSL_CTX_set_psk_use_session_callback(3) for details.

+ +

It is also possible for the callback to succeed but not supply a PSK. In this case no PSK will be used but the handshake will continue. To do this the callback should return successfully and ensure that *sess is NULL.

+ +

Identity hints are not relevant for TLSv1.3. A server application wishing to use PSK ciphersuites for TLSv1.2 and below may call SSL_CTX_use_psk_identity_hint() to set the given NUL-terminated PSK identity hint hint for SSL context object ctx. SSL_use_psk_identity_hint() sets the given NUL-terminated PSK identity hint hint for the SSL connection object ssl. If hint is NULL the current hint from ctx or ssl is deleted.

+ +

In the case where PSK identity hint is NULL, the server does not send the ServerKeyExchange message to the client.

+ +

A server application wishing to use PSKs for TLSv1.2 and below must provide a callback function which is called when the server receives the ClientKeyExchange message from the client. The purpose of the callback function is to validate the received PSK identity and to fetch the pre-shared key used during the connection setup phase. The callback is set using the functions SSL_CTX_set_psk_server_callback() or SSL_set_psk_server_callback(). The callback function is given the connection in parameter ssl, NUL-terminated PSK identity sent by the client in parameter identity, and a buffer psk of length max_psk_len bytes where the pre-shared key is to be stored.

+ +

The callback for use in TLSv1.2 will also work in TLSv1.3 although it is recommended to use SSL_CTX_set_psk_find_session_callback() or SSL_set_psk_find_session_callback() for this purpose instead. If TLSv1.3 has been negotiated then OpenSSL will first check to see if a callback has been set via SSL_CTX_set_psk_find_session_callback() or SSL_set_psk_find_session_callback() 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_server_callback() or SSL_set_psk_server_callback() and use that. In this case the handshake digest will default to SHA-256 for any returned PSK.

+ +

NOTES

+ +

A connection established via a TLSv1.3 PSK will appear as if session resumption has occurred so that SSL_session_reused(3) will return true.

+ +

RETURN VALUES

+ +

SSL_CTX_use_psk_identity_hint() and SSL_use_psk_identity_hint() return 1 on success, 0 otherwise.

+ +

Return values from the TLSv1.2 and below server callback are interpreted as follows:

+ +
+ +
0
+
+ +

PSK identity was not found. An "unknown_psk_identity" alert message will be sent and the connection setup fails.

+ +
+
>0
+
+ +

PSK identity was found and the server callback has provided the PSK successfully in parameter psk. Return value is the length of psk in bytes. It is an error to return a value greater than max_psk_len.

+ +

If the PSK identity was not found but the callback instructs the protocol to continue anyway, the callback must provide some random data to psk and return the length of the random data, so the connection will fail with decryption_error before it will be finished completely.

+ +
+
+ +

The SSL_psk_find_session_cb_func callback should return 1 on success or 0 on failure. In the event of failure the connection setup fails.

+ +

NOTES

+ +

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:

+ +

"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 ensure safety from cross-protocol related output by not reusing PSKs between TLS 1.3 and TLS 1.2."

+ +

SEE ALSO

+ +

SSL_CTX_set_psk_use_session_callback(3), SSL_set_psk_use_session_callback(3)

+ +

HISTORY

+ +

SSL_CTX_set_psk_find_session_callback() and SSL_set_psk_find_session_callback() were added in OpenSSL 1.1.1.

+ +

COPYRIGHT

+ +

Copyright 2006-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_use_serverinfo.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_use_serverinfo.html new file mode 100644 index 00000000..77b2532a --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_CTX_use_serverinfo.html @@ -0,0 +1,73 @@ + + + + +SSL_CTX_use_serverinfo + + + + + + + + + + +

NAME

+ +

SSL_CTX_use_serverinfo_ex, SSL_CTX_use_serverinfo, SSL_CTX_use_serverinfo_file - use serverinfo extension

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+int SSL_CTX_use_serverinfo_ex(SSL_CTX *ctx, unsigned int version,
+                              const unsigned char *serverinfo,
+                              size_t serverinfo_length);
+
+int SSL_CTX_use_serverinfo(SSL_CTX *ctx, const unsigned char *serverinfo,
+                           size_t serverinfo_length);
+
+int SSL_CTX_use_serverinfo_file(SSL_CTX *ctx, const char *file);
+ +

DESCRIPTION

+ +

These functions load "serverinfo" TLS extensions into the SSL_CTX. A "serverinfo" extension is returned in response to an empty ClientHello Extension.

+ +

SSL_CTX_use_serverinfo_ex() loads one or more serverinfo extensions from a byte array into ctx. The version parameter specifies the format of the byte array provided in *serverinfo which is of length serverinfo_length.

+ +

If version is SSL_SERVERINFOV2 then the extensions in the array must consist of a 4-byte context, a 2-byte Extension Type, a 2-byte length, and then length bytes of extension_data. The context and type values have the same meaning as for SSL_CTX_add_custom_ext(3). If serverinfo is being loaded for extensions to be added to a Certificate message, then the extension will only be added for the first certificate in the message (which is always the end-entity certificate).

+ +

If version is SSL_SERVERINFOV1 then the extensions in the array must consist of a 2-byte Extension Type, a 2-byte length, and then length bytes of extension_data. The type value has the same meaning as for SSL_CTX_add_custom_ext(3). The following default context value will be used in this case:

+ +
SSL_EXT_TLS1_2_AND_BELOW_ONLY | SSL_EXT_CLIENT_HELLO
+| SSL_EXT_TLS1_2_SERVER_HELLO | SSL_EXT_IGNORE_ON_RESUMPTION
+ +

SSL_CTX_use_serverinfo() does the same thing as SSL_CTX_use_serverinfo_ex() except that there is no version parameter so a default version of SSL_SERVERINFOV1 is used instead.

+ +

SSL_CTX_use_serverinfo_file() loads one or more serverinfo extensions from file into ctx. The extensions must be in PEM format. Each extension must be in a format as described above for SSL_CTX_use_serverinfo_ex(). Each PEM extension name must begin with the phrase "BEGIN SERVERINFOV2 FOR " for SSL_SERVERINFOV2 data or "BEGIN SERVERINFO FOR " for SSL_SERVERINFOV1 data.

+ +

If more than one certificate (RSA/DSA) is installed using SSL_CTX_use_certificate(), the serverinfo extension will be loaded into the last certificate installed. If e.g. the last item was a RSA certificate, the loaded serverinfo extension data will be loaded for that certificate. To use the serverinfo extension for multiple certificates, SSL_CTX_use_serverinfo() needs to be called multiple times, once after each time a certificate is loaded via a call to SSL_CTX_use_certificate().

+ +

RETURN VALUES

+ +

On success, the functions return 1. On failure, the functions return 0. Check out the error stack to find out the reason.

+ +

COPYRIGHT

+ +

Copyright 2013-2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_SESSION_free.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_SESSION_free.html new file mode 100644 index 00000000..4ea50ff1 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_SESSION_free.html @@ -0,0 +1,79 @@ + + + + +SSL_SESSION_free + + + + + + + + + + +

NAME

+ +

SSL_SESSION_new, SSL_SESSION_dup, SSL_SESSION_up_ref, SSL_SESSION_free - create, free and manage SSL_SESSION structures

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+SSL_SESSION *SSL_SESSION_new(void);
+SSL_SESSION *SSL_SESSION_dup(SSL_SESSION *src);
+int SSL_SESSION_up_ref(SSL_SESSION *ses);
+void SSL_SESSION_free(SSL_SESSION *session);
+ +

DESCRIPTION

+ +

SSL_SESSION_new() creates a new SSL_SESSION structure and returns a pointer to it.

+ +

SSL_SESSION_dup() copies the contents of the SSL_SESSION structure in src and returns a pointer to it.

+ +

SSL_SESSION_up_ref() increments the reference count on the given SSL_SESSION structure.

+ +

SSL_SESSION_free() decrements the reference count of session and removes the SSL_SESSION structure pointed to by session and frees up the allocated memory, if the reference count has reached 0. If session is NULL nothing is done.

+ +

NOTES

+ +

SSL_SESSION objects are allocated, when a TLS/SSL handshake operation is successfully completed. Depending on the settings, see SSL_CTX_set_session_cache_mode(3), the SSL_SESSION objects are internally referenced by the SSL_CTX and linked into its session cache. SSL objects may be using the SSL_SESSION object; as a session may be reused, several SSL objects may be using one SSL_SESSION object at the same time. It is therefore crucial to keep the reference count (usage information) correct and not delete a SSL_SESSION object that is still used, as this may lead to program failures due to dangling pointers. These failures may also appear delayed, e.g. when an SSL_SESSION object was completely freed as the reference count incorrectly became 0, but it is still referenced in the internal session cache and the cache list is processed during a SSL_CTX_flush_sessions(3) operation.

+ +

SSL_SESSION_free() must only be called for SSL_SESSION objects, for which the reference count was explicitly incremented (e.g. by calling SSL_get1_session(), see SSL_get_session(3)) or when the SSL_SESSION object was generated outside a TLS handshake operation, e.g. by using d2i_SSL_SESSION(3). It must not be called on other SSL_SESSION objects, as this would cause incorrect reference counts and therefore program failures.

+ +

RETURN VALUES

+ +

SSL_SESSION_new returns a pointer to the newly allocated SSL_SESSION structure or NULL on error.

+ +

SSL_SESSION_up_ref returns 1 on success or 0 on error.

+ +

SEE ALSO

+ +

ssl(7), SSL_get_session(3), SSL_CTX_set_session_cache_mode(3), SSL_CTX_flush_sessions(3), d2i_SSL_SESSION(3)

+ +

HISTORY

+ +

The SSL_SESSION_dup() function was added in OpenSSL 1.1.1.

+ +

COPYRIGHT

+ +

Copyright 2000-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_SESSION_get0_cipher.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_SESSION_get0_cipher.html new file mode 100644 index 00000000..5690e44e --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_SESSION_get0_cipher.html @@ -0,0 +1,68 @@ + + + + +SSL_SESSION_get0_cipher + + + + + + + + + + +

NAME

+ +

SSL_SESSION_get0_cipher, SSL_SESSION_set_cipher - set and retrieve the SSL cipher associated with a session

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+const SSL_CIPHER *SSL_SESSION_get0_cipher(const SSL_SESSION *s);
+int SSL_SESSION_set_cipher(SSL_SESSION *s, const SSL_CIPHER *cipher);
+ +

DESCRIPTION

+ +

SSL_SESSION_get0_cipher() retrieves the cipher that was used by the connection when the session was created, or NULL if it cannot be determined.

+ +

The value returned is a pointer to an object maintained within s and should not be released.

+ +

SSL_SESSION_set_cipher() can be used to set the ciphersuite associated with the SSL_SESSION s to cipher. For example, this could be used to set up a session based PSK (see SSL_CTX_set_psk_use_session_callback(3)).

+ +

RETURN VALUES

+ +

SSL_SESSION_get0_cipher() returns the SSL_CIPHER associated with the SSL_SESSION or NULL if it cannot be determined.

+ +

SSL_SESSION_set_cipher() returns 1 on success or 0 on failure.

+ +

SEE ALSO

+ +

ssl(7), d2i_SSL_SESSION(3), SSL_SESSION_get_time(3), SSL_SESSION_get0_hostname(3), SSL_SESSION_free(3), SSL_CTX_set_psk_use_session_callback(3)

+ +

HISTORY

+ +

The SSL_SESSION_get0_cipher() function was added in OpenSSL 1.1.0. The SSL_SESSION_set_cipher() function was added in OpenSSL 1.1.1.

+ +

COPYRIGHT

+ +

Copyright 2016-2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_SESSION_get0_hostname.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_SESSION_get0_hostname.html new file mode 100644 index 00000000..179754c7 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_SESSION_get0_hostname.html @@ -0,0 +1,80 @@ + + + + +SSL_SESSION_get0_hostname + + + + + + + + + + +

NAME

+ +

SSL_SESSION_get0_hostname, SSL_SESSION_set1_hostname, SSL_SESSION_get0_alpn_selected, SSL_SESSION_set1_alpn_selected - get and set SNI and ALPN data associated with a session

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+const char *SSL_SESSION_get0_hostname(const SSL_SESSION *s);
+int SSL_SESSION_set1_hostname(SSL_SESSION *s, const char *hostname);
+
+void SSL_SESSION_get0_alpn_selected(const SSL_SESSION *s,
+                                    const unsigned char **alpn,
+                                    size_t *len);
+int SSL_SESSION_set1_alpn_selected(SSL_SESSION *s, const unsigned char *alpn,
+                                   size_t len);
+ +

DESCRIPTION

+ +

SSL_SESSION_get0_hostname() retrieves the SNI value that was sent by the client when the session was created if it was accepted by the server and TLSv1.2 or below was negotiated. Otherwise NULL is returned. Note that in TLSv1.3 the SNI hostname is negotiated with each handshake including resumption handshakes and is therefore never associated with the session.

+ +

The value returned is a pointer to memory maintained within s and should not be free'd.

+ +

SSL_SESSION_set1_hostname() sets the SNI value for the hostname to a copy of the string provided in hostname.

+ +

SSL_SESSION_get0_alpn_selected() retrieves the selected ALPN protocol for this session and its associated length in bytes. The returned value of *alpn is a pointer to memory maintained within s and should not be free'd.

+ +

SSL_SESSION_set1_alpn_selected() sets the ALPN protocol for this session to the value in alpn which should be of length len bytes. A copy of the input value is made, and the caller retains ownership of the memory pointed to by alpn.

+ +

RETURN VALUES

+ +

SSL_SESSION_get0_hostname() returns either a string or NULL based on if there is the SNI value sent by client.

+ +

SSL_SESSION_set1_hostname() returns 1 on success or 0 on error.

+ +

SSL_SESSION_set1_alpn_selected() returns 1 on success or 0 on error.

+ +

SEE ALSO

+ +

ssl(7), d2i_SSL_SESSION(3), SSL_SESSION_get_time(3), SSL_SESSION_free(3)

+ +

HISTORY

+ +

The SSL_SESSION_set1_hostname(), SSL_SESSION_get0_alpn_selected() and SSL_SESSION_set1_alpn_selected() functions were added in OpenSSL 1.1.1.

+ +

COPYRIGHT

+ +

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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_SESSION_get0_id_context.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_SESSION_get0_id_context.html new file mode 100644 index 00000000..04c937b4 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_SESSION_get0_id_context.html @@ -0,0 +1,70 @@ + + + + +SSL_SESSION_get0_id_context + + + + + + + + + + +

NAME

+ +

SSL_SESSION_get0_id_context, SSL_SESSION_set1_id_context - get and set the SSL ID context associated with a session

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+const unsigned char *SSL_SESSION_get0_id_context(const SSL_SESSION *s,
+                                                 unsigned int *len)
+int SSL_SESSION_set1_id_context(SSL_SESSION *s, const unsigned char *sid_ctx,
+                               unsigned int sid_ctx_len);
+ +

DESCRIPTION

+ +

See SSL_CTX_set_session_id_context(3) for further details on session ID contexts.

+ +

SSL_SESSION_get0_id_context() returns the ID context associated with the SSL/TLS session s. The length of the ID context is written to *len if len is not NULL.

+ +

The value returned is a pointer to an object maintained within s and should not be released.

+ +

SSL_SESSION_set1_id_context() takes a copy of the provided ID context given in sid_ctx and associates it with the session s. The length of the ID context is given by sid_ctx_len which must not exceed SSL_MAX_SID_CTX_LENGTH bytes.

+ +

RETURN VALUES

+ +

SSL_SESSION_set1_id_context() returns 1 on success or 0 on error.

+ +

SEE ALSO

+ +

ssl(7), SSL_set_session_id_context(3)

+ +

HISTORY

+ +

The SSL_SESSION_get0_id_context() function was added in OpenSSL 1.1.0.

+ +

COPYRIGHT

+ +

Copyright 2015-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_SESSION_get0_peer.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_SESSION_get0_peer.html new file mode 100644 index 00000000..b05aa4f9 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_SESSION_get0_peer.html @@ -0,0 +1,56 @@ + + + + +SSL_SESSION_get0_peer + + + + + + + + + + +

NAME

+ +

SSL_SESSION_get0_peer - get details about peer's certificate for a session

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+X509 *SSL_SESSION_get0_peer(SSL_SESSION *s);
+ +

DESCRIPTION

+ +

SSL_SESSION_get0_peer() returns the peer certificate associated with the session s or NULL if no peer certificate is available. The caller should not free the returned value (unless X509_up_ref(3) has also been called).

+ +

RETURN VALUES

+ +

SSL_SESSION_get0_peer() returns a pointer to the peer certificate or NULL if no peer certificate is available.

+ +

SEE ALSO

+ +

ssl(7)

+ +

COPYRIGHT

+ +

Copyright 2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_SESSION_get_compress_id.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_SESSION_get_compress_id.html new file mode 100644 index 00000000..91af12b6 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_SESSION_get_compress_id.html @@ -0,0 +1,56 @@ + + + + +SSL_SESSION_get_compress_id + + + + + + + + + + +

NAME

+ +

SSL_SESSION_get_compress_id - get details about the compression associated with a session

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+unsigned int SSL_SESSION_get_compress_id(const SSL_SESSION *s);
+ +

DESCRIPTION

+ +

If compression has been negotiated for an ssl session then SSL_SESSION_get_compress_id() will return the id for the compression method or 0 otherwise. The only built-in supported compression method is zlib which has an id of 1.

+ +

RETURN VALUES

+ +

SSL_SESSION_get_compress_id() returns the id of the compression method or 0 if none.

+ +

SEE ALSO

+ +

ssl(7)

+ +

COPYRIGHT

+ +

Copyright 2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_SESSION_get_ex_data.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_SESSION_get_ex_data.html new file mode 100644 index 00000000..c7b8caf5 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_SESSION_get_ex_data.html @@ -0,0 +1,61 @@ + + + + +SSL_SESSION_get_ex_data + + + + + + + + + + +

NAME

+ +

SSL_SESSION_set_ex_data, SSL_SESSION_get_ex_data - get and set application specific data on a session

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+int SSL_SESSION_set_ex_data(SSL_SESSION *ss, int idx, void *data);
+void *SSL_SESSION_get_ex_data(const SSL_SESSION *s, int idx);
+ +

DESCRIPTION

+ +

SSL_SESSION_set_ex_data() enables an application to store arbitrary application specific data data in an SSL_SESSION structure ss. The index idx should be a value previously returned from a call to CRYPTO_get_ex_new_index(3).

+ +

SSL_SESSION_get_ex_data() retrieves application specific data previously stored in an SSL_SESSION structure s. The idx value should be the same as that used when originally storing the data.

+ +

RETURN VALUES

+ +

SSL_SESSION_set_ex_data() returns 1 for success or 0 for failure.

+ +

SSL_SESSION_get_ex_data() returns the previously stored value or NULL on failure. NULL may also be a valid value.

+ +

SEE ALSO

+ +

ssl(7), CRYPTO_get_ex_new_index(3)

+ +

COPYRIGHT

+ +

Copyright 2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_SESSION_get_protocol_version.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_SESSION_get_protocol_version.html new file mode 100644 index 00000000..765ee4ad --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_SESSION_get_protocol_version.html @@ -0,0 +1,68 @@ + + + + +SSL_SESSION_get_protocol_version + + + + + + + + + + +

NAME

+ +

SSL_SESSION_get_protocol_version, SSL_SESSION_set_protocol_version - get and set the session protocol version

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+int SSL_SESSION_get_protocol_version(const SSL_SESSION *s);
+int SSL_SESSION_set_protocol_version(SSL_SESSION *s, int version);
+ +

DESCRIPTION

+ +

SSL_SESSION_get_protocol_version() returns the protocol version number used by session s.

+ +

SSL_SESSION_set_protocol_version() sets the protocol version associated with the SSL_SESSION object s to the value version. This value should be a version constant such as TLS1_3_VERSION etc. For example, this could be used to set up a session based PSK (see SSL_CTX_set_psk_use_session_callback(3)).

+ +

RETURN VALUES

+ +

SSL_SESSION_get_protocol_version() returns a number indicating the protocol version used for the session; this number matches the constants e.g. TLS1_VERSION, TLS1_2_VERSION or TLS1_3_VERSION.

+ +

Note that the SSL_SESSION_get_protocol_version() function does not perform a null check on the provided session s pointer.

+ +

SSL_SESSION_set_protocol_version() returns 1 on success or 0 on failure.

+ +

SEE ALSO

+ +

ssl(7), SSL_CTX_set_psk_use_session_callback(3)

+ +

HISTORY

+ +

The SSL_SESSION_get_protocol_version() function was added in OpenSSL 1.1.0. The SSL_SESSION_set_protocol_version() function was added in OpenSSL 1.1.1.

+ +

COPYRIGHT

+ +

Copyright 2001-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_SESSION_get_time.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_SESSION_get_time.html new file mode 100644 index 00000000..d803e550 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_SESSION_get_time.html @@ -0,0 +1,81 @@ + + + + +SSL_SESSION_get_time + + + + + + + + + + +

NAME

+ +

SSL_SESSION_get_time, SSL_SESSION_set_time, SSL_SESSION_get_timeout, SSL_SESSION_set_timeout, SSL_get_time, SSL_set_time, SSL_get_timeout, SSL_set_timeout - retrieve and manipulate session time and timeout settings

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+long SSL_SESSION_get_time(const SSL_SESSION *s);
+long SSL_SESSION_set_time(SSL_SESSION *s, long tm);
+long SSL_SESSION_get_timeout(const SSL_SESSION *s);
+long SSL_SESSION_set_timeout(SSL_SESSION *s, long tm);
+
+long SSL_get_time(const SSL_SESSION *s);
+long SSL_set_time(SSL_SESSION *s, long tm);
+long SSL_get_timeout(const SSL_SESSION *s);
+long SSL_set_timeout(SSL_SESSION *s, long tm);
+ +

DESCRIPTION

+ +

SSL_SESSION_get_time() returns the time at which the session s was established. The time is given in seconds since the Epoch and therefore compatible to the time delivered by the time() call.

+ +

SSL_SESSION_set_time() replaces the creation time of the session s with the chosen value tm.

+ +

SSL_SESSION_get_timeout() returns the timeout value set for session s in seconds.

+ +

SSL_SESSION_set_timeout() sets the timeout value for session s in seconds to tm.

+ +

The SSL_get_time(), SSL_set_time(), SSL_get_timeout(), and SSL_set_timeout() functions are synonyms for the SSL_SESSION_*() counterparts.

+ +

NOTES

+ +

Sessions are expired by examining the creation time and the timeout value. Both are set at creation time of the session to the actual time and the default timeout value at creation, respectively, as set by SSL_CTX_set_timeout(3). Using these functions it is possible to extend or shorten the lifetime of the session.

+ +

RETURN VALUES

+ +

SSL_SESSION_get_time() and SSL_SESSION_get_timeout() return the currently valid values.

+ +

SSL_SESSION_set_time() and SSL_SESSION_set_timeout() return 1 on success.

+ +

If any of the function is passed the NULL pointer for the session s, 0 is returned.

+ +

SEE ALSO

+ +

ssl(7), SSL_CTX_set_timeout(3), SSL_get_default_timeout(3)

+ +

COPYRIGHT

+ +

Copyright 2001-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_SESSION_has_ticket.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_SESSION_has_ticket.html new file mode 100644 index 00000000..6eb48d8a --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_SESSION_has_ticket.html @@ -0,0 +1,70 @@ + + + + +SSL_SESSION_has_ticket + + + + + + + + + + +

NAME

+ +

SSL_SESSION_get0_ticket, SSL_SESSION_has_ticket, SSL_SESSION_get_ticket_lifetime_hint - get details about the ticket associated with a session

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+int SSL_SESSION_has_ticket(const SSL_SESSION *s);
+unsigned long SSL_SESSION_get_ticket_lifetime_hint(const SSL_SESSION *s);
+void SSL_SESSION_get0_ticket(const SSL_SESSION *s, const unsigned char **tick,
+                             size_t *len);
+ +

DESCRIPTION

+ +

SSL_SESSION_has_ticket() returns 1 if there is a Session Ticket associated with this session, and 0 otherwise.

+ +

SSL_SESSION_get_ticket_lifetime_hint returns the lifetime hint in seconds associated with the session ticket.

+ +

SSL_SESSION_get0_ticket obtains a pointer to the ticket associated with a session. The length of the ticket is written to *len. If tick is non NULL then a pointer to the ticket is written to *tick. The pointer is only valid while the connection is in use. The session (and hence the ticket pointer) may also become invalid as a result of a call to SSL_CTX_flush_sessions().

+ +

RETURN VALUES

+ +

SSL_SESSION_has_ticket() returns 1 if session ticket exists or 0 otherwise.

+ +

SSL_SESSION_get_ticket_lifetime_hint() returns the number of seconds.

+ +

SEE ALSO

+ +

ssl(7), d2i_SSL_SESSION(3), SSL_SESSION_get_time(3), SSL_SESSION_free(3)

+ +

HISTORY

+ +

The SSL_SESSION_has_ticket(), SSL_SESSION_get_ticket_lifetime_hint() and SSL_SESSION_get0_ticket() functions were added in OpenSSL 1.1.0.

+ +

COPYRIGHT

+ +

Copyright 2015-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_SESSION_is_resumable.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_SESSION_is_resumable.html new file mode 100644 index 00000000..09309bc5 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_SESSION_is_resumable.html @@ -0,0 +1,61 @@ + + + + +SSL_SESSION_is_resumable + + + + + + + + + + +

NAME

+ +

SSL_SESSION_is_resumable - determine whether an SSL_SESSION object can be used for resumption

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+int SSL_SESSION_is_resumable(const SSL_SESSION *s);
+ +

DESCRIPTION

+ +

SSL_SESSION_is_resumable() determines whether an SSL_SESSION object can be used to resume a session or not. Returns 1 if it can or 0 if not. Note that attempting to resume with a non-resumable session will result in a full handshake.

+ +

RETURN VALUES

+ +

SSL_SESSION_is_resumable() returns 1 if the session is resumable or 0 otherwise.

+ +

SEE ALSO

+ +

ssl(7), SSL_get_session(3), SSL_CTX_sess_set_new_cb(3)

+ +

HISTORY

+ +

The SSL_SESSION_is_resumable() function was added in OpenSSL 1.1.1.

+ +

COPYRIGHT

+ +

Copyright 2017-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_SESSION_print.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_SESSION_print.html new file mode 100644 index 00000000..21a438d7 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_SESSION_print.html @@ -0,0 +1,62 @@ + + + + +SSL_SESSION_print + + + + + + + + + + +

NAME

+ +

SSL_SESSION_print, SSL_SESSION_print_fp, SSL_SESSION_print_keylog - printf information about a session

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+int SSL_SESSION_print(BIO *fp, const SSL_SESSION *ses);
+int SSL_SESSION_print_fp(FILE *fp, const SSL_SESSION *ses);
+int SSL_SESSION_print_keylog(BIO *bp, const SSL_SESSION *x);
+ +

DESCRIPTION

+ +

SSL_SESSION_print() prints summary information about the session provided in ses to the BIO fp.

+ +

SSL_SESSION_print_fp() does the same as SSL_SESSION_print() except it prints it to the FILE fp.

+ +

SSL_SESSION_print_keylog() prints session information to the provided BIO <bp> in NSS keylog format.

+ +

RETURN VALUES

+ +

SSL_SESSION_print(), SSL_SESSION_print_fp() and SSL_SESSION_print_keylog return 1 on success or 0 on error.

+ +

SEE ALSO

+ +

ssl(7)

+ +

COPYRIGHT

+ +

Copyright 2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_SESSION_set1_id.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_SESSION_set1_id.html new file mode 100644 index 00000000..1ec260b3 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_SESSION_set1_id.html @@ -0,0 +1,66 @@ + + + + +SSL_SESSION_set1_id + + + + + + + + + + +

NAME

+ +

SSL_SESSION_get_id, SSL_SESSION_set1_id - get and set the SSL session ID

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+const unsigned char *SSL_SESSION_get_id(const SSL_SESSION *s,
+                                        unsigned int *len)
+int SSL_SESSION_set1_id(SSL_SESSION *s, const unsigned char *sid,
+                        unsigned int sid_len);
+ +

DESCRIPTION

+ +

SSL_SESSION_get_id() returns a pointer to the internal session id value for the session s. The length of the id in bytes is stored in *len. The length may be 0. The caller should not free the returned pointer directly.

+ +

SSL_SESSION_set1_id() sets the session ID for the ssl SSL/TLS session to sid of length sid_len.

+ +

RETURN VALUES

+ +

SSL_SESSION_get_id() returns a pointer to the session id value. SSL_SESSION_set1_id() returns 1 for success and 0 for failure, for example if the supplied session ID length exceeds SSL_MAX_SSL_SESSION_ID_LENGTH.

+ +

SEE ALSO

+ +

ssl(7)

+ +

HISTORY

+ +

The SSL_SESSION_set1_id() function was added in OpenSSL 1.1.0.

+ +

COPYRIGHT

+ +

Copyright 2015-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_accept.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_accept.html new file mode 100644 index 00000000..856b86b2 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_accept.html @@ -0,0 +1,87 @@ + + + + +SSL_accept + + + + + + + + + + +

NAME

+ +

SSL_accept - wait for a TLS/SSL client to initiate a TLS/SSL handshake

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+int SSL_accept(SSL *ssl);
+ +

DESCRIPTION

+ +

SSL_accept() waits for a TLS/SSL client to initiate the TLS/SSL handshake. The communication channel must already have been set and assigned to the ssl by setting an underlying BIO.

+ +

NOTES

+ +

The behaviour of SSL_accept() depends on the underlying BIO.

+ +

If the underlying BIO is blocking, SSL_accept() will only return once the handshake has been finished or an error occurred.

+ +

If the underlying BIO is non-blocking, SSL_accept() will also return when the underlying BIO could not satisfy the needs of SSL_accept() to continue the handshake, indicating the problem by the return value -1. In this case a call to SSL_get_error() with the return value of SSL_accept() will yield SSL_ERROR_WANT_READ or SSL_ERROR_WANT_WRITE. The calling process then must repeat the call after taking appropriate action to satisfy the needs of SSL_accept(). The action depends on the underlying BIO. When using a non-blocking socket, nothing is to be done, but select() can be used to check for the required condition. When using a buffering BIO, like a BIO pair, data must be written into or retrieved out of the BIO before being able to continue.

+ +

RETURN VALUES

+ +

The following return values can occur:

+ +
+ +
0
+
+ +

The TLS/SSL handshake was not successful but was shut down controlled and by the specifications of the TLS/SSL protocol. Call SSL_get_error() with the return value ret to find out the reason.

+ +
+
1
+
+ +

The TLS/SSL handshake was successfully completed, a TLS/SSL connection has been established.

+ +
+
<0
+
+ +

The TLS/SSL handshake was not successful because a fatal error occurred either at the protocol level or a connection failure occurred. The shutdown was not clean. It can also occur if action is needed to continue the operation for non-blocking BIOs. Call SSL_get_error() with the return value ret to find out the reason.

+ +
+
+ +

SEE ALSO

+ +

SSL_get_error(3), SSL_connect(3), SSL_shutdown(3), ssl(7), bio(7), SSL_set_connect_state(3), SSL_do_handshake(3), SSL_CTX_new(3)

+ +

COPYRIGHT

+ +

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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_alert_type_string.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_alert_type_string.html new file mode 100644 index 00000000..a03f3d25 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_alert_type_string.html @@ -0,0 +1,255 @@ + + + + +SSL_alert_type_string + + + + + + + + + + +

NAME

+ +

SSL_alert_type_string, SSL_alert_type_string_long, SSL_alert_desc_string, SSL_alert_desc_string_long - get textual description of alert information

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+const char *SSL_alert_type_string(int value);
+const char *SSL_alert_type_string_long(int value);
+
+const char *SSL_alert_desc_string(int value);
+const char *SSL_alert_desc_string_long(int value);
+ +

DESCRIPTION

+ +

SSL_alert_type_string() returns a one letter string indicating the type of the alert specified by value.

+ +

SSL_alert_type_string_long() returns a string indicating the type of the alert specified by value.

+ +

SSL_alert_desc_string() returns a two letter string as a short form describing the reason of the alert specified by value.

+ +

SSL_alert_desc_string_long() returns a string describing the reason of the alert specified by value.

+ +

NOTES

+ +

When one side of an SSL/TLS communication wants to inform the peer about a special situation, it sends an alert. The alert is sent as a special message and does not influence the normal data stream (unless its contents results in the communication being canceled).

+ +

A warning alert is sent, when a non-fatal error condition occurs. The "close notify" alert is sent as a warning alert. Other examples for non-fatal errors are certificate errors ("certificate expired", "unsupported certificate"), for which a warning alert may be sent. (The sending party may however decide to send a fatal error.) The receiving side may cancel the connection on reception of a warning alert on it discretion.

+ +

Several alert messages must be sent as fatal alert messages as specified by the TLS RFC. A fatal alert always leads to a connection abort.

+ +

RETURN VALUES

+ +

The following strings can occur for SSL_alert_type_string() or SSL_alert_type_string_long():

+ +
+ +
"W"/"warning"
+
+ +
+
"F"/"fatal"
+
+ +
+
"U"/"unknown"
+
+ +

This indicates that no support is available for this alert type. Probably value does not contain a correct alert message.

+ +
+
+ +

The following strings can occur for SSL_alert_desc_string() or SSL_alert_desc_string_long():

+ +
+ +
"CN"/"close notify"
+
+ +

The connection shall be closed. This is a warning alert.

+ +
+
"UM"/"unexpected message"
+
+ +

An inappropriate message was received. This alert is always fatal and should never be observed in communication between proper implementations.

+ +
+
"BM"/"bad record mac"
+
+ +

This alert is returned if a record is received with an incorrect MAC. This message is always fatal.

+ +
+
"DF"/"decompression failure"
+
+ +

The decompression function received improper input (e.g. data that would expand to excessive length). This message is always fatal.

+ +
+
"HF"/"handshake failure"
+
+ +

Reception of a handshake_failure alert message indicates that the sender was unable to negotiate an acceptable set of security parameters given the options available. This is a fatal error.

+ +
+
"NC"/"no certificate"
+
+ +

A client, that was asked to send a certificate, does not send a certificate (SSLv3 only).

+ +
+
"BC"/"bad certificate"
+
+ +

A certificate was corrupt, contained signatures that did not verify correctly, etc

+ +
+
"UC"/"unsupported certificate"
+
+ +

A certificate was of an unsupported type.

+ +
+
"CR"/"certificate revoked"
+
+ +

A certificate was revoked by its signer.

+ +
+
"CE"/"certificate expired"
+
+ +

A certificate has expired or is not currently valid.

+ +
+
"CU"/"certificate unknown"
+
+ +

Some other (unspecified) issue arose in processing the certificate, rendering it unacceptable.

+ +
+
"IP"/"illegal parameter"
+
+ +

A field in the handshake was out of range or inconsistent with other fields. This is always fatal.

+ +
+
"DC"/"decryption failed"
+
+ +

A TLSCiphertext decrypted in an invalid way: either it wasn't an even multiple of the block length or its padding values, when checked, weren't correct. This message is always fatal.

+ +
+
"RO"/"record overflow"
+
+ +

A TLSCiphertext record was received which had a length more than 2^14+2048 bytes, or a record decrypted to a TLSCompressed record with more than 2^14+1024 bytes. This message is always fatal.

+ +
+
"CA"/"unknown CA"
+
+ +

A valid certificate chain or partial chain was received, but the certificate was not accepted because the CA certificate could not be located or couldn't be matched with a known, trusted CA. This message is always fatal.

+ +
+
"AD"/"access denied"
+
+ +

A valid certificate was received, but when access control was applied, the sender decided not to proceed with negotiation. This message is always fatal.

+ +
+
"DE"/"decode error"
+
+ +

A message could not be decoded because some field was out of the specified range or the length of the message was incorrect. This message is always fatal.

+ +
+
"CY"/"decrypt error"
+
+ +

A handshake cryptographic operation failed, including being unable to correctly verify a signature, decrypt a key exchange, or validate a finished message.

+ +
+
"ER"/"export restriction"
+
+ +

A negotiation not in compliance with export restrictions was detected; for example, attempting to transfer a 1024 bit ephemeral RSA key for the RSA_EXPORT handshake method. This message is always fatal.

+ +
+
"PV"/"protocol version"
+
+ +

The protocol version the client has attempted to negotiate is recognized, but not supported. (For example, old protocol versions might be avoided for security reasons). This message is always fatal.

+ +
+
"IS"/"insufficient security"
+
+ +

Returned instead of handshake_failure when a negotiation has failed specifically because the server requires ciphers more secure than those supported by the client. This message is always fatal.

+ +
+
"IE"/"internal error"
+
+ +

An internal error unrelated to the peer or the correctness of the protocol makes it impossible to continue (such as a memory allocation failure). This message is always fatal.

+ +
+
"US"/"user canceled"
+
+ +

This handshake is being canceled for some reason unrelated to a protocol failure. If the user cancels an operation after the handshake is complete, just closing the connection by sending a close_notify is more appropriate. This alert should be followed by a close_notify. This message is generally a warning.

+ +
+
"NR"/"no renegotiation"
+
+ +

Sent by the client in response to a hello request or by the server in response to a client hello after initial handshaking. Either of these would normally lead to renegotiation; when that is not appropriate, the recipient should respond with this alert; at that point, the original requester can decide whether to proceed with the connection. One case where this would be appropriate would be where a server has spawned a process to satisfy a request; the process might receive security parameters (key length, authentication, etc.) at startup and it might be difficult to communicate changes to these parameters after that point. This message is always a warning.

+ +
+
"UP"/"unknown PSK identity"
+
+ +

Sent by the server to indicate that it does not recognize a PSK identity or an SRP identity.

+ +
+
"UK"/"unknown"
+
+ +

This indicates that no description is available for this alert type. Probably value does not contain a correct alert message.

+ +
+
+ +

SEE ALSO

+ +

ssl(7), SSL_CTX_set_info_callback(3)

+ +

COPYRIGHT

+ +

Copyright 2001-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_alloc_buffers.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_alloc_buffers.html new file mode 100644 index 00000000..85fa8a58 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_alloc_buffers.html @@ -0,0 +1,77 @@ + + + + +SSL_alloc_buffers + + + + + + + + + + +

NAME

+ +

SSL_free_buffers, SSL_alloc_buffers - manage SSL structure buffers

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+int SSL_free_buffers(SSL *ssl);
+int SSL_alloc_buffers(SSL *ssl);
+ +

DESCRIPTION

+ +

SSL_free_buffers() frees the read and write buffers of the given ssl. SSL_alloc_buffers() allocates the read and write buffers of the given ssl.

+ +

The SSL_MODE_RELEASE_BUFFERS mode releases read or write buffers whenever the buffers have been drained. These functions allow applications to manually control when buffers are freed and allocated.

+ +

After freeing the buffers, the buffers are automatically reallocated upon a new read or write. The SSL_alloc_buffers() does not need to be called, but can be used to make sure the buffers are pre-allocated. This can be used to avoid allocation during data processing or with CRYPTO_set_mem_functions() to control where and how buffers are allocated.

+ +

RETURN VALUES

+ +

The following return values can occur:

+ +
+ +
0 (Failure)
+
+ +

The SSL_free_buffers() function returns 0 when there is pending data to be read or written. The SSL_alloc_buffers() function returns 0 when there is an allocation failure.

+ +
+
1 (Success)
+
+ +

The SSL_free_buffers() function returns 1 if the buffers have been freed. This value is also returned if the buffers had been freed before calling SSL_free_buffers(). The SSL_alloc_buffers() function returns 1 if the buffers have been allocated. This value is also returned if the buffers had been allocated before calling SSL_alloc_buffers().

+ +
+
+ +

SEE ALSO

+ +

SSL_free(3), SSL_clear(3), SSL_new(3), SSL_CTX_set_mode(3), CRYPTO_set_mem_functions

+ +

COPYRIGHT

+ +

Copyright 2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_check_chain.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_check_chain.html new file mode 100644 index 00000000..46e56cb3 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_check_chain.html @@ -0,0 +1,89 @@ + + + + +SSL_check_chain + + + + + + + + + + +

NAME

+ +

SSL_check_chain - check certificate chain suitability

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+int SSL_check_chain(SSL *s, X509 *x, EVP_PKEY *pk, STACK_OF(X509) *chain);
+ +

DESCRIPTION

+ +

SSL_check_chain() checks whether certificate x, private key pk and certificate chain chain is suitable for use with the current session s.

+ +

RETURN VALUES

+ +

SSL_check_chain() returns a bitmap of flags indicating the validity of the chain.

+ +

CERT_PKEY_VALID: the chain can be used with the current session. If this flag is not set then the certificate will never be used even if the application tries to set it because it is inconsistent with the peer preferences.

+ +

CERT_PKEY_SIGN: the EE key can be used for signing.

+ +

CERT_PKEY_EE_SIGNATURE: the signature algorithm of the EE certificate is acceptable.

+ +

CERT_PKEY_CA_SIGNATURE: the signature algorithms of all CA certificates are acceptable.

+ +

CERT_PKEY_EE_PARAM: the parameters of the end entity certificate are acceptable (e.g. it is a supported curve).

+ +

CERT_PKEY_CA_PARAM: the parameters of all CA certificates are acceptable.

+ +

CERT_PKEY_EXPLICIT_SIGN: the end entity certificate algorithm can be used explicitly for signing (i.e. it is mentioned in the signature algorithms extension).

+ +

CERT_PKEY_ISSUER_NAME: the issuer name is acceptable. This is only meaningful for client authentication.

+ +

CERT_PKEY_CERT_TYPE: the certificate type is acceptable. Only meaningful for client authentication.

+ +

CERT_PKEY_SUITEB: chain is suitable for Suite B use.

+ +

NOTES

+ +

SSL_check_chain() must be called in servers after a client hello message or in clients after a certificate request message. It will typically be called in the certificate callback.

+ +

An application wishing to support multiple certificate chains may call this function on each chain in turn: starting with the one it considers the most secure. It could then use the chain of the first set which returns suitable flags.

+ +

As a minimum the flag CERT_PKEY_VALID must be set for a chain to be usable. An application supporting multiple chains with different CA signature algorithms may also wish to check CERT_PKEY_CA_SIGNATURE too. If no chain is suitable a server should fall back to the most secure chain which sets CERT_PKEY_VALID.

+ +

The validity of a chain is determined by checking if it matches a supported signature algorithm, supported curves and in the case of client authentication certificate types and issuer names.

+ +

Since the supported signature algorithms extension is only used in TLS 1.2, TLS 1.3 and DTLS 1.2 the results for earlier versions of TLS and DTLS may not be very useful. Applications may wish to specify a different "legacy" chain for earlier versions of TLS or DTLS.

+ +

SEE ALSO

+ +

SSL_CTX_set_cert_cb(3), ssl(7)

+ +

COPYRIGHT

+ +

Copyright 2015-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_clear.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_clear.html new file mode 100644 index 00000000..5409dbfa --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_clear.html @@ -0,0 +1,81 @@ + + + + +SSL_clear + + + + + + + + + + +

NAME

+ +

SSL_clear - reset SSL object to allow another connection

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+int SSL_clear(SSL *ssl);
+ +

DESCRIPTION

+ +

Reset ssl to allow another connection. All settings (method, ciphers, BIOs) are kept.

+ +

NOTES

+ +

SSL_clear is used to prepare an SSL object for a new connection. While all settings are kept, a side effect is the handling of the current SSL session. If a session is still open, it is considered bad and will be removed from the session cache, as required by RFC2246. A session is considered open, if SSL_shutdown(3) was not called for the connection or at least SSL_set_shutdown(3) was used to set the SSL_SENT_SHUTDOWN state.

+ +

If a session was closed cleanly, the session object will be kept and all settings corresponding. This explicitly means, that e.g. the special method used during the session will be kept for the next handshake. So if the session was a TLSv1 session, a SSL client object will use a TLSv1 client method for the next handshake and a SSL server object will use a TLSv1 server method, even if TLS_*_methods were chosen on startup. This will might lead to connection failures (see SSL_new(3)) for a description of the method's properties.

+ +

WARNINGS

+ +

SSL_clear() resets the SSL object to allow for another connection. The reset operation however keeps several settings of the last sessions (some of these settings were made automatically during the last handshake). It only makes sense for a new connection with the exact same peer that shares these settings, and may fail if that peer changes its settings between connections. Use the sequence SSL_get_session(3); SSL_new(3); SSL_set_session(3); SSL_free(3) instead to avoid such failures (or simply SSL_free(3); SSL_new(3) if session reuse is not desired).

+ +

RETURN VALUES

+ +

The following return values can occur:

+ +
+ +
0
+
+ +

The SSL_clear() operation could not be performed. Check the error stack to find out the reason.

+ +
+
1
+
+ +

The SSL_clear() operation was successful.

+ +
+
+ +

SSL_new(3), SSL_free(3), SSL_shutdown(3), SSL_set_shutdown(3), SSL_CTX_set_options(3), ssl(7), SSL_CTX_set_client_cert_cb(3)

+ +

COPYRIGHT

+ +

Copyright 2000-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_connect.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_connect.html new file mode 100644 index 00000000..ba58ceb3 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_connect.html @@ -0,0 +1,91 @@ + + + + +SSL_connect + + + + + + + + + + +

NAME

+ +

SSL_connect - initiate the TLS/SSL handshake with an TLS/SSL server

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+int SSL_connect(SSL *ssl);
+ +

DESCRIPTION

+ +

SSL_connect() initiates the TLS/SSL handshake with a server. The communication channel must already have been set and assigned to the ssl by setting an underlying BIO.

+ +

NOTES

+ +

The behaviour of SSL_connect() depends on the underlying BIO.

+ +

If the underlying BIO is blocking, SSL_connect() will only return once the handshake has been finished or an error occurred.

+ +

If the underlying BIO is non-blocking, SSL_connect() will also return when the underlying BIO could not satisfy the needs of SSL_connect() to continue the handshake, indicating the problem by the return value -1. In this case a call to SSL_get_error() with the return value of SSL_connect() will yield SSL_ERROR_WANT_READ or SSL_ERROR_WANT_WRITE. The calling process then must repeat the call after taking appropriate action to satisfy the needs of SSL_connect(). The action depends on the underlying BIO. When using a non-blocking socket, nothing is to be done, but select() can be used to check for the required condition. When using a buffering BIO, like a BIO pair, data must be written into or retrieved out of the BIO before being able to continue.

+ +

Many systems implement Nagle's algorithm by default which means that it will buffer outgoing TCP data if a TCP packet has already been sent for which no corresponding ACK has been received yet from the peer. This can have performance impacts after a successful TLSv1.3 handshake or a successful TLSv1.2 (or below) resumption handshake, because the last peer to communicate in the handshake is the client. If the client is also the first to send application data (as is typical for many protocols) then this data could be buffered until an ACK has been received for the final handshake message.

+ +

The TCP_NODELAY socket option is often available to disable Nagle's algorithm. If an application opts to disable Nagle's algorithm consideration should be given to turning it back on again later if appropriate. The helper function BIO_set_tcp_ndelay() can be used to turn on or off the TCP_NODELAY option.

+ +

RETURN VALUES

+ +

The following return values can occur:

+ +
+ +
0
+
+ +

The TLS/SSL handshake was not successful but was shut down controlled and by the specifications of the TLS/SSL protocol. Call SSL_get_error() with the return value ret to find out the reason.

+ +
+
1
+
+ +

The TLS/SSL handshake was successfully completed, a TLS/SSL connection has been established.

+ +
+
<0
+
+ +

The TLS/SSL handshake was not successful, because a fatal error occurred either at the protocol level or a connection failure occurred. The shutdown was not clean. It can also occur if action is needed to continue the operation for non-blocking BIOs. Call SSL_get_error() with the return value ret to find out the reason.

+ +
+
+ +

SEE ALSO

+ +

SSL_get_error(3), SSL_accept(3), SSL_shutdown(3), ssl(7), bio(7), SSL_set_connect_state(3), SSL_do_handshake(3), SSL_CTX_new(3)

+ +

COPYRIGHT

+ +

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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_do_handshake.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_do_handshake.html new file mode 100644 index 00000000..2cd11a5b --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_do_handshake.html @@ -0,0 +1,87 @@ + + + + +SSL_do_handshake + + + + + + + + + + +

NAME

+ +

SSL_do_handshake - perform a TLS/SSL handshake

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+int SSL_do_handshake(SSL *ssl);
+ +

DESCRIPTION

+ +

SSL_do_handshake() will wait for a SSL/TLS handshake to take place. If the connection is in client mode, the handshake will be started. The handshake routines may have to be explicitly set in advance using either SSL_set_connect_state(3) or SSL_set_accept_state(3).

+ +

NOTES

+ +

The behaviour of SSL_do_handshake() depends on the underlying BIO.

+ +

If the underlying BIO is blocking, SSL_do_handshake() will only return once the handshake has been finished or an error occurred.

+ +

If the underlying BIO is non-blocking, SSL_do_handshake() will also return when the underlying BIO could not satisfy the needs of SSL_do_handshake() to continue the handshake. In this case a call to SSL_get_error() with the return value of SSL_do_handshake() will yield SSL_ERROR_WANT_READ or SSL_ERROR_WANT_WRITE. The calling process then must repeat the call after taking appropriate action to satisfy the needs of SSL_do_handshake(). The action depends on the underlying BIO. When using a non-blocking socket, nothing is to be done, but select() can be used to check for the required condition. When using a buffering BIO, like a BIO pair, data must be written into or retrieved out of the BIO before being able to continue.

+ +

RETURN VALUES

+ +

The following return values can occur:

+ +
+ +
0
+
+ +

The TLS/SSL handshake was not successful but was shut down controlled and by the specifications of the TLS/SSL protocol. Call SSL_get_error() with the return value ret to find out the reason.

+ +
+
1
+
+ +

The TLS/SSL handshake was successfully completed, a TLS/SSL connection has been established.

+ +
+
<0
+
+ +

The TLS/SSL handshake was not successful because a fatal error occurred either at the protocol level or a connection failure occurred. The shutdown was not clean. It can also occur if action is needed to continue the operation for non-blocking BIOs. Call SSL_get_error() with the return value ret to find out the reason.

+ +
+
+ +

SEE ALSO

+ +

SSL_get_error(3), SSL_connect(3), SSL_accept(3), ssl(7), bio(7), SSL_set_connect_state(3)

+ +

COPYRIGHT

+ +

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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_export_keying_material.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_export_keying_material.html new file mode 100644 index 00000000..f269d1d2 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_export_keying_material.html @@ -0,0 +1,78 @@ + + + + +SSL_export_keying_material + + + + + + + + + + +

NAME

+ +

SSL_export_keying_material, SSL_export_keying_material_early - obtain keying material for application use

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+int SSL_export_keying_material(SSL *s, unsigned char *out, size_t olen,
+                               const char *label, size_t llen,
+                               const unsigned char *context,
+                               size_t contextlen, int use_context);
+
+int SSL_export_keying_material_early(SSL *s, unsigned char *out, size_t olen,
+                                     const char *label, size_t llen,
+                                     const unsigned char *context,
+                                     size_t contextlen);
+ +

DESCRIPTION

+ +

During the creation of a TLS or DTLS connection shared keying material is established between the two endpoints. The functions SSL_export_keying_material() and SSL_export_keying_material_early() enable an application to use some of this keying material for its own purposes in accordance with RFC5705 (for TLSv1.2 and below) or RFC8446 (for TLSv1.3).

+ +

SSL_export_keying_material() derives keying material using the exporter_master_secret established in the handshake.

+ +

SSL_export_keying_material_early() is only usable with TLSv1.3, and derives keying material using the early_exporter_master_secret (as defined in the TLS 1.3 RFC). For the client, the early_exporter_master_secret is only available when the client attempts to send 0-RTT data. For the server, it is only available when the server accepts 0-RTT data.

+ +

An application may need to securely establish the context within which this keying material will be used. For example this may include identifiers for the application session, application algorithms or parameters, or the lifetime of the context. The context value is left to the application but must be the same on both sides of the communication.

+ +

For a given SSL connection s, olen bytes of data will be written to out. The application specific context should be supplied in the location pointed to by context and should be contextlen bytes long. Provision of a context is optional. If the context should be omitted entirely then use_context should be set to 0. Otherwise it should be any other value. If use_context is 0 then the values of context and contextlen are ignored. Note that in TLSv1.2 and below a zero length context is treated differently from no context at all, and will result in different keying material being returned. In TLSv1.3 a zero length context is that same as no context at all and will result in the same keying material being returned.

+ +

An application specific label should be provided in the location pointed to by label and should be llen bytes long. Typically this will be a value from the IANA Exporter Label Registry (https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#exporter-labels). Alternatively labels beginning with "EXPERIMENTAL" are permitted by the standard to be used without registration. TLSv1.3 imposes a maximum label length of 249 bytes.

+ +

Note that this function is only defined for TLSv1.0 and above, and DTLSv1.0 and above. Attempting to use it in SSLv3 will result in an error.

+ +

RETURN VALUES

+ +

SSL_export_keying_material() returns 0 or -1 on failure or 1 on success.

+ +

SSL_export_keying_material_early() returns 0 on failure or 1 on success.

+ +

HISTORY

+ +

The SSL_export_keying_material_early() function was added in OpenSSL 1.1.1.

+ +

COPYRIGHT

+ +

Copyright 2017-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_extension_supported.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_extension_supported.html new file mode 100644 index 00000000..aa592a55 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_extension_supported.html @@ -0,0 +1,261 @@ + + + + +SSL_extension_supported + + + + + + + + + + +

NAME

+ +

SSL_extension_supported, SSL_CTX_add_custom_ext, SSL_CTX_add_client_custom_ext, SSL_CTX_add_server_custom_ext, custom_ext_add_cb, custom_ext_free_cb, custom_ext_parse_cb - custom TLS extension handling

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+typedef int (*SSL_custom_ext_add_cb_ex) (SSL *s, unsigned int ext_type,
+                                         unsigned int context,
+                                         const unsigned char **out,
+                                         size_t *outlen, X509 *x,
+                                         size_t chainidx, int *al,
+                                         void *add_arg);
+
+typedef void (*SSL_custom_ext_free_cb_ex) (SSL *s, unsigned int ext_type,
+                                           unsigned int context,
+                                           const unsigned char *out,
+                                           void *add_arg);
+
+typedef int (*SSL_custom_ext_parse_cb_ex) (SSL *s, unsigned int ext_type,
+                                           unsigned int context,
+                                           const unsigned char *in,
+                                           size_t inlen, X509 *x,
+                                           size_t chainidx, int *al,
+                                           void *parse_arg);
+
+int SSL_CTX_add_custom_ext(SSL_CTX *ctx, unsigned int ext_type,
+                           unsigned int context,
+                           SSL_custom_ext_add_cb_ex add_cb,
+                           SSL_custom_ext_free_cb_ex free_cb,
+                           void *add_arg,
+                           SSL_custom_ext_parse_cb_ex parse_cb,
+                           void *parse_arg);
+
+typedef int (*custom_ext_add_cb)(SSL *s, unsigned int ext_type,
+                                 const unsigned char **out,
+                                 size_t *outlen, int *al,
+                                 void *add_arg);
+
+typedef void (*custom_ext_free_cb)(SSL *s, unsigned int ext_type,
+                                   const unsigned char *out,
+                                   void *add_arg);
+
+typedef int (*custom_ext_parse_cb)(SSL *s, unsigned int ext_type,
+                                   const unsigned char *in,
+                                   size_t inlen, int *al,
+                                   void *parse_arg);
+
+int SSL_CTX_add_client_custom_ext(SSL_CTX *ctx, unsigned int ext_type,
+                                  custom_ext_add_cb add_cb,
+                                  custom_ext_free_cb free_cb, void *add_arg,
+                                  custom_ext_parse_cb parse_cb,
+                                  void *parse_arg);
+
+int SSL_CTX_add_server_custom_ext(SSL_CTX *ctx, unsigned int ext_type,
+                                  custom_ext_add_cb add_cb,
+                                  custom_ext_free_cb free_cb, void *add_arg,
+                                  custom_ext_parse_cb parse_cb,
+                                  void *parse_arg);
+
+int SSL_extension_supported(unsigned int ext_type);
+ +

DESCRIPTION

+ +

SSL_CTX_add_custom_ext() adds a custom extension for a TLS/DTLS client or server for all supported protocol versions with extension type ext_type and callbacks add_cb, free_cb and parse_cb (see the "EXTENSION CALLBACKS" section below). The context value determines which messages and under what conditions the extension will be added/parsed (see the "EXTENSION CONTEXTS" section below).

+ +

SSL_CTX_add_client_custom_ext() adds a custom extension for a TLS/DTLS client with extension type ext_type and callbacks add_cb, free_cb and parse_cb. This function is similar to SSL_CTX_add_custom_ext() except it only applies to clients, uses the older style of callbacks, and implicitly sets the context value to:

+ +
SSL_EXT_TLS1_2_AND_BELOW_ONLY | SSL_EXT_CLIENT_HELLO
+| SSL_EXT_TLS1_2_SERVER_HELLO | SSL_EXT_IGNORE_ON_RESUMPTION
+ +

SSL_CTX_add_server_custom_ext() adds a custom extension for a TLS/DTLS server with extension type ext_type and callbacks add_cb, free_cb and parse_cb. This function is similar to SSL_CTX_add_custom_ext() except it only applies to servers, uses the older style of callbacks, and implicitly sets the context value to the same as for SSL_CTX_add_client_custom_ext() above.

+ +

The ext_type parameter corresponds to the extension_type field of RFC5246 et al. It is not a NID. In all cases the extension type must not be handled by OpenSSL internally or an error occurs.

+ +

SSL_extension_supported() returns 1 if the extension ext_type is handled internally by OpenSSL and 0 otherwise.

+ +

EXTENSION CALLBACKS

+ +

The callback add_cb is called to send custom extension data to be included in various TLS messages. The ext_type parameter is set to the extension type which will be added and add_arg to the value set when the extension handler was added. When using the new style callbacks the context parameter will indicate which message is currently being constructed e.g. for the ClientHello it will be set to SSL_EXT_CLIENT_HELLO.

+ +

If the application wishes to include the extension ext_type it should set *out to the extension data, set *outlen to the length of the extension data and return 1.

+ +

If the add_cb does not wish to include the extension it must return 0.

+ +

If add_cb returns -1 a fatal handshake error occurs using the TLS alert value specified in *al.

+ +

When constructing the ClientHello, if add_cb is set to NULL a zero length extension is added for ext_type. For all other messages if add_cb is set to NULL then no extension is added.

+ +

When constructing a Certificate message the callback will be called for each certificate in the message. The x parameter will indicate the current certificate and the chainidx parameter will indicate the position of the certificate in the message. The first certificate is always the end entity certificate and has a chainidx value of 0. The certificates are in the order that they were received in the Certificate message.

+ +

For all messages except the ServerHello and EncryptedExtensions every registered add_cb is always called to see if the application wishes to add an extension (as long as all requirements of the specified context are met).

+ +

For the ServerHello and EncryptedExtension messages every registered add_cb is called once if and only if the requirements of the specified context are met and the corresponding extension was received in the ClientHello. That is, if no corresponding extension was received in the ClientHello then add_cb will not be called.

+ +

If an extension is added (that is add_cb returns 1) free_cb is called (if it is set) with the value of out set by the add callback. It can be used to free up any dynamic extension data set by add_cb. Since out is constant (to permit use of constant data in add_cb) applications may need to cast away const to free the data.

+ +

The callback parse_cb receives data for TLS extensions. The callback is only called if the extension is present and relevant for the context (see "EXTENSION CONTEXTS" below).

+ +

The extension data consists of inlen bytes in the buffer in for the extension ext_type.

+ +

If the message being parsed is a TLSv1.3 compatible Certificate message then parse_cb will be called for each certificate contained within the message. The x parameter will indicate the current certificate and the chainidx parameter will indicate the position of the certificate in the message. The first certificate is always the end entity certificate and has a chainidx value of 0.

+ +

If the parse_cb considers the extension data acceptable it must return 1. If it returns 0 or a negative value a fatal handshake error occurs using the TLS alert value specified in *al.

+ +

The buffer in is a temporary internal buffer which will not be valid after the callback returns.

+ +

EXTENSION CONTEXTS

+ +

An extension context defines which messages and under which conditions an extension should be added or expected. The context is built up by performing a bitwise OR of multiple pre-defined values together. The valid context values are:

+ +
+ +
SSL_EXT_TLS_ONLY
+
+ +

The extension is only allowed in TLS

+ +
+
SSL_EXT_DTLS_ONLY
+
+ +

The extension is only allowed in DTLS

+ +
+
SSL_EXT_TLS_IMPLEMENTATION_ONLY
+
+ +

The extension is allowed in DTLS, but there is only a TLS implementation available (so it is ignored in DTLS).

+ +
+
SSL_EXT_SSL3_ALLOWED
+
+ +

Extensions are not typically defined for SSLv3. Setting this value will allow the extension in SSLv3. Applications will not typically need to use this.

+ +
+
SSL_EXT_TLS1_2_AND_BELOW_ONLY
+
+ +

The extension is only defined for TLSv1.2/DTLSv1.2 and below. Servers will ignore this extension if it is present in the ClientHello and TLSv1.3 is negotiated.

+ +
+
SSL_EXT_TLS1_3_ONLY
+
+ +

The extension is only defined for TLS1.3 and above. Servers will ignore this extension if it is present in the ClientHello and TLSv1.2 or below is negotiated.

+ +
+
SSL_EXT_IGNORE_ON_RESUMPTION
+
+ +

The extension will be ignored during parsing if a previous session is being successfully resumed.

+ +
+
SSL_EXT_CLIENT_HELLO
+
+ +

The extension may be present in the ClientHello message.

+ +
+
SSL_EXT_TLS1_2_SERVER_HELLO
+
+ +

The extension may be present in a TLSv1.2 or below compatible ServerHello message.

+ +
+
SSL_EXT_TLS1_3_SERVER_HELLO
+
+ +

The extension may be present in a TLSv1.3 compatible ServerHello message.

+ +
+
SSL_EXT_TLS1_3_ENCRYPTED_EXTENSIONS
+
+ +

The extension may be present in an EncryptedExtensions message.

+ +
+
SSL_EXT_TLS1_3_HELLO_RETRY_REQUEST
+
+ +

The extension may be present in a HelloRetryRequest message.

+ +
+
SSL_EXT_TLS1_3_CERTIFICATE
+
+ +

The extension may be present in a TLSv1.3 compatible Certificate message.

+ +
+
SSL_EXT_TLS1_3_NEW_SESSION_TICKET
+
+ +

The extension may be present in a TLSv1.3 compatible NewSessionTicket message.

+ +
+
SSL_EXT_TLS1_3_CERTIFICATE_REQUEST
+
+ +

The extension may be present in a TLSv1.3 compatible CertificateRequest message.

+ +
+
+ +

The context must include at least one message value (otherwise the extension will never be used).

+ +

NOTES

+ +

The add_arg and parse_arg parameters can be set to arbitrary values which will be passed to the corresponding callbacks. They can, for example, be used to store the extension data received in a convenient structure or pass the extension data to be added or freed when adding extensions.

+ +

If the same custom extension type is received multiple times a fatal decode_error alert is sent and the handshake aborts. If a custom extension is received in a ServerHello/EncryptedExtensions message which was not sent in the ClientHello a fatal unsupported_extension alert is sent and the handshake is aborted. The ServerHello/EncryptedExtensions add_cb callback is only called if the corresponding extension was received in the ClientHello. This is compliant with the TLS specifications. This behaviour ensures that each callback is called at most once and that an application can never send unsolicited extensions.

+ +

RETURN VALUES

+ +

SSL_CTX_add_custom_ext(), SSL_CTX_add_client_custom_ext() and SSL_CTX_add_server_custom_ext() return 1 for success and 0 for failure. A failure can occur if an attempt is made to add the same ext_type more than once, if an attempt is made to use an extension type handled internally by OpenSSL or if an internal error occurs (for example a memory allocation failure).

+ +

SSL_extension_supported() returns 1 if the extension ext_type is handled internally by OpenSSL and 0 otherwise.

+ +

HISTORY

+ +

The SSL_CTX_add_custom_ext() function was added in OpenSSL 1.1.1.

+ +

COPYRIGHT

+ +

Copyright 2014-2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_free.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_free.html new file mode 100644 index 00000000..6f1ce82a --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_free.html @@ -0,0 +1,60 @@ + + + + +SSL_free + + + + + + + + + + +

NAME

+ +

SSL_free - free an allocated SSL structure

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+void SSL_free(SSL *ssl);
+ +

DESCRIPTION

+ +

SSL_free() decrements the reference count of ssl, and removes the SSL structure pointed to by ssl and frees up the allocated memory if the reference count has reached 0. If ssl is NULL nothing is done.

+ +

NOTES

+ +

SSL_free() also calls the free()ing procedures for indirectly affected items, if applicable: the buffering BIO, the read and write BIOs, cipher lists specially created for this ssl, the SSL_SESSION. Do not explicitly free these indirectly freed up items before or after calling SSL_free(), as trying to free things twice may lead to program failure.

+ +

The ssl session has reference counts from two users: the SSL object, for which the reference count is removed by SSL_free() and the internal session cache. If the session is considered bad, because SSL_shutdown(3) was not called for the connection and SSL_set_shutdown(3) was not used to set the SSL_SENT_SHUTDOWN state, the session will also be removed from the session cache as required by RFC2246.

+ +

RETURN VALUES

+ +

SSL_free() does not provide diagnostic information.

+ +

SSL_new(3), SSL_clear(3), SSL_shutdown(3), SSL_set_shutdown(3), ssl(7)

+ +

COPYRIGHT

+ +

Copyright 2000-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get0_peer_scts.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get0_peer_scts.html new file mode 100644 index 00000000..79b3c2f7 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get0_peer_scts.html @@ -0,0 +1,61 @@ + + + + +SSL_get0_peer_scts + + + + + + + + + + +

NAME

+ +

SSL_get0_peer_scts - get SCTs received

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+const STACK_OF(SCT) *SSL_get0_peer_scts(SSL *s);
+ +

DESCRIPTION

+ +

SSL_get0_peer_scts() returns the signed certificate timestamps (SCTs) that have been received. If this is the first time that this function has been called for a given SSL instance, it will examine the TLS extensions, OCSP response and the peer's certificate for SCTs. Future calls will return the same SCTs.

+ +

RESTRICTIONS

+ +

If no Certificate Transparency validation callback has been set (using SSL_CTX_set_ct_validation_callback or SSL_set_ct_validation_callback), this function is not guaranteed to return all of the SCTs that the peer is capable of sending.

+ +

RETURN VALUES

+ +

SSL_get0_peer_scts() returns a list of SCTs found, or NULL if an error occurs.

+ +

SEE ALSO

+ +

ssl(7), SSL_CTX_set_ct_validation_callback(3)

+ +

COPYRIGHT

+ +

Copyright 2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_SSL_CTX.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_SSL_CTX.html new file mode 100644 index 00000000..b5248a68 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_SSL_CTX.html @@ -0,0 +1,56 @@ + + + + +SSL_get_SSL_CTX + + + + + + + + + + +

NAME

+ +

SSL_get_SSL_CTX - get the SSL_CTX from which an SSL is created

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+SSL_CTX *SSL_get_SSL_CTX(const SSL *ssl);
+ +

DESCRIPTION

+ +

SSL_get_SSL_CTX() returns a pointer to the SSL_CTX object, from which ssl was created with SSL_new(3).

+ +

RETURN VALUES

+ +

The pointer to the SSL_CTX object is returned.

+ +

SEE ALSO

+ +

ssl(7), SSL_new(3)

+ +

COPYRIGHT

+ +

Copyright 2001-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_all_async_fds.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_all_async_fds.html new file mode 100644 index 00000000..45d50898 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_all_async_fds.html @@ -0,0 +1,76 @@ + + + + +SSL_get_all_async_fds + + + + + + + + + + +

NAME

+ +

SSL_waiting_for_async, SSL_get_all_async_fds, SSL_get_changed_async_fds - manage asynchronous operations

+ +

SYNOPSIS

+ +
#include <openssl/async.h>
+#include <openssl/ssl.h>
+
+int SSL_waiting_for_async(SSL *s);
+int SSL_get_all_async_fds(SSL *s, OSSL_ASYNC_FD *fd, size_t *numfds);
+int SSL_get_changed_async_fds(SSL *s, OSSL_ASYNC_FD *addfd, size_t *numaddfds,
+                              OSSL_ASYNC_FD *delfd, size_t *numdelfds);
+ +

DESCRIPTION

+ +

SSL_waiting_for_async() determines whether an SSL connection is currently waiting for asynchronous operations to complete (see the SSL_MODE_ASYNC mode in SSL_CTX_set_mode(3)).

+ +

SSL_get_all_async_fds() returns a list of file descriptor which can be used in a call to select() or poll() to determine whether the current asynchronous operation has completed or not. A completed operation will result in data appearing as "read ready" on the file descriptor (no actual data should be read from the file descriptor). This function should only be called if the SSL object is currently waiting for asynchronous work to complete (i.e. SSL_ERROR_WANT_ASYNC has been received - see SSL_get_error(3)). Typically the list will only contain one file descriptor. However if multiple asynchronous capable engines are in use then more than one is possible. The number of file descriptors returned is stored in *numfds and the file descriptors themselves are in *fds. The fds parameter may be NULL in which case no file descriptors are returned but *numfds is still populated. It is the callers responsibility to ensure sufficient memory is allocated at *fds so typically this function is called twice (once with a NULL fds parameter and once without).

+ +

SSL_get_changed_async_fds() returns a list of the asynchronous file descriptors that have been added and a list that have been deleted since the last SSL_ERROR_WANT_ASYNC was received (or since the SSL object was created if no SSL_ERROR_WANT_ASYNC has been received). Similar to SSL_get_all_async_fds() it is the callers responsibility to ensure that *addfd and *delfd have sufficient memory allocated, although they may be NULL. The number of added fds and the number of deleted fds are stored in *numaddfds and *numdelfds respectively.

+ +

RETURN VALUES

+ +

SSL_waiting_for_async() will return 1 if the current SSL operation is waiting for an async operation to complete and 0 otherwise.

+ +

SSL_get_all_async_fds() and SSL_get_changed_async_fds() return 1 on success or 0 on error.

+ +

NOTES

+ +

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 it is defined as an application developer's responsibility to include windows.h prior to async.h.

+ +

SEE ALSO

+ +

SSL_get_error(3), SSL_CTX_set_mode(3)

+ +

HISTORY

+ +

The SSL_waiting_for_async(), SSL_get_all_async_fds() and SSL_get_changed_async_fds() functions were added in OpenSSL 1.1.0.

+ +

COPYRIGHT

+ +

Copyright 2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_ciphers.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_ciphers.html new file mode 100644 index 00000000..2339ce7e --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_ciphers.html @@ -0,0 +1,89 @@ + + + + +SSL_get_ciphers + + + + + + + + + + +

NAME

+ +

SSL_get1_supported_ciphers, SSL_get_client_ciphers, SSL_get_ciphers, SSL_CTX_get_ciphers, SSL_bytes_to_cipher_list, SSL_get_cipher_list, SSL_get_shared_ciphers - get list of available SSL_CIPHERs

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+STACK_OF(SSL_CIPHER) *SSL_get_ciphers(const SSL *ssl);
+STACK_OF(SSL_CIPHER) *SSL_CTX_get_ciphers(const SSL_CTX *ctx);
+STACK_OF(SSL_CIPHER) *SSL_get1_supported_ciphers(SSL *s);
+STACK_OF(SSL_CIPHER) *SSL_get_client_ciphers(const SSL *ssl);
+int SSL_bytes_to_cipher_list(SSL *s, const unsigned char *bytes, size_t len,
+                             int isv2format, STACK_OF(SSL_CIPHER) **sk,
+                             STACK_OF(SSL_CIPHER) **scsvs);
+const char *SSL_get_cipher_list(const SSL *ssl, int priority);
+char *SSL_get_shared_ciphers(const SSL *s, char *buf, int size);
+ +

DESCRIPTION

+ +

SSL_get_ciphers() returns the stack of available SSL_CIPHERs for ssl, sorted by preference. If ssl is NULL or no ciphers are available, NULL is returned.

+ +

SSL_CTX_get_ciphers() returns the stack of available SSL_CIPHERs for ctx.

+ +

SSL_get1_supported_ciphers() returns the stack of enabled SSL_CIPHERs for ssl as would be sent in a ClientHello (that is, sorted by preference). The list depends on settings like the cipher list, the supported protocol versions, the security level, and the enabled signature algorithms. SRP and PSK ciphers are only enabled if the appropriate callbacks or settings have been applied. The list of ciphers that would be sent in a ClientHello can differ from the list of ciphers that would be acceptable when acting as a server. For example, additional ciphers may be usable by a server if there is a gap in the list of supported protocols, and some ciphers may not be usable by a server if there is not a suitable certificate configured. If ssl is NULL or no ciphers are available, NULL is returned.

+ +

SSL_get_client_ciphers() returns the stack of available SSL_CIPHERs matching the list received from the client on ssl. If ssl is NULL, no ciphers are available, or ssl is not operating in server mode, NULL is returned.

+ +

SSL_bytes_to_cipher_list() treats the supplied len octets in bytes as a wire-protocol cipher suite specification (in the three-octet-per-cipher SSLv2 wire format if isv2format is nonzero; otherwise the two-octet SSLv3/TLS wire format), and parses the cipher suites supported by the library into the returned stacks of SSL_CIPHER objects sk and Signalling Cipher-Suite Values scsvs. Unsupported cipher suites are ignored. Returns 1 on success and 0 on failure.

+ +

SSL_get_cipher_list() returns a pointer to the name of the SSL_CIPHER listed for ssl with priority. If ssl is NULL, no ciphers are available, or there are less ciphers than priority available, NULL is returned.

+ +

SSL_get_shared_ciphers() creates a colon separated and NUL terminated list of SSL_CIPHER names that are available in both the client and the server. buf is the buffer that should be populated with the list of names and size is the size of that buffer. A pointer to buf is returned on success or NULL on error. If the supplied buffer is not large enough to contain the complete list of names then a truncated list of names will be returned. Note that just because a ciphersuite is available (i.e. it is configured in the cipher list) and shared by both the client and the server it does not mean that it is enabled (see the description of SSL_get1_supported_ciphers() above). This function will return available shared ciphersuites whether or not they are enabled. This is a server side function only and must only be called after the completion of the initial handshake.

+ +

NOTES

+ +

The details of the ciphers obtained by SSL_get_ciphers(), SSL_CTX_get_ciphers() SSL_get1_supported_ciphers() and SSL_get_client_ciphers() can be obtained using the SSL_CIPHER_get_name(3) family of functions.

+ +

Call SSL_get_cipher_list() with priority starting from 0 to obtain the sorted list of available ciphers, until NULL is returned.

+ +

Note: SSL_get_ciphers(), SSL_CTX_get_ciphers() and SSL_get_client_ciphers() return a pointer to an internal cipher stack, which will be freed later on when the SSL or SSL_SESSION object is freed. Therefore, the calling code MUST NOT free the return value itself.

+ +

The stack returned by SSL_get1_supported_ciphers() should be freed using sk_SSL_CIPHER_free().

+ +

The stacks returned by SSL_bytes_to_cipher_list() should be freed using sk_SSL_CIPHER_free().

+ +

RETURN VALUES

+ +

See DESCRIPTION

+ +

SEE ALSO

+ +

ssl(7), SSL_CTX_set_cipher_list(3), SSL_CIPHER_get_name(3)

+ +

COPYRIGHT

+ +

Copyright 2000-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_client_random.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_client_random.html new file mode 100644 index 00000000..f1240106 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_client_random.html @@ -0,0 +1,84 @@ + + + + +SSL_get_client_random + + + + + + + + + + +

NAME

+ +

SSL_get_client_random, SSL_get_server_random, SSL_SESSION_get_master_key, SSL_SESSION_set1_master_key - get internal TLS/SSL random values and get/set master key

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+size_t SSL_get_client_random(const SSL *ssl, unsigned char *out, size_t outlen);
+size_t SSL_get_server_random(const SSL *ssl, unsigned char *out, size_t outlen);
+size_t SSL_SESSION_get_master_key(const SSL_SESSION *session,
+                                  unsigned char *out, size_t outlen);
+int SSL_SESSION_set1_master_key(SSL_SESSION *sess, const unsigned char *in,
+                                size_t len);
+ +

DESCRIPTION

+ +

SSL_get_client_random() extracts the random value sent from the client to the server during the initial SSL/TLS handshake. It copies as many bytes as it can of this value into the buffer provided in out, which must have at least outlen bytes available. It returns the total number of bytes that were actually copied. If outlen is zero, SSL_get_client_random() copies nothing, and returns the total size of the client_random value.

+ +

SSL_get_server_random() behaves the same, but extracts the random value sent from the server to the client during the initial SSL/TLS handshake.

+ +

SSL_SESSION_get_master_key() behaves the same, but extracts the master secret used to guarantee the security of the SSL/TLS session. This one can be dangerous if misused; see NOTES below.

+ +

SSL_SESSION_set1_master_key() sets the master key value associated with the SSL_SESSION sess. For example, this could be used to set up a session based PSK (see SSL_CTX_set_psk_use_session_callback(3)). The master key of length len should be provided at in. The supplied master key is copied by the function, so the caller is responsible for freeing and cleaning any memory associated with in. The caller must ensure that the length of the key is suitable for the ciphersuite associated with the SSL_SESSION.

+ +

NOTES

+ +

You probably shouldn't use these functions.

+ +

These functions expose internal values from the TLS handshake, for use in low-level protocols. You probably should not use them, unless you are implementing something that needs access to the internal protocol details.

+ +

Despite the names of SSL_get_client_random() and SSL_get_server_random(), they ARE NOT random number generators. Instead, they return the mostly-random values that were already generated and used in the TLS protocol. Using them in place of RAND_bytes() would be grossly foolish.

+ +

The security of your TLS session depends on keeping the master key secret: do not expose it, or any information about it, to anybody. If you need to calculate another secret value that depends on the master secret, you should probably use SSL_export_keying_material() instead, and forget that you ever saw these functions.

+ +

In current versions of the TLS protocols, the length of client_random (and also server_random) is always SSL3_RANDOM_SIZE bytes. Support for other outlen arguments to the SSL_get_*_random() functions is provided in case of the unlikely event that a future version or variant of TLS uses some other length there.

+ +

Finally, though the "client_random" and "server_random" values are called "random", many TLS implementations will generate four bytes of those values based on their view of the current time.

+ +

RETURN VALUES

+ +

SSL_SESSION_set1_master_key() returns 1 on success or 0 on failure.

+ +

For the other functions, if outlen is greater than 0 then these functions return the number of bytes actually copied, which will be less than or equal to outlen. If outlen is 0 then these functions return the maximum number of bytes they would copy -- that is, the length of the underlying field.

+ +

SEE ALSO

+ +

ssl(7), RAND_bytes(3), SSL_export_keying_material(3), SSL_CTX_set_psk_use_session_callback(3)

+ +

COPYRIGHT

+ +

Copyright 2015-2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_current_cipher.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_current_cipher.html new file mode 100644 index 00000000..68b82824 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_current_cipher.html @@ -0,0 +1,73 @@ + + + + +SSL_get_current_cipher + + + + + + + + + + +

NAME

+ +

SSL_get_current_cipher, SSL_get_cipher_name, SSL_get_cipher, SSL_get_cipher_bits, SSL_get_cipher_version, SSL_get_pending_cipher - get SSL_CIPHER of a connection

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+SSL_CIPHER *SSL_get_current_cipher(const SSL *ssl);
+SSL_CIPHER *SSL_get_pending_cipher(const SSL *ssl);
+
+const char *SSL_get_cipher_name(const SSL *s);
+const char *SSL_get_cipher(const SSL *s);
+int SSL_get_cipher_bits(const SSL *s, int *np);
+const char *SSL_get_cipher_version(const SSL *s);
+ +

DESCRIPTION

+ +

SSL_get_current_cipher() returns a pointer to an SSL_CIPHER object containing the description of the actually used cipher of a connection established with the ssl object. See SSL_CIPHER_get_name(3) for more details.

+ +

SSL_get_cipher_name() obtains the name of the currently used cipher. SSL_get_cipher() is identical to SSL_get_cipher_name(). SSL_get_cipher_bits() is a macro to obtain the number of secret/algorithm bits used and SSL_get_cipher_version() returns the protocol name.

+ +

SSL_get_pending_cipher() returns a pointer to an SSL_CIPHER object containing the description of the cipher (if any) that has been negotiated for future use on the connection established with the ssl object, but is not yet in use. This may be the case during handshake processing, when control flow can be returned to the application via any of several callback methods. The internal sequencing of handshake processing and callback invocation is not guaranteed to be stable from release to release, and at present only the callback set by SSL_CTX_set_alpn_select_cb() is guaranteed to have a non-NULL return value. Other callbacks may be added to this list over time.

+ +

RETURN VALUES

+ +

SSL_get_current_cipher() returns the cipher actually used, or NULL if no session has been established.

+ +

SSL_get_pending_cipher() returns the cipher to be used at the next change of cipher suite, or NULL if no such cipher is known.

+ +

NOTES

+ +

SSL_get_cipher, SSL_get_cipher_bits, SSL_get_cipher_version, and SSL_get_cipher_name are implemented as macros.

+ +

SEE ALSO

+ +

ssl(7), SSL_CIPHER_get_name(3)

+ +

COPYRIGHT

+ +

Copyright 2000-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_default_timeout.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_default_timeout.html new file mode 100644 index 00000000..7992f3a1 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_default_timeout.html @@ -0,0 +1,63 @@ + + + + +SSL_get_default_timeout + + + + + + + + + + +

NAME

+ +

SSL_get_default_timeout - get default session timeout value

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+long SSL_get_default_timeout(const SSL *ssl);
+ +

DESCRIPTION

+ +

SSL_get_default_timeout() returns the default timeout value assigned to SSL_SESSION objects negotiated for the protocol valid for ssl.

+ +

NOTES

+ +

Whenever a new session is negotiated, it is assigned a timeout value, after which it will not be accepted for session reuse. If the timeout value was not explicitly set using SSL_CTX_set_timeout(3), the hardcoded default timeout for the protocol will be used.

+ +

SSL_get_default_timeout() return this hardcoded value, which is 300 seconds for all currently supported protocols.

+ +

RETURN VALUES

+ +

See description.

+ +

SEE ALSO

+ +

ssl(7), SSL_CTX_set_session_cache_mode(3), SSL_SESSION_get_time(3), SSL_CTX_flush_sessions(3), SSL_get_default_timeout(3)

+ +

COPYRIGHT

+ +

Copyright 2001-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_error.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_error.html new file mode 100644 index 00000000..20adf416 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_error.html @@ -0,0 +1,150 @@ + + + + +SSL_get_error + + + + + + + + + + +

NAME

+ +

SSL_get_error - obtain result code for TLS/SSL I/O operation

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+int SSL_get_error(const SSL *ssl, int ret);
+ +

DESCRIPTION

+ +

SSL_get_error() returns a result code (suitable for the C "switch" statement) for a preceding call to SSL_connect(), SSL_accept(), SSL_do_handshake(), SSL_read_ex(), SSL_read(), SSL_peek_ex(), SSL_peek(), SSL_shutdown(), SSL_write_ex() or SSL_write() on ssl. The value returned by that TLS/SSL I/O function must be passed to SSL_get_error() in parameter ret.

+ +

In addition to ssl and ret, SSL_get_error() inspects the current thread's OpenSSL error queue. Thus, SSL_get_error() must be used in the same thread that performed the TLS/SSL I/O operation, and no other OpenSSL function calls should appear in between. The current thread's error queue must be empty before the TLS/SSL I/O operation is attempted, or SSL_get_error() will not work reliably.

+ +

RETURN VALUES

+ +

The following return values can currently occur:

+ +
+ +
SSL_ERROR_NONE
+
+ +

The TLS/SSL I/O operation completed. This result code is returned if and only if ret > 0.

+ +
+
SSL_ERROR_ZERO_RETURN
+
+ +

The TLS/SSL peer has closed the connection for writing by sending the close_notify alert. No more data can be read. Note that SSL_ERROR_ZERO_RETURN does not necessarily indicate that the underlying transport has been closed.

+ +
+
SSL_ERROR_WANT_READ, SSL_ERROR_WANT_WRITE
+
+ +

The operation did not complete and can be retried later.

+ +

SSL_ERROR_WANT_READ is returned when the last operation was a read operation from a non-blocking BIO. It means that not enough data was available at this time to complete the operation. If at a later time the underlying BIO has data available for reading the same function can be called again.

+ +

SSL_read() and SSL_read_ex() can also set SSL_ERROR_WANT_READ when there is still unprocessed data available at either the SSL or the BIO layer, even for a blocking BIO. See SSL_read(3) for more information.

+ +

SSL_ERROR_WANT_WRITE is returned when the last operation was a write to a non-blocking BIO and it was unable to sent all data to the BIO. When the BIO is writeable again, the same function can be called again.

+ +

Note that the retry may again lead to an SSL_ERROR_WANT_READ or SSL_ERROR_WANT_WRITE condition. There is no fixed upper limit for the number of iterations that may be necessary until progress becomes visible at application protocol level.

+ +

It is safe to call SSL_read() or SSL_read_ex() when more data is available even when the call that set this error was an SSL_write() or SSL_write_ex(). However if the call was an SSL_write() or SSL_write_ex(), it should be called again to continue sending the application data.

+ +

For socket BIOs (e.g. when SSL_set_fd() was used), select() or poll() on the underlying socket can be used to find out when the TLS/SSL I/O function should be retried.

+ +

Caveat: Any TLS/SSL I/O function can lead to either of SSL_ERROR_WANT_READ and SSL_ERROR_WANT_WRITE. In particular, SSL_read_ex(), SSL_read(), SSL_peek_ex(), or SSL_peek() may want to write data and SSL_write() or SSL_write_ex() may want to read data. This is mainly because TLS/SSL handshakes may occur at any time during the protocol (initiated by either the client or the server); SSL_read_ex(), SSL_read(), SSL_peek_ex(), SSL_peek(), SSL_write_ex(), and SSL_write() will handle any pending handshakes.

+ +
+
SSL_ERROR_WANT_CONNECT, SSL_ERROR_WANT_ACCEPT
+
+ +

The operation did not complete; the same TLS/SSL I/O function should be called again later. The underlying BIO was not connected yet to the peer and the call would block in connect()/accept(). The SSL function should be called again when the connection is established. These messages can only appear with a BIO_s_connect() or BIO_s_accept() BIO, respectively. In order to find out, when the connection has been successfully established, on many platforms select() or poll() for writing on the socket file descriptor can be used.

+ +
+
SSL_ERROR_WANT_X509_LOOKUP
+
+ +

The operation did not complete because an application callback set by SSL_CTX_set_client_cert_cb() has asked to be called again. The TLS/SSL I/O function should be called again later. Details depend on the application.

+ +
+
SSL_ERROR_WANT_ASYNC
+
+ +

The operation did not complete because an asynchronous engine is still processing data. This will only occur if the mode has been set to SSL_MODE_ASYNC using SSL_CTX_set_mode(3) or SSL_set_mode(3) and an asynchronous capable engine is being used. An application can determine whether the engine has completed its processing using select() or poll() on the asynchronous wait file descriptor. This file descriptor is available by calling SSL_get_all_async_fds(3) or SSL_get_changed_async_fds(3). The TLS/SSL I/O function should be called again later. The function must be called from the same thread that the original call was made from.

+ +
+
SSL_ERROR_WANT_ASYNC_JOB
+
+ +

The asynchronous job could not be started because there were no async jobs available in the pool (see ASYNC_init_thread(3)). This will only occur if the mode has been set to SSL_MODE_ASYNC using SSL_CTX_set_mode(3) or SSL_set_mode(3) and a maximum limit has been set on the async job pool through a call to ASYNC_init_thread(3). The application should retry the operation after a currently executing asynchronous operation for the current thread has completed.

+ +
+
SSL_ERROR_WANT_CLIENT_HELLO_CB
+
+ +

The operation did not complete because an application callback set by SSL_CTX_set_client_hello_cb() has asked to be called again. The TLS/SSL I/O function should be called again later. Details depend on the application.

+ +
+
SSL_ERROR_SYSCALL
+
+ +

Some non-recoverable, fatal I/O error occurred. The OpenSSL error queue may contain more information on the error. For socket I/O on Unix systems, consult errno for details. If this error occurs then no further I/O operations should be performed on the connection and SSL_shutdown() must not be called.

+ +

This value can also be returned for other errors, check the error queue for details.

+ +
+
SSL_ERROR_SSL
+
+ +

A non-recoverable, fatal error in the SSL library occurred, usually a protocol error. The OpenSSL error queue contains more information on the error. If this error occurs then no further I/O operations should be performed on the connection and SSL_shutdown() must not be called.

+ +
+
+ +

BUGS

+ +

The SSL_ERROR_SYSCALL with errno value of 0 indicates unexpected EOF from the peer. This will be properly reported as SSL_ERROR_SSL with reason code SSL_R_UNEXPECTED_EOF_WHILE_READING in the OpenSSL 3.0 release because it is truly a TLS protocol error to terminate the connection without a SSL_shutdown().

+ +

The issue is kept unfixed in OpenSSL 1.1.1 releases because many applications which choose to ignore this protocol error depend on the existing way of reporting the error.

+ +

SEE ALSO

+ +

ssl(7)

+ +

HISTORY

+ +

The SSL_ERROR_WANT_ASYNC error code was added in OpenSSL 1.1.0. The SSL_ERROR_WANT_CLIENT_HELLO_CB error code was added in OpenSSL 1.1.1.

+ +

COPYRIGHT

+ +

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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_extms_support.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_extms_support.html new file mode 100644 index 00000000..9b87f203 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_extms_support.html @@ -0,0 +1,58 @@ + + + + +SSL_get_extms_support + + + + + + + + + + +

NAME

+ +

SSL_get_extms_support - extended master secret support

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+int SSL_get_extms_support(SSL *ssl);
+ +

DESCRIPTION

+ +

SSL_get_extms_support() indicates whether the current session used extended master secret.

+ +

This function is implemented as a macro.

+ +

RETURN VALUES

+ +

SSL_get_extms_support() returns 1 if the current session used extended master secret, 0 if it did not and -1 if a handshake is currently in progress i.e. it is not possible to determine if extended master secret was used.

+ +

SEE ALSO

+ +

ssl(7)

+ +

COPYRIGHT

+ +

Copyright 2015-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_fd.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_fd.html new file mode 100644 index 00000000..6f35cc0b --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_fd.html @@ -0,0 +1,74 @@ + + + + +SSL_get_fd + + + + + + + + + + +

NAME

+ +

SSL_get_fd, SSL_get_rfd, SSL_get_wfd - get file descriptor linked to an SSL object

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+int SSL_get_fd(const SSL *ssl);
+int SSL_get_rfd(const SSL *ssl);
+int SSL_get_wfd(const SSL *ssl);
+ +

DESCRIPTION

+ +

SSL_get_fd() returns the file descriptor which is linked to ssl. SSL_get_rfd() and SSL_get_wfd() return the file descriptors for the read or the write channel, which can be different. If the read and the write channel are different, SSL_get_fd() will return the file descriptor of the read channel.

+ +

RETURN VALUES

+ +

The following return values can occur:

+ +
+ +
-1
+
+ +

The operation failed, because the underlying BIO is not of the correct type (suitable for file descriptors).

+ +
+
>=0
+
+ +

The file descriptor linked to ssl.

+ +
+
+ +

SEE ALSO

+ +

SSL_set_fd(3), ssl(7) , bio(7)

+ +

COPYRIGHT

+ +

Copyright 2000-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_peer_cert_chain.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_peer_cert_chain.html new file mode 100644 index 00000000..85c6b1e7 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_peer_cert_chain.html @@ -0,0 +1,84 @@ + + + + +SSL_get_peer_cert_chain + + + + + + + + + + +

NAME

+ +

SSL_get_peer_cert_chain, SSL_get0_verified_chain - get the X509 certificate chain of the peer

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+STACK_OF(X509) *SSL_get_peer_cert_chain(const SSL *ssl);
+STACK_OF(X509) *SSL_get0_verified_chain(const SSL *ssl);
+ +

DESCRIPTION

+ +

SSL_get_peer_cert_chain() returns a pointer to STACK_OF(X509) certificates forming the certificate chain sent by the peer. If called on the client side, the stack also contains the peer's certificate; if called on the server side, the peer's certificate must be obtained separately using SSL_get_peer_certificate(3). If the peer did not present a certificate, NULL is returned.

+ +

NB: SSL_get_peer_cert_chain() returns the peer chain as sent by the peer: it only consists of certificates the peer has sent (in the order the peer has sent them) it is not a verified chain.

+ +

SSL_get0_verified_chain() returns the verified certificate chain of the peer including the peer's end entity certificate. It must be called after a session has been successfully established. If peer verification was not successful (as indicated by SSL_get_verify_result() not returning X509_V_OK) the chain may be incomplete or invalid.

+ +

NOTES

+ +

If the session is resumed peers do not send certificates so a NULL pointer is returned by these functions. Applications can call SSL_session_reused() to determine whether a session is resumed.

+ +

The reference count of each certificate in the returned STACK_OF(X509) object is not incremented and the returned stack may be invalidated by renegotiation. If applications wish to use any certificates in the returned chain indefinitely they must increase the reference counts using X509_up_ref() or obtain a copy of the whole chain with X509_chain_up_ref().

+ +

RETURN VALUES

+ +

The following return values can occur:

+ +
+ +
NULL
+
+ +

No certificate was presented by the peer or no connection was established or the certificate chain is no longer available when a session is reused.

+ +
+
Pointer to a STACK_OF(X509)
+
+ +

The return value points to the certificate chain presented by the peer.

+ +
+
+ +

SEE ALSO

+ +

ssl(7), SSL_get_peer_certificate(3), X509_up_ref(3), X509_chain_up_ref(3)

+ +

COPYRIGHT

+ +

Copyright 2000-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_peer_certificate.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_peer_certificate.html new file mode 100644 index 00000000..66a533dc --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_peer_certificate.html @@ -0,0 +1,81 @@ + + + + +SSL_get_peer_certificate + + + + + + + + + + +

NAME

+ +

SSL_get_peer_certificate - get the X509 certificate of the peer

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+X509 *SSL_get_peer_certificate(const SSL *ssl);
+ +

DESCRIPTION

+ +

SSL_get_peer_certificate() returns a pointer to the X509 certificate the peer presented. If the peer did not present a certificate, NULL is returned.

+ +

NOTES

+ +

Due to the protocol definition, a TLS/SSL server will always send a certificate, if present. A client will only send a certificate when explicitly requested to do so by the server (see SSL_CTX_set_verify(3)). If an anonymous cipher is used, no certificates are sent.

+ +

That a certificate is returned does not indicate information about the verification state, use SSL_get_verify_result(3) to check the verification state.

+ +

The reference count of the X509 object is incremented by one, so that it will not be destroyed when the session containing the peer certificate is freed. The X509 object must be explicitly freed using X509_free().

+ +

RETURN VALUES

+ +

The following return values can occur:

+ +
+ +
NULL
+
+ +

No certificate was presented by the peer or no connection was established.

+ +
+
Pointer to an X509 certificate
+
+ +

The return value points to the certificate presented by the peer.

+ +
+
+ +

SEE ALSO

+ +

ssl(7), SSL_get_verify_result(3), SSL_CTX_set_verify(3)

+ +

COPYRIGHT

+ +

Copyright 2000-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_peer_signature_nid.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_peer_signature_nid.html new file mode 100644 index 00000000..d902e54f --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_peer_signature_nid.html @@ -0,0 +1,63 @@ + + + + +SSL_get_peer_signature_nid + + + + + + + + + + +

NAME

+ +

SSL_get_peer_signature_nid, SSL_get_peer_signature_type_nid, SSL_get_signature_nid, SSL_get_signature_type_nid - get TLS message signing types

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+int SSL_get_peer_signature_nid(SSL *ssl, int *psig_nid);
+int SSL_get_peer_signature_type_nid(const SSL *ssl, int *psigtype_nid);
+int SSL_get_signature_nid(SSL *ssl, int *psig_nid);
+int SSL_get_signature_type_nid(const SSL *ssl, int *psigtype_nid);
+ +

DESCRIPTION

+ +

SSL_get_peer_signature_nid() sets *psig_nid to the NID of the digest used by the peer to sign TLS messages. It is implemented as a macro.

+ +

SSL_get_peer_signature_type_nid() sets *psigtype_nid to the signature type used by the peer to sign TLS messages. Currently the signature type is the NID of the public key type used for signing except for PSS signing where it is EVP_PKEY_RSA_PSS. To differentiate between rsa_pss_rsae_* and rsa_pss_pss_* signatures, it's necessary to check the type of public key in the peer's certificate.

+ +

SSL_get_signature_nid() and SSL_get_signature_type_nid() return the equivalent information for the local end of the connection.

+ +

RETURN VALUES

+ +

These functions return 1 for success and 0 for failure. There are several possible reasons for failure: the cipher suite has no signature (e.g. it uses RSA key exchange or is anonymous), the TLS version is below 1.2 or the functions were called too early, e.g. before the peer signed a message.

+ +

SEE ALSO

+ +

ssl(7), SSL_get_peer_certificate(3),

+ +

COPYRIGHT

+ +

Copyright 2017-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_peer_tmp_key.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_peer_tmp_key.html new file mode 100644 index 00000000..0e6bdcce --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_peer_tmp_key.html @@ -0,0 +1,67 @@ + + + + +SSL_get_peer_tmp_key + + + + + + + + + + +

NAME

+ +

SSL_get_peer_tmp_key, SSL_get_server_tmp_key, SSL_get_tmp_key - get information about temporary keys used during a handshake

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+long SSL_get_peer_tmp_key(SSL *ssl, EVP_PKEY **key);
+long SSL_get_server_tmp_key(SSL *ssl, EVP_PKEY **key);
+long SSL_get_tmp_key(SSL *ssl, EVP_PKEY **key);
+ +

DESCRIPTION

+ +

SSL_get_peer_tmp_key() returns the temporary key provided by the peer and used during key exchange. For example, if ECDHE is in use, then this represents the peer's public ECDHE key. On success a pointer to the key is stored in *key. It is the caller's responsibility to free this key after use using EVP_PKEY_free(3).

+ +

SSL_get_server_tmp_key() is a backwards compatibility alias for SSL_get_peer_tmp_key(). Under that name it worked just on the client side of the connection, its behaviour on the server end is release-dependent.

+ +

SSL_get_tmp_key() returns the equivalent information for the local end of the connection.

+ +

RETURN VALUES

+ +

All these functions return 1 on success and 0 otherwise.

+ +

NOTES

+ +

This function is implemented as a macro.

+ +

SEE ALSO

+ +

ssl(7), EVP_PKEY_free(3)

+ +

COPYRIGHT

+ +

Copyright 2017-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_psk_identity.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_psk_identity.html new file mode 100644 index 00000000..11536ec3 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_psk_identity.html @@ -0,0 +1,54 @@ + + + + +SSL_get_psk_identity + + + + + + + + + + +

NAME

+ +

SSL_get_psk_identity, SSL_get_psk_identity_hint - get PSK client identity and hint

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+const char *SSL_get_psk_identity_hint(const SSL *ssl);
+const char *SSL_get_psk_identity(const SSL *ssl);
+ +

DESCRIPTION

+ +

SSL_get_psk_identity_hint() is used to retrieve the PSK identity hint used during the connection setup related to SSL object ssl. Similarly, SSL_get_psk_identity() is used to retrieve the PSK identity used during the connection setup.

+ +

RETURN VALUES

+ +

If non-NULL, SSL_get_psk_identity_hint() returns the PSK identity hint and SSL_get_psk_identity() returns the PSK identity. Both are NULL-terminated. SSL_get_psk_identity_hint() may return NULL if no PSK identity hint was used during the connection setup.

+ +

Note that the return value is valid only during the lifetime of the SSL object ssl.

+ +

COPYRIGHT

+ +

Copyright 2006-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_rbio.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_rbio.html new file mode 100644 index 00000000..94874234 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_rbio.html @@ -0,0 +1,73 @@ + + + + +SSL_get_rbio + + + + + + + + + + +

NAME

+ +

SSL_get_rbio, SSL_get_wbio - get BIO linked to an SSL object

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+BIO *SSL_get_rbio(SSL *ssl);
+BIO *SSL_get_wbio(SSL *ssl);
+ +

DESCRIPTION

+ +

SSL_get_rbio() and SSL_get_wbio() return pointers to the BIOs for the read or the write channel, which can be different. The reference count of the BIO is not incremented.

+ +

RETURN VALUES

+ +

The following return values can occur:

+ +
+ +
NULL
+
+ +

No BIO was connected to the SSL object

+ +
+
Any other pointer
+
+ +

The BIO linked to ssl.

+ +
+
+ +

SEE ALSO

+ +

SSL_set_bio(3), ssl(7) , bio(7)

+ +

COPYRIGHT

+ +

Copyright 2000-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_session.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_session.html new file mode 100644 index 00000000..11f71929 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_session.html @@ -0,0 +1,97 @@ + + + + +SSL_get_session + + + + + + + + + + +

NAME

+ +

SSL_get_session, SSL_get0_session, SSL_get1_session - retrieve TLS/SSL session data

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+SSL_SESSION *SSL_get_session(const SSL *ssl);
+SSL_SESSION *SSL_get0_session(const SSL *ssl);
+SSL_SESSION *SSL_get1_session(SSL *ssl);
+ +

DESCRIPTION

+ +

SSL_get_session() returns a pointer to the SSL_SESSION actually used in ssl. The reference count of the SSL_SESSION is not incremented, so that the pointer can become invalid by other operations.

+ +

SSL_get0_session() is the same as SSL_get_session().

+ +

SSL_get1_session() is the same as SSL_get_session(), but the reference count of the SSL_SESSION is incremented by one.

+ +

NOTES

+ +

The ssl session contains all information required to re-establish the connection without a full handshake for SSL versions up to and including TLSv1.2. In TLSv1.3 the same is true, but sessions are established after the main handshake has occurred. The server will send the session information to the client at a time of its choosing, which may be some while after the initial connection is established (or never). Calling these functions on the client side in TLSv1.3 before the session has been established will still return an SSL_SESSION object but that object cannot be used for resuming the session. See SSL_SESSION_is_resumable(3) for information on how to determine whether an SSL_SESSION object can be used for resumption or not.

+ +

Additionally, in TLSv1.3, a server can send multiple messages that establish a session for a single connection. In that case the above functions will only return information on the last session that was received.

+ +

The preferred way for applications to obtain a resumable SSL_SESSION object is to use a new session callback as described in SSL_CTX_sess_set_new_cb(3). The new session callback is only invoked when a session is actually established, so this avoids the problem described above where an application obtains an SSL_SESSION object that cannot be used for resumption in TLSv1.3. It also enables applications to obtain information about all sessions sent by the server.

+ +

A session will be automatically removed from the session cache and marked as non-resumable if the connection is not closed down cleanly, e.g. if a fatal error occurs on the connection or SSL_shutdown(3) is not called prior to SSL_free(3).

+ +

In TLSv1.3 it is recommended that each SSL_SESSION object is only used for resumption once.

+ +

SSL_get0_session() returns a pointer to the actual session. As the reference counter is not incremented, the pointer is only valid while the connection is in use. If SSL_clear(3) or SSL_free(3) is called, the session may be removed completely (if considered bad), and the pointer obtained will become invalid. Even if the session is valid, it can be removed at any time due to timeout during SSL_CTX_flush_sessions(3).

+ +

If the data is to be kept, SSL_get1_session() will increment the reference count, so that the session will not be implicitly removed by other operations but stays in memory. In order to remove the session SSL_SESSION_free(3) must be explicitly called once to decrement the reference count again.

+ +

SSL_SESSION objects keep internal link information about the session cache list, when being inserted into one SSL_CTX object's session cache. One SSL_SESSION object, regardless of its reference count, must therefore only be used with one SSL_CTX object (and the SSL objects created from this SSL_CTX object).

+ +

RETURN VALUES

+ +

The following return values can occur:

+ +
+ +
NULL
+
+ +

There is no session available in ssl.

+ +
+
Pointer to an SSL_SESSION
+
+ +

The return value points to the data of an SSL session.

+ +
+
+ +

SEE ALSO

+ +

ssl(7), SSL_free(3), SSL_clear(3), SSL_SESSION_free(3)

+ +

COPYRIGHT

+ +

Copyright 2000-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_shared_sigalgs.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_shared_sigalgs.html new file mode 100644 index 00000000..74b0ff11 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_shared_sigalgs.html @@ -0,0 +1,83 @@ + + + + +SSL_get_shared_sigalgs + + + + + + + + + + +

NAME

+ +

SSL_get_shared_sigalgs, SSL_get_sigalgs - get supported signature algorithms

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+int SSL_get_shared_sigalgs(SSL *s, int idx,
+                           int *psign, int *phash, int *psignhash,
+                           unsigned char *rsig, unsigned char *rhash);
+
+int SSL_get_sigalgs(SSL *s, int idx,
+                    int *psign, int *phash, int *psignhash,
+                    unsigned char *rsig, unsigned char *rhash);
+ +

DESCRIPTION

+ +

SSL_get_shared_sigalgs() returns information about the shared signature algorithms supported by peer s. The parameter idx indicates the index of the shared signature algorithm to return starting from zero. The signature algorithm NID is written to *psign, the hash NID to *phash and the sign and hash NID to *psignhash. The raw signature and hash values are written to *rsig and *rhash.

+ +

SSL_get_sigalgs() is similar to SSL_get_shared_sigalgs() except it returns information about all signature algorithms supported by s in the order they were sent by the peer.

+ +

RETURN VALUES

+ +

SSL_get_shared_sigalgs() and SSL_get_sigalgs() return the number of signature algorithms or 0 if the idx parameter is out of range.

+ +

NOTES

+ +

These functions are typically called for debugging purposes (to report the peer's preferences) or where an application wants finer control over certificate selection. Most applications will rely on internal handling and will not need to call them.

+ +

If an application is only interested in the highest preference shared signature algorithm it can just set idx to zero.

+ +

Any or all of the parameters psign, phash, psignhash, rsig or rhash can be set to NULL if the value is not required. By setting them all to NULL and setting idx to zero the total number of signature algorithms can be determined: which can be zero.

+ +

These functions must be called after the peer has sent a list of supported signature algorithms: after a client hello (for servers) or a certificate request (for clients). They can (for example) be called in the certificate callback.

+ +

Only TLS 1.2, TLS 1.3 and DTLS 1.2 currently support signature algorithms. If these functions are called on an earlier version of TLS or DTLS zero is returned.

+ +

The shared signature algorithms returned by SSL_get_shared_sigalgs() are ordered according to configuration and peer preferences.

+ +

The raw values correspond to the on the wire form as defined by RFC5246 et al. The NIDs are OpenSSL equivalents. For example if the peer sent sha256(4) and rsa(1) then *rhash would be 4, *rsign 1, *phash NID_sha256, *psig NID_rsaEncryption and *psighash NID_sha256WithRSAEncryption.

+ +

If a signature algorithm is not recognised the corresponding NIDs will be set to NID_undef. This may be because the value is not supported, is not an appropriate combination (for example MD5 and DSA) or the signature algorithm does not use a hash (for example Ed25519).

+ +

SEE ALSO

+ +

SSL_CTX_set_cert_cb(3), ssl(7)

+ +

COPYRIGHT

+ +

Copyright 2015-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_verify_result.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_verify_result.html new file mode 100644 index 00000000..ef91b1e1 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_verify_result.html @@ -0,0 +1,84 @@ + + + + +SSL_get_verify_result + + + + + + + + + + +

NAME

+ +

SSL_get_verify_result - get result of peer certificate verification

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+long SSL_get_verify_result(const SSL *ssl);
+ +

DESCRIPTION

+ +

SSL_get_verify_result() returns the result of the verification of the X509 certificate presented by the peer, if any.

+ +

NOTES

+ +

SSL_get_verify_result() can only return one error code while the verification of a certificate can fail because of many reasons at the same time. Only the last verification error that occurred during the processing is available from SSL_get_verify_result().

+ +

The verification result is part of the established session and is restored when a session is reused.

+ +

BUGS

+ +

If no peer certificate was presented, the returned result code is X509_V_OK. This is because no verification error occurred, it does however not indicate success. SSL_get_verify_result() is only useful in connection with SSL_get_peer_certificate(3).

+ +

RETURN VALUES

+ +

The following return values can currently occur:

+ +
+ +
X509_V_OK
+
+ +

The verification succeeded or no peer certificate was presented.

+ +
+
Any other value
+
+ +

Documented in verify(1).

+ +
+
+ +

SEE ALSO

+ +

ssl(7), SSL_set_verify_result(3), SSL_get_peer_certificate(3), verify(1)

+ +

COPYRIGHT

+ +

Copyright 2000-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_version.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_version.html new file mode 100644 index 00000000..98f55b6a --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_get_version.html @@ -0,0 +1,145 @@ + + + + +SSL_get_version + + + + + + + + + + +

NAME

+ +

SSL_client_version, SSL_get_version, SSL_is_dtls, SSL_version - get the protocol information of a connection

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+int SSL_client_version(const SSL *s);
+
+const char *SSL_get_version(const SSL *ssl);
+
+int SSL_is_dtls(const SSL *ssl);
+
+int SSL_version(const SSL *s);
+ +

DESCRIPTION

+ +

SSL_client_version() returns the numeric protocol version advertised by the client in the legacy_version field of the ClientHello when initiating the connection. Note that, for TLS, this value will never indicate a version greater than TLSv1.2 even if TLSv1.3 is subsequently negotiated. SSL_get_version() returns the name of the protocol used for the connection. SSL_version() returns the numeric protocol version used for the connection. They should only be called after the initial handshake has been completed. Prior to that the results returned from these functions may be unreliable.

+ +

SSL_is_dtls() returns one if the connection is using DTLS, zero if not.

+ +

RETURN VALUES

+ +

SSL_get_version() returns one of the following strings:

+ +
+ +
SSLv3
+
+ +

The connection uses the SSLv3 protocol.

+ +
+
TLSv1
+
+ +

The connection uses the TLSv1.0 protocol.

+ +
+
TLSv1.1
+
+ +

The connection uses the TLSv1.1 protocol.

+ +
+
TLSv1.2
+
+ +

The connection uses the TLSv1.2 protocol.

+ +
+
TLSv1.3
+
+ +

The connection uses the TLSv1.3 protocol.

+ +
+
unknown
+
+ +

This indicates an unknown protocol version.

+ +
+
+ +

SSL_version() and SSL_client_version() return an integer which could include any of the following:

+ +
+ +
SSL3_VERSION
+
+ +

The connection uses the SSLv3 protocol.

+ +
+
TLS1_VERSION
+
+ +

The connection uses the TLSv1.0 protocol.

+ +
+
TLS1_1_VERSION
+
+ +

The connection uses the TLSv1.1 protocol.

+ +
+
TLS1_2_VERSION
+
+ +

The connection uses the TLSv1.2 protocol.

+ +
+
TLS1_3_VERSION
+
+ +

The connection uses the TLSv1.3 protocol (never returned for SSL_client_version()).

+ +
+
+ +

SEE ALSO

+ +

ssl(7)

+ +

HISTORY

+ +

The SSL_is_dtls() function was added in OpenSSL 1.1.0.

+ +

COPYRIGHT

+ +

Copyright 2001-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_in_init.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_in_init.html new file mode 100644 index 00000000..63fbe249 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_in_init.html @@ -0,0 +1,117 @@ + + + + +SSL_in_init + + + + + + + + + + +

NAME

+ +

SSL_in_before, SSL_in_init, SSL_is_init_finished, SSL_in_connect_init, SSL_in_accept_init, SSL_get_state - retrieve information about the handshake state machine

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+int SSL_in_init(const SSL *s);
+int SSL_in_before(const SSL *s);
+int SSL_is_init_finished(const SSL *s);
+
+int SSL_in_connect_init(SSL *s);
+int SSL_in_accept_init(SSL *s);
+
+OSSL_HANDSHAKE_STATE SSL_get_state(const SSL *ssl);
+ +

DESCRIPTION

+ +

SSL_in_init() returns 1 if the SSL/TLS state machine is currently processing or awaiting handshake messages, or 0 otherwise.

+ +

SSL_in_before() returns 1 if no SSL/TLS handshake has yet been initiated, or 0 otherwise.

+ +

SSL_is_init_finished() returns 1 if the SSL/TLS connection is in a state where fully protected application data can be transferred or 0 otherwise.

+ +

Note that in some circumstances (such as when early data is being transferred) SSL_in_init(), SSL_in_before() and SSL_is_init_finished() can all return 0.

+ +

SSL_in_connect_init() returns 1 if s is acting as a client and SSL_in_init() would return 1, or 0 otherwise.

+ +

SSL_in_accept_init() returns 1 if s is acting as a server and SSL_in_init() would return 1, or 0 otherwise.

+ +

SSL_in_connect_init() and SSL_in_accept_init() are implemented as macros.

+ +

SSL_get_state() returns a value indicating the current state of the handshake state machine. OSSL_HANDSHAKE_STATE is an enumerated type where each value indicates a discrete state machine state. Note that future versions of OpenSSL may define more states so applications should expect to receive unrecognised state values. The naming format is made up of a number of elements as follows:

+ +

protocol_ST_role_message

+ +

protocol is one of TLS or DTLS. DTLS is used where a state is specific to the DTLS protocol. Otherwise TLS is used.

+ +

role is one of CR, CW, SR or SW to indicate "client reading", "client writing", "server reading" or "server writing" respectively.

+ +

message is the name of a handshake message that is being or has been sent, or is being or has been processed.

+ +

Additionally there are some special states that do not conform to the above format. These are:

+ +
+ +
TLS_ST_BEFORE
+
+ +

No handshake messages have yet been been sent or received.

+ +
+
TLS_ST_OK
+
+ +

Handshake message sending/processing has completed.

+ +
+
TLS_ST_EARLY_DATA
+
+ +

Early data is being processed

+ +
+
TLS_ST_PENDING_EARLY_DATA_END
+
+ +

Awaiting the end of early data processing

+ +
+
+ +

RETURN VALUES

+ +

SSL_in_init(), SSL_in_before(), SSL_is_init_finished(), SSL_in_connect_init() and SSL_in_accept_init() return values as indicated above.

+ +

SSL_get_state() returns the current handshake state.

+ +

SEE ALSO

+ +

ssl(7), SSL_read_early_data(3)

+ +

COPYRIGHT

+ +

Copyright 2017-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_key_update.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_key_update.html new file mode 100644 index 00000000..cb6cab6e --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_key_update.html @@ -0,0 +1,86 @@ + + + + +SSL_key_update + + + + + + + + + + +

NAME

+ +

SSL_key_update, SSL_get_key_update_type, SSL_renegotiate, SSL_renegotiate_abbreviated, SSL_renegotiate_pending - initiate and obtain information about updating connection keys

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+int SSL_key_update(SSL *s, int updatetype);
+int SSL_get_key_update_type(const SSL *s);
+
+int SSL_renegotiate(SSL *s);
+int SSL_renegotiate_abbreviated(SSL *s);
+int SSL_renegotiate_pending(const SSL *s);
+ +

DESCRIPTION

+ +

SSL_key_update() schedules an update of the keys for the current TLS connection. If the updatetype parameter is set to SSL_KEY_UPDATE_NOT_REQUESTED then the sending keys for this connection will be updated and the peer will be informed of the change. If the updatetype parameter is set to SSL_KEY_UPDATE_REQUESTED then the sending keys for this connection will be updated and the peer will be informed of the change along with a request for the peer to additionally update its sending keys. It is an error if updatetype is set to SSL_KEY_UPDATE_NONE.

+ +

SSL_key_update() must only be called after the initial handshake has been completed and TLSv1.3 has been negotiated. The key update will not take place until the next time an IO operation such as SSL_read_ex() or SSL_write_ex() takes place on the connection. Alternatively SSL_do_handshake() can be called to force the update to take place immediately.

+ +

SSL_get_key_update_type() can be used to determine whether a key update operation has been scheduled but not yet performed. The type of the pending key update operation will be returned if there is one, or SSL_KEY_UPDATE_NONE otherwise.

+ +

SSL_renegotiate() and SSL_renegotiate_abbreviated() should only be called for connections that have negotiated TLSv1.2 or less. Calling them on any other connection will result in an error.

+ +

When called from the client side, SSL_renegotiate() schedules a completely new handshake over an existing SSL/TLS connection. The next time an IO operation such as SSL_read_ex() or SSL_write_ex() takes place on the connection a check will be performed to confirm that it is a suitable time to start a renegotiation. If so, then it will be initiated immediately. OpenSSL will not attempt to resume any session associated with the connection in the new handshake.

+ +

When called from the client side, SSL_renegotiate_abbreviated() works in the same was as SSL_renegotiate() except that OpenSSL will attempt to resume the session associated with the current connection in the new handshake.

+ +

When called from the server side, SSL_renegotiate() and SSL_renegotiate_abbreviated() behave identically. They both schedule a request for a new handshake to be sent to the client. The next time an IO operation is performed then the same checks as on the client side are performed and then, if appropriate, the request is sent. The client may or may not respond with a new handshake and it may or may not attempt to resume an existing session. If a new handshake is started then this will be handled transparently by calling any OpenSSL IO function.

+ +

If an OpenSSL client receives a renegotiation request from a server then again this will be handled transparently through calling any OpenSSL IO function. For a TLS connection the client will attempt to resume the current session in the new handshake. For historical reasons, DTLS clients will not attempt to resume the session in the new handshake.

+ +

The SSL_renegotiate_pending() function returns 1 if a renegotiation or renegotiation request has been scheduled but not yet acted on, or 0 otherwise.

+ +

RETURN VALUES

+ +

SSL_key_update(), SSL_renegotiate() and SSL_renegotiate_abbreviated() return 1 on success or 0 on error.

+ +

SSL_get_key_update_type() returns the update type of the pending key update operation or SSL_KEY_UPDATE_NONE if there is none.

+ +

SSL_renegotiate_pending() returns 1 if a renegotiation or renegotiation request has been scheduled but not yet acted on, or 0 otherwise.

+ +

SEE ALSO

+ +

ssl(7), SSL_read_ex(3), SSL_write_ex(3), SSL_do_handshake(3)

+ +

HISTORY

+ +

The SSL_key_update() and SSL_get_key_update_type() functions were added in OpenSSL 1.1.1.

+ +

COPYRIGHT

+ +

Copyright 2017-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_library_init.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_library_init.html new file mode 100644 index 00000000..e3828037 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_library_init.html @@ -0,0 +1,75 @@ + + + + +SSL_library_init + + + + + + + + + + +

NAME

+ +

SSL_library_init, OpenSSL_add_ssl_algorithms - initialize SSL library by registering algorithms

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+int SSL_library_init(void);
+
+int OpenSSL_add_ssl_algorithms(void);
+ +

DESCRIPTION

+ +

SSL_library_init() registers the available SSL/TLS ciphers and digests.

+ +

OpenSSL_add_ssl_algorithms() is a synonym for SSL_library_init() and is implemented as a macro.

+ +

NOTES

+ +

SSL_library_init() must be called before any other action takes place. SSL_library_init() is not reentrant.

+ +

WARNINGS

+ +

SSL_library_init() adds ciphers and digests used directly and indirectly by SSL/TLS.

+ +

RETURN VALUES

+ +

SSL_library_init() always returns "1", so it is safe to discard the return value.

+ +

SEE ALSO

+ +

ssl(7), RAND_add(3)

+ +

HISTORY

+ +

The SSL_library_init() and OpenSSL_add_ssl_algorithms() functions were deprecated in OpenSSL 1.1.0 by OPENSSL_init_ssl().

+ +

COPYRIGHT

+ +

Copyright 2000-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_load_client_CA_file.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_load_client_CA_file.html new file mode 100644 index 00000000..084b903c --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_load_client_CA_file.html @@ -0,0 +1,102 @@ + + + + +SSL_load_client_CA_file + + + + + + + + + + +

NAME

+ +

SSL_load_client_CA_file, SSL_add_file_cert_subjects_to_stack, SSL_add_dir_cert_subjects_to_stack - load certificate names

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+STACK_OF(X509_NAME) *SSL_load_client_CA_file(const char *file);
+
+int SSL_add_file_cert_subjects_to_stack(STACK_OF(X509_NAME) *stack,
+                                        const char *file)
+int SSL_add_dir_cert_subjects_to_stack(STACK_OF(X509_NAME) *stack,
+                                       const char *dir)
+ +

DESCRIPTION

+ +

SSL_load_client_CA_file() reads certificates from file and returns a STACK_OF(X509_NAME) with the subject names found.

+ +

SSL_add_file_cert_subjects_to_stack() reads certificates from file, and adds their subject name to the already existing stack.

+ +

SSL_add_dir_cert_subjects_to_stack() reads certificates from every file in the directory dir, and adds their subject name to the already existing stack.

+ +

NOTES

+ +

SSL_load_client_CA_file() reads a file of PEM formatted certificates and extracts the X509_NAMES of the certificates found. While the name suggests the specific usage as support function for SSL_CTX_set_client_CA_list(3), it is not limited to CA certificates.

+ +

RETURN VALUES

+ +

The following return values can occur:

+ +
+ +
NULL
+
+ +

The operation failed, check out the error stack for the reason.

+ +
+
Pointer to STACK_OF(X509_NAME)
+
+ +

Pointer to the subject names of the successfully read certificates.

+ +
+
+ +

EXAMPLES

+ +

Load names of CAs from file and use it as a client CA list:

+ +
SSL_CTX *ctx;
+STACK_OF(X509_NAME) *cert_names;
+
+...
+cert_names = SSL_load_client_CA_file("/path/to/CAfile.pem");
+if (cert_names != NULL)
+    SSL_CTX_set_client_CA_list(ctx, cert_names);
+else
+    /* error */
+...
+ +

SEE ALSO

+ +

ssl(7), SSL_CTX_set_client_CA_list(3)

+ +

COPYRIGHT

+ +

Copyright 2000-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_new.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_new.html new file mode 100644 index 00000000..8c4a2dce --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_new.html @@ -0,0 +1,80 @@ + + + + +SSL_new + + + + + + + + + + +

NAME

+ +

SSL_dup, SSL_new, SSL_up_ref - create an SSL structure for a connection

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+SSL *SSL_dup(SSL *s);
+SSL *SSL_new(SSL_CTX *ctx);
+int SSL_up_ref(SSL *s);
+ +

DESCRIPTION

+ +

SSL_new() creates a new SSL structure which is needed to hold the data for a TLS/SSL connection. The new structure inherits the settings of the underlying context ctx: connection method, options, verification settings, timeout settings. An SSL structure is reference counted. Creating an SSL structure for the first time increments the reference count. Freeing it (using SSL_free) decrements it. When the reference count drops to zero, any memory or resources allocated to the SSL structure are freed.

+ +

SSL_up_ref() increments the reference count for an existing SSL structure.

+ +

SSL_dup() duplicates an existing SSL structure into a new allocated one. All settings are inherited from the original SSL structure. Dynamic data (i.e. existing connection details) are not copied, the new SSL is set into an initial accept (server) or connect (client) state.

+ +

RETURN VALUES

+ +

The following return values can occur:

+ +
+ +
NULL
+
+ +

The creation of a new SSL structure failed. Check the error stack to find out the reason.

+ +
+
Pointer to an SSL structure
+
+ +

The return value points to an allocated SSL structure.

+ +

SSL_up_ref() returns 1 for success and 0 for failure.

+ +
+
+ +

SEE ALSO

+ +

SSL_free(3), SSL_clear(3), SSL_CTX_set_options(3), SSL_get_SSL_CTX(3), ssl(7)

+ +

COPYRIGHT

+ +

Copyright 2000-2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_pending.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_pending.html new file mode 100644 index 00000000..ed0a2335 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_pending.html @@ -0,0 +1,68 @@ + + + + +SSL_pending + + + + + + + + + + +

NAME

+ +

SSL_pending, SSL_has_pending - check for readable bytes buffered in an SSL object

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+int SSL_pending(const SSL *ssl);
+int SSL_has_pending(const SSL *s);
+ +

DESCRIPTION

+ +

Data is received in whole blocks known as records from the peer. A whole record is processed (e.g. decrypted) in one go and is buffered by OpenSSL until it is read by the application via a call to SSL_read_ex(3) or SSL_read(3).

+ +

SSL_pending() returns the number of bytes which have been processed, buffered and are available inside ssl for immediate read.

+ +

If the SSL object's read_ahead flag is set (see SSL_CTX_set_read_ahead(3)), additional protocol bytes (beyond the current record) may have been read containing more TLS/SSL records. This also applies to DTLS and pipelining (see SSL_CTX_set_split_send_fragment(3)). These additional bytes will be buffered by OpenSSL but will remain unprocessed until they are needed. As these bytes are still in an unprocessed state SSL_pending() will ignore them. Therefore it is possible for no more bytes to be readable from the underlying BIO (because OpenSSL has already read them) and for SSL_pending() to return 0, even though readable application data bytes are available (because the data is in unprocessed buffered records).

+ +

SSL_has_pending() returns 1 if s has buffered data (whether processed or unprocessed) and 0 otherwise. Note that it is possible for SSL_has_pending() to return 1, and then a subsequent call to SSL_read_ex() or SSL_read() to return no data because the unprocessed buffered data when processed yielded no application data (for example this can happen during renegotiation). It is also possible in this scenario for SSL_has_pending() to continue to return 1 even after an SSL_read_ex() or SSL_read() call because the buffered and unprocessed data is not yet processable (e.g. because OpenSSL has only received a partial record so far).

+ +

RETURN VALUES

+ +

SSL_pending() returns the number of buffered and processed application data bytes that are pending and are available for immediate read. SSL_has_pending() returns 1 if there is buffered record data in the SSL object and 0 otherwise.

+ +

SEE ALSO

+ +

SSL_read_ex(3), SSL_read(3), SSL_CTX_set_read_ahead(3), SSL_CTX_set_split_send_fragment(3), ssl(7)

+ +

HISTORY

+ +

The SSL_has_pending() function was added in OpenSSL 1.1.0.

+ +

COPYRIGHT

+ +

Copyright 2000-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_read.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_read.html new file mode 100644 index 00000000..9e10f776 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_read.html @@ -0,0 +1,106 @@ + + + + +SSL_read + + + + + + + + + + +

NAME

+ +

SSL_read_ex, SSL_read, SSL_peek_ex, SSL_peek - read bytes from a TLS/SSL connection

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+int SSL_read_ex(SSL *ssl, void *buf, size_t num, size_t *readbytes);
+int SSL_read(SSL *ssl, void *buf, int num);
+
+int SSL_peek_ex(SSL *ssl, void *buf, size_t num, size_t *readbytes);
+int SSL_peek(SSL *ssl, void *buf, int num);
+ +

DESCRIPTION

+ +

SSL_read_ex() and SSL_read() try to read num bytes from the specified ssl into the buffer buf. On success SSL_read_ex() will store the number of bytes actually read in *readbytes.

+ +

SSL_peek_ex() and SSL_peek() are identical to SSL_read_ex() and SSL_read() respectively except no bytes are actually removed from the underlying BIO during the read, so that a subsequent call to SSL_read_ex() or SSL_read() will yield at least the same bytes.

+ +

NOTES

+ +

In the paragraphs below a "read function" is defined as one of SSL_read_ex(), SSL_read(), SSL_peek_ex() or SSL_peek().

+ +

If necessary, a read function will negotiate a TLS/SSL session, if not already explicitly performed by SSL_connect(3) or SSL_accept(3). If the peer requests a re-negotiation, it will be performed transparently during the read function operation. The behaviour of the read functions depends on the underlying BIO.

+ +

For the transparent negotiation to succeed, the ssl must have been initialized to client or server mode. This is being done by calling SSL_set_connect_state(3) or SSL_set_accept_state() before the first invocation of a read function.

+ +

The read functions work based on the SSL/TLS records. The data are received in records (with a maximum record size of 16kB). Only when a record has been completely received, can it be processed (decryption and check of integrity). Therefore data that was not retrieved at the last read call can still be buffered inside the SSL layer and will be retrieved on the next read call. If num is higher than the number of bytes buffered then the read functions will return with the bytes buffered. If no more bytes are in the buffer, the read functions will trigger the processing of the next record. Only when the record has been received and processed completely will the read functions return reporting success. At most the contents of one record will be returned. As the size of an SSL/TLS record may exceed the maximum packet size of the underlying transport (e.g. TCP), it may be necessary to read several packets from the transport layer before the record is complete and the read call can succeed.

+ +

If SSL_MODE_AUTO_RETRY has been switched off and a non-application data record has been processed, the read function can return and set the error to SSL_ERROR_WANT_READ. In this case there might still be unprocessed data available in the BIO. If read ahead was set using SSL_CTX_set_read_ahead(3), there might also still be unprocessed data available in the SSL. This behaviour can be controlled using the SSL_CTX_set_mode(3) call.

+ +

If the underlying BIO is blocking, a read function will only return once the read operation has been finished or an error occurred, except when a non-application data record has been processed and SSL_MODE_AUTO_RETRY is not set. Note that if SSL_MODE_AUTO_RETRY is set and only non-application data is available the call will hang.

+ +

If the underlying BIO is non-blocking, a read function will also return when the underlying BIO could not satisfy the needs of the function to continue the operation. In this case a call to SSL_get_error(3) with the return value of the read function will yield SSL_ERROR_WANT_READ or SSL_ERROR_WANT_WRITE. As at any time it's possible that non-application data needs to be sent, a read function can also cause write operations. The calling process then must repeat the call after taking appropriate action to satisfy the needs of the read function. The action depends on the underlying BIO. When using a non-blocking socket, nothing is to be done, but select() can be used to check for the required condition. When using a buffering BIO, like a BIO pair, data must be written into or retrieved out of the BIO before being able to continue.

+ +

SSL_pending(3) can be used to find out whether there are buffered bytes available for immediate retrieval. In this case the read function can be called without blocking or actually receiving new data from the underlying socket.

+ +

RETURN VALUES

+ +

SSL_read_ex() and SSL_peek_ex() will return 1 for success or 0 for failure. Success means that 1 or more application data bytes have been read from the SSL connection. Failure means that no bytes could be read from the SSL connection. Failures can be retryable (e.g. we are waiting for more bytes to be delivered by the network) or non-retryable (e.g. a fatal network error). In the event of a failure call SSL_get_error(3) to find out the reason which indicates whether the call is retryable or not.

+ +

For SSL_read() and SSL_peek() the following return values can occur:

+ +
+ +
> 0
+
+ +

The read operation was successful. The return value is the number of bytes actually read from the TLS/SSL connection.

+ +
+
<= 0
+
+ +

The read operation was not successful, because either the connection was closed, an error occurred or action must be taken by the calling process. Call SSL_get_error(3) with the return value ret to find out the reason.

+ +

Old documentation indicated a difference between 0 and -1, and that -1 was retryable. You should instead call SSL_get_error() to find out if it's retryable.

+ +
+
+ +

SEE ALSO

+ +

SSL_get_error(3), SSL_write_ex(3), SSL_CTX_set_mode(3), SSL_CTX_new(3), SSL_connect(3), SSL_accept(3) SSL_set_connect_state(3), SSL_pending(3), SSL_shutdown(3), SSL_set_shutdown(3), ssl(7), bio(7)

+ +

HISTORY

+ +

The SSL_read_ex() and SSL_peek_ex() functions were added in OpenSSL 1.1.1.

+ +

COPYRIGHT

+ +

Copyright 2000-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_read_early_data.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_read_early_data.html new file mode 100644 index 00000000..a95d72ef --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_read_early_data.html @@ -0,0 +1,184 @@ + + + + +SSL_read_early_data + + + + + + + + + + +

NAME

+ +

SSL_set_max_early_data, SSL_CTX_set_max_early_data, SSL_get_max_early_data, SSL_CTX_get_max_early_data, SSL_set_recv_max_early_data, SSL_CTX_set_recv_max_early_data, SSL_get_recv_max_early_data, SSL_CTX_get_recv_max_early_data, SSL_SESSION_get_max_early_data, SSL_SESSION_set_max_early_data, SSL_write_early_data, SSL_read_early_data, SSL_get_early_data_status, SSL_allow_early_data_cb_fn, SSL_CTX_set_allow_early_data_cb, SSL_set_allow_early_data_cb - functions for sending and receiving early data

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+int SSL_CTX_set_max_early_data(SSL_CTX *ctx, uint32_t max_early_data);
+uint32_t SSL_CTX_get_max_early_data(const SSL_CTX *ctx);
+int SSL_set_max_early_data(SSL *s, uint32_t max_early_data);
+uint32_t SSL_get_max_early_data(const SSL *s);
+
+int SSL_CTX_set_recv_max_early_data(SSL_CTX *ctx, uint32_t recv_max_early_data);
+uint32_t SSL_CTX_get_recv_max_early_data(const SSL_CTX *ctx);
+int SSL_set_recv_max_early_data(SSL *s, uint32_t recv_max_early_data);
+uint32_t SSL_get_recv_max_early_data(const SSL *s);
+
+uint32_t SSL_SESSION_get_max_early_data(const SSL_SESSION *s);
+int SSL_SESSION_set_max_early_data(SSL_SESSION *s, uint32_t max_early_data);
+
+int SSL_write_early_data(SSL *s, const void *buf, size_t num, size_t *written);
+
+int SSL_read_early_data(SSL *s, void *buf, size_t num, size_t *readbytes);
+
+int SSL_get_early_data_status(const SSL *s);
+
+
+typedef int (*SSL_allow_early_data_cb_fn)(SSL *s, void *arg);
+
+void SSL_CTX_set_allow_early_data_cb(SSL_CTX *ctx,
+                                     SSL_allow_early_data_cb_fn cb,
+                                     void *arg);
+void SSL_set_allow_early_data_cb(SSL *s,
+                                 SSL_allow_early_data_cb_fn cb,
+                                 void *arg);
+ +

DESCRIPTION

+ +

These functions are used to send and receive early data where TLSv1.3 has been negotiated. Early data can be sent by the client immediately after its initial ClientHello without having to wait for the server to complete the handshake. Early data can only be sent if a session has previously been established with the server, and the server is known to support it. Additionally these functions can be used to send data from the server to the client when the client has not yet completed the authentication stage of the handshake.

+ +

Early data has weaker security properties than other data sent over an SSL/TLS connection. In particular the data does not have forward secrecy. There are also additional considerations around replay attacks (see "REPLAY PROTECTION" below). For these reasons extreme care should be exercised when using early data. For specific details, consult the TLS 1.3 specification.

+ +

When a server receives early data it may opt to immediately respond by sending application data back to the client. Data sent by the server at this stage is done before the full handshake has been completed. Specifically the client's authentication messages have not yet been received, i.e. the client is unauthenticated at this point and care should be taken when using this capability.

+ +

A server or client can determine whether the full handshake has been completed or not by calling SSL_is_init_finished(3).

+ +

On the client side, the function SSL_SESSION_get_max_early_data() can be used to determine if a session established with a server can be used to send early data. If the session cannot be used then this function will return 0. Otherwise it will return the maximum number of early data bytes that can be sent.

+ +

The function SSL_SESSION_set_max_early_data() sets the maximum number of early data bytes that can be sent for a session. This would typically be used when creating a PSK session file (see SSL_CTX_set_psk_use_session_callback(3)). If using a ticket based PSK then this is set automatically to the value provided by the server.

+ +

A client uses the function SSL_write_early_data() to send early data. This function is similar to the SSL_write_ex(3) function, but with the following differences. See SSL_write_ex(3) for information on how to write bytes to the underlying connection, and how to handle any errors that may arise. This page describes the differences between SSL_write_early_data() and SSL_write_ex(3).

+ +

When called by a client, SSL_write_early_data() must be the first IO function called on a new connection, i.e. it must occur before any calls to SSL_write_ex(3), SSL_read_ex(3), SSL_connect(3), SSL_do_handshake(3) or other similar functions. It may be called multiple times to stream data to the server, but the total number of bytes written must not exceed the value returned from SSL_SESSION_get_max_early_data(). Once the initial SSL_write_early_data() call has completed successfully the client may interleave calls to SSL_read_ex(3) and SSL_read(3) with calls to SSL_write_early_data() as required.

+ +

If SSL_write_early_data() fails you should call SSL_get_error(3) to determine the correct course of action, as for SSL_write_ex(3).

+ +

When the client no longer wishes to send any more early data then it should complete the handshake by calling a function such as SSL_connect(3) or SSL_do_handshake(3). Alternatively you can call a standard write function such as SSL_write_ex(3), which will transparently complete the connection and write the requested data.

+ +

A server may choose to ignore early data that has been sent to it. Once the connection has been completed you can determine whether the server accepted or rejected the early data by calling SSL_get_early_data_status(). This will return SSL_EARLY_DATA_ACCEPTED if the data was accepted, SSL_EARLY_DATA_REJECTED if it was rejected or SSL_EARLY_DATA_NOT_SENT if no early data was sent. This function may be called by either the client or the server.

+ +

A server uses the SSL_read_early_data() function to receive early data on a connection for which early data has been enabled using SSL_CTX_set_max_early_data() or SSL_set_max_early_data(). As for SSL_write_early_data(), this must be the first IO function called on a connection, i.e. it must occur before any calls to SSL_write_ex(3), SSL_read_ex(3), SSL_accept(3), SSL_do_handshake(3), or other similar functions.

+ +

SSL_read_early_data() is similar to SSL_read_ex(3) with the following differences. Refer to SSL_read_ex(3) for full details.

+ +

SSL_read_early_data() may return 3 possible values:

+ +
+ +
SSL_READ_EARLY_DATA_ERROR
+
+ +

This indicates an IO or some other error occurred. This should be treated in the same way as a 0 return value from SSL_read_ex(3).

+ +
+
SSL_READ_EARLY_DATA_SUCCESS
+
+ +

This indicates that early data was successfully read. This should be treated in the same way as a 1 return value from SSL_read_ex(3). You should continue to call SSL_read_early_data() to read more data.

+ +
+
SSL_READ_EARLY_DATA_FINISH
+
+ +

This indicates that no more early data can be read. It may be returned on the first call to SSL_read_early_data() if the client has not sent any early data, or if the early data was rejected.

+ +
+
+ +

Once the initial SSL_read_early_data() call has completed successfully (i.e. it has returned SSL_READ_EARLY_DATA_SUCCESS or SSL_READ_EARLY_DATA_FINISH) then the server may choose to write data immediately to the unauthenticated client using SSL_write_early_data(). If SSL_read_early_data() returned SSL_READ_EARLY_DATA_FINISH then in some situations (e.g. if the client only supports TLSv1.2) the handshake may have already been completed and calls to SSL_write_early_data() are not allowed. Call SSL_is_init_finished(3) to determine whether the handshake has completed or not. If the handshake is still in progress then the server may interleave calls to SSL_write_early_data() with calls to SSL_read_early_data() as required.

+ +

Servers must not call SSL_read_ex(3), SSL_read(3), SSL_write_ex(3) or SSL_write(3) until SSL_read_early_data() has returned with SSL_READ_EARLY_DATA_FINISH. Once it has done so the connection to the client still needs to be completed. Complete the connection by calling a function such as SSL_accept(3) or SSL_do_handshake(3). Alternatively you can call a standard read function such as SSL_read_ex(3), which will transparently complete the connection and read the requested data. Note that it is an error to attempt to complete the connection before SSL_read_early_data() has returned SSL_READ_EARLY_DATA_FINISH.

+ +

Only servers may call SSL_read_early_data().

+ +

Calls to SSL_read_early_data() may, in certain circumstances, complete the connection immediately without further need to call a function such as SSL_accept(3). This can happen if the client is using a protocol version less than TLSv1.3. Applications can test for this by calling SSL_is_init_finished(3). Alternatively, applications may choose to call SSL_accept(3) anyway. Such a call will successfully return immediately with no further action taken.

+ +

When a session is created between a server and a client the server will specify the maximum amount of any early data that it will accept on any future connection attempt. By default the server does not accept early data; a server may indicate support for early data by calling SSL_CTX_set_max_early_data() or SSL_set_max_early_data() to set it for the whole SSL_CTX or an individual SSL object respectively. The max_early_data parameter specifies the maximum amount of early data in bytes that is permitted to be sent on a single connection. Similarly the SSL_CTX_get_max_early_data() and SSL_get_max_early_data() functions can be used to obtain the current maximum early data settings for the SSL_CTX and SSL objects respectively. Generally a server application will either use both of SSL_read_early_data() and SSL_CTX_set_max_early_data() (or SSL_set_max_early_data()), or neither of them, since there is no practical benefit from using only one of them. If the maximum early data setting for a server is non-zero then replay protection is automatically enabled (see "REPLAY PROTECTION" below).

+ +

If the server rejects the early data sent by a client then it will skip over the data that is sent. The maximum amount of received early data that is skipped is controlled by the recv_max_early_data setting. If a client sends more than this then the connection will abort. This value can be set by calling SSL_CTX_set_recv_max_early_data() or SSL_set_recv_max_early_data(). The current value for this setting can be obtained by calling SSL_CTX_get_recv_max_early_data() or SSL_get_recv_max_early_data(). The default value for this setting is 16,384 bytes.

+ +

The recv_max_early_data value also has an impact on early data that is accepted. The amount of data that is accepted will always be the lower of the max_early_data for the session and the recv_max_early_data setting for the server. If a client sends more data than this then the connection will abort.

+ +

The configured value for max_early_data on a server may change over time as required. However clients may have tickets containing the previously configured max_early_data value. The recv_max_early_data should always be equal to or higher than any recently configured max_early_data value in order to avoid aborted connections. The recv_max_early_data should never be set to less than the current configured max_early_data value.

+ +

Some server applications may wish to have more control over whether early data is accepted or not, for example to mitigate replay risks (see "REPLAY PROTECTION" below) or to decline early_data when the server is heavily loaded. The functions SSL_CTX_set_allow_early_data_cb() and SSL_set_allow_early_data_cb() set a callback which is called at a point in the handshake immediately before a decision is made to accept or reject early data. The callback is provided with a pointer to the user data argument that was provided when the callback was first set. Returning 1 from the callback will allow early data and returning 0 will reject it. Note that the OpenSSL library may reject early data for other reasons in which case this callback will not get called. Notably, the built-in replay protection feature will still be used even if a callback is present unless it has been explicitly disabled using the SSL_OP_NO_ANTI_REPLAY option. See "REPLAY PROTECTION" below.

+ +

NOTES

+ +

The whole purpose of early data is to enable a client to start sending data to the server before a full round trip of network traffic has occurred. Application developers should ensure they consider optimisation of the underlying TCP socket to obtain a performant solution. For example Nagle's algorithm is commonly used by operating systems in an attempt to avoid lots of small TCP packets. In many scenarios this is beneficial for performance, but it does not work well with the early data solution as implemented in OpenSSL. In Nagle's algorithm the OS will buffer outgoing TCP data if a TCP packet has already been sent which we have not yet received an ACK for from the peer. The buffered data will only be transmitted if enough data to fill an entire TCP packet is accumulated, or if the ACK is received from the peer. The initial ClientHello will be sent in the first TCP packet along with any data from the first call to SSL_write_early_data(). If the amount of data written will exceed the size of a single TCP packet, or if there are more calls to SSL_write_early_data() then that additional data will be sent in subsequent TCP packets which will be buffered by the OS and not sent until an ACK is received for the first packet containing the ClientHello. This means the early data is not actually sent until a complete round trip with the server has occurred which defeats the objective of early data.

+ +

In many operating systems the TCP_NODELAY socket option is available to disable Nagle's algorithm. If an application opts to disable Nagle's algorithm consideration should be given to turning it back on again after the handshake is complete if appropriate.

+ +

In rare circumstances, it may be possible for a client to have a session that reports a max early data value greater than 0, but where the server does not support this. For example, this can occur if a server has had its configuration changed to accept a lower max early data value such as by calling SSL_CTX_set_recv_max_early_data(). Another example is if a server used to support TLSv1.3 but was later downgraded to TLSv1.2. Sending early data to such a server will cause the connection to abort. Clients that encounter an aborted connection while sending early data may want to retry the connection without sending early data as this does not happen automatically. A client will have to establish a new transport layer connection to the server and attempt the SSL/TLS connection again but without sending early data. Note that it is inadvisable to retry with a lower maximum protocol version.

+ +

REPLAY PROTECTION

+ +

When early data is in use the TLS protocol provides no security guarantees that the same early data was not replayed across multiple connections. As a mitigation for this issue OpenSSL automatically enables replay protection if the server is configured with a non-zero max early data value. With replay protection enabled sessions are forced to be single use only. If a client attempts to reuse a session ticket more than once, then the second and subsequent attempts will fall back to a full handshake (and any early data that was submitted will be ignored). Note that single use tickets are enforced even if a client does not send any early data.

+ +

The replay protection mechanism relies on the internal OpenSSL server session cache (see SSL_CTX_set_session_cache_mode(3)). When replay protection is being used the server will operate as if the SSL_OP_NO_TICKET option had been selected (see SSL_CTX_set_options(3)). Sessions will be added to the cache whenever a session ticket is issued. When a client attempts to resume the session, OpenSSL will check for its presence in the internal cache. If it exists then the resumption is allowed and the session is removed from the cache. If it does not exist then the resumption is not allowed and a full handshake will occur.

+ +

Note that some applications may maintain an external cache of sessions (see SSL_CTX_sess_set_new_cb(3) and similar functions). It is the application's responsibility to ensure that any sessions in the external cache are also populated in the internal cache and that once removed from the internal cache they are similarly removed from the external cache. Failing to do this could result in an application becoming vulnerable to replay attacks. Note that OpenSSL will lock the internal cache while a session is removed but that lock is not held when the remove session callback (see SSL_CTX_sess_set_remove_cb(3)) is called. This could result in a small amount of time where the session has been removed from the internal cache but is still available in the external cache. Applications should be designed with this in mind in order to minimise the possibility of replay attacks.

+ +

The OpenSSL replay protection does not apply to external Pre Shared Keys (PSKs) (e.g. see SSL_CTX_set_psk_find_session_callback(3)). Therefore extreme caution should be applied when combining external PSKs with early data.

+ +

Some applications may mitigate the replay risks in other ways. For those applications it is possible to turn off the built-in replay protection feature using the SSL_OP_NO_ANTI_REPLAY option. See SSL_CTX_set_options(3) for details. Applications can also set a callback to make decisions about accepting early data or not. See SSL_CTX_set_allow_early_data_cb() above for details.

+ +

RETURN VALUES

+ +

SSL_write_early_data() returns 1 for success or 0 for failure. In the event of a failure call SSL_get_error(3) to determine the correct course of action.

+ +

SSL_read_early_data() returns SSL_READ_EARLY_DATA_ERROR for failure, SSL_READ_EARLY_DATA_SUCCESS for success with more data to read and SSL_READ_EARLY_DATA_FINISH for success with no more to data be read. In the event of a failure call SSL_get_error(3) to determine the correct course of action.

+ +

SSL_get_max_early_data(), SSL_CTX_get_max_early_data() and SSL_SESSION_get_max_early_data() return the maximum number of early data bytes that may be sent.

+ +

SSL_set_max_early_data(), SSL_CTX_set_max_early_data() and SSL_SESSION_set_max_early_data() return 1 for success or 0 for failure.

+ +

SSL_get_early_data_status() returns SSL_EARLY_DATA_ACCEPTED if early data was accepted by the server, SSL_EARLY_DATA_REJECTED if early data was rejected by the server, or SSL_EARLY_DATA_NOT_SENT if no early data was sent.

+ +

SEE ALSO

+ +

SSL_get_error(3), SSL_write_ex(3), SSL_read_ex(3), SSL_connect(3), SSL_accept(3), SSL_do_handshake(3), SSL_CTX_set_psk_use_session_callback(3), ssl(7)

+ +

HISTORY

+ +

All of the functions described above were added in OpenSSL 1.1.1.

+ +

COPYRIGHT

+ +

Copyright 2017-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_rstate_string.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_rstate_string.html new file mode 100644 index 00000000..74ed3ec0 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_rstate_string.html @@ -0,0 +1,94 @@ + + + + +SSL_rstate_string + + + + + + + + + + +

NAME

+ +

SSL_rstate_string, SSL_rstate_string_long - get textual description of state of an SSL object during read operation

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+const char *SSL_rstate_string(SSL *ssl);
+const char *SSL_rstate_string_long(SSL *ssl);
+ +

DESCRIPTION

+ +

SSL_rstate_string() returns a 2 letter string indicating the current read state of the SSL object ssl.

+ +

SSL_rstate_string_long() returns a string indicating the current read state of the SSL object ssl.

+ +

NOTES

+ +

When performing a read operation, the SSL/TLS engine must parse the record, consisting of header and body. When working in a blocking environment, SSL_rstate_string[_long]() should always return "RD"/"read done".

+ +

This function should only seldom be needed in applications.

+ +

RETURN VALUES

+ +

SSL_rstate_string() and SSL_rstate_string_long() can return the following values:

+ +
+ +
"RH"/"read header"
+
+ +

The header of the record is being evaluated.

+ +
+
"RB"/"read body"
+
+ +

The body of the record is being evaluated.

+ +
+
"RD"/"read done"
+
+ +

The record has been completely processed.

+ +
+
"unknown"/"unknown"
+
+ +

The read state is unknown. This should never happen.

+ +
+
+ +

SEE ALSO

+ +

ssl(7)

+ +

COPYRIGHT

+ +

Copyright 2001-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_session_reused.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_session_reused.html new file mode 100644 index 00000000..7bc845e1 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_session_reused.html @@ -0,0 +1,77 @@ + + + + +SSL_session_reused + + + + + + + + + + +

NAME

+ +

SSL_session_reused - query whether a reused session was negotiated during handshake

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+int SSL_session_reused(const SSL *ssl);
+ +

DESCRIPTION

+ +

Query, whether a reused session was negotiated during the handshake.

+ +

NOTES

+ +

During the negotiation, a client can propose to reuse a session. The server then looks up the session in its cache. If both client and server agree on the session, it will be reused and a flag is being set that can be queried by the application.

+ +

RETURN VALUES

+ +

The following return values can occur:

+ +
+ +
0
+
+ +

A new session was negotiated.

+ +
+
1
+
+ +

A session was reused.

+ +
+
+ +

SEE ALSO

+ +

ssl(7), SSL_set_session(3), SSL_CTX_set_session_cache_mode(3)

+ +

COPYRIGHT

+ +

Copyright 2001-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_set1_host.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_set1_host.html new file mode 100644 index 00000000..61a0a507 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_set1_host.html @@ -0,0 +1,96 @@ + + + + +SSL_set1_host + + + + + + + + + + +

NAME

+ +

SSL_set1_host, SSL_add1_host, SSL_set_hostflags, SSL_get0_peername - SSL server verification parameters

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+int SSL_set1_host(SSL *s, const char *hostname);
+int SSL_add1_host(SSL *s, const char *hostname);
+void SSL_set_hostflags(SSL *s, unsigned int flags);
+const char *SSL_get0_peername(SSL *s);
+ +

DESCRIPTION

+ +

These functions configure server hostname checks in the SSL client.

+ +

SSL_set1_host() sets the expected DNS hostname to name clearing any previously specified host name or names. If name is NULL, or the empty string the list of hostnames is cleared, and name checks are not performed on the peer certificate. When a non-empty name is specified, certificate verification automatically checks the peer hostname via X509_check_host(3) with flags as specified via SSL_set_hostflags(). Clients that enable DANE TLSA authentication via SSL_dane_enable(3) should leave it to that function to set the primary reference identifier of the peer, and should not call SSL_set1_host().

+ +

SSL_add1_host() adds name as an additional reference identifier that can match the peer's certificate. Any previous names set via SSL_set1_host() or SSL_add1_host() are retained, no change is made if name is NULL or empty. When multiple names are configured, the peer is considered verified when any name matches. This function is required for DANE TLSA in the presence of service name indirection via CNAME, MX or SRV records as specified in RFC7671, RFC7672 or RFC7673.

+ +

SSL_set_hostflags() sets the flags that will be passed to X509_check_host(3) when name checks are applicable, by default the flags value is 0. See X509_check_host(3) for the list of available flags and their meaning.

+ +

SSL_get0_peername() returns the DNS hostname or subject CommonName from the peer certificate that matched one of the reference identifiers. When wildcard matching is not disabled, the name matched in the peer certificate may be a wildcard name. When one of the reference identifiers configured via SSL_set1_host() or SSL_add1_host() starts with ".", which indicates a parent domain prefix rather than a fixed name, the matched peer name may be a sub-domain of the reference identifier. The returned string is allocated by the library and is no longer valid once the associated ssl handle is cleared or freed, or a renegotiation takes place. Applications must not free the return value.

+ +

SSL clients are advised to use these functions in preference to explicitly calling X509_check_host(3). Hostname checks may be out of scope with the RFC7671 DANE-EE(3) certificate usage, and the internal check will be suppressed as appropriate when DANE is enabled.

+ +

RETURN VALUES

+ +

SSL_set1_host() and SSL_add1_host() return 1 for success and 0 for failure.

+ +

SSL_get0_peername() returns NULL if peername verification is not applicable (as with RFC7671 DANE-EE(3)), or no trusted peername was matched. Otherwise, it returns the matched peername. To determine whether verification succeeded call SSL_get_verify_result(3).

+ +

EXAMPLES

+ +

Suppose "smtp.example.com" is the MX host of the domain "example.com". The calls below will arrange to match either the MX hostname or the destination domain name in the SMTP server certificate. Wildcards are supported, but must match the entire label. The actual name matched in the certificate (which might be a wildcard) is retrieved, and must be copied by the application if it is to be retained beyond the lifetime of the SSL connection.

+ +
SSL_set_hostflags(ssl, X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS);
+if (!SSL_set1_host(ssl, "smtp.example.com"))
+    /* error */
+if (!SSL_add1_host(ssl, "example.com"))
+    /* error */
+
+/* XXX: Perform SSL_connect() handshake and handle errors here */
+
+if (SSL_get_verify_result(ssl) == X509_V_OK) {
+    const char *peername = SSL_get0_peername(ssl);
+
+    if (peername != NULL)
+        /* Name checks were in scope and matched the peername */
+}
+ +

SEE ALSO

+ +

X509_check_host(3), SSL_get_verify_result(3). SSL_dane_enable(3).

+ +

HISTORY

+ +

These functions were added in OpenSSL 1.1.0.

+ +

COPYRIGHT

+ +

Copyright 2016-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_set_bio.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_set_bio.html new file mode 100644 index 00000000..ec174a6b --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_set_bio.html @@ -0,0 +1,94 @@ + + + + +SSL_set_bio + + + + + + + + + + +

NAME

+ +

SSL_set_bio, SSL_set0_rbio, SSL_set0_wbio - connect the SSL object with a BIO

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+void SSL_set_bio(SSL *ssl, BIO *rbio, BIO *wbio);
+void SSL_set0_rbio(SSL *s, BIO *rbio);
+void SSL_set0_wbio(SSL *s, BIO *wbio);
+ +

DESCRIPTION

+ +

SSL_set0_rbio() connects the BIO rbio for the read operations of the ssl object. The SSL engine inherits the behaviour of rbio. If the BIO is non-blocking then the ssl object will also have non-blocking behaviour. This function transfers ownership of rbio to ssl. It will be automatically freed using BIO_free_all(3) when the ssl is freed. On calling this function, any existing rbio that was previously set will also be freed via a call to BIO_free_all(3) (this includes the case where the rbio is set to the same value as previously).

+ +

SSL_set0_wbio() works in the same as SSL_set0_rbio() except that it connects the BIO wbio for the write operations of the ssl object. Note that if the rbio and wbio are the same then SSL_set0_rbio() and SSL_set0_wbio() each take ownership of one reference. Therefore it may be necessary to increment the number of references available using BIO_up_ref(3) before calling the set0 functions.

+ +

SSL_set_bio() is similar to SSL_set0_rbio() and SSL_set0_wbio() except that it connects both the rbio and the wbio at the same time, and transfers the ownership of rbio and wbio to ssl according to the following set of rules:

+ +
    + +
  • If neither the rbio or wbio have changed from their previous values then nothing is done.

    + +
  • +
  • If the rbio and wbio parameters are different and both are different to their previously set values then one reference is consumed for the rbio and one reference is consumed for the wbio.

    + +
  • +
  • If the rbio and wbio parameters are the same and the rbio is not the same as the previously set value then one reference is consumed.

    + +
  • +
  • If the rbio and wbio parameters are the same and the rbio is the same as the previously set value, then no additional references are consumed.

    + +
  • +
  • If the rbio and wbio parameters are different and the rbio is the same as the previously set value then one reference is consumed for the wbio and no references are consumed for the rbio.

    + +
  • +
  • If the rbio and wbio parameters are different and the wbio is the same as the previously set value and the old rbio and wbio values were the same as each other then one reference is consumed for the rbio and no references are consumed for the wbio.

    + +
  • +
  • If the rbio and wbio parameters are different and the wbio is the same as the previously set value and the old rbio and wbio values were different to each other then one reference is consumed for the rbio and one reference is consumed for the wbio.

    + +
  • +
+ +

Because of this complexity, this function should be avoided; use SSL_set0_rbio() and SSL_set0_wbio() instead.

+ +

RETURN VALUES

+ +

SSL_set_bio(), SSL_set0_rbio() and SSL_set0_wbio() cannot fail.

+ +

SEE ALSO

+ +

SSL_get_rbio(3), SSL_connect(3), SSL_accept(3), SSL_shutdown(3), ssl(7), bio(7)

+ +

HISTORY

+ +

SSL_set0_rbio() and SSL_set0_wbio() were added in OpenSSL 1.1.0.

+ +

COPYRIGHT

+ +

Copyright 2000-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_set_connect_state.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_set_connect_state.html new file mode 100644 index 00000000..5ff6261f --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_set_connect_state.html @@ -0,0 +1,77 @@ + + + + +SSL_set_connect_state + + + + + + + + + + +

NAME

+ +

SSL_set_connect_state, SSL_set_accept_state, SSL_is_server - functions for manipulating and examining the client or server mode of an SSL object

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+void SSL_set_connect_state(SSL *ssl);
+
+void SSL_set_accept_state(SSL *ssl);
+
+int SSL_is_server(const SSL *ssl);
+ +

DESCRIPTION

+ +

SSL_set_connect_state() sets ssl to work in client mode.

+ +

SSL_set_accept_state() sets ssl to work in server mode.

+ +

SSL_is_server() checks if ssl is working in server mode.

+ +

NOTES

+ +

When the SSL_CTX object was created with SSL_CTX_new(3), it was either assigned a dedicated client method, a dedicated server method, or a generic method, that can be used for both client and server connections. (The method might have been changed with SSL_CTX_set_ssl_version(3) or SSL_set_ssl_method(3).)

+ +

When beginning a new handshake, the SSL engine must know whether it must call the connect (client) or accept (server) routines. Even though it may be clear from the method chosen, whether client or server mode was requested, the handshake routines must be explicitly set.

+ +

When using the SSL_connect(3) or SSL_accept(3) routines, the correct handshake routines are automatically set. When performing a transparent negotiation using SSL_write_ex(3), SSL_write(3), SSL_read_ex(3), or SSL_read(3), the handshake routines must be explicitly set in advance using either SSL_set_connect_state() or SSL_set_accept_state().

+ +

If SSL_is_server() is called before SSL_set_connect_state() or SSL_set_accept_state() is called (either automatically or explicitly), the result depends on what method was used when SSL_CTX was created with SSL_CTX_new(3). If a generic method or a dedicated server method was passed to SSL_CTX_new(3), SSL_is_server() returns 1; otherwise, it returns 0.

+ +

RETURN VALUES

+ +

SSL_set_connect_state() and SSL_set_accept_state() do not return diagnostic information.

+ +

SSL_is_server() returns 1 if ssl is working in server mode or 0 for client mode.

+ +

SEE ALSO

+ +

ssl(7), SSL_new(3), SSL_CTX_new(3), SSL_connect(3), SSL_accept(3), SSL_write_ex(3), SSL_write(3), SSL_read_ex(3), SSL_read(3), SSL_do_handshake(3), SSL_CTX_set_ssl_version(3)

+ +

COPYRIGHT

+ +

Copyright 2001-2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_set_fd.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_set_fd.html new file mode 100644 index 00000000..bc1056fe --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_set_fd.html @@ -0,0 +1,80 @@ + + + + +SSL_set_fd + + + + + + + + + + +

NAME

+ +

SSL_set_fd, SSL_set_rfd, SSL_set_wfd - connect the SSL object with a file descriptor

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+int SSL_set_fd(SSL *ssl, int fd);
+int SSL_set_rfd(SSL *ssl, int fd);
+int SSL_set_wfd(SSL *ssl, int fd);
+ +

DESCRIPTION

+ +

SSL_set_fd() sets the file descriptor fd as the input/output facility for the TLS/SSL (encrypted) side of ssl. fd will typically be the socket file descriptor of a network connection.

+ +

When performing the operation, a socket BIO is automatically created to interface between the ssl and fd. The BIO and hence the SSL engine inherit the behaviour of fd. If fd is non-blocking, the ssl will also have non-blocking behaviour.

+ +

If there was already a BIO connected to ssl, BIO_free() will be called (for both the reading and writing side, if different).

+ +

SSL_set_rfd() and SSL_set_wfd() perform the respective action, but only for the read channel or the write channel, which can be set independently.

+ +

RETURN VALUES

+ +

The following return values can occur:

+ +
+ +
0
+
+ +

The operation failed. Check the error stack to find out why.

+ +
+
1
+
+ +

The operation succeeded.

+ +
+
+ +

SEE ALSO

+ +

SSL_get_fd(3), SSL_set_bio(3), SSL_connect(3), SSL_accept(3), SSL_shutdown(3), ssl(7) , bio(7)

+ +

COPYRIGHT

+ +

Copyright 2000-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_set_session.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_set_session.html new file mode 100644 index 00000000..e8826fef --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_set_session.html @@ -0,0 +1,79 @@ + + + + +SSL_set_session + + + + + + + + + + +

NAME

+ +

SSL_set_session - set a TLS/SSL session to be used during TLS/SSL connect

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+int SSL_set_session(SSL *ssl, SSL_SESSION *session);
+ +

DESCRIPTION

+ +

SSL_set_session() sets session to be used when the TLS/SSL connection is to be established. SSL_set_session() is only useful for TLS/SSL clients. When the session is set, the reference count of session is incremented by 1. If the session is not reused, the reference count is decremented again during SSL_connect(). Whether the session was reused can be queried with the SSL_session_reused(3) call.

+ +

If there is already a session set inside ssl (because it was set with SSL_set_session() before or because the same ssl was already used for a connection), SSL_SESSION_free() will be called for that session. If that old session is still open, it is considered bad and will be removed from the session cache (if used). A session is considered open, if SSL_shutdown(3) was not called for the connection (or at least SSL_set_shutdown(3) was used to set the SSL_SENT_SHUTDOWN state).

+ +

NOTES

+ +

SSL_SESSION objects keep internal link information about the session cache list, when being inserted into one SSL_CTX object's session cache. One SSL_SESSION object, regardless of its reference count, must therefore only be used with one SSL_CTX object (and the SSL objects created from this SSL_CTX object).

+ +

RETURN VALUES

+ +

The following return values can occur:

+ +
+ +
0
+
+ +

The operation failed; check the error stack to find out the reason.

+ +
+
1
+
+ +

The operation succeeded.

+ +
+
+ +

SEE ALSO

+ +

ssl(7), SSL_SESSION_free(3), SSL_get_session(3), SSL_session_reused(3), SSL_CTX_set_session_cache_mode(3)

+ +

COPYRIGHT

+ +

Copyright 2000-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_set_shutdown.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_set_shutdown.html new file mode 100644 index 00000000..1d660eb9 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_set_shutdown.html @@ -0,0 +1,95 @@ + + + + +SSL_set_shutdown + + + + + + + + + + +

NAME

+ +

SSL_set_shutdown, SSL_get_shutdown - manipulate shutdown state of an SSL connection

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+void SSL_set_shutdown(SSL *ssl, int mode);
+
+int SSL_get_shutdown(const SSL *ssl);
+ +

DESCRIPTION

+ +

SSL_set_shutdown() sets the shutdown state of ssl to mode.

+ +

SSL_get_shutdown() returns the shutdown mode of ssl.

+ +

NOTES

+ +

The shutdown state of an ssl connection is a bitmask of:

+ +
+ +
0
+
+ +

No shutdown setting, yet.

+ +
+
SSL_SENT_SHUTDOWN
+
+ +

A close_notify shutdown alert was sent to the peer, the connection is being considered closed and the session is closed and correct.

+ +
+
SSL_RECEIVED_SHUTDOWN
+
+ +

A shutdown alert was received form the peer, either a normal close_notify or a fatal error.

+ +
+
+ +

SSL_SENT_SHUTDOWN and SSL_RECEIVED_SHUTDOWN can be set at the same time.

+ +

The shutdown state of the connection is used to determine the state of the ssl session. If the session is still open, when SSL_clear(3) or SSL_free(3) is called, it is considered bad and removed according to RFC2246. The actual condition for a correctly closed session is SSL_SENT_SHUTDOWN (according to the TLS RFC, it is acceptable to only send the close_notify alert but to not wait for the peer's answer, when the underlying connection is closed). SSL_set_shutdown() can be used to set this state without sending a close alert to the peer (see SSL_shutdown(3)).

+ +

If a close_notify was received, SSL_RECEIVED_SHUTDOWN will be set, for setting SSL_SENT_SHUTDOWN the application must however still call SSL_shutdown(3) or SSL_set_shutdown() itself.

+ +

RETURN VALUES

+ +

SSL_set_shutdown() does not return diagnostic information.

+ +

SSL_get_shutdown() returns the current setting.

+ +

SEE ALSO

+ +

ssl(7), SSL_shutdown(3), SSL_CTX_set_quiet_shutdown(3), SSL_clear(3), SSL_free(3)

+ +

COPYRIGHT

+ +

Copyright 2001-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_set_verify_result.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_set_verify_result.html new file mode 100644 index 00000000..7f47d6c4 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_set_verify_result.html @@ -0,0 +1,63 @@ + + + + +SSL_set_verify_result + + + + + + + + + + +

NAME

+ +

SSL_set_verify_result - override result of peer certificate verification

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+void SSL_set_verify_result(SSL *ssl, long verify_result);
+ +

DESCRIPTION

+ +

SSL_set_verify_result() sets verify_result of the object ssl to be the result of the verification of the X509 certificate presented by the peer, if any.

+ +

NOTES

+ +

SSL_set_verify_result() overrides the verification result. It only changes the verification result of the ssl object. It does not become part of the established session, so if the session is to be reused later, the original value will reappear.

+ +

The valid codes for verify_result are documented in verify(1).

+ +

RETURN VALUES

+ +

SSL_set_verify_result() does not provide a return value.

+ +

SEE ALSO

+ +

ssl(7), SSL_get_verify_result(3), SSL_get_peer_certificate(3), verify(1)

+ +

COPYRIGHT

+ +

Copyright 2000-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_shutdown.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_shutdown.html new file mode 100644 index 00000000..5b75df45 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_shutdown.html @@ -0,0 +1,129 @@ + + + + +SSL_shutdown + + + + + + + + + + +

NAME

+ +

SSL_shutdown - shut down a TLS/SSL connection

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+int SSL_shutdown(SSL *ssl);
+ +

DESCRIPTION

+ +

SSL_shutdown() shuts down an active TLS/SSL connection. It sends the close_notify shutdown alert to the peer.

+ +

NOTES

+ +

SSL_shutdown() tries to send the close_notify shutdown alert to the peer. Whether the operation succeeds or not, the SSL_SENT_SHUTDOWN flag is set and a currently open session is considered closed and good and will be kept in the session cache for further reuse.

+ +

Note that SSL_shutdown() must not be called if a previous fatal error has occurred on a connection i.e. if SSL_get_error() has returned SSL_ERROR_SYSCALL or SSL_ERROR_SSL.

+ +

The shutdown procedure consists of two steps: sending of the close_notify shutdown alert, and reception of the peer's close_notify shutdown alert. The order of those two steps depends on the application.

+ +

It is acceptable for an application to only send its shutdown alert and then close the underlying connection without waiting for the peer's response. This way resources can be saved, as the process can already terminate or serve another connection. This should only be done when it is known that the other side will not send more data, otherwise there is a risk of a truncation attack.

+ +

When a client only writes and never reads from the connection, and the server has sent a session ticket to establish a session, the client might not be able to resume the session because it did not received and process the session ticket from the server. In case the application wants to be able to resume the session, it is recommended to do a complete shutdown procedure (bidirectional close_notify alerts).

+ +

When the underlying connection shall be used for more communications, the complete shutdown procedure must be performed, so that the peers stay synchronized.

+ +

SSL_shutdown() only closes the write direction. It is not possible to call SSL_write() after calling SSL_shutdown(). The read direction is closed by the peer.

+ +

First to close the connection

+ +

When the application is the first party to send the close_notify alert, SSL_shutdown() will only send the alert and then set the SSL_SENT_SHUTDOWN flag (so that the session is considered good and will be kept in the cache). If successful, SSL_shutdown() will return 0.

+ +

If a unidirectional shutdown is enough (the underlying connection shall be closed anyway), this first successful call to SSL_shutdown() is sufficient.

+ +

In order to complete the bidirectional shutdown handshake, the peer needs to send back a close_notify alert. The SSL_RECEIVED_SHUTDOWN flag will be set after receiving and processing it.

+ +

The peer is still allowed to send data after receiving the close_notify event. When it is done sending data, it will send the close_notify alert. SSL_read() should be called until all data is received. SSL_read() will indicate the end of the peer data by returning <= 0 and SSL_get_error() returning SSL_ERROR_ZERO_RETURN.

+ +

Peer closes the connection

+ +

If the peer already sent the close_notify alert and it was already processed implicitly inside another function (SSL_read(3)), the SSL_RECEIVED_SHUTDOWN flag is set. SSL_read() will return <= 0 in that case, and SSL_get_error() will return SSL_ERROR_ZERO_RETURN. SSL_shutdown() will send the close_notify alert, set the SSL_SENT_SHUTDOWN flag. If successful, SSL_shutdown() will return 1.

+ +

Whether SSL_RECEIVED_SHUTDOWN is already set can be checked using the SSL_get_shutdown() (see also SSL_set_shutdown(3) call.

+ +

NOTES

+ +

The behaviour of SSL_shutdown() additionally depends on the underlying BIO. If the underlying BIO is blocking, SSL_shutdown() will only return once the handshake step has been finished or an error occurred.

+ +

If the underlying BIO is non-blocking, SSL_shutdown() will also return when the underlying BIO could not satisfy the needs of SSL_shutdown() to continue the handshake. In this case a call to SSL_get_error() with the return value of SSL_shutdown() will yield SSL_ERROR_WANT_READ or SSL_ERROR_WANT_WRITE. The calling process then must repeat the call after taking appropriate action to satisfy the needs of SSL_shutdown(). The action depends on the underlying BIO. When using a non-blocking socket, nothing is to be done, but select() can be used to check for the required condition. When using a buffering BIO, like a BIO pair, data must be written into or retrieved out of the BIO before being able to continue.

+ +

After SSL_shutdown() returned 0, it is possible to call SSL_shutdown() again to wait for the peer's close_notify alert. SSL_shutdown() will return 1 in that case. However, it is recommended to wait for it using SSL_read() instead.

+ +

SSL_shutdown() can be modified to only set the connection to "shutdown" state but not actually send the close_notify alert messages, see SSL_CTX_set_quiet_shutdown(3). When "quiet shutdown" is enabled, SSL_shutdown() will always succeed and return 1.

+ +

RETURN VALUES

+ +

The following return values can occur:

+ +
+ +
0
+
+ +

The shutdown is not yet finished: the close_notify was sent but the peer did not send it back yet. Call SSL_read() to do a bidirectional shutdown. The output of SSL_get_error(3) may be misleading, as an erroneous SSL_ERROR_SYSCALL may be flagged even though no error occurred.

+ +
+
1
+
+ +

The shutdown was successfully completed. The close_notify alert was sent and the peer's close_notify alert was received.

+ +
+
<0
+
+ +

The shutdown was not successful. Call SSL_get_error(3) with the return value ret to find out the reason. It can occur if an action is needed to continue the operation for non-blocking BIOs.

+ +

It can also occur when not all data was read using SSL_read().

+ +
+
+ +

SEE ALSO

+ +

SSL_get_error(3), SSL_connect(3), SSL_accept(3), SSL_set_shutdown(3), SSL_CTX_set_quiet_shutdown(3), SSL_clear(3), SSL_free(3), ssl(7), bio(7)

+ +

COPYRIGHT

+ +

Copyright 2000-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_state_string.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_state_string.html new file mode 100644 index 00000000..97f7552d --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_state_string.html @@ -0,0 +1,68 @@ + + + + +SSL_state_string + + + + + + + + + + +

NAME

+ +

SSL_state_string, SSL_state_string_long - get textual description of state of an SSL object

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+const char *SSL_state_string(const SSL *ssl);
+const char *SSL_state_string_long(const SSL *ssl);
+ +

DESCRIPTION

+ +

SSL_state_string() returns a 6 letter string indicating the current state of the SSL object ssl.

+ +

SSL_state_string_long() returns a string indicating the current state of the SSL object ssl.

+ +

NOTES

+ +

During its use, an SSL objects passes several states. The state is internally maintained. Querying the state information is not very informative before or when a connection has been established. It however can be of significant interest during the handshake.

+ +

When using non-blocking sockets, the function call performing the handshake may return with SSL_ERROR_WANT_READ or SSL_ERROR_WANT_WRITE condition, so that SSL_state_string[_long]() may be called.

+ +

For both blocking or non-blocking sockets, the details state information can be used within the info_callback function set with the SSL_set_info_callback() call.

+ +

RETURN VALUES

+ +

Detailed description of possible states to be included later.

+ +

SEE ALSO

+ +

ssl(7), SSL_CTX_set_info_callback(3)

+ +

COPYRIGHT

+ +

Copyright 2001-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_want.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_want.html new file mode 100644 index 00000000..2414cb00 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_want.html @@ -0,0 +1,125 @@ + + + + +SSL_want + + + + + + + + + + +

NAME

+ +

SSL_want, SSL_want_nothing, SSL_want_read, SSL_want_write, SSL_want_x509_lookup, SSL_want_async, SSL_want_async_job, SSL_want_client_hello_cb - obtain state information TLS/SSL I/O operation

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+int SSL_want(const SSL *ssl);
+int SSL_want_nothing(const SSL *ssl);
+int SSL_want_read(const SSL *ssl);
+int SSL_want_write(const SSL *ssl);
+int SSL_want_x509_lookup(const SSL *ssl);
+int SSL_want_async(const SSL *ssl);
+int SSL_want_async_job(const SSL *ssl);
+int SSL_want_client_hello_cb(const SSL *ssl);
+ +

DESCRIPTION

+ +

SSL_want() returns state information for the SSL object ssl.

+ +

The other SSL_want_*() calls are shortcuts for the possible states returned by SSL_want().

+ +

NOTES

+ +

SSL_want() examines the internal state information of the SSL object. Its return values are similar to that of SSL_get_error(3). Unlike SSL_get_error(3), which also evaluates the error queue, the results are obtained by examining an internal state flag only. The information must therefore only be used for normal operation under non-blocking I/O. Error conditions are not handled and must be treated using SSL_get_error(3).

+ +

The result returned by SSL_want() should always be consistent with the result of SSL_get_error(3).

+ +

RETURN VALUES

+ +

The following return values can currently occur for SSL_want():

+ +
+ +
SSL_NOTHING
+
+ +

There is no data to be written or to be read.

+ +
+
SSL_WRITING
+
+ +

There are data in the SSL buffer that must be written to the underlying BIO layer in order to complete the actual SSL_*() operation. A call to SSL_get_error(3) should return SSL_ERROR_WANT_WRITE.

+ +
+
SSL_READING
+
+ +

More data must be read from the underlying BIO layer in order to complete the actual SSL_*() operation. A call to SSL_get_error(3) should return SSL_ERROR_WANT_READ.

+ +
+
SSL_X509_LOOKUP
+
+ +

The operation did not complete because an application callback set by SSL_CTX_set_client_cert_cb() has asked to be called again. A call to SSL_get_error(3) should return SSL_ERROR_WANT_X509_LOOKUP.

+ +
+
SSL_ASYNC_PAUSED
+
+ +

An asynchronous operation partially completed and was then paused. See SSL_get_all_async_fds(3). A call to SSL_get_error(3) should return SSL_ERROR_WANT_ASYNC.

+ +
+
SSL_ASYNC_NO_JOBS
+
+ +

The asynchronous job could not be started because there were no async jobs available in the pool (see ASYNC_init_thread(3)). A call to SSL_get_error(3) should return SSL_ERROR_WANT_ASYNC_JOB.

+ +
+
SSL_CLIENT_HELLO_CB
+
+ +

The operation did not complete because an application callback set by SSL_CTX_set_client_hello_cb() has asked to be called again. A call to SSL_get_error(3) should return SSL_ERROR_WANT_CLIENT_HELLO_CB.

+ +
+
+ +

SSL_want_nothing(), SSL_want_read(), SSL_want_write(), SSL_want_x509_lookup(), SSL_want_async(), SSL_want_async_job(), and SSL_want_client_hello_cb() return 1, when the corresponding condition is true or 0 otherwise.

+ +

SEE ALSO

+ +

ssl(7), SSL_get_error(3)

+ +

HISTORY

+ +

The SSL_want_client_hello_cb() function and the SSL_CLIENT_HELLO_CB return value were added in OpenSSL 1.1.1.

+ +

COPYRIGHT

+ +

Copyright 2001-2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_write.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_write.html new file mode 100644 index 00000000..0b9646f0 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/SSL_write.html @@ -0,0 +1,104 @@ + + + + +SSL_write + + + + + + + + + + +

NAME

+ +

SSL_write_ex, SSL_write - write bytes to a TLS/SSL connection

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+int SSL_write_ex(SSL *s, const void *buf, size_t num, size_t *written);
+int SSL_write(SSL *ssl, const void *buf, int num);
+ +

DESCRIPTION

+ +

SSL_write_ex() and SSL_write() write num bytes from the buffer buf into the specified ssl connection. On success SSL_write_ex() will store the number of bytes written in *written.

+ +

NOTES

+ +

In the paragraphs below a "write function" is defined as one of either SSL_write_ex(), or SSL_write().

+ +

If necessary, a write function will negotiate a TLS/SSL session, if not already explicitly performed by SSL_connect(3) or SSL_accept(3). If the peer requests a re-negotiation, it will be performed transparently during the write function operation. The behaviour of the write functions depends on the underlying BIO.

+ +

For the transparent negotiation to succeed, the ssl must have been initialized to client or server mode. This is being done by calling SSL_set_connect_state(3) or SSL_set_accept_state() before the first call to a write function.

+ +

If the underlying BIO is blocking, the write functions will only return, once the write operation has been finished or an error occurred.

+ +

If the underlying BIO is non-blocking the write functions will also return when the underlying BIO could not satisfy the needs of the function to continue the operation. In this case a call to SSL_get_error(3) with the return value of the write function will yield SSL_ERROR_WANT_READ or SSL_ERROR_WANT_WRITE. As at any time a re-negotiation is possible, a call to a write function can also cause read operations! The calling process then must repeat the call after taking appropriate action to satisfy the needs of the write function. The action depends on the underlying BIO. When using a non-blocking socket, nothing is to be done, but select() can be used to check for the required condition. When using a buffering BIO, like a BIO pair, data must be written into or retrieved out of the BIO before being able to continue.

+ +

The write functions will only return with success when the complete contents of buf of length num has been written. This default behaviour can be changed with the SSL_MODE_ENABLE_PARTIAL_WRITE option of SSL_CTX_set_mode(3). When this flag is set the write functions will also return with success when a partial write has been successfully completed. In this case the write function operation is considered completed. The bytes are sent and a new write call with a new buffer (with the already sent bytes removed) must be started. A partial write is performed with the size of a message block, which is 16kB.

+ +

WARNINGS

+ +

When a write function call has to be repeated because SSL_get_error(3) returned SSL_ERROR_WANT_READ or SSL_ERROR_WANT_WRITE, it must be repeated with the same arguments. The data that was passed might have been partially processed. When SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER was set using SSL_CTX_set_mode(3) the pointer can be different, but the data and length should still be the same.

+ +

You should not call SSL_write() with num=0, it will return an error. SSL_write_ex() can be called with num=0, but will not send application data to the peer.

+ +

RETURN VALUES

+ +

SSL_write_ex() will return 1 for success or 0 for failure. Success means that all requested application data bytes have been written to the SSL connection or, if SSL_MODE_ENABLE_PARTIAL_WRITE is in use, at least 1 application data byte has been written to the SSL connection. Failure means that not all the requested bytes have been written yet (if SSL_MODE_ENABLE_PARTIAL_WRITE is not in use) or no bytes could be written to the SSL connection (if SSL_MODE_ENABLE_PARTIAL_WRITE is in use). Failures can be retryable (e.g. the network write buffer has temporarily filled up) or non-retryable (e.g. a fatal network error). In the event of a failure call SSL_get_error(3) to find out the reason which indicates whether the call is retryable or not.

+ +

For SSL_write() the following return values can occur:

+ +
+ +
> 0
+
+ +

The write operation was successful, the return value is the number of bytes actually written to the TLS/SSL connection.

+ +
+
<= 0
+
+ +

The write operation was not successful, because either the connection was closed, an error occurred or action must be taken by the calling process. Call SSL_get_error() with the return value ret to find out the reason.

+ +

Old documentation indicated a difference between 0 and -1, and that -1 was retryable. You should instead call SSL_get_error() to find out if it's retryable.

+ +
+
+ +

SEE ALSO

+ +

SSL_get_error(3), SSL_read_ex(3), SSL_read(3) SSL_CTX_set_mode(3), SSL_CTX_new(3), SSL_connect(3), SSL_accept(3) SSL_set_connect_state(3), ssl(7), bio(7)

+ +

HISTORY

+ +

The SSL_write_ex() function was added in OpenSSL 1.1.1.

+ +

COPYRIGHT

+ +

Copyright 2000-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/UI_STRING.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/UI_STRING.html new file mode 100644 index 00000000..fd261591 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/UI_STRING.html @@ -0,0 +1,113 @@ + + + + +UI_STRING + + + + + + + + + + +

NAME

+ +

UI_STRING, UI_string_types, UI_get_string_type, UI_get_input_flags, UI_get0_output_string, UI_get0_action_string, UI_get0_result_string, UI_get_result_string_length, UI_get0_test_string, UI_get_result_minsize, UI_get_result_maxsize, UI_set_result, UI_set_result_ex - User interface string parsing

+ +

SYNOPSIS

+ +
#include <openssl/ui.h>
+
+typedef struct ui_string_st UI_STRING;
+
+enum UI_string_types {
+    UIT_NONE = 0,
+    UIT_PROMPT,                 /* Prompt for a string */
+    UIT_VERIFY,                 /* Prompt for a string and verify */
+    UIT_BOOLEAN,                /* Prompt for a yes/no response */
+    UIT_INFO,                   /* Send info to the user */
+    UIT_ERROR                   /* Send an error message to the user */
+};
+
+enum UI_string_types UI_get_string_type(UI_STRING *uis);
+int UI_get_input_flags(UI_STRING *uis);
+const char *UI_get0_output_string(UI_STRING *uis);
+const char *UI_get0_action_string(UI_STRING *uis);
+const char *UI_get0_result_string(UI_STRING *uis);
+int UI_get_result_string_length(UI_STRING *uis);
+const char *UI_get0_test_string(UI_STRING *uis);
+int UI_get_result_minsize(UI_STRING *uis);
+int UI_get_result_maxsize(UI_STRING *uis);
+int UI_set_result(UI *ui, UI_STRING *uis, const char *result);
+int UI_set_result_ex(UI *ui, UI_STRING *uis, const char *result, int len);
+ +

DESCRIPTION

+ +

The UI_STRING gets created internally and added to a UI whenever one of the functions UI_add_input_string(), UI_dup_input_string(), UI_add_verify_string(), UI_dup_verify_string(), UI_add_input_boolean(), UI_dup_input_boolean(), UI_add_info_string(), UI_dup_info_string(), UI_add_error_string() or UI_dup_error_string() is called. For a UI_METHOD user, there's no need to know more. For a UI_METHOD creator, it is of interest to fetch text from these UI_STRING objects as well as adding results to some of them.

+ +

UI_get_string_type() is used to retrieve the type of the given UI_STRING.

+ +

UI_get_input_flags() is used to retrieve the flags associated with the given UI_STRING.

+ +

UI_get0_output_string() is used to retrieve the actual string to output (prompt, info, error, ...).

+ +

UI_get0_action_string() is used to retrieve the action description associated with a UIT_BOOLEAN type UI_STRING. For all other UI_STRING types, NULL is returned. See UI_add_input_boolean(3).

+ +

UI_get0_result_string() and UI_get_result_string_length() are used to retrieve the result of a prompt and its length. This is only useful for UIT_PROMPT and UIT_VERIFY type strings. For all other UI_STRING types, UI_get0_result_string() returns NULL and UI_get_result_string_length() returns -1.

+ +

UI_get0_test_string() is used to retrieve the string to compare the prompt result with. This is only useful for UIT_VERIFY type strings. For all other UI_STRING types, NULL is returned.

+ +

UI_get_result_minsize() and UI_get_result_maxsize() are used to retrieve the minimum and maximum required size of the result. This is only useful for UIT_PROMPT and UIT_VERIFY type strings. For all other UI_STRING types, -1 is returned.

+ +

UI_set_result_ex() is used to set the result value of a prompt and its length. For UIT_PROMPT and UIT_VERIFY type UI strings, this sets the result retrievable with UI_get0_result_string() by copying the contents of result if its length fits the minimum and maximum size requirements. For UIT_BOOLEAN type UI strings, this sets the first character of the result retrievable with UI_get0_result_string() to the first ok_char given with UI_add_input_boolean() or UI_dup_input_boolean() if the result matched any of them, or the first of the cancel_chars if the result matched any of them, otherwise it's set to the NUL char \0. See UI_add_input_boolean(3) for more information on ok_chars and cancel_chars.

+ +

UI_set_result() does the same thing as UI_set_result_ex(), but calculates its length internally. It expects the string to be terminated with a NUL byte, and is therefore only useful with normal C strings.

+ +

RETURN VALUES

+ +

UI_get_string_type() returns the UI string type.

+ +

UI_get_input_flags() returns the UI string flags.

+ +

UI_get0_output_string() returns the UI string output string.

+ +

UI_get0_action_string() returns the UI string action description string for UIT_BOOLEAN type UI strings, NULL for any other type.

+ +

UI_get0_result_string() returns the UI string result buffer for UIT_PROMPT and UIT_VERIFY type UI strings, NULL for any other type.

+ +

UI_get_result_string_length() returns the UI string result buffer's content length for UIT_PROMPT and UIT_VERIFY type UI strings, -1 for any other type.

+ +

UI_get0_test_string() returns the UI string action description string for UIT_VERIFY type UI strings, NULL for any other type.

+ +

UI_get_result_minsize() returns the minimum allowed result size for the UI string for UIT_PROMPT and UIT_VERIFY type strings, -1 for any other type.

+ +

UI_get_result_maxsize() returns the minimum allowed result size for the UI string for UIT_PROMPT and UIT_VERIFY type strings, -1 for any other type.

+ +

UI_set_result() returns 0 on success or when the UI string is of any type other than UIT_PROMPT, UIT_VERIFY or UIT_BOOLEAN, -1 on error.

+ +

SEE ALSO

+ +

UI(3)

+ +

COPYRIGHT

+ +

Copyright 2001-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/UI_UTIL_read_pw.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/UI_UTIL_read_pw.html new file mode 100644 index 00000000..08a54847 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/UI_UTIL_read_pw.html @@ -0,0 +1,73 @@ + + + + +UI_UTIL_read_pw + + + + + + + + + + +

NAME

+ +

UI_UTIL_read_pw_string, UI_UTIL_read_pw, UI_UTIL_wrap_read_pem_callback - user interface utilities

+ +

SYNOPSIS

+ +
#include <openssl/ui.h>
+
+int UI_UTIL_read_pw_string(char *buf, int length, const char *prompt,
+                           int verify);
+int UI_UTIL_read_pw(char *buf, char *buff, int size, const char *prompt,
+                    int verify);
+UI_METHOD *UI_UTIL_wrap_read_pem_callback(pem_password_cb *cb, int rwflag);
+ +

DESCRIPTION

+ +

UI_UTIL_read_pw_string() asks for a passphrase, using prompt as a prompt, and stores it in buf. The maximum allowed size is given with length, including the terminating NUL byte. If verify is non-zero, the password will be verified as well.

+ +

UI_UTIL_read_pw() does the same as UI_UTIL_read_pw_string(), the difference is that you can give it an external buffer buff for the verification passphrase.

+ +

UI_UTIL_wrap_read_pem_callback() can be used to create a temporary UI_METHOD that wraps a given PEM password callback cb. rwflag is used to specify if this method will be used for passphrase entry without (0) or with (1) verification. When not used any more, the returned method should be freed with UI_destroy_method().

+ +

NOTES

+ +

UI_UTIL_read_pw_string() and UI_UTIL_read_pw() use default UI_METHOD. See UI_get_default_method(3) and friends for more information.

+ +

The result from the UI_METHOD created by UI_UTIL_wrap_read_pem_callback() will generate password strings in the encoding that the given password callback generates. The default password prompting functions (apart from UI_UTIL_read_pw_string() and UI_UTIL_read_pw(), there is PEM_def_callback(), EVP_read_pw_string() and EVP_read_pw_string_min()) all use the default UI_METHOD.

+ +

RETURN VALUES

+ +

UI_UTIL_read_pw_string() and UI_UTIL_read_pw() return 0 on success or a negative value on error.

+ +

UI_UTIL_wrap_read_pem_callback() returns a valid UI_METHOD structure or NULL if an error occurred.

+ +

SEE ALSO

+ +

UI_get_default_method(3)

+ +

COPYRIGHT

+ +

Copyright 2001-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/UI_create_method.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/UI_create_method.html new file mode 100644 index 00000000..3fa4e33c --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/UI_create_method.html @@ -0,0 +1,178 @@ + + + + +UI_create_method + + + + + + + + + + +

NAME

+ +

UI_METHOD, UI_create_method, UI_destroy_method, UI_method_set_opener, UI_method_set_writer, UI_method_set_flusher, UI_method_set_reader, UI_method_set_closer, UI_method_set_data_duplicator, UI_method_set_prompt_constructor, UI_method_set_ex_data, UI_method_get_opener, UI_method_get_writer, UI_method_get_flusher, UI_method_get_reader, UI_method_get_closer, UI_method_get_data_duplicator, UI_method_get_data_destructor, UI_method_get_prompt_constructor, UI_method_get_ex_data - user interface method creation and destruction

+ +

SYNOPSIS

+ +
#include <openssl/ui.h>
+
+typedef struct ui_method_st UI_METHOD;
+
+UI_METHOD *UI_create_method(const char *name);
+void UI_destroy_method(UI_METHOD *ui_method);
+int UI_method_set_opener(UI_METHOD *method, int (*opener) (UI *ui));
+int UI_method_set_writer(UI_METHOD *method,
+                         int (*writer) (UI *ui, UI_STRING *uis));
+int UI_method_set_flusher(UI_METHOD *method, int (*flusher) (UI *ui));
+int UI_method_set_reader(UI_METHOD *method,
+                         int (*reader) (UI *ui, UI_STRING *uis));
+int UI_method_set_closer(UI_METHOD *method, int (*closer) (UI *ui));
+int UI_method_set_data_duplicator(UI_METHOD *method,
+                                  void *(*duplicator) (UI *ui, void *ui_data),
+                                  void (*destructor)(UI *ui, void *ui_data));
+int UI_method_set_prompt_constructor(UI_METHOD *method,
+                                     char *(*prompt_constructor) (UI *ui,
+                                                                  const char
+                                                                  *object_desc,
+                                                                  const char
+                                                                  *object_name));
+int UI_method_set_ex_data(UI_METHOD *method, int idx, void *data);
+int (*UI_method_get_opener(const UI_METHOD *method)) (UI *);
+int (*UI_method_get_writer(const UI_METHOD *method)) (UI *, UI_STRING *);
+int (*UI_method_get_flusher(const UI_METHOD *method)) (UI *);
+int (*UI_method_get_reader(const UI_METHOD *method)) (UI *, UI_STRING *);
+int (*UI_method_get_closer(const UI_METHOD *method)) (UI *);
+char *(*UI_method_get_prompt_constructor(const UI_METHOD *method))
+    (UI *, const char *, const char *);
+void *(*UI_method_get_data_duplicator(const UI_METHOD *method)) (UI *, void *);
+void (*UI_method_get_data_destructor(const UI_METHOD *method)) (UI *, void *);
+const void *UI_method_get_ex_data(const UI_METHOD *method, int idx);
+ +

DESCRIPTION

+ +

A method contains a few functions that implement the low level of the User Interface. These functions are:

+ +
+ +
an opener
+
+ +

This function takes a reference to a UI and starts a session, for example by opening a channel to a tty, or by creating a dialog box.

+ +
+
a writer
+
+ +

This function takes a reference to a UI and a UI String, and writes the string where appropriate, maybe to the tty, maybe added as a field label in a dialog box. Note that this gets fed all strings associated with a UI, one after the other, so care must be taken which ones it actually uses.

+ +
+
a flusher
+
+ +

This function takes a reference to a UI, and flushes everything that has been output so far. For example, if the method builds up a dialog box, this can be used to actually display it and accepting input ended with a pressed button.

+ +
+
a reader
+
+ +

This function takes a reference to a UI and a UI string and reads off the given prompt, maybe from the tty, maybe from a field in a dialog box. Note that this gets fed all strings associated with a UI, one after the other, so care must be taken which ones it actually uses.

+ +
+
a closer
+
+ +

This function takes a reference to a UI, and closes the session, maybe by closing the channel to the tty, maybe by destroying a dialog box.

+ +
+
+ +

All of these functions are expected to return 0 on error, 1 on success, or -1 on out-off-band events, for example if some prompting has been cancelled (by pressing Ctrl-C, for example). Only the flusher or the reader are expected to return -1. If returned by another of the functions, it's treated as if 0 was returned.

+ +

Regarding the writer and the reader, don't assume the former should only write and don't assume the latter should only read. This depends on the needs of the method.

+ +

For example, a typical tty reader wouldn't write the prompts in the write, but would rather do so in the reader, because of the sequential nature of prompting on a tty. This is how the UI_OpenSSL() method does it.

+ +

In contrast, a method that builds up a dialog box would add all prompt text in the writer, have all input read in the flusher and store the results in some temporary buffer, and finally have the reader just fetch those results.

+ +

The central function that uses these method functions is UI_process(), and it does it in five steps:

+ +
    + +
  1. Open the session using the opener function if that one's defined. If an error occurs, jump to 5.

    + +
  2. +
  3. For every UI String associated with the UI, call the writer function if that one's defined. If an error occurs, jump to 5.

    + +
  4. +
  5. Flush everything using the flusher function if that one's defined. If an error occurs, jump to 5.

    + +
  6. +
  7. For every UI String associated with the UI, call the reader function if that one's defined. If an error occurs, jump to 5.

    + +
  8. +
  9. Close the session using the closer function if that one's defined.

    + +
  10. +
+ +

UI_create_method() creates a new UI method with a given name.

+ +

UI_destroy_method() destroys the given UI method ui_method.

+ +

UI_method_set_opener(), UI_method_set_writer(), UI_method_set_flusher(), UI_method_set_reader() and UI_method_set_closer() set the five main method function to the given function pointer.

+ +

UI_method_set_data_duplicator() sets the user data duplicator and destructor. See UI_dup_user_data(3).

+ +

UI_method_set_prompt_constructor() sets the prompt constructor. See UI_construct_prompt(3).

+ +

UI_method_set_ex_data() sets application specific data with a given EX_DATA index. See CRYPTO_get_ex_new_index(3) for general information on how to get that index.

+ +

UI_method_get_opener(), UI_method_get_writer(), UI_method_get_flusher(), UI_method_get_reader(), UI_method_get_closer(), UI_method_get_data_duplicator(), UI_method_get_data_destructor() and UI_method_get_prompt_constructor() return the different method functions.

+ +

UI_method_get_ex_data() returns the application data previously stored with UI_method_set_ex_data().

+ +

RETURN VALUES

+ +

UI_create_method() returns a UI_METHOD pointer on success, NULL on error.

+ +

UI_method_set_opener(), UI_method_set_writer(), UI_method_set_flusher(), UI_method_set_reader(), UI_method_set_closer(), UI_method_set_data_duplicator() and UI_method_set_prompt_constructor() return 0 on success, -1 if the given method is NULL.

+ +

UI_method_set_ex_data() returns 1 on success and 0 on error (because CRYPTO_set_ex_data() does so).

+ +

UI_method_get_opener(), UI_method_get_writer(), UI_method_get_flusher(), UI_method_get_reader(), UI_method_get_closer(), UI_method_get_data_duplicator(), UI_method_get_data_destructor() and UI_method_get_prompt_constructor() return the requested function pointer if it's set in the method, otherwise NULL.

+ +

UI_method_get_ex_data() returns a pointer to the application specific data associated with the method.

+ +

SEE ALSO

+ +

UI(3), CRYPTO_get_ex_data(3), UI_STRING(3)

+ +

HISTORY

+ +

The UI_method_set_data_duplicator(), UI_method_get_data_duplicator() and UI_method_get_data_destructor() functions were added in OpenSSL 1.1.1.

+ +

COPYRIGHT

+ +

Copyright 2001-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/UI_new.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/UI_new.html new file mode 100644 index 00000000..11594b5d --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/UI_new.html @@ -0,0 +1,178 @@ + + + + +UI_new + + + + + + + + + + +

NAME

+ +

UI, UI_new, UI_new_method, UI_free, UI_add_input_string, UI_dup_input_string, UI_add_verify_string, UI_dup_verify_string, UI_add_input_boolean, UI_dup_input_boolean, UI_add_info_string, UI_dup_info_string, UI_add_error_string, UI_dup_error_string, UI_construct_prompt, UI_add_user_data, UI_dup_user_data, UI_get0_user_data, UI_get0_result, UI_get_result_length, UI_process, UI_ctrl, UI_set_default_method, UI_get_default_method, UI_get_method, UI_set_method, UI_OpenSSL, UI_null - user interface

+ +

SYNOPSIS

+ +
#include <openssl/ui.h>
+
+typedef struct ui_st UI;
+
+UI *UI_new(void);
+UI *UI_new_method(const UI_METHOD *method);
+void UI_free(UI *ui);
+
+int UI_add_input_string(UI *ui, const char *prompt, int flags,
+                        char *result_buf, int minsize, int maxsize);
+int UI_dup_input_string(UI *ui, const char *prompt, int flags,
+                        char *result_buf, int minsize, int maxsize);
+int UI_add_verify_string(UI *ui, const char *prompt, int flags,
+                         char *result_buf, int minsize, int maxsize,
+                         const char *test_buf);
+int UI_dup_verify_string(UI *ui, const char *prompt, int flags,
+                         char *result_buf, int minsize, int maxsize,
+                         const char *test_buf);
+int UI_add_input_boolean(UI *ui, const char *prompt, const char *action_desc,
+                         const char *ok_chars, const char *cancel_chars,
+                         int flags, char *result_buf);
+int UI_dup_input_boolean(UI *ui, const char *prompt, const char *action_desc,
+                         const char *ok_chars, const char *cancel_chars,
+                         int flags, char *result_buf);
+int UI_add_info_string(UI *ui, const char *text);
+int UI_dup_info_string(UI *ui, const char *text);
+int UI_add_error_string(UI *ui, const char *text);
+int UI_dup_error_string(UI *ui, const char *text);
+
+char *UI_construct_prompt(UI *ui_method,
+       const char *object_desc, const char *object_name);
+
+void *UI_add_user_data(UI *ui, void *user_data);
+int UI_dup_user_data(UI *ui, void *user_data);
+void *UI_get0_user_data(UI *ui);
+
+const char *UI_get0_result(UI *ui, int i);
+int UI_get_result_length(UI *ui, int i);
+
+int UI_process(UI *ui);
+
+int UI_ctrl(UI *ui, int cmd, long i, void *p, void (*f)());
+
+void UI_set_default_method(const UI_METHOD *meth);
+const UI_METHOD *UI_get_default_method(void);
+const UI_METHOD *UI_get_method(UI *ui);
+const UI_METHOD *UI_set_method(UI *ui, const UI_METHOD *meth);
+
+UI_METHOD *UI_OpenSSL(void);
+const UI_METHOD *UI_null(void);
+ +

DESCRIPTION

+ +

UI stands for User Interface, and is general purpose set of routines to prompt the user for text-based information. Through user-written methods (see UI_create_method(3)), prompting can be done in any way imaginable, be it plain text prompting, through dialog boxes or from a cell phone.

+ +

All the functions work through a context of the type UI. This context contains all the information needed to prompt correctly as well as a reference to a UI_METHOD, which is an ordered vector of functions that carry out the actual prompting.

+ +

The first thing to do is to create a UI with UI_new() or UI_new_method(), then add information to it with the UI_add or UI_dup functions. Also, user-defined random data can be passed down to the underlying method through calls to UI_add_user_data() or UI_dup_user_data(). The default UI method doesn't care about these data, but other methods might. Finally, use UI_process() to actually perform the prompting and UI_get0_result() and UI_get_result_length() to find the result to the prompt and its length.

+ +

A UI can contain more than one prompt, which are performed in the given sequence. Each prompt gets an index number which is returned by the UI_add and UI_dup functions, and has to be used to get the corresponding result with UI_get0_result() and UI_get_result_length().

+ +

UI_process() can be called more than once on the same UI, thereby allowing a UI to have a long lifetime, but can just as well have a short lifetime.

+ +

The functions are as follows:

+ +

UI_new() creates a new UI using the default UI method. When done with this UI, it should be freed using UI_free().

+ +

UI_new_method() creates a new UI using the given UI method. When done with this UI, it should be freed using UI_free().

+ +

UI_OpenSSL() returns the built-in UI method (note: not necessarily the default one, since the default can be changed. See further on). This method is the most machine/OS dependent part of OpenSSL and normally generates the most problems when porting.

+ +

UI_null() returns a UI method that does nothing. Its use is to avoid getting internal defaults for passed UI_METHOD pointers.

+ +

UI_free() removes a UI from memory, along with all other pieces of memory that's connected to it, like duplicated input strings, results and others. If ui is NULL nothing is done.

+ +

UI_add_input_string() and UI_add_verify_string() add a prompt to the UI, as well as flags and a result buffer and the desired minimum and maximum sizes of the result, not counting the final NUL character. The given information is used to prompt for information, for example a password, and to verify a password (i.e. having the user enter it twice and check that the same string was entered twice). UI_add_verify_string() takes and extra argument that should be a pointer to the result buffer of the input string that it's supposed to verify, or verification will fail.

+ +

UI_add_input_boolean() adds a prompt to the UI that's supposed to be answered in a boolean way, with a single character for yes and a different character for no. A set of characters that can be used to cancel the prompt is given as well. The prompt itself is divided in two, one part being the descriptive text (given through the prompt argument) and one describing the possible answers (given through the action_desc argument).

+ +

UI_add_info_string() and UI_add_error_string() add strings that are shown at the same time as the prompt for extra information or to show an error string. The difference between the two is only conceptual. With the builtin method, there's no technical difference between them. Other methods may make a difference between them, however.

+ +

The flags currently supported are UI_INPUT_FLAG_ECHO, which is relevant for UI_add_input_string() and will have the users response be echoed (when prompting for a password, this flag should obviously not be used, and UI_INPUT_FLAG_DEFAULT_PWD, which means that a default password of some sort will be used (completely depending on the application and the UI method).

+ +

UI_dup_input_string(), UI_dup_verify_string(), UI_dup_input_boolean(), UI_dup_info_string() and UI_dup_error_string() are basically the same as their UI_add counterparts, except that they make their own copies of all strings.

+ +

UI_construct_prompt() is a helper function that can be used to create a prompt from two pieces of information: an description and a name. The default constructor (if there is none provided by the method used) creates a string "Enter description for name:". With the description "pass phrase" and the file name "foo.key", that becomes "Enter pass phrase for foo.key:". Other methods may create whatever string and may include encodings that will be processed by the other method functions.

+ +

UI_add_user_data() adds a user data pointer for the method to use at any time. The builtin UI method doesn't care about this info. Note that several calls to this function doesn't add data, it replaces the previous blob with the one given as argument.

+ +

UI_dup_user_data() duplicates the user data and works as an alternative to UI_add_user_data() when the user data needs to be preserved for a longer duration, perhaps even the lifetime of the application. The UI object takes ownership of this duplicate and will free it whenever it gets replaced or the UI is destroyed. UI_dup_user_data() returns 0 on success, or -1 on memory allocation failure or if the method doesn't have a duplicator function.

+ +

UI_get0_user_data() retrieves the data that has last been given to the UI with UI_add_user_data() or UI_dup_user_data.

+ +

UI_get0_result() returns a pointer to the result buffer associated with the information indexed by i.

+ +

UI_get_result_length() returns the length of the result buffer associated with the information indexed by i.

+ +

UI_process() goes through the information given so far, does all the printing and prompting and returns the final status, which is -2 on out-of-band events (Interrupt, Cancel, ...), -1 on error and 0 on success.

+ +

UI_ctrl() adds extra control for the application author. For now, it understands two commands: UI_CTRL_PRINT_ERRORS, which makes UI_process() print the OpenSSL error stack as part of processing the UI, and UI_CTRL_IS_REDOABLE, which returns a flag saying if the used UI can be used again or not.

+ +

UI_set_default_method() changes the default UI method to the one given. This function is not thread-safe and should not be called at the same time as other OpenSSL functions.

+ +

UI_get_default_method() returns a pointer to the current default UI method.

+ +

UI_get_method() returns the UI method associated with a given UI.

+ +

UI_set_method() changes the UI method associated with a given UI.

+ +

NOTES

+ +

The resulting strings that the built in method UI_OpenSSL() generate are assumed to be encoded according to the current locale or (for Windows) code page. For applications having different demands, these strings need to be converted appropriately by the caller. For Windows, if the OPENSSL_WIN32_UTF8 environment variable is set, the built-in method UI_OpenSSL() will produce UTF-8 encoded strings instead.

+ +

RETURN VALUES

+ +

UI_new() and UI_new_method() return a valid UI structure or NULL if an error occurred.

+ +

UI_add_input_string(), UI_dup_input_string(), UI_add_verify_string(), UI_dup_verify_string(), UI_add_input_boolean(), UI_dup_input_boolean(), UI_add_info_string(), UI_dup_info_string(), UI_add_error_string() and UI_dup_error_string() return a positive number on success or a value which is less than or equal to 0 otherwise.

+ +

UI_construct_prompt() returns a string or NULL if an error occurred.

+ +

UI_dup_user_data() returns 0 on success or -1 on error.

+ +

UI_get0_result() returns a string or NULL on error.

+ +

UI_get_result_length() returns a positive integer or 0 on success; otherwise it returns -1 on error.

+ +

UI_process() returns 0 on success or a negative value on error.

+ +

UI_ctrl() returns a mask on success or -1 on error.

+ +

UI_get_default_method(), UI_get_method(), UI_OpenSSL(), UI_null() and UI_set_method() return either a valid UI_METHOD structure or NULL respectively.

+ +

HISTORY

+ +

The UI_dup_user_data() function was added in OpenSSL 1.1.1.

+ +

COPYRIGHT

+ +

Copyright 2001-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509V3_get_d2i.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509V3_get_d2i.html new file mode 100644 index 00000000..356629b7 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509V3_get_d2i.html @@ -0,0 +1,214 @@ + + + + +X509V3_get_d2i + + + + + + + + + + +

NAME

+ +

X509_get0_extensions, X509_CRL_get0_extensions, X509_REVOKED_get0_extensions, X509V3_get_d2i, X509V3_add1_i2d, X509V3_EXT_d2i, X509V3_EXT_i2d, X509_get_ext_d2i, X509_add1_ext_i2d, X509_CRL_get_ext_d2i, X509_CRL_add1_ext_i2d, X509_REVOKED_get_ext_d2i, X509_REVOKED_add1_ext_i2d - X509 extension decode and encode functions

+ +

SYNOPSIS

+ +
#include <openssl/x509v3.h>
+
+void *X509V3_get_d2i(const STACK_OF(X509_EXTENSION) *x, int nid, int *crit,
+                     int *idx);
+int X509V3_add1_i2d(STACK_OF(X509_EXTENSION) **x, int nid, void *value,
+                    int crit, unsigned long flags);
+
+void *X509V3_EXT_d2i(X509_EXTENSION *ext);
+X509_EXTENSION *X509V3_EXT_i2d(int ext_nid, int crit, void *ext);
+
+void *X509_get_ext_d2i(const X509 *x, int nid, int *crit, int *idx);
+int X509_add1_ext_i2d(X509 *x, int nid, void *value, int crit,
+                      unsigned long flags);
+
+void *X509_CRL_get_ext_d2i(const X509_CRL *crl, int nid, int *crit, int *idx);
+int X509_CRL_add1_ext_i2d(X509_CRL *crl, int nid, void *value, int crit,
+                          unsigned long flags);
+
+void *X509_REVOKED_get_ext_d2i(const X509_REVOKED *r, int nid, int *crit, int *idx);
+int X509_REVOKED_add1_ext_i2d(X509_REVOKED *r, int nid, void *value, int crit,
+                              unsigned long flags);
+
+const STACK_OF(X509_EXTENSION) *X509_get0_extensions(const X509 *x);
+const STACK_OF(X509_EXTENSION) *X509_CRL_get0_extensions(const X509_CRL *crl);
+const STACK_OF(X509_EXTENSION) *X509_REVOKED_get0_extensions(const X509_REVOKED *r);
+ +

DESCRIPTION

+ +

X509V3_get_ext_d2i() looks for an extension with OID nid in the extensions x and, if found, decodes it. If idx is NULL then only one occurrence of an extension is permissible otherwise the first extension after index *idx is returned and *idx updated to the location of the extension. If crit is not NULL then *crit is set to a status value: -2 if the extension occurs multiple times (this is only returned if idx is NULL), -1 if the extension could not be found, 0 if the extension is found and is not critical and 1 if critical. A pointer to an extension specific structure or NULL is returned.

+ +

X509V3_add1_i2d() adds extension value to STACK *x (allocating a new STACK if necessary) using OID nid and criticality crit according to flags.

+ +

X509V3_EXT_d2i() attempts to decode the ASN.1 data contained in extension ext and returns a pointer to an extension specific structure or NULL if the extension could not be decoded (invalid syntax or not supported).

+ +

X509V3_EXT_i2d() encodes the extension specific structure ext with OID ext_nid and criticality crit.

+ +

X509_get_ext_d2i() and X509_add1_ext_i2d() operate on the extensions of certificate x, they are otherwise identical to X509V3_get_d2i() and X509V3_add_i2d().

+ +

X509_CRL_get_ext_d2i() and X509_CRL_add1_ext_i2d() operate on the extensions of CRL crl, they are otherwise identical to X509V3_get_d2i() and X509V3_add_i2d().

+ +

X509_REVOKED_get_ext_d2i() and X509_REVOKED_add1_ext_i2d() operate on the extensions of X509_REVOKED structure r (i.e for CRL entry extensions), they are otherwise identical to X509V3_get_d2i() and X509V3_add_i2d().

+ +

X509_get0_extensions(), X509_CRL_get0_extensions() and X509_REVOKED_get0_extensions() return a stack of all the extensions of a certificate a CRL or a CRL entry respectively.

+ +

NOTES

+ +

In almost all cases an extension can occur at most once and multiple occurrences is an error. Therefore the idx parameter is usually NULL.

+ +

The flags parameter may be one of the following values.

+ +

X509V3_ADD_DEFAULT appends a new extension only if the extension does not already exist. An error is returned if the extension does already exist.

+ +

X509V3_ADD_APPEND appends a new extension, ignoring whether the extension already exists.

+ +

X509V3_ADD_REPLACE replaces an extension if it exists otherwise appends a new extension.

+ +

X509V3_ADD_REPLACE_EXISTING replaces an existing extension if it exists otherwise returns an error.

+ +

X509V3_ADD_KEEP_EXISTING appends a new extension only if the extension does not already exist. An error is not returned if the extension does already exist.

+ +

X509V3_ADD_DELETE extension nid is deleted: no new extension is added.

+ +

If X509V3_ADD_SILENT is ored with flags: any error returned will not be added to the error queue.

+ +

The function X509V3_get_d2i() will return NULL if the extension is not found, occurs multiple times or cannot be decoded. It is possible to determine the precise reason by checking the value of *crit.

+ +

SUPPORTED EXTENSIONS

+ +

The following sections contain a list of all supported extensions including their name and NID.

+ +

PKIX Certificate Extensions

+ +

The following certificate extensions are defined in PKIX standards such as RFC5280.

+ +
Basic Constraints                  NID_basic_constraints
+Key Usage                          NID_key_usage
+Extended Key Usage                 NID_ext_key_usage
+
+Subject Key Identifier             NID_subject_key_identifier
+Authority Key Identifier           NID_authority_key_identifier
+
+Private Key Usage Period           NID_private_key_usage_period
+
+Subject Alternative Name           NID_subject_alt_name
+Issuer Alternative Name            NID_issuer_alt_name
+
+Authority Information Access       NID_info_access
+Subject Information Access         NID_sinfo_access
+
+Name Constraints                   NID_name_constraints
+
+Certificate Policies               NID_certificate_policies
+Policy Mappings                    NID_policy_mappings
+Policy Constraints                 NID_policy_constraints
+Inhibit Any Policy                 NID_inhibit_any_policy
+
+TLS Feature                        NID_tlsfeature
+ +

Netscape Certificate Extensions

+ +

The following are (largely obsolete) Netscape certificate extensions.

+ +
Netscape Cert Type                 NID_netscape_cert_type
+Netscape Base Url                  NID_netscape_base_url
+Netscape Revocation Url            NID_netscape_revocation_url
+Netscape CA Revocation Url         NID_netscape_ca_revocation_url
+Netscape Renewal Url               NID_netscape_renewal_url
+Netscape CA Policy Url             NID_netscape_ca_policy_url
+Netscape SSL Server Name           NID_netscape_ssl_server_name
+Netscape Comment                   NID_netscape_comment
+ +

Miscellaneous Certificate Extensions

+ +
Strong Extranet ID                 NID_sxnet
+Proxy Certificate Information      NID_proxyCertInfo
+ +

PKIX CRL Extensions

+ +

The following are CRL extensions from PKIX standards such as RFC5280.

+ +
CRL Number                         NID_crl_number
+CRL Distribution Points            NID_crl_distribution_points
+Delta CRL Indicator                NID_delta_crl
+Freshest CRL                       NID_freshest_crl
+Invalidity Date                    NID_invalidity_date
+Issuing Distribution Point         NID_issuing_distribution_point
+ +

The following are CRL entry extensions from PKIX standards such as RFC5280.

+ +
CRL Reason Code                    NID_crl_reason
+Certificate Issuer                 NID_certificate_issuer
+ +

OCSP Extensions

+ +
OCSP Nonce                         NID_id_pkix_OCSP_Nonce
+OCSP CRL ID                        NID_id_pkix_OCSP_CrlID
+Acceptable OCSP Responses          NID_id_pkix_OCSP_acceptableResponses
+OCSP No Check                      NID_id_pkix_OCSP_noCheck
+OCSP Archive Cutoff                NID_id_pkix_OCSP_archiveCutoff
+OCSP Service Locator               NID_id_pkix_OCSP_serviceLocator
+Hold Instruction Code              NID_hold_instruction_code
+ +

Certificate Transparency Extensions

+ +

The following extensions are used by certificate transparency, RFC6962

+ +
CT Precertificate SCTs             NID_ct_precert_scts
+CT Certificate SCTs                NID_ct_cert_scts
+ +

RETURN VALUES

+ +

X509V3_EXT_d2i() and *X509V3_get_d2i() return a pointer to an extension specific structure of NULL if an error occurs.

+ +

X509V3_EXT_i2d() returns a pointer to an X509_EXTENSION structure or NULL if an error occurs.

+ +

X509V3_add1_i2d() returns 1 if the operation is successful and 0 if it fails due to a non-fatal error (extension not found, already exists, cannot be encoded) or -1 due to a fatal error such as a memory allocation failure.

+ +

X509_get0_extensions(), X509_CRL_get0_extensions() and X509_REVOKED_get0_extensions() return a stack of extensions. They return NULL if no extensions are present.

+ +

SEE ALSO

+ +

d2i_X509(3), ERR_get_error(3), X509_CRL_get0_by_serial(3), X509_get0_signature(3), X509_get_ext_d2i(3), X509_get_extension_flags(3), X509_get_pubkey(3), X509_get_subject_name(3), X509_get_version(3), X509_NAME_add_entry_by_txt(3), X509_NAME_ENTRY_get_object(3), X509_NAME_get_index_by_NID(3), X509_NAME_print_ex(3), X509_new(3), X509_sign(3), X509_verify_cert(3)

+ +

COPYRIGHT

+ +

Copyright 2015-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_ALGOR_dup.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_ALGOR_dup.html new file mode 100644 index 00000000..62f5c9f1 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_ALGOR_dup.html @@ -0,0 +1,70 @@ + + + + +X509_ALGOR_dup + + + + + + + + + + +

NAME

+ +

X509_ALGOR_dup, X509_ALGOR_set0, X509_ALGOR_get0, X509_ALGOR_set_md, X509_ALGOR_cmp - AlgorithmIdentifier functions

+ +

SYNOPSIS

+ +
#include <openssl/x509.h>
+
+X509_ALGOR *X509_ALGOR_dup(X509_ALGOR *alg);
+int X509_ALGOR_set0(X509_ALGOR *alg, ASN1_OBJECT *aobj, int ptype, void *pval);
+void X509_ALGOR_get0(const ASN1_OBJECT **paobj, int *pptype,
+                     const void **ppval, const X509_ALGOR *alg);
+void X509_ALGOR_set_md(X509_ALGOR *alg, const EVP_MD *md);
+int X509_ALGOR_cmp(const X509_ALGOR *a, const X509_ALGOR *b);
+ +

DESCRIPTION

+ +

X509_ALGOR_dup() returns a copy of alg.

+ +

X509_ALGOR_set0() sets the algorithm OID of alg to aobj and the associated parameter type to ptype with value pval. If ptype is V_ASN1_UNDEF the parameter is omitted, otherwise ptype and pval have the same meaning as the type and value parameters to ASN1_TYPE_set(). All the supplied parameters are used internally so must NOT be freed after this call.

+ +

X509_ALGOR_get0() is the inverse of X509_ALGOR_set0(): it returns the algorithm OID in *paobj and the associated parameter in *pptype and *ppval from the AlgorithmIdentifier alg.

+ +

X509_ALGOR_set_md() sets the AlgorithmIdentifier alg to appropriate values for the message digest md.

+ +

X509_ALGOR_cmp() compares a and b and returns 0 if they have identical encodings and non-zero otherwise.

+ +

RETURN VALUES

+ +

X509_ALGOR_dup() returns a valid X509_ALGOR structure or NULL if an error occurred.

+ +

X509_ALGOR_set0() returns 1 on success or 0 on error.

+ +

X509_ALGOR_get0() and X509_ALGOR_set_md() return no values.

+ +

X509_ALGOR_cmp() returns 0 if the two parameters have identical encodings and non-zero otherwise.

+ +

COPYRIGHT

+ +

Copyright 2002-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_CRL_get0_by_serial.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_CRL_get0_by_serial.html new file mode 100644 index 00000000..4baeb79e --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_CRL_get0_by_serial.html @@ -0,0 +1,99 @@ + + + + +X509_CRL_get0_by_serial + + + + + + + + + + +

NAME

+ +

X509_CRL_get0_by_serial, X509_CRL_get0_by_cert, X509_CRL_get_REVOKED, X509_REVOKED_get0_serialNumber, X509_REVOKED_get0_revocationDate, X509_REVOKED_set_serialNumber, X509_REVOKED_set_revocationDate, X509_CRL_add0_revoked, X509_CRL_sort - CRL revoked entry utility functions

+ +

SYNOPSIS

+ +
#include <openssl/x509.h>
+
+int X509_CRL_get0_by_serial(X509_CRL *crl,
+                            X509_REVOKED **ret, ASN1_INTEGER *serial);
+int X509_CRL_get0_by_cert(X509_CRL *crl, X509_REVOKED **ret, X509 *x);
+
+STACK_OF(X509_REVOKED) *X509_CRL_get_REVOKED(X509_CRL *crl);
+
+const ASN1_INTEGER *X509_REVOKED_get0_serialNumber(const X509_REVOKED *r);
+const ASN1_TIME *X509_REVOKED_get0_revocationDate(const X509_REVOKED *r);
+
+int X509_REVOKED_set_serialNumber(X509_REVOKED *r, ASN1_INTEGER *serial);
+int X509_REVOKED_set_revocationDate(X509_REVOKED *r, ASN1_TIME *tm);
+
+int X509_CRL_add0_revoked(X509_CRL *crl, X509_REVOKED *rev);
+
+int X509_CRL_sort(X509_CRL *crl);
+ +

DESCRIPTION

+ +

X509_CRL_get0_by_serial() attempts to find a revoked entry in crl for serial number serial. If it is successful it sets *ret to the internal pointer of the matching entry, as a result *ret must not be freed up after the call.

+ +

X509_CRL_get0_by_cert() is similar to X509_get0_by_serial() except it looks for a revoked entry using the serial number of certificate x.

+ +

X509_CRL_get_REVOKED() returns an internal pointer to a stack of all revoked entries for crl.

+ +

X509_REVOKED_get0_serialNumber() returns an internal pointer to the serial number of r.

+ +

X509_REVOKED_get0_revocationDate() returns an internal pointer to the revocation date of r.

+ +

X509_REVOKED_set_serialNumber() sets the serial number of r to serial. The supplied serial pointer is not used internally so it should be freed up after use.

+ +

X509_REVOKED_set_revocationDate() sets the revocation date of r to tm. The supplied tm pointer is not used internally so it should be freed up after use.

+ +

X509_CRL_add0_revoked() appends revoked entry rev to CRL crl. The pointer rev is used internally so it must not be freed up after the call: it is freed when the parent CRL is freed.

+ +

X509_CRL_sort() sorts the revoked entries of crl into ascending serial number order.

+ +

NOTES

+ +

Applications can determine the number of revoked entries returned by X509_CRL_get_revoked() using sk_X509_REVOKED_num() and examine each one in turn using sk_X509_REVOKED_value().

+ +

RETURN VALUES

+ +

X509_CRL_get0_by_serial() and X509_CRL_get0_by_cert() return 0 for failure, 1 on success except if the revoked entry has the reason removeFromCRL (8), in which case 2 is returned.

+ +

X509_REVOKED_set_serialNumber(), X509_REVOKED_set_revocationDate(), X509_CRL_add0_revoked() and X509_CRL_sort() return 1 for success and 0 for failure.

+ +

X509_REVOKED_get0_serialNumber() returns an ASN1_INTEGER pointer.

+ +

X509_REVOKED_get0_revocationDate() returns an ASN1_TIME value.

+ +

X509_CRL_get_REVOKED() returns a STACK of revoked entries.

+ +

SEE ALSO

+ +

d2i_X509(3), ERR_get_error(3), X509_get0_signature(3), X509_get_ext_d2i(3), X509_get_extension_flags(3), X509_get_pubkey(3), X509_get_subject_name(3), X509_get_version(3), X509_NAME_add_entry_by_txt(3), X509_NAME_ENTRY_get_object(3), X509_NAME_get_index_by_NID(3), X509_NAME_print_ex(3), X509_new(3), X509_sign(3), X509V3_get_d2i(3), X509_verify_cert(3)

+ +

COPYRIGHT

+ +

Copyright 2015-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_EXTENSION_set_object.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_EXTENSION_set_object.html new file mode 100644 index 00000000..9e48143d --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_EXTENSION_set_object.html @@ -0,0 +1,96 @@ + + + + +X509_EXTENSION_set_object + + + + + + + + + + +

NAME

+ +

X509_EXTENSION_set_object, X509_EXTENSION_set_critical, X509_EXTENSION_set_data, X509_EXTENSION_create_by_NID, X509_EXTENSION_create_by_OBJ, X509_EXTENSION_get_object, X509_EXTENSION_get_critical, X509_EXTENSION_get_data - extension utility functions

+ +

SYNOPSIS

+ +
int X509_EXTENSION_set_object(X509_EXTENSION *ex, const ASN1_OBJECT *obj);
+int X509_EXTENSION_set_critical(X509_EXTENSION *ex, int crit);
+int X509_EXTENSION_set_data(X509_EXTENSION *ex, ASN1_OCTET_STRING *data);
+
+X509_EXTENSION *X509_EXTENSION_create_by_NID(X509_EXTENSION **ex,
+                                             int nid, int crit,
+                                             ASN1_OCTET_STRING *data);
+X509_EXTENSION *X509_EXTENSION_create_by_OBJ(X509_EXTENSION **ex,
+                                             const ASN1_OBJECT *obj, int crit,
+                                             ASN1_OCTET_STRING *data);
+
+ASN1_OBJECT *X509_EXTENSION_get_object(X509_EXTENSION *ex);
+int X509_EXTENSION_get_critical(const X509_EXTENSION *ex);
+ASN1_OCTET_STRING *X509_EXTENSION_get_data(X509_EXTENSION *ne);
+ +

DESCRIPTION

+ +

X509_EXTENSION_set_object() sets the extension type of ex to obj. The obj pointer is duplicated internally so obj should be freed up after use.

+ +

X509_EXTENSION_set_critical() sets the criticality of ex to crit. If crit is zero the extension in non-critical otherwise it is critical.

+ +

X509_EXTENSION_set_data() sets the data in extension ex to data. The data pointer is duplicated internally.

+ +

X509_EXTENSION_create_by_NID() creates an extension of type nid, criticality crit using data data. The created extension is returned and written to *ex reusing or allocating a new extension if necessary so *ex should either be NULL or a valid X509_EXTENSION structure it must not be an uninitialised pointer.

+ +

X509_EXTENSION_create_by_OBJ() is identical to X509_EXTENSION_create_by_NID() except it creates and extension using obj instead of a NID.

+ +

X509_EXTENSION_get_object() returns the extension type of ex as an ASN1_OBJECT pointer. The returned pointer is an internal value which must not be freed up.

+ +

X509_EXTENSION_get_critical() returns the criticality of extension ex it returns 1 for critical and 0 for non-critical.

+ +

X509_EXTENSION_get_data() returns the data of extension ex. The returned pointer is an internal value which must not be freed up.

+ +

NOTES

+ +

These functions manipulate the contents of an extension directly. Most applications will want to parse or encode and add an extension: they should use the extension encode and decode functions instead such as X509_add1_ext_i2d() and X509_get_ext_d2i().

+ +

The data associated with an extension is the extension encoding in an ASN1_OCTET_STRING structure.

+ +

RETURN VALUES

+ +

X509_EXTENSION_set_object() X509_EXTENSION_set_critical() and X509_EXTENSION_set_data() return 1 for success and 0 for failure.

+ +

X509_EXTENSION_create_by_NID() and X509_EXTENSION_create_by_OBJ() return an X509_EXTENSION pointer or NULL if an error occurs.

+ +

X509_EXTENSION_get_object() returns an ASN1_OBJECT pointer.

+ +

X509_EXTENSION_get_critical() returns 0 for non-critical and 1 for critical.

+ +

X509_EXTENSION_get_data() returns an ASN1_OCTET_STRING pointer.

+ +

SEE ALSO

+ +

X509V3_get_d2i(3)

+ +

COPYRIGHT

+ +

Copyright 2015-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_LOOKUP.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_LOOKUP.html new file mode 100644 index 00000000..b36bfc85 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_LOOKUP.html @@ -0,0 +1,177 @@ + + + + +X509_LOOKUP + + + + + + + + + + +

NAME

+ +

X509_LOOKUP, X509_LOOKUP_TYPE, X509_LOOKUP_new, X509_LOOKUP_free, X509_LOOKUP_init, X509_LOOKUP_shutdown, X509_LOOKUP_set_method_data, X509_LOOKUP_get_method_data, X509_LOOKUP_ctrl, X509_LOOKUP_load_file, X509_LOOKUP_add_dir, X509_LOOKUP_get_store, X509_LOOKUP_by_subject, X509_LOOKUP_by_issuer_serial, X509_LOOKUP_by_fingerprint, X509_LOOKUP_by_alias - OpenSSL certificate lookup mechanisms

+ +

SYNOPSIS

+ +
#include <openssl/x509_vfy.h>
+
+typedef x509_lookup_st X509_LOOKUP;
+
+typedef enum X509_LOOKUP_TYPE;
+
+X509_LOOKUP *X509_LOOKUP_new(X509_LOOKUP_METHOD *method);
+int X509_LOOKUP_init(X509_LOOKUP *ctx);
+int X509_LOOKUP_shutdown(X509_LOOKUP *ctx);
+void X509_LOOKUP_free(X509_LOOKUP *ctx);
+
+int X509_LOOKUP_set_method_data(X509_LOOKUP *ctx, void *data);
+void *X509_LOOKUP_get_method_data(const X509_LOOKUP *ctx);
+
+int X509_LOOKUP_ctrl(X509_LOOKUP *ctx, int cmd, const char *argc,
+                     long argl, char **ret);
+int X509_LOOKUP_load_file(X509_LOOKUP *ctx, char *name, long type);
+int X509_LOOKUP_add_dir(X509_LOOKUP *ctx, char *name, long type);
+
+X509_STORE *X509_LOOKUP_get_store(const X509_LOOKUP *ctx);
+
+int X509_LOOKUP_by_subject(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type,
+                           X509_NAME *name, X509_OBJECT *ret);
+int X509_LOOKUP_by_issuer_serial(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type,
+                                 X509_NAME *name, ASN1_INTEGER *serial,
+                                 X509_OBJECT *ret);
+int X509_LOOKUP_by_fingerprint(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type,
+                               const unsigned char *bytes, int len,
+                               X509_OBJECT *ret);
+int X509_LOOKUP_by_alias(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type,
+                         const char *str, int len, X509_OBJECT *ret);
+ +

DESCRIPTION

+ +

The X509_LOOKUP structure holds the information needed to look up certificates and CRLs according to an associated X509_LOOKUP_METHOD(3). Multiple X509_LOOKUP instances can be added to an X509_STORE(3) to enable lookup in that store.

+ +

X509_LOOKUP_new() creates a new X509_LOOKUP using the given lookup method. It can also be created by calling X509_STORE_add_lookup(3), which will associate an X509_STORE with the lookup mechanism.

+ +

X509_LOOKUP_init() initializes the internal state and resources as needed by the given X509_LOOKUP to do its work.

+ +

X509_LOOKUP_shutdown() tears down the internal state and resources of the given X509_LOOKUP.

+ +

X509_LOOKUP_free() destructs the given X509_LOOKUP.

+ +

X509_LOOKUP_set_method_data() associates a pointer to application data to the given X509_LOOKUP.

+ +

X509_LOOKUP_get_method_data() retrieves a pointer to application data from the given X509_LOOKUP.

+ +

X509_LOOKUP_ctrl() is used to set or get additional data to or from an X509_LOOKUP structure or its associated X509_LOOKUP_METHOD(3). The arguments of the control command are passed via argc and argl, its return value via *ret. The meaning of the arguments depends on the cmd number of the control command. In general, this function is not called directly, but wrapped by a macro call, see below. The control cmds known to OpenSSL are discussed in more depth in "Control Commands".

+ +

X509_LOOKUP_load_file() passes a filename to be loaded immediately into the associated X509_STORE. type indicates what type of object is expected. This can only be used with a lookup using the implementation X509_LOOKUP_file(3).

+ +

X509_LOOKUP_add_dir() passes a directory specification from which certificates and CRLs are loaded on demand into the associated X509_STORE. type indicates what type of object is expected. This can only be used with a lookup using the implementation X509_LOOKUP_hash_dir(3).

+ +

X509_LOOKUP_load_file(), X509_LOOKUP_add_dir(), X509_LOOKUP_add_store(), and X509_LOOKUP_load_store() are implemented as macros that use X509_LOOKUP_ctrl().

+ +

X509_LOOKUP_by_subject(), X509_LOOKUP_by_issuer_serial(), X509_LOOKUP_by_fingerprint(), and X509_LOOKUP_by_alias() look up certificates and CRLs in the X509_STORE(3) associated with the X509_LOOKUP using different criteria, where the looked up object is stored in ret. Some of the underlying X509_LOOKUP_METHODs will also cache objects matching the criteria in the associated X509_STORE, which makes it possible to handle cases where the criteria have more than one hit.

+ +

File Types

+ +

X509_LOOKUP_load_file() and X509_LOOKUP_add_dir() take a type, which can be one of the following:

+ +
+ +
X509_FILETYPE_PEM
+
+ +

The file or files that are loaded are expected to be in PEM format.

+ +
+
X509_FILETYPE_ASN1
+
+ +

The file or files that are loaded are expected to be in raw DER format.

+ +
+
X509_FILETYPE_DEFAULT
+
+ +

The default certificate file or directory is used. In this case, name is ignored.

+ +
+
+ +

Control Commands

+ +

The X509_LOOKUP_METHODs built into OpenSSL recognise the following X509_LOOKUP_ctrl() cmds:

+ +
+ +
X509_L_FILE_LOAD
+
+ +

This is the command that X509_LOOKUP_load_file() uses. The filename is passed in argc, and the type in argl.

+ +
+
X509_L_ADD_DIR
+
+ +

This is the command that X509_LOOKUP_add_dir() uses. The directory specification is passed in argc, and the type in argl.

+ +
+
X509_L_ADD_STORE
+
+ +

This is the command that X509_LOOKUP_add_store() uses. The URI is passed in argc.

+ +
+
X509_L_LOAD_STORE
+
+ +

This is the command that X509_LOOKUP_load_store() uses. The URI is passed in argc.

+ +
+
+ +

RETURN VALUES

+ +

X509_LOOKUP_new() returns an X509_LOOKUP pointer when successful, or NULL on error.

+ +

X509_LOOKUP_init() and X509_LOOKUP_shutdown() return 1 on success, or 0 on error.

+ +

X509_LOOKUP_ctrl() returns -1 if the X509_LOOKUP doesn't have an associated X509_LOOKUP_METHOD, or 1 if the doesn't have a control function. Otherwise, it returns what the control function in the X509_LOOKUP_METHOD returns, which is usually 1 on success and 0 in error.

+ +

X509_LOOKUP_get_store() returns an X509_STORE pointer if there is one, otherwise NULL.

+ +

X509_LOOKUP_by_subject(), X509_LOOKUP_by_issuer_serial(), X509_LOOKUP_by_fingerprint(), and X509_LOOKUP_by_alias() all return 0 if there is no X509_LOOKUP_METHOD or that method doesn't implement the corresponding function. Otherwise, it returns what the corresponding function in the X509_LOOKUP_METHOD returns, which is usually 1 on success and 0 in error.

+ +

SEE ALSO

+ +

X509_LOOKUP_METHOD(3), X509_STORE(3)

+ +

COPYRIGHT

+ +

Copyright 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_LOOKUP_hash_dir.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_LOOKUP_hash_dir.html new file mode 100644 index 00000000..f5f09924 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_LOOKUP_hash_dir.html @@ -0,0 +1,106 @@ + + + + +X509_LOOKUP_hash_dir + + + + + + + + + + +

NAME

+ +

X509_LOOKUP_hash_dir, X509_LOOKUP_file, X509_load_cert_file, X509_load_crl_file, X509_load_cert_crl_file - Default OpenSSL certificate lookup methods

+ +

SYNOPSIS

+ +
#include <openssl/x509_vfy.h>
+
+X509_LOOKUP_METHOD *X509_LOOKUP_hash_dir(void);
+X509_LOOKUP_METHOD *X509_LOOKUP_file(void);
+
+int X509_load_cert_file(X509_LOOKUP *ctx, const char *file, int type);
+int X509_load_crl_file(X509_LOOKUP *ctx, const char *file, int type);
+int X509_load_cert_crl_file(X509_LOOKUP *ctx, const char *file, int type);
+ +

DESCRIPTION

+ +

X509_LOOKUP_hash_dir and X509_LOOKUP_file are two certificate lookup methods to use with X509_STORE, provided by OpenSSL library.

+ +

Users of the library typically do not need to create instances of these methods manually, they would be created automatically by X509_STORE_load_locations(3) or SSL_CTX_load_verify_locations(3) functions.

+ +

Internally loading of certificates and CRLs is implemented via functions X509_load_cert_crl_file, X509_load_cert_file and X509_load_crl_file. These functions support parameter type, which can be one of constants FILETYPE_PEM, FILETYPE_ASN1 and FILETYPE_DEFAULT. They load certificates and/or CRLs from specified file into memory cache of X509_STORE objects which given ctx parameter is associated with.

+ +

Functions X509_load_cert_file and X509_load_crl_file can load both PEM and DER formats depending of type value. Because DER format cannot contain more than one certificate or CRL object (while PEM can contain several concatenated PEM objects) X509_load_cert_crl_file with FILETYPE_ASN1 is equivalent to X509_load_cert_file.

+ +

Constant FILETYPE_DEFAULT with NULL filename causes these functions to load default certificate store file (see X509_STORE_set_default_paths(3).

+ +

Functions return number of objects loaded from file or 0 in case of error.

+ +

Both methods support adding several certificate locations into one X509_STORE.

+ +

This page documents certificate store formats used by these methods and caching policy.

+ +

File Method

+ +

The X509_LOOKUP_file method loads all the certificates or CRLs present in a file into memory at the time the file is added as a lookup source.

+ +

File format is ASCII text which contains concatenated PEM certificates and CRLs.

+ +

This method should be used by applications which work with a small set of CAs.

+ +

Hashed Directory Method

+ +

X509_LOOKUP_hash_dir is a more advanced method, which loads certificates and CRLs on demand, and caches them in memory once they are loaded. As of OpenSSL 1.0.0, it also checks for newer CRLs upon each lookup, so that newer CRLs are as soon as they appear in the directory.

+ +

The directory should contain one certificate or CRL per file in PEM format, with a file name of the form hash.N for a certificate, or hash.rN for a CRL. The hash is the value returned by the X509_NAME_hash(3) function applied to the subject name for certificates or issuer name for CRLs. The hash can also be obtained via the -hash option of the x509(1) or crl(1) commands.

+ +

The .N or .rN suffix is a sequence number that starts at zero, and is incremented consecutively for each certificate or CRL with the same hash value. Gaps in the sequence numbers are not supported, it is assumed that there are no more objects with the same hash beyond the first missing number in the sequence.

+ +

Sequence numbers make it possible for the directory to contain multiple certificates with same subject name hash value. For example, it is possible to have in the store several certificates with same subject or several CRLs with same issuer (and, for example, different validity period).

+ +

When checking for new CRLs once one CRL for given hash value is loaded, hash_dir lookup method checks only for certificates with sequence number greater than that of the already cached CRL.

+ +

Note that the hash algorithm used for subject name hashing changed in OpenSSL 1.0.0, and all certificate stores have to be rehashed when moving from OpenSSL 0.9.8 to 1.0.0.

+ +

OpenSSL includes a rehash(1) utility which creates symlinks with correct hashed names for all files with .pem suffix in a given directory.

+ +

RETURN VALUES

+ +

X509_LOOKUP_hash_dir() and X509_LOOKUP_file() always return a valid X509_LOOKUP_METHOD structure.

+ +

X509_load_cert_file(), X509_load_crl_file() and X509_load_cert_crl_file() return the number of loaded objects or 0 on error.

+ +

SEE ALSO

+ +

PEM_read_PrivateKey(3), X509_STORE_load_locations(3), X509_store_add_lookup(3), SSL_CTX_load_verify_locations(3), X509_LOOKUP_meth_new(3),

+ +

COPYRIGHT

+ +

Copyright 2015-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_LOOKUP_meth_new.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_LOOKUP_meth_new.html new file mode 100644 index 00000000..99b3a24d --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_LOOKUP_meth_new.html @@ -0,0 +1,158 @@ + + + + +X509_LOOKUP_meth_new + + + + + + + + + + +

NAME

+ +

X509_LOOKUP_METHOD, X509_LOOKUP_meth_new, X509_LOOKUP_meth_free, X509_LOOKUP_meth_set_new_item, X509_LOOKUP_meth_get_new_item, X509_LOOKUP_meth_set_free, X509_LOOKUP_meth_get_free, X509_LOOKUP_meth_set_init, X509_LOOKUP_meth_get_init, X509_LOOKUP_meth_set_shutdown, X509_LOOKUP_meth_get_shutdown, X509_LOOKUP_ctrl_fn, X509_LOOKUP_meth_set_ctrl, X509_LOOKUP_meth_get_ctrl, X509_LOOKUP_get_by_subject_fn, X509_LOOKUP_meth_set_get_by_subject, X509_LOOKUP_meth_get_get_by_subject, X509_LOOKUP_get_by_issuer_serial_fn, X509_LOOKUP_meth_set_get_by_issuer_serial, X509_LOOKUP_meth_get_get_by_issuer_serial, X509_LOOKUP_get_by_fingerprint_fn, X509_LOOKUP_meth_set_get_by_fingerprint, X509_LOOKUP_meth_get_get_by_fingerprint, X509_LOOKUP_get_by_alias_fn, X509_LOOKUP_meth_set_get_by_alias, X509_LOOKUP_meth_get_get_by_alias, X509_OBJECT_set1_X509, X509_OBJECT_set1_X509_CRL - Routines to build up X509_LOOKUP methods

+ +

SYNOPSIS

+ +
#include <openssl/x509_vfy.h>
+
+typedef x509_lookup_method_st X509_LOOKUP_METHOD;
+
+X509_LOOKUP_METHOD *X509_LOOKUP_meth_new(const char *name);
+void X509_LOOKUP_meth_free(X509_LOOKUP_METHOD *method);
+
+int X509_LOOKUP_meth_set_new_item(X509_LOOKUP_METHOD *method,
+                                  int (*new_item) (X509_LOOKUP *ctx));
+int (*X509_LOOKUP_meth_get_new_item(const X509_LOOKUP_METHOD* method))
+    (X509_LOOKUP *ctx);
+
+int X509_LOOKUP_meth_set_free(X509_LOOKUP_METHOD *method,
+                              void (*free) (X509_LOOKUP *ctx));
+void (*X509_LOOKUP_meth_get_free(const X509_LOOKUP_METHOD* method))
+    (X509_LOOKUP *ctx);
+
+int X509_LOOKUP_meth_set_init(X509_LOOKUP_METHOD *method,
+                              int (*init) (X509_LOOKUP *ctx));
+int (*X509_LOOKUP_meth_get_init(const X509_LOOKUP_METHOD* method))
+    (X509_LOOKUP *ctx);
+
+int X509_LOOKUP_meth_set_shutdown(X509_LOOKUP_METHOD *method,
+                                  int (*shutdown) (X509_LOOKUP *ctx));
+int (*X509_LOOKUP_meth_get_shutdown(const X509_LOOKUP_METHOD* method))
+    (X509_LOOKUP *ctx);
+
+typedef int (*X509_LOOKUP_ctrl_fn)(X509_LOOKUP *ctx, int cmd, const char *argc,
+                                   long argl, char **ret);
+int X509_LOOKUP_meth_set_ctrl(X509_LOOKUP_METHOD *method,
+    X509_LOOKUP_ctrl_fn ctrl_fn);
+X509_LOOKUP_ctrl_fn X509_LOOKUP_meth_get_ctrl(const X509_LOOKUP_METHOD *method);
+
+typedef int (*X509_LOOKUP_get_by_subject_fn)(X509_LOOKUP *ctx,
+                                             X509_LOOKUP_TYPE type,
+                                             X509_NAME *name,
+                                             X509_OBJECT *ret);
+int X509_LOOKUP_meth_set_get_by_subject(X509_LOOKUP_METHOD *method,
+    X509_LOOKUP_get_by_subject_fn fn);
+X509_LOOKUP_get_by_subject_fn X509_LOOKUP_meth_get_get_by_subject(
+    const X509_LOOKUP_METHOD *method);
+
+typedef int (*X509_LOOKUP_get_by_issuer_serial_fn)(X509_LOOKUP *ctx,
+                                                   X509_LOOKUP_TYPE type,
+                                                   X509_NAME *name,
+                                                   ASN1_INTEGER *serial,
+                                                   X509_OBJECT *ret);
+int X509_LOOKUP_meth_set_get_by_issuer_serial(
+    X509_LOOKUP_METHOD *method, X509_LOOKUP_get_by_issuer_serial_fn fn);
+X509_LOOKUP_get_by_issuer_serial_fn X509_LOOKUP_meth_get_get_by_issuer_serial(
+    const X509_LOOKUP_METHOD *method);
+
+typedef int (*X509_LOOKUP_get_by_fingerprint_fn)(X509_LOOKUP *ctx,
+                                                 X509_LOOKUP_TYPE type,
+                                                 const unsigned char* bytes,
+                                                 int len,
+                                                 X509_OBJECT *ret);
+int X509_LOOKUP_meth_set_get_by_fingerprint(X509_LOOKUP_METHOD *method,
+    X509_LOOKUP_get_by_fingerprint_fn fn);
+X509_LOOKUP_get_by_fingerprint_fn X509_LOOKUP_meth_get_get_by_fingerprint(
+    const X509_LOOKUP_METHOD *method);
+
+typedef int (*X509_LOOKUP_get_by_alias_fn)(X509_LOOKUP *ctx,
+                                           X509_LOOKUP_TYPE type,
+                                           const char *str,
+                                           int len,
+                                           X509_OBJECT *ret);
+int X509_LOOKUP_meth_set_get_by_alias(X509_LOOKUP_METHOD *method,
+    X509_LOOKUP_get_by_alias_fn fn);
+X509_LOOKUP_get_by_alias_fn X509_LOOKUP_meth_get_get_by_alias(
+    const X509_LOOKUP_METHOD *method);
+
+int X509_OBJECT_set1_X509(X509_OBJECT *a, X509 *obj);
+int X509_OBJECT_set1_X509_CRL(X509_OBJECT *a, X509_CRL *obj);
+ +

DESCRIPTION

+ +

The X509_LOOKUP_METHOD type is a structure used for the implementation of new X509_LOOKUP types. It provides a set of functions used by OpenSSL for the implementation of various X509 and X509_CRL lookup capabilities. One instance of an X509_LOOKUP_METHOD can be associated to many instantiations of an X509_LOOKUP structure.

+ +

X509_LOOKUP_meth_new() creates a new X509_LOOKUP_METHOD structure. It should be given a human-readable string containing a brief description of the lookup method.

+ +

X509_LOOKUP_meth_free() destroys a X509_LOOKUP_METHOD structure.

+ +

X509_LOOKUP_get_new_item() and X509_LOOKUP_set_new_item() get and set the function that is called when an X509_LOOKUP object is created with X509_LOOKUP_new(). If an X509_LOOKUP_METHOD requires any per-X509_LOOKUP specific data, the supplied new_item function should allocate this data and invoke X509_LOOKUP_set_method_data(3).

+ +

X509_LOOKUP_get_free() and X509_LOOKUP_set_free() get and set the function that is used to free any method data that was allocated and set from within new_item function.

+ +

X509_LOOKUP_meth_get_init() and X509_LOOKUP_meth_set_init() get and set the function that is used to initialize the method data that was set with X509_LOOKUP_set_method_data(3) as part of the new_item routine.

+ +

X509_LOOKUP_meth_get_shutdown() and X509_LOOKUP_meth_set_shutdown() get and set the function that is used to shut down the method data whose state was previously initialized in the init function.

+ +

X509_LOOKUP_meth_get_ctrl() and X509_LOOKUP_meth_set_ctrl() get and set a function to be used to handle arbitrary control commands issued by X509_LOOKUP_ctrl(). The control function is given the X509_LOOKUP ctx, along with the arguments passed by X509_LOOKUP_ctrl. cmd is an arbitrary integer that defines some operation. argc is a pointer to an array of characters. argl is an integer. ret, if set, points to a location where any return data should be written to. How argc and argl are used depends entirely on the control function.

+ +

X509_LOOKUP_set_get_by_subject(), X509_LOOKUP_set_get_by_issuer_serial(), X509_LOOKUP_set_get_by_fingerprint(), X509_LOOKUP_set_get_by_alias() set the functions used to retrieve an X509 or X509_CRL object by the object's subject, issuer, fingerprint, and alias respectively. These functions are given the X509_LOOKUP context, the type of the X509_OBJECT being requested, parameters related to the lookup, and an X509_OBJECT that will receive the requested object.

+ +

Implementations must add objects they find to the X509_STORE object using X509_STORE_add_cert() or X509_STORE_add_crl(). This increments its reference count. However, the X509_STORE_CTX_get_by_subject() function also increases the reference count which leads to one too many references being held. Therefore applications should additionally call X509_free() or X509_CRL_free() to decrement the reference count again.

+ +

Implementations should also use either X509_OBJECT_set1_X509() or X509_OBJECT_set1_X509_CRL() to set the result. Note that this also increments the result's reference count.

+ +

Any method data that was created as a result of the new_item function set by X509_LOOKUP_meth_set_new_item() can be accessed with X509_LOOKUP_get_method_data(3). The X509_STORE object that owns the X509_LOOKUP may be accessed with X509_LOOKUP_get_store(3). Successful lookups should return 1, and unsuccessful lookups should return 0.

+ +

X509_LOOKUP_get_get_by_subject(), X509_LOOKUP_get_get_by_issuer_serial(), X509_LOOKUP_get_get_by_fingerprint(), X509_LOOKUP_get_get_by_alias() retrieve the function set by the corresponding setter.

+ +

RETURN VALUES

+ +

The X509_LOOKUP_meth_set functions return 1 on success or 0 on error.

+ +

The X509_LOOKUP_meth_get functions return the corresponding function pointers.

+ +

SEE ALSO

+ +

X509_STORE_new(3), SSL_CTX_set_cert_store(3)

+ +

HISTORY

+ +

The functions described here were added in OpenSSL 1.1.0i.

+ +

COPYRIGHT

+ +

Copyright 2018-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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_NAME_ENTRY_get_object.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_NAME_ENTRY_get_object.html new file mode 100644 index 00000000..b305f83b --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_NAME_ENTRY_get_object.html @@ -0,0 +1,94 @@ + + + + +X509_NAME_ENTRY_get_object + + + + + + + + + + +

NAME

+ +

X509_NAME_ENTRY_get_object, X509_NAME_ENTRY_get_data, X509_NAME_ENTRY_set_object, X509_NAME_ENTRY_set_data, X509_NAME_ENTRY_create_by_txt, X509_NAME_ENTRY_create_by_NID, X509_NAME_ENTRY_create_by_OBJ - X509_NAME_ENTRY utility functions

+ +

SYNOPSIS

+ +
#include <openssl/x509.h>
+
+ASN1_OBJECT *X509_NAME_ENTRY_get_object(const X509_NAME_ENTRY *ne);
+ASN1_STRING *X509_NAME_ENTRY_get_data(const X509_NAME_ENTRY *ne);
+
+int X509_NAME_ENTRY_set_object(X509_NAME_ENTRY *ne, const ASN1_OBJECT *obj);
+int X509_NAME_ENTRY_set_data(X509_NAME_ENTRY *ne, int type,
+                             const unsigned char *bytes, int len);
+
+X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_txt(X509_NAME_ENTRY **ne, const char *field,
+                                               int type, const unsigned char *bytes,
+                                               int len);
+X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_NID(X509_NAME_ENTRY **ne, int nid,
+                                               int type, const unsigned char *bytes,
+                                               int len);
+X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_OBJ(X509_NAME_ENTRY **ne,
+                                               const ASN1_OBJECT *obj, int type,
+                                               const unsigned char *bytes, int len);
+ +

DESCRIPTION

+ +

X509_NAME_ENTRY_get_object() retrieves the field name of ne in and ASN1_OBJECT structure.

+ +

X509_NAME_ENTRY_get_data() retrieves the field value of ne in and ASN1_STRING structure.

+ +

X509_NAME_ENTRY_set_object() sets the field name of ne to obj.

+ +

X509_NAME_ENTRY_set_data() sets the field value of ne to string type type and value determined by bytes and len.

+ +

X509_NAME_ENTRY_create_by_txt(), X509_NAME_ENTRY_create_by_NID() and X509_NAME_ENTRY_create_by_OBJ() create and return an X509_NAME_ENTRY structure.

+ +

NOTES

+ +

X509_NAME_ENTRY_get_object() and X509_NAME_ENTRY_get_data() can be used to examine an X509_NAME_ENTRY function as returned by X509_NAME_get_entry() for example.

+ +

X509_NAME_ENTRY_create_by_txt(), X509_NAME_ENTRY_create_by_OBJ(), X509_NAME_ENTRY_create_by_NID() and X509_NAME_ENTRY_set_data() are seldom used in practice because X509_NAME_ENTRY structures are almost always part of X509_NAME structures and the corresponding X509_NAME functions are typically used to create and add new entries in a single operation.

+ +

The arguments of these functions support similar options to the similarly named ones of the corresponding X509_NAME functions such as X509_NAME_add_entry_by_txt(). So for example type can be set to MBSTRING_ASC but in the case of X509_set_data() the field name must be set first so the relevant field information can be looked up internally.

+ +

RETURN VALUES

+ +

X509_NAME_ENTRY_get_object() returns a valid ASN1_OBJECT structure if it is set or NULL if an error occurred.

+ +

X509_NAME_ENTRY_get_data() returns a valid ASN1_STRING structure if it is set or NULL if an error occurred.

+ +

X509_NAME_ENTRY_set_object() and X509_NAME_ENTRY_set_data() return 1 on success or 0 on error.

+ +

X509_NAME_ENTRY_create_by_txt(), X509_NAME_ENTRY_create_by_NID() and X509_NAME_ENTRY_create_by_OBJ() return a valid X509_NAME_ENTRY on success or NULL if an error occurred.

+ +

SEE ALSO

+ +

ERR_get_error(3), d2i_X509_NAME(3), OBJ_nid2obj(3)

+ +

COPYRIGHT

+ +

Copyright 2002-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_NAME_add_entry_by_txt.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_NAME_add_entry_by_txt.html new file mode 100644 index 00000000..b6d53e89 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_NAME_add_entry_by_txt.html @@ -0,0 +1,119 @@ + + + + +X509_NAME_add_entry_by_txt + + + + + + + + + + +

NAME

+ +

X509_NAME_add_entry_by_txt, X509_NAME_add_entry_by_OBJ, X509_NAME_add_entry_by_NID, X509_NAME_add_entry, X509_NAME_delete_entry - X509_NAME modification functions

+ +

SYNOPSIS

+ +
#include <openssl/x509.h>
+
+int X509_NAME_add_entry_by_txt(X509_NAME *name, const char *field, int type,
+                               const unsigned char *bytes, int len, int loc, int set);
+
+int X509_NAME_add_entry_by_OBJ(X509_NAME *name, const ASN1_OBJECT *obj, int type,
+                               const unsigned char *bytes, int len, int loc, int set);
+
+int X509_NAME_add_entry_by_NID(X509_NAME *name, int nid, int type,
+                               const unsigned char *bytes, int len, int loc, int set);
+
+int X509_NAME_add_entry(X509_NAME *name, const X509_NAME_ENTRY *ne, int loc, int set);
+
+X509_NAME_ENTRY *X509_NAME_delete_entry(X509_NAME *name, int loc);
+ +

DESCRIPTION

+ +

X509_NAME_add_entry_by_txt(), X509_NAME_add_entry_by_OBJ() and X509_NAME_add_entry_by_NID() add a field whose name is defined by a string field, an object obj or a NID nid respectively. The field value to be added is in bytes of length len. If len is -1 then the field length is calculated internally using strlen(bytes).

+ +

The type of field is determined by type which can either be a definition of the type of bytes (such as MBSTRING_ASC) or a standard ASN1 type (such as V_ASN1_IA5STRING). The new entry is added to a position determined by loc and set.

+ +

X509_NAME_add_entry() adds a copy of X509_NAME_ENTRY structure ne to name. The new entry is added to a position determined by loc and set. Since a copy of ne is added ne must be freed up after the call.

+ +

X509_NAME_delete_entry() deletes an entry from name at position loc. The deleted entry is returned and must be freed up.

+ +

NOTES

+ +

The use of string types such as MBSTRING_ASC or MBSTRING_UTF8 is strongly recommended for the type parameter. This allows the internal code to correctly determine the type of the field and to apply length checks according to the relevant standards. This is done using ASN1_STRING_set_by_NID().

+ +

If instead an ASN1 type is used no checks are performed and the supplied data in bytes is used directly.

+ +

In X509_NAME_add_entry_by_txt() the field string represents the field name using OBJ_txt2obj(field, 0).

+ +

The loc and set parameters determine where a new entry should be added. For almost all applications loc can be set to -1 and set to 0. This adds a new entry to the end of name as a single valued RelativeDistinguishedName (RDN).

+ +

loc actually determines the index where the new entry is inserted: if it is -1 it is appended.

+ +

set determines how the new type is added. If it is zero a new RDN is created.

+ +

If set is -1 or 1 it is added to the previous or next RDN structure respectively. This will then be a multivalued RDN: since multivalues RDNs are very seldom used set is almost always set to zero.

+ +

RETURN VALUES

+ +

X509_NAME_add_entry_by_txt(), X509_NAME_add_entry_by_OBJ(), X509_NAME_add_entry_by_NID() and X509_NAME_add_entry() return 1 for success of 0 if an error occurred.

+ +

X509_NAME_delete_entry() returns either the deleted X509_NAME_ENTRY structure of NULL if an error occurred.

+ +

EXAMPLES

+ +

Create an X509_NAME structure:

+ +

"C=UK, O=Disorganized Organization, CN=Joe Bloggs"

+ +
X509_NAME *nm;
+
+nm = X509_NAME_new();
+if (nm == NULL)
+    /* Some error */
+if (!X509_NAME_add_entry_by_txt(nm, "C", MBSTRING_ASC,
+                                "UK", -1, -1, 0))
+    /* Error */
+if (!X509_NAME_add_entry_by_txt(nm, "O", MBSTRING_ASC,
+                                "Disorganized Organization", -1, -1, 0))
+    /* Error */
+if (!X509_NAME_add_entry_by_txt(nm, "CN", MBSTRING_ASC,
+                                "Joe Bloggs", -1, -1, 0))
+    /* Error */
+ +

BUGS

+ +

type can still be set to V_ASN1_APP_CHOOSE to use a different algorithm to determine field types. Since this form does not understand multicharacter types, performs no length checks and can result in invalid field types its use is strongly discouraged.

+ +

SEE ALSO

+ +

ERR_get_error(3), d2i_X509_NAME(3)

+ +

COPYRIGHT

+ +

Copyright 2002-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_NAME_get0_der.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_NAME_get0_der.html new file mode 100644 index 00000000..0d2d29bb --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_NAME_get0_der.html @@ -0,0 +1,57 @@ + + + + +X509_NAME_get0_der + + + + + + + + + + +

NAME

+ +

X509_NAME_get0_der - get X509_NAME DER encoding

+ +

SYNOPSIS

+ +
#include <openssl/x509.h>
+
+int X509_NAME_get0_der(X509_NAME *nm, const unsigned char **pder,
+                       size_t *pderlen)
+ +

DESCRIPTION

+ +

The function X509_NAME_get0_der() returns an internal pointer to the encoding of an X509_NAME structure in *pder and consisting of *pderlen bytes. It is useful for applications that wish to examine the encoding of an X509_NAME structure without copying it.

+ +

RETURN VALUES

+ +

The function X509_NAME_get0_der() returns 1 for success and 0 if an error occurred.

+ +

SEE ALSO

+ +

d2i_X509(3)

+ +

COPYRIGHT

+ +

Copyright 2002-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_NAME_get_index_by_NID.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_NAME_get_index_by_NID.html new file mode 100644 index 00000000..93170e31 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_NAME_get_index_by_NID.html @@ -0,0 +1,112 @@ + + + + +X509_NAME_get_index_by_NID + + + + + + + + + + +

NAME

+ +

X509_NAME_get_index_by_NID, X509_NAME_get_index_by_OBJ, X509_NAME_get_entry, X509_NAME_entry_count, X509_NAME_get_text_by_NID, X509_NAME_get_text_by_OBJ - X509_NAME lookup and enumeration functions

+ +

SYNOPSIS

+ +
#include <openssl/x509.h>
+
+int X509_NAME_get_index_by_NID(X509_NAME *name, int nid, int lastpos);
+int X509_NAME_get_index_by_OBJ(X509_NAME *name, const ASN1_OBJECT *obj, int lastpos);
+
+int X509_NAME_entry_count(const X509_NAME *name);
+X509_NAME_ENTRY *X509_NAME_get_entry(const X509_NAME *name, int loc);
+
+int X509_NAME_get_text_by_NID(X509_NAME *name, int nid, char *buf, int len);
+int X509_NAME_get_text_by_OBJ(X509_NAME *name, const ASN1_OBJECT *obj, char *buf, int len);
+ +

DESCRIPTION

+ +

These functions allow an X509_NAME structure to be examined. The X509_NAME structure is the same as the Name type defined in RFC2459 (and elsewhere) and used for example in certificate subject and issuer names.

+ +

X509_NAME_get_index_by_NID() and X509_NAME_get_index_by_OBJ() retrieve the next index matching nid or obj after lastpos. lastpos should initially be set to -1. If there are no more entries -1 is returned. If nid is invalid (doesn't correspond to a valid OID) then -2 is returned.

+ +

X509_NAME_entry_count() returns the total number of entries in name.

+ +

X509_NAME_get_entry() retrieves the X509_NAME_ENTRY from name corresponding to index loc. Acceptable values for loc run from 0 to (X509_NAME_entry_count(name) - 1). The value returned is an internal pointer which must not be freed.

+ +

X509_NAME_get_text_by_NID(), X509_NAME_get_text_by_OBJ() retrieve the "text" from the first entry in name which matches nid or obj, if no such entry exists -1 is returned. At most len bytes will be written and the text written to buf will be null terminated. The length of the output string written is returned excluding the terminating null. If buf is <NULL> then the amount of space needed in buf (excluding the final null) is returned.

+ +

NOTES

+ +

X509_NAME_get_text_by_NID() and X509_NAME_get_text_by_OBJ() should be considered deprecated because they have various limitations which make them of minimal use in practice. They can only find the first matching entry and will copy the contents of the field verbatim: this can be highly confusing if the target is a multicharacter string type like a BMPString or a UTF8String.

+ +

For a more general solution X509_NAME_get_index_by_NID() or X509_NAME_get_index_by_OBJ() should be used followed by X509_NAME_get_entry() on any matching indices and then the various X509_NAME_ENTRY utility functions on the result.

+ +

The list of all relevant NID_* and OBJ_* codes can be found in the source code header files <openssl/obj_mac.h> and/or <openssl/objects.h>.

+ +

Applications which could pass invalid NIDs to X509_NAME_get_index_by_NID() should check for the return value of -2. Alternatively the NID validity can be determined first by checking OBJ_nid2obj(nid) is not NULL.

+ +

RETURN VALUES

+ +

X509_NAME_get_index_by_NID() and X509_NAME_get_index_by_OBJ() return the index of the next matching entry or -1 if not found. X509_NAME_get_index_by_NID() can also return -2 if the supplied NID is invalid.

+ +

X509_NAME_entry_count() returns the total number of entries.

+ +

X509_NAME_get_entry() returns an X509_NAME pointer to the requested entry or NULL if the index is invalid.

+ +

EXAMPLES

+ +

Process all entries:

+ +
int i;
+X509_NAME_ENTRY *e;
+
+for (i = 0; i < X509_NAME_entry_count(nm); i++) {
+    e = X509_NAME_get_entry(nm, i);
+    /* Do something with e */
+}
+ +

Process all commonName entries:

+ +
int lastpos = -1;
+X509_NAME_ENTRY *e;
+
+for (;;) {
+    lastpos = X509_NAME_get_index_by_NID(nm, NID_commonName, lastpos);
+    if (lastpos == -1)
+        break;
+    e = X509_NAME_get_entry(nm, lastpos);
+    /* Do something with e */
+}
+ +

SEE ALSO

+ +

ERR_get_error(3), d2i_X509_NAME(3)

+ +

COPYRIGHT

+ +

Copyright 2002-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_NAME_print_ex.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_NAME_print_ex.html new file mode 100644 index 00000000..d3d48115 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_NAME_print_ex.html @@ -0,0 +1,106 @@ + + + + +X509_NAME_print_ex + + + + + + + + + + +

NAME

+ +

X509_NAME_print_ex, X509_NAME_print_ex_fp, X509_NAME_print, X509_NAME_oneline - X509_NAME printing routines

+ +

SYNOPSIS

+ +
#include <openssl/x509.h>
+
+int X509_NAME_print_ex(BIO *out, const X509_NAME *nm, int indent, unsigned long flags);
+int X509_NAME_print_ex_fp(FILE *fp, const X509_NAME *nm, int indent, unsigned long flags);
+char *X509_NAME_oneline(const X509_NAME *a, char *buf, int size);
+int X509_NAME_print(BIO *bp, const X509_NAME *name, int obase);
+ +

DESCRIPTION

+ +

X509_NAME_print_ex() prints a human readable version of nm to BIO out. Each line (for multiline formats) is indented by indent spaces. The output format can be extensively customised by use of the flags parameter.

+ +

X509_NAME_print_ex_fp() is identical to X509_NAME_print_ex() except the output is written to FILE pointer fp.

+ +

X509_NAME_oneline() prints an ASCII version of a to buf. If buf is NULL then a buffer is dynamically allocated and returned, and size is ignored. Otherwise, at most size bytes will be written, including the ending '\0', and buf is returned.

+ +

X509_NAME_print() prints out name to bp indenting each line by obase characters. Multiple lines are used if the output (including indent) exceeds 80 characters.

+ +

NOTES

+ +

The functions X509_NAME_oneline() and X509_NAME_print() produce a non standard output form, they don't handle multi character fields and have various quirks and inconsistencies. Their use is strongly discouraged in new applications and they could be deprecated in a future release.

+ +

Although there are a large number of possible flags for most purposes XN_FLAG_ONELINE, XN_FLAG_MULTILINE or XN_FLAG_RFC2253 will suffice. As noted on the ASN1_STRING_print_ex(3) manual page for UTF8 terminals the ASN1_STRFLGS_ESC_MSB should be unset: so for example XN_FLAG_ONELINE & ~ASN1_STRFLGS_ESC_MSB would be used.

+ +

The complete set of the flags supported by X509_NAME_print_ex() is listed below.

+ +

Several options can be ored together.

+ +

The options XN_FLAG_SEP_COMMA_PLUS, XN_FLAG_SEP_CPLUS_SPC, XN_FLAG_SEP_SPLUS_SPC and XN_FLAG_SEP_MULTILINE determine the field separators to use. Two distinct separators are used between distinct RelativeDistinguishedName components and separate values in the same RDN for a multi-valued RDN. Multi-valued RDNs are currently very rare so the second separator will hardly ever be used.

+ +

XN_FLAG_SEP_COMMA_PLUS uses comma and plus as separators. XN_FLAG_SEP_CPLUS_SPC uses comma and plus with spaces: this is more readable that plain comma and plus. XN_FLAG_SEP_SPLUS_SPC uses spaced semicolon and plus. XN_FLAG_SEP_MULTILINE uses spaced newline and plus respectively.

+ +

If XN_FLAG_DN_REV is set the whole DN is printed in reversed order.

+ +

The fields XN_FLAG_FN_SN, XN_FLAG_FN_LN, XN_FLAG_FN_OID, XN_FLAG_FN_NONE determine how a field name is displayed. It will use the short name (e.g. CN) the long name (e.g. commonName) always use OID numerical form (normally OIDs are only used if the field name is not recognised) and no field name respectively.

+ +

If XN_FLAG_SPC_EQ is set then spaces will be placed around the '=' character separating field names and values.

+ +

If XN_FLAG_DUMP_UNKNOWN_FIELDS is set then the encoding of unknown fields is printed instead of the values.

+ +

If XN_FLAG_FN_ALIGN is set then field names are padded to 20 characters: this is only of use for multiline format.

+ +

Additionally all the options supported by ASN1_STRING_print_ex() can be used to control how each field value is displayed.

+ +

In addition a number options can be set for commonly used formats.

+ +

XN_FLAG_RFC2253 sets options which produce an output compatible with RFC2253 it is equivalent to: ASN1_STRFLGS_RFC2253 | XN_FLAG_SEP_COMMA_PLUS | XN_FLAG_DN_REV | XN_FLAG_FN_SN | XN_FLAG_DUMP_UNKNOWN_FIELDS

+ +

XN_FLAG_ONELINE is a more readable one line format which is the same as: ASN1_STRFLGS_RFC2253 | ASN1_STRFLGS_ESC_QUOTE | XN_FLAG_SEP_CPLUS_SPC | XN_FLAG_SPC_EQ | XN_FLAG_FN_SN

+ +

XN_FLAG_MULTILINE is a multiline format which is the same as: ASN1_STRFLGS_ESC_CTRL | ASN1_STRFLGS_ESC_MSB | XN_FLAG_SEP_MULTILINE | XN_FLAG_SPC_EQ | XN_FLAG_FN_LN | XN_FLAG_FN_ALIGN

+ +

XN_FLAG_COMPAT uses a format identical to X509_NAME_print(): in fact it calls X509_NAME_print() internally.

+ +

RETURN VALUES

+ +

X509_NAME_oneline() returns a valid string on success or NULL on error.

+ +

X509_NAME_print() returns 1 on success or 0 on error.

+ +

X509_NAME_print_ex() and X509_NAME_print_ex_fp() return 1 on success or 0 on error if the XN_FLAG_COMPAT is set, which is the same as X509_NAME_print(). Otherwise, it returns -1 on error or other values on success.

+ +

SEE ALSO

+ +

ASN1_STRING_print_ex(3)

+ +

COPYRIGHT

+ +

Copyright 2002-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_PUBKEY_new.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_PUBKEY_new.html new file mode 100644 index 00000000..171dea2d --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_PUBKEY_new.html @@ -0,0 +1,110 @@ + + + + +X509_PUBKEY_new + + + + + + + + + + +

NAME

+ +

X509_PUBKEY_new, X509_PUBKEY_free, X509_PUBKEY_set, X509_PUBKEY_get0, X509_PUBKEY_get, d2i_PUBKEY, i2d_PUBKEY, d2i_PUBKEY_bio, d2i_PUBKEY_fp, i2d_PUBKEY_fp, i2d_PUBKEY_bio, X509_PUBKEY_set0_param, X509_PUBKEY_get0_param - SubjectPublicKeyInfo public key functions

+ +

SYNOPSIS

+ +
#include <openssl/x509.h>
+
+X509_PUBKEY *X509_PUBKEY_new(void);
+void X509_PUBKEY_free(X509_PUBKEY *a);
+
+int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey);
+EVP_PKEY *X509_PUBKEY_get0(X509_PUBKEY *key);
+EVP_PKEY *X509_PUBKEY_get(X509_PUBKEY *key);
+
+EVP_PKEY *d2i_PUBKEY(EVP_PKEY **a, const unsigned char **pp, long length);
+int i2d_PUBKEY(EVP_PKEY *a, unsigned char **pp);
+
+EVP_PKEY *d2i_PUBKEY_bio(BIO *bp, EVP_PKEY **a);
+EVP_PKEY *d2i_PUBKEY_fp(FILE *fp, EVP_PKEY **a);
+
+int i2d_PUBKEY_fp(FILE *fp, EVP_PKEY *pkey);
+int i2d_PUBKEY_bio(BIO *bp, EVP_PKEY *pkey);
+
+int X509_PUBKEY_set0_param(X509_PUBKEY *pub, ASN1_OBJECT *aobj,
+                           int ptype, void *pval,
+                           unsigned char *penc, int penclen);
+int X509_PUBKEY_get0_param(ASN1_OBJECT **ppkalg,
+                           const unsigned char **pk, int *ppklen,
+                           X509_ALGOR **pa, X509_PUBKEY *pub);
+ +

DESCRIPTION

+ +

The X509_PUBKEY structure represents the ASN.1 SubjectPublicKeyInfo structure defined in RFC5280 and used in certificates and certificate requests.

+ +

X509_PUBKEY_new() allocates and initializes an X509_PUBKEY structure.

+ +

X509_PUBKEY_free() frees up X509_PUBKEY structure a. If a is NULL nothing is done.

+ +

X509_PUBKEY_set() sets the public key in *x to the public key contained in the EVP_PKEY structure pkey. If *x is not NULL any existing public key structure will be freed.

+ +

X509_PUBKEY_get0() returns the public key contained in key. The returned value is an internal pointer which MUST NOT be freed after use.

+ +

X509_PUBKEY_get() is similar to X509_PUBKEY_get0() except the reference count on the returned key is incremented so it MUST be freed using EVP_PKEY_free() after use.

+ +

d2i_PUBKEY() and i2d_PUBKEY() decode and encode an EVP_PKEY structure using SubjectPublicKeyInfo format. They otherwise follow the conventions of other ASN.1 functions such as d2i_X509().

+ +

d2i_PUBKEY_bio(), d2i_PUBKEY_fp(), i2d_PUBKEY_bio() and i2d_PUBKEY_fp() are similar to d2i_PUBKEY() and i2d_PUBKEY() except they decode or encode using a BIO or FILE pointer.

+ +

X509_PUBKEY_set0_param() sets the public key parameters of pub. The OID associated with the algorithm is set to aobj. The type of the algorithm parameters is set to type using the structure pval. The encoding of the public key itself is set to the penclen bytes contained in buffer penc. On success ownership of all the supplied parameters is passed to pub so they must not be freed after the call.

+ +

X509_PUBKEY_get0_param() retrieves the public key parameters from pub, *ppkalg is set to the associated OID and the encoding consists of *ppklen bytes at *pk, *pa is set to the associated AlgorithmIdentifier for the public key. If the value of any of these parameters is not required it can be set to NULL. All of the retrieved pointers are internal and must not be freed after the call.

+ +

NOTES

+ +

The X509_PUBKEY functions can be used to encode and decode public keys in a standard format.

+ +

In many cases applications will not call the X509_PUBKEY functions directly: they will instead call wrapper functions such as X509_get0_pubkey().

+ +

RETURN VALUES

+ +

If the allocation fails, X509_PUBKEY_new() returns NULL and sets an error code that can be obtained by ERR_get_error(3).

+ +

Otherwise it returns a pointer to the newly allocated structure.

+ +

X509_PUBKEY_free() does not return a value.

+ +

X509_PUBKEY_get0() and X509_PUBKEY_get() return a pointer to an EVP_PKEY structure or NULL if an error occurs.

+ +

X509_PUBKEY_set(), X509_PUBKEY_set0_param() and X509_PUBKEY_get0_param() return 1 for success and 0 if an error occurred.

+ +

SEE ALSO

+ +

d2i_X509(3), ERR_get_error(3), X509_get_pubkey(3),

+ +

COPYRIGHT

+ +

Copyright 2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_SIG_get0.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_SIG_get0.html new file mode 100644 index 00000000..887a2ba5 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_SIG_get0.html @@ -0,0 +1,59 @@ + + + + +X509_SIG_get0 + + + + + + + + + + +

NAME

+ +

X509_SIG_get0, X509_SIG_getm - DigestInfo functions

+ +

SYNOPSIS

+ +
#include <openssl/x509.h>
+
+void X509_SIG_get0(const X509_SIG *sig, const X509_ALGOR **palg,
+                   const ASN1_OCTET_STRING **pdigest);
+void X509_SIG_getm(X509_SIG *sig, X509_ALGOR **palg,
+                   ASN1_OCTET_STRING **pdigest,
+ +

DESCRIPTION

+ +

X509_SIG_get0() returns pointers to the algorithm identifier and digest value in sig. X509_SIG_getm() is identical to X509_SIG_get0() except the pointers returned are not constant and can be modified: for example to initialise them.

+ +

RETURN VALUES

+ +

X509_SIG_get0() and X509_SIG_getm() return no values.

+ +

SEE ALSO

+ +

d2i_X509(3)

+ +

COPYRIGHT

+ +

Copyright 2002-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_STORE_CTX_get_error.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_STORE_CTX_get_error.html new file mode 100644 index 00000000..98ec5ca0 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_STORE_CTX_get_error.html @@ -0,0 +1,374 @@ + + + + +X509_STORE_CTX_get_error + + + + + + + + + + +

NAME

+ +

X509_STORE_CTX_get_error, X509_STORE_CTX_set_error, X509_STORE_CTX_get_error_depth, X509_STORE_CTX_set_error_depth, X509_STORE_CTX_get_current_cert, X509_STORE_CTX_set_current_cert, X509_STORE_CTX_get0_cert, X509_STORE_CTX_get1_chain, X509_verify_cert_error_string - get or set certificate verification status information

+ +

SYNOPSIS

+ +
#include <openssl/x509.h>
+
+int   X509_STORE_CTX_get_error(X509_STORE_CTX *ctx);
+void  X509_STORE_CTX_set_error(X509_STORE_CTX *ctx, int s);
+int   X509_STORE_CTX_get_error_depth(X509_STORE_CTX *ctx);
+void  X509_STORE_CTX_set_error_depth(X509_STORE_CTX *ctx, int depth);
+X509 *X509_STORE_CTX_get_current_cert(X509_STORE_CTX *ctx);
+void  X509_STORE_CTX_set_current_cert(X509_STORE_CTX *ctx, X509 *x);
+X509 *X509_STORE_CTX_get0_cert(X509_STORE_CTX *ctx);
+
+STACK_OF(X509) *X509_STORE_CTX_get1_chain(X509_STORE_CTX *ctx);
+
+const char *X509_verify_cert_error_string(long n);
+ +

DESCRIPTION

+ +

These functions are typically called after X509_verify_cert() has indicated an error or in a verification callback to determine the nature of an error.

+ +

X509_STORE_CTX_get_error() returns the error code of ctx, see the ERROR CODES section for a full description of all error codes.

+ +

X509_STORE_CTX_set_error() sets the error code of ctx to s. For example it might be used in a verification callback to set an error based on additional checks.

+ +

X509_STORE_CTX_get_error_depth() returns the depth of the error. This is a non-negative integer representing where in the certificate chain the error occurred. If it is zero it occurred in the end entity certificate, one if it is the certificate which signed the end entity certificate and so on.

+ +

X509_STORE_CTX_set_error_depth() sets the error depth. This can be used in combination with X509_STORE_CTX_set_error() to set the depth at which an error condition was detected.

+ +

X509_STORE_CTX_get_current_cert() returns the certificate in ctx which caused the error or NULL if no certificate is relevant.

+ +

X509_STORE_CTX_set_current_cert() sets the certificate x in ctx which caused the error. This value is not intended to remain valid for very long, and remains owned by the caller. It may be examined by a verification callback invoked to handle each error encountered during chain verification and is no longer required after such a callback. If a callback wishes the save the certificate for use after it returns, it needs to increment its reference count via X509_up_ref(3). Once such a saved certificate is no longer needed it can be freed with X509_free(3).

+ +

X509_STORE_CTX_get0_cert() retrieves an internal pointer to the certificate being verified by the ctx.

+ +

X509_STORE_CTX_get1_chain() returns a complete validate chain if a previous call to X509_verify_cert() is successful. If the call to X509_verify_cert() is not successful the returned chain may be incomplete or invalid. The returned chain persists after the ctx structure is freed, when it is no longer needed it should be free up using:

+ +
sk_X509_pop_free(chain, X509_free);
+ +

X509_verify_cert_error_string() returns a human readable error string for verification error n.

+ +

RETURN VALUES

+ +

X509_STORE_CTX_get_error() returns X509_V_OK or an error code.

+ +

X509_STORE_CTX_get_error_depth() returns a non-negative error depth.

+ +

X509_STORE_CTX_get_current_cert() returns the certificate which caused the error or NULL if no certificate is relevant to the error.

+ +

X509_verify_cert_error_string() returns a human readable error string for verification error n.

+ +

ERROR CODES

+ +

A list of error codes and messages is shown below. Some of the error codes are defined but currently never returned: these are described as "unused".

+ +
+ +
X509_V_OK: ok
+
+ +

the operation was successful.

+ +
+
X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT: unable to get issuer certificate
+
+ +

the issuer certificate of a locally looked up certificate could not be found. This normally means the list of trusted certificates is not complete.

+ +
+
X509_V_ERR_UNABLE_TO_GET_CRL: unable to get certificate CRL
+
+ +

the CRL of a certificate could not be found.

+ +
+
X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE: unable to decrypt certificate's signature
+
+ +

the certificate signature could not be decrypted. This means that the actual signature value could not be determined rather than it not matching the expected value, this is only meaningful for RSA keys.

+ +
+
X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE: unable to decrypt CRL's signature
+
+ +

the CRL signature could not be decrypted: this means that the actual signature value could not be determined rather than it not matching the expected value. Unused.

+ +
+
X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY: unable to decode issuer public key
+
+ +

the public key in the certificate SubjectPublicKeyInfo could not be read.

+ +
+
X509_V_ERR_CERT_SIGNATURE_FAILURE: certificate signature failure
+
+ +

the signature of the certificate is invalid.

+ +
+
X509_V_ERR_CRL_SIGNATURE_FAILURE: CRL signature failure
+
+ +

the signature of the certificate is invalid.

+ +
+
X509_V_ERR_CERT_NOT_YET_VALID: certificate is not yet valid
+
+ +

the certificate is not yet valid: the notBefore date is after the current time.

+ +
+
X509_V_ERR_CERT_HAS_EXPIRED: certificate has expired
+
+ +

the certificate has expired: that is the notAfter date is before the current time.

+ +
+
X509_V_ERR_CRL_NOT_YET_VALID: CRL is not yet valid
+
+ +

the CRL is not yet valid.

+ +
+
X509_V_ERR_CRL_HAS_EXPIRED: CRL has expired
+
+ +

the CRL has expired.

+ +
+
X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD: format error in certificate's notBefore field
+
+ +

the certificate notBefore field contains an invalid time.

+ +
+
X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD: format error in certificate's notAfter field
+
+ +

the certificate notAfter field contains an invalid time.

+ +
+
X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD: format error in CRL's lastUpdate field
+
+ +

the CRL lastUpdate field contains an invalid time.

+ +
+
X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD: format error in CRL's nextUpdate field
+
+ +

the CRL nextUpdate field contains an invalid time.

+ +
+
X509_V_ERR_OUT_OF_MEM: out of memory
+
+ +

an error occurred trying to allocate memory. This should never happen.

+ +
+
X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT: self signed certificate
+
+ +

the passed certificate is self signed and the same certificate cannot be found in the list of trusted certificates.

+ +
+
X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN: self signed certificate in certificate chain
+
+ +

the certificate chain could be built up using the untrusted certificates but the root could not be found locally.

+ +
+
X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY: unable to get local issuer certificate
+
+ +

the issuer certificate could not be found: this occurs if the issuer certificate of an untrusted certificate cannot be found.

+ +
+
X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE: unable to verify the first certificate
+
+ +

no signatures could be verified because the chain contains only one certificate and it is not self signed.

+ +
+
X509_V_ERR_CERT_CHAIN_TOO_LONG: certificate chain too long
+
+ +

the certificate chain length is greater than the supplied maximum depth. Unused.

+ +
+
X509_V_ERR_CERT_REVOKED: certificate revoked
+
+ +

the certificate has been revoked.

+ +
+
X509_V_ERR_INVALID_CA: invalid CA certificate
+
+ +

a CA certificate is invalid. Either it is not a CA or its extensions are not consistent with the supplied purpose.

+ +
+
X509_V_ERR_PATH_LENGTH_EXCEEDED: path length constraint exceeded
+
+ +

the basicConstraints path-length parameter has been exceeded.

+ +
+
X509_V_ERR_INVALID_PURPOSE: unsupported certificate purpose
+
+ +

the supplied certificate cannot be used for the specified purpose.

+ +
+
X509_V_ERR_CERT_UNTRUSTED: certificate not trusted
+
+ +

the root CA is not marked as trusted for the specified purpose.

+ +
+
X509_V_ERR_CERT_REJECTED: certificate rejected
+
+ +

the root CA is marked to reject the specified purpose.

+ +
+
X509_V_ERR_SUBJECT_ISSUER_MISMATCH: subject issuer mismatch
+
+ +

the current candidate issuer certificate was rejected because its subject name did not match the issuer name of the current certificate. This is only set if issuer check debugging is enabled it is used for status notification and is not in itself an error.

+ +
+
X509_V_ERR_AKID_SKID_MISMATCH: authority and subject key identifier mismatch
+
+ +

the current candidate issuer certificate was rejected because its subject key identifier was present and did not match the authority key identifier current certificate. This is only set if issuer check debugging is enabled it is used for status notification and is not in itself an error.

+ +
+
X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH: authority and issuer serial number mismatch
+
+ +

the current candidate issuer certificate was rejected because its issuer name and serial number was present and did not match the authority key identifier of the current certificate. This is only set if issuer check debugging is enabled it is used for status notification and is not in itself an error.

+ +
+
X509_V_ERR_KEYUSAGE_NO_CERTSIGN:key usage does not include certificate signing
+
+ +

the current candidate issuer certificate was rejected because its keyUsage extension does not permit certificate signing. This is only set if issuer check debugging is enabled it is used for status notification and is not in itself an error.

+ +
+
X509_V_ERR_INVALID_EXTENSION: invalid or inconsistent certificate extension
+
+ +

A certificate extension had an invalid value (for example an incorrect encoding) or some value inconsistent with other extensions.

+ +
+
X509_V_ERR_INVALID_POLICY_EXTENSION: invalid or inconsistent certificate policy extension
+
+ +

A certificate policies extension had an invalid value (for example an incorrect encoding) or some value inconsistent with other extensions. This error only occurs if policy processing is enabled.

+ +
+
X509_V_ERR_NO_EXPLICIT_POLICY: no explicit policy
+
+ +

The verification flags were set to require and explicit policy but none was present.

+ +
+
X509_V_ERR_DIFFERENT_CRL_SCOPE: Different CRL scope
+
+ +

The only CRLs that could be found did not match the scope of the certificate.

+ +
+
X509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE: Unsupported extension feature
+
+ +

Some feature of a certificate extension is not supported. Unused.

+ +
+
X509_V_ERR_PERMITTED_VIOLATION: permitted subtree violation
+
+ +

A name constraint violation occurred in the permitted subtrees.

+ +
+
X509_V_ERR_EXCLUDED_VIOLATION: excluded subtree violation
+
+ +

A name constraint violation occurred in the excluded subtrees.

+ +
+
X509_V_ERR_SUBTREE_MINMAX: name constraints minimum and maximum not supported
+
+ +

A certificate name constraints extension included a minimum or maximum field: this is not supported.

+ +
+
X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE: unsupported name constraint type
+
+ +

An unsupported name constraint type was encountered. OpenSSL currently only supports directory name, DNS name, email and URI types.

+ +
+
X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX: unsupported or invalid name constraint syntax
+
+ +

The format of the name constraint is not recognised: for example an email address format of a form not mentioned in RFC3280. This could be caused by a garbage extension or some new feature not currently supported.

+ +
+
X509_V_ERR_CRL_PATH_VALIDATION_ERROR: CRL path validation error
+
+ +

An error occurred when attempting to verify the CRL path. This error can only happen if extended CRL checking is enabled.

+ +
+
X509_V_ERR_APPLICATION_VERIFICATION: application verification failure
+
+ +

an application specific error. This will never be returned unless explicitly set by an application.

+ +
+
+ +

NOTES

+ +

The above functions should be used instead of directly referencing the fields in the X509_VERIFY_CTX structure.

+ +

In versions of OpenSSL before 1.0 the current certificate returned by X509_STORE_CTX_get_current_cert() was never NULL. Applications should check the return value before printing out any debugging information relating to the current certificate.

+ +

If an unrecognised error code is passed to X509_verify_cert_error_string() the numerical value of the unknown code is returned in a static buffer. This is not thread safe but will never happen unless an invalid code is passed.

+ +

SEE ALSO

+ +

X509_verify_cert(3), X509_up_ref(3), X509_free(3).

+ +

COPYRIGHT

+ +

Copyright 2009-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_STORE_CTX_new.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_STORE_CTX_new.html new file mode 100644 index 00000000..cc1d19c4 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_STORE_CTX_new.html @@ -0,0 +1,141 @@ + + + + +X509_STORE_CTX_new + + + + + + + + + + +

NAME

+ +

X509_STORE_CTX_new, X509_STORE_CTX_cleanup, X509_STORE_CTX_free, X509_STORE_CTX_init, X509_STORE_CTX_set0_trusted_stack, X509_STORE_CTX_set_cert, X509_STORE_CTX_set0_crls, X509_STORE_CTX_get0_chain, X509_STORE_CTX_set0_verified_chain, X509_STORE_CTX_get0_param, X509_STORE_CTX_set0_param, X509_STORE_CTX_get0_untrusted, X509_STORE_CTX_set0_untrusted, X509_STORE_CTX_get_num_untrusted, X509_STORE_CTX_set_default, X509_STORE_CTX_set_verify, X509_STORE_CTX_verify_fn - X509_STORE_CTX initialisation

+ +

SYNOPSIS

+ +
#include <openssl/x509_vfy.h>
+
+X509_STORE_CTX *X509_STORE_CTX_new(void);
+void X509_STORE_CTX_cleanup(X509_STORE_CTX *ctx);
+void X509_STORE_CTX_free(X509_STORE_CTX *ctx);
+
+int X509_STORE_CTX_init(X509_STORE_CTX *ctx, X509_STORE *store,
+                        X509 *x509, STACK_OF(X509) *chain);
+
+void X509_STORE_CTX_set0_trusted_stack(X509_STORE_CTX *ctx, STACK_OF(X509) *sk);
+
+void X509_STORE_CTX_set_cert(X509_STORE_CTX *ctx, X509 *x);
+STACK_OF(X509) *X509_STORE_CTX_get0_chain(X509_STORE_CTX *ctx);
+void X509_STORE_CTX_set0_verified_chain(X509_STORE_CTX *ctx, STACK_OF(X509) *chain);
+void X509_STORE_CTX_set0_crls(X509_STORE_CTX *ctx, STACK_OF(X509_CRL) *sk);
+
+X509_VERIFY_PARAM *X509_STORE_CTX_get0_param(X509_STORE_CTX *ctx);
+void X509_STORE_CTX_set0_param(X509_STORE_CTX *ctx, X509_VERIFY_PARAM *param);
+int X509_STORE_CTX_set_default(X509_STORE_CTX *ctx, const char *name);
+
+STACK_OF(X509)* X509_STORE_CTX_get0_untrusted(X509_STORE_CTX *ctx);
+void X509_STORE_CTX_set0_untrusted(X509_STORE_CTX *ctx, STACK_OF(X509) *sk);
+
+int X509_STORE_CTX_get_num_untrusted(X509_STORE_CTX *ctx);
+
+typedef int (*X509_STORE_CTX_verify_fn)(X509_STORE_CTX *);
+void X509_STORE_CTX_set_verify(X509_STORE_CTX *ctx, X509_STORE_CTX_verify_fn verify);
+ +

DESCRIPTION

+ +

These functions initialise an X509_STORE_CTX structure for subsequent use by X509_verify_cert().

+ +

X509_STORE_CTX_new() returns a newly initialised X509_STORE_CTX structure.

+ +

X509_STORE_CTX_cleanup() internally cleans up an X509_STORE_CTX structure. The context can then be reused with an new call to X509_STORE_CTX_init().

+ +

X509_STORE_CTX_free() completely frees up ctx. After this call ctx is no longer valid. If ctx is NULL nothing is done.

+ +

X509_STORE_CTX_init() sets up ctx for a subsequent verification operation. It must be called before each call to X509_verify_cert(), i.e. a ctx is only good for one call to X509_verify_cert(); if you want to verify a second certificate with the same ctx then you must call X509_STORE_CTX_cleanup() and then X509_STORE_CTX_init() again before the second call to X509_verify_cert(). The trusted certificate store is set to store, the end entity certificate to be verified is set to x509 and a set of additional certificates (which will be untrusted but may be used to build the chain) in chain. Any or all of the store, x509 and chain parameters can be NULL.

+ +

X509_STORE_CTX_set0_trusted_stack() sets the set of trusted certificates of ctx to sk. This is an alternative way of specifying trusted certificates instead of using an X509_STORE.

+ +

X509_STORE_CTX_set_cert() sets the certificate to be verified in ctx to x.

+ +

X509_STORE_CTX_set0_verified_chain() sets the validated chain used by ctx to be chain. Ownership of the chain is transferred to ctx and should not be free'd by the caller. X509_STORE_CTX_get0_chain() returns a the internal pointer used by the ctx that contains the validated chain.

+ +

X509_STORE_CTX_set0_crls() sets a set of CRLs to use to aid certificate verification to sk. These CRLs will only be used if CRL verification is enabled in the associated X509_VERIFY_PARAM structure. This might be used where additional "useful" CRLs are supplied as part of a protocol, for example in a PKCS#7 structure.

+ +

X509_STORE_CTX_get0_param() retrieves an internal pointer to the verification parameters associated with ctx.

+ +

X509_STORE_CTX_get0_untrusted() retrieves an internal pointer to the stack of untrusted certificates associated with ctx.

+ +

X509_STORE_CTX_set0_untrusted() sets the internal point to the stack of untrusted certificates associated with ctx to sk.

+ +

X509_STORE_CTX_set0_param() sets the internal verification parameter pointer to param. After this call param should not be used.

+ +

X509_STORE_CTX_set_default() looks up and sets the default verification method to name. This uses the function X509_VERIFY_PARAM_lookup() to find an appropriate set of parameters from name.

+ +

X509_STORE_CTX_get_num_untrusted() returns the number of untrusted certificates that were used in building the chain following a call to X509_verify_cert().

+ +

X509_STORE_CTX_set_verify() provides the capability for overriding the default verify function. This function is responsible for verifying chain signatures and expiration times.

+ +

A verify function is defined as an X509_STORE_CTX_verify type which has the following signature:

+ +
int (*verify)(X509_STORE_CTX *);
+ +

This function should receive the current X509_STORE_CTX as a parameter and return 1 on success or 0 on failure.

+ +

NOTES

+ +

The certificates and CRLs in a store are used internally and should not be freed up until after the associated X509_STORE_CTX is freed.

+ +

BUGS

+ +

The certificates and CRLs in a context are used internally and should not be freed up until after the associated X509_STORE_CTX is freed. Copies should be made or reference counts increased instead.

+ +

RETURN VALUES

+ +

X509_STORE_CTX_new() returns an newly allocates context or NULL is an error occurred.

+ +

X509_STORE_CTX_init() returns 1 for success or 0 if an error occurred.

+ +

X509_STORE_CTX_get0_param() returns a pointer to an X509_VERIFY_PARAM structure or NULL if an error occurred.

+ +

X509_STORE_CTX_cleanup(), X509_STORE_CTX_free(), X509_STORE_CTX_set0_trusted_stack(), X509_STORE_CTX_set_cert(), X509_STORE_CTX_set0_crls() and X509_STORE_CTX_set0_param() do not return values.

+ +

X509_STORE_CTX_set_default() returns 1 for success or 0 if an error occurred.

+ +

X509_STORE_CTX_get_num_untrusted() returns the number of untrusted certificates used.

+ +

SEE ALSO

+ +

X509_verify_cert(3) X509_VERIFY_PARAM_set_flags(3)

+ +

HISTORY

+ +

The X509_STORE_CTX_set0_crls() function was added in OpenSSL 1.0.0. The X509_STORE_CTX_get_num_untrusted() function was added in OpenSSL 1.1.0.

+ +

COPYRIGHT

+ +

Copyright 2009-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_STORE_CTX_set_verify_cb.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_STORE_CTX_set_verify_cb.html new file mode 100644 index 00000000..b0179448 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_STORE_CTX_set_verify_cb.html @@ -0,0 +1,184 @@ + + + + +X509_STORE_CTX_set_verify_cb + + + + + + + + + + +

NAME

+ +

X509_STORE_CTX_get_cleanup, X509_STORE_CTX_get_lookup_crls, X509_STORE_CTX_get_lookup_certs, X509_STORE_CTX_get_check_policy, X509_STORE_CTX_get_cert_crl, X509_STORE_CTX_get_check_crl, X509_STORE_CTX_get_get_crl, X509_STORE_CTX_get_check_revocation, X509_STORE_CTX_get_check_issued, X509_STORE_CTX_get_get_issuer, X509_STORE_CTX_get_verify_cb, X509_STORE_CTX_set_verify_cb, X509_STORE_CTX_verify_cb - get and set verification callback

+ +

SYNOPSIS

+ +
#include <openssl/x509_vfy.h>
+
+typedef int (*X509_STORE_CTX_verify_cb)(int, X509_STORE_CTX *);
+
+X509_STORE_CTX_verify_cb X509_STORE_CTX_get_verify_cb(X509_STORE_CTX *ctx);
+
+void X509_STORE_CTX_set_verify_cb(X509_STORE_CTX *ctx,
+                                  X509_STORE_CTX_verify_cb verify_cb);
+
+X509_STORE_CTX_get_issuer_fn X509_STORE_CTX_get_get_issuer(X509_STORE_CTX *ctx);
+X509_STORE_CTX_check_issued_fn X509_STORE_CTX_get_check_issued(X509_STORE_CTX *ctx);
+X509_STORE_CTX_check_revocation_fn X509_STORE_CTX_get_check_revocation(X509_STORE_CTX *ctx);
+X509_STORE_CTX_get_crl_fn X509_STORE_CTX_get_get_crl(X509_STORE_CTX *ctx);
+X509_STORE_CTX_check_crl_fn X509_STORE_CTX_get_check_crl(X509_STORE_CTX *ctx);
+X509_STORE_CTX_cert_crl_fn X509_STORE_CTX_get_cert_crl(X509_STORE_CTX *ctx);
+X509_STORE_CTX_check_policy_fn X509_STORE_CTX_get_check_policy(X509_STORE_CTX *ctx);
+X509_STORE_CTX_lookup_certs_fn X509_STORE_CTX_get_lookup_certs(X509_STORE_CTX *ctx);
+X509_STORE_CTX_lookup_crls_fn X509_STORE_CTX_get_lookup_crls(X509_STORE_CTX *ctx);
+X509_STORE_CTX_cleanup_fn X509_STORE_CTX_get_cleanup(X509_STORE_CTX *ctx);
+ +

DESCRIPTION

+ +

X509_STORE_CTX_set_verify_cb() sets the verification callback of ctx to verify_cb overwriting any existing callback.

+ +

The verification callback can be used to customise the operation of certificate verification, either by overriding error conditions or logging errors for debugging purposes.

+ +

However a verification callback is not essential and the default operation is often sufficient.

+ +

The ok parameter to the callback indicates the value the callback should return to retain the default behaviour. If it is zero then an error condition is indicated. If it is 1 then no error occurred. If the flag X509_V_FLAG_NOTIFY_POLICY is set then ok is set to 2 to indicate the policy checking is complete.

+ +

The ctx parameter to the callback is the X509_STORE_CTX structure that is performing the verification operation. A callback can examine this structure and receive additional information about the error, for example by calling X509_STORE_CTX_get_current_cert(). Additional application data can be passed to the callback via the ex_data mechanism.

+ +

X509_STORE_CTX_get_verify_cb() returns the value of the current callback for the specific ctx.

+ +

X509_STORE_CTX_get_get_issuer(), X509_STORE_CTX_get_check_issued(), X509_STORE_CTX_get_check_revocation(), X509_STORE_CTX_get_get_crl(), X509_STORE_CTX_get_check_crl(), X509_STORE_CTX_get_cert_crl(), X509_STORE_CTX_get_check_policy(), X509_STORE_CTX_get_lookup_certs(), X509_STORE_CTX_get_lookup_crls() and X509_STORE_CTX_get_cleanup() return the function pointers cached from the corresponding X509_STORE, please see X509_STORE_set_verify(3) for more information.

+ +

WARNINGS

+ +

In general a verification callback should NOT unconditionally return 1 in all circumstances because this will allow verification to succeed no matter what the error. This effectively removes all security from the application because any certificate (including untrusted generated ones) will be accepted.

+ +

NOTES

+ +

The verification callback can be set and inherited from the parent structure performing the operation. In some cases (such as S/MIME verification) the X509_STORE_CTX structure is created and destroyed internally and the only way to set a custom verification callback is by inheriting it from the associated X509_STORE.

+ +

RETURN VALUES

+ +

X509_STORE_CTX_set_verify_cb() does not return a value.

+ +

EXAMPLES

+ +

Default callback operation:

+ +
int verify_callback(int ok, X509_STORE_CTX *ctx) {
+    return ok;
+}
+ +

Simple example, suppose a certificate in the chain is expired and we wish to continue after this error:

+ +
int verify_callback(int ok, X509_STORE_CTX *ctx) {
+    /* Tolerate certificate expiration */
+    if (X509_STORE_CTX_get_error(ctx) == X509_V_ERR_CERT_HAS_EXPIRED)
+        return 1;
+    /* Otherwise don't override */
+    return ok;
+}
+ +

More complex example, we don't wish to continue after any certificate has expired just one specific case:

+ +
int verify_callback(int ok, X509_STORE_CTX *ctx)
+{
+    int err = X509_STORE_CTX_get_error(ctx);
+    X509 *err_cert = X509_STORE_CTX_get_current_cert(ctx);
+
+    if (err == X509_V_ERR_CERT_HAS_EXPIRED) {
+        if (check_is_acceptable_expired_cert(err_cert)
+            return 1;
+    }
+    return ok;
+}
+ +

Full featured logging callback. In this case the bio_err is assumed to be a global logging BIO, an alternative would to store a BIO in ctx using ex_data.

+ +
int verify_callback(int ok, X509_STORE_CTX *ctx)
+{
+    X509 *err_cert;
+    int err, depth;
+
+    err_cert = X509_STORE_CTX_get_current_cert(ctx);
+    err = X509_STORE_CTX_get_error(ctx);
+    depth = X509_STORE_CTX_get_error_depth(ctx);
+
+    BIO_printf(bio_err, "depth=%d ", depth);
+    if (err_cert) {
+        X509_NAME_print_ex(bio_err, X509_get_subject_name(err_cert),
+                           0, XN_FLAG_ONELINE);
+        BIO_puts(bio_err, "\n");
+    }
+    else
+        BIO_puts(bio_err, "<no cert>\n");
+    if (!ok)
+        BIO_printf(bio_err, "verify error:num=%d:%s\n", err,
+                   X509_verify_cert_error_string(err));
+    switch (err) {
+    case X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT:
+        BIO_puts(bio_err, "issuer= ");
+        X509_NAME_print_ex(bio_err, X509_get_issuer_name(err_cert),
+                           0, XN_FLAG_ONELINE);
+        BIO_puts(bio_err, "\n");
+        break;
+    case X509_V_ERR_CERT_NOT_YET_VALID:
+    case X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD:
+        BIO_printf(bio_err, "notBefore=");
+        ASN1_TIME_print(bio_err, X509_get_notBefore(err_cert));
+        BIO_printf(bio_err, "\n");
+        break;
+    case X509_V_ERR_CERT_HAS_EXPIRED:
+    case X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD:
+        BIO_printf(bio_err, "notAfter=");
+        ASN1_TIME_print(bio_err, X509_get_notAfter(err_cert));
+        BIO_printf(bio_err, "\n");
+        break;
+    case X509_V_ERR_NO_EXPLICIT_POLICY:
+        policies_print(bio_err, ctx);
+        break;
+    }
+    if (err == X509_V_OK && ok == 2)
+        /* print out policies */
+
+    BIO_printf(bio_err, "verify return:%d\n", ok);
+    return(ok);
+}
+ +

SEE ALSO

+ +

X509_STORE_CTX_get_error(3) X509_STORE_set_verify_cb_func(3) X509_STORE_CTX_get_ex_new_index(3)

+ +

HISTORY

+ +

The X509_STORE_CTX_get_get_issuer(), X509_STORE_CTX_get_check_issued(), X509_STORE_CTX_get_check_revocation(), X509_STORE_CTX_get_get_crl(), X509_STORE_CTX_get_check_crl(), X509_STORE_CTX_get_cert_crl(), X509_STORE_CTX_get_check_policy(), X509_STORE_CTX_get_lookup_certs(), X509_STORE_CTX_get_lookup_crls() and X509_STORE_CTX_get_cleanup() functions were added in OpenSSL 1.1.0.

+ +

COPYRIGHT

+ +

Copyright 2009-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_STORE_add_cert.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_STORE_add_cert.html new file mode 100644 index 00000000..8e224d64 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_STORE_add_cert.html @@ -0,0 +1,86 @@ + + + + +X509_STORE_add_cert + + + + + + + + + + +

NAME

+ +

X509_STORE, X509_STORE_add_cert, X509_STORE_add_crl, X509_STORE_set_depth, X509_STORE_set_flags, X509_STORE_set_purpose, X509_STORE_set_trust, X509_STORE_add_lookup, X509_STORE_load_locations, X509_STORE_set_default_paths - X509_STORE manipulation

+ +

SYNOPSIS

+ +
#include <openssl/x509_vfy.h>
+
+typedef x509_store_st X509_STORE;
+
+int X509_STORE_add_cert(X509_STORE *ctx, X509 *x);
+int X509_STORE_add_crl(X509_STORE *ctx, X509_CRL *x);
+int X509_STORE_set_depth(X509_STORE *store, int depth);
+int X509_STORE_set_flags(X509_STORE *ctx, unsigned long flags);
+int X509_STORE_set_purpose(X509_STORE *ctx, int purpose);
+int X509_STORE_set_trust(X509_STORE *ctx, int trust);
+
+X509_LOOKUP *X509_STORE_add_lookup(X509_STORE *store,
+                                   X509_LOOKUP_METHOD *meth);
+
+int X509_STORE_load_locations(X509_STORE *ctx,
+                              const char *file, const char *dir);
+int X509_STORE_set_default_paths(X509_STORE *ctx);
+ +

DESCRIPTION

+ +

The X509_STORE structure is intended to be a consolidated mechanism for holding information about X.509 certificates and CRLs, and constructing and validating chains of certificates terminating in trusted roots. It admits multiple lookup mechanisms and efficient scaling performance with large numbers of certificates, and a great deal of flexibility in how validation and policy checks are performed.

+ +

X509_STORE_new(3) creates an empty X509_STORE structure, which contains no information about trusted certificates or where such certificates are located on disk, and is generally not usable. Normally, trusted certificates will be added to the X509_STORE to prepare it for use, via mechanisms such as X509_STORE_add_lookup() and X509_LOOKUP_file(), or PEM_read_bio_X509_AUX() and X509_STORE_add_cert(). CRLs can also be added, and many behaviors configured as desired.

+ +

Once the X509_STORE is suitably configured, X509_STORE_CTX_new() is used to instantiate a single-use X509_STORE_CTX for each chain-building and verification operation. That process includes providing the end-entity certificate to be verified and an additional set of untrusted certificates that may be used in chain-building. As such, it is expected that the certificates included in the X509_STORE are certificates that represent trusted entities such as root certificate authorities (CAs). OpenSSL represents these trusted certificates internally as X509 objects with an associated X509_CERT_AUX, as are produced by PEM_read_bio_X509_AUX() and similar routines that refer to X509_AUX. The public interfaces that operate on such trusted certificates still operate on pointers to X509 objects, though.

+ +

X509_STORE_add_cert() and X509_STORE_add_crl() add the respective object to the X509_STORE's local storage. Untrusted objects should not be added in this way. The added object's reference count is incremented by one, hence the caller retains ownership of the object and needs to free it when it is no longer needed.

+ +

X509_STORE_set_depth(), X509_STORE_set_flags(), X509_STORE_set_purpose(), X509_STORE_set_trust(), and X509_STORE_set1_param() set the default values for the corresponding values used in certificate chain validation. Their behavior is documented in the corresponding X509_VERIFY_PARAM manual pages, e.g., X509_VERIFY_PARAM_set_depth(3).

+ +

X509_STORE_add_lookup() finds or creates a X509_LOOKUP(3) with the X509_LOOKUP_METHOD(3) meth and adds it to the X509_STORE store. This also associates the X509_STORE with the lookup, so X509_LOOKUP functions can look up objects in that store.

+ +

X509_STORE_load_locations() loads trusted certificate(s) into an X509_STORE from a given file and/or directory path. It is permitted to specify just a file, just a directory, or both paths. The certificates in the directory must be in hashed form, as documented in X509_LOOKUP_hash_dir(3).

+ +

X509_STORE_set_default_paths() is somewhat misnamed, in that it does not set what default paths should be used for loading certificates. Instead, it loads certificates into the X509_STORE from the hardcoded default paths.

+ +

RETURN VALUES

+ +

X509_STORE_add_cert(), X509_STORE_add_crl(), X509_STORE_set_depth(), X509_STORE_set_flags(), X509_STORE_set_purpose(), X509_STORE_set_trust(), X509_STORE_load_locations(), and X509_STORE_set_default_paths() return 1 on success or 0 on failure.

+ +

X509_STORE_add_lookup() returns the found or created X509_LOOKUP(3), or NULL on error.

+ +

SEE ALSO

+ +

X509_LOOKUP_hash_dir(3). X509_VERIFY_PARAM_set_depth(3). X509_STORE_new(3), X509_STORE_get0_param(3)

+ +

COPYRIGHT

+ +

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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_STORE_get0_param.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_STORE_get0_param.html new file mode 100644 index 00000000..274a5b03 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_STORE_get0_param.html @@ -0,0 +1,71 @@ + + + + +X509_STORE_get0_param + + + + + + + + + + +

NAME

+ +

X509_STORE_get0_param, X509_STORE_set1_param, X509_STORE_get0_objects - X509_STORE setter and getter functions

+ +

SYNOPSIS

+ +
#include <openssl/x509_vfy.h>
+
+X509_VERIFY_PARAM *X509_STORE_get0_param(X509_STORE *ctx);
+int X509_STORE_set1_param(X509_STORE *ctx, X509_VERIFY_PARAM *pm);
+STACK_OF(X509_OBJECT) *X509_STORE_get0_objects(X509_STORE *ctx);
+ +

DESCRIPTION

+ +

X509_STORE_set1_param() sets the verification parameters to pm for ctx.

+ +

X509_STORE_get0_param() retrieves an internal pointer to the verification parameters for ctx. The returned pointer must not be freed by the calling application

+ +

X509_STORE_get0_objects() retrieve an internal pointer to the store's X509 object cache. The cache contains X509 and X509_CRL objects. The returned pointer must not be freed by the calling application.

+ +

RETURN VALUES

+ +

X509_STORE_get0_param() returns a pointer to an X509_VERIFY_PARAM structure.

+ +

X509_STORE_set1_param() returns 1 for success and 0 for failure.

+ +

X509_STORE_get0_objects() returns a pointer to a stack of X509_OBJECT.

+ +

SEE ALSO

+ +

X509_STORE_new(3)

+ +

HISTORY

+ +

X509_STORE_get0_param and X509_STORE_get0_objects were added in OpenSSL 1.1.0.

+ +

COPYRIGHT

+ +

Copyright 2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_STORE_new.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_STORE_new.html new file mode 100644 index 00000000..3c219a1f --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_STORE_new.html @@ -0,0 +1,75 @@ + + + + +X509_STORE_new + + + + + + + + + + +

NAME

+ +

X509_STORE_new, X509_STORE_up_ref, X509_STORE_free, X509_STORE_lock, X509_STORE_unlock - X509_STORE allocation, freeing and locking functions

+ +

SYNOPSIS

+ +
#include <openssl/x509_vfy.h>
+
+X509_STORE *X509_STORE_new(void);
+void X509_STORE_free(X509_STORE *v);
+int X509_STORE_lock(X509_STORE *v);
+int X509_STORE_unlock(X509_STORE *v);
+int X509_STORE_up_ref(X509_STORE *v);
+ +

DESCRIPTION

+ +

The X509_STORE_new() function returns a new X509_STORE.

+ +

X509_STORE_up_ref() increments the reference count associated with the X509_STORE object.

+ +

X509_STORE_lock() locks the store from modification by other threads, X509_STORE_unlock() unlocks it.

+ +

X509_STORE_free() frees up a single X509_STORE object.

+ +

RETURN VALUES

+ +

X509_STORE_new() returns a newly created X509_STORE or NULL if the call fails.

+ +

X509_STORE_up_ref(), X509_STORE_lock() and X509_STORE_unlock() return 1 for success and 0 for failure.

+ +

X509_STORE_free() does not return values.

+ +

SEE ALSO

+ +

X509_STORE_set_verify_cb_func(3) X509_STORE_get0_param(3)

+ +

HISTORY

+ +

The X509_STORE_up_ref(), X509_STORE_lock() and X509_STORE_unlock() functions were added in OpenSSL 1.1.0.

+ +

COPYRIGHT

+ +

Copyright 2016-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_STORE_set_verify_cb_func.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_STORE_set_verify_cb_func.html new file mode 100644 index 00000000..bfab73c9 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_STORE_set_verify_cb_func.html @@ -0,0 +1,169 @@ + + + + +X509_STORE_set_verify_cb_func + + + + + + + + + + +

NAME

+ +

X509_STORE_set_lookup_crls_cb, X509_STORE_set_verify_func, X509_STORE_get_cleanup, X509_STORE_set_cleanup, X509_STORE_get_lookup_crls, X509_STORE_set_lookup_crls, X509_STORE_get_lookup_certs, X509_STORE_set_lookup_certs, X509_STORE_get_check_policy, X509_STORE_set_check_policy, X509_STORE_get_cert_crl, X509_STORE_set_cert_crl, X509_STORE_get_check_crl, X509_STORE_set_check_crl, X509_STORE_get_get_crl, X509_STORE_set_get_crl, X509_STORE_get_check_revocation, X509_STORE_set_check_revocation, X509_STORE_get_check_issued, X509_STORE_set_check_issued, X509_STORE_get_get_issuer, X509_STORE_set_get_issuer, X509_STORE_CTX_get_verify, X509_STORE_set_verify, X509_STORE_get_verify_cb, X509_STORE_set_verify_cb_func, X509_STORE_set_verify_cb, X509_STORE_CTX_cert_crl_fn, X509_STORE_CTX_check_crl_fn, X509_STORE_CTX_check_issued_fn, X509_STORE_CTX_check_policy_fn, X509_STORE_CTX_check_revocation_fn, X509_STORE_CTX_cleanup_fn, X509_STORE_CTX_get_crl_fn, X509_STORE_CTX_get_issuer_fn, X509_STORE_CTX_lookup_certs_fn, X509_STORE_CTX_lookup_crls_fn - set verification callback

+ +

SYNOPSIS

+ +
#include <openssl/x509_vfy.h>
+
+typedef int (*X509_STORE_CTX_get_issuer_fn)(X509 **issuer,
+                                            X509_STORE_CTX *ctx, X509 *x);
+typedef int (*X509_STORE_CTX_check_issued_fn)(X509_STORE_CTX *ctx,
+                                              X509 *x, X509 *issuer);
+typedef int (*X509_STORE_CTX_check_revocation_fn)(X509_STORE_CTX *ctx);
+typedef int (*X509_STORE_CTX_get_crl_fn)(X509_STORE_CTX *ctx,
+                                         X509_CRL **crl, X509 *x);
+typedef int (*X509_STORE_CTX_check_crl_fn)(X509_STORE_CTX *ctx, X509_CRL *crl);
+typedef int (*X509_STORE_CTX_cert_crl_fn)(X509_STORE_CTX *ctx,
+                                          X509_CRL *crl, X509 *x);
+typedef int (*X509_STORE_CTX_check_policy_fn)(X509_STORE_CTX *ctx);
+typedef STACK_OF(X509) *(*X509_STORE_CTX_lookup_certs_fn)(X509_STORE_CTX *ctx,
+                                                          X509_NAME *nm);
+typedef STACK_OF(X509_CRL) *(*X509_STORE_CTX_lookup_crls_fn)(X509_STORE_CTX *ctx,
+                                                             X509_NAME *nm);
+typedef int (*X509_STORE_CTX_cleanup_fn)(X509_STORE_CTX *ctx);
+
+void X509_STORE_set_verify_cb(X509_STORE *ctx,
+                              X509_STORE_CTX_verify_cb verify_cb);
+X509_STORE_CTX_verify_cb X509_STORE_get_verify_cb(X509_STORE_CTX *ctx);
+
+void X509_STORE_set_verify(X509_STORE *ctx, X509_STORE_CTX_verify_fn verify);
+X509_STORE_CTX_verify_fn X509_STORE_CTX_get_verify(X509_STORE_CTX *ctx);
+
+void X509_STORE_set_get_issuer(X509_STORE *ctx,
+                               X509_STORE_CTX_get_issuer_fn get_issuer);
+X509_STORE_CTX_get_issuer_fn X509_STORE_get_get_issuer(X509_STORE_CTX *ctx);
+
+void X509_STORE_set_check_issued(X509_STORE *ctx,
+                                 X509_STORE_CTX_check_issued_fn check_issued);
+X509_STORE_CTX_check_issued_fn X509_STORE_get_check_issued(X509_STORE_CTX *ctx);
+
+void X509_STORE_set_check_revocation(X509_STORE *ctx,
+                                     X509_STORE_CTX_check_revocation_fn check_revocation);
+X509_STORE_CTX_check_revocation_fn X509_STORE_get_check_revocation(X509_STORE_CTX *ctx);
+
+void X509_STORE_set_get_crl(X509_STORE *ctx,
+                            X509_STORE_CTX_get_crl_fn get_crl);
+X509_STORE_CTX_get_crl_fn X509_STORE_get_get_crl(X509_STORE_CTX *ctx);
+
+void X509_STORE_set_check_crl(X509_STORE *ctx,
+                              X509_STORE_CTX_check_crl_fn check_crl);
+X509_STORE_CTX_check_crl_fn X509_STORE_get_check_crl(X509_STORE_CTX *ctx);
+
+void X509_STORE_set_cert_crl(X509_STORE *ctx,
+                             X509_STORE_CTX_cert_crl_fn cert_crl);
+X509_STORE_CTX_cert_crl_fn X509_STORE_get_cert_crl(X509_STORE_CTX *ctx);
+
+void X509_STORE_set_check_policy(X509_STORE *ctx,
+                                 X509_STORE_CTX_check_policy_fn check_policy);
+X509_STORE_CTX_check_policy_fn X509_STORE_get_check_policy(X509_STORE_CTX *ctx);
+
+void X509_STORE_set_lookup_certs(X509_STORE *ctx,
+                                 X509_STORE_CTX_lookup_certs_fn lookup_certs);
+X509_STORE_CTX_lookup_certs_fn X509_STORE_get_lookup_certs(X509_STORE_CTX *ctx);
+
+void X509_STORE_set_lookup_crls(X509_STORE *ctx,
+                                X509_STORE_CTX_lookup_crls_fn lookup_crls);
+X509_STORE_CTX_lookup_crls_fn X509_STORE_get_lookup_crls(X509_STORE_CTX *ctx);
+
+void X509_STORE_set_cleanup(X509_STORE *ctx,
+                            X509_STORE_CTX_cleanup_fn cleanup);
+X509_STORE_CTX_cleanup_fn X509_STORE_get_cleanup(X509_STORE_CTX *ctx);
+
+/* Aliases */
+void X509_STORE_set_verify_cb_func(X509_STORE *st,
+                                   X509_STORE_CTX_verify_cb verify_cb);
+void X509_STORE_set_verify_func(X509_STORE *ctx,
+                                X509_STORE_CTX_verify_fn verify);
+void X509_STORE_set_lookup_crls_cb(X509_STORE *ctx,
+                                   X509_STORE_CTX_lookup_crls_fn lookup_crls);
+ +

DESCRIPTION

+ +

X509_STORE_set_verify_cb() sets the verification callback of ctx to verify_cb overwriting the previous callback. The callback assigned with this function becomes a default for the one that can be assigned directly to the corresponding X509_STORE_CTX, please see X509_STORE_CTX_set_verify_cb(3) for further information.

+ +

X509_STORE_set_verify() sets the final chain verification function for ctx to verify. Its purpose is to go through the chain of certificates and check that all signatures are valid and that the current time is within the limits of each certificate's first and last validity time. The final chain verification functions must return 0 on failure and 1 on success. If no chain verification function is provided, the internal default function will be used instead.

+ +

X509_STORE_set_get_issuer() sets the function to get the issuer certificate that verifies the given certificate x. When found, the issuer certificate must be assigned to *issuer. This function must return 0 on failure and 1 on success. If no function to get the issuer is provided, the internal default function will be used instead.

+ +

X509_STORE_set_check_issued() sets the function to check that a given certificate x is issued with the issuer certificate issuer. This function must return 0 on failure (among others if x hasn't been issued with issuer) and 1 on success. If no function to get the issuer is provided, the internal default function will be used instead.

+ +

X509_STORE_set_check_revocation() sets the revocation checking function. Its purpose is to look through the final chain and check the revocation status for each certificate. It must return 0 on failure and 1 on success. If no function to get the issuer is provided, the internal default function will be used instead.

+ +

X509_STORE_set_get_crl() sets the function to get the crl for a given certificate x. When found, the crl must be assigned to *crl. This function must return 0 on failure and 1 on success. If no function to get the issuer is provided, the internal default function will be used instead.

+ +

X509_STORE_set_check_crl() sets the function to check the validity of the given crl. This function must return 0 on failure and 1 on success. If no function to get the issuer is provided, the internal default function will be used instead.

+ +

X509_STORE_set_cert_crl() sets the function to check the revocation status of the given certificate x against the given crl. This function must return 0 on failure and 1 on success. If no function to get the issuer is provided, the internal default function will be used instead.

+ +

X509_STORE_set_check_policy() sets the function to check the policies of all the certificates in the final chain.. This function must return 0 on failure and 1 on success. If no function to get the issuer is provided, the internal default function will be used instead.

+ +

X509_STORE_set_lookup_certs() and X509_STORE_set_lookup_crls() set the functions to look up all the certs or all the CRLs that match the given name nm. These functions return NULL on failure and a pointer to a stack of certificates (X509) or to a stack of CRLs (X509_CRL) on success. If no function to get the issuer is provided, the internal default function will be used instead.

+ +

X509_STORE_set_cleanup() sets the final cleanup function, which is called when the context (X509_STORE_CTX) is being torn down. This function doesn't return any value. If no function to get the issuer is provided, the internal default function will be used instead.

+ +

X509_STORE_get_verify_cb(), X509_STORE_CTX_get_verify(), X509_STORE_get_get_issuer(), X509_STORE_get_check_issued(), X509_STORE_get_check_revocation(), X509_STORE_get_get_crl(), X509_STORE_get_check_crl(), X509_STORE_set_verify(), X509_STORE_set_get_issuer(), X509_STORE_get_cert_crl(), X509_STORE_get_check_policy(), X509_STORE_get_lookup_certs(), X509_STORE_get_lookup_crls() and X509_STORE_get_cleanup() all return the function pointer assigned with X509_STORE_set_check_issued(), X509_STORE_set_check_revocation(), X509_STORE_set_get_crl(), X509_STORE_set_check_crl(), X509_STORE_set_cert_crl(), X509_STORE_set_check_policy(), X509_STORE_set_lookup_certs(), X509_STORE_set_lookup_crls() and X509_STORE_set_cleanup(), or NULL if no assignment has been made.

+ +

X509_STORE_set_verify_cb_func(), X509_STORE_set_verify_func() and X509_STORE_set_lookup_crls_cb() are aliases for X509_STORE_set_verify_cb(), X509_STORE_set_verify() and X509_STORE_set_lookup_crls, available as macros for backward compatibility.

+ +

NOTES

+ +

All the callbacks from a X509_STORE are inherited by the corresponding X509_STORE_CTX structure when it is initialized. See X509_STORE_CTX_set_verify_cb(3) for further details.

+ +

BUGS

+ +

The macro version of this function was the only one available before OpenSSL 1.0.0.

+ +

RETURN VALUES

+ +

The X509_STORE_set_*() functions do not return a value.

+ +

The X509_STORE_get_*() functions return a pointer of the appropriate function type.

+ +

SEE ALSO

+ +

X509_STORE_CTX_set_verify_cb(3), X509_STORE_CTX_get0_chain(3), X509_STORE_CTX_verify_cb(3), X509_STORE_CTX_verify_fn(3), CMS_verify(3)

+ +

HISTORY

+ +

The X509_STORE_set_verify_cb() function was added in OpenSSL 1.0.0.

+ +

The functions X509_STORE_set_verify_cb(), X509_STORE_get_verify_cb(), X509_STORE_set_verify(), X509_STORE_CTX_get_verify(), X509_STORE_set_get_issuer(), X509_STORE_get_get_issuer(), X509_STORE_set_check_issued(), X509_STORE_get_check_issued(), X509_STORE_set_check_revocation(), X509_STORE_get_check_revocation(), X509_STORE_set_get_crl(), X509_STORE_get_get_crl(), X509_STORE_set_check_crl(), X509_STORE_get_check_crl(), X509_STORE_set_cert_crl(), X509_STORE_get_cert_crl(), X509_STORE_set_check_policy(), X509_STORE_get_check_policy(), X509_STORE_set_lookup_certs(), X509_STORE_get_lookup_certs(), X509_STORE_set_lookup_crls(), X509_STORE_get_lookup_crls(), X509_STORE_set_cleanup() and X509_STORE_get_cleanup() were added in OpenSSL 1.1.0.

+ +

COPYRIGHT

+ +

Copyright 2009-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_VERIFY_PARAM_set_flags.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_VERIFY_PARAM_set_flags.html new file mode 100644 index 00000000..7a465270 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_VERIFY_PARAM_set_flags.html @@ -0,0 +1,231 @@ + + + + +X509_VERIFY_PARAM_set_flags + + + + + + + + + + +

NAME

+ +

X509_VERIFY_PARAM_set_flags, X509_VERIFY_PARAM_clear_flags, X509_VERIFY_PARAM_get_flags, X509_VERIFY_PARAM_set_purpose, X509_VERIFY_PARAM_get_inh_flags, X509_VERIFY_PARAM_set_inh_flags, X509_VERIFY_PARAM_set_trust, X509_VERIFY_PARAM_set_depth, X509_VERIFY_PARAM_get_depth, X509_VERIFY_PARAM_set_auth_level, X509_VERIFY_PARAM_get_auth_level, X509_VERIFY_PARAM_set_time, X509_VERIFY_PARAM_get_time, X509_VERIFY_PARAM_add0_policy, X509_VERIFY_PARAM_set1_policies, X509_VERIFY_PARAM_set1_host, X509_VERIFY_PARAM_add1_host, X509_VERIFY_PARAM_set_hostflags, X509_VERIFY_PARAM_get_hostflags, X509_VERIFY_PARAM_get0_peername, X509_VERIFY_PARAM_set1_email, X509_VERIFY_PARAM_set1_ip, X509_VERIFY_PARAM_set1_ip_asc - X509 verification parameters

+ +

SYNOPSIS

+ +
#include <openssl/x509_vfy.h>
+
+int X509_VERIFY_PARAM_set_flags(X509_VERIFY_PARAM *param,
+                                unsigned long flags);
+int X509_VERIFY_PARAM_clear_flags(X509_VERIFY_PARAM *param,
+                                  unsigned long flags);
+unsigned long X509_VERIFY_PARAM_get_flags(X509_VERIFY_PARAM *param);
+
+int X509_VERIFY_PARAM_set_inh_flags(X509_VERIFY_PARAM *param,
+                                    uint32_t flags);
+uint32_t X509_VERIFY_PARAM_get_inh_flags(const X509_VERIFY_PARAM *param);
+
+int X509_VERIFY_PARAM_set_purpose(X509_VERIFY_PARAM *param, int purpose);
+int X509_VERIFY_PARAM_set_trust(X509_VERIFY_PARAM *param, int trust);
+
+void X509_VERIFY_PARAM_set_time(X509_VERIFY_PARAM *param, time_t t);
+time_t X509_VERIFY_PARAM_get_time(const X509_VERIFY_PARAM *param);
+
+int X509_VERIFY_PARAM_add0_policy(X509_VERIFY_PARAM *param,
+                                  ASN1_OBJECT *policy);
+int X509_VERIFY_PARAM_set1_policies(X509_VERIFY_PARAM *param,
+                                    STACK_OF(ASN1_OBJECT) *policies);
+
+void X509_VERIFY_PARAM_set_depth(X509_VERIFY_PARAM *param, int depth);
+int X509_VERIFY_PARAM_get_depth(const X509_VERIFY_PARAM *param);
+
+void X509_VERIFY_PARAM_set_auth_level(X509_VERIFY_PARAM *param,
+                                      int auth_level);
+int X509_VERIFY_PARAM_get_auth_level(const X509_VERIFY_PARAM *param);
+
+int X509_VERIFY_PARAM_set1_host(X509_VERIFY_PARAM *param,
+                                const char *name, size_t namelen);
+int X509_VERIFY_PARAM_add1_host(X509_VERIFY_PARAM *param,
+                                const char *name, size_t namelen);
+void X509_VERIFY_PARAM_set_hostflags(X509_VERIFY_PARAM *param,
+                                     unsigned int flags);
+unsigned int X509_VERIFY_PARAM_get_hostflags(const X509_VERIFY_PARAM *param);
+char *X509_VERIFY_PARAM_get0_peername(X509_VERIFY_PARAM *param);
+int X509_VERIFY_PARAM_set1_email(X509_VERIFY_PARAM *param,
+                                 const char *email, size_t emaillen);
+int X509_VERIFY_PARAM_set1_ip(X509_VERIFY_PARAM *param,
+                              const unsigned char *ip, size_t iplen);
+int X509_VERIFY_PARAM_set1_ip_asc(X509_VERIFY_PARAM *param, const char *ipasc);
+ +

DESCRIPTION

+ +

These functions manipulate the X509_VERIFY_PARAM structure associated with a certificate verification operation.

+ +

The X509_VERIFY_PARAM_set_flags() function sets the flags in param by oring it with flags. See the VERIFICATION FLAGS section for a complete description of values the flags parameter can take.

+ +

X509_VERIFY_PARAM_get_flags() returns the flags in param.

+ +

X509_VERIFY_PARAM_get_inh_flags() returns the inheritance flags in param which specifies how verification flags are copied from one structure to another. X509_VERIFY_PARAM_set_inh_flags() sets the inheritance flags. See the INHERITANCE FLAGS section for a description of these bits.

+ +

X509_VERIFY_PARAM_clear_flags() clears the flags flags in param.

+ +

X509_VERIFY_PARAM_set_purpose() sets the verification purpose in param to purpose. This determines the acceptable purpose of the certificate chain, for example SSL client or SSL server.

+ +

X509_VERIFY_PARAM_set_trust() sets the trust setting in param to trust.

+ +

X509_VERIFY_PARAM_set_time() sets the verification time in param to t. Normally the current time is used.

+ +

X509_VERIFY_PARAM_add0_policy() enables policy checking (it is disabled by default) and adds policy to the acceptable policy set.

+ +

X509_VERIFY_PARAM_set1_policies() enables policy checking (it is disabled by default) and sets the acceptable policy set to policies. Any existing policy set is cleared. The policies parameter can be NULL to clear an existing policy set.

+ +

X509_VERIFY_PARAM_set_depth() sets the maximum verification depth to depth. That is the maximum number of intermediate CA certificates that can appear in a chain. A maximal depth chain contains 2 more certificates than the limit, since neither the end-entity certificate nor the trust-anchor count against this limit. Thus a depth limit of 0 only allows the end-entity certificate to be signed directly by the trust-anchor, while with a depth limit of 1 there can be one intermediate CA certificate between the trust-anchor and the end-entity certificate.

+ +

X509_VERIFY_PARAM_set_auth_level() sets the authentication security level to auth_level. The authentication security level determines the acceptable signature and public key strength when verifying certificate chains. For a certificate chain to validate, the public keys of all the certificates must meet the specified security level. The signature algorithm security level is not enforced for the chain's trust anchor certificate, which is either directly trusted or validated by means other than its signature. See SSL_CTX_set_security_level(3) for the definitions of the available levels. The default security level is -1, or "not set". At security level 0 or lower all algorithms are acceptable. Security level 1 requires at least 80-bit-equivalent security and is broadly interoperable, though it will, for example, reject MD5 signatures or RSA keys shorter than 1024 bits.

+ +

X509_VERIFY_PARAM_set1_host() sets the expected DNS hostname to name clearing any previously specified host name or names. If name is NULL, or empty the list of hostnames is cleared, and name checks are not performed on the peer certificate. If name is NUL-terminated, namelen may be zero, otherwise namelen must be set to the length of name.

+ +

When a hostname is specified, certificate verification automatically invokes X509_check_host(3) with flags equal to the flags argument given to X509_VERIFY_PARAM_set_hostflags() (default zero). Applications are strongly advised to use this interface in preference to explicitly calling X509_check_host(3), hostname checks may be out of scope with the DANE-EE(3) certificate usage, and the internal check will be suppressed as appropriate when DANE verification is enabled.

+ +

When the subject CommonName will not be ignored, whether as a result of the X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT host flag, or because no DNS subject alternative names are present in the certificate, any DNS name constraints in issuer certificates apply to the subject CommonName as well as the subject alternative name extension.

+ +

When the subject CommonName will be ignored, whether as a result of the X509_CHECK_FLAG_NEVER_CHECK_SUBJECT host flag, or because some DNS subject alternative names are present in the certificate, DNS name constraints in issuer certificates will not be applied to the subject DN. As described in X509_check_host(3) the X509_CHECK_FLAG_NEVER_CHECK_SUBJECT flag takes precedence over the X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT flag.

+ +

X509_VERIFY_PARAM_get_hostflags() returns any host flags previously set via a call to X509_VERIFY_PARAM_set_hostflags().

+ +

X509_VERIFY_PARAM_add1_host() adds name as an additional reference identifier that can match the peer's certificate. Any previous names set via X509_VERIFY_PARAM_set1_host() or X509_VERIFY_PARAM_add1_host() are retained, no change is made if name is NULL or empty. When multiple names are configured, the peer is considered verified when any name matches.

+ +

X509_VERIFY_PARAM_get0_peername() returns the DNS hostname or subject CommonName from the peer certificate that matched one of the reference identifiers. When wildcard matching is not disabled, or when a reference identifier specifies a parent domain (starts with ".") rather than a hostname, the peer name may be a wildcard name or a sub-domain of the reference identifier respectively. The return string is allocated by the library and is no longer valid once the associated param argument is freed. Applications must not free the return value.

+ +

X509_VERIFY_PARAM_set1_email() sets the expected RFC822 email address to email. If email is NUL-terminated, emaillen may be zero, otherwise emaillen must be set to the length of email. When an email address is specified, certificate verification automatically invokes X509_check_email(3).

+ +

X509_VERIFY_PARAM_set1_ip() sets the expected IP address to ip. The ip argument is in binary format, in network byte-order and iplen must be set to 4 for IPv4 and 16 for IPv6. When an IP address is specified, certificate verification automatically invokes X509_check_ip(3).

+ +

X509_VERIFY_PARAM_set1_ip_asc() sets the expected IP address to ipasc. The ipasc argument is a NUL-terminal ASCII string: dotted decimal quad for IPv4 and colon-separated hexadecimal for IPv6. The condensed "::" notation is supported for IPv6 addresses.

+ +

RETURN VALUES

+ +

X509_VERIFY_PARAM_set_flags(), X509_VERIFY_PARAM_clear_flags(), X509_VERIFY_PARAM_set_inh_flags(), X509_VERIFY_PARAM_set_purpose(), X509_VERIFY_PARAM_set_trust(), X509_VERIFY_PARAM_add0_policy() X509_VERIFY_PARAM_set1_policies(), X509_VERIFY_PARAM_set1_host(), X509_VERIFY_PARAM_add1_host(), X509_VERIFY_PARAM_set1_email(), X509_VERIFY_PARAM_set1_ip() and X509_VERIFY_PARAM_set1_ip_asc() return 1 for success and 0 for failure.

+ +

X509_VERIFY_PARAM_get_flags() returns the current verification flags.

+ +

X509_VERIFY_PARAM_get_hostflags() returns any current host flags.

+ +

X509_VERIFY_PARAM_get_inh_flags() returns the current inheritance flags.

+ +

X509_VERIFY_PARAM_set_time() and X509_VERIFY_PARAM_set_depth() do not return values.

+ +

X509_VERIFY_PARAM_get_depth() returns the current verification depth.

+ +

X509_VERIFY_PARAM_get_auth_level() returns the current authentication security level.

+ +

VERIFICATION FLAGS

+ +

The verification flags consists of zero or more of the following flags ored together.

+ +

X509_V_FLAG_CRL_CHECK enables CRL checking for the certificate chain leaf certificate. An error occurs if a suitable CRL cannot be found.

+ +

X509_V_FLAG_CRL_CHECK_ALL enables CRL checking for the entire certificate chain.

+ +

X509_V_FLAG_IGNORE_CRITICAL disabled critical extension checking. By default any unhandled critical extensions in certificates or (if checked) CRLs results in a fatal error. If this flag is set unhandled critical extensions are ignored. WARNING setting this option for anything other than debugging purposes can be a security risk. Finer control over which extensions are supported can be performed in the verification callback.

+ +

The X509_V_FLAG_X509_STRICT flag disables workarounds for some broken certificates and makes the verification strictly apply X509 rules.

+ +

X509_V_FLAG_ALLOW_PROXY_CERTS enables proxy certificate verification.

+ +

X509_V_FLAG_POLICY_CHECK enables certificate policy checking, by default no policy checking is performed. Additional information is sent to the verification callback relating to policy checking.

+ +

X509_V_FLAG_EXPLICIT_POLICY, X509_V_FLAG_INHIBIT_ANY and X509_V_FLAG_INHIBIT_MAP set the require explicit policy, inhibit any policy and inhibit policy mapping flags respectively as defined in RFC3280. Policy checking is automatically enabled if any of these flags are set.

+ +

If X509_V_FLAG_NOTIFY_POLICY is set and the policy checking is successful a special status code is set to the verification callback. This permits it to examine the valid policy tree and perform additional checks or simply log it for debugging purposes.

+ +

By default some additional features such as indirect CRLs and CRLs signed by different keys are disabled. If X509_V_FLAG_EXTENDED_CRL_SUPPORT is set they are enabled.

+ +

If X509_V_FLAG_USE_DELTAS is set delta CRLs (if present) are used to determine certificate status. If not set deltas are ignored.

+ +

X509_V_FLAG_CHECK_SS_SIGNATURE enables checking of the root CA self signed certificate signature. By default this check is disabled because it doesn't add any additional security but in some cases applications might want to check the signature anyway. A side effect of not checking the root CA signature is that disabled or unsupported message digests on the root CA are not treated as fatal errors.

+ +

When X509_V_FLAG_TRUSTED_FIRST is set, construction of the certificate chain in X509_verify_cert(3) will search the trust store for issuer certificates before searching the provided untrusted certificates. Local issuer certificates are often more likely to satisfy local security requirements and lead to a locally trusted root. This is especially important when some certificates in the trust store have explicit trust settings (see "TRUST SETTINGS" in x509(1)). As of OpenSSL 1.1.0 this option is on by default.

+ +

The X509_V_FLAG_NO_ALT_CHAINS flag suppresses checking for alternative chains. By default, unless X509_V_FLAG_TRUSTED_FIRST is set, when building a certificate chain, if the first certificate chain found is not trusted, then OpenSSL will attempt to replace untrusted certificates supplied by the peer with certificates from the trust store to see if an alternative chain can be found that is trusted. As of OpenSSL 1.1.0, with X509_V_FLAG_TRUSTED_FIRST always set, this option has no effect.

+ +

The X509_V_FLAG_PARTIAL_CHAIN flag causes intermediate certificates in the trust store to be treated as trust-anchors, in the same way as the self-signed root CA certificates. This makes it possible to trust certificates issued by an intermediate CA without having to trust its ancestor root CA. With OpenSSL 1.1.0 and later and <X509_V_FLAG_PARTIAL_CHAIN> set, chain construction stops as soon as the first certificate from the trust store is added to the chain, whether that certificate is a self-signed "root" certificate or a not self-signed intermediate certificate. Thus, when an intermediate certificate is found in the trust store, the verified chain passed to callbacks may be shorter than it otherwise would be without the X509_V_FLAG_PARTIAL_CHAIN flag.

+ +

The X509_V_FLAG_NO_CHECK_TIME flag suppresses checking the validity period of certificates and CRLs against the current time. If X509_VERIFY_PARAM_set_time() is used to specify a verification time, the check is not suppressed.

+ +

INHERITANCE FLAGS

+ +

These flags specify how parameters are "inherited" from one structure to another.

+ +

If X509_VP_FLAG_ONCE is set then the current setting is zeroed after the next call.

+ +

If X509_VP_FLAG_LOCKED is set then no values are copied. This overrides all of the following flags.

+ +

If X509_VP_FLAG_DEFAULT is set then anything set in the source is copied to the destination. Effectively the values in "to" become default values which will be used only if nothing new is set in "from". This is the default.

+ +

If X509_VP_FLAG_OVERWRITE is set then all value are copied across whether they are set or not. Flags is still Ored though.

+ +

If X509_VP_FLAG_RESET_FLAGS is set then the flags value is copied instead of ORed.

+ +

NOTES

+ +

The above functions should be used to manipulate verification parameters instead of functions which work in specific structures such as X509_STORE_CTX_set_flags() which are likely to be deprecated in a future release.

+ +

BUGS

+ +

Delta CRL checking is currently primitive. Only a single delta can be used and (partly due to limitations of X509_STORE) constructed CRLs are not maintained.

+ +

If CRLs checking is enable CRLs are expected to be available in the corresponding X509_STORE structure. No attempt is made to download CRLs from the CRL distribution points extension.

+ +

EXAMPLES

+ +

Enable CRL checking when performing certificate verification during SSL connections associated with an SSL_CTX structure ctx:

+ +
X509_VERIFY_PARAM *param;
+
+param = X509_VERIFY_PARAM_new();
+X509_VERIFY_PARAM_set_flags(param, X509_V_FLAG_CRL_CHECK);
+SSL_CTX_set1_param(ctx, param);
+X509_VERIFY_PARAM_free(param);
+ +

SEE ALSO

+ +

X509_verify_cert(3), X509_check_host(3), X509_check_email(3), X509_check_ip(3), x509(1)

+ +

HISTORY

+ +

The X509_V_FLAG_NO_ALT_CHAINS flag was added in OpenSSL 1.1.0. The flag X509_V_FLAG_CB_ISSUER_CHECK was deprecated in OpenSSL 1.1.0 and has no effect.

+ +

The X509_VERIFY_PARAM_get_hostflags() function was added in OpenSSL 1.1.0i.

+ +

COPYRIGHT

+ +

Copyright 2009-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_check_ca.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_check_ca.html new file mode 100644 index 00000000..a80f9b83 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_check_ca.html @@ -0,0 +1,58 @@ + + + + +X509_check_ca + + + + + + + + + + +

NAME

+ +

X509_check_ca - check if given certificate is CA certificate

+ +

SYNOPSIS

+ +
#include <openssl/x509v3.h>
+
+int X509_check_ca(X509 *cert);
+ +

DESCRIPTION

+ +

This function checks if given certificate is CA certificate (can be used to sign other certificates).

+ +

RETURN VALUES

+ +

Function return 0, if it is not CA certificate, 1 if it is proper X509v3 CA certificate with basicConstraints extension CA:TRUE, 3, if it is self-signed X509 v1 certificate, 4, if it is certificate with keyUsage extension with bit keyCertSign set, but without basicConstraints, and 5 if it has outdated Netscape Certificate Type extension telling that it is CA certificate.

+ +

Actually, any non-zero value means that this certificate could have been used to sign other certificates.

+ +

SEE ALSO

+ +

X509_verify_cert(3), X509_check_issued(3), X509_check_purpose(3)

+ +

COPYRIGHT

+ +

Copyright 2015-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_check_host.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_check_host.html new file mode 100644 index 00000000..c5bbc1d5 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_check_host.html @@ -0,0 +1,128 @@ + + + + +X509_check_host + + + + + + + + + + +

NAME

+ +

X509_check_host, X509_check_email, X509_check_ip, X509_check_ip_asc - X.509 certificate matching

+ +

SYNOPSIS

+ +
#include <openssl/x509v3.h>
+
+int X509_check_host(X509 *, const char *name, size_t namelen,
+                    unsigned int flags, char **peername);
+int X509_check_email(X509 *, const char *address, size_t addresslen,
+                     unsigned int flags);
+int X509_check_ip(X509 *, const unsigned char *address, size_t addresslen,
+                  unsigned int flags);
+int X509_check_ip_asc(X509 *, const char *address, unsigned int flags);
+ +

DESCRIPTION

+ +

The certificate matching functions are used to check whether a certificate matches a given host name, email address, or IP address. The validity of the certificate and its trust level has to be checked by other means.

+ +

X509_check_host() checks if the certificate Subject Alternative Name (SAN) or Subject CommonName (CN) matches the specified host name, which must be encoded in the preferred name syntax described in section 3.5 of RFC 1034. By default, wildcards are supported and they match only in the left-most label; but they may match part of that label with an explicit prefix or suffix. For example, by default, the host name "www.example.com" would match a certificate with a SAN or CN value of "*.example.com", "w*.example.com" or "*w.example.com".

+ +

Per section 6.4.2 of RFC 6125, name values representing international domain names must be given in A-label form. The namelen argument must be the number of characters in the name string or zero in which case the length is calculated with strlen(name). When name starts with a dot (e.g ".example.com"), it will be matched by a certificate valid for any sub-domain of name, (see also X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS below).

+ +

When the certificate is matched, and peername is not NULL, a pointer to a copy of the matching SAN or CN from the peer certificate is stored at the address passed in peername. The application is responsible for freeing the peername via OPENSSL_free() when it is no longer needed.

+ +

X509_check_email() checks if the certificate matches the specified email address. Only the mailbox syntax of RFC 822 is supported, comments are not allowed, and no attempt is made to normalize quoted characters. The addresslen argument must be the number of characters in the address string or zero in which case the length is calculated with strlen(address).

+ +

X509_check_ip() checks if the certificate matches a specified IPv4 or IPv6 address. The address array is in binary format, in network byte order. The length is either 4 (IPv4) or 16 (IPv6). Only explicitly marked addresses in the certificates are considered; IP addresses stored in DNS names and Common Names are ignored.

+ +

X509_check_ip_asc() is similar, except that the NUL-terminated string address is first converted to the internal representation.

+ +

The flags argument is usually 0. It can be the bitwise OR of the flags:

+ +
+ +
X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT,
+
+ +
+
X509_CHECK_FLAG_NEVER_CHECK_SUBJECT,
+
+ +
+
X509_CHECK_FLAG_NO_WILDCARDS,
+
+ +
+
X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS,
+
+ +
+
X509_CHECK_FLAG_MULTI_LABEL_WILDCARDS.
+
+ +
+
X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS.
+
+ +
+
+ +

The X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT flag causes the function to consider the subject DN even if the certificate contains at least one subject alternative name of the right type (DNS name or email address as appropriate); the default is to ignore the subject DN when at least one corresponding subject alternative names is present.

+ +

The X509_CHECK_FLAG_NEVER_CHECK_SUBJECT flag causes the function to never consider the subject DN even if the certificate contains no subject alternative names of the right type (DNS name or email address as appropriate); the default is to use the subject DN when no corresponding subject alternative names are present. If both X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT and X509_CHECK_FLAG_NEVER_CHECK_SUBJECT are specified, the latter takes precedence and the subject DN is not checked for matching names.

+ +

If set, X509_CHECK_FLAG_NO_WILDCARDS disables wildcard expansion; this only applies to X509_check_host.

+ +

If set, X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS suppresses support for "*" as wildcard pattern in labels that have a prefix or suffix, such as: "www*" or "*www"; this only applies to X509_check_host.

+ +

If set, X509_CHECK_FLAG_MULTI_LABEL_WILDCARDS allows a "*" that constitutes the complete label of a DNS name (e.g. "*.example.com") to match more than one label in name; this flag only applies to X509_check_host.

+ +

If set, X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS restricts name values which start with ".", that would otherwise match any sub-domain in the peer certificate, to only match direct child sub-domains. Thus, for instance, with this flag set a name of ".example.com" would match a peer certificate with a DNS name of "www.example.com", but would not match a peer certificate with a DNS name of "www.sub.example.com"; this flag only applies to X509_check_host.

+ +

RETURN VALUES

+ +

The functions return 1 for a successful match, 0 for a failed match and -1 for an internal error: typically a memory allocation failure or an ASN.1 decoding error.

+ +

All functions can also return -2 if the input is malformed. For example, X509_check_host() returns -2 if the provided name contains embedded NULs.

+ +

NOTES

+ +

Applications are encouraged to use X509_VERIFY_PARAM_set1_host() rather than explicitly calling X509_check_host(3). Host name checks may be out of scope with the DANE-EE(3) certificate usage, and the internal checks will be suppressed as appropriate when DANE support is enabled.

+ +

SEE ALSO

+ +

SSL_get_verify_result(3), X509_VERIFY_PARAM_set1_host(3), X509_VERIFY_PARAM_add1_host(3), X509_VERIFY_PARAM_set1_email(3), X509_VERIFY_PARAM_set1_ip(3), X509_VERIFY_PARAM_set1_ipasc(3)

+ +

HISTORY

+ +

These functions were added in OpenSSL 1.0.2.

+ +

COPYRIGHT

+ +

Copyright 2012-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_check_issued.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_check_issued.html new file mode 100644 index 00000000..ba83e80a --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_check_issued.html @@ -0,0 +1,56 @@ + + + + +X509_check_issued + + + + + + + + + + +

NAME

+ +

X509_check_issued - checks if certificate is issued by another certificate

+ +

SYNOPSIS

+ +
#include <openssl/x509v3.h>
+
+int X509_check_issued(X509 *issuer, X509 *subject);
+ +

DESCRIPTION

+ +

This function checks if certificate subject was issued using CA certificate issuer. This function takes into account not only matching of issuer field of subject with subject field of issuer, but also compares authorityKeyIdentifier extension of subject with subjectKeyIdentifier of issuer if authorityKeyIdentifier present in the subject certificate and checks keyUsage field of issuer.

+ +

RETURN VALUES

+ +

Function return X509_V_OK if certificate subject is issued by issuer or some X509_V_ERR* constant to indicate an error.

+ +

SEE ALSO

+ +

X509_verify_cert(3), X509_check_ca(3), verify(1)

+ +

COPYRIGHT

+ +

Copyright 2015-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_check_private_key.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_check_private_key.html new file mode 100644 index 00000000..95140d65 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_check_private_key.html @@ -0,0 +1,67 @@ + + + + +X509_check_private_key + + + + + + + + + + +

NAME

+ +

X509_check_private_key, X509_REQ_check_private_key - check the consistency of a private key with the public key in an X509 certificate or certificate request

+ +

SYNOPSIS

+ +
#include <openssl/x509.h>
+
+int X509_check_private_key(X509 *x, EVP_PKEY *k);
+
+int X509_REQ_check_private_key(X509_REQ *x, EVP_PKEY *k);
+ +

DESCRIPTION

+ +

X509_check_private_key() function checks the consistency of private key k with the public key in x.

+ +

X509_REQ_check_private_key() is equivalent to X509_check_private_key() except that x represents a certificate request of structure X509_REQ.

+ +

RETURN VALUES

+ +

X509_check_private_key() and X509_REQ_check_private_key() return 1 if the keys match each other, and 0 if not.

+ +

If the key is invalid or an error occurred, the reason code can be obtained using ERR_get_error(3).

+ +

BUGS

+ +

The check_private_key functions don't check if k itself is indeed a private key or not. It merely compares the public materials (e.g. exponent and modulus of an RSA key) and/or key parameters (e.g. EC params of an EC key) of a key pair. So if you pass a public key to these functions in k, it will return success.

+ +

SEE ALSO

+ +

ERR_get_error(3)

+ +

COPYRIGHT

+ +

Copyright 2017-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_check_purpose.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_check_purpose.html new file mode 100644 index 00000000..9d7c7a13 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_check_purpose.html @@ -0,0 +1,111 @@ + + + + +X509_check_purpose + + + + + + + + + + +

NAME

+ +

X509_check_purpose - Check the purpose of a certificate

+ +

SYNOPSIS

+ +
#include <openssl/x509v3.h>
+
+int X509_check_purpose(X509 *x, int id, int ca)
+ +

DESCRIPTION

+ +

This function checks if certificate x was created with the purpose represented by id. If ca is nonzero, then certificate x is checked to determine if it's a possible CA with various levels of certainty possibly returned.

+ +

Below are the potential ID's that can be checked:

+ +
# define X509_PURPOSE_SSL_CLIENT        1
+# define X509_PURPOSE_SSL_SERVER        2
+# define X509_PURPOSE_NS_SSL_SERVER     3
+# define X509_PURPOSE_SMIME_SIGN        4
+# define X509_PURPOSE_SMIME_ENCRYPT     5
+# define X509_PURPOSE_CRL_SIGN          6
+# define X509_PURPOSE_ANY               7
+# define X509_PURPOSE_OCSP_HELPER       8
+# define X509_PURPOSE_TIMESTAMP_SIGN    9
+ +

RETURN VALUES

+ +

For non-CA checks

+ +
+ +
-1 an error condition has occured
+
+ +
+
1 if the certificate was created to perform the purpose represented by id
+
+ +
+
0 if the certificate was not created to perform the purpose represented by id
+
+ +
+
+ +

For CA checks the below integers could be returned with the following meanings:

+ +
+ +
-1 an error condition has occured
+
+ +
+
0 not a CA or does not have the purpose represented by id
+
+ +
+
1 is a CA.
+
+ +
+
2 Only possible in old versions of openSSL when basicConstraints are absent. New versions will not return this value. May be a CA
+
+ +
+
3 basicConstraints absent but self signed V1.
+
+ +
+
4 basicConstraints absent but keyUsage present and keyCertSign asserted.
+
+ +
+
5 legacy Netscape specific CA Flags present
+
+ +
+
+ +

COPYRIGHT

+ +

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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_cmp.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_cmp.html new file mode 100644 index 00000000..5309374f --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_cmp.html @@ -0,0 +1,81 @@ + + + + +X509_cmp + + + + + + + + + + +

NAME

+ +

X509_cmp, X509_NAME_cmp, X509_issuer_and_serial_cmp, X509_issuer_name_cmp, X509_subject_name_cmp, X509_CRL_cmp, X509_CRL_match - compare X509 certificates and related values

+ +

SYNOPSIS

+ +
#include <openssl/x509.h>
+
+int X509_cmp(const X509 *a, const X509 *b);
+int X509_NAME_cmp(const X509_NAME *a, const X509_NAME *b);
+int X509_issuer_and_serial_cmp(const X509 *a, const X509 *b);
+int X509_issuer_name_cmp(const X509 *a, const X509 *b);
+int X509_subject_name_cmp(const X509 *a, const X509 *b);
+int X509_CRL_cmp(const X509_CRL *a, const X509_CRL *b);
+int X509_CRL_match(const X509_CRL *a, const X509_CRL *b);
+ +

DESCRIPTION

+ +

This set of functions are used to compare X509 objects, including X509 certificates, X509 CRL objects and various values in an X509 certificate.

+ +

The X509_cmp() function compares two X509 objects indicated by parameters a and b. The comparison is based on the memcmp result of the hash values of two X509 objects and the canonical (DER) encoding values.

+ +

The X509_NAME_cmp() function compares two X509_NAME objects indicated by parameters a and b. The comparison is based on the memcmp result of the canonical (DER) encoding values of the two objects. i2d_X509_NAME(3) has a more detailed description of the DER encoding of the X509_NAME structure.

+ +

The X509_issuer_and_serial_cmp() function compares the serial number and issuer values in the given X509 objects a and b.

+ +

The X509_issuer_name_cmp(), X509_subject_name_cmp() and X509_CRL_cmp() functions are effectively wrappers of the X509_NAME_cmp() function. These functions compare issuer names and subject names of the objects, or issuers of X509_CRL objects, respectively.

+ +

The X509_CRL_match() function compares two X509_CRL objects. Unlike the X509_CRL_cmp() function, this function compares the whole CRL content instead of just the issuer name.

+ +

RETURN VALUES

+ +

Like common memory comparison functions, the X509 comparison functions return an integer less than, equal to, or greater than zero if object a is found to be less than, to match, or be greater than object b, respectively.

+ +

X509_NAME_cmp(), X509_issuer_and_serial_cmp(), X509_issuer_name_cmp(), X509_subject_name_cmp() and X509_CRL_cmp() may return -2 to indicate an error.

+ +

NOTES

+ +

These functions in fact utilize the underlying memcmp of the C library to do the comparison job. Data to be compared varies from DER encoding data, hash value or ASN1_STRING. The sign of the comparison can be used to order the objects but it does not have a special meaning in some cases.

+ +

X509_NAME_cmp() and wrappers utilize the value -2 to indicate errors in some circumstances, which could cause confusion for the applications.

+ +

SEE ALSO

+ +

i2d_X509_NAME(3), i2d_X509(3)

+ +

COPYRIGHT

+ +

Copyright 2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_cmp_time.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_cmp_time.html new file mode 100644 index 00000000..7942eac8 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_cmp_time.html @@ -0,0 +1,68 @@ + + + + +X509_cmp_time + + + + + + + + + + +

NAME

+ +

X509_cmp_time, X509_cmp_current_time, X509_time_adj, X509_time_adj_ex - X509 time functions

+ +

SYNOPSIS

+ +
int X509_cmp_time(const ASN1_TIME *asn1_time, time_t *in_tm);
+int X509_cmp_current_time(const ASN1_TIME *asn1_time);
+ASN1_TIME *X509_time_adj(ASN1_TIME *asn1_time, long offset_sec, time_t *in_tm);
+ASN1_TIME *X509_time_adj_ex(ASN1_TIME *asn1_time, int offset_day, long
+                            offset_sec, time_t *in_tm);
+ +

DESCRIPTION

+ +

X509_cmp_time() compares the ASN1_TIME in asn1_time with the time in <cmp_time>. X509_cmp_current_time() compares the ASN1_TIME in asn1_time with the current time, expressed as time_t. asn1_time must satisfy the ASN1_TIME format mandated by RFC 5280, i.e., its format must be either YYMMDDHHMMSSZ or YYYYMMDDHHMMSSZ.

+ +

X509_time_adj_ex() sets the ASN1_TIME structure asn1_time to the time offset_day and offset_sec after in_tm.

+ +

X509_time_adj() sets the ASN1_TIME structure asn1_time to the time offset_sec after in_tm. This method can only handle second offsets up to the capacity of long, so the newer X509_time_adj_ex() API should be preferred.

+ +

In both methods, if asn1_time is NULL, a new ASN1_TIME structure is allocated and returned.

+ +

In all methods, if in_tm is NULL, the current time, expressed as time_t, is used.

+ +

BUGS

+ +

Unlike many standard comparison functions, X509_cmp_time() and X509_cmp_current_time() return 0 on error.

+ +

RETURN VALUES

+ +

X509_cmp_time() and X509_cmp_current_time() return -1 if asn1_time is earlier than, or equal to, cmp_time (resp. current time), and 1 otherwise. These methods return 0 on error.

+ +

X509_time_adj() and X509_time_adj_ex() return a pointer to the updated ASN1_TIME structure, and NULL on error.

+ +

COPYRIGHT

+ +

Copyright 2017-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_digest.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_digest.html new file mode 100644 index 00000000..8db63963 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_digest.html @@ -0,0 +1,77 @@ + + + + +X509_digest + + + + + + + + + + +

NAME

+ +

X509_digest, X509_CRL_digest, X509_pubkey_digest, X509_NAME_digest, X509_REQ_digest, PKCS7_ISSUER_AND_SERIAL_digest - get digest of various objects

+ +

SYNOPSIS

+ +
#include <openssl/x509.h>
+
+int X509_digest(const X509 *data, const EVP_MD *type, unsigned char *md,
+                unsigned int *len);
+
+int X509_CRL_digest(const X509_CRL *data, const EVP_MD *type, unsigned char *md,
+                    unsigned int *len);
+
+int X509_pubkey_digest(const X509 *data, const EVP_MD *type,
+                       unsigned char *md, unsigned int *len);
+
+int X509_REQ_digest(const X509_REQ *data, const EVP_MD *type,
+                    unsigned char *md, unsigned int *len);
+
+int X509_NAME_digest(const X509_NAME *data, const EVP_MD *type,
+                     unsigned char *md, unsigned int *len);
+
+#include <openssl/pkcs7.h>
+
+int PKCS7_ISSUER_AND_SERIAL_digest(PKCS7_ISSUER_AND_SERIAL *data,
+                                   const EVP_MD *type, unsigned char *md,
+                                   unsigned int *len);
+ +

DESCRIPTION

+ +

X509_pubkey_digest() returns a digest of the DER representation of the public key in the specified X509 data object. All other functions described here return a digest of the DER representation of their entire data objects.

+ +

The type parameter specifies the digest to be used, such as EVP_sha1(). The md is a pointer to the buffer where the digest will be copied and is assumed to be large enough; the constant EVP_MAX_MD_SIZE is suggested. The len parameter, if not NULL, points to a place where the digest size will be stored.

+ +

RETURN VALUES

+ +

All functions described here return 1 for success and 0 for failure.

+ +

SEE ALSO

+ +

EVP_sha1(3)

+ +

COPYRIGHT

+ +

Copyright 2017-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_dup.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_dup.html new file mode 100644 index 00000000..1e36efc0 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_dup.html @@ -0,0 +1,76 @@ + + + + +X509_dup + + + + + + + + + + +

NAME

+ +

DECLARE_ASN1_FUNCTIONS, IMPLEMENT_ASN1_FUNCTIONS, ASN1_ITEM, ACCESS_DESCRIPTION_free, ACCESS_DESCRIPTION_new, ADMISSIONS_free, ADMISSIONS_new, ADMISSION_SYNTAX_free, ADMISSION_SYNTAX_new, ASIdOrRange_free, ASIdOrRange_new, ASIdentifierChoice_free, ASIdentifierChoice_new, ASIdentifiers_free, ASIdentifiers_new, ASRange_free, ASRange_new, AUTHORITY_INFO_ACCESS_free, AUTHORITY_INFO_ACCESS_new, AUTHORITY_KEYID_free, AUTHORITY_KEYID_new, BASIC_CONSTRAINTS_free, BASIC_CONSTRAINTS_new, CERTIFICATEPOLICIES_free, CERTIFICATEPOLICIES_new, CMS_ContentInfo_free, CMS_ContentInfo_new, CMS_ContentInfo_print_ctx, CMS_ReceiptRequest_free, CMS_ReceiptRequest_new, CRL_DIST_POINTS_free, CRL_DIST_POINTS_new, DIRECTORYSTRING_free, DIRECTORYSTRING_new, DISPLAYTEXT_free, DISPLAYTEXT_new, DIST_POINT_NAME_free, DIST_POINT_NAME_new, DIST_POINT_free, DIST_POINT_new, DSAparams_dup, ECPARAMETERS_free, ECPARAMETERS_new, ECPKPARAMETERS_free, ECPKPARAMETERS_new, EDIPARTYNAME_free, EDIPARTYNAME_new, ESS_CERT_ID_dup, ESS_CERT_ID_free, ESS_CERT_ID_new, ESS_ISSUER_SERIAL_dup, ESS_ISSUER_SERIAL_free, ESS_ISSUER_SERIAL_new, ESS_SIGNING_CERT_dup, ESS_SIGNING_CERT_free, ESS_SIGNING_CERT_new, EXTENDED_KEY_USAGE_free, EXTENDED_KEY_USAGE_new, GENERAL_NAMES_free, GENERAL_NAMES_new, GENERAL_NAME_dup, GENERAL_NAME_free, GENERAL_NAME_new, GENERAL_SUBTREE_free, GENERAL_SUBTREE_new, IPAddressChoice_free, IPAddressChoice_new, IPAddressFamily_free, IPAddressFamily_new, IPAddressOrRange_free, IPAddressOrRange_new, IPAddressRange_free, IPAddressRange_new, ISSUING_DIST_POINT_free, ISSUING_DIST_POINT_new, NAME_CONSTRAINTS_free, NAME_CONSTRAINTS_new, NAMING_AUTHORITY_free, NAMING_AUTHORITY_new, NETSCAPE_CERT_SEQUENCE_free, NETSCAPE_CERT_SEQUENCE_new, NETSCAPE_SPKAC_free, NETSCAPE_SPKAC_new, NETSCAPE_SPKI_free, NETSCAPE_SPKI_new, NOTICEREF_free, NOTICEREF_new, OCSP_BASICRESP_free, OCSP_BASICRESP_new, OCSP_CERTID_dup, OCSP_CERTID_new, OCSP_CERTSTATUS_free, OCSP_CERTSTATUS_new, OCSP_CRLID_free, OCSP_CRLID_new, OCSP_ONEREQ_free, OCSP_ONEREQ_new, OCSP_REQINFO_free, OCSP_REQINFO_new, OCSP_RESPBYTES_free, OCSP_RESPBYTES_new, OCSP_RESPDATA_free, OCSP_RESPDATA_new, OCSP_RESPID_free, OCSP_RESPID_new, OCSP_RESPONSE_new, OCSP_REVOKEDINFO_free, OCSP_REVOKEDINFO_new, OCSP_SERVICELOC_free, OCSP_SERVICELOC_new, OCSP_SIGNATURE_free, OCSP_SIGNATURE_new, OCSP_SINGLERESP_free, OCSP_SINGLERESP_new, OTHERNAME_free, OTHERNAME_new, PBE2PARAM_free, PBE2PARAM_new, PBEPARAM_free, PBEPARAM_new, PBKDF2PARAM_free, PBKDF2PARAM_new, PKCS12_BAGS_free, PKCS12_BAGS_new, PKCS12_MAC_DATA_free, PKCS12_MAC_DATA_new, PKCS12_SAFEBAG_free, PKCS12_SAFEBAG_new, PKCS12_free, PKCS12_new, PKCS7_DIGEST_free, PKCS7_DIGEST_new, PKCS7_ENCRYPT_free, PKCS7_ENCRYPT_new, PKCS7_ENC_CONTENT_free, PKCS7_ENC_CONTENT_new, PKCS7_ENVELOPE_free, PKCS7_ENVELOPE_new, PKCS7_ISSUER_AND_SERIAL_free, PKCS7_ISSUER_AND_SERIAL_new, PKCS7_RECIP_INFO_free, PKCS7_RECIP_INFO_new, PKCS7_SIGNED_free, PKCS7_SIGNED_new, PKCS7_SIGNER_INFO_free, PKCS7_SIGNER_INFO_new, PKCS7_SIGN_ENVELOPE_free, PKCS7_SIGN_ENVELOPE_new, PKCS7_dup, PKCS7_free, PKCS7_new, PKCS7_print_ctx, PKCS8_PRIV_KEY_INFO_free, PKCS8_PRIV_KEY_INFO_new, PKEY_USAGE_PERIOD_free, PKEY_USAGE_PERIOD_new, POLICYINFO_free, POLICYINFO_new, POLICYQUALINFO_free, POLICYQUALINFO_new, POLICY_CONSTRAINTS_free, POLICY_CONSTRAINTS_new, POLICY_MAPPING_free, POLICY_MAPPING_new, PROFESSION_INFO_free, PROFESSION_INFO_new, PROFESSION_INFOS_free, PROFESSION_INFOS_new, PROXY_CERT_INFO_EXTENSION_free, PROXY_CERT_INFO_EXTENSION_new, PROXY_POLICY_free, PROXY_POLICY_new, RSAPrivateKey_dup, RSAPublicKey_dup, RSA_OAEP_PARAMS_free, RSA_OAEP_PARAMS_new, RSA_PSS_PARAMS_free, RSA_PSS_PARAMS_new, SCRYPT_PARAMS_free, SCRYPT_PARAMS_new, SXNETID_free, SXNETID_new, SXNET_free, SXNET_new, TLS_FEATURE_free, TLS_FEATURE_new, TS_ACCURACY_dup, TS_ACCURACY_free, TS_ACCURACY_new, TS_MSG_IMPRINT_dup, TS_MSG_IMPRINT_free, TS_MSG_IMPRINT_new, TS_REQ_dup, TS_REQ_free, TS_REQ_new, TS_RESP_dup, TS_RESP_free, TS_RESP_new, TS_STATUS_INFO_dup, TS_STATUS_INFO_free, TS_STATUS_INFO_new, TS_TST_INFO_dup, TS_TST_INFO_free, TS_TST_INFO_new, USERNOTICE_free, USERNOTICE_new, X509_ALGOR_free, X509_ALGOR_new, X509_ATTRIBUTE_dup, X509_ATTRIBUTE_free, X509_ATTRIBUTE_new, X509_CERT_AUX_free, X509_CERT_AUX_new, X509_CINF_free, X509_CINF_new, X509_CRL_INFO_free, X509_CRL_INFO_new, X509_CRL_dup, X509_CRL_free, X509_CRL_new, X509_EXTENSION_dup, X509_EXTENSION_free, X509_EXTENSION_new, X509_NAME_ENTRY_dup, X509_NAME_ENTRY_free, X509_NAME_ENTRY_new, X509_NAME_dup, X509_NAME_free, X509_NAME_new, X509_REQ_INFO_free, X509_REQ_INFO_new, X509_REQ_dup, X509_REQ_free, X509_REQ_new, X509_REVOKED_dup, X509_REVOKED_free, X509_REVOKED_new, X509_SIG_free, X509_SIG_new, X509_VAL_free, X509_VAL_new, X509_dup, - ASN1 object utilities

+ +

SYNOPSIS

+ +
#include <openssl/asn1t.h>
+
+DECLARE_ASN1_FUNCTIONS(type)
+IMPLEMENT_ASN1_FUNCTIONS(stname)
+
+typedef struct ASN1_ITEM_st ASN1_ITEM;
+
+extern const ASN1_ITEM TYPE_it;
+TYPE *TYPE_new(void);
+TYPE *TYPE_dup(TYPE *a);
+void TYPE_free(TYPE *a);
+int TYPE_print_ctx(BIO *out, TYPE *a, int indent, const ASN1_PCTX *pctx);
+ +

DESCRIPTION

+ +

In the description below, TYPE is used as a placeholder for any of the OpenSSL datatypes, such as X509.

+ +

The OpenSSL ASN1 parsing library templates are like a data-driven bytecode interpreter. Every ASN1 object as a global variable, TYPE_it, that describes the item such as its fields. (On systems which cannot export variables from shared libraries, the global is instead a function which returns a pointer to a static variable.

+ +

The macro DECLARE_ASN1_FUNCTIONS() is typically used in header files to generate the function declarations.

+ +

The macro IMPLEMENT_ASN1_FUNCTIONS() is used once in a source file to generate the function bodies.

+ +

TYPE_new() allocates an empty object of the indicated type. The object returned must be released by calling TYPE_free().

+ +

TYPE_dup() copies an existing object.

+ +

TYPE_free() releases the object and all pointers and sub-objects within it.

+ +

TYPE_print_ctx() prints the object a on the specified BIO out. Each line will be prefixed with indent spaces. The pctx specifies the printing context and is for internal use; use NULL to get the default behavior. If a print function is user-defined, then pass in any pctx down to any nested calls.

+ +

RETURN VALUES

+ +

TYPE_new() and TYPE_dup() return a pointer to the object or NULL on failure.

+ +

TYPE_print_ctx() returns 1 on success or zero on failure.

+ +

COPYRIGHT

+ +

Copyright 2016-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_get0_notBefore.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_get0_notBefore.html new file mode 100644 index 00000000..3ba34ba8 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_get0_notBefore.html @@ -0,0 +1,88 @@ + + + + +X509_get0_notBefore + + + + + + + + + + +

NAME

+ +

X509_get0_notBefore, X509_getm_notBefore, X509_get0_notAfter, X509_getm_notAfter, X509_set1_notBefore, X509_set1_notAfter, X509_CRL_get0_lastUpdate, X509_CRL_get0_nextUpdate, X509_CRL_set1_lastUpdate, X509_CRL_set1_nextUpdate - get or set certificate or CRL dates

+ +

SYNOPSIS

+ +
#include <openssl/x509.h>
+
+const ASN1_TIME *X509_get0_notBefore(const X509 *x);
+const ASN1_TIME *X509_get0_notAfter(const X509 *x);
+
+ASN1_TIME *X509_getm_notBefore(const X509 *x);
+ASN1_TIME *X509_getm_notAfter(const X509 *x);
+
+int X509_set1_notBefore(X509 *x, const ASN1_TIME *tm);
+int X509_set1_notAfter(X509 *x, const ASN1_TIME *tm);
+
+const ASN1_TIME *X509_CRL_get0_lastUpdate(const X509_CRL *crl);
+const ASN1_TIME *X509_CRL_get0_nextUpdate(const X509_CRL *crl);
+
+int X509_CRL_set1_lastUpdate(X509_CRL *x, const ASN1_TIME *tm);
+int X509_CRL_set1_nextUpdate(X509_CRL *x, const ASN1_TIME *tm);
+ +

DESCRIPTION

+ +

X509_get0_notBefore() and X509_get0_notAfter() return the notBefore and notAfter fields of certificate x respectively. The value returned is an internal pointer which must not be freed up after the call.

+ +

X509_getm_notBefore() and X509_getm_notAfter() are similar to X509_get0_notBefore() and X509_get0_notAfter() except they return non-constant mutable references to the associated date field of the certificate.

+ +

X509_set1_notBefore() and X509_set1_notAfter() set the notBefore and notAfter fields of x to tm. Ownership of the passed parameter tm is not transferred by these functions so it must be freed up after the call.

+ +

X509_CRL_get0_lastUpdate() and X509_CRL_get0_nextUpdate() return the lastUpdate and nextUpdate fields of crl. The value returned is an internal pointer which must not be freed up after the call. If the nextUpdate field is absent from crl then NULL is returned.

+ +

X509_CRL_set1_lastUpdate() and X509_CRL_set1_nextUpdate() set the lastUpdate and nextUpdate fields of crl to tm. Ownership of the passed parameter tm is not transferred by these functions so it must be freed up after the call.

+ +

RETURN VALUES

+ +

X509_get0_notBefore(), X509_get0_notAfter() and X509_CRL_get0_lastUpdate() return a pointer to an ASN1_TIME structure.

+ +

X509_CRL_get0_lastUpdate() return a pointer to an ASN1_TIME structure or NULL if the lastUpdate field is absent.

+ +

X509_set1_notBefore(), X509_set1_notAfter(), X509_CRL_set1_lastUpdate() and X509_CRL_set1_nextUpdate() return 1 for success or 0 for failure.

+ +

SEE ALSO

+ +

d2i_X509(3), ERR_get_error(3), X509_CRL_get0_by_serial(3), X509_get0_signature(3), X509_get_ext_d2i(3), X509_get_extension_flags(3), X509_get_pubkey(3), X509_get_subject_name(3), X509_NAME_add_entry_by_txt(3), X509_NAME_ENTRY_get_object(3), X509_NAME_get_index_by_NID(3), X509_NAME_print_ex(3), X509_new(3), X509_sign(3), X509V3_get_d2i(3), X509_verify_cert(3)

+ +

HISTORY

+ +

These functions are available in all versions of OpenSSL.

+ +

X509_get_notBefore() and X509_get_notAfter() were deprecated in OpenSSL 1.1.0

+ +

COPYRIGHT

+ +

Copyright 2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_get0_signature.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_get0_signature.html new file mode 100644 index 00000000..23da8c9b --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_get0_signature.html @@ -0,0 +1,106 @@ + + + + +X509_get0_signature + + + + + + + + + + +

NAME

+ +

X509_get0_signature, X509_get_signature_nid, X509_get0_tbs_sigalg, X509_REQ_get0_signature, X509_REQ_get_signature_nid, X509_CRL_get0_signature, X509_CRL_get_signature_nid, X509_get_signature_info, X509_SIG_INFO_get, X509_SIG_INFO_set - signature information

+ +

SYNOPSIS

+ +
#include <openssl/x509.h>
+
+void X509_get0_signature(const ASN1_BIT_STRING **psig,
+                         const X509_ALGOR **palg,
+                         const X509 *x);
+int X509_get_signature_nid(const X509 *x);
+const X509_ALGOR *X509_get0_tbs_sigalg(const X509 *x);
+
+void X509_REQ_get0_signature(const X509_REQ *crl,
+                             const ASN1_BIT_STRING **psig,
+                             const X509_ALGOR **palg);
+int X509_REQ_get_signature_nid(const X509_REQ *crl);
+
+void X509_CRL_get0_signature(const X509_CRL *crl,
+                             const ASN1_BIT_STRING **psig,
+                             const X509_ALGOR **palg);
+int X509_CRL_get_signature_nid(const X509_CRL *crl);
+
+int X509_get_signature_info(X509 *x, int *mdnid, int *pknid, int *secbits,
+                            uint32_t *flags);
+
+int X509_SIG_INFO_get(const X509_SIG_INFO *siginf, int *mdnid, int *pknid,
+                     int *secbits, uint32_t *flags);
+void X509_SIG_INFO_set(X509_SIG_INFO *siginf, int mdnid, int pknid,
+                       int secbits, uint32_t flags);
+ +

DESCRIPTION

+ +

X509_get0_signature() sets *psig to the signature of x and *palg to the signature algorithm of x. The values returned are internal pointers which MUST NOT be freed up after the call.

+ +

X509_get0_tbs_sigalg() returns the signature algorithm in the signed portion of x.

+ +

X509_get_signature_nid() returns the NID corresponding to the signature algorithm of x.

+ +

X509_REQ_get0_signature(), X509_REQ_get_signature_nid() X509_CRL_get0_signature() and X509_CRL_get_signature_nid() perform the same function for certificate requests and CRLs.

+ +

X509_get_signature_info() retrieves information about the signature of certificate x. The NID of the signing digest is written to *mdnid, the public key algorithm to *pknid, the effective security bits to *secbits and flag details to *flags. Any of the parameters can be set to NULL if the information is not required.

+ +

X509_SIG_INFO_get() and X509_SIG_INFO_set() get and set information about a signature in an X509_SIG_INFO structure. They are only used by implementations of algorithms which need to set custom signature information: most applications will never need to call them.

+ +

NOTES

+ +

These functions provide lower level access to signatures in certificates where an application wishes to analyse or generate a signature in a form where X509_sign() et al is not appropriate (for example a non standard or unsupported format).

+ +

The security bits returned by X509_get_signature_info() refers to information available from the certificate signature (such as the signing digest). In some cases the actual security of the signature is less because the signing key is less secure: for example a certificate signed using SHA-512 and a 1024 bit RSA key.

+ +

RETURN VALUES

+ +

X509_get_signature_nid(), X509_REQ_get_signature_nid() and X509_CRL_get_signature_nid() return a NID.

+ +

X509_get0_signature(), X509_REQ_get0_signature() and X509_CRL_get0_signature() do not return values.

+ +

X509_get_signature_info() returns 1 if the signature information returned is valid or 0 if the information is not available (e.g. unknown algorithms or malformed parameters).

+ +

SEE ALSO

+ +

d2i_X509(3), ERR_get_error(3), X509_CRL_get0_by_serial(3), X509_get_ext_d2i(3), X509_get_extension_flags(3), X509_get_pubkey(3), X509_get_subject_name(3), X509_get_version(3), X509_NAME_add_entry_by_txt(3), X509_NAME_ENTRY_get_object(3), X509_NAME_get_index_by_NID(3), X509_NAME_print_ex(3), X509_new(3), X509_sign(3), X509V3_get_d2i(3), X509_verify_cert(3)

+ +

HISTORY

+ +

The X509_get0_signature() and X509_get_signature_nid() functions were added in OpenSSL 1.0.2.

+ +

The X509_REQ_get0_signature(), X509_REQ_get_signature_nid(), X509_CRL_get0_signature() and X509_CRL_get_signature_nid() were added in OpenSSL 1.1.0.

+ +

COPYRIGHT

+ +

Copyright 2015-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_get0_uids.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_get0_uids.html new file mode 100644 index 00000000..9b909932 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_get0_uids.html @@ -0,0 +1,62 @@ + + + + +X509_get0_uids + + + + + + + + + + +

NAME

+ +

X509_get0_uids - get certificate unique identifiers

+ +

SYNOPSIS

+ +
#include <openssl/x509.h>
+
+void X509_get0_uids(const X509 *x, const ASN1_BIT_STRING **piuid,
+                    const ASN1_BIT_STRING **psuid);
+ +

DESCRIPTION

+ +

X509_get0_uids() sets *piuid and *psuid to the issuer and subject unique identifiers of certificate x or NULL if the fields are not present.

+ +

NOTES

+ +

The issuer and subject unique identifier fields are very rarely encountered in practice outside test cases.

+ +

RETURN VALUES

+ +

X509_get0_uids() does not return a value.

+ +

SEE ALSO

+ +

d2i_X509(3), ERR_get_error(3), X509_CRL_get0_by_serial(3), X509_get0_signature(3), X509_get_ext_d2i(3), X509_get_extension_flags(3), X509_get_pubkey(3), X509_get_subject_name(3), X509_get_version(3), X509_NAME_add_entry_by_txt(3), X509_NAME_ENTRY_get_object(3), X509_NAME_get_index_by_NID(3), X509_NAME_print_ex(3), X509_new(3), X509_sign(3), X509V3_get_d2i(3), X509_verify_cert(3)

+ +

COPYRIGHT

+ +

Copyright 2015-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_get_extension_flags.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_get_extension_flags.html new file mode 100644 index 00000000..517df845 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_get_extension_flags.html @@ -0,0 +1,184 @@ + + + + +X509_get_extension_flags + + + + + + + + + + +

NAME

+ +

X509_get0_subject_key_id, X509_get0_authority_key_id, X509_get0_authority_issuer, X509_get0_authority_serial, X509_get_pathlen, X509_get_extension_flags, X509_get_key_usage, X509_get_extended_key_usage, X509_set_proxy_flag, X509_set_proxy_pathlen, X509_get_proxy_pathlen - retrieve certificate extension data

+ +

SYNOPSIS

+ +
#include <openssl/x509v3.h>
+
+long X509_get_pathlen(X509 *x);
+uint32_t X509_get_extension_flags(X509 *x);
+uint32_t X509_get_key_usage(X509 *x);
+uint32_t X509_get_extended_key_usage(X509 *x);
+const ASN1_OCTET_STRING *X509_get0_subject_key_id(X509 *x);
+const ASN1_OCTET_STRING *X509_get0_authority_key_id(X509 *x);
+const GENERAL_NAMES *X509_get0_authority_issuer(X509 *x);
+const ASN1_INTEGER *X509_get0_authority_serial(X509 *x);
+void X509_set_proxy_flag(X509 *x);
+void X509_set_proxy_pathlen(int l);
+long X509_get_proxy_pathlen(X509 *x);
+ +

DESCRIPTION

+ +

These functions retrieve information related to commonly used certificate extensions.

+ +

X509_get_pathlen() retrieves the path length extension from a certificate. This extension is used to limit the length of a cert chain that may be issued from that CA.

+ +

X509_get_extension_flags() retrieves general information about a certificate, it will return one or more of the following flags ored together.

+ +
+ +
EXFLAG_V1
+
+ +

The certificate is an obsolete version 1 certificate.

+ +
+
EXFLAG_BCONS
+
+ +

The certificate contains a basic constraints extension.

+ +
+
EXFLAG_CA
+
+ +

The certificate contains basic constraints and asserts the CA flag.

+ +
+
EXFLAG_PROXY
+
+ +

The certificate is a valid proxy certificate.

+ +
+
EXFLAG_SI
+
+ +

The certificate is self issued (that is subject and issuer names match).

+ +
+
EXFLAG_SS
+
+ +

The subject and issuer names match and extension values imply it is self signed.

+ +
+
EXFLAG_FRESHEST
+
+ +

The freshest CRL extension is present in the certificate.

+ +
+
EXFLAG_CRITICAL
+
+ +

The certificate contains an unhandled critical extension.

+ +
+
EXFLAG_INVALID
+
+ +

Some certificate extension values are invalid or inconsistent. The certificate should be rejected. This bit may also be raised after an out-of-memory error while processing the X509 object, so it may not be related to the processed ASN1 object itself.

+ +
+
EXFLAG_INVALID_POLICY
+
+ +

The NID_certificate_policies certificate extension is invalid or inconsistent. The certificate should be rejected. This bit may also be raised after an out-of-memory error while processing the X509 object, so it may not be related to the processed ASN1 object itself.

+ +
+
EXFLAG_KUSAGE
+
+ +

The certificate contains a key usage extension. The value can be retrieved using X509_get_key_usage().

+ +
+
EXFLAG_XKUSAGE
+
+ +

The certificate contains an extended key usage extension. The value can be retrieved using X509_get_extended_key_usage().

+ +
+
+ +

X509_get_key_usage() returns the value of the key usage extension. If key usage is present will return zero or more of the flags: KU_DIGITAL_SIGNATURE, KU_NON_REPUDIATION, KU_KEY_ENCIPHERMENT, KU_DATA_ENCIPHERMENT, KU_KEY_AGREEMENT, KU_KEY_CERT_SIGN, KU_CRL_SIGN, KU_ENCIPHER_ONLY or KU_DECIPHER_ONLY corresponding to individual key usage bits. If key usage is absent then UINT32_MAX is returned.

+ +

X509_get_extended_key_usage() returns the value of the extended key usage extension. If extended key usage is present it will return zero or more of the flags: XKU_SSL_SERVER, XKU_SSL_CLIENT, XKU_SMIME, XKU_CODE_SIGN XKU_OCSP_SIGN, XKU_TIMESTAMP, XKU_DVCS or XKU_ANYEKU. These correspond to the OIDs id-kp-serverAuth, id-kp-clientAuth, id-kp-emailProtection, id-kp-codeSigning, id-kp-OCSPSigning, id-kp-timeStamping, id-kp-dvcs and anyExtendedKeyUsage respectively. Additionally XKU_SGC is set if either Netscape or Microsoft SGC OIDs are present.

+ +

X509_get0_subject_key_id() returns an internal pointer to the subject key identifier of x as an ASN1_OCTET_STRING or NULL if the extension is not present or cannot be parsed.

+ +

X509_get0_authority_key_id() returns an internal pointer to the authority key identifier of x as an ASN1_OCTET_STRING or NULL if the extension is not present or cannot be parsed.

+ +

X509_get0_authority_issuer() returns an internal pointer to the authority certificate issuer of x as a stack of GENERAL_NAME structures or NULL if the extension is not present or cannot be parsed.

+ +

X509_get0_authority_serial() returns an internal pointer to the authority certificate serial number of x as an ASN1_INTEGER or NULL if the extension is not present or cannot be parsed.

+ +

X509_set_proxy_flag() marks the certificate with the EXFLAG_PROXY flag. This is for the users who need to mark non-RFC3820 proxy certificates as such, as OpenSSL only detects RFC3820 compliant ones.

+ +

X509_set_proxy_pathlen() sets the proxy certificate path length for the given certificate x. This is for the users who need to mark non-RFC3820 proxy certificates as such, as OpenSSL only detects RFC3820 compliant ones.

+ +

X509_get_proxy_pathlen() returns the proxy certificate path length for the given certificate x if it is a proxy certificate.

+ +

NOTES

+ +

The value of the flags correspond to extension values which are cached in the X509 structure. If the flags returned do not provide sufficient information an application should examine extension values directly for example using X509_get_ext_d2i().

+ +

If the key usage or extended key usage extension is absent then typically usage is unrestricted. For this reason X509_get_key_usage() and X509_get_extended_key_usage() return UINT32_MAX when the corresponding extension is absent. Applications can additionally check the return value of X509_get_extension_flags() and take appropriate action is an extension is absent.

+ +

If X509_get0_subject_key_id() returns NULL then the extension may be absent or malformed. Applications can determine the precise reason using X509_get_ext_d2i().

+ +

RETURN VALUES

+ +

X509_get_pathlen() returns the path length value, or -1 if the extension is not present.

+ +

X509_get_extension_flags(), X509_get_key_usage() and X509_get_extended_key_usage() return sets of flags corresponding to the certificate extension values.

+ +

X509_get0_subject_key_id() returns the subject key identifier as a pointer to an ASN1_OCTET_STRING structure or NULL if the extension is absent or an error occurred during parsing.

+ +

X509_get_proxy_pathlen() returns the path length value if the given certificate is a proxy one and has a path length set, and -1 otherwise.

+ +

SEE ALSO

+ +

X509_check_purpose(3)

+ +

HISTORY

+ +

X509_get_pathlen(), X509_set_proxy_flag(), X509_set_proxy_pathlen() and X509_get_proxy_pathlen() were added in OpenSSL 1.1.0.

+ +

COPYRIGHT

+ +

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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_get_pubkey.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_get_pubkey.html new file mode 100644 index 00000000..52f2ffed --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_get_pubkey.html @@ -0,0 +1,77 @@ + + + + +X509_get_pubkey + + + + + + + + + + +

NAME

+ +

X509_get_pubkey, X509_get0_pubkey, X509_set_pubkey, X509_get_X509_PUBKEY, X509_REQ_get_pubkey, X509_REQ_get0_pubkey, X509_REQ_set_pubkey, X509_REQ_get_X509_PUBKEY - get or set certificate or certificate request public key

+ +

SYNOPSIS

+ +
#include <openssl/x509.h>
+
+EVP_PKEY *X509_get_pubkey(X509 *x);
+EVP_PKEY *X509_get0_pubkey(const X509 *x);
+int X509_set_pubkey(X509 *x, EVP_PKEY *pkey);
+X509_PUBKEY *X509_get_X509_PUBKEY(X509 *x);
+
+EVP_PKEY *X509_REQ_get_pubkey(X509_REQ *req);
+EVP_PKEY *X509_REQ_get0_pubkey(X509_REQ *req);
+int X509_REQ_set_pubkey(X509_REQ *x, EVP_PKEY *pkey);
+X509_PUBKEY *X509_REQ_get_X509_PUBKEY(X509_REQ *x);
+ +

DESCRIPTION

+ +

X509_get_pubkey() attempts to decode the public key for certificate x. If successful it returns the public key as an EVP_PKEY pointer with its reference count incremented: this means the returned key must be freed up after use. X509_get0_pubkey() is similar except it does not increment the reference count of the returned EVP_PKEY so it must not be freed up after use.

+ +

X509_get_X509_PUBKEY() returns an internal pointer to the X509_PUBKEY structure which encodes the certificate of x. The returned value must not be freed up after use.

+ +

X509_set_pubkey() attempts to set the public key for certificate x to pkey. The key pkey should be freed up after use.

+ +

X509_REQ_get_pubkey(), X509_REQ_get0_pubkey(), X509_REQ_set_pubkey() and X509_REQ_get_X509_PUBKEY() are similar but operate on certificate request req.

+ +

NOTES

+ +

The first time a public key is decoded the EVP_PKEY structure is cached in the certificate or certificate request itself. Subsequent calls return the cached structure with its reference count incremented to improve performance.

+ +

RETURN VALUES

+ +

X509_get_pubkey(), X509_get0_pubkey(), X509_get_X509_PUBKEY(), X509_REQ_get_pubkey() and X509_REQ_get_X509_PUBKEY() return a public key or NULL if an error occurred.

+ +

X509_set_pubkey() and X509_REQ_set_pubkey() return 1 for success and 0 for failure.

+ +

SEE ALSO

+ +

d2i_X509(3), ERR_get_error(3), X509_CRL_get0_by_serial(3), X509_get0_signature(3), X509_get_ext_d2i(3), X509_get_extension_flags(3), X509_get_subject_name(3), X509_get_version(3), X509_NAME_add_entry_by_txt(3), X509_NAME_ENTRY_get_object(3), X509_NAME_get_index_by_NID(3), X509_NAME_print_ex(3), X509_new(3), X509_sign(3), X509V3_get_d2i(3), X509_verify_cert(3)

+ +

COPYRIGHT

+ +

Copyright 2015-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_get_serialNumber.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_get_serialNumber.html new file mode 100644 index 00000000..3f139675 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_get_serialNumber.html @@ -0,0 +1,69 @@ + + + + +X509_get_serialNumber + + + + + + + + + + +

NAME

+ +

X509_get_serialNumber, X509_get0_serialNumber, X509_set_serialNumber - get or set certificate serial number

+ +

SYNOPSIS

+ +
#include <openssl/x509.h>
+
+ASN1_INTEGER *X509_get_serialNumber(X509 *x);
+const ASN1_INTEGER *X509_get0_serialNumber(const X509 *x);
+int X509_set_serialNumber(X509 *x, ASN1_INTEGER *serial);
+ +

DESCRIPTION

+ +

X509_get_serialNumber() returns the serial number of certificate x as an ASN1_INTEGER structure which can be examined or initialised. The value returned is an internal pointer which MUST NOT be freed up after the call.

+ +

X509_get0_serialNumber() is the same as X509_get_serialNumber() except it accepts a const parameter and returns a const result.

+ +

X509_set_serialNumber() sets the serial number of certificate x to serial. A copy of the serial number is used internally so serial should be freed up after use.

+ +

RETURN VALUES

+ +

X509_get_serialNumber() and X509_get0_serialNumber() return an ASN1_INTEGER structure.

+ +

X509_set_serialNumber() returns 1 for success and 0 for failure.

+ +

SEE ALSO

+ +

d2i_X509(3), ERR_get_error(3), X509_CRL_get0_by_serial(3), X509_get0_signature(3), X509_get_ext_d2i(3), X509_get_extension_flags(3), X509_get_pubkey(3), X509_get_subject_name(3), X509_NAME_add_entry_by_txt(3), X509_NAME_ENTRY_get_object(3), X509_NAME_get_index_by_NID(3), X509_NAME_print_ex(3), X509_new(3), X509_sign(3), X509V3_get_d2i(3), X509_verify_cert(3)

+ +

HISTORY

+ +

The X509_get_serialNumber() and X509_set_serialNumber() functions are available in all versions of OpenSSL. The X509_get0_serialNumber() function was added in OpenSSL 1.1.0.

+ +

COPYRIGHT

+ +

Copyright 2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_get_subject_name.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_get_subject_name.html new file mode 100644 index 00000000..a619eae4 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_get_subject_name.html @@ -0,0 +1,81 @@ + + + + +X509_get_subject_name + + + + + + + + + + +

NAME

+ +

X509_get_subject_name, X509_set_subject_name, X509_get_issuer_name, X509_set_issuer_name, X509_REQ_get_subject_name, X509_REQ_set_subject_name, X509_CRL_get_issuer, X509_CRL_set_issuer_name - get and set issuer or subject names

+ +

SYNOPSIS

+ +
#include <openssl/x509.h>
+
+X509_NAME *X509_get_subject_name(const X509 *x);
+int X509_set_subject_name(X509 *x, X509_NAME *name);
+
+X509_NAME *X509_get_issuer_name(const X509 *x);
+int X509_set_issuer_name(X509 *x, X509_NAME *name);
+
+X509_NAME *X509_REQ_get_subject_name(const X509_REQ *req);
+int X509_REQ_set_subject_name(X509_REQ *req, X509_NAME *name);
+
+X509_NAME *X509_CRL_get_issuer(const X509_CRL *crl);
+int X509_CRL_set_issuer_name(X509_CRL *x, X509_NAME *name);
+ +

DESCRIPTION

+ +

X509_get_subject_name() returns the subject name of certificate x. The returned value is an internal pointer which MUST NOT be freed.

+ +

X509_set_subject_name() sets the issuer name of certificate x to name. The name parameter is copied internally and should be freed up when it is no longer needed.

+ +

X509_get_issuer_name() and X509_set_issuer_name() are identical to X509_get_subject_name() and X509_set_subject_name() except the get and set the issuer name of x.

+ +

Similarly X509_REQ_get_subject_name(), X509_REQ_set_subject_name(), X509_CRL_get_issuer() and X509_CRL_set_issuer_name() get or set the subject or issuer names of certificate requests of CRLs respectively.

+ +

RETURN VALUES

+ +

X509_get_subject_name(), X509_get_issuer_name(), X509_REQ_get_subject_name() and X509_CRL_get_issuer() return an X509_NAME pointer.

+ +

X509_set_subject_name(), X509_set_issuer_name(), X509_REQ_set_subject_name() and X509_CRL_set_issuer_name() return 1 for success and 0 for failure.

+ +

SEE ALSO

+ +

d2i_X509(3), ERR_get_error(3), d2i_X509(3) X509_CRL_get0_by_serial(3), X509_get0_signature(3), X509_get_ext_d2i(3), X509_get_extension_flags(3), X509_get_pubkey(3), X509_NAME_add_entry_by_txt(3), X509_NAME_ENTRY_get_object(3), X509_NAME_get_index_by_NID(3), X509_NAME_print_ex(3), X509_new(3), X509_sign(3), X509V3_get_d2i(3), X509_verify_cert(3)

+ +

HISTORY

+ +

X509_REQ_get_subject_name() is a function in OpenSSL 1.1.0 and a macro in earlier versions.

+ +

X509_CRL_get_issuer() is a function in OpenSSL 1.1.0. It was previously added in OpenSSL 1.0.0 as a macro.

+ +

COPYRIGHT

+ +

Copyright 2015-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_get_version.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_get_version.html new file mode 100644 index 00000000..1114bc0d --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_get_version.html @@ -0,0 +1,79 @@ + + + + +X509_get_version + + + + + + + + + + +

NAME

+ +

X509_get_version, X509_set_version, X509_REQ_get_version, X509_REQ_set_version, X509_CRL_get_version, X509_CRL_set_version - get or set certificate, certificate request or CRL version

+ +

SYNOPSIS

+ +
#include <openssl/x509.h>
+
+long X509_get_version(const X509 *x);
+int X509_set_version(X509 *x, long version);
+
+long X509_REQ_get_version(const X509_REQ *req);
+int X509_REQ_set_version(X509_REQ *x, long version);
+
+long X509_CRL_get_version(const X509_CRL *crl);
+int X509_CRL_set_version(X509_CRL *x, long version);
+ +

DESCRIPTION

+ +

X509_get_version() returns the numerical value of the version field of certificate x. Note: this is defined by standards (X.509 et al) to be one less than the certificate version. So a version 3 certificate will return 2 and a version 1 certificate will return 0.

+ +

X509_set_version() sets the numerical value of the version field of certificate x to version.

+ +

Similarly X509_REQ_get_version(), X509_REQ_set_version(), X509_CRL_get_version() and X509_CRL_set_version() get and set the version number of certificate requests and CRLs.

+ +

NOTES

+ +

The version field of certificates, certificate requests and CRLs has a DEFAULT value of v1(0) meaning the field should be omitted for version 1. This is handled transparently by these functions.

+ +

RETURN VALUES

+ +

X509_get_version(), X509_REQ_get_version() and X509_CRL_get_version() return the numerical value of the version field.

+ +

X509_set_version(), X509_REQ_set_version() and X509_CRL_set_version() return 1 for success and 0 for failure.

+ +

SEE ALSO

+ +

d2i_X509(3), ERR_get_error(3), X509_CRL_get0_by_serial(3), X509_get0_signature(3), X509_get_ext_d2i(3), X509_get_extension_flags(3), X509_get_pubkey(3), X509_get_subject_name(3), X509_NAME_add_entry_by_txt(3), X509_NAME_ENTRY_get_object(3), X509_NAME_get_index_by_NID(3), X509_NAME_print_ex(3), X509_new(3), X509_sign(3), X509V3_get_d2i(3), X509_verify_cert(3)

+ +

HISTORY

+ +

X509_get_version(), X509_REQ_get_version() and X509_CRL_get_version() are functions in OpenSSL 1.1.0, in previous versions they were macros.

+ +

COPYRIGHT

+ +

Copyright 2015-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_new.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_new.html new file mode 100644 index 00000000..11e343ec --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_new.html @@ -0,0 +1,78 @@ + + + + +X509_new + + + + + + + + + + +

NAME

+ +

X509_chain_up_ref, X509_new, X509_free, X509_up_ref - X509 certificate ASN1 allocation functions

+ +

SYNOPSIS

+ +
#include <openssl/x509.h>
+
+X509 *X509_new(void);
+void X509_free(X509 *a);
+int X509_up_ref(X509 *a);
+STACK_OF(X509) *X509_chain_up_ref(STACK_OF(X509) *x);
+ +

DESCRIPTION

+ +

The X509 ASN1 allocation routines, allocate and free an X509 structure, which represents an X509 certificate.

+ +

X509_new() allocates and initializes a X509 structure with reference count 1.

+ +

X509_free() decrements the reference count of X509 structure a and frees it up if the reference count is zero. If a is NULL nothing is done.

+ +

X509_up_ref() increments the reference count of a.

+ +

X509_chain_up_ref() increases the reference count of all certificates in chain x and returns a copy of the stack.

+ +

NOTES

+ +

The function X509_up_ref() if useful if a certificate structure is being used by several different operations each of which will free it up after use: this avoids the need to duplicate the entire certificate structure.

+ +

The function X509_chain_up_ref() doesn't just up the reference count of each certificate it also returns a copy of the stack, using sk_X509_dup(), but it serves a similar purpose: the returned chain persists after the original has been freed.

+ +

RETURN VALUES

+ +

If the allocation fails, X509_new() returns NULL and sets an error code that can be obtained by ERR_get_error(3). Otherwise it returns a pointer to the newly allocated structure.

+ +

X509_up_ref() returns 1 for success and 0 for failure.

+ +

X509_chain_up_ref() returns a copy of the stack or NULL if an error occurred.

+ +

SEE ALSO

+ +

d2i_X509(3), ERR_get_error(3), X509_CRL_get0_by_serial(3), X509_get0_signature(3), X509_get_ext_d2i(3), X509_get_extension_flags(3), X509_get_pubkey(3), X509_get_subject_name(3), X509_get_version(3), X509_NAME_add_entry_by_txt(3), X509_NAME_ENTRY_get_object(3), X509_NAME_get_index_by_NID(3), X509_NAME_print_ex(3), X509_sign(3), X509V3_get_d2i(3), X509_verify_cert(3)

+ +

COPYRIGHT

+ +

Copyright 2002-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_sign.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_sign.html new file mode 100644 index 00000000..cd5353b6 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_sign.html @@ -0,0 +1,86 @@ + + + + +X509_sign + + + + + + + + + + +

NAME

+ +

X509_sign, X509_sign_ctx, X509_verify, X509_REQ_sign, X509_REQ_sign_ctx, X509_REQ_verify, X509_CRL_sign, X509_CRL_sign_ctx, X509_CRL_verify - sign or verify certificate, certificate request or CRL signature

+ +

SYNOPSIS

+ +
#include <openssl/x509.h>
+
+int X509_sign(X509 *x, EVP_PKEY *pkey, const EVP_MD *md);
+int X509_sign_ctx(X509 *x, EVP_MD_CTX *ctx);
+int X509_verify(X509 *a, EVP_PKEY *r);
+
+int X509_REQ_sign(X509_REQ *x, EVP_PKEY *pkey, const EVP_MD *md);
+int X509_REQ_sign_ctx(X509_REQ *x, EVP_MD_CTX *ctx);
+int X509_REQ_verify(X509_REQ *a, EVP_PKEY *r);
+
+int X509_CRL_sign(X509_CRL *x, EVP_PKEY *pkey, const EVP_MD *md);
+int X509_CRL_sign_ctx(X509_CRL *x, EVP_MD_CTX *ctx);
+int X509_CRL_verify(X509_CRL *a, EVP_PKEY *r);
+ +

DESCRIPTION

+ +

X509_sign() signs certificate x using private key pkey and message digest md and sets the signature in x. X509_sign_ctx() also signs certificate x but uses the parameters contained in digest context ctx.

+ +

X509_verify() verifies the signature of certificate x using public key pkey. Only the signature is checked: no other checks (such as certificate chain validity) are performed.

+ +

X509_REQ_sign(), X509_REQ_sign_ctx(), X509_REQ_verify(), X509_CRL_sign(), X509_CRL_sign_ctx() and X509_CRL_verify() sign and verify certificate requests and CRLs respectively.

+ +

NOTES

+ +

X509_sign_ctx() is used where the default parameters for the corresponding public key and digest are not suitable. It can be used to sign keys using RSA-PSS for example.

+ +

For efficiency reasons and to work around ASN.1 encoding issues the encoding of the signed portion of a certificate, certificate request and CRL is cached internally. If the signed portion of the structure is modified the encoding is not always updated meaning a stale version is sometimes used. This is not normally a problem because modifying the signed portion will invalidate the signature and signing will always update the encoding.

+ +

RETURN VALUES

+ +

X509_sign(), X509_sign_ctx(), X509_REQ_sign(), X509_REQ_sign_ctx(), X509_CRL_sign() and X509_CRL_sign_ctx() return the size of the signature in bytes for success and zero for failure.

+ +

X509_verify(), X509_REQ_verify() and X509_CRL_verify() return 1 if the signature is valid and 0 if the signature check fails. If the signature could not be checked at all because it was invalid or some other error occurred then -1 is returned.

+ +

SEE ALSO

+ +

d2i_X509(3), ERR_get_error(3), X509_CRL_get0_by_serial(3), X509_get0_signature(3), X509_get_ext_d2i(3), X509_get_extension_flags(3), X509_get_pubkey(3), X509_get_subject_name(3), X509_get_version(3), X509_NAME_add_entry_by_txt(3), X509_NAME_ENTRY_get_object(3), X509_NAME_get_index_by_NID(3), X509_NAME_print_ex(3), X509_new(3), X509V3_get_d2i(3), X509_verify_cert(3)

+ +

HISTORY

+ +

The X509_sign(), X509_REQ_sign() and X509_CRL_sign() functions are available in all versions of OpenSSL.

+ +

The X509_sign_ctx(), X509_REQ_sign_ctx() and X509_CRL_sign_ctx() functions were added OpenSSL 1.0.1.

+ +

COPYRIGHT

+ +

Copyright 2015-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_verify_cert.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_verify_cert.html new file mode 100644 index 00000000..8c993049 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509_verify_cert.html @@ -0,0 +1,70 @@ + + + + +X509_verify_cert + + + + + + + + + + +

NAME

+ +

X509_verify_cert - discover and verify X509 certificate chain

+ +

SYNOPSIS

+ +
#include <openssl/x509.h>
+
+int X509_verify_cert(X509_STORE_CTX *ctx);
+ +

DESCRIPTION

+ +

The X509_verify_cert() function attempts to discover and validate a certificate chain based on parameters in ctx. A complete description of the process is contained in the verify(1) manual page.

+ +

RETURN VALUES

+ +

If a complete chain can be built and validated this function returns 1, otherwise it return zero, in exceptional circumstances it can also return a negative code.

+ +

If the function fails additional error information can be obtained by examining ctx using, for example X509_STORE_CTX_get_error().

+ +

NOTES

+ +

Applications rarely call this function directly but it is used by OpenSSL internally for certificate validation, in both the S/MIME and SSL/TLS code.

+ +

A negative return value from X509_verify_cert() can occur if it is invoked incorrectly, such as with no certificate set in ctx, or when it is called twice in succession without reinitialising ctx for the second call. A negative return value can also happen due to internal resource problems or if a retry operation is requested during internal lookups (which never happens with standard lookup methods). Applications must check for <= 0 return value on error.

+ +

BUGS

+ +

This function uses the header x509.h as opposed to most chain verification functions which use x509_vfy.h.

+ +

SEE ALSO

+ +

X509_STORE_CTX_get_error(3)

+ +

COPYRIGHT

+ +

Copyright 2009-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509v3_get_ext_by_NID.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509v3_get_ext_by_NID.html new file mode 100644 index 00000000..67599aba --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/X509v3_get_ext_by_NID.html @@ -0,0 +1,123 @@ + + + + +X509v3_get_ext_by_NID + + + + + + + + + + +

NAME

+ +

X509v3_get_ext_count, X509v3_get_ext, X509v3_get_ext_by_NID, X509v3_get_ext_by_OBJ, X509v3_get_ext_by_critical, X509v3_delete_ext, X509v3_add_ext, X509_get_ext_count, X509_get_ext, X509_get_ext_by_NID, X509_get_ext_by_OBJ, X509_get_ext_by_critical, X509_delete_ext, X509_add_ext, X509_CRL_get_ext_count, X509_CRL_get_ext, X509_CRL_get_ext_by_NID, X509_CRL_get_ext_by_OBJ, X509_CRL_get_ext_by_critical, X509_CRL_delete_ext, X509_CRL_add_ext, X509_REVOKED_get_ext_count, X509_REVOKED_get_ext, X509_REVOKED_get_ext_by_NID, X509_REVOKED_get_ext_by_OBJ, X509_REVOKED_get_ext_by_critical, X509_REVOKED_delete_ext, X509_REVOKED_add_ext - extension stack utility functions

+ +

SYNOPSIS

+ +
#include <openssl/x509.h>
+
+int X509v3_get_ext_count(const STACK_OF(X509_EXTENSION) *x);
+X509_EXTENSION *X509v3_get_ext(const STACK_OF(X509_EXTENSION) *x, int loc);
+
+int X509v3_get_ext_by_NID(const STACK_OF(X509_EXTENSION) *x,
+                          int nid, int lastpos);
+int X509v3_get_ext_by_OBJ(const STACK_OF(X509_EXTENSION) *x,
+                          const ASN1_OBJECT *obj, int lastpos);
+int X509v3_get_ext_by_critical(const STACK_OF(X509_EXTENSION) *x,
+                               int crit, int lastpos);
+X509_EXTENSION *X509v3_delete_ext(STACK_OF(X509_EXTENSION) *x, int loc);
+STACK_OF(X509_EXTENSION) *X509v3_add_ext(STACK_OF(X509_EXTENSION) **x,
+                                         X509_EXTENSION *ex, int loc);
+
+int X509_get_ext_count(const X509 *x);
+X509_EXTENSION *X509_get_ext(const X509 *x, int loc);
+int X509_get_ext_by_NID(const X509 *x, int nid, int lastpos);
+int X509_get_ext_by_OBJ(const X509 *x, const ASN1_OBJECT *obj, int lastpos);
+int X509_get_ext_by_critical(const X509 *x, int crit, int lastpos);
+X509_EXTENSION *X509_delete_ext(X509 *x, int loc);
+int X509_add_ext(X509 *x, X509_EXTENSION *ex, int loc);
+
+int X509_CRL_get_ext_count(const X509_CRL *x);
+X509_EXTENSION *X509_CRL_get_ext(const X509_CRL *x, int loc);
+int X509_CRL_get_ext_by_NID(const X509_CRL *x, int nid, int lastpos);
+int X509_CRL_get_ext_by_OBJ(const X509_CRL *x, const ASN1_OBJECT *obj, int lastpos);
+int X509_CRL_get_ext_by_critical(const X509_CRL *x, int crit, int lastpos);
+X509_EXTENSION *X509_CRL_delete_ext(X509_CRL *x, int loc);
+int X509_CRL_add_ext(X509_CRL *x, X509_EXTENSION *ex, int loc);
+
+int X509_REVOKED_get_ext_count(const X509_REVOKED *x);
+X509_EXTENSION *X509_REVOKED_get_ext(const X509_REVOKED *x, int loc);
+int X509_REVOKED_get_ext_by_NID(const X509_REVOKED *x, int nid, int lastpos);
+int X509_REVOKED_get_ext_by_OBJ(const X509_REVOKED *x, const ASN1_OBJECT *obj,
+                                int lastpos);
+int X509_REVOKED_get_ext_by_critical(const X509_REVOKED *x, int crit, int lastpos);
+X509_EXTENSION *X509_REVOKED_delete_ext(X509_REVOKED *x, int loc);
+int X509_REVOKED_add_ext(X509_REVOKED *x, X509_EXTENSION *ex, int loc);
+ +

DESCRIPTION

+ +

X509v3_get_ext_count() retrieves the number of extensions in x.

+ +

X509v3_get_ext() retrieves extension loc from x. The index loc can take any value from 0 to X509_get_ext_count(x) - 1. The returned extension is an internal pointer which must not be freed up by the application.

+ +

X509v3_get_ext_by_NID() and X509v3_get_ext_by_OBJ() look for an extension with nid or obj from extension stack x. The search starts from the extension after lastpos or from the beginning if <lastpos> is -1. If the extension is found its index is returned otherwise -1 is returned.

+ +

X509v3_get_ext_by_critical() is similar to X509v3_get_ext_by_NID() except it looks for an extension of criticality crit. A zero value for crit looks for a non-critical extension a non-zero value looks for a critical extension.

+ +

X509v3_delete_ext() deletes the extension with index loc from x. The deleted extension is returned and must be freed by the caller. If loc is in invalid index value NULL is returned.

+ +

X509v3_add_ext() adds extension ex to stack *x at position loc. If loc is -1 the new extension is added to the end. If *x is NULL a new stack will be allocated. The passed extension ex is duplicated internally so it must be freed after use.

+ +

X509_get_ext_count(), X509_get_ext(), X509_get_ext_by_NID(), X509_get_ext_by_OBJ(), X509_get_ext_by_critical(), X509_delete_ext() and X509_add_ext() operate on the extensions of certificate x they are otherwise identical to the X509v3 functions.

+ +

X509_CRL_get_ext_count(), X509_CRL_get_ext(), X509_CRL_get_ext_by_NID(), X509_CRL_get_ext_by_OBJ(), X509_CRL_get_ext_by_critical(), X509_CRL_delete_ext() and X509_CRL_add_ext() operate on the extensions of CRL x they are otherwise identical to the X509v3 functions.

+ +

X509_REVOKED_get_ext_count(), X509_REVOKED_get_ext(), X509_REVOKED_get_ext_by_NID(), X509_REVOKED_get_ext_by_OBJ(), X509_REVOKED_get_ext_by_critical(), X509_REVOKED_delete_ext() and X509_REVOKED_add_ext() operate on the extensions of CRL entry x they are otherwise identical to the X509v3 functions.

+ +

NOTES

+ +

These functions are used to examine stacks of extensions directly. Many applications will want to parse or encode and add an extension: they should use the extension encode and decode functions instead such as X509_add1_ext_i2d() and X509_get_ext_d2i().

+ +

Extension indices start from zero, so a zero index return value is not an error. These search functions start from the extension after the lastpos parameter so it should initially be set to -1, if it is set to zero the initial extension will not be checked.

+ +

RETURN VALUES

+ +

X509v3_get_ext_count() returns the extension count.

+ +

X509v3_get_ext(), X509v3_delete_ext() and X509_delete_ext() return an X509_EXTENSION pointer or NULL if an error occurs.

+ +

X509v3_get_ext_by_NID() X509v3_get_ext_by_OBJ() and X509v3_get_ext_by_critical() return the an extension index or -1 if an error occurs.

+ +

X509v3_add_ext() returns a stack of extensions or NULL on error.

+ +

X509_add_ext() returns 1 on success and 0 on error.

+ +

SEE ALSO

+ +

X509V3_get_d2i(3)

+ +

COPYRIGHT

+ +

Copyright 2015-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/d2i_DHparams.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/d2i_DHparams.html new file mode 100644 index 00000000..f221f44a --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/d2i_DHparams.html @@ -0,0 +1,61 @@ + + + + +d2i_DHparams + + + + + + + + + + +

NAME

+ +

d2i_DHparams, i2d_DHparams - PKCS#3 DH parameter functions

+ +

SYNOPSIS

+ +
#include <openssl/dh.h>
+
+DH *d2i_DHparams(DH **a, unsigned char **pp, long length);
+int i2d_DHparams(DH *a, unsigned char **pp);
+ +

DESCRIPTION

+ +

These functions decode and encode PKCS#3 DH parameters using the DHparameter structure described in PKCS#3.

+ +

Otherwise these behave in a similar way to d2i_X509() and i2d_X509() described in the d2i_X509(3) manual page.

+ +

RETURN VALUES

+ +

d2i_DHparams() returns a valid DH structure or NULL if an error occurred.

+ +

i2d_DHparams() returns the length of encoded data on success or a value which is less than or equal to 0 on error.

+ +

SEE ALSO

+ +

d2i_X509(3)

+ +

COPYRIGHT

+ +

Copyright 2000-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/d2i_PKCS8PrivateKey_bio.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/d2i_PKCS8PrivateKey_bio.html new file mode 100644 index 00000000..4de6d1b1 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/d2i_PKCS8PrivateKey_bio.html @@ -0,0 +1,86 @@ + + + + +d2i_PKCS8PrivateKey_bio + + + + + + + + + + +

NAME

+ +

d2i_PKCS8PrivateKey_bio, d2i_PKCS8PrivateKey_fp, i2d_PKCS8PrivateKey_bio, i2d_PKCS8PrivateKey_fp, i2d_PKCS8PrivateKey_nid_bio, i2d_PKCS8PrivateKey_nid_fp - PKCS#8 format private key functions

+ +

SYNOPSIS

+ +
#include <openssl/evp.h>
+
+EVP_PKEY *d2i_PKCS8PrivateKey_bio(BIO *bp, EVP_PKEY **x, pem_password_cb *cb, void *u);
+EVP_PKEY *d2i_PKCS8PrivateKey_fp(FILE *fp, EVP_PKEY **x, pem_password_cb *cb, void *u);
+
+int i2d_PKCS8PrivateKey_bio(BIO *bp, EVP_PKEY *x, const EVP_CIPHER *enc,
+                            char *kstr, int klen,
+                            pem_password_cb *cb, void *u);
+
+int i2d_PKCS8PrivateKey_fp(FILE *fp, EVP_PKEY *x, const EVP_CIPHER *enc,
+                           char *kstr, int klen,
+                           pem_password_cb *cb, void *u);
+
+int i2d_PKCS8PrivateKey_nid_bio(BIO *bp, EVP_PKEY *x, int nid,
+                                char *kstr, int klen,
+                                pem_password_cb *cb, void *u);
+
+int i2d_PKCS8PrivateKey_nid_fp(FILE *fp, EVP_PKEY *x, int nid,
+                               char *kstr, int klen,
+                               pem_password_cb *cb, void *u);
+ +

DESCRIPTION

+ +

The PKCS#8 functions encode and decode private keys in PKCS#8 format using both PKCS#5 v1.5 and PKCS#5 v2.0 password based encryption algorithms.

+ +

Other than the use of DER as opposed to PEM these functions are identical to the corresponding PEM function as described in PEM_read_PrivateKey(3).

+ +

NOTES

+ +

These functions are currently the only way to store encrypted private keys using DER format.

+ +

Currently all the functions use BIOs or FILE pointers, there are no functions which work directly on memory: this can be readily worked around by converting the buffers to memory BIOs, see BIO_s_mem(3) for details.

+ +

These functions make no assumption regarding the pass phrase received from the password callback. It will simply be treated as a byte sequence.

+ +

RETURN VALUES

+ +

d2i_PKCS8PrivateKey_bio() and d2i_PKCS8PrivateKey_fp() return a valid EVP_PKEY structure or NULL if an error occurred.

+ +

i2d_PKCS8PrivateKey_bio(), i2d_PKCS8PrivateKey_fp(), i2d_PKCS8PrivateKey_nid_bio() and i2d_PKCS8PrivateKey_nid_fp() return 1 on success or 0 on error.

+ +

SEE ALSO

+ +

PEM_read_PrivateKey(3), passphrase-encoding(7)

+ +

COPYRIGHT

+ +

Copyright 2002-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/d2i_PrivateKey.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/d2i_PrivateKey.html new file mode 100644 index 00000000..5ff925bb --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/d2i_PrivateKey.html @@ -0,0 +1,83 @@ + + + + +d2i_PrivateKey + + + + + + + + + + +

NAME

+ +

d2i_PrivateKey, d2i_PublicKey, d2i_AutoPrivateKey, i2d_PrivateKey, i2d_PublicKey, d2i_PrivateKey_bio, d2i_PrivateKey_fp - decode and encode functions for reading and saving EVP_PKEY structures

+ +

SYNOPSIS

+ +
#include <openssl/evp.h>
+
+EVP_PKEY *d2i_PrivateKey(int type, EVP_PKEY **a, const unsigned char **pp,
+                         long length);
+EVP_PKEY *d2i_PublicKey(int type, EVP_PKEY **a, const unsigned char **pp,
+                        long length);
+EVP_PKEY *d2i_AutoPrivateKey(EVP_PKEY **a, const unsigned char **pp,
+                             long length);
+int i2d_PrivateKey(EVP_PKEY *a, unsigned char **pp);
+int i2d_PublicKey(EVP_PKEY *a, unsigned char **pp);
+
+EVP_PKEY *d2i_PrivateKey_bio(BIO *bp, EVP_PKEY **a);
+EVP_PKEY *d2i_PrivateKey_fp(FILE *fp, EVP_PKEY **a)
+ +

DESCRIPTION

+ +

d2i_PrivateKey() decodes a private key using algorithm type. It attempts to use any key specific format or PKCS#8 unencrypted PrivateKeyInfo format. The type parameter should be a public key algorithm constant such as EVP_PKEY_RSA. An error occurs if the decoded key does not match type. d2i_PublicKey() does the same for public keys.

+ +

d2i_AutoPrivateKey() is similar to d2i_PrivateKey() except it attempts to automatically detect the private key format.

+ +

i2d_PrivateKey() encodes key. It uses a key specific format or, if none is defined for that key type, PKCS#8 unencrypted PrivateKeyInfo format. i2d_PublicKey() does the same for public keys.

+ +

These functions are similar to the d2i_X509() functions; see d2i_X509(3).

+ +

NOTES

+ +

All these functions use DER format and unencrypted keys. Applications wishing to encrypt or decrypt private keys should use other functions such as d2i_PKCS8PrivateKey() instead.

+ +

If the *a is not NULL when calling d2i_PrivateKey() or d2i_AutoPrivateKey() (i.e. an existing structure is being reused) and the key format is PKCS#8 then *a will be freed and replaced on a successful call.

+ +

To decode a key with type EVP_PKEY_EC, d2i_PublicKey() requires *a to be a non-NULL EVP_PKEY structure assigned an EC_KEY structure referencing the proper EC_GROUP.

+ +

RETURN VALUES

+ +

The d2i_PrivateKey(), d2i_AutoPrivateKey(), d2i_PrivateKey_bio(), d2i_PrivateKey_fp(), and d2i_PublicKey() functions return a valid EVP_KEY structure or NULL if an error occurs. The error code can be obtained by calling ERR_get_error(3).

+ +

i2d_PrivateKey() and i2d_PublicKey() return the number of bytes successfully encoded or a negative value if an error occurs. The error code can be obtained by calling ERR_get_error(3).

+ +

SEE ALSO

+ +

crypto(7), d2i_PKCS8PrivateKey_bio(3)

+ +

COPYRIGHT

+ +

Copyright 2017-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/d2i_SSL_SESSION.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/d2i_SSL_SESSION.html new file mode 100644 index 00000000..8b2c7c1f --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/d2i_SSL_SESSION.html @@ -0,0 +1,62 @@ + + + + +d2i_SSL_SESSION + + + + + + + + + + +

NAME

+ +

d2i_SSL_SESSION, i2d_SSL_SESSION - convert SSL_SESSION object from/to ASN1 representation

+ +

SYNOPSIS

+ +
#include <openssl/ssl.h>
+
+SSL_SESSION *d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp,
+                             long length);
+int i2d_SSL_SESSION(SSL_SESSION *in, unsigned char **pp);
+ +

DESCRIPTION

+ +

These functions decode and encode an SSL_SESSION object. For encoding details see d2i_X509(3).

+ +

SSL_SESSION objects keep internal link information about the session cache list, when being inserted into one SSL_CTX object's session cache. One SSL_SESSION object, regardless of its reference count, must therefore only be used with one SSL_CTX object (and the SSL objects created from this SSL_CTX object).

+ +

RETURN VALUES

+ +

d2i_SSL_SESSION() returns a pointer to the newly allocated SSL_SESSION object. In case of failure the NULL-pointer is returned and the error message can be retrieved from the error stack.

+ +

i2d_SSL_SESSION() returns the size of the ASN1 representation in bytes. When the session is not valid, 0 is returned and no operation is performed.

+ +

SEE ALSO

+ +

ssl(7), SSL_SESSION_free(3), SSL_CTX_sess_set_get_cb(3), d2i_X509(3)

+ +

COPYRIGHT

+ +

Copyright 2001-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/d2i_X509.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/d2i_X509.html new file mode 100644 index 00000000..33454690 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/d2i_X509.html @@ -0,0 +1,239 @@ + + + + +d2i_X509 + + + + + + + + + + +

NAME

+ +

d2i_ACCESS_DESCRIPTION, d2i_ADMISSIONS, d2i_ADMISSION_SYNTAX, d2i_ASIdOrRange, d2i_ASIdentifierChoice, d2i_ASIdentifiers, d2i_ASN1_BIT_STRING, d2i_ASN1_BMPSTRING, d2i_ASN1_ENUMERATED, d2i_ASN1_GENERALIZEDTIME, d2i_ASN1_GENERALSTRING, d2i_ASN1_IA5STRING, d2i_ASN1_INTEGER, d2i_ASN1_NULL, d2i_ASN1_OBJECT, d2i_ASN1_OCTET_STRING, d2i_ASN1_PRINTABLE, d2i_ASN1_PRINTABLESTRING, d2i_ASN1_SEQUENCE_ANY, d2i_ASN1_SET_ANY, d2i_ASN1_T61STRING, d2i_ASN1_TIME, d2i_ASN1_TYPE, d2i_ASN1_UINTEGER, d2i_ASN1_UNIVERSALSTRING, d2i_ASN1_UTCTIME, d2i_ASN1_UTF8STRING, d2i_ASN1_VISIBLESTRING, d2i_ASRange, d2i_AUTHORITY_INFO_ACCESS, d2i_AUTHORITY_KEYID, d2i_BASIC_CONSTRAINTS, d2i_CERTIFICATEPOLICIES, d2i_CMS_ContentInfo, d2i_CMS_ReceiptRequest, d2i_CMS_bio, d2i_CRL_DIST_POINTS, d2i_DHxparams, d2i_DIRECTORYSTRING, d2i_DISPLAYTEXT, d2i_DIST_POINT, d2i_DIST_POINT_NAME, d2i_DSAPrivateKey, d2i_DSAPrivateKey_bio, d2i_DSAPrivateKey_fp, d2i_DSAPublicKey, d2i_DSA_PUBKEY, d2i_DSA_PUBKEY_bio, d2i_DSA_PUBKEY_fp, d2i_DSA_SIG, d2i_DSAparams, d2i_ECDSA_SIG, d2i_ECPKParameters, d2i_ECParameters, d2i_ECPrivateKey, d2i_ECPrivateKey_bio, d2i_ECPrivateKey_fp, d2i_EC_PUBKEY, d2i_EC_PUBKEY_bio, d2i_EC_PUBKEY_fp, d2i_EDIPARTYNAME, d2i_ESS_CERT_ID, d2i_ESS_ISSUER_SERIAL, d2i_ESS_SIGNING_CERT, d2i_EXTENDED_KEY_USAGE, d2i_GENERAL_NAME, d2i_GENERAL_NAMES, d2i_IPAddressChoice, d2i_IPAddressFamily, d2i_IPAddressOrRange, d2i_IPAddressRange, d2i_ISSUING_DIST_POINT, d2i_NAMING_AUTHORITY, d2i_NETSCAPE_CERT_SEQUENCE, d2i_NETSCAPE_SPKAC, d2i_NETSCAPE_SPKI, d2i_NOTICEREF, d2i_OCSP_BASICRESP, d2i_OCSP_CERTID, d2i_OCSP_CERTSTATUS, d2i_OCSP_CRLID, d2i_OCSP_ONEREQ, d2i_OCSP_REQINFO, d2i_OCSP_REQUEST, d2i_OCSP_RESPBYTES, d2i_OCSP_RESPDATA, d2i_OCSP_RESPID, d2i_OCSP_RESPONSE, d2i_OCSP_REVOKEDINFO, d2i_OCSP_SERVICELOC, d2i_OCSP_SIGNATURE, d2i_OCSP_SINGLERESP, d2i_OTHERNAME, d2i_PBE2PARAM, d2i_PBEPARAM, d2i_PBKDF2PARAM, d2i_PKCS12, d2i_PKCS12_BAGS, d2i_PKCS12_MAC_DATA, d2i_PKCS12_SAFEBAG, d2i_PKCS12_bio, d2i_PKCS12_fp, d2i_PKCS7, d2i_PKCS7_DIGEST, d2i_PKCS7_ENCRYPT, d2i_PKCS7_ENC_CONTENT, d2i_PKCS7_ENVELOPE, d2i_PKCS7_ISSUER_AND_SERIAL, d2i_PKCS7_RECIP_INFO, d2i_PKCS7_SIGNED, d2i_PKCS7_SIGNER_INFO, d2i_PKCS7_SIGN_ENVELOPE, d2i_PKCS7_bio, d2i_PKCS7_fp, d2i_PKCS8_PRIV_KEY_INFO, d2i_PKCS8_PRIV_KEY_INFO_bio, d2i_PKCS8_PRIV_KEY_INFO_fp, d2i_PKCS8_bio, d2i_PKCS8_fp, d2i_PKEY_USAGE_PERIOD, d2i_POLICYINFO, d2i_POLICYQUALINFO, d2i_PROFESSION_INFO, d2i_PROXY_CERT_INFO_EXTENSION, d2i_PROXY_POLICY, d2i_RSAPrivateKey, d2i_RSAPrivateKey_bio, d2i_RSAPrivateKey_fp, d2i_RSAPublicKey, d2i_RSAPublicKey_bio, d2i_RSAPublicKey_fp, d2i_RSA_OAEP_PARAMS, d2i_RSA_PSS_PARAMS, d2i_RSA_PUBKEY, d2i_RSA_PUBKEY_bio, d2i_RSA_PUBKEY_fp, d2i_SCRYPT_PARAMS, d2i_SCT_LIST, d2i_SXNET, d2i_SXNETID, d2i_TS_ACCURACY, d2i_TS_MSG_IMPRINT, d2i_TS_MSG_IMPRINT_bio, d2i_TS_MSG_IMPRINT_fp, d2i_TS_REQ, d2i_TS_REQ_bio, d2i_TS_REQ_fp, d2i_TS_RESP, d2i_TS_RESP_bio, d2i_TS_RESP_fp, d2i_TS_STATUS_INFO, d2i_TS_TST_INFO, d2i_TS_TST_INFO_bio, d2i_TS_TST_INFO_fp, d2i_USERNOTICE, d2i_X509, d2i_X509_ALGOR, d2i_X509_ALGORS, d2i_X509_ATTRIBUTE, d2i_X509_CERT_AUX, d2i_X509_CINF, d2i_X509_CRL, d2i_X509_CRL_INFO, d2i_X509_CRL_bio, d2i_X509_CRL_fp, d2i_X509_EXTENSION, d2i_X509_EXTENSIONS, d2i_X509_NAME, d2i_X509_NAME_ENTRY, d2i_X509_PUBKEY, d2i_X509_REQ, d2i_X509_REQ_INFO, d2i_X509_REQ_bio, d2i_X509_REQ_fp, d2i_X509_REVOKED, d2i_X509_SIG, d2i_X509_VAL, i2d_ACCESS_DESCRIPTION, i2d_ADMISSIONS, i2d_ADMISSION_SYNTAX, i2d_ASIdOrRange, i2d_ASIdentifierChoice, i2d_ASIdentifiers, i2d_ASN1_BIT_STRING, i2d_ASN1_BMPSTRING, i2d_ASN1_ENUMERATED, i2d_ASN1_GENERALIZEDTIME, i2d_ASN1_GENERALSTRING, i2d_ASN1_IA5STRING, i2d_ASN1_INTEGER, i2d_ASN1_NULL, i2d_ASN1_OBJECT, i2d_ASN1_OCTET_STRING, i2d_ASN1_PRINTABLE, i2d_ASN1_PRINTABLESTRING, i2d_ASN1_SEQUENCE_ANY, i2d_ASN1_SET_ANY, i2d_ASN1_T61STRING, i2d_ASN1_TIME, i2d_ASN1_TYPE, i2d_ASN1_UNIVERSALSTRING, i2d_ASN1_UTCTIME, i2d_ASN1_UTF8STRING, i2d_ASN1_VISIBLESTRING, i2d_ASN1_bio_stream, i2d_ASRange, i2d_AUTHORITY_INFO_ACCESS, i2d_AUTHORITY_KEYID, i2d_BASIC_CONSTRAINTS, i2d_CERTIFICATEPOLICIES, i2d_CMS_ContentInfo, i2d_CMS_ReceiptRequest, i2d_CMS_bio, i2d_CRL_DIST_POINTS, i2d_DHxparams, i2d_DIRECTORYSTRING, i2d_DISPLAYTEXT, i2d_DIST_POINT, i2d_DIST_POINT_NAME, i2d_DSAPrivateKey, i2d_DSAPrivateKey_bio, i2d_DSAPrivateKey_fp, i2d_DSAPublicKey, i2d_DSA_PUBKEY, i2d_DSA_PUBKEY_bio, i2d_DSA_PUBKEY_fp, i2d_DSA_SIG, i2d_DSAparams, i2d_ECDSA_SIG, i2d_ECPKParameters, i2d_ECParameters, i2d_ECPrivateKey, i2d_ECPrivateKey_bio, i2d_ECPrivateKey_fp, i2d_EC_PUBKEY, i2d_EC_PUBKEY_bio, i2d_EC_PUBKEY_fp, i2d_EDIPARTYNAME, i2d_ESS_CERT_ID, i2d_ESS_ISSUER_SERIAL, i2d_ESS_SIGNING_CERT, i2d_EXTENDED_KEY_USAGE, i2d_GENERAL_NAME, i2d_GENERAL_NAMES, i2d_IPAddressChoice, i2d_IPAddressFamily, i2d_IPAddressOrRange, i2d_IPAddressRange, i2d_ISSUING_DIST_POINT, i2d_NAMING_AUTHORITY, i2d_NETSCAPE_CERT_SEQUENCE, i2d_NETSCAPE_SPKAC, i2d_NETSCAPE_SPKI, i2d_NOTICEREF, i2d_OCSP_BASICRESP, i2d_OCSP_CERTID, i2d_OCSP_CERTSTATUS, i2d_OCSP_CRLID, i2d_OCSP_ONEREQ, i2d_OCSP_REQINFO, i2d_OCSP_REQUEST, i2d_OCSP_RESPBYTES, i2d_OCSP_RESPDATA, i2d_OCSP_RESPID, i2d_OCSP_RESPONSE, i2d_OCSP_REVOKEDINFO, i2d_OCSP_SERVICELOC, i2d_OCSP_SIGNATURE, i2d_OCSP_SINGLERESP, i2d_OTHERNAME, i2d_PBE2PARAM, i2d_PBEPARAM, i2d_PBKDF2PARAM, i2d_PKCS12, i2d_PKCS12_BAGS, i2d_PKCS12_MAC_DATA, i2d_PKCS12_SAFEBAG, i2d_PKCS12_bio, i2d_PKCS12_fp, i2d_PKCS7, i2d_PKCS7_DIGEST, i2d_PKCS7_ENCRYPT, i2d_PKCS7_ENC_CONTENT, i2d_PKCS7_ENVELOPE, i2d_PKCS7_ISSUER_AND_SERIAL, i2d_PKCS7_NDEF, i2d_PKCS7_RECIP_INFO, i2d_PKCS7_SIGNED, i2d_PKCS7_SIGNER_INFO, i2d_PKCS7_SIGN_ENVELOPE, i2d_PKCS7_bio, i2d_PKCS7_fp, i2d_PKCS8PrivateKeyInfo_bio, i2d_PKCS8PrivateKeyInfo_fp, i2d_PKCS8_PRIV_KEY_INFO, i2d_PKCS8_PRIV_KEY_INFO_bio, i2d_PKCS8_PRIV_KEY_INFO_fp, i2d_PKCS8_bio, i2d_PKCS8_fp, i2d_PKEY_USAGE_PERIOD, i2d_POLICYINFO, i2d_POLICYQUALINFO, i2d_PROFESSION_INFO, i2d_PROXY_CERT_INFO_EXTENSION, i2d_PROXY_POLICY, i2d_RSAPrivateKey, i2d_RSAPrivateKey_bio, i2d_RSAPrivateKey_fp, i2d_RSAPublicKey, i2d_RSAPublicKey_bio, i2d_RSAPublicKey_fp, i2d_RSA_OAEP_PARAMS, i2d_RSA_PSS_PARAMS, i2d_RSA_PUBKEY, i2d_RSA_PUBKEY_bio, i2d_RSA_PUBKEY_fp, i2d_SCRYPT_PARAMS, i2d_SCT_LIST, i2d_SXNET, i2d_SXNETID, i2d_TS_ACCURACY, i2d_TS_MSG_IMPRINT, i2d_TS_MSG_IMPRINT_bio, i2d_TS_MSG_IMPRINT_fp, i2d_TS_REQ, i2d_TS_REQ_bio, i2d_TS_REQ_fp, i2d_TS_RESP, i2d_TS_RESP_bio, i2d_TS_RESP_fp, i2d_TS_STATUS_INFO, i2d_TS_TST_INFO, i2d_TS_TST_INFO_bio, i2d_TS_TST_INFO_fp, i2d_USERNOTICE, i2d_X509, i2d_X509_ALGOR, i2d_X509_ALGORS, i2d_X509_ATTRIBUTE, i2d_X509_CERT_AUX, i2d_X509_CINF, i2d_X509_CRL, i2d_X509_CRL_INFO, i2d_X509_CRL_bio, i2d_X509_CRL_fp, i2d_X509_EXTENSION, i2d_X509_EXTENSIONS, i2d_X509_NAME, i2d_X509_NAME_ENTRY, i2d_X509_PUBKEY, i2d_X509_REQ, i2d_X509_REQ_INFO, i2d_X509_REQ_bio, i2d_X509_REQ_fp, i2d_X509_REVOKED, i2d_X509_SIG, i2d_X509_VAL, - convert objects from/to ASN.1/DER representation

+ +

SYNOPSIS

+ +
TYPE *d2i_TYPE(TYPE **a, unsigned char **ppin, long length);
+TYPE *d2i_TYPE_bio(BIO *bp, TYPE **a);
+TYPE *d2i_TYPE_fp(FILE *fp, TYPE **a);
+
+int i2d_TYPE(TYPE *a, unsigned char **ppout);
+int i2d_TYPE_fp(FILE *fp, TYPE *a);
+int i2d_TYPE_bio(BIO *bp, TYPE *a);
+ +

DESCRIPTION

+ +

In the description here, TYPE is used a placeholder for any of the OpenSSL datatypes, such as X509_CRL. The function parameters ppin and ppout are generally either both named pp in the headers, or in and out.

+ +

These functions convert OpenSSL objects to and from their ASN.1/DER encoding. Unlike the C structures which can have pointers to sub-objects within, the DER is a serialized encoding, suitable for sending over the network, writing to a file, and so on.

+ +

d2i_TYPE() attempts to decode len bytes at *ppin. If successful a pointer to the TYPE structure is returned and *ppin is incremented to the byte following the parsed data. If a is not NULL then a pointer to the returned structure is also written to *a. If an error occurred then NULL is returned.

+ +

On a successful return, if *a is not NULL then it is assumed that *a contains a valid TYPE structure and an attempt is made to reuse it. This "reuse" capability is present for historical compatibility but its use is strongly discouraged (see BUGS below, and the discussion in the RETURN VALUES section).

+ +

d2i_TYPE_bio() is similar to d2i_TYPE() except it attempts to parse data from BIO bp.

+ +

d2i_TYPE_fp() is similar to d2i_TYPE() except it attempts to parse data from FILE pointer fp.

+ +

i2d_TYPE() encodes the structure pointed to by a into DER format. If ppout is not NULL, it writes the DER encoded data to the buffer at *ppout, and increments it to point after the data just written. If the return value is negative an error occurred, otherwise it returns the length of the encoded data.

+ +

If *ppout is NULL memory will be allocated for a buffer and the encoded data written to it. In this case *ppout is not incremented and it points to the start of the data just written.

+ +

i2d_TYPE_bio() is similar to i2d_TYPE() except it writes the encoding of the structure a to BIO bp and it returns 1 for success and 0 for failure.

+ +

i2d_TYPE_fp() is similar to i2d_TYPE() except it writes the encoding of the structure a to BIO bp and it returns 1 for success and 0 for failure.

+ +

These routines do not encrypt private keys and therefore offer no security; use PEM_write_PrivateKey(3) or similar for writing to files.

+ +

NOTES

+ +

The letters i and d in i2d_TYPE stand for "internal" (that is, an internal C structure) and "DER" respectively. So i2d_TYPE converts from internal to DER.

+ +

The functions can also understand BER forms.

+ +

The actual TYPE structure passed to i2d_TYPE() must be a valid populated TYPE structure -- it cannot simply be fed with an empty structure such as that returned by TYPE_new().

+ +

The encoded data is in binary form and may contain embedded zeroes. Therefore any FILE pointers or BIOs should be opened in binary mode. Functions such as strlen() will not return the correct length of the encoded structure.

+ +

The ways that *ppin and *ppout are incremented after the operation can trap the unwary. See the WARNINGS section for some common errors. The reason for this-auto increment behaviour is to reflect a typical usage of ASN1 functions: after one structure is encoded or decoded another will be processed after it.

+ +

The following points about the data types might be useful:

+ +
+ +
ASN1_OBJECT
+
+ +

Represents an ASN1 OBJECT IDENTIFIER.

+ +
+
DHparams
+
+ +

Represents a PKCS#3 DH parameters structure.

+ +
+
DHxparams
+
+ +

Represents an ANSI X9.42 DH parameters structure.

+ +
+
DSA_PUBKEY
+
+ +

Represents a DSA public key using a SubjectPublicKeyInfo structure.

+ +
+
DSAPublicKey, DSAPrivateKey
+
+ +

Use a non-standard OpenSSL format and should be avoided; use DSA_PUBKEY, PEM_write_PrivateKey(3), or similar instead.

+ +
+
ECDSA_SIG
+
+ +

Represents an ECDSA signature.

+ +
+
RSAPublicKey
+
+ +

Represents a PKCS#1 RSA public key structure.

+ +
+
X509_ALGOR
+
+ +

Represents an AlgorithmIdentifier structure as used in IETF RFC 6960 and elsewhere.

+ +
+
X509_Name
+
+ +

Represents a Name type as used for subject and issuer names in IETF RFC 6960 and elsewhere.

+ +
+
X509_REQ
+
+ +

Represents a PKCS#10 certificate request.

+ +
+
X509_SIG
+
+ +

Represents the DigestInfo structure defined in PKCS#1 and PKCS#7.

+ +
+
+ +

RETURN VALUES

+ +

d2i_TYPE(), d2i_TYPE_bio() and d2i_TYPE_fp() return a valid TYPE structure or NULL if an error occurs. If the "reuse" capability has been used with a valid structure being passed in via a, then the object is freed in the event of error and *a is set to NULL.

+ +

i2d_TYPE() returns the number of bytes successfully encoded or a negative value if an error occurs.

+ +

i2d_TYPE_bio() and i2d_TYPE_fp() return 1 for success and 0 if an error occurs.

+ +

EXAMPLES

+ +

Allocate and encode the DER encoding of an X509 structure:

+ +
int len;
+unsigned char *buf;
+
+buf = NULL;
+len = i2d_X509(x, &buf);
+if (len < 0)
+    /* error */
+ +

Attempt to decode a buffer:

+ +
X509 *x;
+unsigned char *buf, *p;
+int len;
+
+/* Set up buf and len to point to the input buffer. */
+p = buf;
+x = d2i_X509(NULL, &p, len);
+if (x == NULL)
+    /* error */
+ +

Alternative technique:

+ +
X509 *x;
+unsigned char *buf, *p;
+int len;
+
+/* Set up buf and len to point to the input buffer. */
+p = buf;
+x = NULL;
+
+if (d2i_X509(&x, &p, len) == NULL)
+    /* error */
+ +

WARNINGS

+ +

Using a temporary variable is mandatory. A common mistake is to attempt to use a buffer directly as follows:

+ +
int len;
+unsigned char *buf;
+
+len = i2d_X509(x, NULL);
+buf = OPENSSL_malloc(len);
+...
+i2d_X509(x, &buf);
+...
+OPENSSL_free(buf);
+ +

This code will result in buf apparently containing garbage because it was incremented after the call to point after the data just written. Also buf will no longer contain the pointer allocated by OPENSSL_malloc() and the subsequent call to OPENSSL_free() is likely to crash.

+ +

Another trap to avoid is misuse of the a argument to d2i_TYPE():

+ +
X509 *x;
+
+if (d2i_X509(&x, &p, len) == NULL)
+    /* error */
+ +

This will probably crash somewhere in d2i_X509(). The reason for this is that the variable x is uninitialized and an attempt will be made to interpret its (invalid) value as an X509 structure, typically causing a segmentation violation. If x is set to NULL first then this will not happen.

+ +

BUGS

+ +

In some versions of OpenSSL the "reuse" behaviour of d2i_TYPE() when *a is valid is broken and some parts of the reused structure may persist if they are not present in the new one. Additionally, in versions of OpenSSL prior to 1.1.0, when the "reuse" behaviour is used and an error occurs the behaviour is inconsistent. Some functions behaved as described here, while some did not free *a on error and did not set *a to NULL.

+ +

As a result of the above issues the "reuse" behaviour is strongly discouraged.

+ +

i2d_TYPE() will not return an error in many versions of OpenSSL, if mandatory fields are not initialized due to a programming error then the encoded structure may contain invalid data or omit the fields entirely and will not be parsed by d2i_TYPE(). This may be fixed in future so code should not assume that i2d_TYPE() will always succeed.

+ +

Any function which encodes a structure (i2d_TYPE(), i2d_TYPE() or i2d_TYPE()) may return a stale encoding if the structure has been modified after deserialization or previous serialization. This is because some objects cache the encoding for efficiency reasons.

+ +

COPYRIGHT

+ +

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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/i2d_CMS_bio_stream.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/i2d_CMS_bio_stream.html new file mode 100644 index 00000000..7d909ee1 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/i2d_CMS_bio_stream.html @@ -0,0 +1,73 @@ + + + + +i2d_CMS_bio_stream + + + + + + + + + + +

NAME

+ +

i2d_CMS_bio_stream - output CMS_ContentInfo structure in BER format

+ +

SYNOPSIS

+ +
#include <openssl/cms.h>
+
+int i2d_CMS_bio_stream(BIO *out, CMS_ContentInfo *cms, BIO *data, int flags);
+ +

DESCRIPTION

+ +

i2d_CMS_bio_stream() outputs a CMS_ContentInfo structure in BER format.

+ +

It is otherwise identical to the function SMIME_write_CMS().

+ +

NOTES

+ +

This function is effectively a version of the i2d_CMS_bio() supporting streaming.

+ +

BUGS

+ +

The prefix "i2d" is arguably wrong because the function outputs BER format.

+ +

RETURN VALUES

+ +

i2d_CMS_bio_stream() returns 1 for success or 0 for failure.

+ +

SEE ALSO

+ +

ERR_get_error(3), CMS_sign(3), CMS_verify(3), CMS_encrypt(3) CMS_decrypt(3), SMIME_write_CMS(3), PEM_write_bio_CMS_stream(3)

+ +

HISTORY

+ +

The i2d_CMS_bio_stream() function was added in OpenSSL 1.0.0.

+ +

COPYRIGHT

+ +

Copyright 2008-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/i2d_PKCS7_bio_stream.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/i2d_PKCS7_bio_stream.html new file mode 100644 index 00000000..9fd05884 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/i2d_PKCS7_bio_stream.html @@ -0,0 +1,73 @@ + + + + +i2d_PKCS7_bio_stream + + + + + + + + + + +

NAME

+ +

i2d_PKCS7_bio_stream - output PKCS7 structure in BER format

+ +

SYNOPSIS

+ +
#include <openssl/pkcs7.h>
+
+int i2d_PKCS7_bio_stream(BIO *out, PKCS7 *p7, BIO *data, int flags);
+ +

DESCRIPTION

+ +

i2d_PKCS7_bio_stream() outputs a PKCS7 structure in BER format.

+ +

It is otherwise identical to the function SMIME_write_PKCS7().

+ +

NOTES

+ +

This function is effectively a version of the d2i_PKCS7_bio() supporting streaming.

+ +

BUGS

+ +

The prefix "i2d" is arguably wrong because the function outputs BER format.

+ +

RETURN VALUES

+ +

i2d_PKCS7_bio_stream() returns 1 for success or 0 for failure.

+ +

SEE ALSO

+ +

ERR_get_error(3), PKCS7_sign(3), PKCS7_verify(3), PKCS7_encrypt(3) PKCS7_decrypt(3), SMIME_write_PKCS7(3), PEM_write_bio_PKCS7_stream(3)

+ +

HISTORY

+ +

The i2d_PKCS7_bio_stream() function was added in OpenSSL 1.0.0.

+ +

COPYRIGHT

+ +

Copyright 2008-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/i2d_re_X509_tbs.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/i2d_re_X509_tbs.html new file mode 100644 index 00000000..67e9a3f0 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/i2d_re_X509_tbs.html @@ -0,0 +1,74 @@ + + + + +i2d_re_X509_tbs + + + + + + + + + + +

NAME

+ +

d2i_X509_AUX, i2d_X509_AUX, i2d_re_X509_tbs, i2d_re_X509_CRL_tbs, i2d_re_X509_REQ_tbs - X509 encode and decode functions

+ +

SYNOPSIS

+ +
#include <openssl/x509.h>
+
+X509 *d2i_X509_AUX(X509 **px, const unsigned char **in, long len);
+int i2d_X509_AUX(X509 *x, unsigned char **out);
+int i2d_re_X509_tbs(X509 *x, unsigned char **out);
+int i2d_re_X509_CRL_tbs(X509_CRL *crl, unsigned char **pp);
+int i2d_re_X509_REQ_tbs(X509_REQ *req, unsigned char **pp);
+ +

DESCRIPTION

+ +

The X509 encode and decode routines encode and parse an X509 structure, which represents an X509 certificate.

+ +

d2i_X509_AUX() is similar to d2i_X509(3) but the input is expected to consist of an X509 certificate followed by auxiliary trust information. This is used by the PEM routines to read "TRUSTED CERTIFICATE" objects. This function should not be called on untrusted input.

+ +

i2d_X509_AUX() is similar to i2d_X509(3), but the encoded output contains both the certificate and any auxiliary trust information. This is used by the PEM routines to write "TRUSTED CERTIFICATE" objects. Note that this is a non-standard OpenSSL-specific data format.

+ +

i2d_re_X509_tbs() is similar to i2d_X509(3) except it encodes only the TBSCertificate portion of the certificate. i2d_re_X509_CRL_tbs() and i2d_re_X509_REQ_tbs() are analogous for CRL and certificate request, respectively. The "re" in i2d_re_X509_tbs stands for "re-encode", and ensures that a fresh encoding is generated in case the object has been modified after creation (see the BUGS section).

+ +

The encoding of the TBSCertificate portion of a certificate is cached in the X509 structure internally to improve encoding performance and to ensure certificate signatures are verified correctly in some certificates with broken (non-DER) encodings.

+ +

If, after modification, the X509 object is re-signed with X509_sign(), the encoding is automatically renewed. Otherwise, the encoding of the TBSCertificate portion of the X509 can be manually renewed by calling i2d_re_X509_tbs().

+ +

RETURN VALUES

+ +

d2i_X509_AUX() returns a valid X509 structure or NULL if an error occurred.

+ +

i2d_X509_AUX() returns the length of encoded data or -1 on error.

+ +

i2d_re_X509_tbs(), i2d_re_X509_CRL_tbs() and i2d_re_X509_REQ_tbs() return the length of encoded data or 0 on error.

+ +

SEE ALSO

+ +

ERR_get_error(3) X509_CRL_get0_by_serial(3), X509_get0_signature(3), X509_get_ext_d2i(3), X509_get_extension_flags(3), X509_get_pubkey(3), X509_get_subject_name(3), X509_get_version(3), X509_NAME_add_entry_by_txt(3), X509_NAME_ENTRY_get_object(3), X509_NAME_get_index_by_NID(3), X509_NAME_print_ex(3), X509_new(3), X509_sign(3), X509V3_get_d2i(3), X509_verify_cert(3)

+ +

COPYRIGHT

+ +

Copyright 2002-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/o2i_SCT_LIST.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/o2i_SCT_LIST.html new file mode 100644 index 00000000..4636eb47 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man3/o2i_SCT_LIST.html @@ -0,0 +1,65 @@ + + + + +o2i_SCT_LIST + + + + + + + + + + +

NAME

+ +

o2i_SCT_LIST, i2o_SCT_LIST, o2i_SCT, i2o_SCT - decode and encode Signed Certificate Timestamp lists in TLS wire format

+ +

SYNOPSIS

+ +
#include <openssl/ct.h>
+
+STACK_OF(SCT) *o2i_SCT_LIST(STACK_OF(SCT) **a, const unsigned char **pp,
+                            size_t len);
+int i2o_SCT_LIST(const STACK_OF(SCT) *a, unsigned char **pp);
+SCT *o2i_SCT(SCT **psct, const unsigned char **in, size_t len);
+int i2o_SCT(const SCT *sct, unsigned char **out);
+ +

DESCRIPTION

+ +

The SCT_LIST and SCT functions are very similar to the i2d and d2i family of functions, except that they convert to and from TLS wire format, as described in RFC 6962. See d2i_SCT_LIST for more information about how the parameters are treated and the return values.

+ +

RETURN VALUES

+ +

All of the functions have return values consistent with those stated for d2i_SCT_LIST and i2d_SCT_LIST.

+ +

SEE ALSO

+ +

ct(7), d2i_SCT_LIST(3), i2d_SCT_LIST(3)

+ +

HISTORY

+ +

These functions were added in OpenSSL 1.1.0.

+ +

COPYRIGHT

+ +

Copyright 2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man5/config.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man5/config.html new file mode 100644 index 00000000..54bca59e --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man5/config.html @@ -0,0 +1,362 @@ + + + + +config + + + + + + + + + + +

NAME

+ +

config - OpenSSL CONF library configuration files

+ +

DESCRIPTION

+ +

The OpenSSL CONF library can be used to read configuration files. It is used for the OpenSSL master configuration file openssl.cnf and in a few other places like SPKAC files and certificate extension files for the x509 utility. OpenSSL applications can also use the CONF library for their own purposes.

+ +

A configuration file is divided into a number of sections. Each section starts with a line [ section_name ] and ends when a new section is started or end of file is reached. A section name can consist of alphanumeric characters and underscores.

+ +

The first section of a configuration file is special and is referred to as the default section. This section is usually unnamed and spans from the start of file until the first named section. When a name is being looked up it is first looked up in a named section (if any) and then the default section.

+ +

The environment is mapped onto a section called ENV.

+ +

Comments can be included by preceding them with the # character

+ +

Other files can be included using the .include directive followed by a path. If the path points to a directory all files with names ending with .cnf or .conf are included from the directory. Recursive inclusion of directories from files in such directory is not supported. That means the files in the included directory can also contain .include directives but only inclusion of regular files is supported there. The inclusion of directories is not supported on systems without POSIX IO support.

+ +

It is strongly recommended to use absolute paths with the .include directive. Relative paths are evaluated based on the application current working directory so unless the configuration file containing the .include directive is application specific the inclusion will not work as expected.

+ +

There can be optional = character and whitespace characters between .include directive and the path which can be useful in cases the configuration file needs to be loaded by old OpenSSL versions which do not support the .include syntax. They would bail out with error if the = character is not present but with it they just ignore the include.

+ +

Each section in a configuration file consists of a number of name and value pairs of the form name=value

+ +

The name string can contain any alphanumeric characters as well as a few punctuation symbols such as . , ; and _.

+ +

The value string consists of the string following the = character until end of line with any leading and trailing white space removed.

+ +

The value string undergoes variable expansion. This can be done by including the form $var or ${var}: this will substitute the value of the named variable in the current section. It is also possible to substitute a value from another section using the syntax $section::name or ${section::name}. By using the form $ENV::name environment variables can be substituted. It is also possible to assign values to environment variables by using the name ENV::name, this will work if the program looks up environment variables using the CONF library instead of calling getenv() directly. The value string must not exceed 64k in length after variable expansion. Otherwise an error will occur.

+ +

It is possible to escape certain characters by using any kind of quote or the \ character. By making the last character of a line a \ a value string can be spread across multiple lines. In addition the sequences \n, \r, \b and \t are recognized.

+ +

All expansion and escape rules as described above that apply to value also apply to the path of the .include directive.

+ +

OPENSSL LIBRARY CONFIGURATION

+ +

Applications can automatically configure certain aspects of OpenSSL using the master OpenSSL configuration file, or optionally an alternative configuration file. The openssl utility includes this functionality: any sub command uses the master OpenSSL configuration file unless an option is used in the sub command to use an alternative configuration file.

+ +

To enable library configuration the default section needs to contain an appropriate line which points to the main configuration section. The default name is openssl_conf which is used by the openssl utility. Other applications may use an alternative name such as myapplication_conf. All library configuration lines appear in the default section at the start of the configuration file.

+ +

The configuration section should consist of a set of name value pairs which contain specific module configuration information. The name represents the name of the configuration module. The meaning of the value is module specific: it may, for example, represent a further configuration section containing configuration module specific information. E.g.:

+ +
# This must be in the default section
+openssl_conf = openssl_init
+
+[openssl_init]
+
+oid_section = new_oids
+engines = engine_section
+
+[new_oids]
+
+... new oids here ...
+
+[engine_section]
+
+... engine stuff here ...
+ +

The features of each configuration module are described below.

+ +

ASN1 Object Configuration Module

+ +

This module has the name oid_section. The value of this variable points to a section containing name value pairs of OIDs: the name is the OID short and long name, the value is the numerical form of the OID. Although some of the openssl utility sub commands already have their own ASN1 OBJECT section functionality not all do. By using the ASN1 OBJECT configuration module all the openssl utility sub commands can see the new objects as well as any compliant applications. For example:

+ +
[new_oids]
+
+some_new_oid = 1.2.3.4
+some_other_oid = 1.2.3.5
+ +

It is also possible to set the value to the long name followed by a comma and the numerical OID form. For example:

+ +
shortName = some object long name, 1.2.3.4
+ +

Engine Configuration Module

+ +

This ENGINE configuration module has the name engines. The value of this variable points to a section containing further ENGINE configuration information.

+ +

The section pointed to by engines is a table of engine names (though see engine_id below) and further sections containing configuration information specific to each ENGINE.

+ +

Each ENGINE specific section is used to set default algorithms, load dynamic, perform initialization and send ctrls. The actual operation performed depends on the command name which is the name of the name value pair. The currently supported commands are listed below.

+ +

For example:

+ +
[engine_section]
+
+# Configure ENGINE named "foo"
+foo = foo_section
+# Configure ENGINE named "bar"
+bar = bar_section
+
+[foo_section]
+... foo ENGINE specific commands ...
+
+[bar_section]
+... "bar" ENGINE specific commands ...
+ +

The command engine_id is used to give the ENGINE name. If used this command must be first. For example:

+ +
[engine_section]
+# This would normally handle an ENGINE named "foo"
+foo = foo_section
+
+[foo_section]
+# Override default name and use "myfoo" instead.
+engine_id = myfoo
+ +

The command dynamic_path loads and adds an ENGINE from the given path. It is equivalent to sending the ctrls SO_PATH with the path argument followed by LIST_ADD with value 2 and LOAD to the dynamic ENGINE. If this is not the required behaviour then alternative ctrls can be sent directly to the dynamic ENGINE using ctrl commands.

+ +

The command init determines whether to initialize the ENGINE. If the value is 0 the ENGINE will not be initialized, if 1 and attempt it made to initialized the ENGINE immediately. If the init command is not present then an attempt will be made to initialize the ENGINE after all commands in its section have been processed.

+ +

The command default_algorithms sets the default algorithms an ENGINE will supply using the functions ENGINE_set_default_string().

+ +

If the name matches none of the above command names it is assumed to be a ctrl command which is sent to the ENGINE. The value of the command is the argument to the ctrl command. If the value is the string EMPTY then no value is sent to the command.

+ +

For example:

+ +
[engine_section]
+
+# Configure ENGINE named "foo"
+foo = foo_section
+
+[foo_section]
+# Load engine from DSO
+dynamic_path = /some/path/fooengine.so
+# A foo specific ctrl.
+some_ctrl = some_value
+# Another ctrl that doesn't take a value.
+other_ctrl = EMPTY
+# Supply all default algorithms
+default_algorithms = ALL
+ +

EVP Configuration Module

+ +

This modules has the name alg_section which points to a section containing algorithm commands.

+ +

Currently the only algorithm command supported is fips_mode whose value can only be the boolean string off. If fips_mode is set to on, an error occurs as this library version is not FIPS capable.

+ +

SSL Configuration Module

+ +

This module has the name ssl_conf which points to a section containing SSL configurations.

+ +

Each line in the SSL configuration section contains the name of the configuration and the section containing it.

+ +

Each configuration section consists of command value pairs for SSL_CONF. Each pair will be passed to a SSL_CTX or SSL structure if it calls SSL_CTX_config() or SSL_config() with the appropriate configuration name.

+ +

Note: any characters before an initial dot in the configuration section are ignored so the same command can be used multiple times.

+ +

For example:

+ +
ssl_conf = ssl_sect
+
+[ssl_sect]
+
+server = server_section
+
+[server_section]
+
+RSA.Certificate = server-rsa.pem
+ECDSA.Certificate = server-ecdsa.pem
+Ciphers = ALL:!RC4
+ +

The system default configuration with name system_default if present will be applied during any creation of the SSL_CTX structure.

+ +

Example of a configuration with the system default:

+ +
ssl_conf = ssl_sect
+
+[ssl_sect]
+
+system_default = system_default_sect
+
+[system_default_sect]
+
+MinProtocol = TLSv1.2
+ +

NOTES

+ +

If a configuration file attempts to expand a variable that doesn't exist then an error is flagged and the file will not load. This can happen if an attempt is made to expand an environment variable that doesn't exist. For example in a previous version of OpenSSL the default OpenSSL master configuration file used the value of HOME which may not be defined on non Unix systems and would cause an error.

+ +

This can be worked around by including a default section to provide a default value: then if the environment lookup fails the default value will be used instead. For this to work properly the default value must be defined earlier in the configuration file than the expansion. See the EXAMPLES section for an example of how to do this.

+ +

If the same variable exists in the same section then all but the last value will be silently ignored. In certain circumstances such as with DNs the same field may occur multiple times. This is usually worked around by ignoring any characters before an initial . e.g.

+ +
1.OU="My first OU"
+2.OU="My Second OU"
+ +

EXAMPLES

+ +

Here is a sample configuration file using some of the features mentioned above.

+ +
# This is the default section.
+
+HOME=/temp
+RANDFILE= ${ENV::HOME}/.rnd
+configdir=$ENV::HOME/config
+
+[ section_one ]
+
+# We are now in section one.
+
+# Quotes permit leading and trailing whitespace
+any = " any variable name "
+
+other = A string that can \
+cover several lines \
+by including \\ characters
+
+message = Hello World\n
+
+[ section_two ]
+
+greeting = $section_one::message
+ +

This next example shows how to expand environment variables safely.

+ +

Suppose you want a variable called tmpfile to refer to a temporary filename. The directory it is placed in can determined by the TEMP or TMP environment variables but they may not be set to any value at all. If you just include the environment variable names and the variable doesn't exist then this will cause an error when an attempt is made to load the configuration file. By making use of the default section both values can be looked up with TEMP taking priority and /tmp used if neither is defined:

+ +
TMP=/tmp
+# The above value is used if TMP isn't in the environment
+TEMP=$ENV::TMP
+# The above value is used if TEMP isn't in the environment
+tmpfile=${ENV::TEMP}/tmp.filename
+ +

Simple OpenSSL library configuration example to enter FIPS mode:

+ +
# Default appname: should match "appname" parameter (if any)
+# supplied to CONF_modules_load_file et al.
+openssl_conf = openssl_conf_section
+
+[openssl_conf_section]
+# Configuration module list
+alg_section = evp_sect
+
+[evp_sect]
+# Set to "yes" to enter FIPS mode if supported
+fips_mode = yes
+ +

Note: in the above example you will get an error in non FIPS capable versions of OpenSSL.

+ +

Simple OpenSSL library configuration to make TLS 1.3 the system-default minimum TLS version:

+ +
# Toplevel section for openssl (including libssl)
+openssl_conf = default_conf_section
+
+[default_conf_section]
+# We only specify configuration for the "ssl module"
+ssl_conf = ssl_section
+
+[ssl_section]
+system_default = system_default_section
+
+[system_default_section]
+MinProtocol = TLSv1.3
+ +

More complex OpenSSL library configuration. Add OID and don't enter FIPS mode:

+ +
# Default appname: should match "appname" parameter (if any)
+# supplied to CONF_modules_load_file et al.
+openssl_conf = openssl_conf_section
+
+[openssl_conf_section]
+# Configuration module list
+alg_section = evp_sect
+oid_section = new_oids
+
+[evp_sect]
+# This will have no effect as FIPS mode is off by default.
+# Set to "yes" to enter FIPS mode, if supported
+fips_mode = no
+
+[new_oids]
+# New OID, just short name
+newoid1 = 1.2.3.4.1
+# New OID shortname and long name
+newoid2 = New OID 2 long name, 1.2.3.4.2
+ +

The above examples can be used with any application supporting library configuration if "openssl_conf" is modified to match the appropriate "appname".

+ +

For example if the second sample file above is saved to "example.cnf" then the command line:

+ +
OPENSSL_CONF=example.cnf openssl asn1parse -genstr OID:1.2.3.4.1
+ +

will output:

+ +
0:d=0  hl=2 l=   4 prim: OBJECT            :newoid1
+ +

showing that the OID "newoid1" has been added as "1.2.3.4.1".

+ +

ENVIRONMENT

+ +
+ +
OPENSSL_CONF
+
+ +

The path to the config file. Ignored in set-user-ID and set-group-ID programs.

+ +
+
OPENSSL_ENGINES
+
+ +

The path to the engines directory. Ignored in set-user-ID and set-group-ID programs.

+ +
+
+ +

BUGS

+ +

Currently there is no way to include characters using the octal \nnn form. Strings are all null terminated so nulls cannot form part of the value.

+ +

The escaping isn't quite right: if you want to use sequences like \n you can't use any quote escaping on the same line.

+ +

Files are loaded in a single pass. This means that an variable expansion will only work if the variables referenced are defined earlier in the file.

+ +

SEE ALSO

+ +

x509(1), req(1), ca(1)

+ +

COPYRIGHT

+ +

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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man5/x509v3_config.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man5/x509v3_config.html new file mode 100644 index 00000000..3a96990b --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man5/x509v3_config.html @@ -0,0 +1,464 @@ + + + + +x509v3_config + + + + + + + + + + +

NAME

+ +

x509v3_config - X509 V3 certificate extension configuration format

+ +

DESCRIPTION

+ +

Several of the OpenSSL utilities can add extensions to a certificate or certificate request based on the contents of a configuration file.

+ +

Typically the application will contain an option to point to an extension section. Each line of the extension section takes the form:

+ +
extension_name=[critical,] extension_options
+ +

If critical is present then the extension will be critical.

+ +

The format of extension_options depends on the value of extension_name.

+ +

There are four main types of extension: string extensions, multi-valued extensions, raw and arbitrary extensions.

+ +

String extensions simply have a string which contains either the value itself or how it is obtained.

+ +

For example:

+ +
nsComment="This is a Comment"
+ +

Multi-valued extensions have a short form and a long form. The short form is a list of names and values:

+ +
basicConstraints=critical,CA:true,pathlen:1
+ +

The long form allows the values to be placed in a separate section:

+ +
basicConstraints=critical,@bs_section
+
+[bs_section]
+
+CA=true
+pathlen=1
+ +

Both forms are equivalent.

+ +

The syntax of raw extensions is governed by the extension code: it can for example contain data in multiple sections. The correct syntax to use is defined by the extension code itself: check out the certificate policies extension for an example.

+ +

If an extension type is unsupported then the arbitrary extension syntax must be used, see the ARBITRARY EXTENSIONS section for more details.

+ +

STANDARD EXTENSIONS

+ +

The following sections describe each supported extension in detail.

+ +

Basic Constraints.

+ +

This is a multi valued extension which indicates whether a certificate is a CA certificate. The first (mandatory) name is CA followed by TRUE or FALSE. If CA is TRUE then an optional pathlen name followed by an non-negative value can be included.

+ +

For example:

+ +
basicConstraints=CA:TRUE
+
+basicConstraints=CA:FALSE
+
+basicConstraints=critical,CA:TRUE, pathlen:0
+ +

A CA certificate must include the basicConstraints value with the CA field set to TRUE. An end user certificate must either set CA to FALSE or exclude the extension entirely. Some software may require the inclusion of basicConstraints with CA set to FALSE for end entity certificates.

+ +

The pathlen parameter indicates the maximum number of CAs that can appear below this one in a chain. So if you have a CA with a pathlen of zero it can only be used to sign end user certificates and not further CAs.

+ +

Key Usage.

+ +

Key usage is a multi valued extension consisting of a list of names of the permitted key usages.

+ +

The supported names are: digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment, keyAgreement, keyCertSign, cRLSign, encipherOnly and decipherOnly.

+ +

Examples:

+ +
keyUsage=digitalSignature, nonRepudiation
+
+keyUsage=critical, keyCertSign
+ +

Extended Key Usage.

+ +

This extensions consists of a list of usages indicating purposes for which the certificate public key can be used for,

+ +

These can either be object short names or the dotted numerical form of OIDs. While any OID can be used only certain values make sense. In particular the following PKIX, NS and MS values are meaningful:

+ +
Value                  Meaning
+-----                  -------
+serverAuth             SSL/TLS Web Server Authentication.
+clientAuth             SSL/TLS Web Client Authentication.
+codeSigning            Code signing.
+emailProtection        E-mail Protection (S/MIME).
+timeStamping           Trusted Timestamping
+OCSPSigning            OCSP Signing
+ipsecIKE               ipsec Internet Key Exchange
+msCodeInd              Microsoft Individual Code Signing (authenticode)
+msCodeCom              Microsoft Commercial Code Signing (authenticode)
+msCTLSign              Microsoft Trust List Signing
+msEFS                  Microsoft Encrypted File System
+ +

Examples:

+ +
extendedKeyUsage=critical,codeSigning,1.2.3.4
+extendedKeyUsage=serverAuth,clientAuth
+ +

Subject Key Identifier.

+ +

This is really a string extension and can take two possible values. Either the word hash which will automatically follow the guidelines in RFC3280 or a hex string giving the extension value to include. The use of the hex string is strongly discouraged.

+ +

Example:

+ +
subjectKeyIdentifier=hash
+ +

Authority Key Identifier.

+ +

The authority key identifier extension permits two options. keyid and issuer: both can take the optional value "always".

+ +

If the keyid option is present an attempt is made to copy the subject key identifier from the parent certificate. If the value "always" is present then an error is returned if the option fails.

+ +

The issuer option copies the issuer and serial number from the issuer certificate. This will only be done if the keyid option fails or is not included unless the "always" flag will always include the value.

+ +

Example:

+ +
authorityKeyIdentifier=keyid,issuer
+ +

Subject Alternative Name.

+ +

The subject alternative name extension allows various literal values to be included in the configuration file. These include email (an email address) URI a uniform resource indicator, DNS (a DNS domain name), RID (a registered ID: OBJECT IDENTIFIER), IP (an IP address), dirName (a distinguished name) and otherName.

+ +

The email option include a special 'copy' value. This will automatically include any email addresses contained in the certificate subject name in the extension.

+ +

The IP address used in the IP options can be in either IPv4 or IPv6 format.

+ +

The value of dirName should point to a section containing the distinguished name to use as a set of name value pairs. Multi values AVAs can be formed by prefacing the name with a + character.

+ +

otherName can include arbitrary data associated with an OID: the value should be the OID followed by a semicolon and the content in standard ASN1_generate_nconf(3) format.

+ +

Examples:

+ +
subjectAltName=email:copy,email:my@other.address,URI:http://my.url.here/
+subjectAltName=IP:192.168.7.1
+subjectAltName=IP:13::17
+subjectAltName=email:my@other.address,RID:1.2.3.4
+subjectAltName=otherName:1.2.3.4;UTF8:some other identifier
+
+subjectAltName=dirName:dir_sect
+
+[dir_sect]
+C=UK
+O=My Organization
+OU=My Unit
+CN=My Name
+ +

Issuer Alternative Name.

+ +

The issuer alternative name option supports all the literal options of subject alternative name. It does not support the email:copy option because that would not make sense. It does support an additional issuer:copy option that will copy all the subject alternative name values from the issuer certificate (if possible).

+ +

Example:

+ +
issuerAltName = issuer:copy
+ +

Authority Info Access.

+ +

The authority information access extension gives details about how to access certain information relating to the CA. Its syntax is accessOID;location where location has the same syntax as subject alternative name (except that email:copy is not supported). accessOID can be any valid OID but only certain values are meaningful, for example OCSP and caIssuers.

+ +

Example:

+ +
authorityInfoAccess = OCSP;URI:http://ocsp.my.host/
+authorityInfoAccess = caIssuers;URI:http://my.ca/ca.html
+ +

CRL distribution points

+ +

This is a multi-valued extension whose options can be either in name:value pair using the same form as subject alternative name or a single value representing a section name containing all the distribution point fields.

+ +

For a name:value pair a new DistributionPoint with the fullName field set to the given value both the cRLissuer and reasons fields are omitted in this case.

+ +

In the single option case the section indicated contains values for each field. In this section:

+ +

If the name is "fullname" the value field should contain the full name of the distribution point in the same format as subject alternative name.

+ +

If the name is "relativename" then the value field should contain a section name whose contents represent a DN fragment to be placed in this field.

+ +

The name "CRLIssuer" if present should contain a value for this field in subject alternative name format.

+ +

If the name is "reasons" the value field should consist of a comma separated field containing the reasons. Valid reasons are: "keyCompromise", "CACompromise", "affiliationChanged", "superseded", "cessationOfOperation", "certificateHold", "privilegeWithdrawn" and "AACompromise".

+ +

Simple examples:

+ +
crlDistributionPoints=URI:http://myhost.com/myca.crl
+crlDistributionPoints=URI:http://my.com/my.crl,URI:http://oth.com/my.crl
+ +

Full distribution point example:

+ +
crlDistributionPoints=crldp1_section
+
+[crldp1_section]
+
+fullname=URI:http://myhost.com/myca.crl
+CRLissuer=dirName:issuer_sect
+reasons=keyCompromise, CACompromise
+
+[issuer_sect]
+C=UK
+O=Organisation
+CN=Some Name
+ +

Issuing Distribution Point

+ +

This extension should only appear in CRLs. It is a multi valued extension whose syntax is similar to the "section" pointed to by the CRL distribution points extension with a few differences.

+ +

The names "reasons" and "CRLissuer" are not recognized.

+ +

The name "onlysomereasons" is accepted which sets this field. The value is in the same format as the CRL distribution point "reasons" field.

+ +

The names "onlyuser", "onlyCA", "onlyAA" and "indirectCRL" are also accepted the values should be a boolean value (TRUE or FALSE) to indicate the value of the corresponding field.

+ +

Example:

+ +
issuingDistributionPoint=critical, @idp_section
+
+[idp_section]
+
+fullname=URI:http://myhost.com/myca.crl
+indirectCRL=TRUE
+onlysomereasons=keyCompromise, CACompromise
+
+[issuer_sect]
+C=UK
+O=Organisation
+CN=Some Name
+ +

Certificate Policies.

+ +

This is a raw extension. All the fields of this extension can be set by using the appropriate syntax.

+ +

If you follow the PKIX recommendations and just using one OID then you just include the value of that OID. Multiple OIDs can be set separated by commas, for example:

+ +
certificatePolicies= 1.2.4.5, 1.1.3.4
+ +

If you wish to include qualifiers then the policy OID and qualifiers need to be specified in a separate section: this is done by using the @section syntax instead of a literal OID value.

+ +

The section referred to must include the policy OID using the name policyIdentifier, cPSuri qualifiers can be included using the syntax:

+ +
CPS.nnn=value
+ +

userNotice qualifiers can be set using the syntax:

+ +
userNotice.nnn=@notice
+ +

The value of the userNotice qualifier is specified in the relevant section. This section can include explicitText, organization and noticeNumbers options. explicitText and organization are text strings, noticeNumbers is a comma separated list of numbers. The organization and noticeNumbers options (if included) must BOTH be present. If you use the userNotice option with IE5 then you need the 'ia5org' option at the top level to modify the encoding: otherwise it will not be interpreted properly.

+ +

Example:

+ +
certificatePolicies=ia5org,1.2.3.4,1.5.6.7.8,@polsect
+
+[polsect]
+
+policyIdentifier = 1.3.5.8
+CPS.1="http://my.host.name/"
+CPS.2="http://my.your.name/"
+userNotice.1=@notice
+
+[notice]
+
+explicitText="Explicit Text Here"
+organization="Organisation Name"
+noticeNumbers=1,2,3,4
+ +

The ia5org option changes the type of the organization field. In RFC2459 it can only be of type DisplayText. In RFC3280 IA5String is also permissible. Some software (for example some versions of MSIE) may require ia5org.

+ +

ASN1 type of explicitText can be specified by prepending UTF8, BMP or VISIBLE prefix followed by colon. For example:

+ +
[notice]
+explicitText="UTF8:Explicit Text Here"
+ +

Policy Constraints

+ +

This is a multi-valued extension which consisting of the names requireExplicitPolicy or inhibitPolicyMapping and a non negative integer value. At least one component must be present.

+ +

Example:

+ +
policyConstraints = requireExplicitPolicy:3
+ +

Inhibit Any Policy

+ +

This is a string extension whose value must be a non negative integer.

+ +

Example:

+ +
inhibitAnyPolicy = 2
+ +

Name Constraints

+ +

The name constraints extension is a multi-valued extension. The name should begin with the word permitted or excluded followed by a ;. The rest of the name and the value follows the syntax of subjectAltName except email:copy is not supported and the IP form should consist of an IP addresses and subnet mask separated by a /.

+ +

Examples:

+ +
nameConstraints=permitted;IP:192.168.0.0/255.255.0.0
+
+nameConstraints=permitted;email:.somedomain.com
+
+nameConstraints=excluded;email:.com
+ +

OCSP No Check

+ +

The OCSP No Check extension is a string extension but its value is ignored.

+ +

Example:

+ +
noCheck = ignored
+ +

TLS Feature (aka Must Staple)

+ +

This is a multi-valued extension consisting of a list of TLS extension identifiers. Each identifier may be a number (0..65535) or a supported name. When a TLS client sends a listed extension, the TLS server is expected to include that extension in its reply.

+ +

The supported names are: status_request and status_request_v2.

+ +

Example:

+ +
tlsfeature = status_request
+ +

DEPRECATED EXTENSIONS

+ +

The following extensions are non standard, Netscape specific and largely obsolete. Their use in new applications is discouraged.

+ +

Netscape String extensions.

+ +

Netscape Comment (nsComment) is a string extension containing a comment which will be displayed when the certificate is viewed in some browsers.

+ +

Example:

+ +
nsComment = "Some Random Comment"
+ +

Other supported extensions in this category are: nsBaseUrl, nsRevocationUrl, nsCaRevocationUrl, nsRenewalUrl, nsCaPolicyUrl and nsSslServerName.

+ +

Netscape Certificate Type

+ +

This is a multi-valued extensions which consists of a list of flags to be included. It was used to indicate the purposes for which a certificate could be used. The basicConstraints, keyUsage and extended key usage extensions are now used instead.

+ +

Acceptable values for nsCertType are: client, server, email, objsign, reserved, sslCA, emailCA, objCA.

+ +

ARBITRARY EXTENSIONS

+ +

If an extension is not supported by the OpenSSL code then it must be encoded using the arbitrary extension format. It is also possible to use the arbitrary format for supported extensions. Extreme care should be taken to ensure that the data is formatted correctly for the given extension type.

+ +

There are two ways to encode arbitrary extensions.

+ +

The first way is to use the word ASN1 followed by the extension content using the same syntax as ASN1_generate_nconf(3). For example:

+ +
1.2.3.4=critical,ASN1:UTF8String:Some random data
+
+1.2.3.4=ASN1:SEQUENCE:seq_sect
+
+[seq_sect]
+
+field1 = UTF8:field1
+field2 = UTF8:field2
+ +

It is also possible to use the word DER to include the raw encoded data in any extension.

+ +
1.2.3.4=critical,DER:01:02:03:04
+1.2.3.4=DER:01020304
+ +

The value following DER is a hex dump of the DER encoding of the extension Any extension can be placed in this form to override the default behaviour. For example:

+ +
basicConstraints=critical,DER:00:01:02:03
+ +

WARNINGS

+ +

There is no guarantee that a specific implementation will process a given extension. It may therefore be sometimes possible to use certificates for purposes prohibited by their extensions because a specific application does not recognize or honour the values of the relevant extensions.

+ +

The DER and ASN1 options should be used with caution. It is possible to create totally invalid extensions if they are not used carefully.

+ +

NOTES

+ +

If an extension is multi-value and a field value must contain a comma the long form must be used otherwise the comma would be misinterpreted as a field separator. For example:

+ +
subjectAltName=URI:ldap://somehost.com/CN=foo,OU=bar
+ +

will produce an error but the equivalent form:

+ +
subjectAltName=@subject_alt_section
+
+[subject_alt_section]
+subjectAltName=URI:ldap://somehost.com/CN=foo,OU=bar
+ +

is valid.

+ +

Due to the behaviour of the OpenSSL conf library the same field name can only occur once in a section. This means that:

+ +
subjectAltName=@alt_section
+
+[alt_section]
+
+email=steve@here
+email=steve@there
+ +

will only recognize the last value. This can be worked around by using the form:

+ +
[alt_section]
+
+email.1=steve@here
+email.2=steve@there
+ +

SEE ALSO

+ +

req(1), ca(1), x509(1), ASN1_generate_nconf(3)

+ +

COPYRIGHT

+ +

Copyright 2004-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/Ed25519.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/Ed25519.html new file mode 100644 index 00000000..0e250b02 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/Ed25519.html @@ -0,0 +1,84 @@ + + + + +Ed25519 + + + + + + + + + + +

NAME

+ +

Ed25519, Ed448 - EVP_PKEY Ed25519 and Ed448 support

+ +

DESCRIPTION

+ +

The Ed25519 and Ed448 EVP_PKEY implementation supports key generation, one-shot digest sign and digest verify using PureEdDSA and Ed25519 or Ed448 (see RFC8032). It has associated private and public key formats compatible with RFC 8410.

+ +

No additional parameters can be set during key generation, one-shot signing or verification. In particular, because PureEdDSA is used, a digest must NOT be specified when signing or verifying.

+ +

NOTES

+ +

The PureEdDSA algorithm does not support the streaming mechanism of other signature algorithms using, for example, EVP_DigestUpdate(). The message to sign or verify must be passed using the one-shot EVP_DigestSign() and EVP_DigestVerify() functions.

+ +

When calling EVP_DigestSignInit() or EVP_DigestVerifyInit(), the digest type parameter MUST be set to NULL.

+ +

Applications wishing to sign certificates (or other structures such as CRLs or certificate requests) using Ed25519 or Ed448 can either use X509_sign() or X509_sign_ctx() in the usual way.

+ +

A context for the Ed25519 algorithm can be obtained by calling:

+ +
EVP_PKEY_CTX *pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_ED25519, NULL);
+ +

For the Ed448 algorithm a context can be obtained by calling:

+ +
EVP_PKEY_CTX *pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_ED448, NULL);
+ +

Ed25519 or Ed448 private keys can be set directly using EVP_PKEY_new_raw_private_key(3) or loaded from a PKCS#8 private key file using PEM_read_bio_PrivateKey(3) (or similar function). Completely new keys can also be generated (see the example below). Setting a private key also sets the associated public key.

+ +

Ed25519 or Ed448 public keys can be set directly using EVP_PKEY_new_raw_public_key(3) or loaded from a SubjectPublicKeyInfo structure in a PEM file using PEM_read_bio_PUBKEY(3) (or similar function).

+ +

Ed25519 and Ed448 can be tested within speed(1) application since version 1.1.1. Valid algorithm names are ed25519, ed448 and eddsa. If eddsa is specified, then both Ed25519 and Ed448 are benchmarked.

+ +

EXAMPLES

+ +

This example generates an ED25519 private key and writes it to standard output in PEM format:

+ +
#include <openssl/evp.h>
+#include <openssl/pem.h>
+...
+EVP_PKEY *pkey = NULL;
+EVP_PKEY_CTX *pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_ED25519, NULL);
+EVP_PKEY_keygen_init(pctx);
+EVP_PKEY_keygen(pctx, &pkey);
+EVP_PKEY_CTX_free(pctx);
+PEM_write_PrivateKey(stdout, pkey, NULL, NULL, 0, NULL, NULL);
+ +

SEE ALSO

+ +

EVP_PKEY_CTX_new(3), EVP_PKEY_keygen(3), EVP_DigestSignInit(3), EVP_DigestVerifyInit(3),

+ +

COPYRIGHT

+ +

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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/RAND.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/RAND.html new file mode 100644 index 00000000..ab3d565c --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/RAND.html @@ -0,0 +1,64 @@ + + + + +RAND + + + + + + + + + + +

NAME

+ +

RAND - the OpenSSL random generator

+ +

DESCRIPTION

+ +

Random numbers are a vital part of cryptography, they are needed to provide unpredictability for tasks like key generation, creating salts, and many more. Software-based generators must be seeded with external randomness before they can be used as a cryptographically-secure pseudo-random number generator (CSPRNG). The availability of common hardware with special instructions and modern operating systems, which may use items such as interrupt jitter and network packet timings, can be reasonable sources of seeding material.

+ +

OpenSSL comes with a default implementation of the RAND API which is based on the deterministic random bit generator (DRBG) model as described in [NIST SP 800-90A Rev. 1]. The default random generator will initialize automatically on first use and will be fully functional without having to be initialized ('seeded') explicitly. It seeds and reseeds itself automatically using trusted random sources provided by the operating system.

+ +

As a normal application developer, you do not have to worry about any details, just use RAND_bytes(3) to obtain random data. Having said that, there is one important rule to obey: Always check the error return value of RAND_bytes(3) and do not take randomness for granted. Although (re-)seeding is automatic, it can fail because no trusted random source is available or the trusted source(s) temporarily fail to provide sufficient random seed material. In this case the CSPRNG enters an error state and ceases to provide output, until it is able to recover from the error by reseeding itself. For more details on reseeding and error recovery, see RAND_DRBG(7).

+ +

For values that should remain secret, you can use RAND_priv_bytes(3) instead. This method does not provide 'better' randomness, it uses the same type of CSPRNG. The intention behind using a dedicated CSPRNG exclusively for private values is that none of its output should be visible to an attacker (e.g., used as salt value), in order to reveal as little information as possible about its internal state, and that a compromise of the "public" CSPRNG instance will not affect the secrecy of these private values.

+ +

In the rare case where the default implementation does not satisfy your special requirements, there are two options:

+ +
    + +
  • Replace the default RAND method by your own RAND method using RAND_set_rand_method(3).

    + +
  • +
  • Modify the default settings of the OpenSSL RAND method by modifying the security parameters of the underlying DRBG, which is described in detail in RAND_DRBG(7).

    + +
  • +
+ +

Changing the default random generator or its default parameters should be necessary only in exceptional cases and is not recommended, unless you have a profound knowledge of cryptographic principles and understand the implications of your changes.

+ +

SEE ALSO

+ +

RAND_add(3), RAND_bytes(3), RAND_priv_bytes(3), RAND_get_rand_method(3), RAND_set_rand_method(3), RAND_OpenSSL(3), RAND_DRBG(7)

+ +

COPYRIGHT

+ +

Copyright 2018-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/RAND_DRBG.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/RAND_DRBG.html new file mode 100644 index 00000000..3913eeda --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/RAND_DRBG.html @@ -0,0 +1,224 @@ + + + + +RAND_DRBG + + + + + + + + + + +

NAME

+ +

RAND_DRBG - the deterministic random bit generator

+ +

SYNOPSIS

+ +
#include <openssl/rand_drbg.h>
+ +

DESCRIPTION

+ +

The default OpenSSL RAND method is based on the RAND_DRBG class, which implements a deterministic random bit generator (DRBG). A DRBG is a certain type of cryptographically-secure pseudo-random number generator (CSPRNG), which is described in [NIST SP 800-90A Rev. 1].

+ +

While the RAND API is the 'frontend' which is intended to be used by application developers for obtaining random bytes, the RAND_DRBG API serves as the 'backend', connecting the former with the operating systems's entropy sources and providing access to the DRBG's configuration parameters.

+ +

Disclaimer

+ +

Unless you have very specific requirements for your random generator, it is in general not necessary to utilize the RAND_DRBG API directly. The usual way to obtain random bytes is to use RAND_bytes(3) or RAND_priv_bytes(3), see also RAND(7).

+ +

Typical Use Cases

+ +

Typical examples for such special use cases are the following:

+ +
    + +
  • You want to use your own private DRBG instances. Multiple DRBG instances which are accessed only by a single thread provide additional security (because their internal states are independent) and better scalability in multithreaded applications (because they don't need to be locked).

    + +
  • +
  • You need to integrate a previously unsupported entropy source.

    + +
  • +
  • You need to change the default settings of the standard OpenSSL RAND implementation to meet specific requirements.

    + +
  • +
+ +

CHAINING

+ +

A DRBG instance can be used as the entropy source of another DRBG instance, provided it has itself access to a valid entropy source. The DRBG instance which acts as entropy source is called the parent DRBG, the other instance the child DRBG.

+ +

This is called chaining. A chained DRBG instance is created by passing a pointer to the parent DRBG as argument to the RAND_DRBG_new() call. It is possible to create chains of more than two DRBG in a row.

+ +

THE THREE SHARED DRBG INSTANCES

+ +

Currently, there are three shared DRBG instances, the <master>, <public>, and <private> DRBG. While the <master> DRBG is a single global instance, the <public> and <private> DRBG are created per thread and accessed through thread-local storage.

+ +

By default, the functions RAND_bytes(3) and RAND_priv_bytes(3) use the thread-local <public> and <private> DRBG instance, respectively.

+ +

The <master> DRBG instance

+ +

The <master> DRBG is not used directly by the application, only for reseeding the two other two DRBG instances. It reseeds itself by obtaining randomness either from os entropy sources or by consuming randomness which was added previously by RAND_add(3).

+ +

The <public> DRBG instance

+ +

This instance is used per default by RAND_bytes(3).

+ +

The <private> DRBG instance

+ +

This instance is used per default by RAND_priv_bytes(3)

+ +

LOCKING

+ +

The <master> DRBG is intended to be accessed concurrently for reseeding by its child DRBG instances. The necessary locking is done internally. It is not thread-safe to access the <master> DRBG directly via the RAND_DRBG interface. The <public> and <private> DRBG are thread-local, i.e. there is an instance of each per thread. So they can safely be accessed without locking via the RAND_DRBG interface.

+ +

Pointers to these DRBG instances can be obtained using RAND_DRBG_get0_master(), RAND_DRBG_get0_public(), and RAND_DRBG_get0_private(), respectively. Note that it is not allowed to store a pointer to one of the thread-local DRBG instances in a variable or other memory location where it will be accessed and used by multiple threads.

+ +

All other DRBG instances created by an application don't support locking, because they are intended to be used by a single thread. Instead of accessing a single DRBG instance concurrently from different threads, it is recommended to instantiate a separate DRBG instance per thread. Using the <master> DRBG as entropy source for multiple DRBG instances on different threads is thread-safe, because the DRBG instance will lock the <master> DRBG automatically for obtaining random input.

+ +

THE OVERALL PICTURE

+ +

The following picture gives an overview over how the DRBG instances work together and are being used.

+ +
           +--------------------+
+           | os entropy sources |
+           +--------------------+
+                    |
+                    v           +-----------------------------+
+  RAND_add() ==> <master>     <-| shared DRBG (with locking)  |
+                  /   \         +-----------------------------+
+                 /     \              +---------------------------+
+          <public>     <private>   <- | per-thread DRBG instances |
+             |             |          +---------------------------+
+             v             v
+           RAND_bytes()   RAND_priv_bytes()
+                |               ^
+                |               |
++------------------+      +------------------------------------+
+| general purpose  |      | used for secrets like session keys |
+| random generator |      | and private keys for certificates  |
++------------------+      +------------------------------------+
+ +

The usual way to obtain random bytes is to call RAND_bytes(...) or RAND_priv_bytes(...). These calls are roughly equivalent to calling RAND_DRBG_bytes(<public>, ...) and RAND_DRBG_bytes(<private>, ...), respectively. The method RAND_DRBG_bytes(3) is a convenience method wrapping the RAND_DRBG_generate(3) function, which serves the actual request for random data.

+ +

RESEEDING

+ +

A DRBG instance seeds itself automatically, pulling random input from its entropy source. The entropy source can be either a trusted operating system entropy source, or another DRBG with access to such a source.

+ +

Automatic reseeding occurs after a predefined number of generate requests. The selection of the trusted entropy sources is configured at build time using the --with-rand-seed option. The following sections explain the reseeding process in more detail.

+ +

Automatic Reseeding

+ +

Before satisfying a generate request (RAND_DRBG_generate(3)), the DRBG reseeds itself automatically, if one of the following conditions holds:

+ +

- the DRBG was not instantiated (=seeded) yet or has been uninstantiated.

+ +

- the number of generate requests since the last reseeding exceeds a certain threshold, the so called reseed_interval. This behaviour can be disabled by setting the reseed_interval to 0.

+ +

- the time elapsed since the last reseeding exceeds a certain time interval, the so called reseed_time_interval. This can be disabled by setting the reseed_time_interval to 0.

+ +

- the DRBG is in an error state.

+ +

Note: An error state is entered if the entropy source fails while the DRBG is seeding or reseeding. The last case ensures that the DRBG automatically recovers from the error as soon as the entropy source is available again.

+ +

Manual Reseeding

+ +

In addition to automatic reseeding, the caller can request an immediate reseeding of the DRBG with fresh entropy by setting the prediction resistance parameter to 1 when calling RAND_DRBG_generate(3).

+ +

The document [NIST SP 800-90C] describes prediction resistance requests in detail and imposes strict conditions on the entropy sources that are approved for providing prediction resistance. Since the default DRBG implementation does not have access to such an approved entropy source, a request for prediction resistance will currently always fail. In other words, prediction resistance is currently not supported yet by the DRBG.

+ +

For the three shared DRBGs (and only for these) there is another way to reseed them manually: If RAND_add(3) is called with a positive randomness argument (or RAND_seed(3)), then this will immediately reseed the <master> DRBG. The <public> and <private> DRBG will detect this on their next generate call and reseed, pulling randomness from <master>.

+ +

The last feature has been added to support the common practice used with previous OpenSSL versions to call RAND_add() before calling RAND_bytes().

+ +

Entropy Input vs. Additional Data

+ +

The DRBG distinguishes two different types of random input: entropy, which comes from a trusted source, and additional input', which can optionally be added by the user and is considered untrusted. It is possible to add additional input not only during reseeding, but also for every generate request. This is in fact done automatically by RAND_DRBG_bytes(3).

+ +

Configuring the Random Seed Source

+ +

In most cases OpenSSL will automatically choose a suitable seed source for automatically seeding and reseeding its <master> DRBG. In some cases however, it will be necessary to explicitly specify a seed source during configuration, using the --with-rand-seed option. For more information, see the INSTALL instructions. There are also operating systems where no seed source is available and automatic reseeding is disabled by default.

+ +

The following two sections describe the reseeding process of the master DRBG, depending on whether automatic reseeding is available or not.

+ +

Reseeding the master DRBG with automatic seeding enabled

+ +

Calling RAND_poll() or RAND_add() is not necessary, because the DRBG pulls the necessary entropy from its source automatically. However, both calls are permitted, and do reseed the RNG.

+ +

RAND_add() can be used to add both kinds of random input, depending on the value of the randomness argument:

+ +
+ +
randomness == 0:
+
+ +

The random bytes are mixed as additional input into the current state of the DRBG. Mixing in additional input is not considered a full reseeding, hence the reseed counter is not reset.

+ +
+
randomness > 0:
+
+ +

The random bytes are used as entropy input for a full reseeding (resp. reinstantiation) if the DRBG is instantiated (resp. uninstantiated or in an error state). The number of random bits required for reseeding is determined by the security strength of the DRBG. Currently it defaults to 256 bits (32 bytes). It is possible to provide less randomness than required. In this case the missing randomness will be obtained by pulling random input from the trusted entropy sources.

+ +
+
+ +

Reseeding the master DRBG with automatic seeding disabled

+ +

Calling RAND_poll() will always fail.

+ +

RAND_add() needs to be called for initial seeding and periodic reseeding. At least 48 bytes (384 bits) of randomness have to be provided, otherwise the (re-)seeding of the DRBG will fail. This corresponds to one and a half times the security strength of the DRBG. The extra half is used for the nonce during instantiation.

+ +

More precisely, the number of bytes needed for seeding depend on the security strength of the DRBG, which is set to 256 by default.

+ +

SEE ALSO

+ +

RAND_DRBG_bytes(3), RAND_DRBG_generate(3), RAND_DRBG_reseed(3), RAND_DRBG_get0_master(3), RAND_DRBG_get0_public(3), RAND_DRBG_get0_private(3), RAND_DRBG_set_reseed_interval(3), RAND_DRBG_set_reseed_time_interval(3), RAND_DRBG_set_reseed_defaults(3), RAND(7),

+ +

COPYRIGHT

+ +

Copyright 2017-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/RSA-PSS.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/RSA-PSS.html new file mode 100644 index 00000000..965066d0 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/RSA-PSS.html @@ -0,0 +1,73 @@ + + + + +RSA-PSS + + + + + + + + + + +

NAME

+ +

RSA-PSS - EVP_PKEY RSA-PSS algorithm support

+ +

DESCRIPTION

+ +

The RSA-PSS EVP_PKEY implementation is a restricted version of the RSA algorithm which only supports signing, verification and key generation using PSS padding modes with optional parameter restrictions.

+ +

It has associated private key and public key formats.

+ +

This algorithm shares several control operations with the RSA algorithm but with some restrictions described below.

+ +

Signing and Verification

+ +

Signing and verification is similar to the RSA algorithm except the padding mode is always PSS. If the key in use has parameter restrictions then the corresponding signature parameters are set to the restrictions: for example, if the key can only be used with digest SHA256, MGF1 SHA256 and minimum salt length 32 then the digest, MGF1 digest and salt length will be set to SHA256, SHA256 and 32 respectively.

+ +

Key Generation

+ +

By default no parameter restrictions are placed on the generated key.

+ +

NOTES

+ +

The public key format is documented in RFC4055.

+ +

The PKCS#8 private key format used for RSA-PSS keys is similar to the RSA format except it uses the id-RSASSA-PSS OID and the parameters field, if present, restricts the key parameters in the same way as the public key.

+ +

CONFORMING TO

+ +

RFC 4055

+ +

SEE ALSO

+ +

EVP_PKEY_CTX_set_rsa_pss_keygen_md(3), EVP_PKEY_CTX_set_rsa_pss_keygen_mgf1_md(3), EVP_PKEY_CTX_set_rsa_pss_keygen_saltlen(3), EVP_PKEY_CTX_new(3), EVP_PKEY_CTX_ctrl_str(3), EVP_PKEY_derive(3)

+ +

COPYRIGHT

+ +

Copyright 2017-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/SM2.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/SM2.html new file mode 100644 index 00000000..1e379807 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/SM2.html @@ -0,0 +1,84 @@ + + + + +SM2 + + + + + + + + + + +

NAME

+ +

SM2 - Chinese SM2 signature and encryption algorithm support

+ +

DESCRIPTION

+ +

The SM2 algorithm was first defined by the Chinese national standard GM/T 0003-2012 and was later standardized by ISO as ISO/IEC 14888. SM2 is actually an elliptic curve based algorithm. The current implementation in OpenSSL supports both signature and encryption schemes via the EVP interface.

+ +

When doing the SM2 signature algorithm, it requires a distinguishing identifier to form the message prefix which is hashed before the real message is hashed.

+ +

NOTES

+ +

SM2 signatures can be generated by using the 'DigestSign' series of APIs, for instance, EVP_DigestSignInit(), EVP_DigestSignUpdate() and EVP_DigestSignFinal(). Ditto for the verification process by calling the 'DigestVerify' series of APIs.

+ +

There are several special steps that need to be done before computing an SM2 signature.

+ +

The EVP_PKEY structure will default to using ECDSA for signatures when it is created. It should be set to EVP_PKEY_SM2 by calling:

+ +
EVP_PKEY_set_alias_type(pkey, EVP_PKEY_SM2);
+ +

Then an ID should be set by calling:

+ +
EVP_PKEY_CTX_set1_id(pctx, id, id_len);
+ +

When calling the EVP_DigestSignInit() or EVP_DigestVerifyInit() functions, a pre-allocated EVP_PKEY_CTX should be assigned to the EVP_MD_CTX. This is done by calling:

+ +
EVP_MD_CTX_set_pkey_ctx(mctx, pctx);
+ +

And normally there is no need to pass a pctx parameter to EVP_DigestSignInit() or EVP_DigestVerifyInit() in such a scenario.

+ +

EXAMPLES

+ +

This example demonstrates the calling sequence for using an EVP_PKEY to verify a message with the SM2 signature algorithm and the SM3 hash algorithm:

+ +
#include <openssl/evp.h>
+
+/* obtain an EVP_PKEY using whatever methods... */
+EVP_PKEY_set_alias_type(pkey, EVP_PKEY_SM2);
+mctx = EVP_MD_CTX_new();
+pctx = EVP_PKEY_CTX_new(pkey, NULL);
+EVP_PKEY_CTX_set1_id(pctx, id, id_len);
+EVP_MD_CTX_set_pkey_ctx(mctx, pctx);;
+EVP_DigestVerifyInit(mctx, NULL, EVP_sm3(), NULL, pkey);
+EVP_DigestVerifyUpdate(mctx, msg, msg_len);
+EVP_DigestVerifyFinal(mctx, sig, sig_len)
+ +

SEE ALSO

+ +

EVP_PKEY_CTX_new(3), EVP_PKEY_set_alias_type(3), EVP_DigestSignInit(3), EVP_DigestVerifyInit(3), EVP_PKEY_CTX_set1_id(3), EVP_MD_CTX_set_pkey_ctx(3)

+ +

COPYRIGHT

+ +

Copyright 2018-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/X25519.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/X25519.html new file mode 100644 index 00000000..8429f416 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/X25519.html @@ -0,0 +1,80 @@ + + + + +X25519 + + + + + + + + + + +

NAME

+ +

X25519, X448 - EVP_PKEY X25519 and X448 support

+ +

DESCRIPTION

+ +

The X25519 and X448 EVP_PKEY implementation supports key generation and key derivation using X25519 and X448. It has associated private and public key formats compatible with RFC 8410.

+ +

No additional parameters can be set during key generation.

+ +

The peer public key must be set using EVP_PKEY_derive_set_peer() when performing key derivation.

+ +

NOTES

+ +

A context for the X25519 algorithm can be obtained by calling:

+ +
EVP_PKEY_CTX *pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_X25519, NULL);
+ +

For the X448 algorithm a context can be obtained by calling:

+ +
EVP_PKEY_CTX *pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_X448, NULL);
+ +

X25519 or X448 private keys can be set directly using EVP_PKEY_new_raw_private_key(3) or loaded from a PKCS#8 private key file using PEM_read_bio_PrivateKey(3) (or similar function). Completely new keys can also be generated (see the example below). Setting a private key also sets the associated public key.

+ +

X25519 or X448 public keys can be set directly using EVP_PKEY_new_raw_public_key(3) or loaded from a SubjectPublicKeyInfo structure in a PEM file using PEM_read_bio_PUBKEY(3) (or similar function).

+ +

EXAMPLES

+ +

This example generates an X25519 private key and writes it to standard output in PEM format:

+ +
#include <openssl/evp.h>
+#include <openssl/pem.h>
+...
+EVP_PKEY *pkey = NULL;
+EVP_PKEY_CTX *pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_X25519, NULL);
+EVP_PKEY_keygen_init(pctx);
+EVP_PKEY_keygen(pctx, &pkey);
+EVP_PKEY_CTX_free(pctx);
+PEM_write_PrivateKey(stdout, pkey, NULL, NULL, 0, NULL, NULL);
+ +

The key derivation example in EVP_PKEY_derive(3) can be used with X25519 and X448.

+ +

SEE ALSO

+ +

EVP_PKEY_CTX_new(3), EVP_PKEY_keygen(3), EVP_PKEY_derive(3), EVP_PKEY_derive_set_peer(3)

+ +

COPYRIGHT

+ +

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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/bio.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/bio.html new file mode 100644 index 00000000..b62f6e6c --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/bio.html @@ -0,0 +1,72 @@ + + + + +bio + + + + + + + + + + +

NAME

+ +

bio - Basic I/O abstraction

+ +

SYNOPSIS

+ +
#include <openssl/bio.h>
+ +

DESCRIPTION

+ +

A BIO is an I/O abstraction, it hides many of the underlying I/O details from an application. If an application uses a BIO for its I/O it can transparently handle SSL connections, unencrypted network connections and file I/O.

+ +

There are two type of BIO, a source/sink BIO and a filter BIO.

+ +

As its name implies a source/sink BIO is a source and/or sink of data, examples include a socket BIO and a file BIO.

+ +

A filter BIO takes data from one BIO and passes it through to another, or the application. The data may be left unmodified (for example a message digest BIO) or translated (for example an encryption BIO). The effect of a filter BIO may change according to the I/O operation it is performing: for example an encryption BIO will encrypt data if it is being written to and decrypt data if it is being read from.

+ +

BIOs can be joined together to form a chain (a single BIO is a chain with one component). A chain normally consist of one source/sink BIO and one or more filter BIOs. Data read from or written to the first BIO then traverses the chain to the end (normally a source/sink BIO).

+ +

Some BIOs (such as memory BIOs) can be used immediately after calling BIO_new(). Others (such as file BIOs) need some additional initialization, and frequently a utility function exists to create and initialize such BIOs.

+ +

If BIO_free() is called on a BIO chain it will only free one BIO resulting in a memory leak.

+ +

Calling BIO_free_all() on a single BIO has the same effect as calling BIO_free() on it other than the discarded return value.

+ +

Normally the type argument is supplied by a function which returns a pointer to a BIO_METHOD. There is a naming convention for such functions: a source/sink BIO is normally called BIO_s_*() and a filter BIO BIO_f_*();

+ +

EXAMPLES

+ +

Create a memory BIO:

+ +
BIO *mem = BIO_new(BIO_s_mem());
+ +

SEE ALSO

+ +

BIO_ctrl(3), BIO_f_base64(3), BIO_f_buffer(3), BIO_f_cipher(3), BIO_f_md(3), BIO_f_null(3), BIO_f_ssl(3), BIO_find_type(3), BIO_new(3), BIO_new_bio_pair(3), BIO_push(3), BIO_read_ex(3), BIO_s_accept(3), BIO_s_bio(3), BIO_s_connect(3), BIO_s_fd(3), BIO_s_file(3), BIO_s_mem(3), BIO_s_null(3), BIO_s_socket(3), BIO_set_callback(3), BIO_should_retry(3)

+ +

COPYRIGHT

+ +

Copyright 2000-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/crypto.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/crypto.html new file mode 100644 index 00000000..6d7368f8 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/crypto.html @@ -0,0 +1,70 @@ + + + + +crypto + + + + + + + + + + +

NAME

+ +

crypto - OpenSSL cryptographic library

+ +

SYNOPSIS

+ +

See the individual manual pages for details.

+ +

DESCRIPTION

+ +

The OpenSSL crypto library implements a wide range of cryptographic algorithms used in various Internet standards. The services provided by this library are used by the OpenSSL implementations of SSL, TLS and S/MIME, and they have also been used to implement SSH, OpenPGP, and other cryptographic standards.

+ +

libcrypto consists of a number of sub-libraries that implement the individual algorithms.

+ +

The functionality includes symmetric encryption, public key cryptography and key agreement, certificate handling, cryptographic hash functions, cryptographic pseudo-random number generator, and various utilities.

+ +

NOTES

+ +

Some of the newer functions follow a naming convention using the numbers 0 and 1. For example the functions:

+ +
int X509_CRL_add0_revoked(X509_CRL *crl, X509_REVOKED *rev);
+int X509_add1_trust_object(X509 *x, const ASN1_OBJECT *obj);
+ +

The 0 version uses the supplied structure pointer directly in the parent and it will be freed up when the parent is freed. In the above example crl would be freed but rev would not.

+ +

The 1 function uses a copy of the supplied structure pointer (or in some cases increases its link count) in the parent and so both (x and obj above) should be freed up.

+ +

RETURN VALUES

+ +

See the individual manual pages for details.

+ +

SEE ALSO

+ +

openssl(1), ssl(7)

+ +

COPYRIGHT

+ +

Copyright 2000-2016 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/ct.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/ct.html new file mode 100644 index 00000000..2f0c5cd7 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/ct.html @@ -0,0 +1,58 @@ + + + + +ct + + + + + + + + + + +

NAME

+ +

ct - Certificate Transparency

+ +

SYNOPSIS

+ +
#include <openssl/ct.h>
+ +

DESCRIPTION

+ +

This library implements Certificate Transparency (CT) verification for TLS clients, as defined in RFC 6962. This verification can provide some confidence that a certificate has been publicly logged in a set of CT logs.

+ +

By default, these checks are disabled. They can be enabled using SSL_CTX_enable_ct(3) or SSL_enable_ct(3).

+ +

This library can also be used to parse and examine CT data structures, such as Signed Certificate Timestamps (SCTs), or to read a list of CT logs. There are functions for: - decoding and encoding SCTs in DER and TLS wire format. - printing SCTs. - verifying the authenticity of SCTs. - loading a CT log list from a CONF file.

+ +

SEE ALSO

+ +

d2i_SCT_LIST(3), CTLOG_STORE_new(3), CTLOG_STORE_get0_log_by_id(3), SCT_new(3), SCT_print(3), SCT_validate(3), SCT_validate(3), CT_POLICY_EVAL_CTX_new(3), SSL_CTX_set_ct_validation_callback(3)

+ +

HISTORY

+ +

The ct library was added in OpenSSL 1.1.0.

+ +

COPYRIGHT

+ +

Copyright 2016-2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/des_modes.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/des_modes.html new file mode 100644 index 00000000..5a9f6463 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/des_modes.html @@ -0,0 +1,214 @@ + + + + +des_modes + + + + + + + + + + +

NAME

+ +

des_modes - the variants of DES and other crypto algorithms of OpenSSL

+ +

DESCRIPTION

+ +

Several crypto algorithms for OpenSSL can be used in a number of modes. Those are used for using block ciphers in a way similar to stream ciphers, among other things.

+ +

OVERVIEW

+ +

Electronic Codebook Mode (ECB)

+ +

Normally, this is found as the function algorithm_ecb_encrypt().

+ +
    + +
  • 64 bits are enciphered at a time.

    + +
  • +
  • The order of the blocks can be rearranged without detection.

    + +
  • +
  • The same plaintext block always produces the same ciphertext block (for the same key) making it vulnerable to a 'dictionary attack'.

    + +
  • +
  • An error will only affect one ciphertext block.

    + +
  • +
+ +

Cipher Block Chaining Mode (CBC)

+ +

Normally, this is found as the function algorithm_cbc_encrypt(). Be aware that des_cbc_encrypt() is not really DES CBC (it does not update the IV); use des_ncbc_encrypt() instead.

+ +
    + +
  • a multiple of 64 bits are enciphered at a time.

    + +
  • +
  • The CBC mode produces the same ciphertext whenever the same plaintext is encrypted using the same key and starting variable.

    + +
  • +
  • The chaining operation makes the ciphertext blocks dependent on the current and all preceding plaintext blocks and therefore blocks can not be rearranged.

    + +
  • +
  • The use of different starting variables prevents the same plaintext enciphering to the same ciphertext.

    + +
  • +
  • An error will affect the current and the following ciphertext blocks.

    + +
  • +
+ +

Cipher Feedback Mode (CFB)

+ +

Normally, this is found as the function algorithm_cfb_encrypt().

+ +
    + +
  • a number of bits (j) <= 64 are enciphered at a time.

    + +
  • +
  • The CFB mode produces the same ciphertext whenever the same plaintext is encrypted using the same key and starting variable.

    + +
  • +
  • The chaining operation makes the ciphertext variables dependent on the current and all preceding variables and therefore j-bit variables are chained together and can not be rearranged.

    + +
  • +
  • The use of different starting variables prevents the same plaintext enciphering to the same ciphertext.

    + +
  • +
  • The strength of the CFB mode depends on the size of k (maximal if j == k). In my implementation this is always the case.

    + +
  • +
  • Selection of a small value for j will require more cycles through the encipherment algorithm per unit of plaintext and thus cause greater processing overheads.

    + +
  • +
  • Only multiples of j bits can be enciphered.

    + +
  • +
  • An error will affect the current and the following ciphertext variables.

    + +
  • +
+ +

Output Feedback Mode (OFB)

+ +

Normally, this is found as the function algorithm_ofb_encrypt().

+ +
    + +
  • a number of bits (j) <= 64 are enciphered at a time.

    + +
  • +
  • The OFB mode produces the same ciphertext whenever the same plaintext enciphered using the same key and starting variable. More over, in the OFB mode the same key stream is produced when the same key and start variable are used. Consequently, for security reasons a specific start variable should be used only once for a given key.

    + +
  • +
  • The absence of chaining makes the OFB more vulnerable to specific attacks.

    + +
  • +
  • The use of different start variables values prevents the same plaintext enciphering to the same ciphertext, by producing different key streams.

    + +
  • +
  • Selection of a small value for j will require more cycles through the encipherment algorithm per unit of plaintext and thus cause greater processing overheads.

    + +
  • +
  • Only multiples of j bits can be enciphered.

    + +
  • +
  • OFB mode of operation does not extend ciphertext errors in the resultant plaintext output. Every bit error in the ciphertext causes only one bit to be in error in the deciphered plaintext.

    + +
  • +
  • OFB mode is not self-synchronizing. If the two operation of encipherment and decipherment get out of synchronism, the system needs to be re-initialized.

    + +
  • +
  • Each re-initialization should use a value of the start variable different from the start variable values used before with the same key. The reason for this is that an identical bit stream would be produced each time from the same parameters. This would be susceptible to a 'known plaintext' attack.

    + +
  • +
+ +

Triple ECB Mode

+ +

Normally, this is found as the function algorithm_ecb3_encrypt().

+ +
    + +
  • Encrypt with key1, decrypt with key2 and encrypt with key3 again.

    + +
  • +
  • As for ECB encryption but increases the key length to 168 bits. There are theoretic attacks that can be used that make the effective key length 112 bits, but this attack also requires 2^56 blocks of memory, not very likely, even for the NSA.

    + +
  • +
  • If both keys are the same it is equivalent to encrypting once with just one key.

    + +
  • +
  • If the first and last key are the same, the key length is 112 bits. There are attacks that could reduce the effective key strength to only slightly more than 56 bits, but these require a lot of memory.

    + +
  • +
  • If all 3 keys are the same, this is effectively the same as normal ecb mode.

    + +
  • +
+ +

Triple CBC Mode

+ +

Normally, this is found as the function algorithm_ede3_cbc_encrypt().

+ +
    + +
  • Encrypt with key1, decrypt with key2 and then encrypt with key3.

    + +
  • +
  • As for CBC encryption but increases the key length to 168 bits with the same restrictions as for triple ecb mode.

    + +
  • +
+ +

NOTES

+ +

This text was been written in large parts by Eric Young in his original documentation for SSLeay, the predecessor of OpenSSL. In turn, he attributed it to:

+ +
AS 2805.5.2
+Australian Standard
+Electronic funds transfer - Requirements for interfaces,
+Part 5.2: Modes of operation for an n-bit block cipher algorithm
+Appendix A
+ +

SEE ALSO

+ +

BF_encrypt(3), DES_crypt(3)

+ +

COPYRIGHT

+ +

Copyright 2000-2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/evp.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/evp.html new file mode 100644 index 00000000..845874ce --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/evp.html @@ -0,0 +1,83 @@ + + + + +evp + + + + + + + + + + +

NAME

+ +

evp - high-level cryptographic functions

+ +

SYNOPSIS

+ +
#include <openssl/evp.h>
+ +

DESCRIPTION

+ +

The EVP library provides a high-level interface to cryptographic functions.

+ +

The EVP_SealXXX and EVP_OpenXXX functions provide public key encryption and decryption to implement digital "envelopes".

+ +

The EVP_DigestSignXXX and EVP_DigestVerifyXXX functions implement digital signatures and Message Authentication Codes (MACs). Also see the older EVP_SignXXX and EVP_VerifyXXX functions.

+ +

Symmetric encryption is available with the EVP_EncryptXXX functions. The EVP_DigestXXX functions provide message digests.

+ +

The EVP_PKEYXXX functions provide a high level interface to asymmetric algorithms. To create a new EVP_PKEY see EVP_PKEY_new(3). EVP_PKEYs can be associated with a private key of a particular algorithm by using the functions described on the EVP_PKEY_set1_RSA(3) page, or new keys can be generated using EVP_PKEY_keygen(3). EVP_PKEYs can be compared using EVP_PKEY_cmp(3), or printed using EVP_PKEY_print_private(3).

+ +

The EVP_PKEY functions support the full range of asymmetric algorithm operations:

+ +
+ +
For key agreement see EVP_PKEY_derive(3)
+
+ +
+
For signing and verifying see EVP_PKEY_sign(3), EVP_PKEY_verify(3) and EVP_PKEY_verify_recover(3). However, note that these functions do not perform a digest of the data to be signed. Therefore normally you would use the EVP_DigestSignInit(3) functions for this purpose.
+
+ +
+
For encryption and decryption see EVP_PKEY_encrypt(3) and EVP_PKEY_decrypt(3) respectively. However, note that these functions perform encryption and decryption only. As public key encryption is an expensive operation, normally you would wrap an encrypted message in a "digital envelope" using the EVP_SealInit(3) and EVP_OpenInit(3) functions.
+
+ +
+
+ +

The EVP_BytesToKey(3) function provides some limited support for password based encryption. Careful selection of the parameters will provide a PKCS#5 PBKDF1 compatible implementation. However, new applications should not typically use this (preferring, for example, PBKDF2 from PCKS#5).

+ +

The EVP_EncodeXXX and EVP_DecodeXXX functions implement base 64 encoding and decoding.

+ +

All the symmetric algorithms (ciphers), digests and asymmetric algorithms (public key algorithms) can be replaced by ENGINE modules providing alternative implementations. If ENGINE implementations of ciphers or digests are registered as defaults, then the various EVP functions will automatically use those implementations automatically in preference to built in software implementations. For more information, consult the engine(3) man page.

+ +

Although low level algorithm specific functions exist for many algorithms their use is discouraged. They cannot be used with an ENGINE and ENGINE versions of new algorithms cannot be accessed using the low level functions. Also makes code harder to adapt to new algorithms and some options are not cleanly supported at the low level and some operations are more efficient using the high level interface.

+ +

SEE ALSO

+ +

EVP_DigestInit(3), EVP_EncryptInit(3), EVP_OpenInit(3), EVP_SealInit(3), EVP_DigestSignInit(3), EVP_SignInit(3), EVP_VerifyInit(3), EVP_EncodeInit(3), EVP_PKEY_new(3), EVP_PKEY_set1_RSA(3), EVP_PKEY_keygen(3), EVP_PKEY_print_private(3), EVP_PKEY_decrypt(3), EVP_PKEY_encrypt(3), EVP_PKEY_sign(3), EVP_PKEY_verify(3), EVP_PKEY_verify_recover(3), EVP_PKEY_derive(3), EVP_BytesToKey(3), ENGINE_by_id(3)

+ +

COPYRIGHT

+ +

Copyright 2000-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/ossl_store-file.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/ossl_store-file.html new file mode 100644 index 00000000..90cec832 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/ossl_store-file.html @@ -0,0 +1,60 @@ + + + + +ossl_store-file + + + + + + + + + + +

NAME

+ +

ossl_store-file - The store 'file' scheme loader

+ +

SYNOPSIS

+ +

#include <openssl/store.h>

+ +

DESCRIPTION

+ +

Support for the 'file' scheme is built into libcrypto. Since files come in all kinds of formats and content types, the 'file' scheme has its own layer of functionality called "file handlers", which are used to try to decode diverse types of file contents.

+ +

In case a file is formatted as PEM, each called file handler receives the PEM name (everything following any '-----BEGIN ') as well as possible PEM headers, together with the decoded PEM body. Since PEM formatted files can contain more than one object, the file handlers are called upon for each such object.

+ +

If the file isn't determined to be formatted as PEM, the content is loaded in raw form in its entirety and passed to the available file handlers as is, with no PEM name or headers.

+ +

Each file handler is expected to handle PEM and non-PEM content as appropriate. Some may refuse non-PEM content for the sake of determinism (for example, there are keys out in the wild that are represented as an ASN.1 OCTET STRING. In raw form, it's not easily possible to distinguish those from any other data coming as an ASN.1 OCTET STRING, so such keys would naturally be accepted as PEM files only).

+ +

NOTES

+ +

When needed, the 'file' scheme loader will require a pass phrase by using the UI_METHOD that was passed via OSSL_STORE_open(). This pass phrase is expected to be UTF-8 encoded, anything else will give an undefined result. The files made accessible through this loader are expected to be standard compliant with regards to pass phrase encoding. Files that aren't should be re-generated with a correctly encoded pass phrase. See passphrase-encoding(7) for more information.

+ +

SEE ALSO

+ +

ossl_store(7), passphrase-encoding(7)

+ +

COPYRIGHT

+ +

Copyright 2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/ossl_store.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/ossl_store.html new file mode 100644 index 00000000..92bdfb2e --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/ossl_store.html @@ -0,0 +1,105 @@ + + + + +ossl_store + + + + + + + + + + +

NAME

+ +

ossl_store - Store retrieval functions

+ +

SYNOPSIS

+ +

#include <openssl/store.h>

+ +

DESCRIPTION

+ +

General

+ +

A STORE is a layer of functionality to retrieve a number of supported objects from a repository of any kind, addressable as a file name or as a URI.

+ +

The functionality supports the pattern "open a channel to the repository", "loop and retrieve one object at a time", and "finish up by closing the channel".

+ +

The retrieved objects are returned as a wrapper type OSSL_STORE_INFO, from which an OpenSSL type can be retrieved.

+ +

URI schemes and loaders

+ +

Support for a URI scheme is called a STORE "loader", and can be added dynamically from the calling application or from a loadable engine.

+ +

Support for the 'file' scheme is built into libcrypto. See ossl_store-file(7) for more information.

+ +

UI_METHOD and pass phrases

+ +

The OSS_STORE API does nothing to enforce any specific format or encoding on the pass phrase that the UI_METHOD provides. However, the pass phrase is expected to be UTF-8 encoded. The result of any other encoding is undefined.

+ +

EXAMPLES

+ +

A generic call

+ +
OSSL_STORE_CTX *ctx = OSSL_STORE_open("file:/foo/bar/data.pem");
+
+/*
+ * OSSL_STORE_eof() simulates file semantics for any repository to signal
+ * that no more data can be expected
+ */
+while (!OSSL_STORE_eof(ctx)) {
+    OSSL_STORE_INFO *info = OSSL_STORE_load(ctx);
+
+    /*
+     * Do whatever is necessary with the OSSL_STORE_INFO,
+     * here just one example
+     */
+    switch (OSSL_STORE_INFO_get_type(info)) {
+    case OSSL_STORE_INFO_X509:
+        /* Print the X.509 certificate text */
+        X509_print_fp(stdout, OSSL_STORE_INFO_get0_CERT(info));
+        /* Print the X.509 certificate PEM output */
+        PEM_write_X509(stdout, OSSL_STORE_INFO_get0_CERT(info));
+        break;
+    }
+}
+
+OSSL_STORE_close(ctx);
+ +

SEE ALSO

+ +

OSSL_STORE_INFO(3), OSSL_STORE_LOADER(3), OSSL_STORE_open(3), OSSL_STORE_expect(3), OSSL_STORE_SEARCH(3)

+ +

COPYRIGHT

+ +

Copyright 2016-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/passphrase-encoding.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/passphrase-encoding.html new file mode 100644 index 00000000..ecb16660 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/passphrase-encoding.html @@ -0,0 +1,124 @@ + + + + +passphrase-encoding + + + + + + + + + + +

NAME

+ +

passphrase-encoding - How diverse parts of OpenSSL treat pass phrases character encoding

+ +

DESCRIPTION

+ +

In a modern world with all sorts of character encodings, the treatment of pass phrases has become increasingly complex. This manual page attempts to give an overview over how this problem is currently addressed in different parts of the OpenSSL library.

+ +

The general case

+ +

The OpenSSL library doesn't treat pass phrases in any special way as a general rule, and trusts the application or user to choose a suitable character set and stick to that throughout the lifetime of affected objects. This means that for an object that was encrypted using a pass phrase encoded in ISO-8859-1, that object needs to be decrypted using a pass phrase encoded in ISO-8859-1. Using the wrong encoding is expected to cause a decryption failure.

+ +

PKCS#12

+ +

PKCS#12 is a bit different regarding pass phrase encoding. The standard stipulates that the pass phrase shall be encoded as an ASN.1 BMPString, which consists of the code points of the basic multilingual plane, encoded in big endian (UCS-2 BE).

+ +

OpenSSL tries to adapt to this requirements in one of the following manners:

+ +
    + +
  1. Treats the received pass phrase as UTF-8 encoded and tries to re-encode it to UTF-16 (which is the same as UCS-2 for characters U+0000 to U+D7FF and U+E000 to U+FFFF, but becomes an expansion for any other character), or failing that, proceeds with step 2.

    + +
  2. +
  3. Assumes that the pass phrase is encoded in ASCII or ISO-8859-1 and opportunistically prepends each byte with a zero byte to obtain the UCS-2 encoding of the characters, which it stores as a BMPString.

    + +

    Note that since there is no check of your locale, this may produce UCS-2 / UTF-16 characters that do not correspond to the original pass phrase characters for other character sets, such as any ISO-8859-X encoding other than ISO-8859-1 (or for Windows, CP 1252 with exception for the extra "graphical" characters in the 0x80-0x9F range).

    + +
  4. +
+ +

OpenSSL versions older than 1.1.0 do variant 2 only, and that is the reason why OpenSSL still does this, to be able to read files produced with older versions.

+ +

It should be noted that this approach isn't entirely fault free.

+ +

A pass phrase encoded in ISO-8859-2 could very well have a sequence such as 0xC3 0xAF (which is the two characters "LATIN CAPITAL LETTER A WITH BREVE" and "LATIN CAPITAL LETTER Z WITH DOT ABOVE" in ISO-8859-2 encoding), but would be misinterpreted as the perfectly valid UTF-8 encoded code point U+00EF (LATIN SMALL LETTER I WITH DIAERESIS) if the pass phrase doesn't contain anything that would be invalid UTF-8. A pass phrase that contains this kind of byte sequence will give a different outcome in OpenSSL 1.1.0 and newer than in OpenSSL older than 1.1.0.

+ +
0x00 0xC3 0x00 0xAF                    # OpenSSL older than 1.1.0
+0x00 0xEF                              # OpenSSL 1.1.0 and newer
+ +

On the same accord, anything encoded in UTF-8 that was given to OpenSSL older than 1.1.0 was misinterpreted as ISO-8859-1 sequences.

+ +

OSSL_STORE

+ +

ossl_store(7) acts as a general interface to access all kinds of objects, potentially protected with a pass phrase, a PIN or something else. This API stipulates that pass phrases should be UTF-8 encoded, and that any other pass phrase encoding may give undefined results. This API relies on the application to ensure UTF-8 encoding, and doesn't check that this is the case, so what it gets, it will also pass to the underlying loader.

+ +

RECOMMENDATIONS

+ +

This section assumes that you know what pass phrase was used for encryption, but that it may have been encoded in a different character encoding than the one used by your current input method. For example, the pass phrase may have been used at a time when your default encoding was ISO-8859-1 (i.e. "naïve" resulting in the byte sequence 0x6E 0x61 0xEF 0x76 0x65), and you're now in an environment where your default encoding is UTF-8 (i.e. "naïve" resulting in the byte sequence 0x6E 0x61 0xC3 0xAF 0x76 0x65). Whenever it's mentioned that you should use a certain character encoding, it should be understood that you either change the input method to use the mentioned encoding when you type in your pass phrase, or use some suitable tool to convert your pass phrase from your default encoding to the target encoding.

+ +

Also note that the sub-sections below discuss human readable pass phrases. This is particularly relevant for PKCS#12 objects, where human readable pass phrases are assumed. For other objects, it's as legitimate to use any byte sequence (such as a sequence of bytes from `/dev/urandom` that's been saved away), which makes any character encoding discussion irrelevant; in such cases, simply use the same byte sequence as it is.

+ +

Creating new objects

+ +

For creating new pass phrase protected objects, make sure the pass phrase is encoded using UTF-8. This is default on most modern Unixes, but may involve an effort on other platforms. Specifically for Windows, setting the environment variable OPENSSL_WIN32_UTF8 will have anything entered on [Windows] console prompt converted to UTF-8 (command line and separately prompted pass phrases alike).

+ +

Opening existing objects

+ +

For opening pass phrase protected objects where you know what character encoding was used for the encryption pass phrase, make sure to use the same encoding again.

+ +

For opening pass phrase protected objects where the character encoding that was used is unknown, or where the producing application is unknown, try one of the following:

+ +
    + +
  1. Try the pass phrase that you have as it is in the character encoding of your environment. It's possible that its byte sequence is exactly right.

    + +
  2. +
  3. Convert the pass phrase to UTF-8 and try with the result. Specifically with PKCS#12, this should open up any object that was created according to the specification.

    + +
  4. +
  5. Do a naïve (i.e. purely mathematical) ISO-8859-1 to UTF-8 conversion and try with the result. This differs from the previous attempt because ISO-8859-1 maps directly to U+0000 to U+00FF, which other non-UTF-8 character sets do not.

    + +

    This also takes care of the case when a UTF-8 encoded string was used with OpenSSL older than 1.1.0. (for example, ï, which is 0xC3 0xAF when encoded in UTF-8, would become 0xC3 0x83 0xC2 0xAF when re-encoded in the naïve manner. The conversion to BMPString would then yield 0x00 0xC3 0x00 0xA4 0x00 0x00, the erroneous/non-compliant encoding used by OpenSSL older than 1.1.0)

    + +
  6. +
+ +

SEE ALSO

+ +

evp(7), ossl_store(7), EVP_BytesToKey(3), EVP_DecryptInit(3), PEM_do_header(3), PKCS12_parse(3), PKCS12_newpass(3), d2i_PKCS8PrivateKey_bio(3)

+ +

COPYRIGHT

+ +

Copyright 2018-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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/proxy-certificates.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/proxy-certificates.html new file mode 100644 index 00000000..fdb0601f --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/proxy-certificates.html @@ -0,0 +1,345 @@ + + + + +proxy-certificates + + + + + + + + + + +

NAME

+ +

proxy-certificates - Proxy certificates in OpenSSL

+ +

DESCRIPTION

+ +

Proxy certificates are defined in RFC 3820. They are used to extend rights to some other entity (a computer process, typically, or sometimes to the user itself). This allows the entity to perform operations on behalf of the owner of the EE (End Entity) certificate.

+ +

The requirements for a valid proxy certificate are:

+ +
    + +
  • They are issued by an End Entity, either a normal EE certificate, or another proxy certificate.

    + +
  • +
  • They must not have the subjectAltName or issuerAltName extensions.

    + +
  • +
  • They must have the proxyCertInfo extension.

    + +
  • +
  • They must have the subject of their issuer, with one commonName added.

    + +
  • +
+ +

Enabling proxy certificate verification

+ +

OpenSSL expects applications that want to use proxy certificates to be specially aware of them, and make that explicit. This is done by setting an X509 verification flag:

+ +
X509_STORE_CTX_set_flags(ctx, X509_V_FLAG_ALLOW_PROXY_CERTS);
+ +

or

+ +
X509_VERIFY_PARAM_set_flags(param, X509_V_FLAG_ALLOW_PROXY_CERTS);
+ +

See "NOTES" for a discussion on this requirement.

+ +

Creating proxy certificates

+ +

Creating proxy certificates can be done using the openssl-x509(1) command, with some extra extensions:

+ +
[ v3_proxy ]
+# A proxy certificate MUST NEVER be a CA certificate.
+basicConstraints=CA:FALSE
+
+# Usual authority key ID
+authorityKeyIdentifier=keyid,issuer:always
+
+# The extension which marks this certificate as a proxy
+proxyCertInfo=critical,language:id-ppl-anyLanguage,pathlen:1,policy:text:AB
+ +

It's also possible to specify the proxy extension in a separate section:

+ +
proxyCertInfo=critical,@proxy_ext
+
+[ proxy_ext ]
+language=id-ppl-anyLanguage
+pathlen=0
+policy=text:BC
+ +

The policy value has a specific syntax, syntag:string, where the syntag determines what will be done with the string. The following syntags are recognised:

+ +
+ +
text
+
+ +

indicates that the string is a byte sequence, without any encoding:

+ +
policy=text:räksmörgås
+ +
+
hex
+
+ +

indicates the string is encoded hexadecimal encoded binary data, with colons between each byte (every second hex digit):

+ +
policy=hex:72:E4:6B:73:6D:F6:72:67:E5:73
+ +
+
file
+
+ +

indicates that the text of the policy should be taken from a file. The string is then a filename. This is useful for policies that are large (more than a few lines, e.g. XML documents).

+ +
+
+ +

NOTE: The proxy policy value is what determines the rights granted to the process during the proxy certificate. It's up to the application to interpret and combine these policies.

+ +

With a proxy extension, creating a proxy certificate is a matter of two commands:

+ +
openssl req -new -config proxy.cnf \
+    -out proxy.req -keyout proxy.key \
+    -subj "/DC=org/DC=openssl/DC=users/CN=proxy 1"
+
+openssl x509 -req -CAcreateserial -in proxy.req -out proxy.crt \
+    -CA user.crt -CAkey user.key -days 7 \
+    -extfile proxy.cnf -extensions v3_proxy1
+ +

You can also create a proxy certificate using another proxy certificate as issuer (note: using a different configuration section for the proxy extensions):

+ +
openssl req -new -config proxy.cnf \
+    -out proxy2.req -keyout proxy2.key \
+    -subj "/DC=org/DC=openssl/DC=users/CN=proxy 1/CN=proxy 2"
+
+openssl x509 -req -CAcreateserial -in proxy2.req -out proxy2.crt \
+    -CA proxy.crt -CAkey proxy.key -days 7 \
+    -extfile proxy.cnf -extensions v3_proxy2
+ +

Using proxy certs in applications

+ +

To interpret proxy policies, the application would normally start with some default rights (perhaps none at all), then compute the resulting rights by checking the rights against the chain of proxy certificates, user certificate and CA certificates.

+ +

The complicated part is figuring out how to pass data between your application and the certificate validation procedure.

+ +

The following ingredients are needed for such processing:

+ +
    + +
  • a callback function that will be called for every certificate being validated. The callback is called several times for each certificate, so you must be careful to do the proxy policy interpretation at the right time. You also need to fill in the defaults when the EE certificate is checked.

    + +
  • +
  • a data structure that is shared between your application code and the callback.

    + +
  • +
  • a wrapper function that sets it all up.

    + +
  • +
  • an ex_data index function that creates an index into the generic ex_data store that is attached to an X509 validation context.

    + +
  • +
+ +

The following skeleton code can be used as a starting point:

+ +
#include <string.h>
+#include <netdb.h>
+#include <openssl/x509.h>
+#include <openssl/x509v3.h>
+
+#define total_rights 25
+
+/*
+ * In this example, I will use a view of granted rights as a bit
+ * array, one bit for each possible right.
+ */
+typedef struct your_rights {
+    unsigned char rights[(total_rights + 7) / 8];
+} YOUR_RIGHTS;
+
+/*
+ * The following procedure will create an index for the ex_data
+ * store in the X509 validation context the first time it's
+ * called.  Subsequent calls will return the same index.
+ */
+static int get_proxy_auth_ex_data_idx(X509_STORE_CTX *ctx)
+{
+    static volatile int idx = -1;
+
+    if (idx < 0) {
+        X509_STORE_lock(X509_STORE_CTX_get0_store(ctx));
+        if (idx < 0) {
+            idx = X509_STORE_CTX_get_ex_new_index(0,
+                                                  "for verify callback",
+                                                  NULL,NULL,NULL);
+        }
+        X509_STORE_unlock(X509_STORE_CTX_get0_store(ctx));
+    }
+    return idx;
+}
+
+/* Callback to be given to the X509 validation procedure.  */
+static int verify_callback(int ok, X509_STORE_CTX *ctx)
+{
+    if (ok == 1) {
+        /*
+         * It's REALLY important you keep the proxy policy check
+         * within this section.  It's important to know that when
+         * ok is 1, the certificates are checked from top to
+         * bottom.  You get the CA root first, followed by the
+         * possible chain of intermediate CAs, followed by the EE
+         * certificate, followed by the possible proxy
+         * certificates. 
+         */
+        X509 *xs = X509_STORE_CTX_get_current_cert(ctx);
+
+        if (X509_get_extension_flags(xs) & EXFLAG_PROXY) {
+            YOUR_RIGHTS *rights =
+                (YOUR_RIGHTS *)X509_STORE_CTX_get_ex_data(ctx,
+                    get_proxy_auth_ex_data_idx(ctx));
+            PROXY_CERT_INFO_EXTENSION *pci =
+                X509_get_ext_d2i(xs, NID_proxyCertInfo, NULL, NULL);
+
+            switch (OBJ_obj2nid(pci->proxyPolicy->policyLanguage)) {
+            case NID_Independent:
+                /*
+                 * Do whatever you need to grant explicit rights
+                 * to this particular proxy certificate, usually
+                 * by pulling them from some database.  If there
+                 * are none to be found, clear all rights (making
+                 * this and any subsequent proxy certificate void
+                 * of any rights). 
+                 */
+                memset(rights->rights, 0, sizeof(rights->rights));
+                break;
+            case NID_id_ppl_inheritAll:
+                /*
+                 * This is basically a NOP, we simply let the
+                 * current rights stand as they are.
+                 */
+                break;
+            default:
+                /*
+                 * This is usually the most complex section of
+                 * code.  You really do whatever you want as long
+                 * as you follow RFC 3820.  In the example we use
+                 * here, the simplest thing to do is to build
+                 * another, temporary bit array and fill it with
+                 * the rights granted by the current proxy
+                 * certificate, then use it as a mask on the
+                 * accumulated rights bit array, and voilà, you
+                 * now have a new accumulated rights bit array.
+                 */
+                {
+                    int i;
+                    YOUR_RIGHTS tmp_rights;
+                    memset(tmp_rights.rights, 0,
+                           sizeof(tmp_rights.rights));
+
+                    /*
+                     * process_rights() is supposed to be a
+                     * procedure that takes a string and its
+                     * length, interprets it and sets the bits
+                     * in the YOUR_RIGHTS pointed at by the
+                     * third argument.
+                     */
+                    process_rights((char *) pci->proxyPolicy->policy->data,
+                                   pci->proxyPolicy->policy->length,
+                                   &tmp_rights);
+
+                    for(i = 0; i < total_rights / 8; i++)
+                        rights->rights[i] &= tmp_rights.rights[i];
+                }
+                break;
+            }
+            PROXY_CERT_INFO_EXTENSION_free(pci);
+        } else if (!(X509_get_extension_flags(xs) & EXFLAG_CA)) {
+            /* We have an EE certificate, let's use it to set default! */
+            YOUR_RIGHTS *rights =
+                (YOUR_RIGHTS *)X509_STORE_CTX_get_ex_data(ctx,
+                    get_proxy_auth_ex_data_idx(ctx));
+
+            /*
+             * The following procedure finds out what rights the
+             * owner of the current certificate has, and sets them
+             * in the YOUR_RIGHTS structure pointed at by the
+             * second argument.
+             */
+            set_default_rights(xs, rights);
+        }
+    }
+    return ok;
+}
+
+static int my_X509_verify_cert(X509_STORE_CTX *ctx,
+                               YOUR_RIGHTS *needed_rights)
+{
+    int ok;
+    int (*save_verify_cb)(int ok,X509_STORE_CTX *ctx) =
+        X509_STORE_CTX_get_verify_cb(ctx);
+    YOUR_RIGHTS rights;
+
+    X509_STORE_CTX_set_verify_cb(ctx, verify_callback);
+    X509_STORE_CTX_set_ex_data(ctx, get_proxy_auth_ex_data_idx(ctx),
+                               &rights);
+    X509_STORE_CTX_set_flags(ctx, X509_V_FLAG_ALLOW_PROXY_CERTS);
+    ok = X509_verify_cert(ctx);
+
+    if (ok == 1) {
+        ok = check_needed_rights(rights, needed_rights);
+    }
+
+    X509_STORE_CTX_set_verify_cb(ctx, save_verify_cb);
+
+    return ok;
+}
+ +

If you use SSL or TLS, you can easily set up a callback to have the certificates checked properly, using the code above:

+ +
SSL_CTX_set_cert_verify_callback(s_ctx, my_X509_verify_cert,
+                                 &needed_rights);
+ +

NOTES

+ +

To this date, it seems that proxy certificates have only been used in environments that are aware of them, and no one seems to have investigated how they can be used or misused outside of such an environment.

+ +

For that reason, OpenSSL requires that applications aware of proxy certificates must also make that explicit.

+ +

subjectAltName and issuerAltName are forbidden in proxy certificates, and this is enforced in OpenSSL. The subject must be the same as the issuer, with one commonName added on.

+ +

SEE ALSO

+ +

X509_STORE_CTX_set_flags(3), X509_STORE_CTX_set_verify_cb(3), X509_VERIFY_PARAM_set_flags(3), SSL_CTX_set_cert_verify_callback(3), openssl-req(1), openssl-x509(1), RFC 3820

+ +

COPYRIGHT

+ +

Copyright 2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/scrypt.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/scrypt.html new file mode 100644 index 00000000..32045c3a --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/scrypt.html @@ -0,0 +1,112 @@ + + + + +scrypt + + + + + + + + + + +

NAME

+ +

scrypt - EVP_PKEY scrypt KDF support

+ +

DESCRIPTION

+ +

The EVP_PKEY_SCRYPT algorithm implements the scrypt password based key derivation function, as described in RFC 7914. It is memory-hard in the sense that it deliberately requires a significant amount of RAM for efficient computation. The intention of this is to render brute forcing of passwords on systems that lack large amounts of main memory (such as GPUs or ASICs) computationally infeasible.

+ +

scrypt provides three work factors that can be customized: N, r and p. N, which has to be a positive power of two, is the general work factor and scales CPU time in an approximately linear fashion. r is the block size of the internally used hash function and p is the parallelization factor. Both r and p need to be greater than zero. The amount of RAM that scrypt requires for its computation is roughly (128 * N * r * p) bytes.

+ +

In the original paper of Colin Percival ("Stronger Key Derivation via Sequential Memory-Hard Functions", 2009), the suggested values that give a computation time of less than 5 seconds on a 2.5 GHz Intel Core 2 Duo are N = 2^20 = 1048576, r = 8, p = 1. Consequently, the required amount of memory for this computation is roughly 1 GiB. On a more recent CPU (Intel i7-5930K at 3.5 GHz), this computation takes about 3 seconds. When N, r or p are not specified, they default to 1048576, 8, and 1, respectively. The default amount of RAM that may be used by scrypt defaults to 1025 MiB.

+ +

NOTES

+ +

A context for scrypt can be obtained by calling:

+ +
EVP_PKEY_CTX *pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_SCRYPT, NULL);
+ +

The output length of an scrypt key derivation is specified via the length parameter to the EVP_PKEY_derive(3) function.

+ +

EXAMPLES

+ +

This example derives a 64-byte long test vector using scrypt using the password "password", salt "NaCl" and N = 1024, r = 8, p = 16.

+ +
EVP_PKEY_CTX *pctx;
+unsigned char out[64];
+
+size_t outlen = sizeof(out);
+pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_SCRYPT, NULL);
+
+if (EVP_PKEY_derive_init(pctx) <= 0) {
+    error("EVP_PKEY_derive_init");
+}
+if (EVP_PKEY_CTX_set1_pbe_pass(pctx, "password", 8) <= 0) {
+    error("EVP_PKEY_CTX_set1_pbe_pass");
+}
+if (EVP_PKEY_CTX_set1_scrypt_salt(pctx, "NaCl", 4) <= 0) {
+    error("EVP_PKEY_CTX_set1_scrypt_salt");
+}
+if (EVP_PKEY_CTX_set_scrypt_N(pctx, 1024) <= 0) {
+    error("EVP_PKEY_CTX_set_scrypt_N");
+}
+if (EVP_PKEY_CTX_set_scrypt_r(pctx, 8) <= 0) {
+    error("EVP_PKEY_CTX_set_scrypt_r");
+}
+if (EVP_PKEY_CTX_set_scrypt_p(pctx, 16) <= 0) {
+    error("EVP_PKEY_CTX_set_scrypt_p");
+}
+if (EVP_PKEY_derive(pctx, out, &outlen) <= 0) {
+    error("EVP_PKEY_derive");
+}
+
+{
+    const unsigned char expected[sizeof(out)] = {
+        0xfd, 0xba, 0xbe, 0x1c, 0x9d, 0x34, 0x72, 0x00,
+        0x78, 0x56, 0xe7, 0x19, 0x0d, 0x01, 0xe9, 0xfe,
+        0x7c, 0x6a, 0xd7, 0xcb, 0xc8, 0x23, 0x78, 0x30,
+        0xe7, 0x73, 0x76, 0x63, 0x4b, 0x37, 0x31, 0x62,
+        0x2e, 0xaf, 0x30, 0xd9, 0x2e, 0x22, 0xa3, 0x88,
+        0x6f, 0xf1, 0x09, 0x27, 0x9d, 0x98, 0x30, 0xda,
+        0xc7, 0x27, 0xaf, 0xb9, 0x4a, 0x83, 0xee, 0x6d,
+        0x83, 0x60, 0xcb, 0xdf, 0xa2, 0xcc, 0x06, 0x40
+    };
+
+    assert(!memcmp(out, expected, sizeof(out)));
+}
+
+EVP_PKEY_CTX_free(pctx);
+ +

CONFORMING TO

+ +

RFC 7914

+ +

SEE ALSO

+ +

EVP_PKEY_CTX_set1_scrypt_salt(3), EVP_PKEY_CTX_set_scrypt_N(3), EVP_PKEY_CTX_set_scrypt_r(3), EVP_PKEY_CTX_set_scrypt_p(3), EVP_PKEY_CTX_set_scrypt_maxmem_bytes(3), EVP_PKEY_CTX_new(3), EVP_PKEY_CTX_ctrl_str(3), EVP_PKEY_derive(3)

+ +

COPYRIGHT

+ +

Copyright 2017-2019 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/ssl.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/ssl.html new file mode 100644 index 00000000..5dfbfcdf --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/ssl.html @@ -0,0 +1,1248 @@ + + + + +ssl + + + + + + + + + + +

NAME

+ +

ssl - OpenSSL SSL/TLS library

+ +

SYNOPSIS

+ +

See the individual manual pages for details.

+ +

DESCRIPTION

+ +

The OpenSSL ssl library implements the Secure Sockets Layer (SSL v2/v3) and Transport Layer Security (TLS v1) protocols. It provides a rich API which is documented here.

+ +

An SSL_CTX object is created as a framework to establish TLS/SSL enabled connections (see SSL_CTX_new(3)). Various options regarding certificates, algorithms etc. can be set in this object.

+ +

When a network connection has been created, it can be assigned to an SSL object. After the SSL object has been created using SSL_new(3), SSL_set_fd(3) or SSL_set_bio(3) can be used to associate the network connection with the object.

+ +

When the TLS/SSL handshake is performed using SSL_accept(3) or SSL_connect(3) respectively. SSL_read_ex(3), SSL_read(3), SSL_write_ex(3) and SSL_write(3) are used to read and write data on the TLS/SSL connection. SSL_shutdown(3) can be used to shut down the TLS/SSL connection.

+ +

DATA STRUCTURES

+ +

Currently the OpenSSL ssl library functions deals with the following data structures:

+ +
+ +
SSL_METHOD (SSL Method)
+
+ +

This is a dispatch structure describing the internal ssl library methods/functions which implement the various protocol versions (SSLv3 TLSv1, ...). It's needed to create an SSL_CTX.

+ +
+
SSL_CIPHER (SSL Cipher)
+
+ +

This structure holds the algorithm information for a particular cipher which are a core part of the SSL/TLS protocol. The available ciphers are configured on a SSL_CTX basis and the actual ones used are then part of the SSL_SESSION.

+ +
+
SSL_CTX (SSL Context)
+
+ +

This is the global context structure which is created by a server or client once per program life-time and which holds mainly default values for the SSL structures which are later created for the connections.

+ +
+
SSL_SESSION (SSL Session)
+
+ +

This is a structure containing the current TLS/SSL session details for a connection: SSL_CIPHERs, client and server certificates, keys, etc.

+ +
+
SSL (SSL Connection)
+
+ +

This is the main SSL/TLS structure which is created by a server or client per established connection. This actually is the core structure in the SSL API. At run-time the application usually deals with this structure which has links to mostly all other structures.

+ +
+
+ +

HEADER FILES

+ +

Currently the OpenSSL ssl library provides the following C header files containing the prototypes for the data structures and functions:

+ +
+ +
ssl.h
+
+ +

This is the common header file for the SSL/TLS API. Include it into your program to make the API of the ssl library available. It internally includes both more private SSL headers and headers from the crypto library. Whenever you need hard-core details on the internals of the SSL API, look inside this header file.

+ +
+
ssl2.h
+
+ +

Unused. Present for backwards compatibility only.

+ +
+
ssl3.h
+
+ +

This is the sub header file dealing with the SSLv3 protocol only. Usually you don't have to include it explicitly because it's already included by ssl.h.

+ +
+
tls1.h
+
+ +

This is the sub header file dealing with the TLSv1 protocol only. Usually you don't have to include it explicitly because it's already included by ssl.h.

+ +
+
+ +

API FUNCTIONS

+ +

Currently the OpenSSL ssl library exports 214 API functions. They are documented in the following:

+ +

Dealing with Protocol Methods

+ +

Here we document the various API functions which deal with the SSL/TLS protocol methods defined in SSL_METHOD structures.

+ +
+ +
const SSL_METHOD *TLS_method(void);
+
+ +

Constructor for the version-flexible SSL_METHOD structure for clients, servers or both. See SSL_CTX_new(3) for details.

+ +
+
const SSL_METHOD *TLS_client_method(void);
+
+ +

Constructor for the version-flexible SSL_METHOD structure for clients. Must be used to support the TLSv1.3 protocol.

+ +
+
const SSL_METHOD *TLS_server_method(void);
+
+ +

Constructor for the version-flexible SSL_METHOD structure for servers. Must be used to support the TLSv1.3 protocol.

+ +
+
const SSL_METHOD *TLSv1_2_method(void);
+
+ +

Constructor for the TLSv1.2 SSL_METHOD structure for clients, servers or both.

+ +
+
const SSL_METHOD *TLSv1_2_client_method(void);
+
+ +

Constructor for the TLSv1.2 SSL_METHOD structure for clients.

+ +
+
const SSL_METHOD *TLSv1_2_server_method(void);
+
+ +

Constructor for the TLSv1.2 SSL_METHOD structure for servers.

+ +
+
const SSL_METHOD *TLSv1_1_method(void);
+
+ +

Constructor for the TLSv1.1 SSL_METHOD structure for clients, servers or both.

+ +
+
const SSL_METHOD *TLSv1_1_client_method(void);
+
+ +

Constructor for the TLSv1.1 SSL_METHOD structure for clients.

+ +
+
const SSL_METHOD *TLSv1_1_server_method(void);
+
+ +

Constructor for the TLSv1.1 SSL_METHOD structure for servers.

+ +
+
const SSL_METHOD *TLSv1_method(void);
+
+ +

Constructor for the TLSv1 SSL_METHOD structure for clients, servers or both.

+ +
+
const SSL_METHOD *TLSv1_client_method(void);
+
+ +

Constructor for the TLSv1 SSL_METHOD structure for clients.

+ +
+
const SSL_METHOD *TLSv1_server_method(void);
+
+ +

Constructor for the TLSv1 SSL_METHOD structure for servers.

+ +
+
const SSL_METHOD *SSLv3_method(void);
+
+ +

Constructor for the SSLv3 SSL_METHOD structure for clients, servers or both.

+ +
+
const SSL_METHOD *SSLv3_client_method(void);
+
+ +

Constructor for the SSLv3 SSL_METHOD structure for clients.

+ +
+
const SSL_METHOD *SSLv3_server_method(void);
+
+ +

Constructor for the SSLv3 SSL_METHOD structure for servers.

+ +
+
+ +

Dealing with Ciphers

+ +

Here we document the various API functions which deal with the SSL/TLS ciphers defined in SSL_CIPHER structures.

+ +
+ +
char *SSL_CIPHER_description(SSL_CIPHER *cipher, char *buf, int len);
+
+ +

Write a string to buf (with a maximum size of len) containing a human readable description of cipher. Returns buf.

+ +
+
int SSL_CIPHER_get_bits(SSL_CIPHER *cipher, int *alg_bits);
+
+ +

Determine the number of bits in cipher. Because of export crippled ciphers there are two bits: The bits the algorithm supports in general (stored to alg_bits) and the bits which are actually used (the return value).

+ +
+
const char *SSL_CIPHER_get_name(SSL_CIPHER *cipher);
+
+ +

Return the internal name of cipher as a string. These are the various strings defined by the SSL3_TXT_xxx and TLS1_TXT_xxx definitions in the header files.

+ +
+
const char *SSL_CIPHER_get_version(SSL_CIPHER *cipher);
+
+ +

Returns a string like "SSLv3" or "TLSv1.2" which indicates the SSL/TLS protocol version to which cipher belongs (i.e. where it was defined in the specification the first time).

+ +
+
+ +

Dealing with Protocol Contexts

+ +

Here we document the various API functions which deal with the SSL/TLS protocol context defined in the SSL_CTX structure.

+ +
+ +
int SSL_CTX_add_client_CA(SSL_CTX *ctx, X509 *x);
+
+ +
+
long SSL_CTX_add_extra_chain_cert(SSL_CTX *ctx, X509 *x509);
+
+ +
+
int SSL_CTX_add_session(SSL_CTX *ctx, SSL_SESSION *c);
+
+ +
+
int SSL_CTX_check_private_key(const SSL_CTX *ctx);
+
+ +
+
long SSL_CTX_ctrl(SSL_CTX *ctx, int cmd, long larg, char *parg);
+
+ +
+
void SSL_CTX_flush_sessions(SSL_CTX *s, long t);
+
+ +
+
void SSL_CTX_free(SSL_CTX *a);
+
+ +
+
char *SSL_CTX_get_app_data(SSL_CTX *ctx);
+
+ +
+
X509_STORE *SSL_CTX_get_cert_store(SSL_CTX *ctx);
+
+ +
+
STACK *SSL_CTX_get_ciphers(const SSL_CTX *ctx);
+
+ +
+
STACK *SSL_CTX_get_client_CA_list(const SSL_CTX *ctx);
+
+ +
+
int (*SSL_CTX_get_client_cert_cb(SSL_CTX *ctx))(SSL *ssl, X509 **x509, EVP_PKEY **pkey);
+
+ +
+
void SSL_CTX_get_default_read_ahead(SSL_CTX *ctx);
+
+ +
+
char *SSL_CTX_get_ex_data(const SSL_CTX *s, int idx);
+
+ +
+
int SSL_CTX_get_ex_new_index(long argl, char *argp, int (*new_func);(void), int (*dup_func)(void), void (*free_func)(void))
+
+ +
+
void (*SSL_CTX_get_info_callback(SSL_CTX *ctx))(SSL *ssl, int cb, int ret);
+
+ +
+
int SSL_CTX_get_quiet_shutdown(const SSL_CTX *ctx);
+
+ +
+
void SSL_CTX_get_read_ahead(SSL_CTX *ctx);
+
+ +
+
int SSL_CTX_get_session_cache_mode(SSL_CTX *ctx);
+
+ +
+
long SSL_CTX_get_timeout(const SSL_CTX *ctx);
+
+ +
+
int (*SSL_CTX_get_verify_callback(const SSL_CTX *ctx))(int ok, X509_STORE_CTX *ctx);
+
+ +
+
int SSL_CTX_get_verify_mode(SSL_CTX *ctx);
+
+ +
+
int SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile, const char *CApath);
+
+ +
+
SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth);
+
+ +
+
int SSL_CTX_up_ref(SSL_CTX *ctx);
+
+ +
+
int SSL_CTX_remove_session(SSL_CTX *ctx, SSL_SESSION *c);
+
+ +
+
int SSL_CTX_sess_accept(SSL_CTX *ctx);
+
+ +
+
int SSL_CTX_sess_accept_good(SSL_CTX *ctx);
+
+ +
+
int SSL_CTX_sess_accept_renegotiate(SSL_CTX *ctx);
+
+ +
+
int SSL_CTX_sess_cache_full(SSL_CTX *ctx);
+
+ +
+
int SSL_CTX_sess_cb_hits(SSL_CTX *ctx);
+
+ +
+
int SSL_CTX_sess_connect(SSL_CTX *ctx);
+
+ +
+
int SSL_CTX_sess_connect_good(SSL_CTX *ctx);
+
+ +
+
int SSL_CTX_sess_connect_renegotiate(SSL_CTX *ctx);
+
+ +
+
int SSL_CTX_sess_get_cache_size(SSL_CTX *ctx);
+
+ +
+
SSL_SESSION *(*SSL_CTX_sess_get_get_cb(SSL_CTX *ctx))(SSL *ssl, unsigned char *data, int len, int *copy);
+
+ +
+
int (*SSL_CTX_sess_get_new_cb(SSL_CTX *ctx)(SSL *ssl, SSL_SESSION *sess);
+
+ +
+
void (*SSL_CTX_sess_get_remove_cb(SSL_CTX *ctx)(SSL_CTX *ctx, SSL_SESSION *sess);
+
+ +
+
int SSL_CTX_sess_hits(SSL_CTX *ctx);
+
+ +
+
int SSL_CTX_sess_misses(SSL_CTX *ctx);
+
+ +
+
int SSL_CTX_sess_number(SSL_CTX *ctx);
+
+ +
+
void SSL_CTX_sess_set_cache_size(SSL_CTX *ctx, t);
+
+ +
+
void SSL_CTX_sess_set_get_cb(SSL_CTX *ctx, SSL_SESSION *(*cb)(SSL *ssl, unsigned char *data, int len, int *copy));
+
+ +
+
void SSL_CTX_sess_set_new_cb(SSL_CTX *ctx, int (*cb)(SSL *ssl, SSL_SESSION *sess));
+
+ +
+
void SSL_CTX_sess_set_remove_cb(SSL_CTX *ctx, void (*cb)(SSL_CTX *ctx, SSL_SESSION *sess));
+
+ +
+
int SSL_CTX_sess_timeouts(SSL_CTX *ctx);
+
+ +
+
LHASH *SSL_CTX_sessions(SSL_CTX *ctx);
+
+ +
+
int SSL_CTX_set_app_data(SSL_CTX *ctx, void *arg);
+
+ +
+
void SSL_CTX_set_cert_store(SSL_CTX *ctx, X509_STORE *cs);
+
+ +
+
void SSL_CTX_set1_cert_store(SSL_CTX *ctx, X509_STORE *cs);
+
+ +
+
void SSL_CTX_set_cert_verify_cb(SSL_CTX *ctx, int (*cb)(), char *arg)
+
+ +
+
int SSL_CTX_set_cipher_list(SSL_CTX *ctx, char *str);
+
+ +
+
void SSL_CTX_set_client_CA_list(SSL_CTX *ctx, STACK *list);
+
+ +
+
void SSL_CTX_set_client_cert_cb(SSL_CTX *ctx, int (*cb)(SSL *ssl, X509 **x509, EVP_PKEY **pkey));
+
+ +
+
int SSL_CTX_set_ct_validation_callback(SSL_CTX *ctx, ssl_ct_validation_cb callback, void *arg);
+
+ +
+
void SSL_CTX_set_default_passwd_cb(SSL_CTX *ctx, int (*cb);(void))
+
+ +
+
void SSL_CTX_set_default_read_ahead(SSL_CTX *ctx, int m);
+
+ +
+
int SSL_CTX_set_default_verify_paths(SSL_CTX *ctx);
+
+ +

Use the default paths to locate trusted CA certificates. There is one default directory path and one default file path. Both are set via this call.

+ +
+
int SSL_CTX_set_default_verify_dir(SSL_CTX *ctx)
+
+ +

Use the default directory path to locate trusted CA certificates.

+ +
+
int SSL_CTX_set_default_verify_file(SSL_CTX *ctx)
+
+ +

Use the file path to locate trusted CA certificates.

+ +
+
int SSL_CTX_set_ex_data(SSL_CTX *s, int idx, char *arg);
+
+ +
+
void SSL_CTX_set_info_callback(SSL_CTX *ctx, void (*cb)(SSL *ssl, int cb, int ret));
+
+ +
+
void SSL_CTX_set_msg_callback(SSL_CTX *ctx, void (*cb)(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg));
+
+ +
+
void SSL_CTX_set_msg_callback_arg(SSL_CTX *ctx, void *arg);
+
+ +
+
unsigned long SSL_CTX_clear_options(SSL_CTX *ctx, unsigned long op);
+
+ +
+
unsigned long SSL_CTX_get_options(SSL_CTX *ctx);
+
+ +
+
unsigned long SSL_CTX_set_options(SSL_CTX *ctx, unsigned long op);
+
+ +
+
void SSL_CTX_set_quiet_shutdown(SSL_CTX *ctx, int mode);
+
+ +
+
void SSL_CTX_set_read_ahead(SSL_CTX *ctx, int m);
+
+ +
+
void SSL_CTX_set_session_cache_mode(SSL_CTX *ctx, int mode);
+
+ +
+
int SSL_CTX_set_ssl_version(SSL_CTX *ctx, const SSL_METHOD *meth);
+
+ +
+
void SSL_CTX_set_timeout(SSL_CTX *ctx, long t);
+
+ +
+
long SSL_CTX_set_tmp_dh(SSL_CTX* ctx, DH *dh);
+
+ +
+
long SSL_CTX_set_tmp_dh_callback(SSL_CTX *ctx, DH *(*cb)(void));
+
+ +
+
void SSL_CTX_set_verify(SSL_CTX *ctx, int mode, int (*cb);(void))
+
+ +
+
int SSL_CTX_use_PrivateKey(SSL_CTX *ctx, EVP_PKEY *pkey);
+
+ +
+
int SSL_CTX_use_PrivateKey_ASN1(int type, SSL_CTX *ctx, unsigned char *d, long len);
+
+ +
+
int SSL_CTX_use_PrivateKey_file(SSL_CTX *ctx, const char *file, int type);
+
+ +
+
int SSL_CTX_use_RSAPrivateKey(SSL_CTX *ctx, RSA *rsa);
+
+ +
+
int SSL_CTX_use_RSAPrivateKey_ASN1(SSL_CTX *ctx, unsigned char *d, long len);
+
+ +
+
int SSL_CTX_use_RSAPrivateKey_file(SSL_CTX *ctx, const char *file, int type);
+
+ +
+
int SSL_CTX_use_certificate(SSL_CTX *ctx, X509 *x);
+
+ +
+
int SSL_CTX_use_certificate_ASN1(SSL_CTX *ctx, int len, unsigned char *d);
+
+ +
+
int SSL_CTX_use_certificate_file(SSL_CTX *ctx, const char *file, int type);
+
+ +
+
int SSL_CTX_use_cert_and_key(SSL_CTX *ctx, X509 *x, EVP_PKEY *pkey, STACK_OF(X509) *chain, int override);
+
+ +
+
X509 *SSL_CTX_get0_certificate(const SSL_CTX *ctx);
+
+ +
+
EVP_PKEY *SSL_CTX_get0_privatekey(const SSL_CTX *ctx);
+
+ +
+
void SSL_CTX_set_psk_client_callback(SSL_CTX *ctx, unsigned int (*callback)(SSL *ssl, const char *hint, char *identity, unsigned int max_identity_len, unsigned char *psk, unsigned int max_psk_len));
+
+ +
+
int SSL_CTX_use_psk_identity_hint(SSL_CTX *ctx, const char *hint);
+
+ +
+
void SSL_CTX_set_psk_server_callback(SSL_CTX *ctx, unsigned int (*callback)(SSL *ssl, const char *identity, unsigned char *psk, int max_psk_len));
+
+ +
+
+ +

Dealing with Sessions

+ +

Here we document the various API functions which deal with the SSL/TLS sessions defined in the SSL_SESSION structures.

+ +
+ +
int SSL_SESSION_cmp(const SSL_SESSION *a, const SSL_SESSION *b);
+
+ +
+
void SSL_SESSION_free(SSL_SESSION *ss);
+
+ +
+
char *SSL_SESSION_get_app_data(SSL_SESSION *s);
+
+ +
+
char *SSL_SESSION_get_ex_data(const SSL_SESSION *s, int idx);
+
+ +
+
int SSL_SESSION_get_ex_new_index(long argl, char *argp, int (*new_func);(void), int (*dup_func)(void), void (*free_func)(void))
+
+ +
+
long SSL_SESSION_get_time(const SSL_SESSION *s);
+
+ +
+
long SSL_SESSION_get_timeout(const SSL_SESSION *s);
+
+ +
+
unsigned long SSL_SESSION_hash(const SSL_SESSION *a);
+
+ +
+
SSL_SESSION *SSL_SESSION_new(void);
+
+ +
+
int SSL_SESSION_print(BIO *bp, const SSL_SESSION *x);
+
+ +
+
int SSL_SESSION_print_fp(FILE *fp, const SSL_SESSION *x);
+
+ +
+
int SSL_SESSION_set_app_data(SSL_SESSION *s, char *a);
+
+ +
+
int SSL_SESSION_set_ex_data(SSL_SESSION *s, int idx, char *arg);
+
+ +
+
long SSL_SESSION_set_time(SSL_SESSION *s, long t);
+
+ +
+
long SSL_SESSION_set_timeout(SSL_SESSION *s, long t);
+
+ +
+
+ +

Dealing with Connections

+ +

Here we document the various API functions which deal with the SSL/TLS connection defined in the SSL structure.

+ +
+ +
int SSL_accept(SSL *ssl);
+
+ +
+
int SSL_add_dir_cert_subjects_to_stack(STACK *stack, const char *dir);
+
+ +
+
int SSL_add_file_cert_subjects_to_stack(STACK *stack, const char *file);
+
+ +
+
int SSL_add_client_CA(SSL *ssl, X509 *x);
+
+ +
+
char *SSL_alert_desc_string(int value);
+
+ +
+
char *SSL_alert_desc_string_long(int value);
+
+ +
+
char *SSL_alert_type_string(int value);
+
+ +
+
char *SSL_alert_type_string_long(int value);
+
+ +
+
int SSL_check_private_key(const SSL *ssl);
+
+ +
+
void SSL_clear(SSL *ssl);
+
+ +
+
long SSL_clear_num_renegotiations(SSL *ssl);
+
+ +
+
int SSL_connect(SSL *ssl);
+
+ +
+
int SSL_copy_session_id(SSL *t, const SSL *f);
+
+ +

Sets the session details for t to be the same as in f. Returns 1 on success or 0 on failure.

+ +
+
long SSL_ctrl(SSL *ssl, int cmd, long larg, char *parg);
+
+ +
+
int SSL_do_handshake(SSL *ssl);
+
+ +
+
SSL *SSL_dup(SSL *ssl);
+
+ +

SSL_dup() allows applications to configure an SSL handle for use in multiple SSL connections, and then duplicate it prior to initiating each connection with the duplicated handle. Use of SSL_dup() avoids the need to repeat the configuration of the handles for each connection.

+ +

For SSL_dup() to work, the connection MUST be in its initial state and MUST NOT have not yet have started the SSL handshake. For connections that are not in their initial state SSL_dup() just increments an internal reference count and returns the same handle. It may be possible to use SSL_clear(3) to recycle an SSL handle that is not in its initial state for re-use, but this is best avoided. Instead, save and restore the session, if desired, and construct a fresh handle for each connection.

+ +
+
STACK *SSL_dup_CA_list(STACK *sk);
+
+ +
+
void SSL_free(SSL *ssl);
+
+ +
+
SSL_CTX *SSL_get_SSL_CTX(const SSL *ssl);
+
+ +
+
char *SSL_get_app_data(SSL *ssl);
+
+ +
+
X509 *SSL_get_certificate(const SSL *ssl);
+
+ +
+
const char *SSL_get_cipher(const SSL *ssl);
+
+ +
+
int SSL_is_dtls(const SSL *ssl);
+
+ +
+
int SSL_get_cipher_bits(const SSL *ssl, int *alg_bits);
+
+ +
+
char *SSL_get_cipher_list(const SSL *ssl, int n);
+
+ +
+
char *SSL_get_cipher_name(const SSL *ssl);
+
+ +
+
char *SSL_get_cipher_version(const SSL *ssl);
+
+ +
+
STACK *SSL_get_ciphers(const SSL *ssl);
+
+ +
+
STACK *SSL_get_client_CA_list(const SSL *ssl);
+
+ +
+
SSL_CIPHER *SSL_get_current_cipher(SSL *ssl);
+
+ +
+
long SSL_get_default_timeout(const SSL *ssl);
+
+ +
+
int SSL_get_error(const SSL *ssl, int i);
+
+ +
+
char *SSL_get_ex_data(const SSL *ssl, int idx);
+
+ +
+
int SSL_get_ex_data_X509_STORE_CTX_idx(void);
+
+ +
+
int SSL_get_ex_new_index(long argl, char *argp, int (*new_func);(void), int (*dup_func)(void), void (*free_func)(void))
+
+ +
+
int SSL_get_fd(const SSL *ssl);
+
+ +
+
void (*SSL_get_info_callback(const SSL *ssl);)()
+
+ +
+
int SSL_get_key_update_type(SSL *s);
+
+ +
+
STACK *SSL_get_peer_cert_chain(const SSL *ssl);
+
+ +
+
X509 *SSL_get_peer_certificate(const SSL *ssl);
+
+ +
+
const STACK_OF(SCT) *SSL_get0_peer_scts(SSL *s);
+
+ +
+
EVP_PKEY *SSL_get_privatekey(const SSL *ssl);
+
+ +
+
int SSL_get_quiet_shutdown(const SSL *ssl);
+
+ +
+
BIO *SSL_get_rbio(const SSL *ssl);
+
+ +
+
int SSL_get_read_ahead(const SSL *ssl);
+
+ +
+
SSL_SESSION *SSL_get_session(const SSL *ssl);
+
+ +
+
char *SSL_get_shared_ciphers(const SSL *ssl, char *buf, int size);
+
+ +
+
int SSL_get_shutdown(const SSL *ssl);
+
+ +
+
const SSL_METHOD *SSL_get_ssl_method(SSL *ssl);
+
+ +
+
int SSL_get_state(const SSL *ssl);
+
+ +
+
long SSL_get_time(const SSL *ssl);
+
+ +
+
long SSL_get_timeout(const SSL *ssl);
+
+ +
+
int (*SSL_get_verify_callback(const SSL *ssl))(int, X509_STORE_CTX *)
+
+ +
+
int SSL_get_verify_mode(const SSL *ssl);
+
+ +
+
long SSL_get_verify_result(const SSL *ssl);
+
+ +
+
char *SSL_get_version(const SSL *ssl);
+
+ +
+
BIO *SSL_get_wbio(const SSL *ssl);
+
+ +
+
int SSL_in_accept_init(SSL *ssl);
+
+ +
+
int SSL_in_before(SSL *ssl);
+
+ +
+
int SSL_in_connect_init(SSL *ssl);
+
+ +
+
int SSL_in_init(SSL *ssl);
+
+ +
+
int SSL_is_init_finished(SSL *ssl);
+
+ +
+
int SSL_key_update(SSL *s, int updatetype);
+
+ +
+
STACK *SSL_load_client_CA_file(const char *file);
+
+ +
+
SSL *SSL_new(SSL_CTX *ctx);
+
+ +
+
int SSL_up_ref(SSL *s);
+
+ +
+
long SSL_num_renegotiations(SSL *ssl);
+
+ +
+
int SSL_peek(SSL *ssl, void *buf, int num);
+
+ +
+
int SSL_pending(const SSL *ssl);
+
+ +
+
int SSL_read(SSL *ssl, void *buf, int num);
+
+ +
+
int SSL_renegotiate(SSL *ssl);
+
+ +
+
char *SSL_rstate_string(SSL *ssl);
+
+ +
+
char *SSL_rstate_string_long(SSL *ssl);
+
+ +
+
long SSL_session_reused(SSL *ssl);
+
+ +
+
void SSL_set_accept_state(SSL *ssl);
+
+ +
+
void SSL_set_app_data(SSL *ssl, char *arg);
+
+ +
+
void SSL_set_bio(SSL *ssl, BIO *rbio, BIO *wbio);
+
+ +
+
int SSL_set_cipher_list(SSL *ssl, char *str);
+
+ +
+
void SSL_set_client_CA_list(SSL *ssl, STACK *list);
+
+ +
+
void SSL_set_connect_state(SSL *ssl);
+
+ +
+
int SSL_set_ct_validation_callback(SSL *ssl, ssl_ct_validation_cb callback, void *arg);
+
+ +
+
int SSL_set_ex_data(SSL *ssl, int idx, char *arg);
+
+ +
+
int SSL_set_fd(SSL *ssl, int fd);
+
+ +
+
void SSL_set_info_callback(SSL *ssl, void (*cb);(void))
+
+ +
+
void SSL_set_msg_callback(SSL *ctx, void (*cb)(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg));
+
+ +
+
void SSL_set_msg_callback_arg(SSL *ctx, void *arg);
+
+ +
+
unsigned long SSL_clear_options(SSL *ssl, unsigned long op);
+
+ +
+
unsigned long SSL_get_options(SSL *ssl);
+
+ +
+
unsigned long SSL_set_options(SSL *ssl, unsigned long op);
+
+ +
+
void SSL_set_quiet_shutdown(SSL *ssl, int mode);
+
+ +
+
void SSL_set_read_ahead(SSL *ssl, int yes);
+
+ +
+
int SSL_set_rfd(SSL *ssl, int fd);
+
+ +
+
int SSL_set_session(SSL *ssl, SSL_SESSION *session);
+
+ +
+
void SSL_set_shutdown(SSL *ssl, int mode);
+
+ +
+
int SSL_set_ssl_method(SSL *ssl, const SSL_METHOD *meth);
+
+ +
+
void SSL_set_time(SSL *ssl, long t);
+
+ +
+
void SSL_set_timeout(SSL *ssl, long t);
+
+ +
+
void SSL_set_verify(SSL *ssl, int mode, int (*callback);(void))
+
+ +
+
void SSL_set_verify_result(SSL *ssl, long arg);
+
+ +
+
int SSL_set_wfd(SSL *ssl, int fd);
+
+ +
+
int SSL_shutdown(SSL *ssl);
+
+ +
+
OSSL_HANDSHAKE_STATE SSL_get_state(const SSL *ssl);
+
+ +

Returns the current handshake state.

+ +
+
char *SSL_state_string(const SSL *ssl);
+
+ +
+
char *SSL_state_string_long(const SSL *ssl);
+
+ +
+
long SSL_total_renegotiations(SSL *ssl);
+
+ +
+
int SSL_use_PrivateKey(SSL *ssl, EVP_PKEY *pkey);
+
+ +
+
int SSL_use_PrivateKey_ASN1(int type, SSL *ssl, unsigned char *d, long len);
+
+ +
+
int SSL_use_PrivateKey_file(SSL *ssl, const char *file, int type);
+
+ +
+
int SSL_use_RSAPrivateKey(SSL *ssl, RSA *rsa);
+
+ +
+
int SSL_use_RSAPrivateKey_ASN1(SSL *ssl, unsigned char *d, long len);
+
+ +
+
int SSL_use_RSAPrivateKey_file(SSL *ssl, const char *file, int type);
+
+ +
+
int SSL_use_certificate(SSL *ssl, X509 *x);
+
+ +
+
int SSL_use_certificate_ASN1(SSL *ssl, int len, unsigned char *d);
+
+ +
+
int SSL_use_certificate_file(SSL *ssl, const char *file, int type);
+
+ +
+
int SSL_use_cert_and_key(SSL *ssl, X509 *x, EVP_PKEY *pkey, STACK_OF(X509) *chain, int override);
+
+ +
+
int SSL_version(const SSL *ssl);
+
+ +
+
int SSL_want(const SSL *ssl);
+
+ +
+
int SSL_want_nothing(const SSL *ssl);
+
+ +
+
int SSL_want_read(const SSL *ssl);
+
+ +
+
int SSL_want_write(const SSL *ssl);
+
+ +
+
int SSL_want_x509_lookup(const SSL *ssl);
+
+ +
+
int SSL_write(SSL *ssl, const void *buf, int num);
+
+ +
+
void SSL_set_psk_client_callback(SSL *ssl, unsigned int (*callback)(SSL *ssl, const char *hint, char *identity, unsigned int max_identity_len, unsigned char *psk, unsigned int max_psk_len));
+
+ +
+
int SSL_use_psk_identity_hint(SSL *ssl, const char *hint);
+
+ +
+
void SSL_set_psk_server_callback(SSL *ssl, unsigned int (*callback)(SSL *ssl, const char *identity, unsigned char *psk, int max_psk_len));
+
+ +
+
const char *SSL_get_psk_identity_hint(SSL *ssl);
+
+ +
+
const char *SSL_get_psk_identity(SSL *ssl);
+
+ +
+
+ +

RETURN VALUES

+ +

See the individual manual pages for details.

+ +

SEE ALSO

+ +

openssl(1), crypto(7), CRYPTO_get_ex_new_index(3), SSL_accept(3), SSL_clear(3), SSL_connect(3), SSL_CIPHER_get_name(3), SSL_COMP_add_compression_method(3), SSL_CTX_add_extra_chain_cert(3), SSL_CTX_add_session(3), SSL_CTX_ctrl(3), SSL_CTX_flush_sessions(3), SSL_CTX_get_verify_mode(3), SSL_CTX_load_verify_locations(3) SSL_CTX_new(3), SSL_CTX_sess_number(3), SSL_CTX_sess_set_cache_size(3), SSL_CTX_sess_set_get_cb(3), SSL_CTX_sessions(3), SSL_CTX_set_cert_store(3), SSL_CTX_set_cert_verify_callback(3), SSL_CTX_set_cipher_list(3), SSL_CTX_set_client_CA_list(3), SSL_CTX_set_client_cert_cb(3), SSL_CTX_set_default_passwd_cb(3), SSL_CTX_set_generate_session_id(3), SSL_CTX_set_info_callback(3), SSL_CTX_set_max_cert_list(3), SSL_CTX_set_mode(3), SSL_CTX_set_msg_callback(3), SSL_CTX_set_options(3), SSL_CTX_set_quiet_shutdown(3), SSL_CTX_set_read_ahead(3), SSL_CTX_set_security_level(3), SSL_CTX_set_session_cache_mode(3), SSL_CTX_set_session_id_context(3), SSL_CTX_set_ssl_version(3), SSL_CTX_set_timeout(3), SSL_CTX_set_tmp_dh_callback(3), SSL_CTX_set_verify(3), SSL_CTX_use_certificate(3), SSL_alert_type_string(3), SSL_do_handshake(3), SSL_enable_ct(3), SSL_get_SSL_CTX(3), SSL_get_ciphers(3), SSL_get_client_CA_list(3), SSL_get_default_timeout(3), SSL_get_error(3), SSL_get_ex_data_X509_STORE_CTX_idx(3), SSL_get_fd(3), SSL_get_peer_cert_chain(3), SSL_get_rbio(3), SSL_get_session(3), SSL_get_verify_result(3), SSL_get_version(3), SSL_load_client_CA_file(3), SSL_new(3), SSL_pending(3), SSL_read_ex(3), SSL_read(3), SSL_rstate_string(3), SSL_session_reused(3), SSL_set_bio(3), SSL_set_connect_state(3), SSL_set_fd(3), SSL_set_session(3), SSL_set_shutdown(3), SSL_shutdown(3), SSL_state_string(3), SSL_want(3), SSL_write_ex(3), SSL_write(3), SSL_SESSION_free(3), SSL_SESSION_get_time(3), d2i_SSL_SESSION(3), SSL_CTX_set_psk_client_callback(3), SSL_CTX_use_psk_identity_hint(3), SSL_get_psk_identity(3), DTLSv1_listen(3)

+ +

HISTORY

+ +

SSLv2_client_method, SSLv2_server_method and SSLv2_method were removed in OpenSSL 1.1.0.

+ +

The return type of SSL_copy_session_id was changed from void to int in OpenSSL 1.1.0.

+ +

COPYRIGHT

+ +

Copyright 2000-2018 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/x509.html b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/x509.html new file mode 100644 index 00000000..42546b1e --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/doc/openssl/html/man7/x509.html @@ -0,0 +1,67 @@ + + + + +x509 + + + + + + + + + + +

NAME

+ +

x509 - X.509 certificate handling

+ +

SYNOPSIS

+ +
#include <openssl/x509.h>
+ +

DESCRIPTION

+ +

An X.509 certificate is a structured grouping of information about an individual, a device, or anything one can imagine. A X.509 CRL (certificate revocation list) is a tool to help determine if a certificate is still valid. The exact definition of those can be found in the X.509 document from ITU-T, or in RFC3280 from PKIX. In OpenSSL, the type X509 is used to express such a certificate, and the type X509_CRL is used to express a CRL.

+ +

A related structure is a certificate request, defined in PKCS#10 from RSA Security, Inc, also reflected in RFC2896. In OpenSSL, the type X509_REQ is used to express such a certificate request.

+ +

To handle some complex parts of a certificate, there are the types X509_NAME (to express a certificate name), X509_ATTRIBUTE (to express a certificate attributes), X509_EXTENSION (to express a certificate extension) and a few more.

+ +

Finally, there's the supertype X509_INFO, which can contain a CRL, a certificate and a corresponding private key.

+ +

X509_XXX, d2i_X509_XXX, and i2d_X509_XXX functions handle X.509 certificates, with some exceptions, shown below.

+ +

X509_CRL_XXX, d2i_X509_CRL_XXX, and i2d_X509_CRL_XXX functions handle X.509 CRLs.

+ +

X509_REQ_XXX, d2i_X509_REQ_XXX, and i2d_X509_REQ_XXX functions handle PKCS#10 certificate requests.

+ +

X509_NAME_XXX functions handle certificate names.

+ +

X509_ATTRIBUTE_XXX functions handle certificate attributes.

+ +

X509_EXTENSION_XXX functions handle certificate extensions.

+ +

SEE ALSO

+ +

X509_NAME_ENTRY_get_object(3), X509_NAME_add_entry_by_txt(3), X509_NAME_add_entry_by_NID(3), X509_NAME_print_ex(3), X509_NAME_new(3), d2i_X509(3), d2i_X509_ALGOR(3), d2i_X509_CRL(3), d2i_X509_NAME(3), d2i_X509_REQ(3), d2i_X509_SIG(3), X509v3(3), crypto(7)

+ +

COPYRIGHT

+ +

Copyright 2003-2017 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 in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

+ + + + + + + diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/CA.pl.1 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/CA.pl.1 new file mode 100644 index 00000000..5806ee2a --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/CA.pl.1 @@ -0,0 +1,341 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "CA.PL 1" +.TH CA.PL 1 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +CA.pl \- friendlier interface for OpenSSL certificate programs +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +\&\fB\s-1CA\s0.pl\fR +\&\fB\-?\fR | +\&\fB\-h\fR | +\&\fB\-help\fR +.PP +\&\fB\s-1CA\s0.pl\fR +\&\fB\-newcert\fR | +\&\fB\-newreq\fR | +\&\fB\-newreq\-nodes\fR | +\&\fB\-xsign\fR | +\&\fB\-sign\fR | +\&\fB\-signCA\fR | +\&\fB\-signcert\fR | +\&\fB\-crl\fR | +\&\fB\-newca\fR +[\fB\-extra\-cmd\fR extra\-params] +.PP +\&\fB\s-1CA\s0.pl\fR \fB\-pkcs12\fR [\fB\-extra\-pkcs12\fR extra\-params] [\fBcertname\fR] +.PP +\&\fB\s-1CA\s0.pl\fR \fB\-verify\fR [\fB\-extra\-verify\fR extra\-params] \fBcertfile\fR... +.PP +\&\fB\s-1CA\s0.pl\fR \fB\-revoke\fR [\fB\-extra\-ca\fR extra\-params] \fBcertfile\fR [\fBreason\fR] +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fB\s-1CA\s0.pl\fR script is a perl script that supplies the relevant command line +arguments to the \fBopenssl\fR command for some common certificate operations. +It is intended to simplify the process of certificate creation and management +by the use of some simple options. +.SH "OPTIONS" +.IX Header "OPTIONS" +.IP "\fB?\fR, \fB\-h\fR, \fB\-help\fR" 4 +.IX Item "?, -h, -help" +Prints a usage message. +.IP "\fB\-newcert\fR" 4 +.IX Item "-newcert" +Creates a new self signed certificate. The private key is written to the file +\&\*(L"newkey.pem\*(R" and the request written to the file \*(L"newreq.pem\*(R". +This argument invokes \fBopenssl req\fR command. +.IP "\fB\-newreq\fR" 4 +.IX Item "-newreq" +Creates a new certificate request. The private key is written to the file +\&\*(L"newkey.pem\*(R" and the request written to the file \*(L"newreq.pem\*(R". +Executes \fBopenssl req\fR command below the hood. +.IP "\fB\-newreq\-nodes\fR" 4 +.IX Item "-newreq-nodes" +Is like \fB\-newreq\fR except that the private key will not be encrypted. +Uses \fBopenssl req\fR command. +.IP "\fB\-newca\fR" 4 +.IX Item "-newca" +Creates a new \s-1CA\s0 hierarchy for use with the \fBca\fR program (or the \fB\-signcert\fR +and \fB\-xsign\fR options). The user is prompted to enter the filename of the \s-1CA\s0 +certificates (which should also contain the private key) or by hitting \s-1ENTER\s0 +details of the \s-1CA\s0 will be prompted for. The relevant files and directories +are created in a directory called \*(L"demoCA\*(R" in the current directory. +\&\fBopenssl req\fR and \fBopenssl ca\fR commands are get invoked. +.IP "\fB\-pkcs12\fR" 4 +.IX Item "-pkcs12" +Create a PKCS#12 file containing the user certificate, private key and \s-1CA\s0 +certificate. It expects the user certificate and private key to be in the +file \*(L"newcert.pem\*(R" and the \s-1CA\s0 certificate to be in the file demoCA/cacert.pem, +it creates a file \*(L"newcert.p12\*(R". This command can thus be called after the +\&\fB\-sign\fR option. The PKCS#12 file can be imported directly into a browser. +If there is an additional argument on the command line it will be used as the +\&\*(L"friendly name\*(R" for the certificate (which is typically displayed in the browser +list box), otherwise the name \*(L"My Certificate\*(R" is used. +Delegates work to \fBopenssl pkcs12\fR command. +.IP "\fB\-sign\fR, \fB\-signcert\fR, \fB\-xsign\fR" 4 +.IX Item "-sign, -signcert, -xsign" +Calls the \fBca\fR program to sign a certificate request. It expects the request +to be in the file \*(L"newreq.pem\*(R". The new certificate is written to the file +\&\*(L"newcert.pem\*(R" except in the case of the \fB\-xsign\fR option when it is written +to standard output. Leverages \fBopenssl ca\fR command. +.IP "\fB\-signCA\fR" 4 +.IX Item "-signCA" +This option is the same as the \fB\-signreq\fR option except it uses the +configuration file section \fBv3_ca\fR and so makes the signed request a +valid \s-1CA\s0 certificate. This is useful when creating intermediate \s-1CA\s0 from +a root \s-1CA.\s0 Extra params are passed on to \fBopenssl ca\fR command. +.IP "\fB\-signcert\fR" 4 +.IX Item "-signcert" +This option is the same as \fB\-sign\fR except it expects a self signed certificate +to be present in the file \*(L"newreq.pem\*(R". +Extra params are passed on to \fBopenssl x509\fR and \fBopenssl ca\fR commands. +.IP "\fB\-crl\fR" 4 +.IX Item "-crl" +Generate a \s-1CRL.\s0 Executes \fBopenssl ca\fR command. +.IP "\fB\-revoke certfile [reason]\fR" 4 +.IX Item "-revoke certfile [reason]" +Revoke the certificate contained in the specified \fBcertfile\fR. An optional +reason may be specified, and must be one of: \fBunspecified\fR, +\&\fBkeyCompromise\fR, \fBCACompromise\fR, \fBaffiliationChanged\fR, \fBsuperseded\fR, +\&\fBcessationOfOperation\fR, \fBcertificateHold\fR, or \fBremoveFromCRL\fR. +Leverages \fBopenssl ca\fR command. +.IP "\fB\-verify\fR" 4 +.IX Item "-verify" +Verifies certificates against the \s-1CA\s0 certificate for \*(L"demoCA\*(R". If no +certificates are specified on the command line it tries to verify the file +\&\*(L"newcert.pem\*(R". Invokes \fBopenssl verify\fR command. +.IP "\fB\-extra\-req\fR | \fB\-extra\-ca\fR | \fB\-extra\-pkcs12\fR | \fB\-extra\-x509\fR | \fB\-extra\-verify\fR " 4 +.IX Item "-extra-req | -extra-ca | -extra-pkcs12 | -extra-x509 | -extra-verify " +The purpose of these parameters is to allow optional parameters to be supplied +to \fBopenssl\fR that this command executes. The \fB\-extra\-cmd\fR are specific to the +option being used and the \fBopenssl\fR command getting invoked. For example +when this command invokes \fBopenssl req\fR extra parameters can be passed on +with the \fB\-extra\-req\fR parameter. The +\&\fBopenssl\fR commands being invoked per option are documented below. +Users should consult \fBopenssl\fR command documentation for more information. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +Create a \s-1CA\s0 hierarchy: +.PP +.Vb 1 +\& CA.pl \-newca +.Ve +.PP +Complete certificate creation example: create a \s-1CA,\s0 create a request, sign +the request and finally create a PKCS#12 file containing it. +.PP +.Vb 4 +\& CA.pl \-newca +\& CA.pl \-newreq +\& CA.pl \-signreq +\& CA.pl \-pkcs12 "My Test Certificate" +.Ve +.SH "DSA CERTIFICATES" +.IX Header "DSA CERTIFICATES" +Although the \fB\s-1CA\s0.pl\fR creates \s-1RSA\s0 CAs and requests it is still possible to +use it with \s-1DSA\s0 certificates and requests using the \fBreq\fR\|(1) command +directly. The following example shows the steps that would typically be taken. +.PP +Create some \s-1DSA\s0 parameters: +.PP +.Vb 1 +\& openssl dsaparam \-out dsap.pem 1024 +.Ve +.PP +Create a \s-1DSA CA\s0 certificate and private key: +.PP +.Vb 1 +\& openssl req \-x509 \-newkey dsa:dsap.pem \-keyout cacert.pem \-out cacert.pem +.Ve +.PP +Create the \s-1CA\s0 directories and files: +.PP +.Vb 1 +\& CA.pl \-newca +.Ve +.PP +enter cacert.pem when prompted for the \s-1CA\s0 file name. +.PP +Create a \s-1DSA\s0 certificate request and private key (a different set of parameters +can optionally be created first): +.PP +.Vb 1 +\& openssl req \-out newreq.pem \-newkey dsa:dsap.pem +.Ve +.PP +Sign the request: +.PP +.Vb 1 +\& CA.pl \-signreq +.Ve +.SH "NOTES" +.IX Header "NOTES" +Most of the filenames mentioned can be modified by editing the \fB\s-1CA\s0.pl\fR script. +.PP +If the demoCA directory already exists then the \fB\-newca\fR command will not +overwrite it and will do nothing. This can happen if a previous call using +the \fB\-newca\fR option terminated abnormally. To get the correct behaviour +delete the demoCA directory if it already exists. +.PP +Under some environments it may not be possible to run the \fB\s-1CA\s0.pl\fR script +directly (for example Win32) and the default configuration file location may +be wrong. In this case the command: +.PP +.Vb 1 +\& perl \-S CA.pl +.Ve +.PP +can be used and the \fB\s-1OPENSSL_CONF\s0\fR environment variable changed to point to +the correct path of the configuration file. +.PP +The script is intended as a simple front end for the \fBopenssl\fR program for use +by a beginner. Its behaviour isn't always what is wanted. For more control over the +behaviour of the certificate commands call the \fBopenssl\fR command directly. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBx509\fR\|(1), \fBca\fR\|(1), \fBreq\fR\|(1), \fBpkcs12\fR\|(1), +\&\fBconfig\fR\|(5) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/asn1parse.1 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/asn1parse.1 new file mode 100644 index 00000000..2508fc3b --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/asn1parse.1 @@ -0,0 +1,339 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "ASN1PARSE 1" +.TH ASN1PARSE 1 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +openssl\-asn1parse, asn1parse \- ASN.1 parsing tool +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +\&\fBopenssl\fR \fBasn1parse\fR +[\fB\-help\fR] +[\fB\-inform PEM|DER\fR] +[\fB\-in filename\fR] +[\fB\-out filename\fR] +[\fB\-noout\fR] +[\fB\-offset number\fR] +[\fB\-length number\fR] +[\fB\-i\fR] +[\fB\-oid filename\fR] +[\fB\-dump\fR] +[\fB\-dlimit num\fR] +[\fB\-strparse offset\fR] +[\fB\-genstr string\fR] +[\fB\-genconf file\fR] +[\fB\-strictpem\fR] +[\fB\-item name\fR] +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fBasn1parse\fR command is a diagnostic utility that can parse \s-1ASN.1\s0 +structures. It can also be used to extract data from \s-1ASN.1\s0 formatted data. +.SH "OPTIONS" +.IX Header "OPTIONS" +.IP "\fB\-help\fR" 4 +.IX Item "-help" +Print out a usage message. +.IP "\fB\-inform\fR \fBDER|PEM\fR" 4 +.IX Item "-inform DER|PEM" +The input format. \fB\s-1DER\s0\fR is binary format and \fB\s-1PEM\s0\fR (the default) is base64 +encoded. +.IP "\fB\-in filename\fR" 4 +.IX Item "-in filename" +The input file, default is standard input. +.IP "\fB\-out filename\fR" 4 +.IX Item "-out filename" +Output file to place the \s-1DER\s0 encoded data into. If this +option is not present then no data will be output. This is most useful when +combined with the \fB\-strparse\fR option. +.IP "\fB\-noout\fR" 4 +.IX Item "-noout" +Don't output the parsed version of the input file. +.IP "\fB\-offset number\fR" 4 +.IX Item "-offset number" +Starting offset to begin parsing, default is start of file. +.IP "\fB\-length number\fR" 4 +.IX Item "-length number" +Number of bytes to parse, default is until end of file. +.IP "\fB\-i\fR" 4 +.IX Item "-i" +Indents the output according to the \*(L"depth\*(R" of the structures. +.IP "\fB\-oid filename\fR" 4 +.IX Item "-oid filename" +A file containing additional \s-1OBJECT\s0 IDENTIFIERs (OIDs). The format of this +file is described in the \s-1NOTES\s0 section below. +.IP "\fB\-dump\fR" 4 +.IX Item "-dump" +Dump unknown data in hex format. +.IP "\fB\-dlimit num\fR" 4 +.IX Item "-dlimit num" +Like \fB\-dump\fR, but only the first \fBnum\fR bytes are output. +.IP "\fB\-strparse offset\fR" 4 +.IX Item "-strparse offset" +Parse the contents octets of the \s-1ASN.1\s0 object starting at \fBoffset\fR. This +option can be used multiple times to \*(L"drill down\*(R" into a nested structure. +.IP "\fB\-genstr string\fR, \fB\-genconf file\fR" 4 +.IX Item "-genstr string, -genconf file" +Generate encoded data based on \fBstring\fR, \fBfile\fR or both using +\&\fBASN1_generate_nconf\fR\|(3) format. If \fBfile\fR only is +present then the string is obtained from the default section using the name +\&\fBasn1\fR. The encoded data is passed through the \s-1ASN1\s0 parser and printed out as +though it came from a file, the contents can thus be examined and written to a +file using the \fBout\fR option. +.IP "\fB\-strictpem\fR" 4 +.IX Item "-strictpem" +If this option is used then \fB\-inform\fR will be ignored. Without this option any +data in a \s-1PEM\s0 format input file will be treated as being base64 encoded and +processed whether it has the normal \s-1PEM BEGIN\s0 and \s-1END\s0 markers or not. This +option will ignore any data prior to the start of the \s-1BEGIN\s0 marker, or after an +\&\s-1END\s0 marker in a \s-1PEM\s0 file. +.IP "\fB\-item name\fR" 4 +.IX Item "-item name" +Attempt to decode and print the data as \fB\s-1ASN1_ITEM\s0 name\fR. This can be used to +print out the fields of any supported \s-1ASN.1\s0 structure if the type is known. +.SS "Output" +.IX Subsection "Output" +The output will typically contain lines like this: +.PP +.Vb 1 +\& 0:d=0 hl=4 l= 681 cons: SEQUENCE +.Ve +.PP +\&..... +.PP +.Vb 10 +\& 229:d=3 hl=3 l= 141 prim: BIT STRING +\& 373:d=2 hl=3 l= 162 cons: cont [ 3 ] +\& 376:d=3 hl=3 l= 159 cons: SEQUENCE +\& 379:d=4 hl=2 l= 29 cons: SEQUENCE +\& 381:d=5 hl=2 l= 3 prim: OBJECT :X509v3 Subject Key Identifier +\& 386:d=5 hl=2 l= 22 prim: OCTET STRING +\& 410:d=4 hl=2 l= 112 cons: SEQUENCE +\& 412:d=5 hl=2 l= 3 prim: OBJECT :X509v3 Authority Key Identifier +\& 417:d=5 hl=2 l= 105 prim: OCTET STRING +\& 524:d=4 hl=2 l= 12 cons: SEQUENCE +.Ve +.PP +\&..... +.PP +This example is part of a self-signed certificate. Each line starts with the +offset in decimal. \fBd=XX\fR specifies the current depth. The depth is increased +within the scope of any \s-1SET\s0 or \s-1SEQUENCE.\s0 \fBhl=XX\fR gives the header length +(tag and length octets) of the current type. \fBl=XX\fR gives the length of +the contents octets. +.PP +The \fB\-i\fR option can be used to make the output more readable. +.PP +Some knowledge of the \s-1ASN.1\s0 structure is needed to interpret the output. +.PP +In this example the \s-1BIT STRING\s0 at offset 229 is the certificate public key. +The contents octets of this will contain the public key information. This can +be examined using the option \fB\-strparse 229\fR to yield: +.PP +.Vb 3 +\& 0:d=0 hl=3 l= 137 cons: SEQUENCE +\& 3:d=1 hl=3 l= 129 prim: INTEGER :E5D21E1F5C8D208EA7A2166C7FAF9F6BDF2059669C60876DDB70840F1A5AAFA59699FE471F379F1DD6A487E7D5409AB6A88D4A9746E24B91D8CF55DB3521015460C8EDE44EE8A4189F7A7BE77D6CD3A9AF2696F486855CF58BF0EDF2B4068058C7A947F52548DDF7E15E96B385F86422BEA9064A3EE9E1158A56E4A6F47E5897 +\& 135:d=1 hl=2 l= 3 prim: INTEGER :010001 +.Ve +.SH "NOTES" +.IX Header "NOTES" +If an \s-1OID\s0 is not part of OpenSSL's internal table it will be represented in +numerical form (for example 1.2.3.4). The file passed to the \fB\-oid\fR option +allows additional OIDs to be included. Each line consists of three columns, +the first column is the \s-1OID\s0 in numerical format and should be followed by white +space. The second column is the \*(L"short name\*(R" which is a single word followed +by white space. The final column is the rest of the line and is the +\&\*(L"long name\*(R". \fBasn1parse\fR displays the long name. Example: +.PP +\&\f(CW\*(C`1.2.3.4 shortName A long name\*(C'\fR +.SH "EXAMPLES" +.IX Header "EXAMPLES" +Parse a file: +.PP +.Vb 1 +\& openssl asn1parse \-in file.pem +.Ve +.PP +Parse a \s-1DER\s0 file: +.PP +.Vb 1 +\& openssl asn1parse \-inform DER \-in file.der +.Ve +.PP +Generate a simple UTF8String: +.PP +.Vb 1 +\& openssl asn1parse \-genstr \*(AqUTF8:Hello World\*(Aq +.Ve +.PP +Generate and write out a UTF8String, don't print parsed output: +.PP +.Vb 1 +\& openssl asn1parse \-genstr \*(AqUTF8:Hello World\*(Aq \-noout \-out utf8.der +.Ve +.PP +Generate using a config file: +.PP +.Vb 1 +\& openssl asn1parse \-genconf asn1.cnf \-noout \-out asn1.der +.Ve +.PP +Example config file: +.PP +.Vb 1 +\& asn1=SEQUENCE:seq_sect +\& +\& [seq_sect] +\& +\& field1=BOOL:TRUE +\& field2=EXP:0, UTF8:some random string +.Ve +.SH "BUGS" +.IX Header "BUGS" +There should be options to change the format of output lines. The output of some +\&\s-1ASN.1\s0 types is not well handled (if at all). +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBASN1_generate_nconf\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/ca.1 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/ca.1 new file mode 100644 index 00000000..0c6c0520 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/ca.1 @@ -0,0 +1,823 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "CA 1" +.TH CA 1 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +openssl\-ca, ca \- sample minimal CA application +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +\&\fBopenssl\fR \fBca\fR +[\fB\-help\fR] +[\fB\-verbose\fR] +[\fB\-config filename\fR] +[\fB\-name section\fR] +[\fB\-gencrl\fR] +[\fB\-revoke file\fR] +[\fB\-valid file\fR] +[\fB\-status serial\fR] +[\fB\-updatedb\fR] +[\fB\-crl_reason reason\fR] +[\fB\-crl_hold instruction\fR] +[\fB\-crl_compromise time\fR] +[\fB\-crl_CA_compromise time\fR] +[\fB\-crldays days\fR] +[\fB\-crlhours hours\fR] +[\fB\-crlexts section\fR] +[\fB\-startdate date\fR] +[\fB\-enddate date\fR] +[\fB\-days arg\fR] +[\fB\-md arg\fR] +[\fB\-policy arg\fR] +[\fB\-keyfile arg\fR] +[\fB\-keyform PEM|DER\fR] +[\fB\-key arg\fR] +[\fB\-passin arg\fR] +[\fB\-cert file\fR] +[\fB\-selfsign\fR] +[\fB\-in file\fR] +[\fB\-out file\fR] +[\fB\-notext\fR] +[\fB\-outdir dir\fR] +[\fB\-infiles\fR] +[\fB\-spkac file\fR] +[\fB\-ss_cert file\fR] +[\fB\-preserveDN\fR] +[\fB\-noemailDN\fR] +[\fB\-batch\fR] +[\fB\-msie_hack\fR] +[\fB\-extensions section\fR] +[\fB\-extfile section\fR] +[\fB\-engine id\fR] +[\fB\-subj arg\fR] +[\fB\-utf8\fR] +[\fB\-sigopt nm:v\fR] +[\fB\-create_serial\fR] +[\fB\-rand_serial\fR] +[\fB\-multivalue\-rdn\fR] +[\fB\-rand file...\fR] +[\fB\-writerand file\fR] +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fBca\fR command is a minimal \s-1CA\s0 application. It can be used +to sign certificate requests in a variety of forms and generate +CRLs it also maintains a text database of issued certificates +and their status. +.PP +The options descriptions will be divided into each purpose. +.SH "OPTIONS" +.IX Header "OPTIONS" +.IP "\fB\-help\fR" 4 +.IX Item "-help" +Print out a usage message. +.IP "\fB\-verbose\fR" 4 +.IX Item "-verbose" +This prints extra details about the operations being performed. +.IP "\fB\-config filename\fR" 4 +.IX Item "-config filename" +Specifies the configuration file to use. +Optional; for a description of the default value, +see \*(L"\s-1COMMAND SUMMARY\*(R"\s0 in \fBopenssl\fR\|(1). +.IP "\fB\-name section\fR" 4 +.IX Item "-name section" +Specifies the configuration file section to use (overrides +\&\fBdefault_ca\fR in the \fBca\fR section). +.IP "\fB\-in filename\fR" 4 +.IX Item "-in filename" +An input filename containing a single certificate request to be +signed by the \s-1CA.\s0 +.IP "\fB\-ss_cert filename\fR" 4 +.IX Item "-ss_cert filename" +A single self-signed certificate to be signed by the \s-1CA.\s0 +.IP "\fB\-spkac filename\fR" 4 +.IX Item "-spkac filename" +A file containing a single Netscape signed public key and challenge +and additional field values to be signed by the \s-1CA.\s0 See the \fB\s-1SPKAC FORMAT\s0\fR +section for information on the required input and output format. +.IP "\fB\-infiles\fR" 4 +.IX Item "-infiles" +If present this should be the last option, all subsequent arguments +are taken as the names of files containing certificate requests. +.IP "\fB\-out filename\fR" 4 +.IX Item "-out filename" +The output file to output certificates to. The default is standard +output. The certificate details will also be printed out to this +file in \s-1PEM\s0 format (except that \fB\-spkac\fR outputs \s-1DER\s0 format). +.IP "\fB\-outdir directory\fR" 4 +.IX Item "-outdir directory" +The directory to output certificates to. The certificate will be +written to a filename consisting of the serial number in hex with +\&\*(L".pem\*(R" appended. +.IP "\fB\-cert\fR" 4 +.IX Item "-cert" +The \s-1CA\s0 certificate file. +.IP "\fB\-keyfile filename\fR" 4 +.IX Item "-keyfile filename" +The private key to sign requests with. +.IP "\fB\-keyform PEM|DER\fR" 4 +.IX Item "-keyform PEM|DER" +The format of the data in the private key file. +The default is \s-1PEM.\s0 +.IP "\fB\-sigopt nm:v\fR" 4 +.IX Item "-sigopt nm:v" +Pass options to the signature algorithm during sign or verify operations. +Names and values of these options are algorithm-specific. +.IP "\fB\-key password\fR" 4 +.IX Item "-key password" +The password used to encrypt the private key. Since on some +systems the command line arguments are visible (e.g. Unix with +the 'ps' utility) this option should be used with caution. +.IP "\fB\-selfsign\fR" 4 +.IX Item "-selfsign" +Indicates the issued certificates are to be signed with the key +the certificate requests were signed with (given with \fB\-keyfile\fR). +Certificate requests signed with a different key are ignored. If +\&\fB\-spkac\fR, \fB\-ss_cert\fR or \fB\-gencrl\fR are given, \fB\-selfsign\fR is +ignored. +.Sp +A consequence of using \fB\-selfsign\fR is that the self-signed +certificate appears among the entries in the certificate database +(see the configuration option \fBdatabase\fR), and uses the same +serial number counter as all other certificates sign with the +self-signed certificate. +.IP "\fB\-passin arg\fR" 4 +.IX Item "-passin arg" +The key password source. For more information about the format of \fBarg\fR +see the \fB\s-1PASS PHRASE ARGUMENTS\s0\fR section in \fBopenssl\fR\|(1). +.IP "\fB\-notext\fR" 4 +.IX Item "-notext" +Don't output the text form of a certificate to the output file. +.IP "\fB\-startdate date\fR" 4 +.IX Item "-startdate date" +This allows the start date to be explicitly set. The format of the +date is \s-1YYMMDDHHMMSSZ\s0 (the same as an \s-1ASN1\s0 UTCTime structure), or +\&\s-1YYYYMMDDHHMMSSZ\s0 (the same as an \s-1ASN1\s0 GeneralizedTime structure). In +both formats, seconds \s-1SS\s0 and timezone Z must be present. +.IP "\fB\-enddate date\fR" 4 +.IX Item "-enddate date" +This allows the expiry date to be explicitly set. The format of the +date is \s-1YYMMDDHHMMSSZ\s0 (the same as an \s-1ASN1\s0 UTCTime structure), or +\&\s-1YYYYMMDDHHMMSSZ\s0 (the same as an \s-1ASN1\s0 GeneralizedTime structure). In +both formats, seconds \s-1SS\s0 and timezone Z must be present. +.IP "\fB\-days arg\fR" 4 +.IX Item "-days arg" +The number of days to certify the certificate for. +.IP "\fB\-md alg\fR" 4 +.IX Item "-md alg" +The message digest to use. +Any digest supported by the OpenSSL \fBdgst\fR command can be used. For signing +algorithms that do not support a digest (i.e. Ed25519 and Ed448) any message +digest that is set is ignored. This option also applies to CRLs. +.IP "\fB\-policy arg\fR" 4 +.IX Item "-policy arg" +This option defines the \s-1CA\s0 \*(L"policy\*(R" to use. This is a section in +the configuration file which decides which fields should be mandatory +or match the \s-1CA\s0 certificate. Check out the \fB\s-1POLICY FORMAT\s0\fR section +for more information. +.IP "\fB\-msie_hack\fR" 4 +.IX Item "-msie_hack" +This is a deprecated option to make \fBca\fR work with very old versions of +the \s-1IE\s0 certificate enrollment control \*(L"certenr3\*(R". It used UniversalStrings +for almost everything. Since the old control has various security bugs +its use is strongly discouraged. +.IP "\fB\-preserveDN\fR" 4 +.IX Item "-preserveDN" +Normally the \s-1DN\s0 order of a certificate is the same as the order of the +fields in the relevant policy section. When this option is set the order +is the same as the request. This is largely for compatibility with the +older \s-1IE\s0 enrollment control which would only accept certificates if their +DNs match the order of the request. This is not needed for Xenroll. +.IP "\fB\-noemailDN\fR" 4 +.IX Item "-noemailDN" +The \s-1DN\s0 of a certificate can contain the \s-1EMAIL\s0 field if present in the +request \s-1DN,\s0 however it is good policy just having the e\-mail set into +the altName extension of the certificate. When this option is set the +\&\s-1EMAIL\s0 field is removed from the certificate' subject and set only in +the, eventually present, extensions. The \fBemail_in_dn\fR keyword can be +used in the configuration file to enable this behaviour. +.IP "\fB\-batch\fR" 4 +.IX Item "-batch" +This sets the batch mode. In this mode no questions will be asked +and all certificates will be certified automatically. +.IP "\fB\-extensions section\fR" 4 +.IX Item "-extensions section" +The section of the configuration file containing certificate extensions +to be added when a certificate is issued (defaults to \fBx509_extensions\fR +unless the \fB\-extfile\fR option is used). If no extension section is +present then, a V1 certificate is created. If the extension section +is present (even if it is empty), then a V3 certificate is created. See the +\&\fBx509v3_config\fR\|(5) manual page for details of the +extension section format. +.IP "\fB\-extfile file\fR" 4 +.IX Item "-extfile file" +An additional configuration file to read certificate extensions from +(using the default section unless the \fB\-extensions\fR option is also +used). +.IP "\fB\-engine id\fR" 4 +.IX Item "-engine id" +Specifying an engine (by its unique \fBid\fR string) will cause \fBca\fR +to attempt to obtain a functional reference to the specified engine, +thus initialising it if needed. The engine will then be set as the default +for all available algorithms. +.IP "\fB\-subj arg\fR" 4 +.IX Item "-subj arg" +Supersedes subject name given in the request. +The arg must be formatted as \fI/type0=value0/type1=value1/type2=...\fR. +Keyword characters may be escaped by \e (backslash), and whitespace is retained. +Empty values are permitted, but the corresponding type will not be included +in the resulting certificate. +.IP "\fB\-utf8\fR" 4 +.IX Item "-utf8" +This option causes field values to be interpreted as \s-1UTF8\s0 strings, by +default they are interpreted as \s-1ASCII.\s0 This means that the field +values, whether prompted from a terminal or obtained from a +configuration file, must be valid \s-1UTF8\s0 strings. +.IP "\fB\-create_serial\fR" 4 +.IX Item "-create_serial" +If reading serial from the text file as specified in the configuration +fails, specifying this option creates a new random serial to be used as next +serial number. +To get random serial numbers, use the \fB\-rand_serial\fR flag instead; this +should only be used for simple error-recovery. +.IP "\fB\-rand_serial\fR" 4 +.IX Item "-rand_serial" +Generate a large random number to use as the serial number. +This overrides any option or configuration to use a serial number file. +.IP "\fB\-multivalue\-rdn\fR" 4 +.IX Item "-multivalue-rdn" +This option causes the \-subj argument to be interpreted with full +support for multivalued RDNs. Example: +.Sp +\&\fI/DC=org/DC=OpenSSL/DC=users/UID=123456+CN=John Doe\fR +.Sp +If \-multi\-rdn is not used then the \s-1UID\s0 value is \fI123456+CN=John Doe\fR. +.IP "\fB\-rand file...\fR" 4 +.IX Item "-rand file..." +A file or files containing random data used to seed the random number +generator. +Multiple files can be specified separated by an OS-dependent character. +The separator is \fB;\fR for MS-Windows, \fB,\fR for OpenVMS, and \fB:\fR for +all others. +.IP "[\fB\-writerand file\fR]" 4 +.IX Item "[-writerand file]" +Writes random data to the specified \fIfile\fR upon exit. +This can be used with a subsequent \fB\-rand\fR flag. +.SH "CRL OPTIONS" +.IX Header "CRL OPTIONS" +.IP "\fB\-gencrl\fR" 4 +.IX Item "-gencrl" +This option generates a \s-1CRL\s0 based on information in the index file. +.IP "\fB\-crldays num\fR" 4 +.IX Item "-crldays num" +The number of days before the next \s-1CRL\s0 is due. That is the days from +now to place in the \s-1CRL\s0 nextUpdate field. +.IP "\fB\-crlhours num\fR" 4 +.IX Item "-crlhours num" +The number of hours before the next \s-1CRL\s0 is due. +.IP "\fB\-revoke filename\fR" 4 +.IX Item "-revoke filename" +A filename containing a certificate to revoke. +.IP "\fB\-valid filename\fR" 4 +.IX Item "-valid filename" +A filename containing a certificate to add a Valid certificate entry. +.IP "\fB\-status serial\fR" 4 +.IX Item "-status serial" +Displays the revocation status of the certificate with the specified +serial number and exits. +.IP "\fB\-updatedb\fR" 4 +.IX Item "-updatedb" +Updates the database index to purge expired certificates. +.IP "\fB\-crl_reason reason\fR" 4 +.IX Item "-crl_reason reason" +Revocation reason, where \fBreason\fR is one of: \fBunspecified\fR, \fBkeyCompromise\fR, +\&\fBCACompromise\fR, \fBaffiliationChanged\fR, \fBsuperseded\fR, \fBcessationOfOperation\fR, +\&\fBcertificateHold\fR or \fBremoveFromCRL\fR. The matching of \fBreason\fR is case +insensitive. Setting any revocation reason will make the \s-1CRL\s0 v2. +.Sp +In practice \fBremoveFromCRL\fR is not particularly useful because it is only used +in delta CRLs which are not currently implemented. +.IP "\fB\-crl_hold instruction\fR" 4 +.IX Item "-crl_hold instruction" +This sets the \s-1CRL\s0 revocation reason code to \fBcertificateHold\fR and the hold +instruction to \fBinstruction\fR which must be an \s-1OID.\s0 Although any \s-1OID\s0 can be +used only \fBholdInstructionNone\fR (the use of which is discouraged by \s-1RFC2459\s0) +\&\fBholdInstructionCallIssuer\fR or \fBholdInstructionReject\fR will normally be used. +.IP "\fB\-crl_compromise time\fR" 4 +.IX Item "-crl_compromise time" +This sets the revocation reason to \fBkeyCompromise\fR and the compromise time to +\&\fBtime\fR. \fBtime\fR should be in GeneralizedTime format that is \fB\s-1YYYYMMDDHHMMSSZ\s0\fR. +.IP "\fB\-crl_CA_compromise time\fR" 4 +.IX Item "-crl_CA_compromise time" +This is the same as \fBcrl_compromise\fR except the revocation reason is set to +\&\fBCACompromise\fR. +.IP "\fB\-crlexts section\fR" 4 +.IX Item "-crlexts section" +The section of the configuration file containing \s-1CRL\s0 extensions to +include. If no \s-1CRL\s0 extension section is present then a V1 \s-1CRL\s0 is +created, if the \s-1CRL\s0 extension section is present (even if it is +empty) then a V2 \s-1CRL\s0 is created. The \s-1CRL\s0 extensions specified are +\&\s-1CRL\s0 extensions and \fBnot\fR \s-1CRL\s0 entry extensions. It should be noted +that some software (for example Netscape) can't handle V2 CRLs. See +\&\fBx509v3_config\fR\|(5) manual page for details of the +extension section format. +.SH "CONFIGURATION FILE OPTIONS" +.IX Header "CONFIGURATION FILE OPTIONS" +The section of the configuration file containing options for \fBca\fR +is found as follows: If the \fB\-name\fR command line option is used, +then it names the section to be used. Otherwise the section to +be used must be named in the \fBdefault_ca\fR option of the \fBca\fR section +of the configuration file (or in the default section of the +configuration file). Besides \fBdefault_ca\fR, the following options are +read directly from the \fBca\fR section: + \s-1RANDFILE\s0 + preserve + msie_hack +With the exception of \fB\s-1RANDFILE\s0\fR, this is probably a bug and may +change in future releases. +.PP +Many of the configuration file options are identical to command line +options. Where the option is present in the configuration file +and the command line the command line value is used. Where an +option is described as mandatory then it must be present in +the configuration file or the command line equivalent (if +any) used. +.IP "\fBoid_file\fR" 4 +.IX Item "oid_file" +This specifies a file containing additional \fB\s-1OBJECT IDENTIFIERS\s0\fR. +Each line of the file should consist of the numerical form of the +object identifier followed by white space then the short name followed +by white space and finally the long name. +.IP "\fBoid_section\fR" 4 +.IX Item "oid_section" +This specifies a section in the configuration file containing extra +object identifiers. Each line should consist of the short name of the +object identifier followed by \fB=\fR and the numerical form. The short +and long names are the same when this option is used. +.IP "\fBnew_certs_dir\fR" 4 +.IX Item "new_certs_dir" +The same as the \fB\-outdir\fR command line option. It specifies +the directory where new certificates will be placed. Mandatory. +.IP "\fBcertificate\fR" 4 +.IX Item "certificate" +The same as \fB\-cert\fR. It gives the file containing the \s-1CA\s0 +certificate. Mandatory. +.IP "\fBprivate_key\fR" 4 +.IX Item "private_key" +Same as the \fB\-keyfile\fR option. The file containing the +\&\s-1CA\s0 private key. Mandatory. +.IP "\fB\s-1RANDFILE\s0\fR" 4 +.IX Item "RANDFILE" +At startup the specified file is loaded into the random number generator, +and at exit 256 bytes will be written to it. +.IP "\fBdefault_days\fR" 4 +.IX Item "default_days" +The same as the \fB\-days\fR option. The number of days to certify +a certificate for. +.IP "\fBdefault_startdate\fR" 4 +.IX Item "default_startdate" +The same as the \fB\-startdate\fR option. The start date to certify +a certificate for. If not set the current time is used. +.IP "\fBdefault_enddate\fR" 4 +.IX Item "default_enddate" +The same as the \fB\-enddate\fR option. Either this option or +\&\fBdefault_days\fR (or the command line equivalents) must be +present. +.IP "\fBdefault_crl_hours default_crl_days\fR" 4 +.IX Item "default_crl_hours default_crl_days" +The same as the \fB\-crlhours\fR and the \fB\-crldays\fR options. These +will only be used if neither command line option is present. At +least one of these must be present to generate a \s-1CRL.\s0 +.IP "\fBdefault_md\fR" 4 +.IX Item "default_md" +The same as the \fB\-md\fR option. Mandatory except where the signing algorithm does +not require a digest (i.e. Ed25519 and Ed448). +.IP "\fBdatabase\fR" 4 +.IX Item "database" +The text database file to use. Mandatory. This file must be present +though initially it will be empty. +.IP "\fBunique_subject\fR" 4 +.IX Item "unique_subject" +If the value \fByes\fR is given, the valid certificate entries in the +database must have unique subjects. if the value \fBno\fR is given, +several valid certificate entries may have the exact same subject. +The default value is \fByes\fR, to be compatible with older (pre 0.9.8) +versions of OpenSSL. However, to make \s-1CA\s0 certificate roll-over easier, +it's recommended to use the value \fBno\fR, especially if combined with +the \fB\-selfsign\fR command line option. +.Sp +Note that it is valid in some circumstances for certificates to be created +without any subject. In the case where there are multiple certificates without +subjects this does not count as a duplicate. +.IP "\fBserial\fR" 4 +.IX Item "serial" +A text file containing the next serial number to use in hex. Mandatory. +This file must be present and contain a valid serial number. +.IP "\fBcrlnumber\fR" 4 +.IX Item "crlnumber" +A text file containing the next \s-1CRL\s0 number to use in hex. The crl number +will be inserted in the CRLs only if this file exists. If this file is +present, it must contain a valid \s-1CRL\s0 number. +.IP "\fBx509_extensions\fR" 4 +.IX Item "x509_extensions" +The same as \fB\-extensions\fR. +.IP "\fBcrl_extensions\fR" 4 +.IX Item "crl_extensions" +The same as \fB\-crlexts\fR. +.IP "\fBpreserve\fR" 4 +.IX Item "preserve" +The same as \fB\-preserveDN\fR +.IP "\fBemail_in_dn\fR" 4 +.IX Item "email_in_dn" +The same as \fB\-noemailDN\fR. If you want the \s-1EMAIL\s0 field to be removed +from the \s-1DN\s0 of the certificate simply set this to 'no'. If not present +the default is to allow for the \s-1EMAIL\s0 filed in the certificate's \s-1DN.\s0 +.IP "\fBmsie_hack\fR" 4 +.IX Item "msie_hack" +The same as \fB\-msie_hack\fR +.IP "\fBpolicy\fR" 4 +.IX Item "policy" +The same as \fB\-policy\fR. Mandatory. See the \fB\s-1POLICY FORMAT\s0\fR section +for more information. +.IP "\fBname_opt\fR, \fBcert_opt\fR" 4 +.IX Item "name_opt, cert_opt" +These options allow the format used to display the certificate details +when asking the user to confirm signing. All the options supported by +the \fBx509\fR utilities \fB\-nameopt\fR and \fB\-certopt\fR switches can be used +here, except the \fBno_signame\fR and \fBno_sigdump\fR are permanently set +and cannot be disabled (this is because the certificate signature cannot +be displayed because the certificate has not been signed at this point). +.Sp +For convenience the values \fBca_default\fR are accepted by both to produce +a reasonable output. +.Sp +If neither option is present the format used in earlier versions of +OpenSSL is used. Use of the old format is \fBstrongly\fR discouraged because +it only displays fields mentioned in the \fBpolicy\fR section, mishandles +multicharacter string types and does not display extensions. +.IP "\fBcopy_extensions\fR" 4 +.IX Item "copy_extensions" +Determines how extensions in certificate requests should be handled. +If set to \fBnone\fR or this option is not present then extensions are +ignored and not copied to the certificate. If set to \fBcopy\fR then any +extensions present in the request that are not already present are copied +to the certificate. If set to \fBcopyall\fR then all extensions in the +request are copied to the certificate: if the extension is already present +in the certificate it is deleted first. See the \fB\s-1WARNINGS\s0\fR section before +using this option. +.Sp +The main use of this option is to allow a certificate request to supply +values for certain extensions such as subjectAltName. +.SH "POLICY FORMAT" +.IX Header "POLICY FORMAT" +The policy section consists of a set of variables corresponding to +certificate \s-1DN\s0 fields. If the value is \*(L"match\*(R" then the field value +must match the same field in the \s-1CA\s0 certificate. If the value is +\&\*(L"supplied\*(R" then it must be present. If the value is \*(L"optional\*(R" then +it may be present. Any fields not mentioned in the policy section +are silently deleted, unless the \fB\-preserveDN\fR option is set but +this can be regarded more of a quirk than intended behaviour. +.SH "SPKAC FORMAT" +.IX Header "SPKAC FORMAT" +The input to the \fB\-spkac\fR command line option is a Netscape +signed public key and challenge. This will usually come from +the \fB\s-1KEYGEN\s0\fR tag in an \s-1HTML\s0 form to create a new private key. +It is however possible to create SPKACs using the \fBspkac\fR utility. +.PP +The file should contain the variable \s-1SPKAC\s0 set to the value of +the \s-1SPKAC\s0 and also the required \s-1DN\s0 components as name value pairs. +If you need to include the same component twice then it can be +preceded by a number and a '.'. +.PP +When processing \s-1SPKAC\s0 format, the output is \s-1DER\s0 if the \fB\-out\fR +flag is used, but \s-1PEM\s0 format if sending to stdout or the \fB\-outdir\fR +flag is used. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +Note: these examples assume that the \fBca\fR directory structure is +already set up and the relevant files already exist. This usually +involves creating a \s-1CA\s0 certificate and private key with \fBreq\fR, a +serial number file and an empty index file and placing them in +the relevant directories. +.PP +To use the sample configuration file below the directories demoCA, +demoCA/private and demoCA/newcerts would be created. The \s-1CA\s0 +certificate would be copied to demoCA/cacert.pem and its private +key to demoCA/private/cakey.pem. A file demoCA/serial would be +created containing for example \*(L"01\*(R" and the empty index file +demoCA/index.txt. +.PP +Sign a certificate request: +.PP +.Vb 1 +\& openssl ca \-in req.pem \-out newcert.pem +.Ve +.PP +Sign a certificate request, using \s-1CA\s0 extensions: +.PP +.Vb 1 +\& openssl ca \-in req.pem \-extensions v3_ca \-out newcert.pem +.Ve +.PP +Generate a \s-1CRL\s0 +.PP +.Vb 1 +\& openssl ca \-gencrl \-out crl.pem +.Ve +.PP +Sign several requests: +.PP +.Vb 1 +\& openssl ca \-infiles req1.pem req2.pem req3.pem +.Ve +.PP +Certify a Netscape \s-1SPKAC:\s0 +.PP +.Vb 1 +\& openssl ca \-spkac spkac.txt +.Ve +.PP +A sample \s-1SPKAC\s0 file (the \s-1SPKAC\s0 line has been truncated for clarity): +.PP +.Vb 5 +\& SPKAC=MIG0MGAwXDANBgkqhkiG9w0BAQEFAANLADBIAkEAn7PDhCeV/xIxUg8V70YRxK2A5 +\& CN=Steve Test +\& emailAddress=steve@openssl.org +\& 0.OU=OpenSSL Group +\& 1.OU=Another Group +.Ve +.PP +A sample configuration file with the relevant sections for \fBca\fR: +.PP +.Vb 2 +\& [ ca ] +\& default_ca = CA_default # The default ca section +\& +\& [ CA_default ] +\& +\& dir = ./demoCA # top dir +\& database = $dir/index.txt # index file. +\& new_certs_dir = $dir/newcerts # new certs dir +\& +\& certificate = $dir/cacert.pem # The CA cert +\& serial = $dir/serial # serial no file +\& #rand_serial = yes # for random serial#\*(Aqs +\& private_key = $dir/private/cakey.pem# CA private key +\& RANDFILE = $dir/private/.rand # random number file +\& +\& default_days = 365 # how long to certify for +\& default_crl_days= 30 # how long before next CRL +\& default_md = md5 # md to use +\& +\& policy = policy_any # default policy +\& email_in_dn = no # Don\*(Aqt add the email into cert DN +\& +\& name_opt = ca_default # Subject name display option +\& cert_opt = ca_default # Certificate display option +\& copy_extensions = none # Don\*(Aqt copy extensions from request +\& +\& [ policy_any ] +\& countryName = supplied +\& stateOrProvinceName = optional +\& organizationName = optional +\& organizationalUnitName = optional +\& commonName = supplied +\& emailAddress = optional +.Ve +.SH "FILES" +.IX Header "FILES" +Note: the location of all files can change either by compile time options, +configuration file entries, environment variables or command line options. +The values below reflect the default values. +.PP +.Vb 10 +\& /usr/local/ssl/lib/openssl.cnf \- master configuration file +\& ./demoCA \- main CA directory +\& ./demoCA/cacert.pem \- CA certificate +\& ./demoCA/private/cakey.pem \- CA private key +\& ./demoCA/serial \- CA serial number file +\& ./demoCA/serial.old \- CA serial number backup file +\& ./demoCA/index.txt \- CA text database file +\& ./demoCA/index.txt.old \- CA text database backup file +\& ./demoCA/certs \- certificate output file +\& ./demoCA/.rnd \- CA random seed information +.Ve +.SH "RESTRICTIONS" +.IX Header "RESTRICTIONS" +The text database index file is a critical part of the process and +if corrupted it can be difficult to fix. It is theoretically possible +to rebuild the index file from all the issued certificates and a current +\&\s-1CRL:\s0 however there is no option to do this. +.PP +V2 \s-1CRL\s0 features like delta CRLs are not currently supported. +.PP +Although several requests can be input and handled at once it is only +possible to include one \s-1SPKAC\s0 or self-signed certificate. +.SH "BUGS" +.IX Header "BUGS" +The use of an in-memory text database can cause problems when large +numbers of certificates are present because, as the name implies +the database has to be kept in memory. +.PP +The \fBca\fR command really needs rewriting or the required functionality +exposed at either a command or interface level so a more friendly utility +(perl script or \s-1GUI\s0) can handle things properly. The script +\&\fB\s-1CA\s0.pl\fR helps a little but not very much. +.PP +Any fields in a request that are not present in a policy are silently +deleted. This does not happen if the \fB\-preserveDN\fR option is used. To +enforce the absence of the \s-1EMAIL\s0 field within the \s-1DN,\s0 as suggested by +RFCs, regardless the contents of the request' subject the \fB\-noemailDN\fR +option can be used. The behaviour should be more friendly and +configurable. +.PP +Canceling some commands by refusing to certify a certificate can +create an empty file. +.SH "WARNINGS" +.IX Header "WARNINGS" +The \fBca\fR command is quirky and at times downright unfriendly. +.PP +The \fBca\fR utility was originally meant as an example of how to do things +in a \s-1CA.\s0 It was not supposed to be used as a full blown \s-1CA\s0 itself: +nevertheless some people are using it for this purpose. +.PP +The \fBca\fR command is effectively a single user command: no locking is +done on the various files and attempts to run more than one \fBca\fR command +on the same database can have unpredictable results. +.PP +The \fBcopy_extensions\fR option should be used with caution. If care is +not taken then it can be a security risk. For example if a certificate +request contains a basicConstraints extension with \s-1CA:TRUE\s0 and the +\&\fBcopy_extensions\fR value is set to \fBcopyall\fR and the user does not spot +this when the certificate is displayed then this will hand the requester +a valid \s-1CA\s0 certificate. +.PP +This situation can be avoided by setting \fBcopy_extensions\fR to \fBcopy\fR +and including basicConstraints with \s-1CA:FALSE\s0 in the configuration file. +Then if the request contains a basicConstraints extension it will be +ignored. +.PP +It is advisable to also include values for other extensions such +as \fBkeyUsage\fR to prevent a request supplying its own values. +.PP +Additional restrictions can be placed on the \s-1CA\s0 certificate itself. +For example if the \s-1CA\s0 certificate has: +.PP +.Vb 1 +\& basicConstraints = CA:TRUE, pathlen:0 +.Ve +.PP +then even if a certificate is issued with \s-1CA:TRUE\s0 it will not be valid. +.SH "HISTORY" +.IX Header "HISTORY" +Since OpenSSL 1.1.1, the program follows \s-1RFC5280.\s0 Specifically, +certificate validity period (specified by any of \fB\-startdate\fR, +\&\fB\-enddate\fR and \fB\-days\fR) will be encoded as UTCTime if the dates are +earlier than year 2049 (included), and as GeneralizedTime if the dates +are in year 2050 or later. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBreq\fR\|(1), \fBspkac\fR\|(1), \fBx509\fR\|(1), \s-1\fBCA\s0.pl\fR\|(1), +\&\fBconfig\fR\|(5), \fBx509v3_config\fR\|(5) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/ciphers.1 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/ciphers.1 new file mode 100644 index 00000000..9eb5bb0a --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/ciphers.1 @@ -0,0 +1,868 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "CIPHERS 1" +.TH CIPHERS 1 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +openssl\-ciphers, ciphers \- SSL cipher display and cipher list tool +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +\&\fBopenssl\fR \fBciphers\fR +[\fB\-help\fR] +[\fB\-s\fR] +[\fB\-v\fR] +[\fB\-V\fR] +[\fB\-ssl3\fR] +[\fB\-tls1\fR] +[\fB\-tls1_1\fR] +[\fB\-tls1_2\fR] +[\fB\-tls1_3\fR] +[\fB\-s\fR] +[\fB\-psk\fR] +[\fB\-srp\fR] +[\fB\-stdname\fR] +[\fB\-convert name\fR] +[\fB\-ciphersuites val\fR] +[\fBcipherlist\fR] +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fBciphers\fR command converts textual OpenSSL cipher lists into ordered +\&\s-1SSL\s0 cipher preference lists. It can be used as a test tool to determine +the appropriate cipherlist. +.SH "OPTIONS" +.IX Header "OPTIONS" +.IP "\fB\-help\fR" 4 +.IX Item "-help" +Print a usage message. +.IP "\fB\-s\fR" 4 +.IX Item "-s" +Only list supported ciphers: those consistent with the security level, and +minimum and maximum protocol version. This is closer to the actual cipher list +an application will support. +.Sp +\&\s-1PSK\s0 and \s-1SRP\s0 ciphers are not enabled by default: they require \fB\-psk\fR or \fB\-srp\fR +to enable them. +.Sp +It also does not change the default list of supported signature algorithms. +.Sp +On a server the list of supported ciphers might also exclude other ciphers +depending on the configured certificates and presence of \s-1DH\s0 parameters. +.Sp +If this option is not used then all ciphers that match the cipherlist will be +listed. +.IP "\fB\-psk\fR" 4 +.IX Item "-psk" +When combined with \fB\-s\fR includes cipher suites which require \s-1PSK.\s0 +.IP "\fB\-srp\fR" 4 +.IX Item "-srp" +When combined with \fB\-s\fR includes cipher suites which require \s-1SRP.\s0 +.IP "\fB\-v\fR" 4 +.IX Item "-v" +Verbose output: For each cipher suite, list details as provided by +\&\fBSSL_CIPHER_description\fR\|(3). +.IP "\fB\-V\fR" 4 +.IX Item "-V" +Like \fB\-v\fR, but include the official cipher suite values in hex. +.IP "\fB\-tls1_3\fR, \fB\-tls1_2\fR, \fB\-tls1_1\fR, \fB\-tls1\fR, \fB\-ssl3\fR" 4 +.IX Item "-tls1_3, -tls1_2, -tls1_1, -tls1, -ssl3" +In combination with the \fB\-s\fR option, list the ciphers which could be used if +the specified protocol were negotiated. +Note that not all protocols and flags may be available, depending on how +OpenSSL was built. +.IP "\fB\-stdname\fR" 4 +.IX Item "-stdname" +Precede each cipher suite by its standard name. +.IP "\fB\-convert name\fR" 4 +.IX Item "-convert name" +Convert a standard cipher \fBname\fR to its OpenSSL name. +.IP "\fB\-ciphersuites val\fR" 4 +.IX Item "-ciphersuites val" +Sets the list of TLSv1.3 ciphersuites. This list will be combined with any +TLSv1.2 and below ciphersuites that have been configured. The format for this +list is a simple colon (\*(L":\*(R") separated list of TLSv1.3 ciphersuite names. By +default this value is: +.Sp +.Vb 1 +\& TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256 +.Ve +.IP "\fBcipherlist\fR" 4 +.IX Item "cipherlist" +A cipher list of TLSv1.2 and below ciphersuites to convert to a cipher +preference list. This list will be combined with any TLSv1.3 ciphersuites that +have been configured. If it is not included then the default cipher list will be +used. The format is described below. +.SH "CIPHER LIST FORMAT" +.IX Header "CIPHER LIST FORMAT" +The cipher list consists of one or more \fIcipher strings\fR separated by colons. +Commas or spaces are also acceptable separators but colons are normally used. +.PP +The actual cipher string can take several different forms. +.PP +It can consist of a single cipher suite such as \fB\s-1RC4\-SHA\s0\fR. +.PP +It can represent a list of cipher suites containing a certain algorithm, or +cipher suites of a certain type. For example \fB\s-1SHA1\s0\fR represents all ciphers +suites using the digest algorithm \s-1SHA1\s0 and \fBSSLv3\fR represents all \s-1SSL\s0 v3 +algorithms. +.PP +Lists of cipher suites can be combined in a single cipher string using the +\&\fB+\fR character. This is used as a logical \fBand\fR operation. For example +\&\fB\s-1SHA1+DES\s0\fR represents all cipher suites containing the \s-1SHA1\s0 \fBand\fR the \s-1DES\s0 +algorithms. +.PP +Each cipher string can be optionally preceded by the characters \fB!\fR, +\&\fB\-\fR or \fB+\fR. +.PP +If \fB!\fR is used then the ciphers are permanently deleted from the list. +The ciphers deleted can never reappear in the list even if they are +explicitly stated. +.PP +If \fB\-\fR is used then the ciphers are deleted from the list, but some or +all of the ciphers can be added again by later options. +.PP +If \fB+\fR is used then the ciphers are moved to the end of the list. This +option doesn't add any new ciphers it just moves matching existing ones. +.PP +If none of these characters is present then the string is just interpreted +as a list of ciphers to be appended to the current preference list. If the +list includes any ciphers already present they will be ignored: that is they +will not moved to the end of the list. +.PP +The cipher string \fB\f(CB@STRENGTH\fB\fR can be used at any point to sort the current +cipher list in order of encryption algorithm key length. +.PP +The cipher string \fB\f(CB@SECLEVEL\fB=n\fR can be used at any point to set the security +level to \fBn\fR, which should be a number between zero and five, inclusive. +See SSL_CTX_set_security_level for a description of what each level means. +.PP +The cipher list can be prefixed with the \fB\s-1DEFAULT\s0\fR keyword, which enables +the default cipher list as defined below. Unlike cipher strings, +this prefix may not be combined with other strings using \fB+\fR character. +For example, \fB\s-1DEFAULT+DES\s0\fR is not valid. +.PP +The content of the default list is determined at compile time and normally +corresponds to \fB\s-1ALL:\s0!COMPLEMENTOFDEFAULT:!eNULL\fR. +.SH "CIPHER STRINGS" +.IX Header "CIPHER STRINGS" +The following is a list of all permitted cipher strings and their meanings. +.IP "\fB\s-1COMPLEMENTOFDEFAULT\s0\fR" 4 +.IX Item "COMPLEMENTOFDEFAULT" +The ciphers included in \fB\s-1ALL\s0\fR, but not enabled by default. Currently +this includes all \s-1RC4\s0 and anonymous ciphers. Note that this rule does +not cover \fBeNULL\fR, which is not included by \fB\s-1ALL\s0\fR (use \fB\s-1COMPLEMENTOFALL\s0\fR if +necessary). Note that \s-1RC4\s0 based cipher suites are not built into OpenSSL by +default (see the enable-weak-ssl-ciphers option to Configure). +.IP "\fB\s-1ALL\s0\fR" 4 +.IX Item "ALL" +All cipher suites except the \fBeNULL\fR ciphers (which must be explicitly enabled +if needed). +As of OpenSSL 1.0.0, the \fB\s-1ALL\s0\fR cipher suites are sensibly ordered by default. +.IP "\fB\s-1COMPLEMENTOFALL\s0\fR" 4 +.IX Item "COMPLEMENTOFALL" +The cipher suites not enabled by \fB\s-1ALL\s0\fR, currently \fBeNULL\fR. +.IP "\fB\s-1HIGH\s0\fR" 4 +.IX Item "HIGH" +\&\*(L"High\*(R" encryption cipher suites. This currently means those with key lengths +larger than 128 bits, and some cipher suites with 128\-bit keys. +.IP "\fB\s-1MEDIUM\s0\fR" 4 +.IX Item "MEDIUM" +\&\*(L"Medium\*(R" encryption cipher suites, currently some of those using 128 bit +encryption. +.IP "\fB\s-1LOW\s0\fR" 4 +.IX Item "LOW" +\&\*(L"Low\*(R" encryption cipher suites, currently those using 64 or 56 bit +encryption algorithms but excluding export cipher suites. All these +cipher suites have been removed as of OpenSSL 1.1.0. +.IP "\fBeNULL\fR, \fB\s-1NULL\s0\fR" 4 +.IX Item "eNULL, NULL" +The \*(L"\s-1NULL\*(R"\s0 ciphers that is those offering no encryption. Because these offer no +encryption at all and are a security risk they are not enabled via either the +\&\fB\s-1DEFAULT\s0\fR or \fB\s-1ALL\s0\fR cipher strings. +Be careful when building cipherlists out of lower-level primitives such as +\&\fBkRSA\fR or \fBaECDSA\fR as these do overlap with the \fBeNULL\fR ciphers. When in +doubt, include \fB!eNULL\fR in your cipherlist. +.IP "\fBaNULL\fR" 4 +.IX Item "aNULL" +The cipher suites offering no authentication. This is currently the anonymous +\&\s-1DH\s0 algorithms and anonymous \s-1ECDH\s0 algorithms. These cipher suites are vulnerable +to \*(L"man in the middle\*(R" attacks and so their use is discouraged. +These are excluded from the \fB\s-1DEFAULT\s0\fR ciphers, but included in the \fB\s-1ALL\s0\fR +ciphers. +Be careful when building cipherlists out of lower-level primitives such as +\&\fBkDHE\fR or \fB\s-1AES\s0\fR as these do overlap with the \fBaNULL\fR ciphers. +When in doubt, include \fB!aNULL\fR in your cipherlist. +.IP "\fBkRSA\fR, \fBaRSA\fR, \fB\s-1RSA\s0\fR" 4 +.IX Item "kRSA, aRSA, RSA" +Cipher suites using \s-1RSA\s0 key exchange or authentication. \fB\s-1RSA\s0\fR is an alias for +\&\fBkRSA\fR. +.IP "\fBkDHr\fR, \fBkDHd\fR, \fBkDH\fR" 4 +.IX Item "kDHr, kDHd, kDH" +Cipher suites using static \s-1DH\s0 key agreement and \s-1DH\s0 certificates signed by CAs +with \s-1RSA\s0 and \s-1DSS\s0 keys or either respectively. +All these cipher suites have been removed in OpenSSL 1.1.0. +.IP "\fBkDHE\fR, \fBkEDH\fR, \fB\s-1DH\s0\fR" 4 +.IX Item "kDHE, kEDH, DH" +Cipher suites using ephemeral \s-1DH\s0 key agreement, including anonymous cipher +suites. +.IP "\fB\s-1DHE\s0\fR, \fB\s-1EDH\s0\fR" 4 +.IX Item "DHE, EDH" +Cipher suites using authenticated ephemeral \s-1DH\s0 key agreement. +.IP "\fB\s-1ADH\s0\fR" 4 +.IX Item "ADH" +Anonymous \s-1DH\s0 cipher suites, note that this does not include anonymous Elliptic +Curve \s-1DH\s0 (\s-1ECDH\s0) cipher suites. +.IP "\fBkEECDH\fR, \fBkECDHE\fR, \fB\s-1ECDH\s0\fR" 4 +.IX Item "kEECDH, kECDHE, ECDH" +Cipher suites using ephemeral \s-1ECDH\s0 key agreement, including anonymous +cipher suites. +.IP "\fB\s-1ECDHE\s0\fR, \fB\s-1EECDH\s0\fR" 4 +.IX Item "ECDHE, EECDH" +Cipher suites using authenticated ephemeral \s-1ECDH\s0 key agreement. +.IP "\fB\s-1AECDH\s0\fR" 4 +.IX Item "AECDH" +Anonymous Elliptic Curve Diffie-Hellman cipher suites. +.IP "\fBaDSS\fR, \fB\s-1DSS\s0\fR" 4 +.IX Item "aDSS, DSS" +Cipher suites using \s-1DSS\s0 authentication, i.e. the certificates carry \s-1DSS\s0 keys. +.IP "\fBaDH\fR" 4 +.IX Item "aDH" +Cipher suites effectively using \s-1DH\s0 authentication, i.e. the certificates carry +\&\s-1DH\s0 keys. +All these cipher suites have been removed in OpenSSL 1.1.0. +.IP "\fBaECDSA\fR, \fB\s-1ECDSA\s0\fR" 4 +.IX Item "aECDSA, ECDSA" +Cipher suites using \s-1ECDSA\s0 authentication, i.e. the certificates carry \s-1ECDSA\s0 +keys. +.IP "\fBTLSv1.2\fR, \fBTLSv1.0\fR, \fBSSLv3\fR" 4 +.IX Item "TLSv1.2, TLSv1.0, SSLv3" +Lists cipher suites which are only supported in at least \s-1TLS\s0 v1.2, \s-1TLS\s0 v1.0 or +\&\s-1SSL\s0 v3.0 respectively. +Note: there are no cipher suites specific to \s-1TLS\s0 v1.1. +Since this is only the minimum version, if, for example, TLSv1.0 is negotiated +then both TLSv1.0 and SSLv3.0 cipher suites are available. +.Sp +Note: these cipher strings \fBdo not\fR change the negotiated version of \s-1SSL\s0 or +\&\s-1TLS,\s0 they only affect the list of available cipher suites. +.IP "\fB\s-1AES128\s0\fR, \fB\s-1AES256\s0\fR, \fB\s-1AES\s0\fR" 4 +.IX Item "AES128, AES256, AES" +cipher suites using 128 bit \s-1AES, 256\s0 bit \s-1AES\s0 or either 128 or 256 bit \s-1AES.\s0 +.IP "\fB\s-1AESGCM\s0\fR" 4 +.IX Item "AESGCM" +\&\s-1AES\s0 in Galois Counter Mode (\s-1GCM\s0): these cipher suites are only supported +in \s-1TLS\s0 v1.2. +.IP "\fB\s-1AESCCM\s0\fR, \fB\s-1AESCCM8\s0\fR" 4 +.IX Item "AESCCM, AESCCM8" +\&\s-1AES\s0 in Cipher Block Chaining \- Message Authentication Mode (\s-1CCM\s0): these +cipher suites are only supported in \s-1TLS\s0 v1.2. \fB\s-1AESCCM\s0\fR references \s-1CCM\s0 +cipher suites using both 16 and 8 octet Integrity Check Value (\s-1ICV\s0) +while \fB\s-1AESCCM8\s0\fR only references 8 octet \s-1ICV.\s0 +.IP "\fB\s-1ARIA128\s0\fR, \fB\s-1ARIA256\s0\fR, \fB\s-1ARIA\s0\fR" 4 +.IX Item "ARIA128, ARIA256, ARIA" +Cipher suites using 128 bit \s-1ARIA, 256\s0 bit \s-1ARIA\s0 or either 128 or 256 bit +\&\s-1ARIA.\s0 +.IP "\fB\s-1CAMELLIA128\s0\fR, \fB\s-1CAMELLIA256\s0\fR, \fB\s-1CAMELLIA\s0\fR" 4 +.IX Item "CAMELLIA128, CAMELLIA256, CAMELLIA" +Cipher suites using 128 bit \s-1CAMELLIA, 256\s0 bit \s-1CAMELLIA\s0 or either 128 or 256 bit +\&\s-1CAMELLIA.\s0 +.IP "\fB\s-1CHACHA20\s0\fR" 4 +.IX Item "CHACHA20" +Cipher suites using ChaCha20. +.IP "\fB3DES\fR" 4 +.IX Item "3DES" +Cipher suites using triple \s-1DES.\s0 +.IP "\fB\s-1DES\s0\fR" 4 +.IX Item "DES" +Cipher suites using \s-1DES\s0 (not triple \s-1DES\s0). +All these cipher suites have been removed in OpenSSL 1.1.0. +.IP "\fB\s-1RC4\s0\fR" 4 +.IX Item "RC4" +Cipher suites using \s-1RC4.\s0 +.IP "\fB\s-1RC2\s0\fR" 4 +.IX Item "RC2" +Cipher suites using \s-1RC2.\s0 +.IP "\fB\s-1IDEA\s0\fR" 4 +.IX Item "IDEA" +Cipher suites using \s-1IDEA.\s0 +.IP "\fB\s-1SEED\s0\fR" 4 +.IX Item "SEED" +Cipher suites using \s-1SEED.\s0 +.IP "\fB\s-1MD5\s0\fR" 4 +.IX Item "MD5" +Cipher suites using \s-1MD5.\s0 +.IP "\fB\s-1SHA1\s0\fR, \fB\s-1SHA\s0\fR" 4 +.IX Item "SHA1, SHA" +Cipher suites using \s-1SHA1.\s0 +.IP "\fB\s-1SHA256\s0\fR, \fB\s-1SHA384\s0\fR" 4 +.IX Item "SHA256, SHA384" +Cipher suites using \s-1SHA256\s0 or \s-1SHA384.\s0 +.IP "\fBaGOST\fR" 4 +.IX Item "aGOST" +Cipher suites using \s-1GOST R 34.10\s0 (either 2001 or 94) for authentication +(needs an engine supporting \s-1GOST\s0 algorithms). +.IP "\fBaGOST01\fR" 4 +.IX Item "aGOST01" +Cipher suites using \s-1GOST R 34.10\-2001\s0 authentication. +.IP "\fBkGOST\fR" 4 +.IX Item "kGOST" +Cipher suites, using \s-1VKO 34.10\s0 key exchange, specified in the \s-1RFC 4357.\s0 +.IP "\fB\s-1GOST94\s0\fR" 4 +.IX Item "GOST94" +Cipher suites, using \s-1HMAC\s0 based on \s-1GOST R 34.11\-94.\s0 +.IP "\fB\s-1GOST89MAC\s0\fR" 4 +.IX Item "GOST89MAC" +Cipher suites using \s-1GOST 28147\-89 MAC\s0 \fBinstead of\fR \s-1HMAC.\s0 +.IP "\fB\s-1PSK\s0\fR" 4 +.IX Item "PSK" +All cipher suites using pre-shared keys (\s-1PSK\s0). +.IP "\fBkPSK\fR, \fBkECDHEPSK\fR, \fBkDHEPSK\fR, \fBkRSAPSK\fR" 4 +.IX Item "kPSK, kECDHEPSK, kDHEPSK, kRSAPSK" +Cipher suites using \s-1PSK\s0 key exchange, \s-1ECDHE_PSK, DHE_PSK\s0 or \s-1RSA_PSK.\s0 +.IP "\fBaPSK\fR" 4 +.IX Item "aPSK" +Cipher suites using \s-1PSK\s0 authentication (currently all \s-1PSK\s0 modes apart from +\&\s-1RSA_PSK\s0). +.IP "\fB\s-1SUITEB128\s0\fR, \fB\s-1SUITEB128ONLY\s0\fR, \fB\s-1SUITEB192\s0\fR" 4 +.IX Item "SUITEB128, SUITEB128ONLY, SUITEB192" +Enables suite B mode of operation using 128 (permitting 192 bit mode by peer) +128 bit (not permitting 192 bit by peer) or 192 bit level of security +respectively. +If used these cipherstrings should appear first in the cipher +list and anything after them is ignored. +Setting Suite B mode has additional consequences required to comply with +\&\s-1RFC6460.\s0 +In particular the supported signature algorithms is reduced to support only +\&\s-1ECDSA\s0 and \s-1SHA256\s0 or \s-1SHA384,\s0 only the elliptic curves P\-256 and P\-384 can be +used and only the two suite B compliant cipher suites +(\s-1ECDHE\-ECDSA\-AES128\-GCM\-SHA256\s0 and \s-1ECDHE\-ECDSA\-AES256\-GCM\-SHA384\s0) are +permissible. +.SH "CIPHER SUITE NAMES" +.IX Header "CIPHER SUITE NAMES" +The following lists give the \s-1SSL\s0 or \s-1TLS\s0 cipher suites names from the +relevant specification and their OpenSSL equivalents. It should be noted, +that several cipher suite names do not include the authentication used, +e.g. \s-1DES\-CBC3\-SHA.\s0 In these cases, \s-1RSA\s0 authentication is used. +.SS "\s-1SSL\s0 v3.0 cipher suites" +.IX Subsection "SSL v3.0 cipher suites" +.Vb 6 +\& SSL_RSA_WITH_NULL_MD5 NULL\-MD5 +\& SSL_RSA_WITH_NULL_SHA NULL\-SHA +\& SSL_RSA_WITH_RC4_128_MD5 RC4\-MD5 +\& SSL_RSA_WITH_RC4_128_SHA RC4\-SHA +\& SSL_RSA_WITH_IDEA_CBC_SHA IDEA\-CBC\-SHA +\& SSL_RSA_WITH_3DES_EDE_CBC_SHA DES\-CBC3\-SHA +\& +\& SSL_DH_DSS_WITH_3DES_EDE_CBC_SHA DH\-DSS\-DES\-CBC3\-SHA +\& SSL_DH_RSA_WITH_3DES_EDE_CBC_SHA DH\-RSA\-DES\-CBC3\-SHA +\& SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA DHE\-DSS\-DES\-CBC3\-SHA +\& SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA DHE\-RSA\-DES\-CBC3\-SHA +\& +\& SSL_DH_anon_WITH_RC4_128_MD5 ADH\-RC4\-MD5 +\& SSL_DH_anon_WITH_3DES_EDE_CBC_SHA ADH\-DES\-CBC3\-SHA +\& +\& SSL_FORTEZZA_KEA_WITH_NULL_SHA Not implemented. +\& SSL_FORTEZZA_KEA_WITH_FORTEZZA_CBC_SHA Not implemented. +\& SSL_FORTEZZA_KEA_WITH_RC4_128_SHA Not implemented. +.Ve +.SS "\s-1TLS\s0 v1.0 cipher suites" +.IX Subsection "TLS v1.0 cipher suites" +.Vb 6 +\& TLS_RSA_WITH_NULL_MD5 NULL\-MD5 +\& TLS_RSA_WITH_NULL_SHA NULL\-SHA +\& TLS_RSA_WITH_RC4_128_MD5 RC4\-MD5 +\& TLS_RSA_WITH_RC4_128_SHA RC4\-SHA +\& TLS_RSA_WITH_IDEA_CBC_SHA IDEA\-CBC\-SHA +\& TLS_RSA_WITH_3DES_EDE_CBC_SHA DES\-CBC3\-SHA +\& +\& TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA Not implemented. +\& TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA Not implemented. +\& TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA DHE\-DSS\-DES\-CBC3\-SHA +\& TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA DHE\-RSA\-DES\-CBC3\-SHA +\& +\& TLS_DH_anon_WITH_RC4_128_MD5 ADH\-RC4\-MD5 +\& TLS_DH_anon_WITH_3DES_EDE_CBC_SHA ADH\-DES\-CBC3\-SHA +.Ve +.SS "\s-1AES\s0 cipher suites from \s-1RFC3268,\s0 extending \s-1TLS\s0 v1.0" +.IX Subsection "AES cipher suites from RFC3268, extending TLS v1.0" +.Vb 2 +\& TLS_RSA_WITH_AES_128_CBC_SHA AES128\-SHA +\& TLS_RSA_WITH_AES_256_CBC_SHA AES256\-SHA +\& +\& TLS_DH_DSS_WITH_AES_128_CBC_SHA DH\-DSS\-AES128\-SHA +\& TLS_DH_DSS_WITH_AES_256_CBC_SHA DH\-DSS\-AES256\-SHA +\& TLS_DH_RSA_WITH_AES_128_CBC_SHA DH\-RSA\-AES128\-SHA +\& TLS_DH_RSA_WITH_AES_256_CBC_SHA DH\-RSA\-AES256\-SHA +\& +\& TLS_DHE_DSS_WITH_AES_128_CBC_SHA DHE\-DSS\-AES128\-SHA +\& TLS_DHE_DSS_WITH_AES_256_CBC_SHA DHE\-DSS\-AES256\-SHA +\& TLS_DHE_RSA_WITH_AES_128_CBC_SHA DHE\-RSA\-AES128\-SHA +\& TLS_DHE_RSA_WITH_AES_256_CBC_SHA DHE\-RSA\-AES256\-SHA +\& +\& TLS_DH_anon_WITH_AES_128_CBC_SHA ADH\-AES128\-SHA +\& TLS_DH_anon_WITH_AES_256_CBC_SHA ADH\-AES256\-SHA +.Ve +.SS "Camellia cipher suites from \s-1RFC4132,\s0 extending \s-1TLS\s0 v1.0" +.IX Subsection "Camellia cipher suites from RFC4132, extending TLS v1.0" +.Vb 2 +\& TLS_RSA_WITH_CAMELLIA_128_CBC_SHA CAMELLIA128\-SHA +\& TLS_RSA_WITH_CAMELLIA_256_CBC_SHA CAMELLIA256\-SHA +\& +\& TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA DH\-DSS\-CAMELLIA128\-SHA +\& TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA DH\-DSS\-CAMELLIA256\-SHA +\& TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA DH\-RSA\-CAMELLIA128\-SHA +\& TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA DH\-RSA\-CAMELLIA256\-SHA +\& +\& TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA DHE\-DSS\-CAMELLIA128\-SHA +\& TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA DHE\-DSS\-CAMELLIA256\-SHA +\& TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA DHE\-RSA\-CAMELLIA128\-SHA +\& TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA DHE\-RSA\-CAMELLIA256\-SHA +\& +\& TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA ADH\-CAMELLIA128\-SHA +\& TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA ADH\-CAMELLIA256\-SHA +.Ve +.SS "\s-1SEED\s0 cipher suites from \s-1RFC4162,\s0 extending \s-1TLS\s0 v1.0" +.IX Subsection "SEED cipher suites from RFC4162, extending TLS v1.0" +.Vb 1 +\& TLS_RSA_WITH_SEED_CBC_SHA SEED\-SHA +\& +\& TLS_DH_DSS_WITH_SEED_CBC_SHA DH\-DSS\-SEED\-SHA +\& TLS_DH_RSA_WITH_SEED_CBC_SHA DH\-RSA\-SEED\-SHA +\& +\& TLS_DHE_DSS_WITH_SEED_CBC_SHA DHE\-DSS\-SEED\-SHA +\& TLS_DHE_RSA_WITH_SEED_CBC_SHA DHE\-RSA\-SEED\-SHA +\& +\& TLS_DH_anon_WITH_SEED_CBC_SHA ADH\-SEED\-SHA +.Ve +.SS "\s-1GOST\s0 cipher suites from draft-chudov-cryptopro-cptls, extending \s-1TLS\s0 v1.0" +.IX Subsection "GOST cipher suites from draft-chudov-cryptopro-cptls, extending TLS v1.0" +Note: these ciphers require an engine which including \s-1GOST\s0 cryptographic +algorithms, such as the \fBccgost\fR engine, included in the OpenSSL distribution. +.PP +.Vb 4 +\& TLS_GOSTR341094_WITH_28147_CNT_IMIT GOST94\-GOST89\-GOST89 +\& TLS_GOSTR341001_WITH_28147_CNT_IMIT GOST2001\-GOST89\-GOST89 +\& TLS_GOSTR341094_WITH_NULL_GOSTR3411 GOST94\-NULL\-GOST94 +\& TLS_GOSTR341001_WITH_NULL_GOSTR3411 GOST2001\-NULL\-GOST94 +.Ve +.SS "Additional Export 1024 and other cipher suites" +.IX Subsection "Additional Export 1024 and other cipher suites" +Note: these ciphers can also be used in \s-1SSL\s0 v3. +.PP +.Vb 1 +\& TLS_DHE_DSS_WITH_RC4_128_SHA DHE\-DSS\-RC4\-SHA +.Ve +.SS "Elliptic curve cipher suites." +.IX Subsection "Elliptic curve cipher suites." +.Vb 5 +\& TLS_ECDHE_RSA_WITH_NULL_SHA ECDHE\-RSA\-NULL\-SHA +\& TLS_ECDHE_RSA_WITH_RC4_128_SHA ECDHE\-RSA\-RC4\-SHA +\& TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA ECDHE\-RSA\-DES\-CBC3\-SHA +\& TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA ECDHE\-RSA\-AES128\-SHA +\& TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA ECDHE\-RSA\-AES256\-SHA +\& +\& TLS_ECDHE_ECDSA_WITH_NULL_SHA ECDHE\-ECDSA\-NULL\-SHA +\& TLS_ECDHE_ECDSA_WITH_RC4_128_SHA ECDHE\-ECDSA\-RC4\-SHA +\& TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA ECDHE\-ECDSA\-DES\-CBC3\-SHA +\& TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA ECDHE\-ECDSA\-AES128\-SHA +\& TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA ECDHE\-ECDSA\-AES256\-SHA +\& +\& TLS_ECDH_anon_WITH_NULL_SHA AECDH\-NULL\-SHA +\& TLS_ECDH_anon_WITH_RC4_128_SHA AECDH\-RC4\-SHA +\& TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA AECDH\-DES\-CBC3\-SHA +\& TLS_ECDH_anon_WITH_AES_128_CBC_SHA AECDH\-AES128\-SHA +\& TLS_ECDH_anon_WITH_AES_256_CBC_SHA AECDH\-AES256\-SHA +.Ve +.SS "\s-1TLS\s0 v1.2 cipher suites" +.IX Subsection "TLS v1.2 cipher suites" +.Vb 1 +\& TLS_RSA_WITH_NULL_SHA256 NULL\-SHA256 +\& +\& TLS_RSA_WITH_AES_128_CBC_SHA256 AES128\-SHA256 +\& TLS_RSA_WITH_AES_256_CBC_SHA256 AES256\-SHA256 +\& TLS_RSA_WITH_AES_128_GCM_SHA256 AES128\-GCM\-SHA256 +\& TLS_RSA_WITH_AES_256_GCM_SHA384 AES256\-GCM\-SHA384 +\& +\& TLS_DH_RSA_WITH_AES_128_CBC_SHA256 DH\-RSA\-AES128\-SHA256 +\& TLS_DH_RSA_WITH_AES_256_CBC_SHA256 DH\-RSA\-AES256\-SHA256 +\& TLS_DH_RSA_WITH_AES_128_GCM_SHA256 DH\-RSA\-AES128\-GCM\-SHA256 +\& TLS_DH_RSA_WITH_AES_256_GCM_SHA384 DH\-RSA\-AES256\-GCM\-SHA384 +\& +\& TLS_DH_DSS_WITH_AES_128_CBC_SHA256 DH\-DSS\-AES128\-SHA256 +\& TLS_DH_DSS_WITH_AES_256_CBC_SHA256 DH\-DSS\-AES256\-SHA256 +\& TLS_DH_DSS_WITH_AES_128_GCM_SHA256 DH\-DSS\-AES128\-GCM\-SHA256 +\& TLS_DH_DSS_WITH_AES_256_GCM_SHA384 DH\-DSS\-AES256\-GCM\-SHA384 +\& +\& TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 DHE\-RSA\-AES128\-SHA256 +\& TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 DHE\-RSA\-AES256\-SHA256 +\& TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 DHE\-RSA\-AES128\-GCM\-SHA256 +\& TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 DHE\-RSA\-AES256\-GCM\-SHA384 +\& +\& TLS_DHE_DSS_WITH_AES_128_CBC_SHA256 DHE\-DSS\-AES128\-SHA256 +\& TLS_DHE_DSS_WITH_AES_256_CBC_SHA256 DHE\-DSS\-AES256\-SHA256 +\& TLS_DHE_DSS_WITH_AES_128_GCM_SHA256 DHE\-DSS\-AES128\-GCM\-SHA256 +\& TLS_DHE_DSS_WITH_AES_256_GCM_SHA384 DHE\-DSS\-AES256\-GCM\-SHA384 +\& +\& TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 ECDHE\-RSA\-AES128\-SHA256 +\& TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 ECDHE\-RSA\-AES256\-SHA384 +\& TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 ECDHE\-RSA\-AES128\-GCM\-SHA256 +\& TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 ECDHE\-RSA\-AES256\-GCM\-SHA384 +\& +\& TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 ECDHE\-ECDSA\-AES128\-SHA256 +\& TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 ECDHE\-ECDSA\-AES256\-SHA384 +\& TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 ECDHE\-ECDSA\-AES128\-GCM\-SHA256 +\& TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 ECDHE\-ECDSA\-AES256\-GCM\-SHA384 +\& +\& TLS_DH_anon_WITH_AES_128_CBC_SHA256 ADH\-AES128\-SHA256 +\& TLS_DH_anon_WITH_AES_256_CBC_SHA256 ADH\-AES256\-SHA256 +\& TLS_DH_anon_WITH_AES_128_GCM_SHA256 ADH\-AES128\-GCM\-SHA256 +\& TLS_DH_anon_WITH_AES_256_GCM_SHA384 ADH\-AES256\-GCM\-SHA384 +\& +\& RSA_WITH_AES_128_CCM AES128\-CCM +\& RSA_WITH_AES_256_CCM AES256\-CCM +\& DHE_RSA_WITH_AES_128_CCM DHE\-RSA\-AES128\-CCM +\& DHE_RSA_WITH_AES_256_CCM DHE\-RSA\-AES256\-CCM +\& RSA_WITH_AES_128_CCM_8 AES128\-CCM8 +\& RSA_WITH_AES_256_CCM_8 AES256\-CCM8 +\& DHE_RSA_WITH_AES_128_CCM_8 DHE\-RSA\-AES128\-CCM8 +\& DHE_RSA_WITH_AES_256_CCM_8 DHE\-RSA\-AES256\-CCM8 +\& ECDHE_ECDSA_WITH_AES_128_CCM ECDHE\-ECDSA\-AES128\-CCM +\& ECDHE_ECDSA_WITH_AES_256_CCM ECDHE\-ECDSA\-AES256\-CCM +\& ECDHE_ECDSA_WITH_AES_128_CCM_8 ECDHE\-ECDSA\-AES128\-CCM8 +\& ECDHE_ECDSA_WITH_AES_256_CCM_8 ECDHE\-ECDSA\-AES256\-CCM8 +.Ve +.SS "\s-1ARIA\s0 cipher suites from \s-1RFC6209,\s0 extending \s-1TLS\s0 v1.2" +.IX Subsection "ARIA cipher suites from RFC6209, extending TLS v1.2" +Note: the \s-1CBC\s0 modes mentioned in this \s-1RFC\s0 are not supported. +.PP +.Vb 10 +\& TLS_RSA_WITH_ARIA_128_GCM_SHA256 ARIA128\-GCM\-SHA256 +\& TLS_RSA_WITH_ARIA_256_GCM_SHA384 ARIA256\-GCM\-SHA384 +\& TLS_DHE_RSA_WITH_ARIA_128_GCM_SHA256 DHE\-RSA\-ARIA128\-GCM\-SHA256 +\& TLS_DHE_RSA_WITH_ARIA_256_GCM_SHA384 DHE\-RSA\-ARIA256\-GCM\-SHA384 +\& TLS_DHE_DSS_WITH_ARIA_128_GCM_SHA256 DHE\-DSS\-ARIA128\-GCM\-SHA256 +\& TLS_DHE_DSS_WITH_ARIA_256_GCM_SHA384 DHE\-DSS\-ARIA256\-GCM\-SHA384 +\& TLS_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256 ECDHE\-ECDSA\-ARIA128\-GCM\-SHA256 +\& TLS_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384 ECDHE\-ECDSA\-ARIA256\-GCM\-SHA384 +\& TLS_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256 ECDHE\-ARIA128\-GCM\-SHA256 +\& TLS_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384 ECDHE\-ARIA256\-GCM\-SHA384 +\& TLS_PSK_WITH_ARIA_128_GCM_SHA256 PSK\-ARIA128\-GCM\-SHA256 +\& TLS_PSK_WITH_ARIA_256_GCM_SHA384 PSK\-ARIA256\-GCM\-SHA384 +\& TLS_DHE_PSK_WITH_ARIA_128_GCM_SHA256 DHE\-PSK\-ARIA128\-GCM\-SHA256 +\& TLS_DHE_PSK_WITH_ARIA_256_GCM_SHA384 DHE\-PSK\-ARIA256\-GCM\-SHA384 +\& TLS_RSA_PSK_WITH_ARIA_128_GCM_SHA256 RSA\-PSK\-ARIA128\-GCM\-SHA256 +\& TLS_RSA_PSK_WITH_ARIA_256_GCM_SHA384 RSA\-PSK\-ARIA256\-GCM\-SHA384 +.Ve +.SS "Camellia HMAC-Based cipher suites from \s-1RFC6367,\s0 extending \s-1TLS\s0 v1.2" +.IX Subsection "Camellia HMAC-Based cipher suites from RFC6367, extending TLS v1.2" +.Vb 4 +\& TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 ECDHE\-ECDSA\-CAMELLIA128\-SHA256 +\& TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 ECDHE\-ECDSA\-CAMELLIA256\-SHA384 +\& TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 ECDHE\-RSA\-CAMELLIA128\-SHA256 +\& TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384 ECDHE\-RSA\-CAMELLIA256\-SHA384 +.Ve +.SS "Pre-shared keying (\s-1PSK\s0) cipher suites" +.IX Subsection "Pre-shared keying (PSK) cipher suites" +.Vb 3 +\& PSK_WITH_NULL_SHA PSK\-NULL\-SHA +\& DHE_PSK_WITH_NULL_SHA DHE\-PSK\-NULL\-SHA +\& RSA_PSK_WITH_NULL_SHA RSA\-PSK\-NULL\-SHA +\& +\& PSK_WITH_RC4_128_SHA PSK\-RC4\-SHA +\& PSK_WITH_3DES_EDE_CBC_SHA PSK\-3DES\-EDE\-CBC\-SHA +\& PSK_WITH_AES_128_CBC_SHA PSK\-AES128\-CBC\-SHA +\& PSK_WITH_AES_256_CBC_SHA PSK\-AES256\-CBC\-SHA +\& +\& DHE_PSK_WITH_RC4_128_SHA DHE\-PSK\-RC4\-SHA +\& DHE_PSK_WITH_3DES_EDE_CBC_SHA DHE\-PSK\-3DES\-EDE\-CBC\-SHA +\& DHE_PSK_WITH_AES_128_CBC_SHA DHE\-PSK\-AES128\-CBC\-SHA +\& DHE_PSK_WITH_AES_256_CBC_SHA DHE\-PSK\-AES256\-CBC\-SHA +\& +\& RSA_PSK_WITH_RC4_128_SHA RSA\-PSK\-RC4\-SHA +\& RSA_PSK_WITH_3DES_EDE_CBC_SHA RSA\-PSK\-3DES\-EDE\-CBC\-SHA +\& RSA_PSK_WITH_AES_128_CBC_SHA RSA\-PSK\-AES128\-CBC\-SHA +\& RSA_PSK_WITH_AES_256_CBC_SHA RSA\-PSK\-AES256\-CBC\-SHA +\& +\& PSK_WITH_AES_128_GCM_SHA256 PSK\-AES128\-GCM\-SHA256 +\& PSK_WITH_AES_256_GCM_SHA384 PSK\-AES256\-GCM\-SHA384 +\& DHE_PSK_WITH_AES_128_GCM_SHA256 DHE\-PSK\-AES128\-GCM\-SHA256 +\& DHE_PSK_WITH_AES_256_GCM_SHA384 DHE\-PSK\-AES256\-GCM\-SHA384 +\& RSA_PSK_WITH_AES_128_GCM_SHA256 RSA\-PSK\-AES128\-GCM\-SHA256 +\& RSA_PSK_WITH_AES_256_GCM_SHA384 RSA\-PSK\-AES256\-GCM\-SHA384 +\& +\& PSK_WITH_AES_128_CBC_SHA256 PSK\-AES128\-CBC\-SHA256 +\& PSK_WITH_AES_256_CBC_SHA384 PSK\-AES256\-CBC\-SHA384 +\& PSK_WITH_NULL_SHA256 PSK\-NULL\-SHA256 +\& PSK_WITH_NULL_SHA384 PSK\-NULL\-SHA384 +\& DHE_PSK_WITH_AES_128_CBC_SHA256 DHE\-PSK\-AES128\-CBC\-SHA256 +\& DHE_PSK_WITH_AES_256_CBC_SHA384 DHE\-PSK\-AES256\-CBC\-SHA384 +\& DHE_PSK_WITH_NULL_SHA256 DHE\-PSK\-NULL\-SHA256 +\& DHE_PSK_WITH_NULL_SHA384 DHE\-PSK\-NULL\-SHA384 +\& RSA_PSK_WITH_AES_128_CBC_SHA256 RSA\-PSK\-AES128\-CBC\-SHA256 +\& RSA_PSK_WITH_AES_256_CBC_SHA384 RSA\-PSK\-AES256\-CBC\-SHA384 +\& RSA_PSK_WITH_NULL_SHA256 RSA\-PSK\-NULL\-SHA256 +\& RSA_PSK_WITH_NULL_SHA384 RSA\-PSK\-NULL\-SHA384 +\& PSK_WITH_AES_128_GCM_SHA256 PSK\-AES128\-GCM\-SHA256 +\& PSK_WITH_AES_256_GCM_SHA384 PSK\-AES256\-GCM\-SHA384 +\& +\& ECDHE_PSK_WITH_RC4_128_SHA ECDHE\-PSK\-RC4\-SHA +\& ECDHE_PSK_WITH_3DES_EDE_CBC_SHA ECDHE\-PSK\-3DES\-EDE\-CBC\-SHA +\& ECDHE_PSK_WITH_AES_128_CBC_SHA ECDHE\-PSK\-AES128\-CBC\-SHA +\& ECDHE_PSK_WITH_AES_256_CBC_SHA ECDHE\-PSK\-AES256\-CBC\-SHA +\& ECDHE_PSK_WITH_AES_128_CBC_SHA256 ECDHE\-PSK\-AES128\-CBC\-SHA256 +\& ECDHE_PSK_WITH_AES_256_CBC_SHA384 ECDHE\-PSK\-AES256\-CBC\-SHA384 +\& ECDHE_PSK_WITH_NULL_SHA ECDHE\-PSK\-NULL\-SHA +\& ECDHE_PSK_WITH_NULL_SHA256 ECDHE\-PSK\-NULL\-SHA256 +\& ECDHE_PSK_WITH_NULL_SHA384 ECDHE\-PSK\-NULL\-SHA384 +\& +\& PSK_WITH_CAMELLIA_128_CBC_SHA256 PSK\-CAMELLIA128\-SHA256 +\& PSK_WITH_CAMELLIA_256_CBC_SHA384 PSK\-CAMELLIA256\-SHA384 +\& +\& DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 DHE\-PSK\-CAMELLIA128\-SHA256 +\& DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 DHE\-PSK\-CAMELLIA256\-SHA384 +\& +\& RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256 RSA\-PSK\-CAMELLIA128\-SHA256 +\& RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384 RSA\-PSK\-CAMELLIA256\-SHA384 +\& +\& ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 ECDHE\-PSK\-CAMELLIA128\-SHA256 +\& ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 ECDHE\-PSK\-CAMELLIA256\-SHA384 +\& +\& PSK_WITH_AES_128_CCM PSK\-AES128\-CCM +\& PSK_WITH_AES_256_CCM PSK\-AES256\-CCM +\& DHE_PSK_WITH_AES_128_CCM DHE\-PSK\-AES128\-CCM +\& DHE_PSK_WITH_AES_256_CCM DHE\-PSK\-AES256\-CCM +\& PSK_WITH_AES_128_CCM_8 PSK\-AES128\-CCM8 +\& PSK_WITH_AES_256_CCM_8 PSK\-AES256\-CCM8 +\& DHE_PSK_WITH_AES_128_CCM_8 DHE\-PSK\-AES128\-CCM8 +\& DHE_PSK_WITH_AES_256_CCM_8 DHE\-PSK\-AES256\-CCM8 +.Ve +.SS "ChaCha20\-Poly1305 cipher suites, extending \s-1TLS\s0 v1.2" +.IX Subsection "ChaCha20-Poly1305 cipher suites, extending TLS v1.2" +.Vb 7 +\& TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 ECDHE\-RSA\-CHACHA20\-POLY1305 +\& TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 ECDHE\-ECDSA\-CHACHA20\-POLY1305 +\& TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256 DHE\-RSA\-CHACHA20\-POLY1305 +\& TLS_PSK_WITH_CHACHA20_POLY1305_SHA256 PSK\-CHACHA20\-POLY1305 +\& TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256 ECDHE\-PSK\-CHACHA20\-POLY1305 +\& TLS_DHE_PSK_WITH_CHACHA20_POLY1305_SHA256 DHE\-PSK\-CHACHA20\-POLY1305 +\& TLS_RSA_PSK_WITH_CHACHA20_POLY1305_SHA256 RSA\-PSK\-CHACHA20\-POLY1305 +.Ve +.SS "\s-1TLS\s0 v1.3 cipher suites" +.IX Subsection "TLS v1.3 cipher suites" +.Vb 5 +\& TLS_AES_128_GCM_SHA256 TLS_AES_128_GCM_SHA256 +\& TLS_AES_256_GCM_SHA384 TLS_AES_256_GCM_SHA384 +\& TLS_CHACHA20_POLY1305_SHA256 TLS_CHACHA20_POLY1305_SHA256 +\& TLS_AES_128_CCM_SHA256 TLS_AES_128_CCM_SHA256 +\& TLS_AES_128_CCM_8_SHA256 TLS_AES_128_CCM_8_SHA256 +.Ve +.SS "Older names used by OpenSSL" +.IX Subsection "Older names used by OpenSSL" +The following names are accepted by older releases: +.PP +.Vb 2 +\& SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA EDH\-RSA\-DES\-CBC3\-SHA (DHE\-RSA\-DES\-CBC3\-SHA) +\& SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA EDH\-DSS\-DES\-CBC3\-SHA (DHE\-DSS\-DES\-CBC3\-SHA) +.Ve +.SH "NOTES" +.IX Header "NOTES" +Some compiled versions of OpenSSL may not include all the ciphers +listed here because some ciphers were excluded at compile time. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +Verbose listing of all OpenSSL ciphers including \s-1NULL\s0 ciphers: +.PP +.Vb 1 +\& openssl ciphers \-v \*(AqALL:eNULL\*(Aq +.Ve +.PP +Include all ciphers except \s-1NULL\s0 and anonymous \s-1DH\s0 then sort by +strength: +.PP +.Vb 1 +\& openssl ciphers \-v \*(AqALL:!ADH:@STRENGTH\*(Aq +.Ve +.PP +Include all ciphers except ones with no encryption (eNULL) or no +authentication (aNULL): +.PP +.Vb 1 +\& openssl ciphers \-v \*(AqALL:!aNULL\*(Aq +.Ve +.PP +Include only 3DES ciphers and then place \s-1RSA\s0 ciphers last: +.PP +.Vb 1 +\& openssl ciphers \-v \*(Aq3DES:+RSA\*(Aq +.Ve +.PP +Include all \s-1RC4\s0 ciphers but leave out those without authentication: +.PP +.Vb 1 +\& openssl ciphers \-v \*(AqRC4:!COMPLEMENTOFDEFAULT\*(Aq +.Ve +.PP +Include all ciphers with \s-1RSA\s0 authentication but leave out ciphers without +encryption. +.PP +.Vb 1 +\& openssl ciphers \-v \*(AqRSA:!COMPLEMENTOFALL\*(Aq +.Ve +.PP +Set security level to 2 and display all ciphers consistent with level 2: +.PP +.Vb 1 +\& openssl ciphers \-s \-v \*(AqALL:@SECLEVEL=2\*(Aq +.Ve +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBs_client\fR\|(1), \fBs_server\fR\|(1), \fBssl\fR\|(7) +.SH "HISTORY" +.IX Header "HISTORY" +The \fB\-V\fR option for the \fBciphers\fR command was added in OpenSSL 1.0.0. +.PP +The \fB\-stdname\fR is only available if OpenSSL is built with tracing enabled +(\fBenable-ssl-trace\fR argument to Configure) before OpenSSL 1.1.1. +.PP +The \fB\-convert\fR option was added in OpenSSL 1.1.1. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/cms.1 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/cms.1 new file mode 100644 index 00000000..4623925f --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/cms.1 @@ -0,0 +1,820 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "CMS 1" +.TH CMS 1 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +openssl\-cms, cms \- CMS utility +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +\&\fBopenssl\fR \fBcms\fR +[\fB\-help\fR] +[\fB\-encrypt\fR] +[\fB\-decrypt\fR] +[\fB\-sign\fR] +[\fB\-verify\fR] +[\fB\-cmsout\fR] +[\fB\-resign\fR] +[\fB\-data_create\fR] +[\fB\-data_out\fR] +[\fB\-digest_create\fR] +[\fB\-digest_verify\fR] +[\fB\-compress\fR] +[\fB\-uncompress\fR] +[\fB\-EncryptedData_encrypt\fR] +[\fB\-sign_receipt\fR] +[\fB\-verify_receipt receipt\fR] +[\fB\-in filename\fR] +[\fB\-inform SMIME|PEM|DER\fR] +[\fB\-rctform SMIME|PEM|DER\fR] +[\fB\-out filename\fR] +[\fB\-outform SMIME|PEM|DER\fR] +[\fB\-stream \-indef \-noindef\fR] +[\fB\-noindef\fR] +[\fB\-content filename\fR] +[\fB\-text\fR] +[\fB\-noout\fR] +[\fB\-print\fR] +[\fB\-CAfile file\fR] +[\fB\-CApath dir\fR] +[\fB\-no\-CAfile\fR] +[\fB\-no\-CApath\fR] +[\fB\-attime timestamp\fR] +[\fB\-check_ss_sig\fR] +[\fB\-crl_check\fR] +[\fB\-crl_check_all\fR] +[\fB\-explicit_policy\fR] +[\fB\-extended_crl\fR] +[\fB\-ignore_critical\fR] +[\fB\-inhibit_any\fR] +[\fB\-inhibit_map\fR] +[\fB\-no_check_time\fR] +[\fB\-partial_chain\fR] +[\fB\-policy arg\fR] +[\fB\-policy_check\fR] +[\fB\-policy_print\fR] +[\fB\-purpose purpose\fR] +[\fB\-suiteB_128\fR] +[\fB\-suiteB_128_only\fR] +[\fB\-suiteB_192\fR] +[\fB\-trusted_first\fR] +[\fB\-no_alt_chains\fR] +[\fB\-use_deltas\fR] +[\fB\-auth_level num\fR] +[\fB\-verify_depth num\fR] +[\fB\-verify_email email\fR] +[\fB\-verify_hostname hostname\fR] +[\fB\-verify_ip ip\fR] +[\fB\-verify_name name\fR] +[\fB\-x509_strict\fR] +[\fB\-md digest\fR] +[\fB\-\f(BIcipher\fB\fR] +[\fB\-nointern\fR] +[\fB\-noverify\fR] +[\fB\-nocerts\fR] +[\fB\-noattr\fR] +[\fB\-nosmimecap\fR] +[\fB\-binary\fR] +[\fB\-crlfeol\fR] +[\fB\-asciicrlf\fR] +[\fB\-nodetach\fR] +[\fB\-certfile file\fR] +[\fB\-certsout file\fR] +[\fB\-signer file\fR] +[\fB\-recip file\fR] +[\fB\-keyid\fR] +[\fB\-receipt_request_all\fR] +[\fB\-receipt_request_first\fR] +[\fB\-receipt_request_from emailaddress\fR] +[\fB\-receipt_request_to emailaddress\fR] +[\fB\-receipt_request_print\fR] +[\fB\-secretkey key\fR] +[\fB\-secretkeyid id\fR] +[\fB\-econtent_type type\fR] +[\fB\-inkey file\fR] +[\fB\-keyopt name:parameter\fR] +[\fB\-passin arg\fR] +[\fB\-rand file...\fR] +[\fB\-writerand file\fR] +[\fBcert.pem...\fR] +[\fB\-to addr\fR] +[\fB\-from addr\fR] +[\fB\-subject subj\fR] +[cert.pem]... +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fBcms\fR command handles S/MIME v3.1 mail. It can encrypt, decrypt, sign and +verify, compress and uncompress S/MIME messages. +.SH "OPTIONS" +.IX Header "OPTIONS" +There are fourteen operation options that set the type of operation to be +performed. The meaning of the other options varies according to the operation +type. +.IP "\fB\-help\fR" 4 +.IX Item "-help" +Print out a usage message. +.IP "\fB\-encrypt\fR" 4 +.IX Item "-encrypt" +Encrypt mail for the given recipient certificates. Input file is the message +to be encrypted. The output file is the encrypted mail in \s-1MIME\s0 format. The +actual \s-1CMS\s0 type is EnvelopedData. +.Sp +Note that no revocation check is done for the recipient cert, so if that +key has been compromised, others may be able to decrypt the text. +.IP "\fB\-decrypt\fR" 4 +.IX Item "-decrypt" +Decrypt mail using the supplied certificate and private key. Expects an +encrypted mail message in \s-1MIME\s0 format for the input file. The decrypted mail +is written to the output file. +.IP "\fB\-debug_decrypt\fR" 4 +.IX Item "-debug_decrypt" +This option sets the \fB\s-1CMS_DEBUG_DECRYPT\s0\fR flag. This option should be used +with caution: see the notes section below. +.IP "\fB\-sign\fR" 4 +.IX Item "-sign" +Sign mail using the supplied certificate and private key. Input file is +the message to be signed. The signed message in \s-1MIME\s0 format is written +to the output file. +.IP "\fB\-verify\fR" 4 +.IX Item "-verify" +Verify signed mail. Expects a signed mail message on input and outputs +the signed data. Both clear text and opaque signing is supported. +.IP "\fB\-cmsout\fR" 4 +.IX Item "-cmsout" +Takes an input message and writes out a \s-1PEM\s0 encoded \s-1CMS\s0 structure. +.IP "\fB\-resign\fR" 4 +.IX Item "-resign" +Resign a message: take an existing message and one or more new signers. +.IP "\fB\-data_create\fR" 4 +.IX Item "-data_create" +Create a \s-1CMS\s0 \fBData\fR type. +.IP "\fB\-data_out\fR" 4 +.IX Item "-data_out" +\&\fBData\fR type and output the content. +.IP "\fB\-digest_create\fR" 4 +.IX Item "-digest_create" +Create a \s-1CMS\s0 \fBDigestedData\fR type. +.IP "\fB\-digest_verify\fR" 4 +.IX Item "-digest_verify" +Verify a \s-1CMS\s0 \fBDigestedData\fR type and output the content. +.IP "\fB\-compress\fR" 4 +.IX Item "-compress" +Create a \s-1CMS\s0 \fBCompressedData\fR type. OpenSSL must be compiled with \fBzlib\fR +support for this option to work, otherwise it will output an error. +.IP "\fB\-uncompress\fR" 4 +.IX Item "-uncompress" +Uncompress a \s-1CMS\s0 \fBCompressedData\fR type and output the content. OpenSSL must be +compiled with \fBzlib\fR support for this option to work, otherwise it will +output an error. +.IP "\fB\-EncryptedData_encrypt\fR" 4 +.IX Item "-EncryptedData_encrypt" +Encrypt content using supplied symmetric key and algorithm using a \s-1CMS\s0 +\&\fBEncryptedData\fR type and output the content. +.IP "\fB\-sign_receipt\fR" 4 +.IX Item "-sign_receipt" +Generate and output a signed receipt for the supplied message. The input +message \fBmust\fR contain a signed receipt request. Functionality is otherwise +similar to the \fB\-sign\fR operation. +.IP "\fB\-verify_receipt receipt\fR" 4 +.IX Item "-verify_receipt receipt" +Verify a signed receipt in filename \fBreceipt\fR. The input message \fBmust\fR +contain the original receipt request. Functionality is otherwise similar +to the \fB\-verify\fR operation. +.IP "\fB\-in filename\fR" 4 +.IX Item "-in filename" +The input message to be encrypted or signed or the message to be decrypted +or verified. +.IP "\fB\-inform SMIME|PEM|DER\fR" 4 +.IX Item "-inform SMIME|PEM|DER" +This specifies the input format for the \s-1CMS\s0 structure. The default +is \fB\s-1SMIME\s0\fR which reads an S/MIME format message. \fB\s-1PEM\s0\fR and \fB\s-1DER\s0\fR +format change this to expect \s-1PEM\s0 and \s-1DER\s0 format \s-1CMS\s0 structures +instead. This currently only affects the input format of the \s-1CMS\s0 +structure, if no \s-1CMS\s0 structure is being input (for example with +\&\fB\-encrypt\fR or \fB\-sign\fR) this option has no effect. +.IP "\fB\-rctform SMIME|PEM|DER\fR" 4 +.IX Item "-rctform SMIME|PEM|DER" +Specify the format for a signed receipt for use with the \fB\-receipt_verify\fR +operation. +.IP "\fB\-out filename\fR" 4 +.IX Item "-out filename" +The message text that has been decrypted or verified or the output \s-1MIME\s0 +format message that has been signed or verified. +.IP "\fB\-outform SMIME|PEM|DER\fR" 4 +.IX Item "-outform SMIME|PEM|DER" +This specifies the output format for the \s-1CMS\s0 structure. The default +is \fB\s-1SMIME\s0\fR which writes an S/MIME format message. \fB\s-1PEM\s0\fR and \fB\s-1DER\s0\fR +format change this to write \s-1PEM\s0 and \s-1DER\s0 format \s-1CMS\s0 structures +instead. This currently only affects the output format of the \s-1CMS\s0 +structure, if no \s-1CMS\s0 structure is being output (for example with +\&\fB\-verify\fR or \fB\-decrypt\fR) this option has no effect. +.IP "\fB\-stream \-indef \-noindef\fR" 4 +.IX Item "-stream -indef -noindef" +The \fB\-stream\fR and \fB\-indef\fR options are equivalent and enable streaming I/O +for encoding operations. This permits single pass processing of data without +the need to hold the entire contents in memory, potentially supporting very +large files. Streaming is automatically set for S/MIME signing with detached +data if the output format is \fB\s-1SMIME\s0\fR it is currently off by default for all +other operations. +.IP "\fB\-noindef\fR" 4 +.IX Item "-noindef" +Disable streaming I/O where it would produce and indefinite length constructed +encoding. This option currently has no effect. In future streaming will be +enabled by default on all relevant operations and this option will disable it. +.IP "\fB\-content filename\fR" 4 +.IX Item "-content filename" +This specifies a file containing the detached content, this is only +useful with the \fB\-verify\fR command. This is only usable if the \s-1CMS\s0 +structure is using the detached signature form where the content is +not included. This option will override any content if the input format +is S/MIME and it uses the multipart/signed \s-1MIME\s0 content type. +.IP "\fB\-text\fR" 4 +.IX Item "-text" +This option adds plain text (text/plain) \s-1MIME\s0 headers to the supplied +message if encrypting or signing. If decrypting or verifying it strips +off text headers: if the decrypted or verified message is not of \s-1MIME\s0 +type text/plain then an error occurs. +.IP "\fB\-noout\fR" 4 +.IX Item "-noout" +For the \fB\-cmsout\fR operation do not output the parsed \s-1CMS\s0 structure. This +is useful when combined with the \fB\-print\fR option or if the syntax of the \s-1CMS\s0 +structure is being checked. +.IP "\fB\-print\fR" 4 +.IX Item "-print" +For the \fB\-cmsout\fR operation print out all fields of the \s-1CMS\s0 structure. This +is mainly useful for testing purposes. +.IP "\fB\-CAfile file\fR" 4 +.IX Item "-CAfile file" +A file containing trusted \s-1CA\s0 certificates, only used with \fB\-verify\fR. +.IP "\fB\-CApath dir\fR" 4 +.IX Item "-CApath dir" +A directory containing trusted \s-1CA\s0 certificates, only used with +\&\fB\-verify\fR. This directory must be a standard certificate directory: that +is a hash of each subject name (using \fBx509 \-hash\fR) should be linked +to each certificate. +.IP "\fB\-no\-CAfile\fR" 4 +.IX Item "-no-CAfile" +Do not load the trusted \s-1CA\s0 certificates from the default file location +.IP "\fB\-no\-CApath\fR" 4 +.IX Item "-no-CApath" +Do not load the trusted \s-1CA\s0 certificates from the default directory location +.IP "\fB\-md digest\fR" 4 +.IX Item "-md digest" +Digest algorithm to use when signing or resigning. If not present then the +default digest algorithm for the signing key will be used (usually \s-1SHA1\s0). +.IP "\fB\-\f(BIcipher\fB\fR" 4 +.IX Item "-cipher" +The encryption algorithm to use. For example triple \s-1DES\s0 (168 bits) \- \fB\-des3\fR +or 256 bit \s-1AES\s0 \- \fB\-aes256\fR. Any standard algorithm name (as used by the +\&\fBEVP_get_cipherbyname()\fR function) can also be used preceded by a dash, for +example \fB\-aes\-128\-cbc\fR. See \fBenc\fR\|(1) for a list of ciphers +supported by your version of OpenSSL. +.Sp +If not specified triple \s-1DES\s0 is used. Only used with \fB\-encrypt\fR and +\&\fB\-EncryptedData_create\fR commands. +.IP "\fB\-nointern\fR" 4 +.IX Item "-nointern" +When verifying a message normally certificates (if any) included in +the message are searched for the signing certificate. With this option +only the certificates specified in the \fB\-certfile\fR option are used. +The supplied certificates can still be used as untrusted CAs however. +.IP "\fB\-noverify\fR" 4 +.IX Item "-noverify" +Do not verify the signers certificate of a signed message. +.IP "\fB\-nocerts\fR" 4 +.IX Item "-nocerts" +When signing a message the signer's certificate is normally included +with this option it is excluded. This will reduce the size of the +signed message but the verifier must have a copy of the signers certificate +available locally (passed using the \fB\-certfile\fR option for example). +.IP "\fB\-noattr\fR" 4 +.IX Item "-noattr" +Normally when a message is signed a set of attributes are included which +include the signing time and supported symmetric algorithms. With this +option they are not included. +.IP "\fB\-nosmimecap\fR" 4 +.IX Item "-nosmimecap" +Exclude the list of supported algorithms from signed attributes, other options +such as signing time and content type are still included. +.IP "\fB\-binary\fR" 4 +.IX Item "-binary" +Normally the input message is converted to \*(L"canonical\*(R" format which is +effectively using \s-1CR\s0 and \s-1LF\s0 as end of line: as required by the S/MIME +specification. When this option is present no translation occurs. This +is useful when handling binary data which may not be in \s-1MIME\s0 format. +.IP "\fB\-crlfeol\fR" 4 +.IX Item "-crlfeol" +Normally the output file uses a single \fB\s-1LF\s0\fR as end of line. When this +option is present \fB\s-1CRLF\s0\fR is used instead. +.IP "\fB\-asciicrlf\fR" 4 +.IX Item "-asciicrlf" +When signing use \s-1ASCII CRLF\s0 format canonicalisation. This strips trailing +whitespace from all lines, deletes trailing blank lines at \s-1EOF\s0 and sets +the encapsulated content type. This option is normally used with detached +content and an output signature format of \s-1DER.\s0 This option is not normally +needed when verifying as it is enabled automatically if the encapsulated +content format is detected. +.IP "\fB\-nodetach\fR" 4 +.IX Item "-nodetach" +When signing a message use opaque signing: this form is more resistant +to translation by mail relays but it cannot be read by mail agents that +do not support S/MIME. Without this option cleartext signing with +the \s-1MIME\s0 type multipart/signed is used. +.IP "\fB\-certfile file\fR" 4 +.IX Item "-certfile file" +Allows additional certificates to be specified. When signing these will +be included with the message. When verifying these will be searched for +the signers certificates. The certificates should be in \s-1PEM\s0 format. +.IP "\fB\-certsout file\fR" 4 +.IX Item "-certsout file" +Any certificates contained in the message are written to \fBfile\fR. +.IP "\fB\-signer file\fR" 4 +.IX Item "-signer file" +A signing certificate when signing or resigning a message, this option can be +used multiple times if more than one signer is required. If a message is being +verified then the signers certificates will be written to this file if the +verification was successful. +.IP "\fB\-recip file\fR" 4 +.IX Item "-recip file" +When decrypting a message this specifies the recipients certificate. The +certificate must match one of the recipients of the message or an error +occurs. +.Sp +When encrypting a message this option may be used multiple times to specify +each recipient. This form \fBmust\fR be used if customised parameters are +required (for example to specify RSA-OAEP). +.Sp +Only certificates carrying \s-1RSA,\s0 Diffie-Hellman or \s-1EC\s0 keys are supported by this +option. +.IP "\fB\-keyid\fR" 4 +.IX Item "-keyid" +Use subject key identifier to identify certificates instead of issuer name and +serial number. The supplied certificate \fBmust\fR include a subject key +identifier extension. Supported by \fB\-sign\fR and \fB\-encrypt\fR options. +.IP "\fB\-receipt_request_all\fR, \fB\-receipt_request_first\fR" 4 +.IX Item "-receipt_request_all, -receipt_request_first" +For \fB\-sign\fR option include a signed receipt request. Indicate requests should +be provided by all recipient or first tier recipients (those mailed directly +and not from a mailing list). Ignored it \fB\-receipt_request_from\fR is included. +.IP "\fB\-receipt_request_from emailaddress\fR" 4 +.IX Item "-receipt_request_from emailaddress" +For \fB\-sign\fR option include a signed receipt request. Add an explicit email +address where receipts should be supplied. +.IP "\fB\-receipt_request_to emailaddress\fR" 4 +.IX Item "-receipt_request_to emailaddress" +Add an explicit email address where signed receipts should be sent to. This +option \fBmust\fR but supplied if a signed receipt it requested. +.IP "\fB\-receipt_request_print\fR" 4 +.IX Item "-receipt_request_print" +For the \fB\-verify\fR operation print out the contents of any signed receipt +requests. +.IP "\fB\-secretkey key\fR" 4 +.IX Item "-secretkey key" +Specify symmetric key to use. The key must be supplied in hex format and be +consistent with the algorithm used. Supported by the \fB\-EncryptedData_encrypt\fR +\&\fB\-EncryptedData_decrypt\fR, \fB\-encrypt\fR and \fB\-decrypt\fR options. When used +with \fB\-encrypt\fR or \fB\-decrypt\fR the supplied key is used to wrap or unwrap the +content encryption key using an \s-1AES\s0 key in the \fBKEKRecipientInfo\fR type. +.IP "\fB\-secretkeyid id\fR" 4 +.IX Item "-secretkeyid id" +The key identifier for the supplied symmetric key for \fBKEKRecipientInfo\fR type. +This option \fBmust\fR be present if the \fB\-secretkey\fR option is used with +\&\fB\-encrypt\fR. With \fB\-decrypt\fR operations the \fBid\fR is used to locate the +relevant key if it is not supplied then an attempt is used to decrypt any +\&\fBKEKRecipientInfo\fR structures. +.IP "\fB\-econtent_type type\fR" 4 +.IX Item "-econtent_type type" +Set the encapsulated content type to \fBtype\fR if not supplied the \fBData\fR type +is used. The \fBtype\fR argument can be any valid \s-1OID\s0 name in either text or +numerical format. +.IP "\fB\-inkey file\fR" 4 +.IX Item "-inkey file" +The private key to use when signing or decrypting. This must match the +corresponding certificate. If this option is not specified then the +private key must be included in the certificate file specified with +the \fB\-recip\fR or \fB\-signer\fR file. When signing this option can be used +multiple times to specify successive keys. +.IP "\fB\-keyopt name:opt\fR" 4 +.IX Item "-keyopt name:opt" +For signing and encryption this option can be used multiple times to +set customised parameters for the preceding key or certificate. It can +currently be used to set RSA-PSS for signing, RSA-OAEP for encryption +or to modify default parameters for \s-1ECDH.\s0 +.IP "\fB\-passin arg\fR" 4 +.IX Item "-passin arg" +The private key password source. For more information about the format of \fBarg\fR +see the \fB\s-1PASS PHRASE ARGUMENTS\s0\fR section in \fBopenssl\fR\|(1). +.IP "\fB\-rand file...\fR" 4 +.IX Item "-rand file..." +A file or files containing random data used to seed the random number +generator. +Multiple files can be specified separated by an OS-dependent character. +The separator is \fB;\fR for MS-Windows, \fB,\fR for OpenVMS, and \fB:\fR for +all others. +.IP "[\fB\-writerand file\fR]" 4 +.IX Item "[-writerand file]" +Writes random data to the specified \fIfile\fR upon exit. +This can be used with a subsequent \fB\-rand\fR flag. +.IP "\fBcert.pem...\fR" 4 +.IX Item "cert.pem..." +One or more certificates of message recipients: used when encrypting +a message. +.IP "\fB\-to, \-from, \-subject\fR" 4 +.IX Item "-to, -from, -subject" +The relevant mail headers. These are included outside the signed +portion of a message so they may be included manually. If signing +then many S/MIME mail clients check the signers certificate's email +address matches that specified in the From: address. +.IP "\fB\-attime\fR, \fB\-check_ss_sig\fR, \fB\-crl_check\fR, \fB\-crl_check_all\fR, \fB\-explicit_policy\fR, \fB\-extended_crl\fR, \fB\-ignore_critical\fR, \fB\-inhibit_any\fR, \fB\-inhibit_map\fR, \fB\-no_alt_chains\fR, \fB\-no_check_time\fR, \fB\-partial_chain\fR, \fB\-policy\fR, \fB\-policy_check\fR, \fB\-policy_print\fR, \fB\-purpose\fR, \fB\-suiteB_128\fR, \fB\-suiteB_128_only\fR, \fB\-suiteB_192\fR, \fB\-trusted_first\fR, \fB\-use_deltas\fR, \fB\-auth_level\fR, \fB\-verify_depth\fR, \fB\-verify_email\fR, \fB\-verify_hostname\fR, \fB\-verify_ip\fR, \fB\-verify_name\fR, \fB\-x509_strict\fR" 4 +.IX Item "-attime, -check_ss_sig, -crl_check, -crl_check_all, -explicit_policy, -extended_crl, -ignore_critical, -inhibit_any, -inhibit_map, -no_alt_chains, -no_check_time, -partial_chain, -policy, -policy_check, -policy_print, -purpose, -suiteB_128, -suiteB_128_only, -suiteB_192, -trusted_first, -use_deltas, -auth_level, -verify_depth, -verify_email, -verify_hostname, -verify_ip, -verify_name, -x509_strict" +Set various certificate chain validation options. See the +\&\fBverify\fR\|(1) manual page for details. +.SH "NOTES" +.IX Header "NOTES" +The \s-1MIME\s0 message must be sent without any blank lines between the +headers and the output. Some mail programs will automatically add +a blank line. Piping the mail directly to sendmail is one way to +achieve the correct format. +.PP +The supplied message to be signed or encrypted must include the +necessary \s-1MIME\s0 headers or many S/MIME clients won't display it +properly (if at all). You can use the \fB\-text\fR option to automatically +add plain text headers. +.PP +A \*(L"signed and encrypted\*(R" message is one where a signed message is +then encrypted. This can be produced by encrypting an already signed +message: see the examples section. +.PP +This version of the program only allows one signer per message but it +will verify multiple signers on received messages. Some S/MIME clients +choke if a message contains multiple signers. It is possible to sign +messages \*(L"in parallel\*(R" by signing an already signed message. +.PP +The options \fB\-encrypt\fR and \fB\-decrypt\fR reflect common usage in S/MIME +clients. Strictly speaking these process \s-1CMS\s0 enveloped data: \s-1CMS\s0 +encrypted data is used for other purposes. +.PP +The \fB\-resign\fR option uses an existing message digest when adding a new +signer. This means that attributes must be present in at least one existing +signer using the same message digest or this operation will fail. +.PP +The \fB\-stream\fR and \fB\-indef\fR options enable streaming I/O support. +As a result the encoding is \s-1BER\s0 using indefinite length constructed encoding +and no longer \s-1DER.\s0 Streaming is supported for the \fB\-encrypt\fR operation and the +\&\fB\-sign\fR operation if the content is not detached. +.PP +Streaming is always used for the \fB\-sign\fR operation with detached data but +since the content is no longer part of the \s-1CMS\s0 structure the encoding +remains \s-1DER.\s0 +.PP +If the \fB\-decrypt\fR option is used without a recipient certificate then an +attempt is made to locate the recipient by trying each potential recipient +in turn using the supplied private key. To thwart the \s-1MMA\s0 attack +(Bleichenbacher's attack on \s-1PKCS\s0 #1 v1.5 \s-1RSA\s0 padding) all recipients are +tried whether they succeed or not and if no recipients match the message +is \*(L"decrypted\*(R" using a random key which will typically output garbage. +The \fB\-debug_decrypt\fR option can be used to disable the \s-1MMA\s0 attack protection +and return an error if no recipient can be found: this option should be used +with caution. For a fuller description see \fBCMS_decrypt\fR\|(3)). +.SH "EXIT CODES" +.IX Header "EXIT CODES" +.IP "0" 4 +The operation was completely successfully. +.IP "1" 4 +.IX Item "1" +An error occurred parsing the command options. +.IP "2" 4 +.IX Item "2" +One of the input files could not be read. +.IP "3" 4 +.IX Item "3" +An error occurred creating the \s-1CMS\s0 file or when reading the \s-1MIME\s0 +message. +.IP "4" 4 +.IX Item "4" +An error occurred decrypting or verifying the message. +.IP "5" 4 +.IX Item "5" +The message was verified correctly but an error occurred writing out +the signers certificates. +.SH "COMPATIBILITY WITH PKCS#7 format." +.IX Header "COMPATIBILITY WITH PKCS#7 format." +The \fBsmime\fR utility can only process the older \fBPKCS#7\fR format. The \fBcms\fR +utility supports Cryptographic Message Syntax format. Use of some features +will result in messages which cannot be processed by applications which only +support the older format. These are detailed below. +.PP +The use of the \fB\-keyid\fR option with \fB\-sign\fR or \fB\-encrypt\fR. +.PP +The \fB\-outform \s-1PEM\s0\fR option uses different headers. +.PP +The \fB\-compress\fR option. +.PP +The \fB\-secretkey\fR option when used with \fB\-encrypt\fR. +.PP +The use of \s-1PSS\s0 with \fB\-sign\fR. +.PP +The use of \s-1OAEP\s0 or non-RSA keys with \fB\-encrypt\fR. +.PP +Additionally the \fB\-EncryptedData_create\fR and \fB\-data_create\fR type cannot +be processed by the older \fBsmime\fR command. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +Create a cleartext signed message: +.PP +.Vb 2 +\& openssl cms \-sign \-in message.txt \-text \-out mail.msg \e +\& \-signer mycert.pem +.Ve +.PP +Create an opaque signed message +.PP +.Vb 2 +\& openssl cms \-sign \-in message.txt \-text \-out mail.msg \-nodetach \e +\& \-signer mycert.pem +.Ve +.PP +Create a signed message, include some additional certificates and +read the private key from another file: +.PP +.Vb 2 +\& openssl cms \-sign \-in in.txt \-text \-out mail.msg \e +\& \-signer mycert.pem \-inkey mykey.pem \-certfile mycerts.pem +.Ve +.PP +Create a signed message with two signers, use key identifier: +.PP +.Vb 2 +\& openssl cms \-sign \-in message.txt \-text \-out mail.msg \e +\& \-signer mycert.pem \-signer othercert.pem \-keyid +.Ve +.PP +Send a signed message under Unix directly to sendmail, including headers: +.PP +.Vb 3 +\& openssl cms \-sign \-in in.txt \-text \-signer mycert.pem \e +\& \-from steve@openssl.org \-to someone@somewhere \e +\& \-subject "Signed message" | sendmail someone@somewhere +.Ve +.PP +Verify a message and extract the signer's certificate if successful: +.PP +.Vb 1 +\& openssl cms \-verify \-in mail.msg \-signer user.pem \-out signedtext.txt +.Ve +.PP +Send encrypted mail using triple \s-1DES:\s0 +.PP +.Vb 3 +\& openssl cms \-encrypt \-in in.txt \-from steve@openssl.org \e +\& \-to someone@somewhere \-subject "Encrypted message" \e +\& \-des3 user.pem \-out mail.msg +.Ve +.PP +Sign and encrypt mail: +.PP +.Vb 4 +\& openssl cms \-sign \-in ml.txt \-signer my.pem \-text \e +\& | openssl cms \-encrypt \-out mail.msg \e +\& \-from steve@openssl.org \-to someone@somewhere \e +\& \-subject "Signed and Encrypted message" \-des3 user.pem +.Ve +.PP +Note: the encryption command does not include the \fB\-text\fR option because the +message being encrypted already has \s-1MIME\s0 headers. +.PP +Decrypt mail: +.PP +.Vb 1 +\& openssl cms \-decrypt \-in mail.msg \-recip mycert.pem \-inkey key.pem +.Ve +.PP +The output from Netscape form signing is a PKCS#7 structure with the +detached signature format. You can use this program to verify the +signature by line wrapping the base64 encoded structure and surrounding +it with: +.PP +.Vb 2 +\& \-\-\-\-\-BEGIN PKCS7\-\-\-\-\- +\& \-\-\-\-\-END PKCS7\-\-\-\-\- +.Ve +.PP +and using the command, +.PP +.Vb 1 +\& openssl cms \-verify \-inform PEM \-in signature.pem \-content content.txt +.Ve +.PP +alternatively you can base64 decode the signature and use +.PP +.Vb 1 +\& openssl cms \-verify \-inform DER \-in signature.der \-content content.txt +.Ve +.PP +Create an encrypted message using 128 bit Camellia: +.PP +.Vb 1 +\& openssl cms \-encrypt \-in plain.txt \-camellia128 \-out mail.msg cert.pem +.Ve +.PP +Add a signer to an existing message: +.PP +.Vb 1 +\& openssl cms \-resign \-in mail.msg \-signer newsign.pem \-out mail2.msg +.Ve +.PP +Sign mail using RSA-PSS: +.PP +.Vb 2 +\& openssl cms \-sign \-in message.txt \-text \-out mail.msg \e +\& \-signer mycert.pem \-keyopt rsa_padding_mode:pss +.Ve +.PP +Create encrypted mail using RSA-OAEP: +.PP +.Vb 2 +\& openssl cms \-encrypt \-in plain.txt \-out mail.msg \e +\& \-recip cert.pem \-keyopt rsa_padding_mode:oaep +.Ve +.PP +Use \s-1SHA256 KDF\s0 with an \s-1ECDH\s0 certificate: +.PP +.Vb 2 +\& openssl cms \-encrypt \-in plain.txt \-out mail.msg \e +\& \-recip ecdhcert.pem \-keyopt ecdh_kdf_md:sha256 +.Ve +.SH "BUGS" +.IX Header "BUGS" +The \s-1MIME\s0 parser isn't very clever: it seems to handle most messages that I've +thrown at it but it may choke on others. +.PP +The code currently will only write out the signer's certificate to a file: if +the signer has a separate encryption certificate this must be manually +extracted. There should be some heuristic that determines the correct +encryption certificate. +.PP +Ideally a database should be maintained of a certificates for each email +address. +.PP +The code doesn't currently take note of the permitted symmetric encryption +algorithms as supplied in the SMIMECapabilities signed attribute. this means the +user has to manually include the correct encryption algorithm. It should store +the list of permitted ciphers in a database and only use those. +.PP +No revocation checking is done on the signer's certificate. +.SH "HISTORY" +.IX Header "HISTORY" +The use of multiple \fB\-signer\fR options and the \fB\-resign\fR command were first +added in OpenSSL 1.0.0. +.PP +The \fBkeyopt\fR option was added in OpenSSL 1.0.2. +.PP +Support for RSA-OAEP and RSA-PSS was added in OpenSSL 1.0.2. +.PP +The use of non-RSA keys with \fB\-encrypt\fR and \fB\-decrypt\fR +was added in OpenSSL 1.0.2. +.PP +The \-no_alt_chains option was added in OpenSSL 1.0.2b. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2008\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/crl.1 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/crl.1 new file mode 100644 index 00000000..ec15114a --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/crl.1 @@ -0,0 +1,257 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "CRL 1" +.TH CRL 1 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +openssl\-crl, crl \- CRL utility +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +\&\fBopenssl\fR \fBcrl\fR +[\fB\-help\fR] +[\fB\-inform PEM|DER\fR] +[\fB\-outform PEM|DER\fR] +[\fB\-text\fR] +[\fB\-in filename\fR] +[\fB\-out filename\fR] +[\fB\-nameopt option\fR] +[\fB\-noout\fR] +[\fB\-hash\fR] +[\fB\-issuer\fR] +[\fB\-lastupdate\fR] +[\fB\-nextupdate\fR] +[\fB\-CAfile file\fR] +[\fB\-CApath dir\fR] +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fBcrl\fR command processes \s-1CRL\s0 files in \s-1DER\s0 or \s-1PEM\s0 format. +.SH "OPTIONS" +.IX Header "OPTIONS" +.IP "\fB\-help\fR" 4 +.IX Item "-help" +Print out a usage message. +.IP "\fB\-inform DER|PEM\fR" 4 +.IX Item "-inform DER|PEM" +This specifies the input format. \fB\s-1DER\s0\fR format is \s-1DER\s0 encoded \s-1CRL\s0 +structure. \fB\s-1PEM\s0\fR (the default) is a base64 encoded version of +the \s-1DER\s0 form with header and footer lines. +.IP "\fB\-outform DER|PEM\fR" 4 +.IX Item "-outform DER|PEM" +This specifies the output format, the options have the same meaning and default +as the \fB\-inform\fR option. +.IP "\fB\-in filename\fR" 4 +.IX Item "-in filename" +This specifies the input filename to read from or standard input if this +option is not specified. +.IP "\fB\-out filename\fR" 4 +.IX Item "-out filename" +Specifies the output filename to write to or standard output by +default. +.IP "\fB\-text\fR" 4 +.IX Item "-text" +Print out the \s-1CRL\s0 in text form. +.IP "\fB\-nameopt option\fR" 4 +.IX Item "-nameopt option" +Option which determines how the subject or issuer names are displayed. See +the description of \fB\-nameopt\fR in \fBx509\fR\|(1). +.IP "\fB\-noout\fR" 4 +.IX Item "-noout" +Don't output the encoded version of the \s-1CRL.\s0 +.IP "\fB\-hash\fR" 4 +.IX Item "-hash" +Output a hash of the issuer name. This can be use to lookup CRLs in +a directory by issuer name. +.IP "\fB\-hash_old\fR" 4 +.IX Item "-hash_old" +Outputs the \*(L"hash\*(R" of the \s-1CRL\s0 issuer name using the older algorithm +as used by OpenSSL before version 1.0.0. +.IP "\fB\-issuer\fR" 4 +.IX Item "-issuer" +Output the issuer name. +.IP "\fB\-lastupdate\fR" 4 +.IX Item "-lastupdate" +Output the lastUpdate field. +.IP "\fB\-nextupdate\fR" 4 +.IX Item "-nextupdate" +Output the nextUpdate field. +.IP "\fB\-CAfile file\fR" 4 +.IX Item "-CAfile file" +Verify the signature on a \s-1CRL\s0 by looking up the issuing certificate in +\&\fBfile\fR. +.IP "\fB\-CApath dir\fR" 4 +.IX Item "-CApath dir" +Verify the signature on a \s-1CRL\s0 by looking up the issuing certificate in +\&\fBdir\fR. This directory must be a standard certificate directory: that +is a hash of each subject name (using \fBx509 \-hash\fR) should be linked +to each certificate. +.SH "NOTES" +.IX Header "NOTES" +The \s-1PEM CRL\s0 format uses the header and footer lines: +.PP +.Vb 2 +\& \-\-\-\-\-BEGIN X509 CRL\-\-\-\-\- +\& \-\-\-\-\-END X509 CRL\-\-\-\-\- +.Ve +.SH "EXAMPLES" +.IX Header "EXAMPLES" +Convert a \s-1CRL\s0 file from \s-1PEM\s0 to \s-1DER:\s0 +.PP +.Vb 1 +\& openssl crl \-in crl.pem \-outform DER \-out crl.der +.Ve +.PP +Output the text form of a \s-1DER\s0 encoded certificate: +.PP +.Vb 1 +\& openssl crl \-in crl.der \-inform DER \-text \-noout +.Ve +.SH "BUGS" +.IX Header "BUGS" +Ideally it should be possible to create a \s-1CRL\s0 using appropriate options +and files too. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBcrl2pkcs7\fR\|(1), \fBca\fR\|(1), \fBx509\fR\|(1) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/crl2pkcs7.1 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/crl2pkcs7.1 new file mode 100644 index 00000000..67214af2 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/crl2pkcs7.1 @@ -0,0 +1,227 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "CRL2PKCS7 1" +.TH CRL2PKCS7 1 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +openssl\-crl2pkcs7, crl2pkcs7 \- Create a PKCS#7 structure from a CRL and certificates +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +\&\fBopenssl\fR \fBcrl2pkcs7\fR +[\fB\-help\fR] +[\fB\-inform PEM|DER\fR] +[\fB\-outform PEM|DER\fR] +[\fB\-in filename\fR] +[\fB\-out filename\fR] +[\fB\-certfile filename\fR] +[\fB\-nocrl\fR] +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fBcrl2pkcs7\fR command takes an optional \s-1CRL\s0 and one or more +certificates and converts them into a PKCS#7 degenerate \*(L"certificates +only\*(R" structure. +.SH "OPTIONS" +.IX Header "OPTIONS" +.IP "\fB\-help\fR" 4 +.IX Item "-help" +Print out a usage message. +.IP "\fB\-inform DER|PEM\fR" 4 +.IX Item "-inform DER|PEM" +This specifies the \s-1CRL\s0 input format. \fB\s-1DER\s0\fR format is \s-1DER\s0 encoded \s-1CRL\s0 +structure.\fB\s-1PEM\s0\fR (the default) is a base64 encoded version of +the \s-1DER\s0 form with header and footer lines. The default format is \s-1PEM.\s0 +.IP "\fB\-outform DER|PEM\fR" 4 +.IX Item "-outform DER|PEM" +This specifies the PKCS#7 structure output format. \fB\s-1DER\s0\fR format is \s-1DER\s0 +encoded PKCS#7 structure.\fB\s-1PEM\s0\fR (the default) is a base64 encoded version of +the \s-1DER\s0 form with header and footer lines. The default format is \s-1PEM.\s0 +.IP "\fB\-in filename\fR" 4 +.IX Item "-in filename" +This specifies the input filename to read a \s-1CRL\s0 from or standard input if this +option is not specified. +.IP "\fB\-out filename\fR" 4 +.IX Item "-out filename" +Specifies the output filename to write the PKCS#7 structure to or standard +output by default. +.IP "\fB\-certfile filename\fR" 4 +.IX Item "-certfile filename" +Specifies a filename containing one or more certificates in \fB\s-1PEM\s0\fR format. +All certificates in the file will be added to the PKCS#7 structure. This +option can be used more than once to read certificates form multiple +files. +.IP "\fB\-nocrl\fR" 4 +.IX Item "-nocrl" +Normally a \s-1CRL\s0 is included in the output file. With this option no \s-1CRL\s0 is +included in the output file and a \s-1CRL\s0 is not read from the input file. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +Create a PKCS#7 structure from a certificate and \s-1CRL:\s0 +.PP +.Vb 1 +\& openssl crl2pkcs7 \-in crl.pem \-certfile cert.pem \-out p7.pem +.Ve +.PP +Creates a PKCS#7 structure in \s-1DER\s0 format with no \s-1CRL\s0 from several +different certificates: +.PP +.Vb 2 +\& openssl crl2pkcs7 \-nocrl \-certfile newcert.pem +\& \-certfile demoCA/cacert.pem \-outform DER \-out p7.der +.Ve +.SH "NOTES" +.IX Header "NOTES" +The output file is a PKCS#7 signed data structure containing no signers and +just certificates and an optional \s-1CRL.\s0 +.PP +This utility can be used to send certificates and CAs to Netscape as part of +the certificate enrollment process. This involves sending the \s-1DER\s0 encoded output +as \s-1MIME\s0 type application/x\-x509\-user\-cert. +.PP +The \fB\s-1PEM\s0\fR encoded form with the header and footer lines removed can be used to +install user certificates and CAs in \s-1MSIE\s0 using the Xenroll control. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBpkcs7\fR\|(1) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/dgst.1 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/dgst.1 new file mode 100644 index 00000000..5899e161 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/dgst.1 @@ -0,0 +1,347 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "DGST 1" +.TH DGST 1 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +openssl\-dgst, dgst \- perform digest operations +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +\&\fBopenssl dgst\fR +[\fB\-\f(BIdigest\fB\fR] +[\fB\-help\fR] +[\fB\-c\fR] +[\fB\-d\fR] +[\fB\-list\fR] +[\fB\-hex\fR] +[\fB\-binary\fR] +[\fB\-r\fR] +[\fB\-out filename\fR] +[\fB\-sign filename\fR] +[\fB\-keyform arg\fR] +[\fB\-passin arg\fR] +[\fB\-verify filename\fR] +[\fB\-prverify filename\fR] +[\fB\-signature filename\fR] +[\fB\-sigopt nm:v\fR] +[\fB\-hmac key\fR] +[\fB\-fips\-fingerprint\fR] +[\fB\-rand file...\fR] +[\fB\-engine id\fR] +[\fB\-engine_impl\fR] +[\fBfile...\fR] +.PP +\&\fBopenssl\fR \fIdigest\fR [\fB...\fR] +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The digest functions output the message digest of a supplied file or files +in hexadecimal. The digest functions also generate and verify digital +signatures using message digests. +.PP +The generic name, \fBdgst\fR, may be used with an option specifying the +algorithm to be used. +The default digest is \fIsha256\fR. +A supported \fIdigest\fR name may also be used as the command name. +To see the list of supported algorithms, use the \fIlist \-\-digest\-commands\fR +command. +.SH "OPTIONS" +.IX Header "OPTIONS" +.IP "\fB\-help\fR" 4 +.IX Item "-help" +Print out a usage message. +.IP "\fB\-\f(BIdigest\fB\fR" 4 +.IX Item "-digest" +Specifies name of a supported digest to be used. To see the list of +supported digests, use the command \fIlist \-\-digest\-commands\fR. +.IP "\fB\-c\fR" 4 +.IX Item "-c" +Print out the digest in two digit groups separated by colons, only relevant if +\&\fBhex\fR format output is used. +.IP "\fB\-d\fR" 4 +.IX Item "-d" +Print out \s-1BIO\s0 debugging information. +.IP "\fB\-list\fR" 4 +.IX Item "-list" +Prints out a list of supported message digests. +.IP "\fB\-hex\fR" 4 +.IX Item "-hex" +Digest is to be output as a hex dump. This is the default case for a \*(L"normal\*(R" +digest as opposed to a digital signature. See \s-1NOTES\s0 below for digital +signatures using \fB\-hex\fR. +.IP "\fB\-binary\fR" 4 +.IX Item "-binary" +Output the digest or signature in binary form. +.IP "\fB\-r\fR" 4 +.IX Item "-r" +Output the digest in the \*(L"coreutils\*(R" format, including newlines. +Used by programs like \fBsha1sum\fR. +.IP "\fB\-out filename\fR" 4 +.IX Item "-out filename" +Filename to output to, or standard output by default. +.IP "\fB\-sign filename\fR" 4 +.IX Item "-sign filename" +Digitally sign the digest using the private key in \*(L"filename\*(R". Note this option +does not support Ed25519 or Ed448 private keys. Use the \fBpkeyutl\fR command +instead for this. +.IP "\fB\-keyform arg\fR" 4 +.IX Item "-keyform arg" +Specifies the key format to sign digest with. The \s-1DER, PEM, P12,\s0 +and \s-1ENGINE\s0 formats are supported. +.IP "\fB\-sigopt nm:v\fR" 4 +.IX Item "-sigopt nm:v" +Pass options to the signature algorithm during sign or verify operations. +Names and values of these options are algorithm-specific. +.IP "\fB\-passin arg\fR" 4 +.IX Item "-passin arg" +The private key password source. For more information about the format of \fBarg\fR +see the \fB\s-1PASS PHRASE ARGUMENTS\s0\fR section in \fBopenssl\fR\|(1). +.IP "\fB\-verify filename\fR" 4 +.IX Item "-verify filename" +Verify the signature using the public key in \*(L"filename\*(R". +The output is either \*(L"Verification \s-1OK\*(R"\s0 or \*(L"Verification Failure\*(R". +.IP "\fB\-prverify filename\fR" 4 +.IX Item "-prverify filename" +Verify the signature using the private key in \*(L"filename\*(R". +.IP "\fB\-signature filename\fR" 4 +.IX Item "-signature filename" +The actual signature to verify. +.IP "\fB\-hmac key\fR" 4 +.IX Item "-hmac key" +Create a hashed \s-1MAC\s0 using \*(L"key\*(R". +.IP "\fB\-mac alg\fR" 4 +.IX Item "-mac alg" +Create \s-1MAC\s0 (keyed Message Authentication Code). The most popular \s-1MAC\s0 +algorithm is \s-1HMAC\s0 (hash-based \s-1MAC\s0), but there are other \s-1MAC\s0 algorithms +which are not based on hash, for instance \fBgost-mac\fR algorithm, +supported by \fBccgost\fR engine. \s-1MAC\s0 keys and other options should be set +via \fB\-macopt\fR parameter. +.IP "\fB\-macopt nm:v\fR" 4 +.IX Item "-macopt nm:v" +Passes options to \s-1MAC\s0 algorithm, specified by \fB\-mac\fR key. +Following options are supported by both by \fB\s-1HMAC\s0\fR and \fBgost-mac\fR: +.RS 4 +.IP "\fBkey:string\fR" 4 +.IX Item "key:string" +Specifies \s-1MAC\s0 key as alphanumeric string (use if key contain printable +characters only). String length must conform to any restrictions of +the \s-1MAC\s0 algorithm for example exactly 32 chars for gost-mac. +.IP "\fBhexkey:string\fR" 4 +.IX Item "hexkey:string" +Specifies \s-1MAC\s0 key in hexadecimal form (two hex digits per byte). +Key length must conform to any restrictions of the \s-1MAC\s0 algorithm +for example exactly 32 chars for gost-mac. +.RE +.RS 4 +.RE +.IP "\fB\-rand file...\fR" 4 +.IX Item "-rand file..." +A file or files containing random data used to seed the random number +generator. +Multiple files can be specified separated by an OS-dependent character. +The separator is \fB;\fR for MS-Windows, \fB,\fR for OpenVMS, and \fB:\fR for +all others. +.IP "[\fB\-writerand file\fR]" 4 +.IX Item "[-writerand file]" +Writes random data to the specified \fIfile\fR upon exit. +This can be used with a subsequent \fB\-rand\fR flag. +.IP "\fB\-fips\-fingerprint\fR" 4 +.IX Item "-fips-fingerprint" +Compute \s-1HMAC\s0 using a specific key for certain OpenSSL-FIPS operations. +.IP "\fB\-engine id\fR" 4 +.IX Item "-engine id" +Use engine \fBid\fR for operations (including private key storage). +This engine is not used as source for digest algorithms, unless it is +also specified in the configuration file or \fB\-engine_impl\fR is also +specified. +.IP "\fB\-engine_impl\fR" 4 +.IX Item "-engine_impl" +When used with the \fB\-engine\fR option, it specifies to also use +engine \fBid\fR for digest operations. +.IP "\fBfile...\fR" 4 +.IX Item "file..." +File or files to digest. If no files are specified then standard input is +used. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +To create a hex-encoded message digest of a file: + openssl dgst \-md5 \-hex file.txt +.PP +To sign a file using \s-1SHA\-256\s0 with binary file output: + openssl dgst \-sha256 \-sign privatekey.pem \-out signature.sign file.txt +.PP +To verify a signature: + openssl dgst \-sha256 \-verify publickey.pem \e + \-signature signature.sign \e + file.txt +.SH "NOTES" +.IX Header "NOTES" +The digest mechanisms that are available will depend on the options +used when building OpenSSL. +The \fBlist digest-commands\fR command can be used to list them. +.PP +New or agile applications should use probably use \s-1SHA\-256.\s0 Other digests, +particularly \s-1SHA\-1\s0 and \s-1MD5,\s0 are still widely used for interoperating +with existing formats and protocols. +.PP +When signing a file, \fBdgst\fR will automatically determine the algorithm +(\s-1RSA, ECC,\s0 etc) to use for signing based on the private key's \s-1ASN.1\s0 info. +When verifying signatures, it only handles the \s-1RSA, DSA,\s0 or \s-1ECDSA\s0 signature +itself, not the related data to identify the signer and algorithm used in +formats such as x.509, \s-1CMS,\s0 and S/MIME. +.PP +A source of random numbers is required for certain signing algorithms, in +particular \s-1ECDSA\s0 and \s-1DSA.\s0 +.PP +The signing and verify options should only be used if a single file is +being signed or verified. +.PP +Hex signatures cannot be verified using \fBopenssl\fR. Instead, use \*(L"xxd \-r\*(R" +or similar program to transform the hex signature into a binary signature +prior to verification. +.SH "HISTORY" +.IX Header "HISTORY" +The default digest was changed from \s-1MD5\s0 to \s-1SHA256\s0 in OpenSSL 1.1.0. +The FIPS-related options were removed in OpenSSL 1.1.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/dhparam.1 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/dhparam.1 new file mode 100644 index 00000000..8c7053bd --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/dhparam.1 @@ -0,0 +1,276 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "DHPARAM 1" +.TH DHPARAM 1 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +openssl\-dhparam, dhparam \- DH parameter manipulation and generation +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +\&\fBopenssl dhparam\fR +[\fB\-help\fR] +[\fB\-inform DER|PEM\fR] +[\fB\-outform DER|PEM\fR] +[\fB\-in\fR \fIfilename\fR] +[\fB\-out\fR \fIfilename\fR] +[\fB\-dsaparam\fR] +[\fB\-check\fR] +[\fB\-noout\fR] +[\fB\-text\fR] +[\fB\-C\fR] +[\fB\-2\fR] +[\fB\-5\fR] +[\fB\-rand file...\fR] +[\fB\-writerand file\fR] +[\fB\-engine id\fR] +[\fInumbits\fR] +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +This command is used to manipulate \s-1DH\s0 parameter files. +.SH "OPTIONS" +.IX Header "OPTIONS" +.IP "\fB\-help\fR" 4 +.IX Item "-help" +Print out a usage message. +.IP "\fB\-inform DER|PEM\fR" 4 +.IX Item "-inform DER|PEM" +This specifies the input format. The \fB\s-1DER\s0\fR option uses an \s-1ASN1 DER\s0 encoded +form compatible with the PKCS#3 DHparameter structure. The \s-1PEM\s0 form is the +default format: it consists of the \fB\s-1DER\s0\fR format base64 encoded with +additional header and footer lines. +.IP "\fB\-outform DER|PEM\fR" 4 +.IX Item "-outform DER|PEM" +This specifies the output format, the options have the same meaning and default +as the \fB\-inform\fR option. +.IP "\fB\-in\fR \fIfilename\fR" 4 +.IX Item "-in filename" +This specifies the input filename to read parameters from or standard input if +this option is not specified. +.IP "\fB\-out\fR \fIfilename\fR" 4 +.IX Item "-out filename" +This specifies the output filename parameters to. Standard output is used +if this option is not present. The output filename should \fBnot\fR be the same +as the input filename. +.IP "\fB\-dsaparam\fR" 4 +.IX Item "-dsaparam" +If this option is used, \s-1DSA\s0 rather than \s-1DH\s0 parameters are read or created; +they are converted to \s-1DH\s0 format. Otherwise, \*(L"strong\*(R" primes (such +that (p\-1)/2 is also prime) will be used for \s-1DH\s0 parameter generation. +.Sp +\&\s-1DH\s0 parameter generation with the \fB\-dsaparam\fR option is much faster, +and the recommended exponent length is shorter, which makes \s-1DH\s0 key +exchange more efficient. Beware that with such DSA-style \s-1DH\s0 +parameters, a fresh \s-1DH\s0 key should be created for each use to +avoid small-subgroup attacks that may be possible otherwise. +.IP "\fB\-check\fR" 4 +.IX Item "-check" +Performs numerous checks to see if the supplied parameters are valid and +displays a warning if not. +.IP "\fB\-2\fR, \fB\-5\fR" 4 +.IX Item "-2, -5" +The generator to use, either 2 or 5. If present then the +input file is ignored and parameters are generated instead. If not +present but \fBnumbits\fR is present, parameters are generated with the +default generator 2. +.IP "\fB\-rand file...\fR" 4 +.IX Item "-rand file..." +A file or files containing random data used to seed the random number +generator. +Multiple files can be specified separated by an OS-dependent character. +The separator is \fB;\fR for MS-Windows, \fB,\fR for OpenVMS, and \fB:\fR for +all others. +.IP "[\fB\-writerand file\fR]" 4 +.IX Item "[-writerand file]" +Writes random data to the specified \fIfile\fR upon exit. +This can be used with a subsequent \fB\-rand\fR flag. +.IP "\fInumbits\fR" 4 +.IX Item "numbits" +This option specifies that a parameter set should be generated of size +\&\fInumbits\fR. It must be the last option. If this option is present then +the input file is ignored and parameters are generated instead. If +this option is not present but a generator (\fB\-2\fR or \fB\-5\fR) is +present, parameters are generated with a default length of 2048 bits. +.IP "\fB\-noout\fR" 4 +.IX Item "-noout" +This option inhibits the output of the encoded version of the parameters. +.IP "\fB\-text\fR" 4 +.IX Item "-text" +This option prints out the \s-1DH\s0 parameters in human readable form. +.IP "\fB\-C\fR" 4 +.IX Item "-C" +This option converts the parameters into C code. The parameters can then +be loaded by calling the \fBget_dhNNNN()\fR function. +.IP "\fB\-engine id\fR" 4 +.IX Item "-engine id" +Specifying an engine (by its unique \fBid\fR string) will cause \fBdhparam\fR +to attempt to obtain a functional reference to the specified engine, +thus initialising it if needed. The engine will then be set as the default +for all available algorithms. +.SH "WARNINGS" +.IX Header "WARNINGS" +The program \fBdhparam\fR combines the functionality of the programs \fBdh\fR and +\&\fBgendh\fR in previous versions of OpenSSL. The \fBdh\fR and \fBgendh\fR +programs are retained for now but may have different purposes in future +versions of OpenSSL. +.SH "NOTES" +.IX Header "NOTES" +\&\s-1PEM\s0 format \s-1DH\s0 parameters use the header and footer lines: +.PP +.Vb 2 +\& \-\-\-\-\-BEGIN DH PARAMETERS\-\-\-\-\- +\& \-\-\-\-\-END DH PARAMETERS\-\-\-\-\- +.Ve +.PP +OpenSSL currently only supports the older PKCS#3 \s-1DH,\s0 not the newer X9.42 +\&\s-1DH.\s0 +.PP +This program manipulates \s-1DH\s0 parameters not keys. +.SH "BUGS" +.IX Header "BUGS" +There should be a way to generate and manipulate \s-1DH\s0 keys. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBdsaparam\fR\|(1) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/dsa.1 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/dsa.1 new file mode 100644 index 00000000..abb85c6b --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/dsa.1 @@ -0,0 +1,306 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "DSA 1" +.TH DSA 1 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +openssl\-dsa, dsa \- DSA key processing +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +\&\fBopenssl\fR \fBdsa\fR +[\fB\-help\fR] +[\fB\-inform PEM|DER\fR] +[\fB\-outform PEM|DER\fR] +[\fB\-in filename\fR] +[\fB\-passin arg\fR] +[\fB\-out filename\fR] +[\fB\-passout arg\fR] +[\fB\-aes128\fR] +[\fB\-aes192\fR] +[\fB\-aes256\fR] +[\fB\-aria128\fR] +[\fB\-aria192\fR] +[\fB\-aria256\fR] +[\fB\-camellia128\fR] +[\fB\-camellia192\fR] +[\fB\-camellia256\fR] +[\fB\-des\fR] +[\fB\-des3\fR] +[\fB\-idea\fR] +[\fB\-text\fR] +[\fB\-noout\fR] +[\fB\-modulus\fR] +[\fB\-pubin\fR] +[\fB\-pubout\fR] +[\fB\-engine id\fR] +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fBdsa\fR command processes \s-1DSA\s0 keys. They can be converted between various +forms and their components printed out. \fBNote\fR This command uses the +traditional SSLeay compatible format for private key encryption: newer +applications should use the more secure PKCS#8 format using the \fBpkcs8\fR +.SH "OPTIONS" +.IX Header "OPTIONS" +.IP "\fB\-help\fR" 4 +.IX Item "-help" +Print out a usage message. +.IP "\fB\-inform DER|PEM\fR" 4 +.IX Item "-inform DER|PEM" +This specifies the input format. The \fB\s-1DER\s0\fR option with a private key uses +an \s-1ASN1 DER\s0 encoded form of an \s-1ASN.1 SEQUENCE\s0 consisting of the values of +version (currently zero), p, q, g, the public and private key components +respectively as \s-1ASN.1\s0 INTEGERs. When used with a public key it uses a +SubjectPublicKeyInfo structure: it is an error if the key is not \s-1DSA.\s0 +.Sp +The \fB\s-1PEM\s0\fR form is the default format: it consists of the \fB\s-1DER\s0\fR format base64 +encoded with additional header and footer lines. In the case of a private key +PKCS#8 format is also accepted. +.IP "\fB\-outform DER|PEM\fR" 4 +.IX Item "-outform DER|PEM" +This specifies the output format, the options have the same meaning and default +as the \fB\-inform\fR option. +.IP "\fB\-in filename\fR" 4 +.IX Item "-in filename" +This specifies the input filename to read a key from or standard input if this +option is not specified. If the key is encrypted a pass phrase will be +prompted for. +.IP "\fB\-passin arg\fR" 4 +.IX Item "-passin arg" +The input file password source. For more information about the format of \fBarg\fR +see the \fB\s-1PASS PHRASE ARGUMENTS\s0\fR section in \fBopenssl\fR\|(1). +.IP "\fB\-out filename\fR" 4 +.IX Item "-out filename" +This specifies the output filename to write a key to or standard output by +is not specified. If any encryption options are set then a pass phrase will be +prompted for. The output filename should \fBnot\fR be the same as the input +filename. +.IP "\fB\-passout arg\fR" 4 +.IX Item "-passout arg" +The output file password source. For more information about the format of \fBarg\fR +see the \fB\s-1PASS PHRASE ARGUMENTS\s0\fR section in \fBopenssl\fR\|(1). +.IP "\fB\-aes128\fR, \fB\-aes192\fR, \fB\-aes256\fR, \fB\-aria128\fR, \fB\-aria192\fR, \fB\-aria256\fR, \fB\-camellia128\fR, \fB\-camellia192\fR, \fB\-camellia256\fR, \fB\-des\fR, \fB\-des3\fR, \fB\-idea\fR" 4 +.IX Item "-aes128, -aes192, -aes256, -aria128, -aria192, -aria256, -camellia128, -camellia192, -camellia256, -des, -des3, -idea" +These options encrypt the private key with the specified +cipher before outputting it. A pass phrase is prompted for. +If none of these options is specified the key is written in plain text. This +means that using the \fBdsa\fR utility to read in an encrypted key with no +encryption option can be used to remove the pass phrase from a key, or by +setting the encryption options it can be use to add or change the pass phrase. +These options can only be used with \s-1PEM\s0 format output files. +.IP "\fB\-text\fR" 4 +.IX Item "-text" +Prints out the public, private key components and parameters. +.IP "\fB\-noout\fR" 4 +.IX Item "-noout" +This option prevents output of the encoded version of the key. +.IP "\fB\-modulus\fR" 4 +.IX Item "-modulus" +This option prints out the value of the public key component of the key. +.IP "\fB\-pubin\fR" 4 +.IX Item "-pubin" +By default, a private key is read from the input file. With this option a +public key is read instead. +.IP "\fB\-pubout\fR" 4 +.IX Item "-pubout" +By default, a private key is output. With this option a public +key will be output instead. This option is automatically set if the input is +a public key. +.IP "\fB\-engine id\fR" 4 +.IX Item "-engine id" +Specifying an engine (by its unique \fBid\fR string) will cause \fBdsa\fR +to attempt to obtain a functional reference to the specified engine, +thus initialising it if needed. The engine will then be set as the default +for all available algorithms. +.SH "NOTES" +.IX Header "NOTES" +The \s-1PEM\s0 private key format uses the header and footer lines: +.PP +.Vb 2 +\& \-\-\-\-\-BEGIN DSA PRIVATE KEY\-\-\-\-\- +\& \-\-\-\-\-END DSA PRIVATE KEY\-\-\-\-\- +.Ve +.PP +The \s-1PEM\s0 public key format uses the header and footer lines: +.PP +.Vb 2 +\& \-\-\-\-\-BEGIN PUBLIC KEY\-\-\-\-\- +\& \-\-\-\-\-END PUBLIC KEY\-\-\-\-\- +.Ve +.SH "EXAMPLES" +.IX Header "EXAMPLES" +To remove the pass phrase on a \s-1DSA\s0 private key: +.PP +.Vb 1 +\& openssl dsa \-in key.pem \-out keyout.pem +.Ve +.PP +To encrypt a private key using triple \s-1DES:\s0 +.PP +.Vb 1 +\& openssl dsa \-in key.pem \-des3 \-out keyout.pem +.Ve +.PP +To convert a private key from \s-1PEM\s0 to \s-1DER\s0 format: +.PP +.Vb 1 +\& openssl dsa \-in key.pem \-outform DER \-out keyout.der +.Ve +.PP +To print out the components of a private key to standard output: +.PP +.Vb 1 +\& openssl dsa \-in key.pem \-text \-noout +.Ve +.PP +To just output the public part of a private key: +.PP +.Vb 1 +\& openssl dsa \-in key.pem \-pubout \-out pubkey.pem +.Ve +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBdsaparam\fR\|(1), \fBgendsa\fR\|(1), \fBrsa\fR\|(1), +\&\fBgenrsa\fR\|(1) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/dsaparam.1 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/dsaparam.1 new file mode 100644 index 00000000..ac6dd7b8 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/dsaparam.1 @@ -0,0 +1,245 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "DSAPARAM 1" +.TH DSAPARAM 1 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +openssl\-dsaparam, dsaparam \- DSA parameter manipulation and generation +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +\&\fBopenssl dsaparam\fR +[\fB\-help\fR] +[\fB\-inform DER|PEM\fR] +[\fB\-outform DER|PEM\fR] +[\fB\-in filename\fR] +[\fB\-out filename\fR] +[\fB\-noout\fR] +[\fB\-text\fR] +[\fB\-C\fR] +[\fB\-rand file...\fR] +[\fB\-writerand file\fR] +[\fB\-genkey\fR] +[\fB\-engine id\fR] +[\fBnumbits\fR] +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +This command is used to manipulate or generate \s-1DSA\s0 parameter files. +.SH "OPTIONS" +.IX Header "OPTIONS" +.IP "\fB\-help\fR" 4 +.IX Item "-help" +Print out a usage message. +.IP "\fB\-inform DER|PEM\fR" 4 +.IX Item "-inform DER|PEM" +This specifies the input format. The \fB\s-1DER\s0\fR option uses an \s-1ASN1 DER\s0 encoded +form compatible with \s-1RFC2459\s0 (\s-1PKIX\s0) DSS-Parms that is a \s-1SEQUENCE\s0 consisting +of p, q and g respectively. The \s-1PEM\s0 form is the default format: it consists +of the \fB\s-1DER\s0\fR format base64 encoded with additional header and footer lines. +.IP "\fB\-outform DER|PEM\fR" 4 +.IX Item "-outform DER|PEM" +This specifies the output format, the options have the same meaning and default +as the \fB\-inform\fR option. +.IP "\fB\-in filename\fR" 4 +.IX Item "-in filename" +This specifies the input filename to read parameters from or standard input if +this option is not specified. If the \fBnumbits\fR parameter is included then +this option will be ignored. +.IP "\fB\-out filename\fR" 4 +.IX Item "-out filename" +This specifies the output filename parameters to. Standard output is used +if this option is not present. The output filename should \fBnot\fR be the same +as the input filename. +.IP "\fB\-noout\fR" 4 +.IX Item "-noout" +This option inhibits the output of the encoded version of the parameters. +.IP "\fB\-text\fR" 4 +.IX Item "-text" +This option prints out the \s-1DSA\s0 parameters in human readable form. +.IP "\fB\-C\fR" 4 +.IX Item "-C" +This option converts the parameters into C code. The parameters can then +be loaded by calling the \fBget_dsaXXX()\fR function. +.IP "\fB\-genkey\fR" 4 +.IX Item "-genkey" +This option will generate a \s-1DSA\s0 either using the specified or generated +parameters. +.IP "\fB\-rand file...\fR" 4 +.IX Item "-rand file..." +A file or files containing random data used to seed the random number +generator. +Multiple files can be specified separated by an OS-dependent character. +The separator is \fB;\fR for MS-Windows, \fB,\fR for OpenVMS, and \fB:\fR for +all others. +.IP "[\fB\-writerand file\fR]" 4 +.IX Item "[-writerand file]" +Writes random data to the specified \fIfile\fR upon exit. +This can be used with a subsequent \fB\-rand\fR flag. +.IP "\fBnumbits\fR" 4 +.IX Item "numbits" +This option specifies that a parameter set should be generated of size +\&\fBnumbits\fR. It must be the last option. If this option is included then +the input file (if any) is ignored. +.IP "\fB\-engine id\fR" 4 +.IX Item "-engine id" +Specifying an engine (by its unique \fBid\fR string) will cause \fBdsaparam\fR +to attempt to obtain a functional reference to the specified engine, +thus initialising it if needed. The engine will then be set as the default +for all available algorithms. +.SH "NOTES" +.IX Header "NOTES" +\&\s-1PEM\s0 format \s-1DSA\s0 parameters use the header and footer lines: +.PP +.Vb 2 +\& \-\-\-\-\-BEGIN DSA PARAMETERS\-\-\-\-\- +\& \-\-\-\-\-END DSA PARAMETERS\-\-\-\-\- +.Ve +.PP +\&\s-1DSA\s0 parameter generation is a slow process and as a result the same set of +\&\s-1DSA\s0 parameters is often used to generate several distinct keys. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBgendsa\fR\|(1), \fBdsa\fR\|(1), \fBgenrsa\fR\|(1), +\&\fBrsa\fR\|(1) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/ec.1 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/ec.1 new file mode 100644 index 00000000..84cfa7c2 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/ec.1 @@ -0,0 +1,326 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EC 1" +.TH EC 1 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +openssl\-ec, ec \- EC key processing +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +\&\fBopenssl\fR \fBec\fR +[\fB\-help\fR] +[\fB\-inform PEM|DER\fR] +[\fB\-outform PEM|DER\fR] +[\fB\-in filename\fR] +[\fB\-passin arg\fR] +[\fB\-out filename\fR] +[\fB\-passout arg\fR] +[\fB\-des\fR] +[\fB\-des3\fR] +[\fB\-idea\fR] +[\fB\-text\fR] +[\fB\-noout\fR] +[\fB\-param_out\fR] +[\fB\-pubin\fR] +[\fB\-pubout\fR] +[\fB\-conv_form arg\fR] +[\fB\-param_enc arg\fR] +[\fB\-no_public\fR] +[\fB\-check\fR] +[\fB\-engine id\fR] +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fBec\fR command processes \s-1EC\s0 keys. They can be converted between various +forms and their components printed out. \fBNote\fR OpenSSL uses the +private key format specified in '\s-1SEC 1:\s0 Elliptic Curve Cryptography' +(http://www.secg.org/). To convert an OpenSSL \s-1EC\s0 private key into the +PKCS#8 private key format use the \fBpkcs8\fR command. +.SH "OPTIONS" +.IX Header "OPTIONS" +.IP "\fB\-help\fR" 4 +.IX Item "-help" +Print out a usage message. +.IP "\fB\-inform DER|PEM\fR" 4 +.IX Item "-inform DER|PEM" +This specifies the input format. The \fB\s-1DER\s0\fR option with a private key uses +an \s-1ASN.1 DER\s0 encoded \s-1SEC1\s0 private key. When used with a public key it +uses the SubjectPublicKeyInfo structure as specified in \s-1RFC 3280.\s0 +The \fB\s-1PEM\s0\fR form is the default format: it consists of the \fB\s-1DER\s0\fR format base64 +encoded with additional header and footer lines. In the case of a private key +PKCS#8 format is also accepted. +.IP "\fB\-outform DER|PEM\fR" 4 +.IX Item "-outform DER|PEM" +This specifies the output format, the options have the same meaning and default +as the \fB\-inform\fR option. +.IP "\fB\-in filename\fR" 4 +.IX Item "-in filename" +This specifies the input filename to read a key from or standard input if this +option is not specified. If the key is encrypted a pass phrase will be +prompted for. +.IP "\fB\-passin arg\fR" 4 +.IX Item "-passin arg" +The input file password source. For more information about the format of \fBarg\fR +see the \fB\s-1PASS PHRASE ARGUMENTS\s0\fR section in \fBopenssl\fR\|(1). +.IP "\fB\-out filename\fR" 4 +.IX Item "-out filename" +This specifies the output filename to write a key to or standard output by +is not specified. If any encryption options are set then a pass phrase will be +prompted for. The output filename should \fBnot\fR be the same as the input +filename. +.IP "\fB\-passout arg\fR" 4 +.IX Item "-passout arg" +The output file password source. For more information about the format of \fBarg\fR +see the \fB\s-1PASS PHRASE ARGUMENTS\s0\fR section in \fBopenssl\fR\|(1). +.IP "\fB\-des|\-des3|\-idea\fR" 4 +.IX Item "-des|-des3|-idea" +These options encrypt the private key with the \s-1DES,\s0 triple \s-1DES, IDEA\s0 or +any other cipher supported by OpenSSL before outputting it. A pass phrase is +prompted for. +If none of these options is specified the key is written in plain text. This +means that using the \fBec\fR utility to read in an encrypted key with no +encryption option can be used to remove the pass phrase from a key, or by +setting the encryption options it can be use to add or change the pass phrase. +These options can only be used with \s-1PEM\s0 format output files. +.IP "\fB\-text\fR" 4 +.IX Item "-text" +Prints out the public, private key components and parameters. +.IP "\fB\-noout\fR" 4 +.IX Item "-noout" +This option prevents output of the encoded version of the key. +.IP "\fB\-pubin\fR" 4 +.IX Item "-pubin" +By default, a private key is read from the input file. With this option a +public key is read instead. +.IP "\fB\-pubout\fR" 4 +.IX Item "-pubout" +By default a private key is output. With this option a public +key will be output instead. This option is automatically set if the input is +a public key. +.IP "\fB\-conv_form\fR" 4 +.IX Item "-conv_form" +This specifies how the points on the elliptic curve are converted +into octet strings. Possible values are: \fBcompressed\fR (the default +value), \fBuncompressed\fR and \fBhybrid\fR. For more information regarding +the point conversion forms please read the X9.62 standard. +\&\fBNote\fR Due to patent issues the \fBcompressed\fR option is disabled +by default for binary curves and can be enabled by defining +the preprocessor macro \fB\s-1OPENSSL_EC_BIN_PT_COMP\s0\fR at compile time. +.IP "\fB\-param_enc arg\fR" 4 +.IX Item "-param_enc arg" +This specifies how the elliptic curve parameters are encoded. +Possible value are: \fBnamed_curve\fR, i.e. the ec parameters are +specified by an \s-1OID,\s0 or \fBexplicit\fR where the ec parameters are +explicitly given (see \s-1RFC 3279\s0 for the definition of the +\&\s-1EC\s0 parameters structures). The default value is \fBnamed_curve\fR. +\&\fBNote\fR the \fBimplicitlyCA\fR alternative, as specified in \s-1RFC 3279,\s0 +is currently not implemented in OpenSSL. +.IP "\fB\-no_public\fR" 4 +.IX Item "-no_public" +This option omits the public key components from the private key output. +.IP "\fB\-check\fR" 4 +.IX Item "-check" +This option checks the consistency of an \s-1EC\s0 private or public key. +.IP "\fB\-engine id\fR" 4 +.IX Item "-engine id" +Specifying an engine (by its unique \fBid\fR string) will cause \fBec\fR +to attempt to obtain a functional reference to the specified engine, +thus initialising it if needed. The engine will then be set as the default +for all available algorithms. +.SH "NOTES" +.IX Header "NOTES" +The \s-1PEM\s0 private key format uses the header and footer lines: +.PP +.Vb 2 +\& \-\-\-\-\-BEGIN EC PRIVATE KEY\-\-\-\-\- +\& \-\-\-\-\-END EC PRIVATE KEY\-\-\-\-\- +.Ve +.PP +The \s-1PEM\s0 public key format uses the header and footer lines: +.PP +.Vb 2 +\& \-\-\-\-\-BEGIN PUBLIC KEY\-\-\-\-\- +\& \-\-\-\-\-END PUBLIC KEY\-\-\-\-\- +.Ve +.SH "EXAMPLES" +.IX Header "EXAMPLES" +To encrypt a private key using triple \s-1DES:\s0 +.PP +.Vb 1 +\& openssl ec \-in key.pem \-des3 \-out keyout.pem +.Ve +.PP +To convert a private key from \s-1PEM\s0 to \s-1DER\s0 format: +.PP +.Vb 1 +\& openssl ec \-in key.pem \-outform DER \-out keyout.der +.Ve +.PP +To print out the components of a private key to standard output: +.PP +.Vb 1 +\& openssl ec \-in key.pem \-text \-noout +.Ve +.PP +To just output the public part of a private key: +.PP +.Vb 1 +\& openssl ec \-in key.pem \-pubout \-out pubkey.pem +.Ve +.PP +To change the parameters encoding to \fBexplicit\fR: +.PP +.Vb 1 +\& openssl ec \-in key.pem \-param_enc explicit \-out keyout.pem +.Ve +.PP +To change the point conversion form to \fBcompressed\fR: +.PP +.Vb 1 +\& openssl ec \-in key.pem \-conv_form compressed \-out keyout.pem +.Ve +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBecparam\fR\|(1), \fBdsa\fR\|(1), \fBrsa\fR\|(1) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2003\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/ecparam.1 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/ecparam.1 new file mode 100644 index 00000000..16376947 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/ecparam.1 @@ -0,0 +1,312 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "ECPARAM 1" +.TH ECPARAM 1 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +openssl\-ecparam, ecparam \- EC parameter manipulation and generation +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +\&\fBopenssl ecparam\fR +[\fB\-help\fR] +[\fB\-inform DER|PEM\fR] +[\fB\-outform DER|PEM\fR] +[\fB\-in filename\fR] +[\fB\-out filename\fR] +[\fB\-noout\fR] +[\fB\-text\fR] +[\fB\-C\fR] +[\fB\-check\fR] +[\fB\-name arg\fR] +[\fB\-list_curves\fR] +[\fB\-conv_form arg\fR] +[\fB\-param_enc arg\fR] +[\fB\-no_seed\fR] +[\fB\-rand file...\fR] +[\fB\-writerand file\fR] +[\fB\-genkey\fR] +[\fB\-engine id\fR] +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +This command is used to manipulate or generate \s-1EC\s0 parameter files. +.SH "OPTIONS" +.IX Header "OPTIONS" +.IP "\fB\-help\fR" 4 +.IX Item "-help" +Print out a usage message. +.IP "\fB\-inform DER|PEM\fR" 4 +.IX Item "-inform DER|PEM" +This specifies the input format. The \fB\s-1DER\s0\fR option uses an \s-1ASN.1 DER\s0 encoded +form compatible with \s-1RFC 3279\s0 EcpkParameters. The \s-1PEM\s0 form is the default +format: it consists of the \fB\s-1DER\s0\fR format base64 encoded with additional +header and footer lines. +.IP "\fB\-outform DER|PEM\fR" 4 +.IX Item "-outform DER|PEM" +This specifies the output format, the options have the same meaning and default +as the \fB\-inform\fR option. +.IP "\fB\-in filename\fR" 4 +.IX Item "-in filename" +This specifies the input filename to read parameters from or standard input if +this option is not specified. +.IP "\fB\-out filename\fR" 4 +.IX Item "-out filename" +This specifies the output filename parameters to. Standard output is used +if this option is not present. The output filename should \fBnot\fR be the same +as the input filename. +.IP "\fB\-noout\fR" 4 +.IX Item "-noout" +This option inhibits the output of the encoded version of the parameters. +.IP "\fB\-text\fR" 4 +.IX Item "-text" +This option prints out the \s-1EC\s0 parameters in human readable form. +.IP "\fB\-C\fR" 4 +.IX Item "-C" +This option converts the \s-1EC\s0 parameters into C code. The parameters can then +be loaded by calling the \fBget_ec_group_XXX()\fR function. +.IP "\fB\-check\fR" 4 +.IX Item "-check" +Validate the elliptic curve parameters. +.IP "\fB\-name arg\fR" 4 +.IX Item "-name arg" +Use the \s-1EC\s0 parameters with the specified 'short' name. Use \fB\-list_curves\fR +to get a list of all currently implemented \s-1EC\s0 parameters. +.IP "\fB\-list_curves\fR" 4 +.IX Item "-list_curves" +If this options is specified \fBecparam\fR will print out a list of all +currently implemented \s-1EC\s0 parameters names and exit. +.IP "\fB\-conv_form\fR" 4 +.IX Item "-conv_form" +This specifies how the points on the elliptic curve are converted +into octet strings. Possible values are: \fBcompressed\fR, \fBuncompressed\fR (the +default value) and \fBhybrid\fR. For more information regarding +the point conversion forms please read the X9.62 standard. +\&\fBNote\fR Due to patent issues the \fBcompressed\fR option is disabled +by default for binary curves and can be enabled by defining +the preprocessor macro \fB\s-1OPENSSL_EC_BIN_PT_COMP\s0\fR at compile time. +.IP "\fB\-param_enc arg\fR" 4 +.IX Item "-param_enc arg" +This specifies how the elliptic curve parameters are encoded. +Possible value are: \fBnamed_curve\fR, i.e. the ec parameters are +specified by an \s-1OID,\s0 or \fBexplicit\fR where the ec parameters are +explicitly given (see \s-1RFC 3279\s0 for the definition of the +\&\s-1EC\s0 parameters structures). The default value is \fBnamed_curve\fR. +\&\fBNote\fR the \fBimplicitlyCA\fR alternative, as specified in \s-1RFC 3279,\s0 +is currently not implemented in OpenSSL. +.IP "\fB\-no_seed\fR" 4 +.IX Item "-no_seed" +This option inhibits that the 'seed' for the parameter generation +is included in the ECParameters structure (see \s-1RFC 3279\s0). +.IP "\fB\-genkey\fR" 4 +.IX Item "-genkey" +This option will generate an \s-1EC\s0 private key using the specified parameters. +.IP "\fB\-rand file...\fR" 4 +.IX Item "-rand file..." +A file or files containing random data used to seed the random number +generator. +Multiple files can be specified separated by an OS-dependent character. +The separator is \fB;\fR for MS-Windows, \fB,\fR for OpenVMS, and \fB:\fR for +all others. +.IP "[\fB\-writerand file\fR]" 4 +.IX Item "[-writerand file]" +Writes random data to the specified \fIfile\fR upon exit. +This can be used with a subsequent \fB\-rand\fR flag. +.IP "\fB\-engine id\fR" 4 +.IX Item "-engine id" +Specifying an engine (by its unique \fBid\fR string) will cause \fBecparam\fR +to attempt to obtain a functional reference to the specified engine, +thus initialising it if needed. The engine will then be set as the default +for all available algorithms. +.SH "NOTES" +.IX Header "NOTES" +\&\s-1PEM\s0 format \s-1EC\s0 parameters use the header and footer lines: +.PP +.Vb 2 +\& \-\-\-\-\-BEGIN EC PARAMETERS\-\-\-\-\- +\& \-\-\-\-\-END EC PARAMETERS\-\-\-\-\- +.Ve +.PP +OpenSSL is currently not able to generate new groups and therefore +\&\fBecparam\fR can only create \s-1EC\s0 parameters from known (named) curves. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +To create \s-1EC\s0 parameters with the group 'prime192v1': +.PP +.Vb 1 +\& openssl ecparam \-out ec_param.pem \-name prime192v1 +.Ve +.PP +To create \s-1EC\s0 parameters with explicit parameters: +.PP +.Vb 1 +\& openssl ecparam \-out ec_param.pem \-name prime192v1 \-param_enc explicit +.Ve +.PP +To validate given \s-1EC\s0 parameters: +.PP +.Vb 1 +\& openssl ecparam \-in ec_param.pem \-check +.Ve +.PP +To create \s-1EC\s0 parameters and a private key: +.PP +.Vb 1 +\& openssl ecparam \-out ec_key.pem \-name prime192v1 \-genkey +.Ve +.PP +To change the point encoding to 'compressed': +.PP +.Vb 1 +\& openssl ecparam \-in ec_in.pem \-out ec_out.pem \-conv_form compressed +.Ve +.PP +To print out the \s-1EC\s0 parameters to standard output: +.PP +.Vb 1 +\& openssl ecparam \-in ec_param.pem \-noout \-text +.Ve +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBec\fR\|(1), \fBdsaparam\fR\|(1) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2003\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/enc.1 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/enc.1 new file mode 100644 index 00000000..84c53541 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/enc.1 @@ -0,0 +1,543 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "ENC 1" +.TH ENC 1 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +openssl\-enc, enc \- symmetric cipher routines +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +\&\fBopenssl enc \-\f(BIcipher\fB\fR +[\fB\-help\fR] +[\fB\-list\fR] +[\fB\-ciphers\fR] +[\fB\-in filename\fR] +[\fB\-out filename\fR] +[\fB\-pass arg\fR] +[\fB\-e\fR] +[\fB\-d\fR] +[\fB\-a\fR] +[\fB\-base64\fR] +[\fB\-A\fR] +[\fB\-k password\fR] +[\fB\-kfile filename\fR] +[\fB\-K key\fR] +[\fB\-iv \s-1IV\s0\fR] +[\fB\-S salt\fR] +[\fB\-salt\fR] +[\fB\-nosalt\fR] +[\fB\-z\fR] +[\fB\-md digest\fR] +[\fB\-iter count\fR] +[\fB\-pbkdf2\fR] +[\fB\-p\fR] +[\fB\-P\fR] +[\fB\-bufsize number\fR] +[\fB\-nopad\fR] +[\fB\-debug\fR] +[\fB\-none\fR] +[\fB\-rand file...\fR] +[\fB\-writerand file\fR] +[\fB\-engine id\fR] +.PP +\&\fBopenssl\fR \fI[cipher]\fR [\fB...\fR] +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The symmetric cipher commands allow data to be encrypted or decrypted +using various block and stream ciphers using keys based on passwords +or explicitly provided. Base64 encoding or decoding can also be performed +either by itself or in addition to the encryption or decryption. +.SH "OPTIONS" +.IX Header "OPTIONS" +.IP "\fB\-help\fR" 4 +.IX Item "-help" +Print out a usage message. +.IP "\fB\-list\fR" 4 +.IX Item "-list" +List all supported ciphers. +.IP "\fB\-ciphers\fR" 4 +.IX Item "-ciphers" +Alias of \-list to display all supported ciphers. +.IP "\fB\-in filename\fR" 4 +.IX Item "-in filename" +The input filename, standard input by default. +.IP "\fB\-out filename\fR" 4 +.IX Item "-out filename" +The output filename, standard output by default. +.IP "\fB\-pass arg\fR" 4 +.IX Item "-pass arg" +The password source. For more information about the format of \fBarg\fR +see the \fB\s-1PASS PHRASE ARGUMENTS\s0\fR section in \fBopenssl\fR\|(1). +.IP "\fB\-e\fR" 4 +.IX Item "-e" +Encrypt the input data: this is the default. +.IP "\fB\-d\fR" 4 +.IX Item "-d" +Decrypt the input data. +.IP "\fB\-a\fR" 4 +.IX Item "-a" +Base64 process the data. This means that if encryption is taking place +the data is base64 encoded after encryption. If decryption is set then +the input data is base64 decoded before being decrypted. +.IP "\fB\-base64\fR" 4 +.IX Item "-base64" +Same as \fB\-a\fR +.IP "\fB\-A\fR" 4 +.IX Item "-A" +If the \fB\-a\fR option is set then base64 process the data on one line. +.IP "\fB\-k password\fR" 4 +.IX Item "-k password" +The password to derive the key from. This is for compatibility with previous +versions of OpenSSL. Superseded by the \fB\-pass\fR argument. +.IP "\fB\-kfile filename\fR" 4 +.IX Item "-kfile filename" +Read the password to derive the key from the first line of \fBfilename\fR. +This is for compatibility with previous versions of OpenSSL. Superseded by +the \fB\-pass\fR argument. +.IP "\fB\-md digest\fR" 4 +.IX Item "-md digest" +Use the specified digest to create the key from the passphrase. +The default algorithm is sha\-256. +.IP "\fB\-iter count\fR" 4 +.IX Item "-iter count" +Use a given number of iterations on the password in deriving the encryption key. +High values increase the time required to brute-force the resulting file. +This option enables the use of \s-1PBKDF2\s0 algorithm to derive the key. +.IP "\fB\-pbkdf2\fR" 4 +.IX Item "-pbkdf2" +Use \s-1PBKDF2\s0 algorithm with default iteration count unless otherwise specified. +.IP "\fB\-nosalt\fR" 4 +.IX Item "-nosalt" +Don't use a salt in the key derivation routines. This option \fB\s-1SHOULD NOT\s0\fR be +used except for test purposes or compatibility with ancient versions of +OpenSSL. +.IP "\fB\-salt\fR" 4 +.IX Item "-salt" +Use salt (randomly generated or provide with \fB\-S\fR option) when +encrypting, this is the default. +.IP "\fB\-S salt\fR" 4 +.IX Item "-S salt" +The actual salt to use: this must be represented as a string of hex digits. +.IP "\fB\-K key\fR" 4 +.IX Item "-K key" +The actual key to use: this must be represented as a string comprised only +of hex digits. If only the key is specified, the \s-1IV\s0 must additionally specified +using the \fB\-iv\fR option. When both a key and a password are specified, the +key given with the \fB\-K\fR option will be used and the \s-1IV\s0 generated from the +password will be taken. It does not make much sense to specify both key +and password. +.IP "\fB\-iv \s-1IV\s0\fR" 4 +.IX Item "-iv IV" +The actual \s-1IV\s0 to use: this must be represented as a string comprised only +of hex digits. When only the key is specified using the \fB\-K\fR option, the +\&\s-1IV\s0 must explicitly be defined. When a password is being specified using +one of the other options, the \s-1IV\s0 is generated from this password. +.IP "\fB\-p\fR" 4 +.IX Item "-p" +Print out the key and \s-1IV\s0 used. +.IP "\fB\-P\fR" 4 +.IX Item "-P" +Print out the key and \s-1IV\s0 used then immediately exit: don't do any encryption +or decryption. +.IP "\fB\-bufsize number\fR" 4 +.IX Item "-bufsize number" +Set the buffer size for I/O. +.IP "\fB\-nopad\fR" 4 +.IX Item "-nopad" +Disable standard block padding. +.IP "\fB\-debug\fR" 4 +.IX Item "-debug" +Debug the BIOs used for I/O. +.IP "\fB\-z\fR" 4 +.IX Item "-z" +Compress or decompress clear text using zlib before encryption or after +decryption. This option exists only if OpenSSL with compiled with zlib +or zlib-dynamic option. +.IP "\fB\-none\fR" 4 +.IX Item "-none" +Use \s-1NULL\s0 cipher (no encryption or decryption of input). +.IP "\fB\-rand file...\fR" 4 +.IX Item "-rand file..." +A file or files containing random data used to seed the random number +generator. +Multiple files can be specified separated by an OS-dependent character. +The separator is \fB;\fR for MS-Windows, \fB,\fR for OpenVMS, and \fB:\fR for +all others. +.IP "[\fB\-writerand file\fR]" 4 +.IX Item "[-writerand file]" +Writes random data to the specified \fIfile\fR upon exit. +This can be used with a subsequent \fB\-rand\fR flag. +.SH "NOTES" +.IX Header "NOTES" +The program can be called either as \fBopenssl cipher\fR or +\&\fBopenssl enc \-cipher\fR. The first form doesn't work with +engine-provided ciphers, because this form is processed before the +configuration file is read and any ENGINEs loaded. +Use the \fBlist\fR command to get a list of supported ciphers. +.PP +Engines which provide entirely new encryption algorithms (such as the ccgost +engine which provides gost89 algorithm) should be configured in the +configuration file. Engines specified on the command line using \-engine +options can only be used for hardware-assisted implementations of +ciphers which are supported by the OpenSSL core or another engine specified +in the configuration file. +.PP +When the enc command lists supported ciphers, ciphers provided by engines, +specified in the configuration files are listed too. +.PP +A password will be prompted for to derive the key and \s-1IV\s0 if necessary. +.PP +The \fB\-salt\fR option should \fB\s-1ALWAYS\s0\fR be used if the key is being derived +from a password unless you want compatibility with previous versions of +OpenSSL. +.PP +Without the \fB\-salt\fR option it is possible to perform efficient dictionary +attacks on the password and to attack stream cipher encrypted data. The reason +for this is that without the salt the same password always generates the same +encryption key. When the salt is being used the first eight bytes of the +encrypted data are reserved for the salt: it is generated at random when +encrypting a file and read from the encrypted file when it is decrypted. +.PP +Some of the ciphers do not have large keys and others have security +implications if not used correctly. A beginner is advised to just use +a strong block cipher, such as \s-1AES,\s0 in \s-1CBC\s0 mode. +.PP +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 +is better than 1 in 256 it isn't a very good test. +.PP +If padding is disabled then the input data must be a multiple of the cipher +block length. +.PP +All \s-1RC2\s0 ciphers have the same key and effective key length. +.PP +Blowfish and \s-1RC5\s0 algorithms use a 128 bit key. +.SH "SUPPORTED CIPHERS" +.IX Header "SUPPORTED CIPHERS" +Note that some of these ciphers can be disabled at compile time +and some are available only if an appropriate engine is configured +in the configuration file. The output of the \fBenc\fR command run with +the \fB\-ciphers\fR option (that is \fBopenssl enc \-ciphers\fR) produces a +list of ciphers, supported by your version of OpenSSL, including +ones provided by configured engines. +.PP +The \fBenc\fR program does not support authenticated encryption modes +like \s-1CCM\s0 and \s-1GCM,\s0 and will not support such modes in the future. +The \fBenc\fR interface by necessity must begin streaming output (e.g., +to standard output when \fB\-out\fR is not used) before the authentication +tag could be validated, leading to the usage of \fBenc\fR in pipelines +that begin processing untrusted data and are not capable of rolling +back upon authentication failure. The \s-1AEAD\s0 modes currently in common +use also suffer from catastrophic failure of confidentiality and/or +integrity upon reuse of key/iv/nonce, and since \fBenc\fR places the +entire burden of key/iv/nonce management upon the user, the risk of +exposing \s-1AEAD\s0 modes is too great to allow. These key/iv/nonce +management issues also affect other modes currently exposed in \fBenc\fR, +but the failure modes are less extreme in these cases, and the +functionality cannot be removed with a stable release branch. +For bulk encryption of data, whether using authenticated encryption +modes or other modes, \fBcms\fR\|(1) is recommended, as it provides a +standard data format and performs the needed key/iv/nonce management. +.PP +.Vb 1 +\& base64 Base 64 +\& +\& bf\-cbc Blowfish in CBC mode +\& bf Alias for bf\-cbc +\& blowfish Alias for bf\-cbc +\& bf\-cfb Blowfish in CFB mode +\& bf\-ecb Blowfish in ECB mode +\& bf\-ofb Blowfish in OFB mode +\& +\& cast\-cbc CAST in CBC mode +\& cast Alias for cast\-cbc +\& cast5\-cbc CAST5 in CBC mode +\& cast5\-cfb CAST5 in CFB mode +\& cast5\-ecb CAST5 in ECB mode +\& cast5\-ofb CAST5 in OFB mode +\& +\& chacha20 ChaCha20 algorithm +\& +\& des\-cbc DES in CBC mode +\& des Alias for des\-cbc +\& des\-cfb DES in CFB mode +\& des\-ofb DES in OFB mode +\& des\-ecb DES in ECB mode +\& +\& des\-ede\-cbc Two key triple DES EDE in CBC mode +\& des\-ede Two key triple DES EDE in ECB mode +\& des\-ede\-cfb Two key triple DES EDE in CFB mode +\& des\-ede\-ofb Two key triple DES EDE in OFB mode +\& +\& des\-ede3\-cbc Three key triple DES EDE in CBC mode +\& des\-ede3 Three key triple DES EDE in ECB mode +\& des3 Alias for des\-ede3\-cbc +\& des\-ede3\-cfb Three key triple DES EDE CFB mode +\& des\-ede3\-ofb Three key triple DES EDE in OFB mode +\& +\& desx DESX algorithm. +\& +\& gost89 GOST 28147\-89 in CFB mode (provided by ccgost engine) +\& gost89\-cnt \`GOST 28147\-89 in CNT mode (provided by ccgost engine) +\& +\& idea\-cbc IDEA algorithm in CBC mode +\& idea same as idea\-cbc +\& idea\-cfb IDEA in CFB mode +\& idea\-ecb IDEA in ECB mode +\& idea\-ofb IDEA in OFB mode +\& +\& rc2\-cbc 128 bit RC2 in CBC mode +\& rc2 Alias for rc2\-cbc +\& rc2\-cfb 128 bit RC2 in CFB mode +\& rc2\-ecb 128 bit RC2 in ECB mode +\& rc2\-ofb 128 bit RC2 in OFB mode +\& rc2\-64\-cbc 64 bit RC2 in CBC mode +\& rc2\-40\-cbc 40 bit RC2 in CBC mode +\& +\& rc4 128 bit RC4 +\& rc4\-64 64 bit RC4 +\& rc4\-40 40 bit RC4 +\& +\& rc5\-cbc RC5 cipher in CBC mode +\& rc5 Alias for rc5\-cbc +\& rc5\-cfb RC5 cipher in CFB mode +\& rc5\-ecb RC5 cipher in ECB mode +\& rc5\-ofb RC5 cipher in OFB mode +\& +\& seed\-cbc SEED cipher in CBC mode +\& seed Alias for seed\-cbc +\& seed\-cfb SEED cipher in CFB mode +\& seed\-ecb SEED cipher in ECB mode +\& seed\-ofb SEED cipher in OFB mode +\& +\& sm4\-cbc SM4 cipher in CBC mode +\& sm4 Alias for sm4\-cbc +\& sm4\-cfb SM4 cipher in CFB mode +\& sm4\-ctr SM4 cipher in CTR mode +\& sm4\-ecb SM4 cipher in ECB mode +\& sm4\-ofb SM4 cipher in OFB mode +\& +\& aes\-[128|192|256]\-cbc 128/192/256 bit AES in CBC mode +\& aes[128|192|256] Alias for aes\-[128|192|256]\-cbc +\& aes\-[128|192|256]\-cfb 128/192/256 bit AES in 128 bit CFB mode +\& aes\-[128|192|256]\-cfb1 128/192/256 bit AES in 1 bit CFB mode +\& aes\-[128|192|256]\-cfb8 128/192/256 bit AES in 8 bit CFB mode +\& aes\-[128|192|256]\-ctr 128/192/256 bit AES in CTR mode +\& aes\-[128|192|256]\-ecb 128/192/256 bit AES in ECB mode +\& aes\-[128|192|256]\-ofb 128/192/256 bit AES in OFB mode +\& +\& aria\-[128|192|256]\-cbc 128/192/256 bit ARIA in CBC mode +\& aria[128|192|256] Alias for aria\-[128|192|256]\-cbc +\& aria\-[128|192|256]\-cfb 128/192/256 bit ARIA in 128 bit CFB mode +\& aria\-[128|192|256]\-cfb1 128/192/256 bit ARIA in 1 bit CFB mode +\& aria\-[128|192|256]\-cfb8 128/192/256 bit ARIA in 8 bit CFB mode +\& aria\-[128|192|256]\-ctr 128/192/256 bit ARIA in CTR mode +\& aria\-[128|192|256]\-ecb 128/192/256 bit ARIA in ECB mode +\& aria\-[128|192|256]\-ofb 128/192/256 bit ARIA in OFB mode +\& +\& camellia\-[128|192|256]\-cbc 128/192/256 bit Camellia in CBC mode +\& camellia[128|192|256] Alias for camellia\-[128|192|256]\-cbc +\& camellia\-[128|192|256]\-cfb 128/192/256 bit Camellia in 128 bit CFB mode +\& camellia\-[128|192|256]\-cfb1 128/192/256 bit Camellia in 1 bit CFB mode +\& camellia\-[128|192|256]\-cfb8 128/192/256 bit Camellia in 8 bit CFB mode +\& camellia\-[128|192|256]\-ctr 128/192/256 bit Camellia in CTR mode +\& camellia\-[128|192|256]\-ecb 128/192/256 bit Camellia in ECB mode +\& camellia\-[128|192|256]\-ofb 128/192/256 bit Camellia in OFB mode +.Ve +.SH "EXAMPLES" +.IX Header "EXAMPLES" +Just base64 encode a binary file: +.PP +.Vb 1 +\& openssl base64 \-in file.bin \-out file.b64 +.Ve +.PP +Decode the same file +.PP +.Vb 1 +\& openssl base64 \-d \-in file.b64 \-out file.bin +.Ve +.PP +Encrypt a file using \s-1AES\-128\s0 using a prompted password +and \s-1PBKDF2\s0 key derivation: +.PP +.Vb 1 +\& openssl enc \-aes128 \-pbkdf2 \-in file.txt \-out file.aes128 +.Ve +.PP +Decrypt a file using a supplied password: +.PP +.Vb 2 +\& openssl enc \-aes128 \-pbkdf2 \-d \-in file.aes128 \-out file.txt \e +\& \-pass pass: +.Ve +.PP +Encrypt a file then base64 encode it (so it can be sent via mail for example) +using \s-1AES\-256\s0 in \s-1CTR\s0 mode and \s-1PBKDF2\s0 key derivation: +.PP +.Vb 1 +\& openssl enc \-aes\-256\-ctr \-pbkdf2 \-a \-in file.txt \-out file.aes256 +.Ve +.PP +Base64 decode a file then decrypt it using a password supplied in a file: +.PP +.Vb 2 +\& openssl enc \-aes\-256\-ctr \-pbkdf2 \-d \-a \-in file.aes256 \-out file.txt \e +\& \-pass file: +.Ve +.SH "BUGS" +.IX Header "BUGS" +The \fB\-A\fR option when used with large files doesn't work properly. +.PP +The \fBenc\fR program only supports a fixed number of algorithms with +certain parameters. So if, for example, you want to use \s-1RC2\s0 with a +76 bit key or \s-1RC4\s0 with an 84 bit key you can't use this program. +.SH "HISTORY" +.IX Header "HISTORY" +The default digest was changed from \s-1MD5\s0 to \s-1SHA256\s0 in OpenSSL 1.1.0. +.PP +The \fB\-list\fR option was added in OpenSSL 1.1.1e. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/engine.1 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/engine.1 new file mode 100644 index 00000000..7bbabdaf --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/engine.1 @@ -0,0 +1,240 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "ENGINE 1" +.TH ENGINE 1 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +openssl\-engine, engine \- load and query engines +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +\&\fBopenssl engine\fR +[ \fIengine...\fR ] +[\fB\-v\fR] +[\fB\-vv\fR] +[\fB\-vvv\fR] +[\fB\-vvv\fR] +[\fB\-vvv\fR] +[\fB\-c\fR] +[\fB\-t\fR] +[\fB\-tt\fR] +[\fB\-pre\fR \fIcommand\fR] +[\fB\-post\fR \fIcommand\fR] +[ \fIengine...\fR ] +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fBengine\fR command is used to query the status and capabilities +of the specified \fBengine\fR's. +Engines may be specified before and after all other command-line flags. +Only those specified are queried. +.SH "OPTIONS" +.IX Header "OPTIONS" +.IP "\fB\-v\fR \fB\-vv\fR \fB\-vvv\fR \fB\-vvvv\fR" 4 +.IX Item "-v -vv -vvv -vvvv" +Provides information about each specified engine. The first flag lists +all the possible run-time control commands; the second adds a +description of each command; the third adds the input flags, and the +final option adds the internal input flags. +.IP "\fB\-c\fR" 4 +.IX Item "-c" +Lists the capabilities of each engine. +.IP "\fB\-t\fR" 4 +.IX Item "-t" +Tests if each specified engine is available, and displays the answer. +.IP "\fB\-tt\fR" 4 +.IX Item "-tt" +Displays an error trace for any unavailable engine. +.IP "\fB\-pre\fR \fIcommand\fR" 4 +.IX Item "-pre command" +.PD 0 +.IP "\fB\-post\fR \fIcommand\fR" 4 +.IX Item "-post command" +.PD +Command-line configuration of engines. +The \fB\-pre\fR command is given to the engine before it is loaded and +the \fB\-post\fR command is given after the engine is loaded. +The \fIcommand\fR is of the form \fIcmd:val\fR where \fIcmd\fR is the command, +and \fIval\fR is the value for the command. +See the example below. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +To list all the commands available to a dynamic engine: +.PP +.Vb 10 +\& $ openssl engine \-t \-tt \-vvvv dynamic +\& (dynamic) Dynamic engine loading support +\& [ unavailable ] +\& SO_PATH: Specifies the path to the new ENGINE shared library +\& (input flags): STRING +\& NO_VCHECK: Specifies to continue even if version checking fails (boolean) +\& (input flags): NUMERIC +\& ID: Specifies an ENGINE id name for loading +\& (input flags): STRING +\& LIST_ADD: Whether to add a loaded ENGINE to the internal list (0=no,1=yes,2=mandatory) +\& (input flags): NUMERIC +\& DIR_LOAD: Specifies whether to load from \*(AqDIR_ADD\*(Aq directories (0=no,1=yes,2=mandatory) +\& (input flags): NUMERIC +\& DIR_ADD: Adds a directory from which ENGINEs can be loaded +\& (input flags): STRING +\& LOAD: Load up the ENGINE specified by other settings +\& (input flags): NO_INPUT +.Ve +.PP +To list the capabilities of the \fIrsax\fR engine: +.PP +.Vb 4 +\& $ openssl engine \-c +\& (rsax) RSAX engine support +\& [RSA] +\& (dynamic) Dynamic engine loading support +.Ve +.SH "ENVIRONMENT" +.IX Header "ENVIRONMENT" +.IP "\fB\s-1OPENSSL_ENGINES\s0\fR" 4 +.IX Item "OPENSSL_ENGINES" +The path to the engines directory. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBconfig\fR\|(5) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2016\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/errstr.1 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/errstr.1 new file mode 100644 index 00000000..d677ab0b --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/errstr.1 @@ -0,0 +1,181 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "ERRSTR 1" +.TH ERRSTR 1 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +openssl\-errstr, errstr \- lookup error codes +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +\&\fBopenssl errstr error_code\fR +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +Sometimes an application will not load error message and only +numerical forms will be available. The \fBerrstr\fR utility can be used to +display the meaning of the hex code. The hex code is the hex digits after the +second colon. +.SH "OPTIONS" +.IX Header "OPTIONS" +None. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +The error code: +.PP +.Vb 1 +\& 27594:error:2006D080:lib(32):func(109):reason(128):bss_file.c:107: +.Ve +.PP +can be displayed with: +.PP +.Vb 1 +\& openssl errstr 2006D080 +.Ve +.PP +to produce the error message: +.PP +.Vb 1 +\& error:2006D080:BIO routines:BIO_new_file:no such file +.Ve +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2004\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/gendsa.1 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/gendsa.1 new file mode 100644 index 00000000..8a2bdee5 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/gendsa.1 @@ -0,0 +1,219 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "GENDSA 1" +.TH GENDSA 1 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +openssl\-gendsa, gendsa \- generate a DSA private key from a set of parameters +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +\&\fBopenssl\fR \fBgendsa\fR +[\fB\-help\fR] +[\fB\-out filename\fR] +[\fB\-aes128\fR] +[\fB\-aes192\fR] +[\fB\-aes256\fR] +[\fB\-aria128\fR] +[\fB\-aria192\fR] +[\fB\-aria256\fR] +[\fB\-camellia128\fR] +[\fB\-camellia192\fR] +[\fB\-camellia256\fR] +[\fB\-des\fR] +[\fB\-des3\fR] +[\fB\-idea\fR] +[\fB\-rand file...\fR] +[\fB\-writerand file\fR] +[\fB\-engine id\fR] +[\fBparamfile\fR] +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fBgendsa\fR command generates a \s-1DSA\s0 private key from a \s-1DSA\s0 parameter file +(which will be typically generated by the \fBopenssl dsaparam\fR command). +.SH "OPTIONS" +.IX Header "OPTIONS" +.IP "\fB\-help\fR" 4 +.IX Item "-help" +Print out a usage message. +.IP "\fB\-out filename\fR" 4 +.IX Item "-out filename" +Output the key to the specified file. If this argument is not specified then +standard output is used. +.IP "\fB\-aes128\fR, \fB\-aes192\fR, \fB\-aes256\fR, \fB\-aria128\fR, \fB\-aria192\fR, \fB\-aria256\fR, \fB\-camellia128\fR, \fB\-camellia192\fR, \fB\-camellia256\fR, \fB\-des\fR, \fB\-des3\fR, \fB\-idea\fR" 4 +.IX Item "-aes128, -aes192, -aes256, -aria128, -aria192, -aria256, -camellia128, -camellia192, -camellia256, -des, -des3, -idea" +These options encrypt the private key with specified +cipher before outputting it. A pass phrase is prompted for. +If none of these options is specified no encryption is used. +.IP "\fB\-rand file...\fR" 4 +.IX Item "-rand file..." +A file or files containing random data used to seed the random number +generator. +Multiple files can be specified separated by an OS-dependent character. +The separator is \fB;\fR for MS-Windows, \fB,\fR for OpenVMS, and \fB:\fR for +all others. +.IP "[\fB\-writerand file\fR]" 4 +.IX Item "[-writerand file]" +Writes random data to the specified \fIfile\fR upon exit. +This can be used with a subsequent \fB\-rand\fR flag. +.IP "\fB\-engine id\fR" 4 +.IX Item "-engine id" +Specifying an engine (by its unique \fBid\fR string) will cause \fBgendsa\fR +to attempt to obtain a functional reference to the specified engine, +thus initialising it if needed. The engine will then be set as the default +for all available algorithms. +.IP "\fBparamfile\fR" 4 +.IX Item "paramfile" +This option specifies the \s-1DSA\s0 parameter file to use. The parameters in this +file determine the size of the private key. \s-1DSA\s0 parameters can be generated +and examined using the \fBopenssl dsaparam\fR command. +.SH "NOTES" +.IX Header "NOTES" +\&\s-1DSA\s0 key generation is little more than random number generation so it is +much quicker that \s-1RSA\s0 key generation for example. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBdsaparam\fR\|(1), \fBdsa\fR\|(1), \fBgenrsa\fR\|(1), +\&\fBrsa\fR\|(1) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/genpkey.1 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/genpkey.1 new file mode 100644 index 00000000..3d43f587 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/genpkey.1 @@ -0,0 +1,434 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "GENPKEY 1" +.TH GENPKEY 1 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +openssl\-genpkey, genpkey \- generate a private key +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +\&\fBopenssl\fR \fBgenpkey\fR +[\fB\-help\fR] +[\fB\-out filename\fR] +[\fB\-outform PEM|DER\fR] +[\fB\-pass arg\fR] +[\fB\-\f(BIcipher\fB\fR] +[\fB\-engine id\fR] +[\fB\-paramfile file\fR] +[\fB\-algorithm alg\fR] +[\fB\-pkeyopt opt:value\fR] +[\fB\-genparam\fR] +[\fB\-text\fR] +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fBgenpkey\fR command generates a private key. +.SH "OPTIONS" +.IX Header "OPTIONS" +.IP "\fB\-help\fR" 4 +.IX Item "-help" +Print out a usage message. +.IP "\fB\-out filename\fR" 4 +.IX Item "-out filename" +Output the key to the specified file. If this argument is not specified then +standard output is used. +.IP "\fB\-outform DER|PEM\fR" 4 +.IX Item "-outform DER|PEM" +This specifies the output format \s-1DER\s0 or \s-1PEM.\s0 The default format is \s-1PEM.\s0 +.IP "\fB\-pass arg\fR" 4 +.IX Item "-pass arg" +The output file password source. For more information about the format of \fBarg\fR +see the \fB\s-1PASS PHRASE ARGUMENTS\s0\fR section in \fBopenssl\fR\|(1). +.IP "\fB\-\f(BIcipher\fB\fR" 4 +.IX Item "-cipher" +This option encrypts the private key with the supplied cipher. Any algorithm +name accepted by \fBEVP_get_cipherbyname()\fR is acceptable such as \fBdes3\fR. +.IP "\fB\-engine id\fR" 4 +.IX Item "-engine id" +Specifying an engine (by its unique \fBid\fR string) will cause \fBgenpkey\fR +to attempt to obtain a functional reference to the specified engine, +thus initialising it if needed. The engine will then be set as the default +for all available algorithms. If used this option should precede all other +options. +.IP "\fB\-algorithm alg\fR" 4 +.IX Item "-algorithm alg" +Public key algorithm to use such as \s-1RSA, DSA\s0 or \s-1DH.\s0 If used this option must +precede any \fB\-pkeyopt\fR options. The options \fB\-paramfile\fR and \fB\-algorithm\fR +are mutually exclusive. Engines may add algorithms in addition to the standard +built-in ones. +.Sp +Valid built-in algorithm names for private key generation are \s-1RSA,\s0 RSA-PSS, \s-1EC, +X25519, X448, ED25519\s0 and \s-1ED448.\s0 +.Sp +Valid built-in algorithm names for parameter generation (see the \fB\-genparam\fR +option) are \s-1DH, DSA\s0 and \s-1EC.\s0 +.Sp +Note that the algorithm name X9.42 \s-1DH\s0 may be used as a synonym for the \s-1DH\s0 +algorithm. These are identical and do not indicate the type of parameters that +will be generated. Use the \fBdh_paramgen_type\fR option to indicate whether PKCS#3 +or X9.42 \s-1DH\s0 parameters are required. See \*(L"\s-1DH\s0 Parameter Generation Options\*(R" +below for more details. +.IP "\fB\-pkeyopt opt:value\fR" 4 +.IX Item "-pkeyopt opt:value" +Set the public key algorithm option \fBopt\fR to \fBvalue\fR. The precise set of +options supported depends on the public key algorithm used and its +implementation. See \*(L"\s-1KEY GENERATION OPTIONS\*(R"\s0 and +\&\*(L"\s-1PARAMETER GENERATION OPTIONS\*(R"\s0 below for more details. +.IP "\fB\-genparam\fR" 4 +.IX Item "-genparam" +Generate a set of parameters instead of a private key. If used this option must +precede any \fB\-algorithm\fR, \fB\-paramfile\fR or \fB\-pkeyopt\fR options. +.IP "\fB\-paramfile filename\fR" 4 +.IX Item "-paramfile filename" +Some public key algorithms generate a private key based on a set of parameters. +They can be supplied using this option. If this option is used the public key +algorithm used is determined by the parameters. If used this option must +precede any \fB\-pkeyopt\fR options. The options \fB\-paramfile\fR and \fB\-algorithm\fR +are mutually exclusive. +.IP "\fB\-text\fR" 4 +.IX Item "-text" +Print an (unencrypted) text representation of private and public keys and +parameters along with the \s-1PEM\s0 or \s-1DER\s0 structure. +.SH "KEY GENERATION OPTIONS" +.IX Header "KEY GENERATION OPTIONS" +The options supported by each algorithm and indeed each implementation of an +algorithm can vary. The options for the OpenSSL implementations are detailed +below. There are no key generation options defined for the X25519, X448, \s-1ED25519\s0 +or \s-1ED448\s0 algorithms. +.SS "\s-1RSA\s0 Key Generation Options" +.IX Subsection "RSA Key Generation Options" +.IP "\fBrsa_keygen_bits:numbits\fR" 4 +.IX Item "rsa_keygen_bits:numbits" +The number of bits in the generated key. If not specified 2048 is used. +.IP "\fBrsa_keygen_primes:numprimes\fR" 4 +.IX Item "rsa_keygen_primes:numprimes" +The number of primes in the generated key. If not specified 2 is used. +.IP "\fBrsa_keygen_pubexp:value\fR" 4 +.IX Item "rsa_keygen_pubexp:value" +The \s-1RSA\s0 public exponent value. This can be a large decimal or +hexadecimal value if preceded by \fB0x\fR. Default value is 65537. +.SS "RSA-PSS Key Generation Options" +.IX Subsection "RSA-PSS Key Generation Options" +Note: by default an \fBRSA-PSS\fR key has no parameter restrictions. +.IP "\fBrsa_keygen_bits:numbits\fR, \fBrsa_keygen_primes:numprimes\fR, \fBrsa_keygen_pubexp:value\fR" 4 +.IX Item "rsa_keygen_bits:numbits, rsa_keygen_primes:numprimes, rsa_keygen_pubexp:value" +These options have the same meaning as the \fB\s-1RSA\s0\fR algorithm. +.IP "\fBrsa_pss_keygen_md:digest\fR" 4 +.IX Item "rsa_pss_keygen_md:digest" +If set the key is restricted and can only use \fBdigest\fR for signing. +.IP "\fBrsa_pss_keygen_mgf1_md:digest\fR" 4 +.IX Item "rsa_pss_keygen_mgf1_md:digest" +If set the key is restricted and can only use \fBdigest\fR as it's \s-1MGF1\s0 +parameter. +.IP "\fBrsa_pss_keygen_saltlen:len\fR" 4 +.IX Item "rsa_pss_keygen_saltlen:len" +If set the key is restricted and \fBlen\fR specifies the minimum salt length. +.SS "\s-1EC\s0 Key Generation Options" +.IX Subsection "EC Key Generation Options" +The \s-1EC\s0 key generation options can also be used for parameter generation. +.IP "\fBec_paramgen_curve:curve\fR" 4 +.IX Item "ec_paramgen_curve:curve" +The \s-1EC\s0 curve to use. OpenSSL supports \s-1NIST\s0 curve names such as \*(L"P\-256\*(R". +.IP "\fBec_param_enc:encoding\fR" 4 +.IX Item "ec_param_enc:encoding" +The encoding to use for parameters. The \*(L"encoding\*(R" parameter must be either +\&\*(L"named_curve\*(R" or \*(L"explicit\*(R". The default value is \*(L"named_curve\*(R". +.SH "PARAMETER GENERATION OPTIONS" +.IX Header "PARAMETER GENERATION OPTIONS" +The options supported by each algorithm and indeed each implementation of an +algorithm can vary. The options for the OpenSSL implementations are detailed +below. +.SS "\s-1DSA\s0 Parameter Generation Options" +.IX Subsection "DSA Parameter Generation Options" +.IP "\fBdsa_paramgen_bits:numbits\fR" 4 +.IX Item "dsa_paramgen_bits:numbits" +The number of bits in the generated prime. If not specified 2048 is used. +.IP "\fBdsa_paramgen_q_bits:numbits\fR" 4 +.IX Item "dsa_paramgen_q_bits:numbits" +The number of bits in the q parameter. Must be one of 160, 224 or 256. If not +specified 224 is used. +.IP "\fBdsa_paramgen_md:digest\fR" 4 +.IX Item "dsa_paramgen_md:digest" +The digest to use during parameter generation. Must be one of \fBsha1\fR, \fBsha224\fR +or \fBsha256\fR. If set, then the number of bits in \fBq\fR will match the output size +of the specified digest and the \fBdsa_paramgen_q_bits\fR parameter will be +ignored. If not set, then a digest will be used that gives an output matching +the number of bits in \fBq\fR, i.e. \fBsha1\fR if q length is 160, \fBsha224\fR if it 224 +or \fBsha256\fR if it is 256. +.SS "\s-1DH\s0 Parameter Generation Options" +.IX Subsection "DH Parameter Generation Options" +.IP "\fBdh_paramgen_prime_len:numbits\fR" 4 +.IX Item "dh_paramgen_prime_len:numbits" +The number of bits in the prime parameter \fBp\fR. The default is 2048. +.IP "\fBdh_paramgen_subprime_len:numbits\fR" 4 +.IX Item "dh_paramgen_subprime_len:numbits" +The number of bits in the sub prime parameter \fBq\fR. The default is 256 if the +prime is at least 2048 bits long or 160 otherwise. Only relevant if used in +conjunction with the \fBdh_paramgen_type\fR option to generate X9.42 \s-1DH\s0 parameters. +.IP "\fBdh_paramgen_generator:value\fR" 4 +.IX Item "dh_paramgen_generator:value" +The value to use for the generator \fBg\fR. The default is 2. +.IP "\fBdh_paramgen_type:value\fR" 4 +.IX Item "dh_paramgen_type:value" +The type of \s-1DH\s0 parameters to generate. Use 0 for PKCS#3 \s-1DH\s0 and 1 for X9.42 \s-1DH.\s0 +The default is 0. +.IP "\fBdh_rfc5114:num\fR" 4 +.IX Item "dh_rfc5114:num" +If this option is set, then the appropriate \s-1RFC5114\s0 parameters are used +instead of generating new parameters. The value \fBnum\fR can take the +values 1, 2 or 3 corresponding to \s-1RFC5114 DH\s0 parameters consisting of +1024 bit group with 160 bit subgroup, 2048 bit group with 224 bit subgroup +and 2048 bit group with 256 bit subgroup as mentioned in \s-1RFC5114\s0 sections +2.1, 2.2 and 2.3 respectively. If present this overrides all other \s-1DH\s0 parameter +options. +.SS "\s-1EC\s0 Parameter Generation Options" +.IX Subsection "EC Parameter Generation Options" +The \s-1EC\s0 parameter generation options are the same as for key generation. See +\&\*(L"\s-1EC\s0 Key Generation Options\*(R" above. +.SH "NOTES" +.IX Header "NOTES" +The use of the genpkey program is encouraged over the algorithm specific +utilities because additional algorithm options and \s-1ENGINE\s0 provided algorithms +can be used. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +Generate an \s-1RSA\s0 private key using default parameters: +.PP +.Vb 1 +\& openssl genpkey \-algorithm RSA \-out key.pem +.Ve +.PP +Encrypt output private key using 128 bit \s-1AES\s0 and the passphrase \*(L"hello\*(R": +.PP +.Vb 1 +\& openssl genpkey \-algorithm RSA \-out key.pem \-aes\-128\-cbc \-pass pass:hello +.Ve +.PP +Generate a 2048 bit \s-1RSA\s0 key using 3 as the public exponent: +.PP +.Vb 2 +\& openssl genpkey \-algorithm RSA \-out key.pem \e +\& \-pkeyopt rsa_keygen_bits:2048 \-pkeyopt rsa_keygen_pubexp:3 +.Ve +.PP +Generate 2048 bit \s-1DSA\s0 parameters: +.PP +.Vb 2 +\& openssl genpkey \-genparam \-algorithm DSA \-out dsap.pem \e +\& \-pkeyopt dsa_paramgen_bits:2048 +.Ve +.PP +Generate \s-1DSA\s0 key from parameters: +.PP +.Vb 1 +\& openssl genpkey \-paramfile dsap.pem \-out dsakey.pem +.Ve +.PP +Generate 2048 bit \s-1DH\s0 parameters: +.PP +.Vb 2 +\& openssl genpkey \-genparam \-algorithm DH \-out dhp.pem \e +\& \-pkeyopt dh_paramgen_prime_len:2048 +.Ve +.PP +Generate 2048 bit X9.42 \s-1DH\s0 parameters: +.PP +.Vb 3 +\& openssl genpkey \-genparam \-algorithm DH \-out dhpx.pem \e +\& \-pkeyopt dh_paramgen_prime_len:2048 \e +\& \-pkeyopt dh_paramgen_type:1 +.Ve +.PP +Output \s-1RFC5114 2048\s0 bit \s-1DH\s0 parameters with 224 bit subgroup: +.PP +.Vb 1 +\& openssl genpkey \-genparam \-algorithm DH \-out dhp.pem \-pkeyopt dh_rfc5114:2 +.Ve +.PP +Generate \s-1DH\s0 key from parameters: +.PP +.Vb 1 +\& openssl genpkey \-paramfile dhp.pem \-out dhkey.pem +.Ve +.PP +Generate \s-1EC\s0 parameters: +.PP +.Vb 3 +\& openssl genpkey \-genparam \-algorithm EC \-out ecp.pem \e +\& \-pkeyopt ec_paramgen_curve:secp384r1 \e +\& \-pkeyopt ec_param_enc:named_curve +.Ve +.PP +Generate \s-1EC\s0 key from parameters: +.PP +.Vb 1 +\& openssl genpkey \-paramfile ecp.pem \-out eckey.pem +.Ve +.PP +Generate \s-1EC\s0 key directly: +.PP +.Vb 3 +\& openssl genpkey \-algorithm EC \-out eckey.pem \e +\& \-pkeyopt ec_paramgen_curve:P\-384 \e +\& \-pkeyopt ec_param_enc:named_curve +.Ve +.PP +Generate an X25519 private key: +.PP +.Vb 1 +\& openssl genpkey \-algorithm X25519 \-out xkey.pem +.Ve +.PP +Generate an \s-1ED448\s0 private key: +.PP +.Vb 1 +\& openssl genpkey \-algorithm ED448 \-out xkey.pem +.Ve +.SH "HISTORY" +.IX Header "HISTORY" +The ability to use \s-1NIST\s0 curve names, and to generate an \s-1EC\s0 key directly, +were added in OpenSSL 1.0.2. +The ability to generate X25519 keys was added in OpenSSL 1.1.0. +The ability to generate X448, \s-1ED25519\s0 and \s-1ED448\s0 keys was added in OpenSSL 1.1.1. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2006\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/genrsa.1 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/genrsa.1 new file mode 100644 index 00000000..1dc02227 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/genrsa.1 @@ -0,0 +1,243 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "GENRSA 1" +.TH GENRSA 1 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +openssl\-genrsa, genrsa \- generate an RSA private key +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +\&\fBopenssl\fR \fBgenrsa\fR +[\fB\-help\fR] +[\fB\-out filename\fR] +[\fB\-passout arg\fR] +[\fB\-aes128\fR] +[\fB\-aes192\fR] +[\fB\-aes256\fR] +[\fB\-aria128\fR] +[\fB\-aria192\fR] +[\fB\-aria256\fR] +[\fB\-camellia128\fR] +[\fB\-camellia192\fR] +[\fB\-camellia256\fR] +[\fB\-des\fR] +[\fB\-des3\fR] +[\fB\-idea\fR] +[\fB\-f4\fR] +[\fB\-3\fR] +[\fB\-rand file...\fR] +[\fB\-writerand file\fR] +[\fB\-engine id\fR] +[\fB\-primes num\fR] +[\fBnumbits\fR] +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fBgenrsa\fR command generates an \s-1RSA\s0 private key. +.SH "OPTIONS" +.IX Header "OPTIONS" +.IP "\fB\-help\fR" 4 +.IX Item "-help" +Print out a usage message. +.IP "\fB\-out filename\fR" 4 +.IX Item "-out filename" +Output the key to the specified file. If this argument is not specified then +standard output is used. +.IP "\fB\-passout arg\fR" 4 +.IX Item "-passout arg" +The output file password source. For more information about the format +of \fBarg\fR see the \fB\s-1PASS PHRASE ARGUMENTS\s0\fR section in \fBopenssl\fR\|(1). +.IP "\fB\-aes128\fR, \fB\-aes192\fR, \fB\-aes256\fR, \fB\-aria128\fR, \fB\-aria192\fR, \fB\-aria256\fR, \fB\-camellia128\fR, \fB\-camellia192\fR, \fB\-camellia256\fR, \fB\-des\fR, \fB\-des3\fR, \fB\-idea\fR" 4 +.IX Item "-aes128, -aes192, -aes256, -aria128, -aria192, -aria256, -camellia128, -camellia192, -camellia256, -des, -des3, -idea" +These options encrypt the private key with specified +cipher before outputting it. If none of these options is +specified no encryption is used. If encryption is used a pass phrase is prompted +for if it is not supplied via the \fB\-passout\fR argument. +.IP "\fB\-F4|\-3\fR" 4 +.IX Item "-F4|-3" +The public exponent to use, either 65537 or 3. The default is 65537. +.IP "\fB\-rand file...\fR" 4 +.IX Item "-rand file..." +A file or files containing random data used to seed the random number +generator. +Multiple files can be specified separated by an OS-dependent character. +The separator is \fB;\fR for MS-Windows, \fB,\fR for OpenVMS, and \fB:\fR for +all others. +.IP "[\fB\-writerand file\fR]" 4 +.IX Item "[-writerand file]" +Writes random data to the specified \fIfile\fR upon exit. +This can be used with a subsequent \fB\-rand\fR flag. +.IP "\fB\-engine id\fR" 4 +.IX Item "-engine id" +Specifying an engine (by its unique \fBid\fR string) will cause \fBgenrsa\fR +to attempt to obtain a functional reference to the specified engine, +thus initialising it if needed. The engine will then be set as the default +for all available algorithms. +.IP "\fB\-primes num\fR" 4 +.IX Item "-primes num" +Specify the number of primes to use while generating the \s-1RSA\s0 key. The \fBnum\fR +parameter must be a positive integer that is greater than 1 and less than 16. +If \fBnum\fR is greater than 2, then the generated key is called a 'multi\-prime' +\&\s-1RSA\s0 key, which is defined in \s-1RFC 8017.\s0 +.IP "\fBnumbits\fR" 4 +.IX Item "numbits" +The size of the private key to generate in bits. This must be the last option +specified. The default is 2048 and values less than 512 are not allowed. +.SH "NOTES" +.IX Header "NOTES" +\&\s-1RSA\s0 private key generation essentially involves the generation of two or more +prime numbers. When generating a private key various symbols will be output to +indicate the progress of the generation. A \fB.\fR represents each number which +has passed an initial sieve test, \fB+\fR means a number has passed a single +round of the Miller-Rabin primality test, \fB*\fR means the current prime starts +a regenerating progress due to some failed tests. A newline means that the number +has passed all the prime tests (the actual number depends on the key size). +.PP +Because key generation is a random process the time taken to generate a key +may vary somewhat. But in general, more primes lead to less generation time +of a key. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBgendsa\fR\|(1) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/list.1 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/list.1 new file mode 100644 index 00000000..72b628e7 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/list.1 @@ -0,0 +1,211 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "LIST 1" +.TH LIST 1 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +openssl\-list, list \- list algorithms and features +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +\&\fBopenssl list\fR +[\fB\-help\fR] +[\fB\-1\fR] +[\fB\-commands\fR] +[\fB\-digest\-commands\fR] +[\fB\-digest\-algorithms\fR] +[\fB\-cipher\-commands\fR] +[\fB\-cipher\-algorithms\fR] +[\fB\-public\-key\-algorithms\fR] +[\fB\-public\-key\-methods\fR] +[\fB\-disabled\fR] +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +This command is used to generate list of algorithms or disabled +features. +.SH "OPTIONS" +.IX Header "OPTIONS" +.IP "\fB\-help\fR" 4 +.IX Item "-help" +Display a usage message. +.IP "\fB\-1\fR" 4 +.IX Item "-1" +List the commands, digest-commands, or cipher-commands in a single column. +If used, this option must be given first. +.IP "\fB\-commands\fR" 4 +.IX Item "-commands" +Display a list of standard commands. +.IP "\fB\-digest\-commands\fR" 4 +.IX Item "-digest-commands" +Display a list of message digest commands, which are typically used +as input to the \fBdgst\fR\|(1) or \fBspeed\fR\|(1) commands. +.IP "\fB\-digest\-algorithms\fR" 4 +.IX Item "-digest-algorithms" +Display a list of message digest algorithms. +If a line is of the form + foo => bar +then \fBfoo\fR is an alias for the official algorithm name, \fBbar\fR. +.IP "\fB\-cipher\-commands\fR" 4 +.IX Item "-cipher-commands" +Display a list of cipher commands, which are typically used as input +to the \fBdgst\fR\|(1) or \fBspeed\fR\|(1) commands. +.IP "\fB\-cipher\-algorithms\fR" 4 +.IX Item "-cipher-algorithms" +Display a list of cipher algorithms. +If a line is of the form + foo => bar +then \fBfoo\fR is an alias for the official algorithm name, \fBbar\fR. +.IP "\fB\-public\-key\-algorithms\fR" 4 +.IX Item "-public-key-algorithms" +Display a list of public key algorithms, with each algorithm as +a block of multiple lines, all but the first are indented. +.IP "\fB\-public\-key\-methods\fR" 4 +.IX Item "-public-key-methods" +Display a list of public key method OIDs: this also includes public key methods +without an associated \s-1ASN.1\s0 method, for example, \s-1KDF\s0 algorithms. +.IP "\fB\-disabled\fR" 4 +.IX Item "-disabled" +Display a list of disabled features, those that were compiled out +of the installation. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2016\-2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/nseq.1 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/nseq.1 new file mode 100644 index 00000000..e6d4634c --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/nseq.1 @@ -0,0 +1,211 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "NSEQ 1" +.TH NSEQ 1 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +openssl\-nseq, nseq \- create or examine a Netscape certificate sequence +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +\&\fBopenssl\fR \fBnseq\fR +[\fB\-help\fR] +[\fB\-in filename\fR] +[\fB\-out filename\fR] +[\fB\-toseq\fR] +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fBnseq\fR command takes a file containing a Netscape certificate +sequence and prints out the certificates contained in it or takes a +file of certificates and converts it into a Netscape certificate +sequence. +.SH "OPTIONS" +.IX Header "OPTIONS" +.IP "\fB\-help\fR" 4 +.IX Item "-help" +Print out a usage message. +.IP "\fB\-in filename\fR" 4 +.IX Item "-in filename" +This specifies the input filename to read or standard input if this +option is not specified. +.IP "\fB\-out filename\fR" 4 +.IX Item "-out filename" +Specifies the output filename or standard output by default. +.IP "\fB\-toseq\fR" 4 +.IX Item "-toseq" +Normally a Netscape certificate sequence will be input and the output +is the certificates contained in it. With the \fB\-toseq\fR option the +situation is reversed: a Netscape certificate sequence is created from +a file of certificates. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +Output the certificates in a Netscape certificate sequence +.PP +.Vb 1 +\& openssl nseq \-in nseq.pem \-out certs.pem +.Ve +.PP +Create a Netscape certificate sequence +.PP +.Vb 1 +\& openssl nseq \-in certs.pem \-toseq \-out nseq.pem +.Ve +.SH "NOTES" +.IX Header "NOTES" +The \fB\s-1PEM\s0\fR encoded form uses the same headers and footers as a certificate: +.PP +.Vb 2 +\& \-\-\-\-\-BEGIN CERTIFICATE\-\-\-\-\- +\& \-\-\-\-\-END CERTIFICATE\-\-\-\-\- +.Ve +.PP +A Netscape certificate sequence is a Netscape specific format that can be sent +to browsers as an alternative to the standard PKCS#7 format when several +certificates are sent to the browser: for example during certificate enrollment. +It is used by Netscape certificate server for example. +.SH "BUGS" +.IX Header "BUGS" +This program needs a few more options: like allowing \s-1DER\s0 or \s-1PEM\s0 input and +output files and allowing multiple certificate files to be used. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/ocsp.1 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/ocsp.1 new file mode 100644 index 00000000..a306fb43 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/ocsp.1 @@ -0,0 +1,584 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "OCSP 1" +.TH OCSP 1 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +openssl\-ocsp, ocsp \- Online Certificate Status Protocol utility +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +\&\fBopenssl\fR \fBocsp\fR +[\fB\-help\fR] +[\fB\-out file\fR] +[\fB\-issuer file\fR] +[\fB\-cert file\fR] +[\fB\-serial n\fR] +[\fB\-signer file\fR] +[\fB\-signkey file\fR] +[\fB\-sign_other file\fR] +[\fB\-no_certs\fR] +[\fB\-req_text\fR] +[\fB\-resp_text\fR] +[\fB\-text\fR] +[\fB\-reqout file\fR] +[\fB\-respout file\fR] +[\fB\-reqin file\fR] +[\fB\-respin file\fR] +[\fB\-nonce\fR] +[\fB\-no_nonce\fR] +[\fB\-url \s-1URL\s0\fR] +[\fB\-host host:port\fR] +[\fB\-multi process-count\fR] +[\fB\-header\fR] +[\fB\-path\fR] +[\fB\-CApath dir\fR] +[\fB\-CAfile file\fR] +[\fB\-no\-CAfile\fR] +[\fB\-no\-CApath\fR] +[\fB\-attime timestamp\fR] +[\fB\-check_ss_sig\fR] +[\fB\-crl_check\fR] +[\fB\-crl_check_all\fR] +[\fB\-explicit_policy\fR] +[\fB\-extended_crl\fR] +[\fB\-ignore_critical\fR] +[\fB\-inhibit_any\fR] +[\fB\-inhibit_map\fR] +[\fB\-no_check_time\fR] +[\fB\-partial_chain\fR] +[\fB\-policy arg\fR] +[\fB\-policy_check\fR] +[\fB\-policy_print\fR] +[\fB\-purpose purpose\fR] +[\fB\-suiteB_128\fR] +[\fB\-suiteB_128_only\fR] +[\fB\-suiteB_192\fR] +[\fB\-trusted_first\fR] +[\fB\-no_alt_chains\fR] +[\fB\-use_deltas\fR] +[\fB\-auth_level num\fR] +[\fB\-verify_depth num\fR] +[\fB\-verify_email email\fR] +[\fB\-verify_hostname hostname\fR] +[\fB\-verify_ip ip\fR] +[\fB\-verify_name name\fR] +[\fB\-x509_strict\fR] +[\fB\-VAfile file\fR] +[\fB\-validity_period n\fR] +[\fB\-status_age n\fR] +[\fB\-noverify\fR] +[\fB\-verify_other file\fR] +[\fB\-trust_other\fR] +[\fB\-no_intern\fR] +[\fB\-no_signature_verify\fR] +[\fB\-no_cert_verify\fR] +[\fB\-no_chain\fR] +[\fB\-no_cert_checks\fR] +[\fB\-no_explicit\fR] +[\fB\-port num\fR] +[\fB\-ignore_err\fR] +[\fB\-index file\fR] +[\fB\-CA file\fR] +[\fB\-rsigner file\fR] +[\fB\-rkey file\fR] +[\fB\-rother file\fR] +[\fB\-rsigopt nm:v\fR] +[\fB\-resp_no_certs\fR] +[\fB\-nmin n\fR] +[\fB\-ndays n\fR] +[\fB\-resp_key_id\fR] +[\fB\-nrequest n\fR] +[\fB\-\f(BIdigest\fB\fR] +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The Online Certificate Status Protocol (\s-1OCSP\s0) enables applications to +determine the (revocation) state of an identified certificate (\s-1RFC 2560\s0). +.PP +The \fBocsp\fR command performs many common \s-1OCSP\s0 tasks. It can be used +to print out requests and responses, create requests and send queries +to an \s-1OCSP\s0 responder and behave like a mini \s-1OCSP\s0 server itself. +.SH "OPTIONS" +.IX Header "OPTIONS" +This command operates as either a client or a server. +The options are described below, divided into those two modes. +.SS "\s-1OCSP\s0 Client Options" +.IX Subsection "OCSP Client Options" +.IP "\fB\-help\fR" 4 +.IX Item "-help" +Print out a usage message. +.IP "\fB\-out filename\fR" 4 +.IX Item "-out filename" +specify output filename, default is standard output. +.IP "\fB\-issuer filename\fR" 4 +.IX Item "-issuer filename" +This specifies the current issuer certificate. This option can be used +multiple times. The certificate specified in \fBfilename\fR must be in +\&\s-1PEM\s0 format. This option \fB\s-1MUST\s0\fR come before any \fB\-cert\fR options. +.IP "\fB\-cert filename\fR" 4 +.IX Item "-cert filename" +Add the certificate \fBfilename\fR to the request. The issuer certificate +is taken from the previous \fBissuer\fR option, or an error occurs if no +issuer certificate is specified. +.IP "\fB\-serial num\fR" 4 +.IX Item "-serial num" +Same as the \fBcert\fR option except the certificate with serial number +\&\fBnum\fR is added to the request. The serial number is interpreted as a +decimal integer unless preceded by \fB0x\fR. Negative integers can also +be specified by preceding the value by a \fB\-\fR sign. +.IP "\fB\-signer filename\fR, \fB\-signkey filename\fR" 4 +.IX Item "-signer filename, -signkey filename" +Sign the \s-1OCSP\s0 request using the certificate specified in the \fBsigner\fR +option and the private key specified by the \fBsignkey\fR option. If +the \fBsignkey\fR option is not present then the private key is read +from the same file as the certificate. If neither option is specified then +the \s-1OCSP\s0 request is not signed. +.IP "\fB\-sign_other filename\fR" 4 +.IX Item "-sign_other filename" +Additional certificates to include in the signed request. +.IP "\fB\-nonce\fR, \fB\-no_nonce\fR" 4 +.IX Item "-nonce, -no_nonce" +Add an \s-1OCSP\s0 nonce extension to a request or disable \s-1OCSP\s0 nonce addition. +Normally if an \s-1OCSP\s0 request is input using the \fBreqin\fR option no +nonce is added: using the \fBnonce\fR option will force addition of a nonce. +If an \s-1OCSP\s0 request is being created (using \fBcert\fR and \fBserial\fR options) +a nonce is automatically added specifying \fBno_nonce\fR overrides this. +.IP "\fB\-req_text\fR, \fB\-resp_text\fR, \fB\-text\fR" 4 +.IX Item "-req_text, -resp_text, -text" +Print out the text form of the \s-1OCSP\s0 request, response or both respectively. +.IP "\fB\-reqout file\fR, \fB\-respout file\fR" 4 +.IX Item "-reqout file, -respout file" +Write out the \s-1DER\s0 encoded certificate request or response to \fBfile\fR. +.IP "\fB\-reqin file\fR, \fB\-respin file\fR" 4 +.IX Item "-reqin file, -respin file" +Read \s-1OCSP\s0 request or response file from \fBfile\fR. These option are ignored +if \s-1OCSP\s0 request or response creation is implied by other options (for example +with \fBserial\fR, \fBcert\fR and \fBhost\fR options). +.IP "\fB\-url responder_url\fR" 4 +.IX Item "-url responder_url" +Specify the responder \s-1URL.\s0 Both \s-1HTTP\s0 and \s-1HTTPS\s0 (\s-1SSL/TLS\s0) URLs can be specified. +.IP "\fB\-host hostname:port\fR, \fB\-path pathname\fR" 4 +.IX Item "-host hostname:port, -path pathname" +If the \fBhost\fR option is present then the \s-1OCSP\s0 request is sent to the host +\&\fBhostname\fR on port \fBport\fR. \fBpath\fR specifies the \s-1HTTP\s0 path name to use +or \*(L"/\*(R" by default. This is equivalent to specifying \fB\-url\fR with scheme +http:// and the given hostname, port, and pathname. +.IP "\fB\-header name=value\fR" 4 +.IX Item "-header name=value" +Adds the header \fBname\fR with the specified \fBvalue\fR to the \s-1OCSP\s0 request +that is sent to the responder. +This may be repeated. +.IP "\fB\-timeout seconds\fR" 4 +.IX Item "-timeout seconds" +Connection timeout to the \s-1OCSP\s0 responder in seconds. +On \s-1POSIX\s0 systems, when running as an \s-1OCSP\s0 responder, this option also limits +the time that the responder is willing to wait for the client request. +This time is measured from the time the responder accepts the connection until +the complete request is received. +.IP "\fB\-multi process-count\fR" 4 +.IX Item "-multi process-count" +Run the specified number of \s-1OCSP\s0 responder child processes, with the parent +process respawning child processes as needed. +Child processes will detect changes in the \s-1CA\s0 index file and automatically +reload it. +When running as a responder \fB\-timeout\fR option is recommended to limit the time +each child is willing to wait for the client's \s-1OCSP\s0 response. +This option is available on \s-1POSIX\s0 systems (that support the \fBfork()\fR and other +required unix system-calls). +.IP "\fB\-CAfile file\fR, \fB\-CApath pathname\fR" 4 +.IX Item "-CAfile file, -CApath pathname" +File or pathname containing trusted \s-1CA\s0 certificates. These are used to verify +the signature on the \s-1OCSP\s0 response. +.IP "\fB\-no\-CAfile\fR" 4 +.IX Item "-no-CAfile" +Do not load the trusted \s-1CA\s0 certificates from the default file location +.IP "\fB\-no\-CApath\fR" 4 +.IX Item "-no-CApath" +Do not load the trusted \s-1CA\s0 certificates from the default directory location +.IP "\fB\-attime\fR, \fB\-check_ss_sig\fR, \fB\-crl_check\fR, \fB\-crl_check_all\fR, \fB\-explicit_policy\fR, \fB\-extended_crl\fR, \fB\-ignore_critical\fR, \fB\-inhibit_any\fR, \fB\-inhibit_map\fR, \fB\-no_alt_chains\fR, \fB\-no_check_time\fR, \fB\-partial_chain\fR, \fB\-policy\fR, \fB\-policy_check\fR, \fB\-policy_print\fR, \fB\-purpose\fR, \fB\-suiteB_128\fR, \fB\-suiteB_128_only\fR, \fB\-suiteB_192\fR, \fB\-trusted_first\fR, \fB\-use_deltas\fR, \fB\-auth_level\fR, \fB\-verify_depth\fR, \fB\-verify_email\fR, \fB\-verify_hostname\fR, \fB\-verify_ip\fR, \fB\-verify_name\fR, \fB\-x509_strict\fR" 4 +.IX Item "-attime, -check_ss_sig, -crl_check, -crl_check_all, -explicit_policy, -extended_crl, -ignore_critical, -inhibit_any, -inhibit_map, -no_alt_chains, -no_check_time, -partial_chain, -policy, -policy_check, -policy_print, -purpose, -suiteB_128, -suiteB_128_only, -suiteB_192, -trusted_first, -use_deltas, -auth_level, -verify_depth, -verify_email, -verify_hostname, -verify_ip, -verify_name, -x509_strict" +Set different certificate verification options. +See \fBverify\fR\|(1) manual page for details. +.IP "\fB\-verify_other file\fR" 4 +.IX Item "-verify_other file" +File containing additional certificates to search when attempting to locate +the \s-1OCSP\s0 response signing certificate. Some responders omit the actual signer's +certificate from the response: this option can be used to supply the necessary +certificate in such cases. +.IP "\fB\-trust_other\fR" 4 +.IX Item "-trust_other" +The certificates specified by the \fB\-verify_other\fR option should be explicitly +trusted and no additional checks will be performed on them. This is useful +when the complete responder certificate chain is not available or trusting a +root \s-1CA\s0 is not appropriate. +.IP "\fB\-VAfile file\fR" 4 +.IX Item "-VAfile file" +File containing explicitly trusted responder certificates. Equivalent to the +\&\fB\-verify_other\fR and \fB\-trust_other\fR options. +.IP "\fB\-noverify\fR" 4 +.IX Item "-noverify" +Don't attempt to verify the \s-1OCSP\s0 response signature or the nonce +values. This option will normally only be used for debugging since it +disables all verification of the responders certificate. +.IP "\fB\-no_intern\fR" 4 +.IX Item "-no_intern" +Ignore certificates contained in the \s-1OCSP\s0 response when searching for the +signers certificate. With this option the signers certificate must be specified +with either the \fB\-verify_other\fR or \fB\-VAfile\fR options. +.IP "\fB\-no_signature_verify\fR" 4 +.IX Item "-no_signature_verify" +Don't check the signature on the \s-1OCSP\s0 response. Since this option +tolerates invalid signatures on \s-1OCSP\s0 responses it will normally only be +used for testing purposes. +.IP "\fB\-no_cert_verify\fR" 4 +.IX Item "-no_cert_verify" +Don't verify the \s-1OCSP\s0 response signers certificate at all. Since this +option allows the \s-1OCSP\s0 response to be signed by any certificate it should +only be used for testing purposes. +.IP "\fB\-no_chain\fR" 4 +.IX Item "-no_chain" +Do not use certificates in the response as additional untrusted \s-1CA\s0 +certificates. +.IP "\fB\-no_explicit\fR" 4 +.IX Item "-no_explicit" +Do not explicitly trust the root \s-1CA\s0 if it is set to be trusted for \s-1OCSP\s0 signing. +.IP "\fB\-no_cert_checks\fR" 4 +.IX Item "-no_cert_checks" +Don't perform any additional checks on the \s-1OCSP\s0 response signers certificate. +That is do not make any checks to see if the signers certificate is authorised +to provide the necessary status information: as a result this option should +only be used for testing purposes. +.IP "\fB\-validity_period nsec\fR, \fB\-status_age age\fR" 4 +.IX Item "-validity_period nsec, -status_age age" +These options specify the range of times, in seconds, which will be tolerated +in an \s-1OCSP\s0 response. Each certificate status response includes a \fBnotBefore\fR +time and an optional \fBnotAfter\fR time. The current time should fall between +these two values, but the interval between the two times may be only a few +seconds. In practice the \s-1OCSP\s0 responder and clients clocks may not be precisely +synchronised and so such a check may fail. To avoid this the +\&\fB\-validity_period\fR option can be used to specify an acceptable error range in +seconds, the default value is 5 minutes. +.Sp +If the \fBnotAfter\fR time is omitted from a response then this means that new +status information is immediately available. In this case the age of the +\&\fBnotBefore\fR field is checked to see it is not older than \fBage\fR seconds old. +By default this additional check is not performed. +.IP "\fB\-\f(BIdigest\fB\fR" 4 +.IX Item "-digest" +This option sets digest algorithm to use for certificate identification in the +\&\s-1OCSP\s0 request. Any digest supported by the OpenSSL \fBdgst\fR command can be used. +The default is \s-1SHA\-1.\s0 This option may be used multiple times to specify the +digest used by subsequent certificate identifiers. +.SS "\s-1OCSP\s0 Server Options" +.IX Subsection "OCSP Server Options" +.IP "\fB\-index indexfile\fR" 4 +.IX Item "-index indexfile" +The \fBindexfile\fR parameter is the name of a text index file in \fBca\fR +format containing certificate revocation information. +.Sp +If the \fBindex\fR option is specified the \fBocsp\fR utility is in responder +mode, otherwise it is in client mode. The request(s) the responder +processes can be either specified on the command line (using \fBissuer\fR +and \fBserial\fR options), supplied in a file (using the \fBreqin\fR option) +or via external \s-1OCSP\s0 clients (if \fBport\fR or \fBurl\fR is specified). +.Sp +If the \fBindex\fR option is present then the \fB\s-1CA\s0\fR and \fBrsigner\fR options +must also be present. +.IP "\fB\-CA file\fR" 4 +.IX Item "-CA file" +\&\s-1CA\s0 certificate corresponding to the revocation information in \fBindexfile\fR. +.IP "\fB\-rsigner file\fR" 4 +.IX Item "-rsigner file" +The certificate to sign \s-1OCSP\s0 responses with. +.IP "\fB\-rother file\fR" 4 +.IX Item "-rother file" +Additional certificates to include in the \s-1OCSP\s0 response. +.IP "\fB\-resp_no_certs\fR" 4 +.IX Item "-resp_no_certs" +Don't include any certificates in the \s-1OCSP\s0 response. +.IP "\fB\-resp_key_id\fR" 4 +.IX Item "-resp_key_id" +Identify the signer certificate using the key \s-1ID,\s0 default is to use the +subject name. +.IP "\fB\-rkey file\fR" 4 +.IX Item "-rkey file" +The private key to sign \s-1OCSP\s0 responses with: if not present the file +specified in the \fBrsigner\fR option is used. +.IP "\fB\-rsigopt nm:v\fR" 4 +.IX Item "-rsigopt nm:v" +Pass options to the signature algorithm when signing \s-1OCSP\s0 responses. +Names and values of these options are algorithm-specific. +.IP "\fB\-port portnum\fR" 4 +.IX Item "-port portnum" +Port to listen for \s-1OCSP\s0 requests on. The port may also be specified +using the \fBurl\fR option. +.IP "\fB\-ignore_err\fR" 4 +.IX Item "-ignore_err" +Ignore malformed requests or responses: When acting as an \s-1OCSP\s0 client, retry if +a malformed response is received. When acting as an \s-1OCSP\s0 responder, continue +running instead of terminating upon receiving a malformed request. +.IP "\fB\-nrequest number\fR" 4 +.IX Item "-nrequest number" +The \s-1OCSP\s0 server will exit after receiving \fBnumber\fR requests, default unlimited. +.IP "\fB\-nmin minutes\fR, \fB\-ndays days\fR" 4 +.IX Item "-nmin minutes, -ndays days" +Number of minutes or days when fresh revocation information is available: +used in the \fBnextUpdate\fR field. If neither option is present then the +\&\fBnextUpdate\fR field is omitted meaning fresh revocation information is +immediately available. +.SH "OCSP Response verification." +.IX Header "OCSP Response verification." +\&\s-1OCSP\s0 Response follows the rules specified in \s-1RFC2560.\s0 +.PP +Initially the \s-1OCSP\s0 responder certificate is located and the signature on +the \s-1OCSP\s0 request checked using the responder certificate's public key. +.PP +Then a normal certificate verify is performed on the \s-1OCSP\s0 responder certificate +building up a certificate chain in the process. The locations of the trusted +certificates used to build the chain can be specified by the \fBCAfile\fR +and \fBCApath\fR options or they will be looked for in the standard OpenSSL +certificates directory. +.PP +If the initial verify fails then the \s-1OCSP\s0 verify process halts with an +error. +.PP +Otherwise the issuing \s-1CA\s0 certificate in the request is compared to the \s-1OCSP\s0 +responder certificate: if there is a match then the \s-1OCSP\s0 verify succeeds. +.PP +Otherwise the \s-1OCSP\s0 responder certificate's \s-1CA\s0 is checked against the issuing +\&\s-1CA\s0 certificate in the request. If there is a match and the OCSPSigning +extended key usage is present in the \s-1OCSP\s0 responder certificate then the +\&\s-1OCSP\s0 verify succeeds. +.PP +Otherwise, if \fB\-no_explicit\fR is \fBnot\fR set the root \s-1CA\s0 of the \s-1OCSP\s0 responders +\&\s-1CA\s0 is checked to see if it is trusted for \s-1OCSP\s0 signing. If it is the \s-1OCSP\s0 +verify succeeds. +.PP +If none of these checks is successful then the \s-1OCSP\s0 verify fails. +.PP +What this effectively means if that if the \s-1OCSP\s0 responder certificate is +authorised directly by the \s-1CA\s0 it is issuing revocation information about +(and it is correctly configured) then verification will succeed. +.PP +If the \s-1OCSP\s0 responder is a \*(L"global responder\*(R" which can give details about +multiple CAs and has its own separate certificate chain then its root +\&\s-1CA\s0 can be trusted for \s-1OCSP\s0 signing. For example: +.PP +.Vb 1 +\& openssl x509 \-in ocspCA.pem \-addtrust OCSPSigning \-out trustedCA.pem +.Ve +.PP +Alternatively the responder certificate itself can be explicitly trusted +with the \fB\-VAfile\fR option. +.SH "NOTES" +.IX Header "NOTES" +As noted, most of the verify options are for testing or debugging purposes. +Normally only the \fB\-CApath\fR, \fB\-CAfile\fR and (if the responder is a 'global +\&\s-1VA\s0') \fB\-VAfile\fR options need to be used. +.PP +The \s-1OCSP\s0 server is only useful for test and demonstration purposes: it is +not really usable as a full \s-1OCSP\s0 responder. It contains only a very +simple \s-1HTTP\s0 request handling and can only handle the \s-1POST\s0 form of \s-1OCSP\s0 +queries. It also handles requests serially meaning it cannot respond to +new requests until it has processed the current one. The text index file +format of revocation is also inefficient for large quantities of revocation +data. +.PP +It is possible to run the \fBocsp\fR application in responder mode via a \s-1CGI\s0 +script using the \fBreqin\fR and \fBrespout\fR options. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +Create an \s-1OCSP\s0 request and write it to a file: +.PP +.Vb 1 +\& openssl ocsp \-issuer issuer.pem \-cert c1.pem \-cert c2.pem \-reqout req.der +.Ve +.PP +Send a query to an \s-1OCSP\s0 responder with \s-1URL\s0 http://ocsp.myhost.com/ save the +response to a file, print it out in text form, and verify the response: +.PP +.Vb 2 +\& openssl ocsp \-issuer issuer.pem \-cert c1.pem \-cert c2.pem \e +\& \-url http://ocsp.myhost.com/ \-resp_text \-respout resp.der +.Ve +.PP +Read in an \s-1OCSP\s0 response and print out text form: +.PP +.Vb 1 +\& openssl ocsp \-respin resp.der \-text \-noverify +.Ve +.PP +\&\s-1OCSP\s0 server on port 8888 using a standard \fBca\fR configuration, and a separate +responder certificate. All requests and responses are printed to a file. +.PP +.Vb 2 +\& openssl ocsp \-index demoCA/index.txt \-port 8888 \-rsigner rcert.pem \-CA demoCA/cacert.pem +\& \-text \-out log.txt +.Ve +.PP +As above but exit after processing one request: +.PP +.Vb 2 +\& openssl ocsp \-index demoCA/index.txt \-port 8888 \-rsigner rcert.pem \-CA demoCA/cacert.pem +\& \-nrequest 1 +.Ve +.PP +Query status information using an internally generated request: +.PP +.Vb 2 +\& openssl ocsp \-index demoCA/index.txt \-rsigner rcert.pem \-CA demoCA/cacert.pem +\& \-issuer demoCA/cacert.pem \-serial 1 +.Ve +.PP +Query status information using request read from a file, and write the response +to a second file. +.PP +.Vb 2 +\& openssl ocsp \-index demoCA/index.txt \-rsigner rcert.pem \-CA demoCA/cacert.pem +\& \-reqin req.der \-respout resp.der +.Ve +.SH "HISTORY" +.IX Header "HISTORY" +The \-no_alt_chains option was added in OpenSSL 1.1.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2001\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/openssl.1 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/openssl.1 new file mode 100644 index 00000000..14d4c770 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/openssl.1 @@ -0,0 +1,583 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "OPENSSL 1" +.TH OPENSSL 1 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +openssl \- OpenSSL command line tool +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +\&\fBopenssl\fR +\&\fIcommand\fR +[ \fIcommand_opts\fR ] +[ \fIcommand_args\fR ] +.PP +\&\fBopenssl\fR \fBlist\fR [ \fBstandard-commands\fR | \fBdigest-commands\fR | \fBcipher-commands\fR | \fBcipher-algorithms\fR | \fBdigest-algorithms\fR | \fBpublic-key-algorithms\fR] +.PP +\&\fBopenssl\fR \fBno\-\fR\fI\s-1XXX\s0\fR [ \fIarbitrary options\fR ] +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +OpenSSL is a cryptography toolkit implementing the Secure Sockets Layer (\s-1SSL\s0 +v2/v3) and Transport Layer Security (\s-1TLS\s0 v1) network protocols and related +cryptography standards required by them. +.PP +The \fBopenssl\fR program is a command line tool for using the various +cryptography functions of OpenSSL's \fBcrypto\fR library from the shell. +It can be used for +.PP +.Vb 8 +\& o Creation and management of private keys, public keys and parameters +\& o Public key cryptographic operations +\& o Creation of X.509 certificates, CSRs and CRLs +\& o Calculation of Message Digests +\& o Encryption and Decryption with Ciphers +\& o SSL/TLS Client and Server Tests +\& o Handling of S/MIME signed or encrypted mail +\& o Time Stamp requests, generation and verification +.Ve +.SH "COMMAND SUMMARY" +.IX Header "COMMAND SUMMARY" +The \fBopenssl\fR program provides a rich variety of commands (\fIcommand\fR in the +\&\s-1SYNOPSIS\s0 above), each of which often has a wealth of options and arguments +(\fIcommand_opts\fR and \fIcommand_args\fR in the \s-1SYNOPSIS\s0). +.PP +Detailed documentation and use cases for most standard subcommands are available +(e.g., \fBx509\fR\|(1) or \fBopenssl\-x509\fR\|(1)). +.PP +Many commands use an external configuration file for some or all of their +arguments and have a \fB\-config\fR option to specify that file. +The environment variable \fB\s-1OPENSSL_CONF\s0\fR can be used to specify +the location of the file. +If the environment variable is not specified, then the file is named +\&\fBopenssl.cnf\fR in the default certificate storage area, whose value +depends on the configuration flags specified when the OpenSSL +was built. +.PP +The list parameters \fBstandard-commands\fR, \fBdigest-commands\fR, +and \fBcipher-commands\fR output a list (one entry per line) of the names +of all standard commands, message digest commands, or cipher commands, +respectively, that are available in the present \fBopenssl\fR utility. +.PP +The list parameters \fBcipher-algorithms\fR and +\&\fBdigest-algorithms\fR list all cipher and message digest names, one entry per line. Aliases are listed as: +.PP +.Vb 1 +\& from => to +.Ve +.PP +The list parameter \fBpublic-key-algorithms\fR lists all supported public +key algorithms. +.PP +The command \fBno\-\fR\fI\s-1XXX\s0\fR tests whether a command of the +specified name is available. If no command named \fI\s-1XXX\s0\fR exists, it +returns 0 (success) and prints \fBno\-\fR\fI\s-1XXX\s0\fR; otherwise it returns 1 +and prints \fI\s-1XXX\s0\fR. In both cases, the output goes to \fBstdout\fR and +nothing is printed to \fBstderr\fR. Additional command line arguments +are always ignored. Since for each cipher there is a command of the +same name, this provides an easy way for shell scripts to test for the +availability of ciphers in the \fBopenssl\fR program. (\fBno\-\fR\fI\s-1XXX\s0\fR is +not able to detect pseudo-commands such as \fBquit\fR, +\&\fBlist\fR, or \fBno\-\fR\fI\s-1XXX\s0\fR itself.) +.SS "Standard Commands" +.IX Subsection "Standard Commands" +.IP "\fBasn1parse\fR" 4 +.IX Item "asn1parse" +Parse an \s-1ASN.1\s0 sequence. +.IP "\fBca\fR" 4 +.IX Item "ca" +Certificate Authority (\s-1CA\s0) Management. +.IP "\fBciphers\fR" 4 +.IX Item "ciphers" +Cipher Suite Description Determination. +.IP "\fBcms\fR" 4 +.IX Item "cms" +\&\s-1CMS\s0 (Cryptographic Message Syntax) utility. +.IP "\fBcrl\fR" 4 +.IX Item "crl" +Certificate Revocation List (\s-1CRL\s0) Management. +.IP "\fBcrl2pkcs7\fR" 4 +.IX Item "crl2pkcs7" +\&\s-1CRL\s0 to PKCS#7 Conversion. +.IP "\fBdgst\fR" 4 +.IX Item "dgst" +Message Digest Calculation. +.IP "\fBdh\fR" 4 +.IX Item "dh" +Diffie-Hellman Parameter Management. +Obsoleted by \fBdhparam\fR\|(1). +.IP "\fBdhparam\fR" 4 +.IX Item "dhparam" +Generation and Management of Diffie-Hellman Parameters. Superseded by +\&\fBgenpkey\fR\|(1) and \fBpkeyparam\fR\|(1). +.IP "\fBdsa\fR" 4 +.IX Item "dsa" +\&\s-1DSA\s0 Data Management. +.IP "\fBdsaparam\fR" 4 +.IX Item "dsaparam" +\&\s-1DSA\s0 Parameter Generation and Management. Superseded by +\&\fBgenpkey\fR\|(1) and \fBpkeyparam\fR\|(1). +.IP "\fBec\fR" 4 +.IX Item "ec" +\&\s-1EC\s0 (Elliptic curve) key processing. +.IP "\fBecparam\fR" 4 +.IX Item "ecparam" +\&\s-1EC\s0 parameter manipulation and generation. +.IP "\fBenc\fR" 4 +.IX Item "enc" +Encoding with Ciphers. +.IP "\fBengine\fR" 4 +.IX Item "engine" +Engine (loadable module) information and manipulation. +.IP "\fBerrstr\fR" 4 +.IX Item "errstr" +Error Number to Error String Conversion. +.IP "\fBgendh\fR" 4 +.IX Item "gendh" +Generation of Diffie-Hellman Parameters. +Obsoleted by \fBdhparam\fR\|(1). +.IP "\fBgendsa\fR" 4 +.IX Item "gendsa" +Generation of \s-1DSA\s0 Private Key from Parameters. Superseded by +\&\fBgenpkey\fR\|(1) and \fBpkey\fR\|(1). +.IP "\fBgenpkey\fR" 4 +.IX Item "genpkey" +Generation of Private Key or Parameters. +.IP "\fBgenrsa\fR" 4 +.IX Item "genrsa" +Generation of \s-1RSA\s0 Private Key. Superseded by \fBgenpkey\fR\|(1). +.IP "\fBnseq\fR" 4 +.IX Item "nseq" +Create or examine a Netscape certificate sequence. +.IP "\fBocsp\fR" 4 +.IX Item "ocsp" +Online Certificate Status Protocol utility. +.IP "\fBpasswd\fR" 4 +.IX Item "passwd" +Generation of hashed passwords. +.IP "\fBpkcs12\fR" 4 +.IX Item "pkcs12" +PKCS#12 Data Management. +.IP "\fBpkcs7\fR" 4 +.IX Item "pkcs7" +PKCS#7 Data Management. +.IP "\fBpkcs8\fR" 4 +.IX Item "pkcs8" +PKCS#8 format private key conversion tool. +.IP "\fBpkey\fR" 4 +.IX Item "pkey" +Public and private key management. +.IP "\fBpkeyparam\fR" 4 +.IX Item "pkeyparam" +Public key algorithm parameter management. +.IP "\fBpkeyutl\fR" 4 +.IX Item "pkeyutl" +Public key algorithm cryptographic operation utility. +.IP "\fBprime\fR" 4 +.IX Item "prime" +Compute prime numbers. +.IP "\fBrand\fR" 4 +.IX Item "rand" +Generate pseudo-random bytes. +.IP "\fBrehash\fR" 4 +.IX Item "rehash" +Create symbolic links to certificate and \s-1CRL\s0 files named by the hash values. +.IP "\fBreq\fR" 4 +.IX Item "req" +PKCS#10 X.509 Certificate Signing Request (\s-1CSR\s0) Management. +.IP "\fBrsa\fR" 4 +.IX Item "rsa" +\&\s-1RSA\s0 key management. +.IP "\fBrsautl\fR" 4 +.IX Item "rsautl" +\&\s-1RSA\s0 utility for signing, verification, encryption, and decryption. Superseded +by \fBpkeyutl\fR\|(1). +.IP "\fBs_client\fR" 4 +.IX Item "s_client" +This implements a generic \s-1SSL/TLS\s0 client which can establish a transparent +connection to a remote server speaking \s-1SSL/TLS.\s0 It's intended for testing +purposes only and provides only rudimentary interface functionality but +internally uses mostly all functionality of the OpenSSL \fBssl\fR library. +.IP "\fBs_server\fR" 4 +.IX Item "s_server" +This implements a generic \s-1SSL/TLS\s0 server which accepts connections from remote +clients speaking \s-1SSL/TLS.\s0 It's intended for testing purposes only and provides +only rudimentary interface functionality but internally uses mostly all +functionality of the OpenSSL \fBssl\fR library. It provides both an own command +line oriented protocol for testing \s-1SSL\s0 functions and a simple \s-1HTTP\s0 response +facility to emulate an SSL/TLS\-aware webserver. +.IP "\fBs_time\fR" 4 +.IX Item "s_time" +\&\s-1SSL\s0 Connection Timer. +.IP "\fBsess_id\fR" 4 +.IX Item "sess_id" +\&\s-1SSL\s0 Session Data Management. +.IP "\fBsmime\fR" 4 +.IX Item "smime" +S/MIME mail processing. +.IP "\fBspeed\fR" 4 +.IX Item "speed" +Algorithm Speed Measurement. +.IP "\fBspkac\fR" 4 +.IX Item "spkac" +\&\s-1SPKAC\s0 printing and generating utility. +.IP "\fBsrp\fR" 4 +.IX Item "srp" +Maintain \s-1SRP\s0 password file. +.IP "\fBstoreutl\fR" 4 +.IX Item "storeutl" +Utility to list and display certificates, keys, CRLs, etc. +.IP "\fBts\fR" 4 +.IX Item "ts" +Time Stamping Authority tool (client/server). +.IP "\fBverify\fR" 4 +.IX Item "verify" +X.509 Certificate Verification. +.IP "\fBversion\fR" 4 +.IX Item "version" +OpenSSL Version Information. +.IP "\fBx509\fR" 4 +.IX Item "x509" +X.509 Certificate Data Management. +.SS "Message Digest Commands" +.IX Subsection "Message Digest Commands" +.IP "\fBblake2b512\fR" 4 +.IX Item "blake2b512" +BLAKE2b\-512 Digest +.IP "\fBblake2s256\fR" 4 +.IX Item "blake2s256" +BLAKE2s\-256 Digest +.IP "\fBmd2\fR" 4 +.IX Item "md2" +\&\s-1MD2\s0 Digest +.IP "\fBmd4\fR" 4 +.IX Item "md4" +\&\s-1MD4\s0 Digest +.IP "\fBmd5\fR" 4 +.IX Item "md5" +\&\s-1MD5\s0 Digest +.IP "\fBmdc2\fR" 4 +.IX Item "mdc2" +\&\s-1MDC2\s0 Digest +.IP "\fBrmd160\fR" 4 +.IX Item "rmd160" +\&\s-1RMD\-160\s0 Digest +.IP "\fBsha1\fR" 4 +.IX Item "sha1" +\&\s-1SHA\-1\s0 Digest +.IP "\fBsha224\fR" 4 +.IX Item "sha224" +\&\s-1SHA\-2 224\s0 Digest +.IP "\fBsha256\fR" 4 +.IX Item "sha256" +\&\s-1SHA\-2 256\s0 Digest +.IP "\fBsha384\fR" 4 +.IX Item "sha384" +\&\s-1SHA\-2 384\s0 Digest +.IP "\fBsha512\fR" 4 +.IX Item "sha512" +\&\s-1SHA\-2 512\s0 Digest +.IP "\fBsha3\-224\fR" 4 +.IX Item "sha3-224" +\&\s-1SHA\-3 224\s0 Digest +.IP "\fBsha3\-256\fR" 4 +.IX Item "sha3-256" +\&\s-1SHA\-3 256\s0 Digest +.IP "\fBsha3\-384\fR" 4 +.IX Item "sha3-384" +\&\s-1SHA\-3 384\s0 Digest +.IP "\fBsha3\-512\fR" 4 +.IX Item "sha3-512" +\&\s-1SHA\-3 512\s0 Digest +.IP "\fBshake128\fR" 4 +.IX Item "shake128" +\&\s-1SHA\-3 SHAKE128\s0 Digest +.IP "\fBshake256\fR" 4 +.IX Item "shake256" +\&\s-1SHA\-3 SHAKE256\s0 Digest +.IP "\fBsm3\fR" 4 +.IX Item "sm3" +\&\s-1SM3\s0 Digest +.SS "Encoding and Cipher Commands" +.IX Subsection "Encoding and Cipher Commands" +The following aliases provide convenient access to the most used encodings +and ciphers. +.PP +Depending on how OpenSSL was configured and built, not all ciphers listed +here may be present. See \fBenc\fR\|(1) for more information and command usage. +.IP "\fBaes128\fR, \fBaes\-128\-cbc\fR, \fBaes\-128\-cfb\fR, \fBaes\-128\-ctr\fR, \fBaes\-128\-ecb\fR, \fBaes\-128\-ofb\fR" 4 +.IX Item "aes128, aes-128-cbc, aes-128-cfb, aes-128-ctr, aes-128-ecb, aes-128-ofb" +\&\s-1AES\-128\s0 Cipher +.IP "\fBaes192\fR, \fBaes\-192\-cbc\fR, \fBaes\-192\-cfb\fR, \fBaes\-192\-ctr\fR, \fBaes\-192\-ecb\fR, \fBaes\-192\-ofb\fR" 4 +.IX Item "aes192, aes-192-cbc, aes-192-cfb, aes-192-ctr, aes-192-ecb, aes-192-ofb" +\&\s-1AES\-192\s0 Cipher +.IP "\fBaes256\fR, \fBaes\-256\-cbc\fR, \fBaes\-256\-cfb\fR, \fBaes\-256\-ctr\fR, \fBaes\-256\-ecb\fR, \fBaes\-256\-ofb\fR" 4 +.IX Item "aes256, aes-256-cbc, aes-256-cfb, aes-256-ctr, aes-256-ecb, aes-256-ofb" +\&\s-1AES\-256\s0 Cipher +.IP "\fBaria128\fR, \fBaria\-128\-cbc\fR, \fBaria\-128\-cfb\fR, \fBaria\-128\-ctr\fR, \fBaria\-128\-ecb\fR, \fBaria\-128\-ofb\fR" 4 +.IX Item "aria128, aria-128-cbc, aria-128-cfb, aria-128-ctr, aria-128-ecb, aria-128-ofb" +Aria\-128 Cipher +.IP "\fBaria192\fR, \fBaria\-192\-cbc\fR, \fBaria\-192\-cfb\fR, \fBaria\-192\-ctr\fR, \fBaria\-192\-ecb\fR, \fBaria\-192\-ofb\fR" 4 +.IX Item "aria192, aria-192-cbc, aria-192-cfb, aria-192-ctr, aria-192-ecb, aria-192-ofb" +Aria\-192 Cipher +.IP "\fBaria256\fR, \fBaria\-256\-cbc\fR, \fBaria\-256\-cfb\fR, \fBaria\-256\-ctr\fR, \fBaria\-256\-ecb\fR, \fBaria\-256\-ofb\fR" 4 +.IX Item "aria256, aria-256-cbc, aria-256-cfb, aria-256-ctr, aria-256-ecb, aria-256-ofb" +Aria\-256 Cipher +.IP "\fBbase64\fR" 4 +.IX Item "base64" +Base64 Encoding +.IP "\fBbf\fR, \fBbf-cbc\fR, \fBbf-cfb\fR, \fBbf-ecb\fR, \fBbf-ofb\fR" 4 +.IX Item "bf, bf-cbc, bf-cfb, bf-ecb, bf-ofb" +Blowfish Cipher +.IP "\fBcamellia128\fR, \fBcamellia\-128\-cbc\fR, \fBcamellia\-128\-cfb\fR, \fBcamellia\-128\-ctr\fR, \fBcamellia\-128\-ecb\fR, \fBcamellia\-128\-ofb\fR" 4 +.IX Item "camellia128, camellia-128-cbc, camellia-128-cfb, camellia-128-ctr, camellia-128-ecb, camellia-128-ofb" +Camellia\-128 Cipher +.IP "\fBcamellia192\fR, \fBcamellia\-192\-cbc\fR, \fBcamellia\-192\-cfb\fR, \fBcamellia\-192\-ctr\fR, \fBcamellia\-192\-ecb\fR, \fBcamellia\-192\-ofb\fR" 4 +.IX Item "camellia192, camellia-192-cbc, camellia-192-cfb, camellia-192-ctr, camellia-192-ecb, camellia-192-ofb" +Camellia\-192 Cipher +.IP "\fBcamellia256\fR, \fBcamellia\-256\-cbc\fR, \fBcamellia\-256\-cfb\fR, \fBcamellia\-256\-ctr\fR, \fBcamellia\-256\-ecb\fR, \fBcamellia\-256\-ofb\fR" 4 +.IX Item "camellia256, camellia-256-cbc, camellia-256-cfb, camellia-256-ctr, camellia-256-ecb, camellia-256-ofb" +Camellia\-256 Cipher +.IP "\fBcast\fR, \fBcast-cbc\fR" 4 +.IX Item "cast, cast-cbc" +\&\s-1CAST\s0 Cipher +.IP "\fBcast5\-cbc\fR, \fBcast5\-cfb\fR, \fBcast5\-ecb\fR, \fBcast5\-ofb\fR" 4 +.IX Item "cast5-cbc, cast5-cfb, cast5-ecb, cast5-ofb" +\&\s-1CAST5\s0 Cipher +.IP "\fBchacha20\fR" 4 +.IX Item "chacha20" +Chacha20 Cipher +.IP "\fBdes\fR, \fBdes-cbc\fR, \fBdes-cfb\fR, \fBdes-ecb\fR, \fBdes-ede\fR, \fBdes-ede-cbc\fR, \fBdes-ede-cfb\fR, \fBdes-ede-ofb\fR, \fBdes-ofb\fR" 4 +.IX Item "des, des-cbc, des-cfb, des-ecb, des-ede, des-ede-cbc, des-ede-cfb, des-ede-ofb, des-ofb" +\&\s-1DES\s0 Cipher +.IP "\fBdes3\fR, \fBdesx\fR, \fBdes\-ede3\fR, \fBdes\-ede3\-cbc\fR, \fBdes\-ede3\-cfb\fR, \fBdes\-ede3\-ofb\fR" 4 +.IX Item "des3, desx, des-ede3, des-ede3-cbc, des-ede3-cfb, des-ede3-ofb" +Triple-DES Cipher +.IP "\fBidea\fR, \fBidea-cbc\fR, \fBidea-cfb\fR, \fBidea-ecb\fR, \fBidea-ofb\fR" 4 +.IX Item "idea, idea-cbc, idea-cfb, idea-ecb, idea-ofb" +\&\s-1IDEA\s0 Cipher +.IP "\fBrc2\fR, \fBrc2\-cbc\fR, \fBrc2\-cfb\fR, \fBrc2\-ecb\fR, \fBrc2\-ofb\fR" 4 +.IX Item "rc2, rc2-cbc, rc2-cfb, rc2-ecb, rc2-ofb" +\&\s-1RC2\s0 Cipher +.IP "\fBrc4\fR" 4 +.IX Item "rc4" +\&\s-1RC4\s0 Cipher +.IP "\fBrc5\fR, \fBrc5\-cbc\fR, \fBrc5\-cfb\fR, \fBrc5\-ecb\fR, \fBrc5\-ofb\fR" 4 +.IX Item "rc5, rc5-cbc, rc5-cfb, rc5-ecb, rc5-ofb" +\&\s-1RC5\s0 Cipher +.IP "\fBseed\fR, \fBseed-cbc\fR, \fBseed-cfb\fR, \fBseed-ecb\fR, \fBseed-ofb\fR" 4 +.IX Item "seed, seed-cbc, seed-cfb, seed-ecb, seed-ofb" +\&\s-1SEED\s0 Cipher +.IP "\fBsm4\fR, \fBsm4\-cbc\fR, \fBsm4\-cfb\fR, \fBsm4\-ctr\fR, \fBsm4\-ecb\fR, \fBsm4\-ofb\fR" 4 +.IX Item "sm4, sm4-cbc, sm4-cfb, sm4-ctr, sm4-ecb, sm4-ofb" +\&\s-1SM4\s0 Cipher +.SH "OPTIONS" +.IX Header "OPTIONS" +Details of which options are available depend on the specific command. +This section describes some common options with common behavior. +.SS "Common Options" +.IX Subsection "Common Options" +.IP "\fB\-help\fR" 4 +.IX Item "-help" +Provides a terse summary of all options. +.SS "Pass Phrase Options" +.IX Subsection "Pass Phrase Options" +Several commands accept password arguments, typically using \fB\-passin\fR +and \fB\-passout\fR for input and output passwords respectively. These allow +the password to be obtained from a variety of sources. Both of these +options take a single argument whose format is described below. If no +password argument is given and a password is required then the user is +prompted to enter one: this will typically be read from the current +terminal with echoing turned off. +.PP +Note that character encoding may be relevant, please see +\&\fBpassphrase\-encoding\fR\|(7). +.IP "\fBpass:password\fR" 4 +.IX Item "pass:password" +The actual password is \fBpassword\fR. Since the password is visible +to utilities (like 'ps' under Unix) this form should only be used +where security is not important. +.IP "\fBenv:var\fR" 4 +.IX Item "env:var" +Obtain the password from the environment variable \fBvar\fR. Since +the environment of other processes is visible on certain platforms +(e.g. ps under certain Unix OSes) this option should be used with caution. +.IP "\fBfile:pathname\fR" 4 +.IX Item "file:pathname" +The first line of \fBpathname\fR is the password. If the same \fBpathname\fR +argument is supplied to \fB\-passin\fR and \fB\-passout\fR arguments then the first +line will be used for the input password and the next line for the output +password. \fBpathname\fR need not refer to a regular file: it could for example +refer to a device or named pipe. +.IP "\fBfd:number\fR" 4 +.IX Item "fd:number" +Read the password from the file descriptor \fBnumber\fR. This can be used to +send the data via a pipe for example. +.IP "\fBstdin\fR" 4 +.IX Item "stdin" +Read the password from standard input. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBasn1parse\fR\|(1), \fBca\fR\|(1), \fBciphers\fR\|(1), \fBcms\fR\|(1), \fBconfig\fR\|(5), +\&\fBcrl\fR\|(1), \fBcrl2pkcs7\fR\|(1), \fBdgst\fR\|(1), +\&\fBdhparam\fR\|(1), \fBdsa\fR\|(1), \fBdsaparam\fR\|(1), +\&\fBec\fR\|(1), \fBecparam\fR\|(1), +\&\fBenc\fR\|(1), \fBengine\fR\|(1), \fBerrstr\fR\|(1), \fBgendsa\fR\|(1), \fBgenpkey\fR\|(1), +\&\fBgenrsa\fR\|(1), \fBnseq\fR\|(1), \fBocsp\fR\|(1), +\&\fBpasswd\fR\|(1), +\&\fBpkcs12\fR\|(1), \fBpkcs7\fR\|(1), \fBpkcs8\fR\|(1), +\&\fBpkey\fR\|(1), \fBpkeyparam\fR\|(1), \fBpkeyutl\fR\|(1), \fBprime\fR\|(1), +\&\fBrand\fR\|(1), \fBrehash\fR\|(1), \fBreq\fR\|(1), \fBrsa\fR\|(1), +\&\fBrsautl\fR\|(1), \fBs_client\fR\|(1), +\&\fBs_server\fR\|(1), \fBs_time\fR\|(1), \fBsess_id\fR\|(1), +\&\fBsmime\fR\|(1), \fBspeed\fR\|(1), \fBspkac\fR\|(1), \fBsrp\fR\|(1), \fBstoreutl\fR\|(1), +\&\fBts\fR\|(1), +\&\fBverify\fR\|(1), \fBversion\fR\|(1), \fBx509\fR\|(1), +\&\fBcrypto\fR\|(7), \fBssl\fR\|(7), \fBx509v3_config\fR\|(5) +.SH "HISTORY" +.IX Header "HISTORY" +The \fBlist\-\fR\fI\s-1XXX\s0\fR\fB\-algorithms\fR pseudo-commands were added in OpenSSL 1.0.0; +For notes on the availability of other commands, see their individual +manual pages. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/passwd.1 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/passwd.1 new file mode 100644 index 00000000..e1166f95 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/passwd.1 @@ -0,0 +1,248 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "PASSWD 1" +.TH PASSWD 1 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +openssl\-passwd, passwd \- compute password hashes +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +\&\fBopenssl passwd\fR +[\fB\-help\fR] +[\fB\-crypt\fR] +[\fB\-1\fR] +[\fB\-apr1\fR] +[\fB\-aixmd5\fR] +[\fB\-5\fR] +[\fB\-6\fR] +[\fB\-salt\fR \fIstring\fR] +[\fB\-in\fR \fIfile\fR] +[\fB\-stdin\fR] +[\fB\-noverify\fR] +[\fB\-quiet\fR] +[\fB\-table\fR] +[\fB\-rand file...\fR] +[\fB\-writerand file\fR] +{\fIpassword\fR} +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fBpasswd\fR command computes the hash of a password typed at +run-time or the hash of each password in a list. The password list is +taken from the named file for option \fB\-in file\fR, from stdin for +option \fB\-stdin\fR, or from the command line, or from the terminal otherwise. +The Unix standard algorithm \fBcrypt\fR and the MD5\-based \s-1BSD\s0 password +algorithm \fB1\fR, its Apache variant \fBapr1\fR, and its \s-1AIX\s0 variant are available. +.SH "OPTIONS" +.IX Header "OPTIONS" +.IP "\fB\-help\fR" 4 +.IX Item "-help" +Print out a usage message. +.IP "\fB\-crypt\fR" 4 +.IX Item "-crypt" +Use the \fBcrypt\fR algorithm (default). +.IP "\fB\-1\fR" 4 +.IX Item "-1" +Use the \s-1MD5\s0 based \s-1BSD\s0 password algorithm \fB1\fR. +.IP "\fB\-apr1\fR" 4 +.IX Item "-apr1" +Use the \fBapr1\fR algorithm (Apache variant of the \s-1BSD\s0 algorithm). +.IP "\fB\-aixmd5\fR" 4 +.IX Item "-aixmd5" +Use the \fB\s-1AIX MD5\s0\fR algorithm (\s-1AIX\s0 variant of the \s-1BSD\s0 algorithm). +.IP "\fB\-5\fR" 4 +.IX Item "-5" +.PD 0 +.IP "\fB\-6\fR" 4 +.IX Item "-6" +.PD +Use the \fB\s-1SHA256\s0\fR / \fB\s-1SHA512\s0\fR based algorithms defined by Ulrich Drepper. +See . +.IP "\fB\-salt\fR \fIstring\fR" 4 +.IX Item "-salt string" +Use the specified salt. +When reading a password from the terminal, this implies \fB\-noverify\fR. +.IP "\fB\-in\fR \fIfile\fR" 4 +.IX Item "-in file" +Read passwords from \fIfile\fR. +.IP "\fB\-stdin\fR" 4 +.IX Item "-stdin" +Read passwords from \fBstdin\fR. +.IP "\fB\-noverify\fR" 4 +.IX Item "-noverify" +Don't verify when reading a password from the terminal. +.IP "\fB\-quiet\fR" 4 +.IX Item "-quiet" +Don't output warnings when passwords given at the command line are truncated. +.IP "\fB\-table\fR" 4 +.IX Item "-table" +In the output list, prepend the cleartext password and a \s-1TAB\s0 character +to each password hash. +.IP "\fB\-rand file...\fR" 4 +.IX Item "-rand file..." +A file or files containing random data used to seed the random number +generator. +Multiple files can be specified separated by an OS-dependent character. +The separator is \fB;\fR for MS-Windows, \fB,\fR for OpenVMS, and \fB:\fR for +all others. +.IP "[\fB\-writerand file\fR]" 4 +.IX Item "[-writerand file]" +Writes random data to the specified \fIfile\fR upon exit. +This can be used with a subsequent \fB\-rand\fR flag. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +.Vb 2 +\& % openssl passwd \-crypt \-salt xx password +\& xxj31ZMTZzkVA +\& +\& % openssl passwd \-1 \-salt xxxxxxxx password +\& $1$xxxxxxxx$UYCIxa628.9qXjpQCjM4a. +\& +\& % openssl passwd \-apr1 \-salt xxxxxxxx password +\& $apr1$xxxxxxxx$dxHfLAsjHkDRmG83UXe8K0 +\& +\& % openssl passwd \-aixmd5 \-salt xxxxxxxx password +\& xxxxxxxx$8Oaipk/GPKhC64w/YVeFD/ +.Ve +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/pkcs12.1 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/pkcs12.1 new file mode 100644 index 00000000..2309874a --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/pkcs12.1 @@ -0,0 +1,479 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "PKCS12 1" +.TH PKCS12 1 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +openssl\-pkcs12, pkcs12 \- PKCS#12 file utility +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +\&\fBopenssl\fR \fBpkcs12\fR +[\fB\-help\fR] +[\fB\-export\fR] +[\fB\-chain\fR] +[\fB\-inkey file_or_id\fR] +[\fB\-certfile filename\fR] +[\fB\-name name\fR] +[\fB\-caname name\fR] +[\fB\-in filename\fR] +[\fB\-out filename\fR] +[\fB\-noout\fR] +[\fB\-nomacver\fR] +[\fB\-nocerts\fR] +[\fB\-clcerts\fR] +[\fB\-cacerts\fR] +[\fB\-nokeys\fR] +[\fB\-info\fR] +[\fB\-des | \-des3 | \-idea | \-aes128 | \-aes192 | \-aes256 | \-aria128 | \-aria192 | \-aria256 | \-camellia128 | \-camellia192 | \-camellia256 | \-nodes\fR] +[\fB\-noiter\fR] +[\fB\-maciter | \-nomaciter | \-nomac\fR] +[\fB\-twopass\fR] +[\fB\-descert\fR] +[\fB\-certpbe cipher\fR] +[\fB\-keypbe cipher\fR] +[\fB\-macalg digest\fR] +[\fB\-keyex\fR] +[\fB\-keysig\fR] +[\fB\-password arg\fR] +[\fB\-passin arg\fR] +[\fB\-passout arg\fR] +[\fB\-rand file...\fR] +[\fB\-writerand file\fR] +[\fB\-CAfile file\fR] +[\fB\-CApath dir\fR] +[\fB\-no\-CAfile\fR] +[\fB\-no\-CApath\fR] +[\fB\-CSP name\fR] +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fBpkcs12\fR command allows PKCS#12 files (sometimes referred to as +\&\s-1PFX\s0 files) to be created and parsed. PKCS#12 files are used by several +programs including Netscape, \s-1MSIE\s0 and \s-1MS\s0 Outlook. +.SH "OPTIONS" +.IX Header "OPTIONS" +There are a lot of options the meaning of some depends of whether a PKCS#12 file +is being created or parsed. By default a PKCS#12 file is parsed. A PKCS#12 +file can be created by using the \fB\-export\fR option (see below). +.SH "PARSING OPTIONS" +.IX Header "PARSING OPTIONS" +.IP "\fB\-help\fR" 4 +.IX Item "-help" +Print out a usage message. +.IP "\fB\-in filename\fR" 4 +.IX Item "-in filename" +This specifies filename of the PKCS#12 file to be parsed. Standard input is used +by default. +.IP "\fB\-out filename\fR" 4 +.IX Item "-out filename" +The filename to write certificates and private keys to, standard output by +default. They are all written in \s-1PEM\s0 format. +.IP "\fB\-passin arg\fR" 4 +.IX Item "-passin arg" +The PKCS#12 file (i.e. input file) password source. For more information about +the format of \fBarg\fR see the \fB\s-1PASS PHRASE ARGUMENTS\s0\fR section in +\&\fBopenssl\fR\|(1). +.IP "\fB\-passout arg\fR" 4 +.IX Item "-passout arg" +Pass phrase source to encrypt any outputted private keys with. For more +information about the format of \fBarg\fR see the \fB\s-1PASS PHRASE ARGUMENTS\s0\fR section +in \fBopenssl\fR\|(1). +.IP "\fB\-password arg\fR" 4 +.IX Item "-password arg" +With \-export, \-password is equivalent to \-passout. +Otherwise, \-password is equivalent to \-passin. +.IP "\fB\-noout\fR" 4 +.IX Item "-noout" +This option inhibits output of the keys and certificates to the output file +version of the PKCS#12 file. +.IP "\fB\-clcerts\fR" 4 +.IX Item "-clcerts" +Only output client certificates (not \s-1CA\s0 certificates). +.IP "\fB\-cacerts\fR" 4 +.IX Item "-cacerts" +Only output \s-1CA\s0 certificates (not client certificates). +.IP "\fB\-nocerts\fR" 4 +.IX Item "-nocerts" +No certificates at all will be output. +.IP "\fB\-nokeys\fR" 4 +.IX Item "-nokeys" +No private keys will be output. +.IP "\fB\-info\fR" 4 +.IX Item "-info" +Output additional information about the PKCS#12 file structure, algorithms +used and iteration counts. +.IP "\fB\-des\fR" 4 +.IX Item "-des" +Use \s-1DES\s0 to encrypt private keys before outputting. +.IP "\fB\-des3\fR" 4 +.IX Item "-des3" +Use triple \s-1DES\s0 to encrypt private keys before outputting, this is the default. +.IP "\fB\-idea\fR" 4 +.IX Item "-idea" +Use \s-1IDEA\s0 to encrypt private keys before outputting. +.IP "\fB\-aes128\fR, \fB\-aes192\fR, \fB\-aes256\fR" 4 +.IX Item "-aes128, -aes192, -aes256" +Use \s-1AES\s0 to encrypt private keys before outputting. +.IP "\fB\-aria128\fR, \fB\-aria192\fR, \fB\-aria256\fR" 4 +.IX Item "-aria128, -aria192, -aria256" +Use \s-1ARIA\s0 to encrypt private keys before outputting. +.IP "\fB\-camellia128\fR, \fB\-camellia192\fR, \fB\-camellia256\fR" 4 +.IX Item "-camellia128, -camellia192, -camellia256" +Use Camellia to encrypt private keys before outputting. +.IP "\fB\-nodes\fR" 4 +.IX Item "-nodes" +Don't encrypt the private keys at all. +.IP "\fB\-nomacver\fR" 4 +.IX Item "-nomacver" +Don't attempt to verify the integrity \s-1MAC\s0 before reading the file. +.IP "\fB\-twopass\fR" 4 +.IX Item "-twopass" +Prompt for separate integrity and encryption passwords: most software +always assumes these are the same so this option will render such +PKCS#12 files unreadable. Cannot be used in combination with the options +\&\-password, \-passin (if importing) or \-passout (if exporting). +.SH "FILE CREATION OPTIONS" +.IX Header "FILE CREATION OPTIONS" +.IP "\fB\-export\fR" 4 +.IX Item "-export" +This option specifies that a PKCS#12 file will be created rather than +parsed. +.IP "\fB\-out filename\fR" 4 +.IX Item "-out filename" +This specifies filename to write the PKCS#12 file to. Standard output is used +by default. +.IP "\fB\-in filename\fR" 4 +.IX Item "-in filename" +The filename to read certificates and private keys from, standard input by +default. They must all be in \s-1PEM\s0 format. The order doesn't matter but one +private key and its corresponding certificate should be present. If additional +certificates are present they will also be included in the PKCS#12 file. +.IP "\fB\-inkey file_or_id\fR" 4 +.IX Item "-inkey file_or_id" +File to read private key from. If not present then a private key must be present +in the input file. +If no engine is used, the argument is taken as a file; if an engine is +specified, the argument is given to the engine as a key identifier. +.IP "\fB\-name friendlyname\fR" 4 +.IX Item "-name friendlyname" +This specifies the \*(L"friendly name\*(R" for the certificate and private key. This +name is typically displayed in list boxes by software importing the file. +.IP "\fB\-certfile filename\fR" 4 +.IX Item "-certfile filename" +A filename to read additional certificates from. +.IP "\fB\-caname friendlyname\fR" 4 +.IX Item "-caname friendlyname" +This specifies the \*(L"friendly name\*(R" for other certificates. This option may be +used multiple times to specify names for all certificates in the order they +appear. Netscape ignores friendly names on other certificates whereas \s-1MSIE\s0 +displays them. +.IP "\fB\-pass arg\fR, \fB\-passout arg\fR" 4 +.IX Item "-pass arg, -passout arg" +The PKCS#12 file (i.e. output file) password source. For more information about +the format of \fBarg\fR see the \fB\s-1PASS PHRASE ARGUMENTS\s0\fR section in +\&\fBopenssl\fR\|(1). +.IP "\fB\-passin password\fR" 4 +.IX Item "-passin password" +Pass phrase source to decrypt any input private keys with. For more information +about the format of \fBarg\fR see the \fB\s-1PASS PHRASE ARGUMENTS\s0\fR section in +\&\fBopenssl\fR\|(1). +.IP "\fB\-chain\fR" 4 +.IX Item "-chain" +If this option is present then an attempt is made to include the entire +certificate chain of the user certificate. The standard \s-1CA\s0 store is used +for this search. If the search fails it is considered a fatal error. +.IP "\fB\-descert\fR" 4 +.IX Item "-descert" +Encrypt the certificate using triple \s-1DES,\s0 this may render the PKCS#12 +file unreadable by some \*(L"export grade\*(R" software. By default the private +key is encrypted using triple \s-1DES\s0 and the certificate using 40 bit \s-1RC2\s0 +unless \s-1RC2\s0 is disabled in which case triple \s-1DES\s0 is used. +.IP "\fB\-keypbe alg\fR, \fB\-certpbe alg\fR" 4 +.IX Item "-keypbe alg, -certpbe alg" +These options allow the algorithm used to encrypt the private key and +certificates to be selected. Any PKCS#5 v1.5 or PKCS#12 \s-1PBE\s0 algorithm name +can be used (see \fB\s-1NOTES\s0\fR section for more information). If a cipher name +(as output by the \fBlist-cipher-algorithms\fR command is specified then it +is used with PKCS#5 v2.0. For interoperability reasons it is advisable to only +use PKCS#12 algorithms. +.IP "\fB\-keyex|\-keysig\fR" 4 +.IX Item "-keyex|-keysig" +Specifies that the private key is to be used for key exchange or just signing. +This option is only interpreted by \s-1MSIE\s0 and similar \s-1MS\s0 software. Normally +\&\*(L"export grade\*(R" software will only allow 512 bit \s-1RSA\s0 keys to be used for +encryption purposes but arbitrary length keys for signing. The \fB\-keysig\fR +option marks the key for signing only. Signing only keys can be used for +S/MIME signing, authenticode (ActiveX control signing) and \s-1SSL\s0 client +authentication, however due to a bug only \s-1MSIE 5.0\s0 and later support +the use of signing only keys for \s-1SSL\s0 client authentication. +.IP "\fB\-macalg digest\fR" 4 +.IX Item "-macalg digest" +Specify the \s-1MAC\s0 digest algorithm. If not included them \s-1SHA1\s0 will be used. +.IP "\fB\-nomaciter\fR, \fB\-noiter\fR" 4 +.IX Item "-nomaciter, -noiter" +These options affect the iteration counts on the \s-1MAC\s0 and key algorithms. +Unless you wish to produce files compatible with \s-1MSIE 4.0\s0 you should leave +these options alone. +.Sp +To discourage attacks by using large dictionaries of common passwords the +algorithm that derives keys from passwords can have an iteration count applied +to it: this causes a certain part of the algorithm to be repeated and slows it +down. The \s-1MAC\s0 is used to check the file integrity but since it will normally +have the same password as the keys and certificates it could also be attacked. +By default both \s-1MAC\s0 and encryption iteration counts are set to 2048, using +these options the \s-1MAC\s0 and encryption iteration counts can be set to 1, since +this reduces the file security you should not use these options unless you +really have to. Most software supports both \s-1MAC\s0 and key iteration counts. +\&\s-1MSIE 4.0\s0 doesn't support \s-1MAC\s0 iteration counts so it needs the \fB\-nomaciter\fR +option. +.IP "\fB\-maciter\fR" 4 +.IX Item "-maciter" +This option is included for compatibility with previous versions, it used +to be needed to use \s-1MAC\s0 iterations counts but they are now used by default. +.IP "\fB\-nomac\fR" 4 +.IX Item "-nomac" +Don't attempt to provide the \s-1MAC\s0 integrity. +.IP "\fB\-rand file...\fR" 4 +.IX Item "-rand file..." +A file or files containing random data used to seed the random number +generator. +Multiple files can be specified separated by an OS-dependent character. +The separator is \fB;\fR for MS-Windows, \fB,\fR for OpenVMS, and \fB:\fR for +all others. +.IP "[\fB\-writerand file\fR]" 4 +.IX Item "[-writerand file]" +Writes random data to the specified \fIfile\fR upon exit. +This can be used with a subsequent \fB\-rand\fR flag. +.IP "\fB\-CAfile file\fR" 4 +.IX Item "-CAfile file" +\&\s-1CA\s0 storage as a file. +.IP "\fB\-CApath dir\fR" 4 +.IX Item "-CApath dir" +\&\s-1CA\s0 storage as a directory. This directory must be a standard certificate +directory: that is a hash of each subject name (using \fBx509 \-hash\fR) should be +linked to each certificate. +.IP "\fB\-no\-CAfile\fR" 4 +.IX Item "-no-CAfile" +Do not load the trusted \s-1CA\s0 certificates from the default file location. +.IP "\fB\-no\-CApath\fR" 4 +.IX Item "-no-CApath" +Do not load the trusted \s-1CA\s0 certificates from the default directory location. +.IP "\fB\-CSP name\fR" 4 +.IX Item "-CSP name" +Write \fBname\fR as a Microsoft \s-1CSP\s0 name. +.SH "NOTES" +.IX Header "NOTES" +Although there are a large number of options most of them are very rarely +used. For PKCS#12 file parsing only \fB\-in\fR and \fB\-out\fR need to be used +for PKCS#12 file creation \fB\-export\fR and \fB\-name\fR are also used. +.PP +If none of the \fB\-clcerts\fR, \fB\-cacerts\fR or \fB\-nocerts\fR options are present +then all certificates will be output in the order they appear in the input +PKCS#12 files. There is no guarantee that the first certificate present is +the one corresponding to the private key. Certain software which requires +a private key and certificate and assumes the first certificate in the +file is the one corresponding to the private key: this may not always +be the case. Using the \fB\-clcerts\fR option will solve this problem by only +outputting the certificate corresponding to the private key. If the \s-1CA\s0 +certificates are required then they can be output to a separate file using +the \fB\-nokeys \-cacerts\fR options to just output \s-1CA\s0 certificates. +.PP +The \fB\-keypbe\fR and \fB\-certpbe\fR algorithms allow the precise encryption +algorithms for private keys and certificates to be specified. Normally +the defaults are fine but occasionally software can't handle triple \s-1DES\s0 +encrypted private keys, then the option \fB\-keypbe \s-1PBE\-SHA1\-RC2\-40\s0\fR can +be used to reduce the private key encryption to 40 bit \s-1RC2. A\s0 complete +description of all algorithms is contained in the \fBpkcs8\fR manual page. +.PP +Prior 1.1 release passwords containing non-ASCII characters were encoded +in non-compliant manner, which limited interoperability, in first hand +with Windows. But switching to standard-compliant password encoding +poses problem accessing old data protected with broken encoding. For +this reason even legacy encodings is attempted when reading the +data. If you use PKCS#12 files in production application you are advised +to convert the data, because implemented heuristic approach is not +MT-safe, its sole goal is to facilitate the data upgrade with this +utility. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +Parse a PKCS#12 file and output it to a file: +.PP +.Vb 1 +\& openssl pkcs12 \-in file.p12 \-out file.pem +.Ve +.PP +Output only client certificates to a file: +.PP +.Vb 1 +\& openssl pkcs12 \-in file.p12 \-clcerts \-out file.pem +.Ve +.PP +Don't encrypt the private key: +.PP +.Vb 1 +\& openssl pkcs12 \-in file.p12 \-out file.pem \-nodes +.Ve +.PP +Print some info about a PKCS#12 file: +.PP +.Vb 1 +\& openssl pkcs12 \-in file.p12 \-info \-noout +.Ve +.PP +Create a PKCS#12 file: +.PP +.Vb 1 +\& openssl pkcs12 \-export \-in file.pem \-out file.p12 \-name "My Certificate" +.Ve +.PP +Include some extra certificates: +.PP +.Vb 2 +\& openssl pkcs12 \-export \-in file.pem \-out file.p12 \-name "My Certificate" \e +\& \-certfile othercerts.pem +.Ve +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBpkcs8\fR\|(1) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/pkcs7.1 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/pkcs7.1 new file mode 100644 index 00000000..7e776577 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/pkcs7.1 @@ -0,0 +1,242 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "PKCS7 1" +.TH PKCS7 1 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +openssl\-pkcs7, pkcs7 \- PKCS#7 utility +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +\&\fBopenssl\fR \fBpkcs7\fR +[\fB\-help\fR] +[\fB\-inform PEM|DER\fR] +[\fB\-outform PEM|DER\fR] +[\fB\-in filename\fR] +[\fB\-out filename\fR] +[\fB\-print_certs\fR] +[\fB\-text\fR] +[\fB\-noout\fR] +[\fB\-engine id\fR] +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fBpkcs7\fR command processes PKCS#7 files in \s-1DER\s0 or \s-1PEM\s0 format. +.SH "OPTIONS" +.IX Header "OPTIONS" +.IP "\fB\-help\fR" 4 +.IX Item "-help" +Print out a usage message. +.IP "\fB\-inform DER|PEM\fR" 4 +.IX Item "-inform DER|PEM" +This specifies the input format. \fB\s-1DER\s0\fR format is \s-1DER\s0 encoded PKCS#7 +v1.5 structure.\fB\s-1PEM\s0\fR (the default) is a base64 encoded version of +the \s-1DER\s0 form with header and footer lines. +.IP "\fB\-outform DER|PEM\fR" 4 +.IX Item "-outform DER|PEM" +This specifies the output format, the options have the same meaning and default +as the \fB\-inform\fR option. +.IP "\fB\-in filename\fR" 4 +.IX Item "-in filename" +This specifies the input filename to read from or standard input if this +option is not specified. +.IP "\fB\-out filename\fR" 4 +.IX Item "-out filename" +Specifies the output filename to write to or standard output by +default. +.IP "\fB\-print_certs\fR" 4 +.IX Item "-print_certs" +Prints out any certificates or CRLs contained in the file. They are +preceded by their subject and issuer names in one line format. +.IP "\fB\-text\fR" 4 +.IX Item "-text" +Prints out certificates details in full rather than just subject and +issuer names. +.IP "\fB\-noout\fR" 4 +.IX Item "-noout" +Don't output the encoded version of the PKCS#7 structure (or certificates +is \fB\-print_certs\fR is set). +.IP "\fB\-engine id\fR" 4 +.IX Item "-engine id" +Specifying an engine (by its unique \fBid\fR string) will cause \fBpkcs7\fR +to attempt to obtain a functional reference to the specified engine, +thus initialising it if needed. The engine will then be set as the default +for all available algorithms. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +Convert a PKCS#7 file from \s-1PEM\s0 to \s-1DER:\s0 +.PP +.Vb 1 +\& openssl pkcs7 \-in file.pem \-outform DER \-out file.der +.Ve +.PP +Output all certificates in a file: +.PP +.Vb 1 +\& openssl pkcs7 \-in file.pem \-print_certs \-out certs.pem +.Ve +.SH "NOTES" +.IX Header "NOTES" +The \s-1PEM\s0 PKCS#7 format uses the header and footer lines: +.PP +.Vb 2 +\& \-\-\-\-\-BEGIN PKCS7\-\-\-\-\- +\& \-\-\-\-\-END PKCS7\-\-\-\-\- +.Ve +.PP +For compatibility with some CAs it will also accept: +.PP +.Vb 2 +\& \-\-\-\-\-BEGIN CERTIFICATE\-\-\-\-\- +\& \-\-\-\-\-END CERTIFICATE\-\-\-\-\- +.Ve +.SH "RESTRICTIONS" +.IX Header "RESTRICTIONS" +There is no option to print out all the fields of a PKCS#7 file. +.PP +This PKCS#7 routines only understand PKCS#7 v 1.5 as specified in \s-1RFC2315\s0 they +cannot currently parse, for example, the new \s-1CMS\s0 as described in \s-1RFC2630.\s0 +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBcrl2pkcs7\fR\|(1) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/pkcs8.1 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/pkcs8.1 new file mode 100644 index 00000000..3ee650c4 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/pkcs8.1 @@ -0,0 +1,434 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "PKCS8 1" +.TH PKCS8 1 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +openssl\-pkcs8, pkcs8 \- PKCS#8 format private key conversion tool +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +\&\fBopenssl\fR \fBpkcs8\fR +[\fB\-help\fR] +[\fB\-topk8\fR] +[\fB\-inform PEM|DER\fR] +[\fB\-outform PEM|DER\fR] +[\fB\-in filename\fR] +[\fB\-passin arg\fR] +[\fB\-out filename\fR] +[\fB\-passout arg\fR] +[\fB\-iter count\fR] +[\fB\-noiter\fR] +[\fB\-rand file...\fR] +[\fB\-writerand file\fR] +[\fB\-nocrypt\fR] +[\fB\-traditional\fR] +[\fB\-v2 alg\fR] +[\fB\-v2prf alg\fR] +[\fB\-v1 alg\fR] +[\fB\-engine id\fR] +[\fB\-scrypt\fR] +[\fB\-scrypt_N N\fR] +[\fB\-scrypt_r r\fR] +[\fB\-scrypt_p p\fR] +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fBpkcs8\fR command processes private keys in PKCS#8 format. It can handle +both unencrypted PKCS#8 PrivateKeyInfo format and EncryptedPrivateKeyInfo +format with a variety of PKCS#5 (v1.5 and v2.0) and PKCS#12 algorithms. +.SH "OPTIONS" +.IX Header "OPTIONS" +.IP "\fB\-help\fR" 4 +.IX Item "-help" +Print out a usage message. +.IP "\fB\-topk8\fR" 4 +.IX Item "-topk8" +Normally a PKCS#8 private key is expected on input and a private key will be +written to the output file. With the \fB\-topk8\fR option the situation is +reversed: it reads a private key and writes a PKCS#8 format key. +.IP "\fB\-inform DER|PEM\fR" 4 +.IX Item "-inform DER|PEM" +This specifies the input format: see \*(L"\s-1KEY FORMATS\*(R"\s0 for more details. The default +format is \s-1PEM.\s0 +.IP "\fB\-outform DER|PEM\fR" 4 +.IX Item "-outform DER|PEM" +This specifies the output format: see \*(L"\s-1KEY FORMATS\*(R"\s0 for more details. The default +format is \s-1PEM.\s0 +.IP "\fB\-traditional\fR" 4 +.IX Item "-traditional" +When this option is present and \fB\-topk8\fR is not a traditional format private +key is written. +.IP "\fB\-in filename\fR" 4 +.IX Item "-in filename" +This specifies the input filename to read a key from or standard input if this +option is not specified. If the key is encrypted a pass phrase will be +prompted for. +.IP "\fB\-passin arg\fR" 4 +.IX Item "-passin arg" +The input file password source. For more information about the format of \fBarg\fR +see the \fB\s-1PASS PHRASE ARGUMENTS\s0\fR section in \fBopenssl\fR\|(1). +.IP "\fB\-out filename\fR" 4 +.IX Item "-out filename" +This specifies the output filename to write a key to or standard output by +default. If any encryption options are set then a pass phrase will be +prompted for. The output filename should \fBnot\fR be the same as the input +filename. +.IP "\fB\-passout arg\fR" 4 +.IX Item "-passout arg" +The output file password source. For more information about the format of \fBarg\fR +see the \fB\s-1PASS PHRASE ARGUMENTS\s0\fR section in \fBopenssl\fR\|(1). +.IP "\fB\-iter count\fR" 4 +.IX Item "-iter count" +When creating new PKCS#8 containers, use a given number of iterations on +the password in deriving the encryption key for the PKCS#8 output. +High values increase the time required to brute-force a PKCS#8 container. +.IP "\fB\-nocrypt\fR" 4 +.IX Item "-nocrypt" +PKCS#8 keys generated or input are normally PKCS#8 EncryptedPrivateKeyInfo +structures using an appropriate password based encryption algorithm. With +this option an unencrypted PrivateKeyInfo structure is expected or output. +This option does not encrypt private keys at all and should only be used +when absolutely necessary. Certain software such as some versions of Java +code signing software used unencrypted private keys. +.IP "\fB\-rand file...\fR" 4 +.IX Item "-rand file..." +A file or files containing random data used to seed the random number +generator. +Multiple files can be specified separated by an OS-dependent character. +The separator is \fB;\fR for MS-Windows, \fB,\fR for OpenVMS, and \fB:\fR for +all others. +.IP "[\fB\-writerand file\fR]" 4 +.IX Item "[-writerand file]" +Writes random data to the specified \fIfile\fR upon exit. +This can be used with a subsequent \fB\-rand\fR flag. +.IP "\fB\-v2 alg\fR" 4 +.IX Item "-v2 alg" +This option sets the PKCS#5 v2.0 algorithm. +.Sp +The \fBalg\fR argument is the encryption algorithm to use, valid values include +\&\fBaes128\fR, \fBaes256\fR and \fBdes3\fR. If this option isn't specified then \fBaes256\fR +is used. +.IP "\fB\-v2prf alg\fR" 4 +.IX Item "-v2prf alg" +This option sets the \s-1PRF\s0 algorithm to use with PKCS#5 v2.0. A typical value +value would be \fBhmacWithSHA256\fR. If this option isn't set then the default +for the cipher is used or \fBhmacWithSHA256\fR if there is no default. +.Sp +Some implementations may not support custom \s-1PRF\s0 algorithms and may require +the \fBhmacWithSHA1\fR option to work. +.IP "\fB\-v1 alg\fR" 4 +.IX Item "-v1 alg" +This option indicates a PKCS#5 v1.5 or PKCS#12 algorithm should be used. Some +older implementations may not support PKCS#5 v2.0 and may require this option. +If not specified PKCS#5 v2.0 form is used. +.IP "\fB\-engine id\fR" 4 +.IX Item "-engine id" +Specifying an engine (by its unique \fBid\fR string) will cause \fBpkcs8\fR +to attempt to obtain a functional reference to the specified engine, +thus initialising it if needed. The engine will then be set as the default +for all available algorithms. +.IP "\fB\-scrypt\fR" 4 +.IX Item "-scrypt" +Uses the \fBscrypt\fR algorithm for private key encryption using default +parameters: currently N=16384, r=8 and p=1 and \s-1AES\s0 in \s-1CBC\s0 mode with a 256 bit +key. These parameters can be modified using the \fB\-scrypt_N\fR, \fB\-scrypt_r\fR, +\&\fB\-scrypt_p\fR and \fB\-v2\fR options. +.IP "\fB\-scrypt_N N\fR \fB\-scrypt_r r\fR \fB\-scrypt_p p\fR" 4 +.IX Item "-scrypt_N N -scrypt_r r -scrypt_p p" +Sets the scrypt \fBN\fR, \fBr\fR or \fBp\fR parameters. +.SH "KEY FORMATS" +.IX Header "KEY FORMATS" +Various different formats are used by the pkcs8 utility. These are detailed +below. +.PP +If a key is being converted from PKCS#8 form (i.e. the \fB\-topk8\fR option is +not used) then the input file must be in PKCS#8 format. An encrypted +key is expected unless \fB\-nocrypt\fR is included. +.PP +If \fB\-topk8\fR is not used and \fB\s-1PEM\s0\fR mode is set the output file will be an +unencrypted private key in PKCS#8 format. If the \fB\-traditional\fR option is +used then a traditional format private key is written instead. +.PP +If \fB\-topk8\fR is not used and \fB\s-1DER\s0\fR mode is set the output file will be an +unencrypted private key in traditional \s-1DER\s0 format. +.PP +If \fB\-topk8\fR is used then any supported private key can be used for the input +file in a format specified by \fB\-inform\fR. The output file will be encrypted +PKCS#8 format using the specified encryption parameters unless \fB\-nocrypt\fR +is included. +.SH "NOTES" +.IX Header "NOTES" +By default, when converting a key to PKCS#8 format, PKCS#5 v2.0 using 256 bit +\&\s-1AES\s0 with \s-1HMAC\s0 and \s-1SHA256\s0 is used. +.PP +Some older implementations do not support PKCS#5 v2.0 format and require +the older PKCS#5 v1.5 form instead, possibly also requiring insecure weak +encryption algorithms such as 56 bit \s-1DES.\s0 +.PP +The encrypted form of a \s-1PEM\s0 encode PKCS#8 files uses the following +headers and footers: +.PP +.Vb 2 +\& \-\-\-\-\-BEGIN ENCRYPTED PRIVATE KEY\-\-\-\-\- +\& \-\-\-\-\-END ENCRYPTED PRIVATE KEY\-\-\-\-\- +.Ve +.PP +The unencrypted form uses: +.PP +.Vb 2 +\& \-\-\-\-\-BEGIN PRIVATE KEY\-\-\-\-\- +\& \-\-\-\-\-END PRIVATE KEY\-\-\-\-\- +.Ve +.PP +Private keys encrypted using PKCS#5 v2.0 algorithms and high iteration +counts are more secure that those encrypted using the traditional +SSLeay compatible formats. So if additional security is considered +important the keys should be converted. +.PP +It is possible to write out \s-1DER\s0 encoded encrypted private keys in +PKCS#8 format because the encryption details are included at an \s-1ASN1\s0 +level whereas the traditional format includes them at a \s-1PEM\s0 level. +.SH "PKCS#5 v1.5 and PKCS#12 algorithms." +.IX Header "PKCS#5 v1.5 and PKCS#12 algorithms." +Various algorithms can be used with the \fB\-v1\fR command line option, +including PKCS#5 v1.5 and PKCS#12. These are described in more detail +below. +.IP "\fB\s-1PBE\-MD2\-DES PBE\-MD5\-DES\s0\fR" 4 +.IX Item "PBE-MD2-DES PBE-MD5-DES" +These algorithms were included in the original PKCS#5 v1.5 specification. +They only offer 56 bits of protection since they both use \s-1DES.\s0 +.IP "\fB\s-1PBE\-SHA1\-RC2\-64\s0\fR, \fB\s-1PBE\-MD2\-RC2\-64\s0\fR, \fB\s-1PBE\-MD5\-RC2\-64\s0\fR, \fB\s-1PBE\-SHA1\-DES\s0\fR" 4 +.IX Item "PBE-SHA1-RC2-64, PBE-MD2-RC2-64, PBE-MD5-RC2-64, PBE-SHA1-DES" +These algorithms are not mentioned in the original PKCS#5 v1.5 specification +but they use the same key derivation algorithm and are supported by some +software. They are mentioned in PKCS#5 v2.0. They use either 64 bit \s-1RC2\s0 or +56 bit \s-1DES.\s0 +.IP "\fB\s-1PBE\-SHA1\-RC4\-128\s0\fR, \fB\s-1PBE\-SHA1\-RC4\-40\s0\fR, \fB\s-1PBE\-SHA1\-3DES\s0\fR, \fB\s-1PBE\-SHA1\-2DES\s0\fR, \fB\s-1PBE\-SHA1\-RC2\-128\s0\fR, \fB\s-1PBE\-SHA1\-RC2\-40\s0\fR" 4 +.IX Item "PBE-SHA1-RC4-128, PBE-SHA1-RC4-40, PBE-SHA1-3DES, PBE-SHA1-2DES, PBE-SHA1-RC2-128, PBE-SHA1-RC2-40" +These algorithms use the PKCS#12 password based encryption algorithm and +allow strong encryption algorithms like triple \s-1DES\s0 or 128 bit \s-1RC2\s0 to be used. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +Convert a private key to PKCS#8 format using default parameters (\s-1AES\s0 with +256 bit key and \fBhmacWithSHA256\fR): +.PP +.Vb 1 +\& openssl pkcs8 \-in key.pem \-topk8 \-out enckey.pem +.Ve +.PP +Convert a private key to PKCS#8 unencrypted format: +.PP +.Vb 1 +\& openssl pkcs8 \-in key.pem \-topk8 \-nocrypt \-out enckey.pem +.Ve +.PP +Convert a private key to PKCS#5 v2.0 format using triple \s-1DES:\s0 +.PP +.Vb 1 +\& openssl pkcs8 \-in key.pem \-topk8 \-v2 des3 \-out enckey.pem +.Ve +.PP +Convert a private key to PKCS#5 v2.0 format using \s-1AES\s0 with 256 bits in \s-1CBC\s0 +mode and \fBhmacWithSHA512\fR \s-1PRF:\s0 +.PP +.Vb 1 +\& openssl pkcs8 \-in key.pem \-topk8 \-v2 aes\-256\-cbc \-v2prf hmacWithSHA512 \-out enckey.pem +.Ve +.PP +Convert a private key to PKCS#8 using a PKCS#5 1.5 compatible algorithm +(\s-1DES\s0): +.PP +.Vb 1 +\& openssl pkcs8 \-in key.pem \-topk8 \-v1 PBE\-MD5\-DES \-out enckey.pem +.Ve +.PP +Convert a private key to PKCS#8 using a PKCS#12 compatible algorithm +(3DES): +.PP +.Vb 1 +\& openssl pkcs8 \-in key.pem \-topk8 \-out enckey.pem \-v1 PBE\-SHA1\-3DES +.Ve +.PP +Read a \s-1DER\s0 unencrypted PKCS#8 format private key: +.PP +.Vb 1 +\& openssl pkcs8 \-inform DER \-nocrypt \-in key.der \-out key.pem +.Ve +.PP +Convert a private key from any PKCS#8 encrypted format to traditional format: +.PP +.Vb 1 +\& openssl pkcs8 \-in pk8.pem \-traditional \-out key.pem +.Ve +.PP +Convert a private key to PKCS#8 format, encrypting with \s-1AES\-256\s0 and with +one million iterations of the password: +.PP +.Vb 1 +\& openssl pkcs8 \-in key.pem \-topk8 \-v2 aes\-256\-cbc \-iter 1000000 \-out pk8.pem +.Ve +.SH "STANDARDS" +.IX Header "STANDARDS" +Test vectors from this PKCS#5 v2.0 implementation were posted to the +pkcs-tng mailing list using triple \s-1DES, DES\s0 and \s-1RC2\s0 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 +implementation is reasonably accurate at least as far as these +algorithms are concerned. +.PP +The format of PKCS#8 \s-1DSA\s0 (and other) private keys is not well documented: +it is hidden away in PKCS#11 v2.01, section 11.9. OpenSSL's default \s-1DSA\s0 +PKCS#8 private key format complies with this standard. +.SH "BUGS" +.IX Header "BUGS" +There should be an option that prints out the encryption algorithm +in use and other details such as the iteration count. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBdsa\fR\|(1), \fBrsa\fR\|(1), \fBgenrsa\fR\|(1), +\&\fBgendsa\fR\|(1) +.SH "HISTORY" +.IX Header "HISTORY" +The \fB\-iter\fR option was added in OpenSSL 1.1.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/pkey.1 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/pkey.1 new file mode 100644 index 00000000..2bec6341 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/pkey.1 @@ -0,0 +1,288 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "PKEY 1" +.TH PKEY 1 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +openssl\-pkey, pkey \- public or private key processing tool +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +\&\fBopenssl\fR \fBpkey\fR +[\fB\-help\fR] +[\fB\-inform PEM|DER\fR] +[\fB\-outform PEM|DER\fR] +[\fB\-in filename\fR] +[\fB\-passin arg\fR] +[\fB\-out filename\fR] +[\fB\-passout arg\fR] +[\fB\-traditional\fR] +[\fB\-\f(BIcipher\fB\fR] +[\fB\-text\fR] +[\fB\-text_pub\fR] +[\fB\-noout\fR] +[\fB\-pubin\fR] +[\fB\-pubout\fR] +[\fB\-engine id\fR] +[\fB\-check\fR] +[\fB\-pubcheck\fR] +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fBpkey\fR command processes public or private keys. They can be converted +between various forms and their components printed out. +.SH "OPTIONS" +.IX Header "OPTIONS" +.IP "\fB\-help\fR" 4 +.IX Item "-help" +Print out a usage message. +.IP "\fB\-inform DER|PEM\fR" 4 +.IX Item "-inform DER|PEM" +This specifies the input format \s-1DER\s0 or \s-1PEM.\s0 The default format is \s-1PEM.\s0 +.IP "\fB\-outform DER|PEM\fR" 4 +.IX Item "-outform DER|PEM" +This specifies the output format, the options have the same meaning and default +as the \fB\-inform\fR option. +.IP "\fB\-in filename\fR" 4 +.IX Item "-in filename" +This specifies the input filename to read a key from or standard input if this +option is not specified. If the key is encrypted a pass phrase will be +prompted for. +.IP "\fB\-passin arg\fR" 4 +.IX Item "-passin arg" +The input file password source. For more information about the format of \fBarg\fR +see the \fB\s-1PASS PHRASE ARGUMENTS\s0\fR section in \fBopenssl\fR\|(1). +.IP "\fB\-out filename\fR" 4 +.IX Item "-out filename" +This specifies the output filename to write a key to or standard output if this +option is not specified. If any encryption options are set then a pass phrase +will be prompted for. The output filename should \fBnot\fR be the same as the input +filename. +.IP "\fB\-passout password\fR" 4 +.IX Item "-passout password" +The output file password source. For more information about the format of \fBarg\fR +see the \fB\s-1PASS PHRASE ARGUMENTS\s0\fR section in \fBopenssl\fR\|(1). +.IP "\fB\-traditional\fR" 4 +.IX Item "-traditional" +Normally a private key is written using standard format: this is PKCS#8 form +with the appropriate encryption algorithm (if any). If the \fB\-traditional\fR +option is specified then the older \*(L"traditional\*(R" format is used instead. +.IP "\fB\-\f(BIcipher\fB\fR" 4 +.IX Item "-cipher" +These options encrypt the private key with the supplied cipher. Any algorithm +name accepted by \fBEVP_get_cipherbyname()\fR is acceptable such as \fBdes3\fR. +.IP "\fB\-text\fR" 4 +.IX Item "-text" +Prints out the various public or private key components in +plain text in addition to the encoded version. +.IP "\fB\-text_pub\fR" 4 +.IX Item "-text_pub" +Print out only public key components even if a private key is being processed. +.IP "\fB\-noout\fR" 4 +.IX Item "-noout" +Do not output the encoded version of the key. +.IP "\fB\-pubin\fR" 4 +.IX Item "-pubin" +By default a private key is read from the input file: with this +option a public key is read instead. +.IP "\fB\-pubout\fR" 4 +.IX Item "-pubout" +By default a private key is output: with this option a public +key will be output instead. This option is automatically set if +the input is a public key. +.IP "\fB\-engine id\fR" 4 +.IX Item "-engine id" +Specifying an engine (by its unique \fBid\fR string) will cause \fBpkey\fR +to attempt to obtain a functional reference to the specified engine, +thus initialising it if needed. The engine will then be set as the default +for all available algorithms. +.IP "\fB\-check\fR" 4 +.IX Item "-check" +This option checks the consistency of a key pair for both public and private +components. +.IP "\fB\-pubcheck\fR" 4 +.IX Item "-pubcheck" +This option checks the correctness of either a public key or the public component +of a key pair. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +To remove the pass phrase on an \s-1RSA\s0 private key: +.PP +.Vb 1 +\& openssl pkey \-in key.pem \-out keyout.pem +.Ve +.PP +To encrypt a private key using triple \s-1DES:\s0 +.PP +.Vb 1 +\& openssl pkey \-in key.pem \-des3 \-out keyout.pem +.Ve +.PP +To convert a private key from \s-1PEM\s0 to \s-1DER\s0 format: +.PP +.Vb 1 +\& openssl pkey \-in key.pem \-outform DER \-out keyout.der +.Ve +.PP +To print out the components of a private key to standard output: +.PP +.Vb 1 +\& openssl pkey \-in key.pem \-text \-noout +.Ve +.PP +To print out the public components of a private key to standard output: +.PP +.Vb 1 +\& openssl pkey \-in key.pem \-text_pub \-noout +.Ve +.PP +To just output the public part of a private key: +.PP +.Vb 1 +\& openssl pkey \-in key.pem \-pubout \-out pubkey.pem +.Ve +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBgenpkey\fR\|(1), \fBrsa\fR\|(1), \fBpkcs8\fR\|(1), +\&\fBdsa\fR\|(1), \fBgenrsa\fR\|(1), \fBgendsa\fR\|(1) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2006\-2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/pkeyparam.1 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/pkeyparam.1 new file mode 100644 index 00000000..b7c07bbd --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/pkeyparam.1 @@ -0,0 +1,207 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "PKEYPARAM 1" +.TH PKEYPARAM 1 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +openssl\-pkeyparam, pkeyparam \- public key algorithm parameter processing tool +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +\&\fBopenssl\fR \fBpkeyparam\fR +[\fB\-help\fR] +[\fB\-in filename\fR] +[\fB\-out filename\fR] +[\fB\-text\fR] +[\fB\-noout\fR] +[\fB\-engine id\fR] +[\fB\-check\fR] +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fBpkeyparam\fR command processes public key algorithm parameters. +They can be checked for correctness and their components printed out. +.SH "OPTIONS" +.IX Header "OPTIONS" +.IP "\fB\-help\fR" 4 +.IX Item "-help" +Print out a usage message. +.IP "\fB\-in filename\fR" 4 +.IX Item "-in filename" +This specifies the input filename to read parameters from or standard input if +this option is not specified. +.IP "\fB\-out filename\fR" 4 +.IX Item "-out filename" +This specifies the output filename to write parameters to or standard output if +this option is not specified. +.IP "\fB\-text\fR" 4 +.IX Item "-text" +Prints out the parameters in plain text in addition to the encoded version. +.IP "\fB\-noout\fR" 4 +.IX Item "-noout" +Do not output the encoded version of the parameters. +.IP "\fB\-engine id\fR" 4 +.IX Item "-engine id" +Specifying an engine (by its unique \fBid\fR string) will cause \fBpkeyparam\fR +to attempt to obtain a functional reference to the specified engine, +thus initialising it if needed. The engine will then be set as the default +for all available algorithms. +.IP "\fB\-check\fR" 4 +.IX Item "-check" +This option checks the correctness of parameters. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +Print out text version of parameters: +.PP +.Vb 1 +\& openssl pkeyparam \-in param.pem \-text +.Ve +.SH "NOTES" +.IX Header "NOTES" +There are no \fB\-inform\fR or \fB\-outform\fR options for this command because only +\&\s-1PEM\s0 format is supported because the key type is determined by the \s-1PEM\s0 headers. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBgenpkey\fR\|(1), \fBrsa\fR\|(1), \fBpkcs8\fR\|(1), +\&\fBdsa\fR\|(1), \fBgenrsa\fR\|(1), \fBgendsa\fR\|(1) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2006\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/pkeyutl.1 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/pkeyutl.1 new file mode 100644 index 00000000..da2873b9 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/pkeyutl.1 @@ -0,0 +1,428 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "PKEYUTL 1" +.TH PKEYUTL 1 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +openssl\-pkeyutl, pkeyutl \- public key algorithm utility +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +\&\fBopenssl\fR \fBpkeyutl\fR +[\fB\-help\fR] +[\fB\-in file\fR] +[\fB\-out file\fR] +[\fB\-sigfile file\fR] +[\fB\-inkey file\fR] +[\fB\-keyform PEM|DER|ENGINE\fR] +[\fB\-passin arg\fR] +[\fB\-peerkey file\fR] +[\fB\-peerform PEM|DER|ENGINE\fR] +[\fB\-pubin\fR] +[\fB\-certin\fR] +[\fB\-rev\fR] +[\fB\-sign\fR] +[\fB\-verify\fR] +[\fB\-verifyrecover\fR] +[\fB\-encrypt\fR] +[\fB\-decrypt\fR] +[\fB\-derive\fR] +[\fB\-kdf algorithm\fR] +[\fB\-kdflen length\fR] +[\fB\-pkeyopt opt:value\fR] +[\fB\-hexdump\fR] +[\fB\-asn1parse\fR] +[\fB\-rand file...\fR] +[\fB\-writerand file\fR] +[\fB\-engine id\fR] +[\fB\-engine_impl\fR] +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fBpkeyutl\fR command can be used to perform low level public key operations +using any supported algorithm. +.SH "OPTIONS" +.IX Header "OPTIONS" +.IP "\fB\-help\fR" 4 +.IX Item "-help" +Print out a usage message. +.IP "\fB\-in filename\fR" 4 +.IX Item "-in filename" +This specifies the input filename to read data from or standard input +if this option is not specified. +.IP "\fB\-out filename\fR" 4 +.IX Item "-out filename" +Specifies the output filename to write to or standard output by +default. +.IP "\fB\-sigfile file\fR" 4 +.IX Item "-sigfile file" +Signature file, required for \fBverify\fR operations only +.IP "\fB\-inkey file\fR" 4 +.IX Item "-inkey file" +The input key file, by default it should be a private key. +.IP "\fB\-keyform PEM|DER|ENGINE\fR" 4 +.IX Item "-keyform PEM|DER|ENGINE" +The key format \s-1PEM, DER\s0 or \s-1ENGINE.\s0 Default is \s-1PEM.\s0 +.IP "\fB\-passin arg\fR" 4 +.IX Item "-passin arg" +The input key password source. For more information about the format of \fBarg\fR +see the \fB\s-1PASS PHRASE ARGUMENTS\s0\fR section in \fBopenssl\fR\|(1). +.IP "\fB\-peerkey file\fR" 4 +.IX Item "-peerkey file" +The peer key file, used by key derivation (agreement) operations. +.IP "\fB\-peerform PEM|DER|ENGINE\fR" 4 +.IX Item "-peerform PEM|DER|ENGINE" +The peer key format \s-1PEM, DER\s0 or \s-1ENGINE.\s0 Default is \s-1PEM.\s0 +.IP "\fB\-pubin\fR" 4 +.IX Item "-pubin" +The input file is a public key. +.IP "\fB\-certin\fR" 4 +.IX Item "-certin" +The input is a certificate containing a public key. +.IP "\fB\-rev\fR" 4 +.IX Item "-rev" +Reverse the order of the input buffer. This is useful for some libraries +(such as CryptoAPI) which represent the buffer in little endian format. +.IP "\fB\-sign\fR" 4 +.IX Item "-sign" +Sign the input data (which must be a hash) and output the signed result. This +requires a private key. +.IP "\fB\-verify\fR" 4 +.IX Item "-verify" +Verify the input data (which must be a hash) against the signature file and +indicate if the verification succeeded or failed. +.IP "\fB\-verifyrecover\fR" 4 +.IX Item "-verifyrecover" +Verify the input data (which must be a hash) and output the recovered data. +.IP "\fB\-encrypt\fR" 4 +.IX Item "-encrypt" +Encrypt the input data using a public key. +.IP "\fB\-decrypt\fR" 4 +.IX Item "-decrypt" +Decrypt the input data using a private key. +.IP "\fB\-derive\fR" 4 +.IX Item "-derive" +Derive a shared secret using the peer key. +.IP "\fB\-kdf algorithm\fR" 4 +.IX Item "-kdf algorithm" +Use key derivation function \fBalgorithm\fR. The supported algorithms are +at present \fB\s-1TLS1\-PRF\s0\fR and \fB\s-1HKDF\s0\fR. +Note: additional parameters and the \s-1KDF\s0 output length will normally have to be +set for this to work. +See \fBEVP_PKEY_CTX_set_hkdf_md\fR\|(3) and \fBEVP_PKEY_CTX_set_tls1_prf_md\fR\|(3) +for the supported string parameters of each algorithm. +.IP "\fB\-kdflen length\fR" 4 +.IX Item "-kdflen length" +Set the output length for \s-1KDF.\s0 +.IP "\fB\-pkeyopt opt:value\fR" 4 +.IX Item "-pkeyopt opt:value" +Public key options specified as opt:value. See \s-1NOTES\s0 below for more details. +.IP "\fB\-hexdump\fR" 4 +.IX Item "-hexdump" +hex dump the output data. +.IP "\fB\-asn1parse\fR" 4 +.IX Item "-asn1parse" +Parse the \s-1ASN.1\s0 output data, this is useful when combined with the +\&\fB\-verifyrecover\fR option when an \s-1ASN1\s0 structure is signed. +.IP "\fB\-rand file...\fR" 4 +.IX Item "-rand file..." +A file or files containing random data used to seed the random number +generator. +Multiple files can be specified separated by an OS-dependent character. +The separator is \fB;\fR for MS-Windows, \fB,\fR for OpenVMS, and \fB:\fR for +all others. +.IP "[\fB\-writerand file\fR]" 4 +.IX Item "[-writerand file]" +Writes random data to the specified \fIfile\fR upon exit. +This can be used with a subsequent \fB\-rand\fR flag. +.IP "\fB\-engine id\fR" 4 +.IX Item "-engine id" +Specifying an engine (by its unique \fBid\fR string) will cause \fBpkeyutl\fR +to attempt to obtain a functional reference to the specified engine, +thus initialising it if needed. The engine will then be set as the default +for all available algorithms. +.IP "\fB\-engine_impl\fR" 4 +.IX Item "-engine_impl" +When used with the \fB\-engine\fR option, it specifies to also use +engine \fBid\fR for crypto operations. +.SH "NOTES" +.IX Header "NOTES" +The operations and options supported vary according to the key algorithm +and its implementation. The OpenSSL operations and options are indicated below. +.PP +Unless otherwise mentioned all algorithms support the \fBdigest:alg\fR option +which specifies the digest in use for sign, verify and verifyrecover operations. +The value \fBalg\fR should represent a digest name as used in the +\&\fBEVP_get_digestbyname()\fR function for example \fBsha1\fR. This value is not used to +hash the input data. It is used (by some algorithms) for sanity-checking the +lengths of data passed in to the \fBpkeyutl\fR and for creating the structures that +make up the signature (e.g. \fBDigestInfo\fR in \s-1RSASSA\s0 PKCS#1 v1.5 signatures). +.PP +This utility does not hash the input data but rather it will use the data +directly as input to the signature algorithm. Depending on the key type, +signature type, and mode of padding, the maximum acceptable lengths of input +data differ. The signed data can't be longer than the key modulus with \s-1RSA.\s0 In +case of \s-1ECDSA\s0 and \s-1DSA\s0 the data shouldn't be longer than the field +size, otherwise it will be silently truncated to the field size. In any event +the input size must not be larger than the largest supported digest size. +.PP +In other words, if the value of digest is \fBsha1\fR the input should be the 20 +bytes long binary encoding of the \s-1SHA\-1\s0 hash function output. +.PP +The Ed25519 and Ed448 signature algorithms are not supported by this utility. +They accept non-hashed input, but this utility can only be used to sign hashed +input. +.SH "RSA ALGORITHM" +.IX Header "RSA ALGORITHM" +The \s-1RSA\s0 algorithm generally supports the encrypt, decrypt, sign, +verify and verifyrecover operations. However, some padding modes +support only a subset of these operations. The following additional +\&\fBpkeyopt\fR values are supported: +.IP "\fBrsa_padding_mode:mode\fR" 4 +.IX Item "rsa_padding_mode:mode" +This sets the \s-1RSA\s0 padding mode. Acceptable values for \fBmode\fR are \fBpkcs1\fR for +PKCS#1 padding, \fBsslv23\fR for SSLv23 padding, \fBnone\fR for no padding, \fBoaep\fR +for \fB\s-1OAEP\s0\fR mode, \fBx931\fR for X9.31 mode and \fBpss\fR for \s-1PSS.\s0 +.Sp +In PKCS#1 padding if the message digest is not set then the supplied data is +signed or verified directly instead of using a \fBDigestInfo\fR structure. If a +digest is set then the a \fBDigestInfo\fR structure is used and its the length +must correspond to the digest type. +.Sp +For \fBoaep\fR mode only encryption and decryption is supported. +.Sp +For \fBx931\fR if the digest type is set it is used to format the block data +otherwise the first byte is used to specify the X9.31 digest \s-1ID.\s0 Sign, +verify and verifyrecover are can be performed in this mode. +.Sp +For \fBpss\fR mode only sign and verify are supported and the digest type must be +specified. +.IP "\fBrsa_pss_saltlen:len\fR" 4 +.IX Item "rsa_pss_saltlen:len" +For \fBpss\fR mode only this option specifies the salt length. Three special +values are supported: \*(L"digest\*(R" sets the salt length to the digest length, +\&\*(L"max\*(R" sets the salt length to the maximum permissible value. When verifying +\&\*(L"auto\*(R" causes the salt length to be automatically determined based on the +\&\fB\s-1PSS\s0\fR block structure. +.IP "\fBrsa_mgf1_md:digest\fR" 4 +.IX Item "rsa_mgf1_md:digest" +For \s-1PSS\s0 and \s-1OAEP\s0 padding sets the \s-1MGF1\s0 digest. If the \s-1MGF1\s0 digest is not +explicitly set in \s-1PSS\s0 mode then the signing digest is used. +.SH "RSA-PSS ALGORITHM" +.IX Header "RSA-PSS ALGORITHM" +The RSA-PSS algorithm is a restricted version of the \s-1RSA\s0 algorithm which only +supports the sign and verify operations with \s-1PSS\s0 padding. The following +additional \fBpkeyopt\fR values are supported: +.IP "\fBrsa_padding_mode:mode\fR, \fBrsa_pss_saltlen:len\fR, \fBrsa_mgf1_md:digest\fR" 4 +.IX Item "rsa_padding_mode:mode, rsa_pss_saltlen:len, rsa_mgf1_md:digest" +These have the same meaning as the \fB\s-1RSA\s0\fR algorithm with some additional +restrictions. The padding mode can only be set to \fBpss\fR which is the +default value. +.Sp +If the key has parameter restrictions than the digest, \s-1MGF1\s0 +digest and salt length are set to the values specified in the parameters. +The digest and \s-1MG\s0 cannot be changed and the salt length cannot be set to a +value less than the minimum restriction. +.SH "DSA ALGORITHM" +.IX Header "DSA ALGORITHM" +The \s-1DSA\s0 algorithm supports signing and verification operations only. Currently +there are no additional \fB\-pkeyopt\fR options other than \fBdigest\fR. The \s-1SHA1\s0 +digest is assumed by default. +.SH "DH ALGORITHM" +.IX Header "DH ALGORITHM" +The \s-1DH\s0 algorithm only supports the derivation operation and no additional +\&\fB\-pkeyopt\fR options. +.SH "EC ALGORITHM" +.IX Header "EC ALGORITHM" +The \s-1EC\s0 algorithm supports sign, verify and derive operations. The sign and +verify operations use \s-1ECDSA\s0 and derive uses \s-1ECDH. SHA1\s0 is assumed by default for +the \fB\-pkeyopt\fR \fBdigest\fR option. +.SH "X25519 and X448 ALGORITHMS" +.IX Header "X25519 and X448 ALGORITHMS" +The X25519 and X448 algorithms support key derivation only. Currently there are +no additional options. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +Sign some data using a private key: +.PP +.Vb 1 +\& openssl pkeyutl \-sign \-in file \-inkey key.pem \-out sig +.Ve +.PP +Recover the signed data (e.g. if an \s-1RSA\s0 key is used): +.PP +.Vb 1 +\& openssl pkeyutl \-verifyrecover \-in sig \-inkey key.pem +.Ve +.PP +Verify the signature (e.g. a \s-1DSA\s0 key): +.PP +.Vb 1 +\& openssl pkeyutl \-verify \-in file \-sigfile sig \-inkey key.pem +.Ve +.PP +Sign data using a message digest value (this is currently only valid for \s-1RSA\s0): +.PP +.Vb 1 +\& openssl pkeyutl \-sign \-in file \-inkey key.pem \-out sig \-pkeyopt digest:sha256 +.Ve +.PP +Derive a shared secret value: +.PP +.Vb 1 +\& openssl pkeyutl \-derive \-inkey key.pem \-peerkey pubkey.pem \-out secret +.Ve +.PP +Hexdump 48 bytes of \s-1TLS1 PRF\s0 using digest \fB\s-1SHA256\s0\fR and shared secret and +seed consisting of the single byte 0xFF: +.PP +.Vb 2 +\& openssl pkeyutl \-kdf TLS1\-PRF \-kdflen 48 \-pkeyopt md:SHA256 \e +\& \-pkeyopt hexsecret:ff \-pkeyopt hexseed:ff \-hexdump +.Ve +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBgenpkey\fR\|(1), \fBpkey\fR\|(1), \fBrsautl\fR\|(1) +\&\fBdgst\fR\|(1), \fBrsa\fR\|(1), \fBgenrsa\fR\|(1), +\&\fBEVP_PKEY_CTX_set_hkdf_md\fR\|(3), \fBEVP_PKEY_CTX_set_tls1_prf_md\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2006\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/prime.1 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/prime.1 new file mode 100644 index 00000000..3e98744c --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/prime.1 @@ -0,0 +1,189 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "PRIME 1" +.TH PRIME 1 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +openssl\-prime, prime \- compute prime numbers +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +\&\fBopenssl prime\fR +[\fB\-help\fR] +[\fB\-hex\fR] +[\fB\-generate\fR] +[\fB\-bits\fR] +[\fB\-safe\fR] +[\fB\-checks\fR] +[\fInumber...\fR] +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fBprime\fR command checks if the specified numbers are prime. +.PP +If no numbers are given on the command line, the \fB\-generate\fR flag should +be used to generate primes according to the requirements specified by the +rest of the flags. +.SH "OPTIONS" +.IX Header "OPTIONS" +.IP "[\fB\-help\fR]" 4 +.IX Item "[-help]" +Display an option summary. +.IP "[\fB\-hex\fR]" 4 +.IX Item "[-hex]" +Generate hex output. +.IP "[\fB\-generate\fR]" 4 +.IX Item "[-generate]" +Generate a prime number. +.IP "[\fB\-bits num\fR]" 4 +.IX Item "[-bits num]" +Generate a prime with \fBnum\fR bits. +.IP "[\fB\-safe\fR]" 4 +.IX Item "[-safe]" +When used with \fB\-generate\fR, generates a \*(L"safe\*(R" prime. If the number +generated is \fBn\fR, then check that \fB(n\-1)/2\fR is also prime. +.IP "[\fB\-checks num\fR]" 4 +.IX Item "[-checks num]" +Perform the checks \fBnum\fR times to see that the generated number +is prime. The default is 20. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/rand.1 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/rand.1 new file mode 100644 index 00000000..d6509206 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/rand.1 @@ -0,0 +1,214 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "RAND 1" +.TH RAND 1 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +openssl\-rand, rand \- generate pseudo\-random bytes +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +\&\fBopenssl rand\fR +[\fB\-help\fR] +[\fB\-out\fR \fIfile\fR] +[\fB\-rand file...\fR] +[\fB\-writerand file\fR] +[\fB\-base64\fR] +[\fB\-hex\fR] +\&\fInum\fR +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +This command generates \fInum\fR random bytes using a cryptographically +secure pseudo random number generator (\s-1CSPRNG\s0). +.PP +The random bytes are generated using the \fBRAND_bytes\fR\|(3) function, +which provides a security level of 256 bits, provided it managed to +seed itself successfully from a trusted operating system entropy source. +Otherwise, the command will fail with a nonzero error code. +For more details, see \fBRAND_bytes\fR\|(3), \s-1\fBRAND\s0\fR\|(7), and \s-1\fBRAND_DRBG\s0\fR\|(7). +.SH "OPTIONS" +.IX Header "OPTIONS" +.IP "\fB\-help\fR" 4 +.IX Item "-help" +Print out a usage message. +.IP "\fB\-out file\fR" 4 +.IX Item "-out file" +Write to \fIfile\fR instead of standard output. +.IP "\fB\-rand file...\fR" 4 +.IX Item "-rand file..." +A file or files containing random data used to seed the random number +generator. +Multiple files can be specified separated by an OS-dependent character. +The separator is \fB;\fR for MS-Windows, \fB,\fR for OpenVMS, and \fB:\fR for +all others. +Explicitly specifying a seed file is in general not necessary, see the +\&\*(L"\s-1NOTES\*(R"\s0 section for more information. +.IP "[\fB\-writerand file\fR]" 4 +.IX Item "[-writerand file]" +Writes random data to the specified \fIfile\fR upon exit. +This can be used with a subsequent \fB\-rand\fR flag. +.IP "\fB\-base64\fR" 4 +.IX Item "-base64" +Perform base64 encoding on the output. +.IP "\fB\-hex\fR" 4 +.IX Item "-hex" +Show the output as a hex string. +.SH "NOTES" +.IX Header "NOTES" +Prior to OpenSSL 1.1.1, it was common for applications to store information +about the state of the random-number generator in a file that was loaded +at startup and rewritten upon exit. On modern operating systems, this is +generally no longer necessary as OpenSSL will seed itself from a trusted +entropy source provided by the operating system. The \fB\-rand\fR and +\&\fB\-writerand\fR flags are still supported for special platforms or +circumstances that might require them. +.PP +It is generally an error to use the same seed file more than once and +every use of \fB\-rand\fR should be paired with \fB\-writerand\fR. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBRAND_bytes\fR\|(3), +\&\s-1\fBRAND\s0\fR\|(7), +\&\s-1\fBRAND_DRBG\s0\fR\|(7) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2020 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/rehash.1 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/rehash.1 new file mode 100644 index 00000000..c2fcab28 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/rehash.1 @@ -0,0 +1,259 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "REHASH 1" +.TH REHASH 1 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +openssl\-c_rehash, openssl\-rehash, c_rehash, rehash \- Create symbolic links to files named by the hash values +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +\&\fBopenssl\fR +\&\fBrehash\fR +\&\fB[\-h]\fR +\&\fB[\-help]\fR +\&\fB[\-old]\fR +\&\fB[\-n]\fR +\&\fB[\-v]\fR +[ \fIdirectory\fR...] +.PP +\&\fBc_rehash\fR +\&\fIflags...\fR +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +On some platforms, the OpenSSL \fBrehash\fR command is available as +an external script called \fBc_rehash\fR. They are functionally equivalent, +except for minor differences noted below. +.PP +\&\fBrehash\fR scans directories and calculates a hash value of each +\&\f(CW\*(C`.pem\*(C'\fR, \f(CW\*(C`.crt\*(C'\fR, \f(CW\*(C`.cer\*(C'\fR, or \f(CW\*(C`.crl\*(C'\fR +file in the specified directory list and creates symbolic links +for each file, where the name of the link is the hash value. +(If the platform does not support symbolic links, a copy is made.) +This utility is useful as many programs that use OpenSSL require +directories to be set up like this in order to find certificates. +.PP +If any directories are named on the command line, then those are +processed in turn. If not, then the \fB\s-1SSL_CERT_DIR\s0\fR environment variable +is consulted; this should be a colon-separated list of directories, +like the Unix \fB\s-1PATH\s0\fR variable. +If that is not set then the default directory (installation-specific +but often \fB/usr/local/ssl/certs\fR) is processed. +.PP +In order for a directory to be processed, the user must have write +permissions on that directory, otherwise an error will be generated. +.PP +The links created are of the form \f(CW\*(C`HHHHHHHH.D\*(C'\fR, where each \fBH\fR +is a hexadecimal character and \fBD\fR is a single decimal digit. +When processing a directory, \fBrehash\fR will first remove all links +that have a name in that syntax, even if they are being used for some +other purpose. +To skip the removal step, use the \fB\-n\fR flag. +Hashes for \s-1CRL\s0's look similar except the letter \fBr\fR appears after +the period, like this: \f(CW\*(C`HHHHHHHH.rD\*(C'\fR. +.PP +Multiple objects may have the same hash; they will be indicated by +incrementing the \fBD\fR value. Duplicates are found by comparing the +full \s-1SHA\-1\s0 fingerprint. A warning will be displayed if a duplicate +is found. +.PP +A warning will also be displayed if there are files that +cannot be parsed as either a certificate or a \s-1CRL\s0 or if +more than one such object appears in the file. +.SS "Script Configuration" +.IX Subsection "Script Configuration" +The \fBc_rehash\fR script +uses the \fBopenssl\fR program to compute the hashes and +fingerprints. If not found in the user's \fB\s-1PATH\s0\fR, then set the +\&\fB\s-1OPENSSL\s0\fR environment variable to the full pathname. +Any program can be used, it will be invoked as follows for either +a certificate or \s-1CRL:\s0 +.PP +.Vb 2 +\& $OPENSSL x509 \-hash \-fingerprint \-noout \-in FILENAME +\& $OPENSSL crl \-hash \-fingerprint \-noout \-in FILENAME +.Ve +.PP +where \fB\s-1FILENAME\s0\fR is the filename. It must output the hash of the +file on the first line, and the fingerprint on the second, +optionally prefixed with some text and an equals sign. +.SH "OPTIONS" +.IX Header "OPTIONS" +.IP "\fB\-help\fR \fB\-h\fR" 4 +.IX Item "-help -h" +Display a brief usage message. +.IP "\fB\-old\fR" 4 +.IX Item "-old" +Use old-style hashing (\s-1MD5,\s0 as opposed to \s-1SHA\-1\s0) for generating +links to be used for releases before 1.0.0. +Note that current versions will not use the old style. +.IP "\fB\-n\fR" 4 +.IX Item "-n" +Do not remove existing links. +This is needed when keeping new and old-style links in the same directory. +.IP "\fB\-compat\fR" 4 +.IX Item "-compat" +Generate links for both old-style (\s-1MD5\s0) and new-style (\s-1SHA1\s0) hashing. +This allows releases before 1.0.0 to use these links along-side newer +releases. +.IP "\fB\-v\fR" 4 +.IX Item "-v" +Print messages about old links removed and new links created. +By default, \fBrehash\fR only lists each directory as it is processed. +.SH "ENVIRONMENT" +.IX Header "ENVIRONMENT" +.IP "\fB\s-1OPENSSL\s0\fR" 4 +.IX Item "OPENSSL" +The path to an executable to use to generate hashes and +fingerprints (see above). +.IP "\fB\s-1SSL_CERT_DIR\s0\fR" 4 +.IX Item "SSL_CERT_DIR" +Colon separated list of directories to operate on. +Ignored if directories are listed on the command line. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBopenssl\fR\|(1), +\&\fBcrl\fR\|(1). +\&\fBx509\fR\|(1). +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2015\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/req.1 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/req.1 new file mode 100644 index 00000000..ac8f2387 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/req.1 @@ -0,0 +1,797 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "REQ 1" +.TH REQ 1 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +openssl\-req, req \- PKCS#10 certificate request and certificate generating utility +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +\&\fBopenssl\fR \fBreq\fR +[\fB\-help\fR] +[\fB\-inform PEM|DER\fR] +[\fB\-outform PEM|DER\fR] +[\fB\-in filename\fR] +[\fB\-passin arg\fR] +[\fB\-out filename\fR] +[\fB\-passout arg\fR] +[\fB\-text\fR] +[\fB\-pubkey\fR] +[\fB\-noout\fR] +[\fB\-verify\fR] +[\fB\-modulus\fR] +[\fB\-new\fR] +[\fB\-rand file...\fR] +[\fB\-writerand file\fR] +[\fB\-newkey rsa:bits\fR] +[\fB\-newkey alg:file\fR] +[\fB\-nodes\fR] +[\fB\-key filename\fR] +[\fB\-keyform PEM|DER\fR] +[\fB\-keyout filename\fR] +[\fB\-keygen_engine id\fR] +[\fB\-\f(BIdigest\fB\fR] +[\fB\-config filename\fR] +[\fB\-multivalue\-rdn\fR] +[\fB\-x509\fR] +[\fB\-days n\fR] +[\fB\-set_serial n\fR] +[\fB\-newhdr\fR] +[\fB\-addext ext\fR] +[\fB\-extensions section\fR] +[\fB\-reqexts section\fR] +[\fB\-precert\fR] +[\fB\-utf8\fR] +[\fB\-nameopt\fR] +[\fB\-reqopt\fR] +[\fB\-subject\fR] +[\fB\-subj arg\fR] +[\fB\-sigopt nm:v\fR] +[\fB\-batch\fR] +[\fB\-verbose\fR] +[\fB\-engine id\fR] +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fBreq\fR command primarily creates and processes certificate requests +in PKCS#10 format. It can additionally create self signed certificates +for use as root CAs for example. +.SH "OPTIONS" +.IX Header "OPTIONS" +.IP "\fB\-help\fR" 4 +.IX Item "-help" +Print out a usage message. +.IP "\fB\-inform DER|PEM\fR" 4 +.IX Item "-inform DER|PEM" +This specifies the input format. The \fB\s-1DER\s0\fR option uses an \s-1ASN1 DER\s0 encoded +form compatible with the PKCS#10. The \fB\s-1PEM\s0\fR form is the default format: it +consists of the \fB\s-1DER\s0\fR format base64 encoded with additional header and +footer lines. +.IP "\fB\-outform DER|PEM\fR" 4 +.IX Item "-outform DER|PEM" +This specifies the output format, the options have the same meaning and default +as the \fB\-inform\fR option. +.IP "\fB\-in filename\fR" 4 +.IX Item "-in filename" +This specifies the input filename to read a request from or standard input +if this option is not specified. A request is only read if the creation +options (\fB\-new\fR and \fB\-newkey\fR) are not specified. +.IP "\fB\-sigopt nm:v\fR" 4 +.IX Item "-sigopt nm:v" +Pass options to the signature algorithm during sign or verify operations. +Names and values of these options are algorithm-specific. +.IP "\fB\-passin arg\fR" 4 +.IX Item "-passin arg" +The input file password source. For more information about the format of \fBarg\fR +see the \fB\s-1PASS PHRASE ARGUMENTS\s0\fR section in \fBopenssl\fR\|(1). +.IP "\fB\-out filename\fR" 4 +.IX Item "-out filename" +This specifies the output filename to write to or standard output by +default. +.IP "\fB\-passout arg\fR" 4 +.IX Item "-passout arg" +The output file password source. For more information about the format of \fBarg\fR +see the \fB\s-1PASS PHRASE ARGUMENTS\s0\fR section in \fBopenssl\fR\|(1). +.IP "\fB\-text\fR" 4 +.IX Item "-text" +Prints out the certificate request in text form. +.IP "\fB\-subject\fR" 4 +.IX Item "-subject" +Prints out the request subject (or certificate subject if \fB\-x509\fR is +specified) +.IP "\fB\-pubkey\fR" 4 +.IX Item "-pubkey" +Outputs the public key. +.IP "\fB\-noout\fR" 4 +.IX Item "-noout" +This option prevents output of the encoded version of the request. +.IP "\fB\-modulus\fR" 4 +.IX Item "-modulus" +This option prints out the value of the modulus of the public key +contained in the request. +.IP "\fB\-verify\fR" 4 +.IX Item "-verify" +Verifies the signature on the request. +.IP "\fB\-new\fR" 4 +.IX Item "-new" +This option generates a new certificate request. It will prompt +the user for the relevant field values. The actual fields +prompted for and their maximum and minimum sizes are specified +in the configuration file and any requested extensions. +.Sp +If the \fB\-key\fR option is not used it will generate a new \s-1RSA\s0 private +key using information specified in the configuration file. +.IP "\fB\-rand file...\fR" 4 +.IX Item "-rand file..." +A file or files containing random data used to seed the random number +generator. +Multiple files can be specified separated by an OS-dependent character. +The separator is \fB;\fR for MS-Windows, \fB,\fR for OpenVMS, and \fB:\fR for +all others. +.IP "[\fB\-writerand file\fR]" 4 +.IX Item "[-writerand file]" +Writes random data to the specified \fIfile\fR upon exit. +This can be used with a subsequent \fB\-rand\fR flag. +.IP "\fB\-newkey arg\fR" 4 +.IX Item "-newkey arg" +This option creates a new certificate request and a new private +key. The argument takes one of several forms. \fBrsa:nbits\fR, where +\&\fBnbits\fR is the number of bits, generates an \s-1RSA\s0 key \fBnbits\fR +in size. If \fBnbits\fR is omitted, i.e. \fB\-newkey rsa\fR specified, +the default key size, specified in the configuration file is used. +.Sp +All other algorithms support the \fB\-newkey alg:file\fR form, where file may be +an algorithm parameter file, created by the \fBgenpkey \-genparam\fR command +or and X.509 certificate for a key with appropriate algorithm. +.Sp +\&\fBparam:file\fR generates a key using the parameter file or certificate \fBfile\fR, +the algorithm is determined by the parameters. \fBalgname:file\fR use algorithm +\&\fBalgname\fR and parameter file \fBfile\fR: the two algorithms must match or an +error occurs. \fBalgname\fR just uses algorithm \fBalgname\fR, and parameters, +if necessary should be specified via \fB\-pkeyopt\fR parameter. +.Sp +\&\fBdsa:filename\fR generates a \s-1DSA\s0 key using the parameters +in the file \fBfilename\fR. \fBec:filename\fR generates \s-1EC\s0 key (usable both with +\&\s-1ECDSA\s0 or \s-1ECDH\s0 algorithms), \fBgost2001:filename\fR generates \s-1GOST R +34.10\-2001\s0 key (requires \fBccgost\fR engine configured in the configuration +file). If just \fBgost2001\fR is specified a parameter set should be +specified by \fB\-pkeyopt paramset:X\fR +.IP "\fB\-pkeyopt opt:value\fR" 4 +.IX Item "-pkeyopt opt:value" +Set the public key algorithm option \fBopt\fR to \fBvalue\fR. The precise set of +options supported depends on the public key algorithm used and its +implementation. See \fB\s-1KEY GENERATION OPTIONS\s0\fR in the \fBgenpkey\fR manual page +for more details. +.IP "\fB\-key filename\fR" 4 +.IX Item "-key filename" +This specifies the file to read the private key from. It also +accepts PKCS#8 format private keys for \s-1PEM\s0 format files. +.IP "\fB\-keyform PEM|DER\fR" 4 +.IX Item "-keyform PEM|DER" +The format of the private key file specified in the \fB\-key\fR +argument. \s-1PEM\s0 is the default. +.IP "\fB\-keyout filename\fR" 4 +.IX Item "-keyout filename" +This gives the filename to write the newly created private key to. +If this option is not specified then the filename present in the +configuration file is used. +.IP "\fB\-nodes\fR" 4 +.IX Item "-nodes" +If this option is specified then if a private key is created it +will not be encrypted. +.IP "\fB\-\f(BIdigest\fB\fR" 4 +.IX Item "-digest" +This specifies the message digest to sign the request. +Any digest supported by the OpenSSL \fBdgst\fR command can be used. +This overrides the digest algorithm specified in +the configuration file. +.Sp +Some public key algorithms may override this choice. For instance, \s-1DSA\s0 +signatures always use \s-1SHA1, GOST R 34.10\s0 signatures always use +\&\s-1GOST R 34.11\-94\s0 (\fB\-md_gost94\fR), Ed25519 and Ed448 never use any digest. +.IP "\fB\-config filename\fR" 4 +.IX Item "-config filename" +This allows an alternative configuration file to be specified. +Optional; for a description of the default value, +see \*(L"\s-1COMMAND SUMMARY\*(R"\s0 in \fBopenssl\fR\|(1). +.IP "\fB\-subj arg\fR" 4 +.IX Item "-subj arg" +Sets subject name for new request or supersedes the subject name +when processing a request. +The arg must be formatted as \fI/type0=value0/type1=value1/type2=...\fR. +Keyword characters may be escaped by \e (backslash), and whitespace is retained. +Empty values are permitted, but the corresponding type will not be included +in the request. +.IP "\fB\-multivalue\-rdn\fR" 4 +.IX Item "-multivalue-rdn" +This option causes the \-subj argument to be interpreted with full +support for multivalued RDNs. Example: +.Sp +\&\fI/DC=org/DC=OpenSSL/DC=users/UID=123456+CN=John Doe\fR +.Sp +If \-multi\-rdn is not used then the \s-1UID\s0 value is \fI123456+CN=John Doe\fR. +.IP "\fB\-x509\fR" 4 +.IX Item "-x509" +This option outputs a self signed certificate instead of a certificate +request. This is typically used to generate a test certificate or +a self signed root \s-1CA.\s0 The extensions added to the certificate +(if any) are specified in the configuration file. Unless specified +using the \fBset_serial\fR option, a large random number will be used for +the serial number. +.Sp +If existing request is specified with the \fB\-in\fR option, it is converted +to the self signed certificate otherwise new request is created. +.IP "\fB\-days n\fR" 4 +.IX Item "-days n" +When the \fB\-x509\fR option is being used this specifies the number of +days to certify the certificate for, otherwise it is ignored. \fBn\fR should +be a positive integer. The default is 30 days. +.IP "\fB\-set_serial n\fR" 4 +.IX Item "-set_serial n" +Serial number to use when outputting a self signed certificate. This +may be specified as a decimal value or a hex value if preceded by \fB0x\fR. +.IP "\fB\-addext ext\fR" 4 +.IX Item "-addext ext" +Add a specific extension to the certificate (if the \fB\-x509\fR option is +present) or certificate request. The argument must have the form of +a key=value pair as it would appear in a config file. +.Sp +This option can be given multiple times. +.IP "\fB\-extensions section\fR" 4 +.IX Item "-extensions section" +.PD 0 +.IP "\fB\-reqexts section\fR" 4 +.IX Item "-reqexts section" +.PD +These options specify alternative sections to include certificate +extensions (if the \fB\-x509\fR option is present) or certificate +request extensions. This allows several different sections to +be used in the same configuration file to specify requests for +a variety of purposes. +.IP "\fB\-precert\fR" 4 +.IX Item "-precert" +A poison extension will be added to the certificate, making it a +\&\*(L"pre-certificate\*(R" (see \s-1RFC6962\s0). This can be submitted to Certificate +Transparency logs in order to obtain signed certificate timestamps (SCTs). +These SCTs can then be embedded into the pre-certificate as an extension, before +removing the poison and signing the certificate. +.Sp +This implies the \fB\-new\fR flag. +.IP "\fB\-utf8\fR" 4 +.IX Item "-utf8" +This option causes field values to be interpreted as \s-1UTF8\s0 strings, by +default they are interpreted as \s-1ASCII.\s0 This means that the field +values, whether prompted from a terminal or obtained from a +configuration file, must be valid \s-1UTF8\s0 strings. +.IP "\fB\-nameopt option\fR" 4 +.IX Item "-nameopt option" +Option which determines how the subject or issuer names are displayed. The +\&\fBoption\fR argument can be a single option or multiple options separated by +commas. Alternatively the \fB\-nameopt\fR switch may be used more than once to +set multiple options. See the \fBx509\fR\|(1) manual page for details. +.IP "\fB\-reqopt\fR" 4 +.IX Item "-reqopt" +Customise the output format used with \fB\-text\fR. The \fBoption\fR argument can be +a single option or multiple options separated by commas. +.Sp +See discussion of the \fB\-certopt\fR parameter in the \fBx509\fR\|(1) +command. +.IP "\fB\-newhdr\fR" 4 +.IX Item "-newhdr" +Adds the word \fB\s-1NEW\s0\fR to the \s-1PEM\s0 file header and footer lines on the outputted +request. Some software (Netscape certificate server) and some CAs need this. +.IP "\fB\-batch\fR" 4 +.IX Item "-batch" +Non-interactive mode. +.IP "\fB\-verbose\fR" 4 +.IX Item "-verbose" +Print extra details about the operations being performed. +.IP "\fB\-engine id\fR" 4 +.IX Item "-engine id" +Specifying an engine (by its unique \fBid\fR string) will cause \fBreq\fR +to attempt to obtain a functional reference to the specified engine, +thus initialising it if needed. The engine will then be set as the default +for all available algorithms. +.IP "\fB\-keygen_engine id\fR" 4 +.IX Item "-keygen_engine id" +Specifies an engine (by its unique \fBid\fR string) which would be used +for key generation operations. +.SH "CONFIGURATION FILE FORMAT" +.IX Header "CONFIGURATION FILE FORMAT" +The configuration options are specified in the \fBreq\fR section of +the configuration file. As with all configuration files if no +value is specified in the specific section (i.e. \fBreq\fR) then +the initial unnamed or \fBdefault\fR section is searched too. +.PP +The options available are described in detail below. +.IP "\fBinput_password output_password\fR" 4 +.IX Item "input_password output_password" +The passwords for the input private key file (if present) and +the output private key file (if one will be created). The +command line options \fBpassin\fR and \fBpassout\fR override the +configuration file values. +.IP "\fBdefault_bits\fR" 4 +.IX Item "default_bits" +Specifies the default key size in bits. +.Sp +This option is used in conjunction with the \fB\-new\fR option to generate +a new key. It can be overridden by specifying an explicit key size in +the \fB\-newkey\fR option. The smallest accepted key size is 512 bits. If +no key size is specified then 2048 bits is used. +.IP "\fBdefault_keyfile\fR" 4 +.IX Item "default_keyfile" +This is the default filename to write a private key to. If not +specified the key is written to standard output. This can be +overridden by the \fB\-keyout\fR option. +.IP "\fBoid_file\fR" 4 +.IX Item "oid_file" +This specifies a file containing additional \fB\s-1OBJECT IDENTIFIERS\s0\fR. +Each line of the file should consist of the numerical form of the +object identifier followed by white space then the short name followed +by white space and finally the long name. +.IP "\fBoid_section\fR" 4 +.IX Item "oid_section" +This specifies a section in the configuration file containing extra +object identifiers. Each line should consist of the short name of the +object identifier followed by \fB=\fR and the numerical form. The short +and long names are the same when this option is used. +.IP "\fB\s-1RANDFILE\s0\fR" 4 +.IX Item "RANDFILE" +At startup the specified file is loaded into the random number generator, +and at exit 256 bytes will be written to it. +It is used for private key generation. +.IP "\fBencrypt_key\fR" 4 +.IX Item "encrypt_key" +If this is set to \fBno\fR then if a private key is generated it is +\&\fBnot\fR encrypted. This is equivalent to the \fB\-nodes\fR command line +option. For compatibility \fBencrypt_rsa_key\fR is an equivalent option. +.IP "\fBdefault_md\fR" 4 +.IX Item "default_md" +This option specifies the digest algorithm to use. Any digest supported by the +OpenSSL \fBdgst\fR command can be used. This option can be overridden on the +command line. Certain signing algorithms (i.e. Ed25519 and Ed448) will ignore +any digest that has been set. +.IP "\fBstring_mask\fR" 4 +.IX Item "string_mask" +This option masks out the use of certain string types in certain +fields. Most users will not need to change this option. +.Sp +It can be set to several values \fBdefault\fR which is also the default +option uses PrintableStrings, T61Strings and BMPStrings if the +\&\fBpkix\fR value is used then only PrintableStrings and BMPStrings will +be used. This follows the \s-1PKIX\s0 recommendation in \s-1RFC2459.\s0 If the +\&\fButf8only\fR option is used then only UTF8Strings will be used: this +is the \s-1PKIX\s0 recommendation in \s-1RFC2459\s0 after 2003. Finally the \fBnombstr\fR +option just uses PrintableStrings and T61Strings: certain software has +problems with BMPStrings and UTF8Strings: in particular Netscape. +.IP "\fBreq_extensions\fR" 4 +.IX Item "req_extensions" +This specifies the configuration file section containing a list of +extensions to add to the certificate request. It can be overridden +by the \fB\-reqexts\fR command line switch. See the +\&\fBx509v3_config\fR\|(5) manual page for details of the +extension section format. +.IP "\fBx509_extensions\fR" 4 +.IX Item "x509_extensions" +This specifies the configuration file section containing a list of +extensions to add to certificate generated when the \fB\-x509\fR switch +is used. It can be overridden by the \fB\-extensions\fR command line switch. +.IP "\fBprompt\fR" 4 +.IX Item "prompt" +If set to the value \fBno\fR this disables prompting of certificate fields +and just takes values from the config file directly. It also changes the +expected format of the \fBdistinguished_name\fR and \fBattributes\fR sections. +.IP "\fButf8\fR" 4 +.IX Item "utf8" +If set to the value \fByes\fR then field values to be interpreted as \s-1UTF8\s0 +strings, by default they are interpreted as \s-1ASCII.\s0 This means that +the field values, whether prompted from a terminal or obtained from a +configuration file, must be valid \s-1UTF8\s0 strings. +.IP "\fBattributes\fR" 4 +.IX Item "attributes" +This specifies the section containing any request attributes: its format +is the same as \fBdistinguished_name\fR. Typically these may contain the +challengePassword or unstructuredName types. They are currently ignored +by OpenSSL's request signing utilities but some CAs might want them. +.IP "\fBdistinguished_name\fR" 4 +.IX Item "distinguished_name" +This specifies the section containing the distinguished name fields to +prompt for when generating a certificate or certificate request. The format +is described in the next section. +.SH "DISTINGUISHED NAME AND ATTRIBUTE SECTION FORMAT" +.IX Header "DISTINGUISHED NAME AND ATTRIBUTE SECTION FORMAT" +There are two separate formats for the distinguished name and attribute +sections. If the \fBprompt\fR option is set to \fBno\fR then these sections +just consist of field names and values: for example, +.PP +.Vb 3 +\& CN=My Name +\& OU=My Organization +\& emailAddress=someone@somewhere.org +.Ve +.PP +This allows external programs (e.g. \s-1GUI\s0 based) to generate a template file +with all the field names and values and just pass it to \fBreq\fR. An example +of this kind of configuration file is contained in the \fB\s-1EXAMPLES\s0\fR section. +.PP +Alternatively if the \fBprompt\fR option is absent or not set to \fBno\fR then the +file contains field prompting information. It consists of lines of the form: +.PP +.Vb 4 +\& fieldName="prompt" +\& fieldName_default="default field value" +\& fieldName_min= 2 +\& fieldName_max= 4 +.Ve +.PP +\&\*(L"fieldName\*(R" is the field name being used, for example commonName (or \s-1CN\s0). +The \*(L"prompt\*(R" string is used to ask the user to enter the relevant +details. If the user enters nothing then the default value is used if no +default value is present then the field is omitted. A field can +still be omitted if a default value is present if the user just +enters the '.' character. +.PP +The number of characters entered must be between the fieldName_min and +fieldName_max limits: there may be additional restrictions based +on the field being used (for example countryName can only ever be +two characters long and must fit in a PrintableString). +.PP +Some fields (such as organizationName) can be used more than once +in a \s-1DN.\s0 This presents a problem because configuration files will +not recognize the same name occurring twice. To avoid this problem +if the fieldName contains some characters followed by a full stop +they will be ignored. So for example a second organizationName can +be input by calling it \*(L"1.organizationName\*(R". +.PP +The actual permitted field names are any object identifier short or +long names. These are compiled into OpenSSL and include the usual +values such as commonName, countryName, localityName, organizationName, +organizationalUnitName, stateOrProvinceName. Additionally emailAddress +is included as well as name, surname, givenName, initials, and dnQualifier. +.PP +Additional object identifiers can be defined with the \fBoid_file\fR or +\&\fBoid_section\fR options in the configuration file. Any additional fields +will be treated as though they were a DirectoryString. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +Examine and verify certificate request: +.PP +.Vb 1 +\& openssl req \-in req.pem \-text \-verify \-noout +.Ve +.PP +Create a private key and then generate a certificate request from it: +.PP +.Vb 2 +\& openssl genrsa \-out key.pem 2048 +\& openssl req \-new \-key key.pem \-out req.pem +.Ve +.PP +The same but just using req: +.PP +.Vb 1 +\& openssl req \-newkey rsa:2048 \-keyout key.pem \-out req.pem +.Ve +.PP +Generate a self signed root certificate: +.PP +.Vb 1 +\& openssl req \-x509 \-newkey rsa:2048 \-keyout key.pem \-out req.pem +.Ve +.PP +Example of a file pointed to by the \fBoid_file\fR option: +.PP +.Vb 2 +\& 1.2.3.4 shortName A longer Name +\& 1.2.3.6 otherName Other longer Name +.Ve +.PP +Example of a section pointed to by \fBoid_section\fR making use of variable +expansion: +.PP +.Vb 2 +\& testoid1=1.2.3.5 +\& testoid2=${testoid1}.6 +.Ve +.PP +Sample configuration file prompting for field values: +.PP +.Vb 6 +\& [ req ] +\& default_bits = 2048 +\& default_keyfile = privkey.pem +\& distinguished_name = req_distinguished_name +\& attributes = req_attributes +\& req_extensions = v3_ca +\& +\& dirstring_type = nobmp +\& +\& [ req_distinguished_name ] +\& countryName = Country Name (2 letter code) +\& countryName_default = AU +\& countryName_min = 2 +\& countryName_max = 2 +\& +\& localityName = Locality Name (eg, city) +\& +\& organizationalUnitName = Organizational Unit Name (eg, section) +\& +\& commonName = Common Name (eg, YOUR name) +\& commonName_max = 64 +\& +\& emailAddress = Email Address +\& emailAddress_max = 40 +\& +\& [ req_attributes ] +\& challengePassword = A challenge password +\& challengePassword_min = 4 +\& challengePassword_max = 20 +\& +\& [ v3_ca ] +\& +\& subjectKeyIdentifier=hash +\& authorityKeyIdentifier=keyid:always,issuer:always +\& basicConstraints = critical, CA:true +.Ve +.PP +Sample configuration containing all field values: +.PP +.Vb 1 +\& RANDFILE = $ENV::HOME/.rnd +\& +\& [ req ] +\& default_bits = 2048 +\& default_keyfile = keyfile.pem +\& distinguished_name = req_distinguished_name +\& attributes = req_attributes +\& prompt = no +\& output_password = mypass +\& +\& [ req_distinguished_name ] +\& C = GB +\& ST = Test State or Province +\& L = Test Locality +\& O = Organization Name +\& OU = Organizational Unit Name +\& CN = Common Name +\& emailAddress = test@email.address +\& +\& [ req_attributes ] +\& challengePassword = A challenge password +.Ve +.PP +Example of giving the most common attributes (subject and extensions) +on the command line: +.PP +.Vb 4 +\& openssl req \-new \-subj "/C=GB/CN=foo" \e +\& \-addext "subjectAltName = DNS:foo.co.uk" \e +\& \-addext "certificatePolicies = 1.2.3.4" \e +\& \-newkey rsa:2048 \-keyout key.pem \-out req.pem +.Ve +.SH "NOTES" +.IX Header "NOTES" +The header and footer lines in the \fB\s-1PEM\s0\fR format are normally: +.PP +.Vb 2 +\& \-\-\-\-\-BEGIN CERTIFICATE REQUEST\-\-\-\-\- +\& \-\-\-\-\-END CERTIFICATE REQUEST\-\-\-\-\- +.Ve +.PP +some software (some versions of Netscape certificate server) instead needs: +.PP +.Vb 2 +\& \-\-\-\-\-BEGIN NEW CERTIFICATE REQUEST\-\-\-\-\- +\& \-\-\-\-\-END NEW CERTIFICATE REQUEST\-\-\-\-\- +.Ve +.PP +which is produced with the \fB\-newhdr\fR option but is otherwise compatible. +Either form is accepted transparently on input. +.PP +The certificate requests generated by \fBXenroll\fR with \s-1MSIE\s0 have extensions +added. It includes the \fBkeyUsage\fR extension which determines the type of +key (signature only or general purpose) and any additional OIDs entered +by the script in an extendedKeyUsage extension. +.SH "DIAGNOSTICS" +.IX Header "DIAGNOSTICS" +The following messages are frequently asked about: +.PP +.Vb 2 +\& Using configuration from /some/path/openssl.cnf +\& Unable to load config info +.Ve +.PP +This is followed some time later by... +.PP +.Vb 2 +\& unable to find \*(Aqdistinguished_name\*(Aq in config +\& problems making Certificate Request +.Ve +.PP +The first error message is the clue: it can't find the configuration +file! Certain operations (like examining a certificate request) don't +need a configuration file so its use isn't enforced. Generation of +certificates or requests however does need a configuration file. This +could be regarded as a bug. +.PP +Another puzzling message is this: +.PP +.Vb 2 +\& Attributes: +\& a0:00 +.Ve +.PP +this is displayed when no attributes are present and the request includes +the correct empty \fB\s-1SET OF\s0\fR structure (the \s-1DER\s0 encoding of which is 0xa0 +0x00). If you just see: +.PP +.Vb 1 +\& Attributes: +.Ve +.PP +then the \fB\s-1SET OF\s0\fR is missing and the encoding is technically invalid (but +it is tolerated). See the description of the command line option \fB\-asn1\-kludge\fR +for more information. +.SH "BUGS" +.IX Header "BUGS" +OpenSSL's handling of T61Strings (aka TeletexStrings) is broken: it effectively +treats them as \s-1ISO\-8859\-1\s0 (Latin 1), Netscape and \s-1MSIE\s0 have similar behaviour. +This can cause problems if you need characters that aren't available in +PrintableStrings and you don't want to or can't use BMPStrings. +.PP +As a consequence of the T61String handling the only correct way to represent +accented characters in OpenSSL is to use a BMPString: unfortunately Netscape +currently chokes on these. If you have to use accented characters with Netscape +and \s-1MSIE\s0 then you currently need to use the invalid T61String form. +.PP +The current prompting is not very friendly. It doesn't allow you to confirm what +you've just entered. Other things like extensions in certificate requests are +statically defined in the configuration file. Some of these: like an email +address in subjectAltName should be input by the user. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBx509\fR\|(1), \fBca\fR\|(1), \fBgenrsa\fR\|(1), +\&\fBgendsa\fR\|(1), \fBconfig\fR\|(5), +\&\fBx509v3_config\fR\|(5) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/rsa.1 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/rsa.1 new file mode 100644 index 00000000..48d3d829 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/rsa.1 @@ -0,0 +1,330 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "RSA 1" +.TH RSA 1 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +openssl\-rsa, rsa \- RSA key processing tool +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +\&\fBopenssl\fR \fBrsa\fR +[\fB\-help\fR] +[\fB\-inform PEM|DER\fR] +[\fB\-outform PEM|DER\fR] +[\fB\-in filename\fR] +[\fB\-passin arg\fR] +[\fB\-out filename\fR] +[\fB\-passout arg\fR] +[\fB\-aes128\fR] +[\fB\-aes192\fR] +[\fB\-aes256\fR] +[\fB\-aria128\fR] +[\fB\-aria192\fR] +[\fB\-aria256\fR] +[\fB\-camellia128\fR] +[\fB\-camellia192\fR] +[\fB\-camellia256\fR] +[\fB\-des\fR] +[\fB\-des3\fR] +[\fB\-idea\fR] +[\fB\-text\fR] +[\fB\-noout\fR] +[\fB\-modulus\fR] +[\fB\-check\fR] +[\fB\-pubin\fR] +[\fB\-pubout\fR] +[\fB\-RSAPublicKey_in\fR] +[\fB\-RSAPublicKey_out\fR] +[\fB\-engine id\fR] +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fBrsa\fR command processes \s-1RSA\s0 keys. They can be converted between various +forms and their components printed out. \fBNote\fR this command uses the +traditional SSLeay compatible format for private key encryption: newer +applications should use the more secure PKCS#8 format using the \fBpkcs8\fR +utility. +.SH "OPTIONS" +.IX Header "OPTIONS" +.IP "\fB\-help\fR" 4 +.IX Item "-help" +Print out a usage message. +.IP "\fB\-inform DER|PEM\fR" 4 +.IX Item "-inform DER|PEM" +This specifies the input format. The \fB\s-1DER\s0\fR option uses an \s-1ASN1 DER\s0 encoded +form compatible with the PKCS#1 RSAPrivateKey or SubjectPublicKeyInfo format. +The \fB\s-1PEM\s0\fR form is the default format: it consists of the \fB\s-1DER\s0\fR format base64 +encoded with additional header and footer lines. On input PKCS#8 format private +keys are also accepted. +.IP "\fB\-outform DER|PEM\fR" 4 +.IX Item "-outform DER|PEM" +This specifies the output format, the options have the same meaning and default +as the \fB\-inform\fR option. +.IP "\fB\-in filename\fR" 4 +.IX Item "-in filename" +This specifies the input filename to read a key from or standard input if this +option is not specified. If the key is encrypted a pass phrase will be +prompted for. +.IP "\fB\-passin arg\fR" 4 +.IX Item "-passin arg" +The input file password source. For more information about the format of \fBarg\fR +see the \fB\s-1PASS PHRASE ARGUMENTS\s0\fR section in \fBopenssl\fR\|(1). +.IP "\fB\-out filename\fR" 4 +.IX Item "-out filename" +This specifies the output filename to write a key to or standard output if this +option is not specified. If any encryption options are set then a pass phrase +will be prompted for. The output filename should \fBnot\fR be the same as the input +filename. +.IP "\fB\-passout password\fR" 4 +.IX Item "-passout password" +The output file password source. For more information about the format of \fBarg\fR +see the \fB\s-1PASS PHRASE ARGUMENTS\s0\fR section in \fBopenssl\fR\|(1). +.IP "\fB\-aes128\fR, \fB\-aes192\fR, \fB\-aes256\fR, \fB\-aria128\fR, \fB\-aria192\fR, \fB\-aria256\fR, \fB\-camellia128\fR, \fB\-camellia192\fR, \fB\-camellia256\fR, \fB\-des\fR, \fB\-des3\fR, \fB\-idea\fR" 4 +.IX Item "-aes128, -aes192, -aes256, -aria128, -aria192, -aria256, -camellia128, -camellia192, -camellia256, -des, -des3, -idea" +These options encrypt the private key with the specified +cipher before outputting it. A pass phrase is prompted for. +If none of these options is specified the key is written in plain text. This +means that using the \fBrsa\fR utility to read in an encrypted key with no +encryption option can be used to remove the pass phrase from a key, or by +setting the encryption options it can be use to add or change the pass phrase. +These options can only be used with \s-1PEM\s0 format output files. +.IP "\fB\-text\fR" 4 +.IX Item "-text" +Prints out the various public or private key components in +plain text in addition to the encoded version. +.IP "\fB\-noout\fR" 4 +.IX Item "-noout" +This option prevents output of the encoded version of the key. +.IP "\fB\-modulus\fR" 4 +.IX Item "-modulus" +This option prints out the value of the modulus of the key. +.IP "\fB\-check\fR" 4 +.IX Item "-check" +This option checks the consistency of an \s-1RSA\s0 private key. +.IP "\fB\-pubin\fR" 4 +.IX Item "-pubin" +By default a private key is read from the input file: with this +option a public key is read instead. +.IP "\fB\-pubout\fR" 4 +.IX Item "-pubout" +By default a private key is output: with this option a public +key will be output instead. This option is automatically set if +the input is a public key. +.IP "\fB\-RSAPublicKey_in\fR, \fB\-RSAPublicKey_out\fR" 4 +.IX Item "-RSAPublicKey_in, -RSAPublicKey_out" +Like \fB\-pubin\fR and \fB\-pubout\fR except \fBRSAPublicKey\fR format is used instead. +.IP "\fB\-engine id\fR" 4 +.IX Item "-engine id" +Specifying an engine (by its unique \fBid\fR string) will cause \fBrsa\fR +to attempt to obtain a functional reference to the specified engine, +thus initialising it if needed. The engine will then be set as the default +for all available algorithms. +.SH "NOTES" +.IX Header "NOTES" +The \s-1PEM\s0 private key format uses the header and footer lines: +.PP +.Vb 2 +\& \-\-\-\-\-BEGIN RSA PRIVATE KEY\-\-\-\-\- +\& \-\-\-\-\-END RSA PRIVATE KEY\-\-\-\-\- +.Ve +.PP +The \s-1PEM\s0 public key format uses the header and footer lines: +.PP +.Vb 2 +\& \-\-\-\-\-BEGIN PUBLIC KEY\-\-\-\-\- +\& \-\-\-\-\-END PUBLIC KEY\-\-\-\-\- +.Ve +.PP +The \s-1PEM\s0 \fBRSAPublicKey\fR format uses the header and footer lines: +.PP +.Vb 2 +\& \-\-\-\-\-BEGIN RSA PUBLIC KEY\-\-\-\-\- +\& \-\-\-\-\-END RSA PUBLIC KEY\-\-\-\-\- +.Ve +.SH "EXAMPLES" +.IX Header "EXAMPLES" +To remove the pass phrase on an \s-1RSA\s0 private key: +.PP +.Vb 1 +\& openssl rsa \-in key.pem \-out keyout.pem +.Ve +.PP +To encrypt a private key using triple \s-1DES:\s0 +.PP +.Vb 1 +\& openssl rsa \-in key.pem \-des3 \-out keyout.pem +.Ve +.PP +To convert a private key from \s-1PEM\s0 to \s-1DER\s0 format: +.PP +.Vb 1 +\& openssl rsa \-in key.pem \-outform DER \-out keyout.der +.Ve +.PP +To print out the components of a private key to standard output: +.PP +.Vb 1 +\& openssl rsa \-in key.pem \-text \-noout +.Ve +.PP +To just output the public part of a private key: +.PP +.Vb 1 +\& openssl rsa \-in key.pem \-pubout \-out pubkey.pem +.Ve +.PP +Output the public part of a private key in \fBRSAPublicKey\fR format: +.PP +.Vb 1 +\& openssl rsa \-in key.pem \-RSAPublicKey_out \-out pubkey.pem +.Ve +.SH "BUGS" +.IX Header "BUGS" +There should be an option that automatically handles .key files, +without having to manually edit them. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBpkcs8\fR\|(1), \fBdsa\fR\|(1), \fBgenrsa\fR\|(1), +\&\fBgendsa\fR\|(1) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/rsautl.1 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/rsautl.1 new file mode 100644 index 00000000..74d26faa --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/rsautl.1 @@ -0,0 +1,345 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "RSAUTL 1" +.TH RSAUTL 1 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +openssl\-rsautl, rsautl \- RSA utility +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +\&\fBopenssl\fR \fBrsautl\fR +[\fB\-help\fR] +[\fB\-in file\fR] +[\fB\-out file\fR] +[\fB\-inkey file\fR] +[\fB\-keyform PEM|DER|ENGINE\fR] +[\fB\-pubin\fR] +[\fB\-certin\fR] +[\fB\-sign\fR] +[\fB\-verify\fR] +[\fB\-encrypt\fR] +[\fB\-decrypt\fR] +[\fB\-rand file...\fR] +[\fB\-writerand file\fR] +[\fB\-pkcs\fR] +[\fB\-ssl\fR] +[\fB\-raw\fR] +[\fB\-hexdump\fR] +[\fB\-asn1parse\fR] +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fBrsautl\fR command can be used to sign, verify, encrypt and decrypt +data using the \s-1RSA\s0 algorithm. +.SH "OPTIONS" +.IX Header "OPTIONS" +.IP "\fB\-help\fR" 4 +.IX Item "-help" +Print out a usage message. +.IP "\fB\-in filename\fR" 4 +.IX Item "-in filename" +This specifies the input filename to read data from or standard input +if this option is not specified. +.IP "\fB\-out filename\fR" 4 +.IX Item "-out filename" +Specifies the output filename to write to or standard output by +default. +.IP "\fB\-inkey file\fR" 4 +.IX Item "-inkey file" +The input key file, by default it should be an \s-1RSA\s0 private key. +.IP "\fB\-keyform PEM|DER|ENGINE\fR" 4 +.IX Item "-keyform PEM|DER|ENGINE" +The key format \s-1PEM, DER\s0 or \s-1ENGINE.\s0 +.IP "\fB\-pubin\fR" 4 +.IX Item "-pubin" +The input file is an \s-1RSA\s0 public key. +.IP "\fB\-certin\fR" 4 +.IX Item "-certin" +The input is a certificate containing an \s-1RSA\s0 public key. +.IP "\fB\-sign\fR" 4 +.IX Item "-sign" +Sign the input data and output the signed result. This requires +an \s-1RSA\s0 private key. +.IP "\fB\-verify\fR" 4 +.IX Item "-verify" +Verify the input data and output the recovered data. +.IP "\fB\-encrypt\fR" 4 +.IX Item "-encrypt" +Encrypt the input data using an \s-1RSA\s0 public key. +.IP "\fB\-decrypt\fR" 4 +.IX Item "-decrypt" +Decrypt the input data using an \s-1RSA\s0 private key. +.IP "\fB\-rand file...\fR" 4 +.IX Item "-rand file..." +A file or files containing random data used to seed the random number +generator. +Multiple files can be specified separated by an OS-dependent character. +The separator is \fB;\fR for MS-Windows, \fB,\fR for OpenVMS, and \fB:\fR for +all others. +.IP "[\fB\-writerand file\fR]" 4 +.IX Item "[-writerand file]" +Writes random data to the specified \fIfile\fR upon exit. +This can be used with a subsequent \fB\-rand\fR flag. +.IP "\fB\-pkcs, \-oaep, \-ssl, \-raw\fR" 4 +.IX Item "-pkcs, -oaep, -ssl, -raw" +The padding to use: PKCS#1 v1.5 (the default), PKCS#1 \s-1OAEP,\s0 +special padding used in \s-1SSL\s0 v2 backwards compatible handshakes, +or no padding, respectively. +For signatures, only \fB\-pkcs\fR and \fB\-raw\fR can be used. +.IP "\fB\-hexdump\fR" 4 +.IX Item "-hexdump" +Hex dump the output data. +.IP "\fB\-asn1parse\fR" 4 +.IX Item "-asn1parse" +Parse the \s-1ASN.1\s0 output data, this is useful when combined with the +\&\fB\-verify\fR option. +.SH "NOTES" +.IX Header "NOTES" +\&\fBrsautl\fR because it uses the \s-1RSA\s0 algorithm directly can only be +used to sign or verify small pieces of data. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +Sign some data using a private key: +.PP +.Vb 1 +\& openssl rsautl \-sign \-in file \-inkey key.pem \-out sig +.Ve +.PP +Recover the signed data +.PP +.Vb 1 +\& openssl rsautl \-verify \-in sig \-inkey key.pem +.Ve +.PP +Examine the raw signed data: +.PP +.Vb 1 +\& openssl rsautl \-verify \-in sig \-inkey key.pem \-raw \-hexdump +\& +\& 0000 \- 00 01 ff ff ff ff ff ff\-ff ff ff ff ff ff ff ff ................ +\& 0010 \- ff ff ff ff ff ff ff ff\-ff ff ff ff ff ff ff ff ................ +\& 0020 \- ff ff ff ff ff ff ff ff\-ff ff ff ff ff ff ff ff ................ +\& 0030 \- ff ff ff ff ff ff ff ff\-ff ff ff ff ff ff ff ff ................ +\& 0040 \- ff ff ff ff ff ff ff ff\-ff ff ff ff ff ff ff ff ................ +\& 0050 \- ff ff ff ff ff ff ff ff\-ff ff ff ff ff ff ff ff ................ +\& 0060 \- ff ff ff ff ff ff ff ff\-ff ff ff ff ff ff ff ff ................ +\& 0070 \- ff ff ff ff 00 68 65 6c\-6c 6f 20 77 6f 72 6c 64 .....hello world +.Ve +.PP +The PKCS#1 block formatting is evident from this. If this was done using +encrypt and decrypt the block would have been of type 2 (the second byte) +and random padding data visible instead of the 0xff bytes. +.PP +It is possible to analyse the signature of certificates using this +utility in conjunction with \fBasn1parse\fR. Consider the self signed +example in certs/pca\-cert.pem . Running \fBasn1parse\fR as follows yields: +.PP +.Vb 1 +\& openssl asn1parse \-in pca\-cert.pem +\& +\& 0:d=0 hl=4 l= 742 cons: SEQUENCE +\& 4:d=1 hl=4 l= 591 cons: SEQUENCE +\& 8:d=2 hl=2 l= 3 cons: cont [ 0 ] +\& 10:d=3 hl=2 l= 1 prim: INTEGER :02 +\& 13:d=2 hl=2 l= 1 prim: INTEGER :00 +\& 16:d=2 hl=2 l= 13 cons: SEQUENCE +\& 18:d=3 hl=2 l= 9 prim: OBJECT :md5WithRSAEncryption +\& 29:d=3 hl=2 l= 0 prim: NULL +\& 31:d=2 hl=2 l= 92 cons: SEQUENCE +\& 33:d=3 hl=2 l= 11 cons: SET +\& 35:d=4 hl=2 l= 9 cons: SEQUENCE +\& 37:d=5 hl=2 l= 3 prim: OBJECT :countryName +\& 42:d=5 hl=2 l= 2 prim: PRINTABLESTRING :AU +\& .... +\& 599:d=1 hl=2 l= 13 cons: SEQUENCE +\& 601:d=2 hl=2 l= 9 prim: OBJECT :md5WithRSAEncryption +\& 612:d=2 hl=2 l= 0 prim: NULL +\& 614:d=1 hl=3 l= 129 prim: BIT STRING +.Ve +.PP +The final \s-1BIT STRING\s0 contains the actual signature. It can be extracted with: +.PP +.Vb 1 +\& openssl asn1parse \-in pca\-cert.pem \-out sig \-noout \-strparse 614 +.Ve +.PP +The certificate public key can be extracted with: +.PP +.Vb 1 +\& openssl x509 \-in test/testx509.pem \-pubkey \-noout >pubkey.pem +.Ve +.PP +The signature can be analysed with: +.PP +.Vb 1 +\& openssl rsautl \-in sig \-verify \-asn1parse \-inkey pubkey.pem \-pubin +\& +\& 0:d=0 hl=2 l= 32 cons: SEQUENCE +\& 2:d=1 hl=2 l= 12 cons: SEQUENCE +\& 4:d=2 hl=2 l= 8 prim: OBJECT :md5 +\& 14:d=2 hl=2 l= 0 prim: NULL +\& 16:d=1 hl=2 l= 16 prim: OCTET STRING +\& 0000 \- f3 46 9e aa 1a 4a 73 c9\-37 ea 93 00 48 25 08 b5 .F...Js.7...H%.. +.Ve +.PP +This is the parsed version of an \s-1ASN1\s0 DigestInfo structure. It can be seen that +the digest used was md5. The actual part of the certificate that was signed can +be extracted with: +.PP +.Vb 1 +\& openssl asn1parse \-in pca\-cert.pem \-out tbs \-noout \-strparse 4 +.Ve +.PP +and its digest computed with: +.PP +.Vb 2 +\& openssl md5 \-c tbs +\& MD5(tbs)= f3:46:9e:aa:1a:4a:73:c9:37:ea:93:00:48:25:08:b5 +.Ve +.PP +which it can be seen agrees with the recovered value above. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBdgst\fR\|(1), \fBrsa\fR\|(1), \fBgenrsa\fR\|(1) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/s_client.1 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/s_client.1 new file mode 100644 index 00000000..3ffc7913 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/s_client.1 @@ -0,0 +1,863 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "S_CLIENT 1" +.TH S_CLIENT 1 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +openssl\-s_client, s_client \- SSL/TLS client program +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +\&\fBopenssl\fR \fBs_client\fR +[\fB\-help\fR] +[\fB\-connect host:port\fR] +[\fB\-bind host:port\fR] +[\fB\-proxy host:port\fR] +[\fB\-unix path\fR] +[\fB\-4\fR] +[\fB\-6\fR] +[\fB\-servername name\fR] +[\fB\-noservername\fR] +[\fB\-verify depth\fR] +[\fB\-verify_return_error\fR] +[\fB\-cert filename\fR] +[\fB\-certform DER|PEM\fR] +[\fB\-key filename\fR] +[\fB\-keyform DER|PEM\fR] +[\fB\-cert_chain filename\fR] +[\fB\-build_chain\fR] +[\fB\-xkey\fR] +[\fB\-xcert\fR] +[\fB\-xchain\fR] +[\fB\-xchain_build\fR] +[\fB\-xcertform PEM|DER\fR] +[\fB\-xkeyform PEM|DER\fR] +[\fB\-pass arg\fR] +[\fB\-CApath directory\fR] +[\fB\-CAfile filename\fR] +[\fB\-chainCApath directory\fR] +[\fB\-chainCAfile filename\fR] +[\fB\-no\-CAfile\fR] +[\fB\-no\-CApath\fR] +[\fB\-requestCAfile filename\fR] +[\fB\-dane_tlsa_domain domain\fR] +[\fB\-dane_tlsa_rrdata rrdata\fR] +[\fB\-dane_ee_no_namechecks\fR] +[\fB\-attime timestamp\fR] +[\fB\-check_ss_sig\fR] +[\fB\-crl_check\fR] +[\fB\-crl_check_all\fR] +[\fB\-explicit_policy\fR] +[\fB\-extended_crl\fR] +[\fB\-ignore_critical\fR] +[\fB\-inhibit_any\fR] +[\fB\-inhibit_map\fR] +[\fB\-no_check_time\fR] +[\fB\-partial_chain\fR] +[\fB\-policy arg\fR] +[\fB\-policy_check\fR] +[\fB\-policy_print\fR] +[\fB\-purpose purpose\fR] +[\fB\-suiteB_128\fR] +[\fB\-suiteB_128_only\fR] +[\fB\-suiteB_192\fR] +[\fB\-trusted_first\fR] +[\fB\-no_alt_chains\fR] +[\fB\-use_deltas\fR] +[\fB\-auth_level num\fR] +[\fB\-nameopt option\fR] +[\fB\-verify_depth num\fR] +[\fB\-verify_email email\fR] +[\fB\-verify_hostname hostname\fR] +[\fB\-verify_ip ip\fR] +[\fB\-verify_name name\fR] +[\fB\-build_chain\fR] +[\fB\-x509_strict\fR] +[\fB\-reconnect\fR] +[\fB\-showcerts\fR] +[\fB\-debug\fR] +[\fB\-msg\fR] +[\fB\-nbio_test\fR] +[\fB\-state\fR] +[\fB\-nbio\fR] +[\fB\-crlf\fR] +[\fB\-ign_eof\fR] +[\fB\-no_ign_eof\fR] +[\fB\-psk_identity identity\fR] +[\fB\-psk key\fR] +[\fB\-psk_session file\fR] +[\fB\-quiet\fR] +[\fB\-ssl3\fR] +[\fB\-tls1\fR] +[\fB\-tls1_1\fR] +[\fB\-tls1_2\fR] +[\fB\-tls1_3\fR] +[\fB\-no_ssl3\fR] +[\fB\-no_tls1\fR] +[\fB\-no_tls1_1\fR] +[\fB\-no_tls1_2\fR] +[\fB\-no_tls1_3\fR] +[\fB\-dtls\fR] +[\fB\-dtls1\fR] +[\fB\-dtls1_2\fR] +[\fB\-sctp\fR] +[\fB\-sctp_label_bug\fR] +[\fB\-fallback_scsv\fR] +[\fB\-async\fR] +[\fB\-max_send_frag\fR] +[\fB\-split_send_frag\fR] +[\fB\-max_pipelines\fR] +[\fB\-read_buf\fR] +[\fB\-bugs\fR] +[\fB\-comp\fR] +[\fB\-no_comp\fR] +[\fB\-allow_no_dhe_kex\fR] +[\fB\-sigalgs sigalglist\fR] +[\fB\-curves curvelist\fR] +[\fB\-cipher cipherlist\fR] +[\fB\-ciphersuites val\fR] +[\fB\-serverpref\fR] +[\fB\-starttls protocol\fR] +[\fB\-xmpphost hostname\fR] +[\fB\-name hostname\fR] +[\fB\-engine id\fR] +[\fB\-tlsextdebug\fR] +[\fB\-no_ticket\fR] +[\fB\-sess_out filename\fR] +[\fB\-sess_in filename\fR] +[\fB\-rand file...\fR] +[\fB\-writerand file\fR] +[\fB\-serverinfo types\fR] +[\fB\-status\fR] +[\fB\-alpn protocols\fR] +[\fB\-nextprotoneg protocols\fR] +[\fB\-ct\fR] +[\fB\-noct\fR] +[\fB\-ctlogfile\fR] +[\fB\-keylogfile file\fR] +[\fB\-early_data file\fR] +[\fB\-enable_pha\fR] +[\fBtarget\fR] +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fBs_client\fR command implements a generic \s-1SSL/TLS\s0 client which connects +to a remote host using \s-1SSL/TLS.\s0 It is a \fIvery\fR useful diagnostic tool for +\&\s-1SSL\s0 servers. +.SH "OPTIONS" +.IX Header "OPTIONS" +In addition to the options below the \fBs_client\fR utility also supports the +common and client only options documented +in the \*(L"Supported Command Line Commands\*(R" section of the \fBSSL_CONF_cmd\fR\|(3) +manual page. +.IP "\fB\-help\fR" 4 +.IX Item "-help" +Print out a usage message. +.IP "\fB\-connect host:port\fR" 4 +.IX Item "-connect host:port" +This specifies the host and optional port to connect to. It is possible to +select the host and port using the optional target positional argument instead. +If neither this nor the target positional argument are specified then an attempt +is made to connect to the local host on port 4433. +.IP "\fB\-bind host:port\fR]" 4 +.IX Item "-bind host:port]" +This specifies the host address and or port to bind as the source for the +connection. For Unix-domain sockets the port is ignored and the host is +used as the source socket address. +.IP "\fB\-proxy host:port\fR" 4 +.IX Item "-proxy host:port" +When used with the \fB\-connect\fR flag, the program uses the host and port +specified with this flag and issues an \s-1HTTP CONNECT\s0 command to connect +to the desired server. +.IP "\fB\-unix path\fR" 4 +.IX Item "-unix path" +Connect over the specified Unix-domain socket. +.IP "\fB\-4\fR" 4 +.IX Item "-4" +Use IPv4 only. +.IP "\fB\-6\fR" 4 +.IX Item "-6" +Use IPv6 only. +.IP "\fB\-servername name\fR" 4 +.IX Item "-servername name" +Set the \s-1TLS SNI\s0 (Server Name Indication) extension in the ClientHello message to +the given value. +If \fB\-servername\fR is not provided, the \s-1TLS SNI\s0 extension will be populated with +the name given to \fB\-connect\fR if it follows a \s-1DNS\s0 name format. If \fB\-connect\fR is +not provided either, the \s-1SNI\s0 is set to \*(L"localhost\*(R". +This is the default since OpenSSL 1.1.1. +.Sp +Even though \s-1SNI\s0 should normally be a \s-1DNS\s0 name and not an \s-1IP\s0 address, if +\&\fB\-servername\fR is provided then that name will be sent, regardless of whether +it is a \s-1DNS\s0 name or not. +.Sp +This option cannot be used in conjunction with \fB\-noservername\fR. +.IP "\fB\-noservername\fR" 4 +.IX Item "-noservername" +Suppresses sending of the \s-1SNI\s0 (Server Name Indication) extension in the +ClientHello message. Cannot be used in conjunction with the \fB\-servername\fR or +<\-dane_tlsa_domain> options. +.IP "\fB\-cert certname\fR" 4 +.IX Item "-cert certname" +The certificate to use, if one is requested by the server. The default is +not to use a certificate. +.IP "\fB\-certform format\fR" 4 +.IX Item "-certform format" +The certificate format to use: \s-1DER\s0 or \s-1PEM. PEM\s0 is the default. +.IP "\fB\-key keyfile\fR" 4 +.IX Item "-key keyfile" +The private key to use. If not specified then the certificate file will +be used. +.IP "\fB\-keyform format\fR" 4 +.IX Item "-keyform format" +The private format to use: \s-1DER\s0 or \s-1PEM. PEM\s0 is the default. +.IP "\fB\-cert_chain\fR" 4 +.IX Item "-cert_chain" +A file containing trusted certificates to use when attempting to build the +client/server certificate chain related to the certificate specified via the +\&\fB\-cert\fR option. +.IP "\fB\-build_chain\fR" 4 +.IX Item "-build_chain" +Specify whether the application should build the certificate chain to be +provided to the server. +.IP "\fB\-xkey infile\fR, \fB\-xcert infile\fR, \fB\-xchain\fR" 4 +.IX Item "-xkey infile, -xcert infile, -xchain" +Specify an extra certificate, private key and certificate chain. These behave +in the same manner as the \fB\-cert\fR, \fB\-key\fR and \fB\-cert_chain\fR options. When +specified, the callback returning the first valid chain will be in use by the +client. +.IP "\fB\-xchain_build\fR" 4 +.IX Item "-xchain_build" +Specify whether the application should build the certificate chain to be +provided to the server for the extra certificates provided via \fB\-xkey infile\fR, +\&\fB\-xcert infile\fR, \fB\-xchain\fR options. +.IP "\fB\-xcertform PEM|DER\fR, \fB\-xkeyform PEM|DER\fR" 4 +.IX Item "-xcertform PEM|DER, -xkeyform PEM|DER" +Extra certificate and private key format respectively. +.IP "\fB\-pass arg\fR" 4 +.IX Item "-pass arg" +the private key password source. For more information about the format of \fBarg\fR +see the \fB\s-1PASS PHRASE ARGUMENTS\s0\fR section in \fBopenssl\fR\|(1). +.IP "\fB\-verify depth\fR" 4 +.IX Item "-verify depth" +The verify depth to use. This specifies the maximum length of the +server certificate chain and turns on server certificate verification. +Currently the verify operation continues after errors so all the problems +with a certificate chain can be seen. As a side effect the connection +will never fail due to a server certificate verify failure. +.IP "\fB\-verify_return_error\fR" 4 +.IX Item "-verify_return_error" +Return verification errors instead of continuing. This will typically +abort the handshake with a fatal error. +.IP "\fB\-nameopt option\fR" 4 +.IX Item "-nameopt option" +Option which determines how the subject or issuer names are displayed. The +\&\fBoption\fR argument can be a single option or multiple options separated by +commas. Alternatively the \fB\-nameopt\fR switch may be used more than once to +set multiple options. See the \fBx509\fR\|(1) manual page for details. +.IP "\fB\-CApath directory\fR" 4 +.IX Item "-CApath directory" +The directory to use for server certificate verification. This directory +must be in \*(L"hash format\*(R", see \fBverify\fR\|(1) for more information. These are +also used when building the client certificate chain. +.IP "\fB\-CAfile file\fR" 4 +.IX Item "-CAfile file" +A file containing trusted certificates to use during server authentication +and to use when attempting to build the client certificate chain. +.IP "\fB\-chainCApath directory\fR" 4 +.IX Item "-chainCApath directory" +The directory to use for building the chain provided to the server. This +directory must be in \*(L"hash format\*(R", see \fBverify\fR\|(1) for more information. +.IP "\fB\-chainCAfile file\fR" 4 +.IX Item "-chainCAfile file" +A file containing trusted certificates to use when attempting to build the +client certificate chain. +.IP "\fB\-no\-CAfile\fR" 4 +.IX Item "-no-CAfile" +Do not load the trusted \s-1CA\s0 certificates from the default file location +.IP "\fB\-no\-CApath\fR" 4 +.IX Item "-no-CApath" +Do not load the trusted \s-1CA\s0 certificates from the default directory location +.IP "\fB\-requestCAfile file\fR" 4 +.IX Item "-requestCAfile file" +A file containing a list of certificates whose subject names will be sent +to the server in the \fBcertificate_authorities\fR extension. Only supported +for \s-1TLS 1.3\s0 +.IP "\fB\-dane_tlsa_domain domain\fR" 4 +.IX Item "-dane_tlsa_domain domain" +Enable \s-1RFC6698/RFC7671 DANE TLSA\s0 authentication and specify the +\&\s-1TLSA\s0 base domain which becomes the default \s-1SNI\s0 hint and the primary +reference identifier for hostname checks. This must be used in +combination with at least one instance of the \fB\-dane_tlsa_rrdata\fR +option below. +.Sp +When \s-1DANE\s0 authentication succeeds, the diagnostic output will include +the lowest (closest to 0) depth at which a \s-1TLSA\s0 record authenticated +a chain certificate. When that \s-1TLSA\s0 record is a \*(L"2 1 0\*(R" trust +anchor public key that signed (rather than matched) the top-most +certificate of the chain, the result is reported as \*(L"\s-1TA\s0 public key +verified\*(R". Otherwise, either the \s-1TLSA\s0 record \*(L"matched \s-1TA\s0 certificate\*(R" +at a positive depth or else \*(L"matched \s-1EE\s0 certificate\*(R" at depth 0. +.IP "\fB\-dane_tlsa_rrdata rrdata\fR" 4 +.IX Item "-dane_tlsa_rrdata rrdata" +Use one or more times to specify the \s-1RRDATA\s0 fields of the \s-1DANE TLSA\s0 +RRset associated with the target service. The \fBrrdata\fR value is +specified in \*(L"presentation form\*(R", that is four whitespace separated +fields that specify the usage, selector, matching type and associated +data, with the last of these encoded in hexadecimal. Optional +whitespace is ignored in the associated data field. For example: +.Sp +.Vb 12 +\& $ openssl s_client \-brief \-starttls smtp \e +\& \-connect smtp.example.com:25 \e +\& \-dane_tlsa_domain smtp.example.com \e +\& \-dane_tlsa_rrdata "2 1 1 +\& B111DD8A1C2091A89BD4FD60C57F0716CCE50FEEFF8137CDBEE0326E 02CF362B" \e +\& \-dane_tlsa_rrdata "2 1 1 +\& 60B87575447DCBA2A36B7D11AC09FB24A9DB406FEE12D2CC90180517 616E8A18" +\& ... +\& Verification: OK +\& Verified peername: smtp.example.com +\& DANE TLSA 2 1 1 ...ee12d2cc90180517616e8a18 matched TA certificate at depth 1 +\& ... +.Ve +.IP "\fB\-dane_ee_no_namechecks\fR" 4 +.IX Item "-dane_ee_no_namechecks" +This disables server name checks when authenticating via \s-1\fBDANE\-EE\s0\fR\|(3) \s-1TLSA\s0 +records. +For some applications, primarily web browsers, it is not safe to disable name +checks due to \*(L"unknown key share\*(R" attacks, in which a malicious server can +convince a client that a connection to a victim server is instead a secure +connection to the malicious server. +The malicious server may then be able to violate cross-origin scripting +restrictions. +Thus, despite the text of \s-1RFC7671,\s0 name checks are by default enabled for +\&\s-1\fBDANE\-EE\s0\fR\|(3) \s-1TLSA\s0 records, and can be disabled in applications where it is safe +to do so. +In particular, \s-1SMTP\s0 and \s-1XMPP\s0 clients should set this option as \s-1SRV\s0 and \s-1MX\s0 +records already make it possible for a remote domain to redirect client +connections to any server of its choice, and in any case \s-1SMTP\s0 and \s-1XMPP\s0 clients +do not execute scripts downloaded from remote servers. +.IP "\fB\-attime\fR, \fB\-check_ss_sig\fR, \fB\-crl_check\fR, \fB\-crl_check_all\fR, \fB\-explicit_policy\fR, \fB\-extended_crl\fR, \fB\-ignore_critical\fR, \fB\-inhibit_any\fR, \fB\-inhibit_map\fR, \fB\-no_alt_chains\fR, \fB\-no_check_time\fR, \fB\-partial_chain\fR, \fB\-policy\fR, \fB\-policy_check\fR, \fB\-policy_print\fR, \fB\-purpose\fR, \fB\-suiteB_128\fR, \fB\-suiteB_128_only\fR, \fB\-suiteB_192\fR, \fB\-trusted_first\fR, \fB\-use_deltas\fR, \fB\-auth_level\fR, \fB\-verify_depth\fR, \fB\-verify_email\fR, \fB\-verify_hostname\fR, \fB\-verify_ip\fR, \fB\-verify_name\fR, \fB\-x509_strict\fR" 4 +.IX Item "-attime, -check_ss_sig, -crl_check, -crl_check_all, -explicit_policy, -extended_crl, -ignore_critical, -inhibit_any, -inhibit_map, -no_alt_chains, -no_check_time, -partial_chain, -policy, -policy_check, -policy_print, -purpose, -suiteB_128, -suiteB_128_only, -suiteB_192, -trusted_first, -use_deltas, -auth_level, -verify_depth, -verify_email, -verify_hostname, -verify_ip, -verify_name, -x509_strict" +Set various certificate chain validation options. See the +\&\fBverify\fR\|(1) manual page for details. +.IP "\fB\-reconnect\fR" 4 +.IX Item "-reconnect" +Reconnects to the same server 5 times using the same session \s-1ID,\s0 this can +be used as a test that session caching is working. +.IP "\fB\-showcerts\fR" 4 +.IX Item "-showcerts" +Displays the server certificate list as sent by the server: it only consists of +certificates the server has sent (in the order the server has sent them). It is +\&\fBnot\fR a verified chain. +.IP "\fB\-prexit\fR" 4 +.IX Item "-prexit" +Print session information when the program exits. This will always attempt +to print out information even if the connection fails. Normally information +will only be printed out once if the connection succeeds. This option is useful +because the cipher in use may be renegotiated or the connection may fail +because a client certificate is required or is requested only after an +attempt is made to access a certain \s-1URL.\s0 Note: the output produced by this +option is not always accurate because a connection might never have been +established. +.IP "\fB\-state\fR" 4 +.IX Item "-state" +Prints out the \s-1SSL\s0 session states. +.IP "\fB\-debug\fR" 4 +.IX Item "-debug" +Print extensive debugging information including a hex dump of all traffic. +.IP "\fB\-msg\fR" 4 +.IX Item "-msg" +Show all protocol messages with hex dump. +.IP "\fB\-trace\fR" 4 +.IX Item "-trace" +Show verbose trace output of protocol messages. OpenSSL needs to be compiled +with \fBenable-ssl-trace\fR for this option to work. +.IP "\fB\-msgfile\fR" 4 +.IX Item "-msgfile" +File to send output of \fB\-msg\fR or \fB\-trace\fR to, default standard output. +.IP "\fB\-nbio_test\fR" 4 +.IX Item "-nbio_test" +Tests non-blocking I/O +.IP "\fB\-nbio\fR" 4 +.IX Item "-nbio" +Turns on non-blocking I/O +.IP "\fB\-crlf\fR" 4 +.IX Item "-crlf" +This option translated a line feed from the terminal into \s-1CR+LF\s0 as required +by some servers. +.IP "\fB\-ign_eof\fR" 4 +.IX Item "-ign_eof" +Inhibit shutting down the connection when end of file is reached in the +input. +.IP "\fB\-quiet\fR" 4 +.IX Item "-quiet" +Inhibit printing of session and certificate information. This implicitly +turns on \fB\-ign_eof\fR as well. +.IP "\fB\-no_ign_eof\fR" 4 +.IX Item "-no_ign_eof" +Shut down the connection when end of file is reached in the input. +Can be used to override the implicit \fB\-ign_eof\fR after \fB\-quiet\fR. +.IP "\fB\-psk_identity identity\fR" 4 +.IX Item "-psk_identity identity" +Use the \s-1PSK\s0 identity \fBidentity\fR when using a \s-1PSK\s0 cipher suite. +The default value is \*(L"Client_identity\*(R" (without the quotes). +.IP "\fB\-psk key\fR" 4 +.IX Item "-psk key" +Use the \s-1PSK\s0 key \fBkey\fR when using a \s-1PSK\s0 cipher suite. The key is +given as a hexadecimal number without leading 0x, for example \-psk +1a2b3c4d. +This option must be provided in order to use a \s-1PSK\s0 cipher. +.IP "\fB\-psk_session file\fR" 4 +.IX Item "-psk_session file" +Use the pem encoded \s-1SSL_SESSION\s0 data stored in \fBfile\fR as the basis of a \s-1PSK.\s0 +Note that this will only work if TLSv1.3 is negotiated. +.IP "\fB\-ssl3\fR, \fB\-tls1\fR, \fB\-tls1_1\fR, \fB\-tls1_2\fR, \fB\-tls1_3\fR, \fB\-no_ssl3\fR, \fB\-no_tls1\fR, \fB\-no_tls1_1\fR, \fB\-no_tls1_2\fR, \fB\-no_tls1_3\fR" 4 +.IX Item "-ssl3, -tls1, -tls1_1, -tls1_2, -tls1_3, -no_ssl3, -no_tls1, -no_tls1_1, -no_tls1_2, -no_tls1_3" +These options require or disable the use of the specified \s-1SSL\s0 or \s-1TLS\s0 protocols. +By default \fBs_client\fR will negotiate the highest mutually supported protocol +version. +When a specific \s-1TLS\s0 version is required, only that version will be offered to +and accepted from the server. +Note that not all protocols and flags may be available, depending on how +OpenSSL was built. +.IP "\fB\-dtls\fR, \fB\-dtls1\fR, \fB\-dtls1_2\fR" 4 +.IX Item "-dtls, -dtls1, -dtls1_2" +These options make \fBs_client\fR use \s-1DTLS\s0 protocols instead of \s-1TLS.\s0 +With \fB\-dtls\fR, \fBs_client\fR will negotiate any supported \s-1DTLS\s0 protocol version, +whilst \fB\-dtls1\fR and \fB\-dtls1_2\fR will only support \s-1DTLS1.0\s0 and \s-1DTLS1.2\s0 +respectively. +.IP "\fB\-sctp\fR" 4 +.IX Item "-sctp" +Use \s-1SCTP\s0 for the transport protocol instead of \s-1UDP\s0 in \s-1DTLS.\s0 Must be used in +conjunction with \fB\-dtls\fR, \fB\-dtls1\fR or \fB\-dtls1_2\fR. This option is only +available where OpenSSL has support for \s-1SCTP\s0 enabled. +.IP "\fB\-sctp_label_bug\fR" 4 +.IX Item "-sctp_label_bug" +Use the incorrect behaviour of older OpenSSL implementations when computing +endpoint-pair shared secrets for \s-1DTLS/SCTP.\s0 This allows communication with +older broken implementations but breaks interoperability with correct +implementations. Must be used in conjunction with \fB\-sctp\fR. This option is only +available where OpenSSL has support for \s-1SCTP\s0 enabled. +.IP "\fB\-fallback_scsv\fR" 4 +.IX Item "-fallback_scsv" +Send \s-1TLS_FALLBACK_SCSV\s0 in the ClientHello. +.IP "\fB\-async\fR" 4 +.IX Item "-async" +Switch on asynchronous mode. Cryptographic operations will be performed +asynchronously. This will only have an effect if an asynchronous capable engine +is also used via the \fB\-engine\fR option. For test purposes the dummy async engine +(dasync) can be used (if available). +.IP "\fB\-max_send_frag int\fR" 4 +.IX Item "-max_send_frag int" +The maximum size of data fragment to send. +See \fBSSL_CTX_set_max_send_fragment\fR\|(3) for further information. +.IP "\fB\-split_send_frag int\fR" 4 +.IX Item "-split_send_frag int" +The size used to split data for encrypt pipelines. If more data is written in +one go than this value then it will be split into multiple pipelines, up to the +maximum number of pipelines defined by max_pipelines. This only has an effect if +a suitable cipher suite has been negotiated, an engine that supports pipelining +has been loaded, and max_pipelines is greater than 1. See +\&\fBSSL_CTX_set_split_send_fragment\fR\|(3) for further information. +.IP "\fB\-max_pipelines int\fR" 4 +.IX Item "-max_pipelines int" +The maximum number of encrypt/decrypt pipelines to be used. This will only have +an effect if an engine has been loaded that supports pipelining (e.g. the dasync +engine) and a suitable cipher suite has been negotiated. The default value is 1. +See \fBSSL_CTX_set_max_pipelines\fR\|(3) for further information. +.IP "\fB\-read_buf int\fR" 4 +.IX Item "-read_buf int" +The default read buffer size to be used for connections. This will only have an +effect if the buffer size is larger than the size that would otherwise be used +and pipelining is in use (see \fBSSL_CTX_set_default_read_buffer_len\fR\|(3) for +further information). +.IP "\fB\-bugs\fR" 4 +.IX Item "-bugs" +There are several known bugs in \s-1SSL\s0 and \s-1TLS\s0 implementations. Adding this +option enables various workarounds. +.IP "\fB\-comp\fR" 4 +.IX Item "-comp" +Enables support for \s-1SSL/TLS\s0 compression. +This option was introduced in OpenSSL 1.1.0. +\&\s-1TLS\s0 compression is not recommended and is off by default as of +OpenSSL 1.1.0. +.IP "\fB\-no_comp\fR" 4 +.IX Item "-no_comp" +Disables support for \s-1SSL/TLS\s0 compression. +\&\s-1TLS\s0 compression is not recommended and is off by default as of +OpenSSL 1.1.0. +.IP "\fB\-brief\fR" 4 +.IX Item "-brief" +Only provide a brief summary of connection parameters instead of the +normal verbose output. +.IP "\fB\-sigalgs sigalglist\fR" 4 +.IX Item "-sigalgs sigalglist" +Specifies the list of signature algorithms that are sent by the client. +The server selects one entry in the list based on its preferences. +For example strings, see \fBSSL_CTX_set1_sigalgs\fR\|(3) +.IP "\fB\-curves curvelist\fR" 4 +.IX Item "-curves curvelist" +Specifies the list of supported curves to be sent by the client. The curve is +ultimately selected by the server. For a list of all curves, use: +.Sp +.Vb 1 +\& $ openssl ecparam \-list_curves +.Ve +.IP "\fB\-cipher cipherlist\fR" 4 +.IX Item "-cipher cipherlist" +This allows the TLSv1.2 and below cipher list sent by the client to be modified. +This list will be combined with any TLSv1.3 ciphersuites that have been +configured. Although the server determines which ciphersuite is used it should +take the first supported cipher in the list sent by the client. See the +\&\fBciphers\fR command for more information. +.IP "\fB\-ciphersuites val\fR" 4 +.IX Item "-ciphersuites val" +This allows the TLSv1.3 ciphersuites sent by the client to be modified. This +list will be combined with any TLSv1.2 and below ciphersuites that have been +configured. Although the server determines which cipher suite is used it should +take the first supported cipher in the list sent by the client. See the +\&\fBciphers\fR command for more information. The format for this list is a simple +colon (\*(L":\*(R") separated list of TLSv1.3 ciphersuite names. +.IP "\fB\-starttls protocol\fR" 4 +.IX Item "-starttls protocol" +Send the protocol-specific message(s) to switch to \s-1TLS\s0 for communication. +\&\fBprotocol\fR is a keyword for the intended protocol. Currently, the only +supported keywords are \*(L"smtp\*(R", \*(L"pop3\*(R", \*(L"imap\*(R", \*(L"ftp\*(R", \*(L"xmpp\*(R", \*(L"xmpp-server\*(R", +\&\*(L"irc\*(R", \*(L"postgres\*(R", \*(L"mysql\*(R", \*(L"lmtp\*(R", \*(L"nntp\*(R", \*(L"sieve\*(R" and \*(L"ldap\*(R". +.IP "\fB\-xmpphost hostname\fR" 4 +.IX Item "-xmpphost hostname" +This option, when used with \*(L"\-starttls xmpp\*(R" or \*(L"\-starttls xmpp-server\*(R", +specifies the host for the \*(L"to\*(R" attribute of the stream element. +If this option is not specified, then the host specified with \*(L"\-connect\*(R" +will be used. +.Sp +This option is an alias of the \fB\-name\fR option for \*(L"xmpp\*(R" and \*(L"xmpp-server\*(R". +.IP "\fB\-name hostname\fR" 4 +.IX Item "-name hostname" +This option is used to specify hostname information for various protocols +used with \fB\-starttls\fR option. Currently only \*(L"xmpp\*(R", \*(L"xmpp-server\*(R", +\&\*(L"smtp\*(R" and \*(L"lmtp\*(R" can utilize this \fB\-name\fR option. +.Sp +If this option is used with \*(L"\-starttls xmpp\*(R" or \*(L"\-starttls xmpp-server\*(R", +if specifies the host for the \*(L"to\*(R" attribute of the stream element. If this +option is not specified, then the host specified with \*(L"\-connect\*(R" will be used. +.Sp +If this option is used with \*(L"\-starttls lmtp\*(R" or \*(L"\-starttls smtp\*(R", it specifies +the name to use in the \*(L"\s-1LMTP LHLO\*(R"\s0 or \*(L"\s-1SMTP EHLO\*(R"\s0 message, respectively. If +this option is not specified, then \*(L"mail.example.com\*(R" will be used. +.IP "\fB\-tlsextdebug\fR" 4 +.IX Item "-tlsextdebug" +Print out a hex dump of any \s-1TLS\s0 extensions received from the server. +.IP "\fB\-no_ticket\fR" 4 +.IX Item "-no_ticket" +Disable RFC4507bis session ticket support. +.IP "\fB\-sess_out filename\fR" 4 +.IX Item "-sess_out filename" +Output \s-1SSL\s0 session to \fBfilename\fR. +.IP "\fB\-sess_in sess.pem\fR" 4 +.IX Item "-sess_in sess.pem" +Load \s-1SSL\s0 session from \fBfilename\fR. The client will attempt to resume a +connection from this session. +.IP "\fB\-engine id\fR" 4 +.IX Item "-engine id" +Specifying an engine (by its unique \fBid\fR string) will cause \fBs_client\fR +to attempt to obtain a functional reference to the specified engine, +thus initialising it if needed. The engine will then be set as the default +for all available algorithms. +.IP "\fB\-rand file...\fR" 4 +.IX Item "-rand file..." +A file or files containing random data used to seed the random number +generator. +Multiple files can be specified separated by an OS-dependent character. +The separator is \fB;\fR for MS-Windows, \fB,\fR for OpenVMS, and \fB:\fR for +all others. +.IP "[\fB\-writerand file\fR]" 4 +.IX Item "[-writerand file]" +Writes random data to the specified \fIfile\fR upon exit. +This can be used with a subsequent \fB\-rand\fR flag. +.IP "\fB\-serverinfo types\fR" 4 +.IX Item "-serverinfo types" +A list of comma-separated \s-1TLS\s0 Extension Types (numbers between 0 and +65535). Each type will be sent as an empty ClientHello \s-1TLS\s0 Extension. +The server's response (if any) will be encoded and displayed as a \s-1PEM\s0 +file. +.IP "\fB\-status\fR" 4 +.IX Item "-status" +Sends a certificate status request to the server (\s-1OCSP\s0 stapling). The server +response (if any) is printed out. +.IP "\fB\-alpn protocols\fR, \fB\-nextprotoneg protocols\fR" 4 +.IX Item "-alpn protocols, -nextprotoneg protocols" +These flags enable the Enable the Application-Layer Protocol Negotiation +or Next Protocol Negotiation (\s-1NPN\s0) extension, respectively. \s-1ALPN\s0 is the +\&\s-1IETF\s0 standard and replaces \s-1NPN.\s0 +The \fBprotocols\fR list is a comma-separated list of protocol names that +the client should advertise support for. The list should contain the most +desirable protocols first. Protocol names are printable \s-1ASCII\s0 strings, +for example \*(L"http/1.1\*(R" or \*(L"spdy/3\*(R". +An empty list of protocols is treated specially and will cause the +client to advertise support for the \s-1TLS\s0 extension but disconnect just +after receiving ServerHello with a list of server supported protocols. +The flag \fB\-nextprotoneg\fR cannot be specified if \fB\-tls1_3\fR is used. +.IP "\fB\-ct\fR, \fB\-noct\fR" 4 +.IX Item "-ct, -noct" +Use one of these two options to control whether Certificate Transparency (\s-1CT\s0) +is enabled (\fB\-ct\fR) or disabled (\fB\-noct\fR). +If \s-1CT\s0 is enabled, signed certificate timestamps (SCTs) will be requested from +the server and reported at handshake completion. +.Sp +Enabling \s-1CT\s0 also enables \s-1OCSP\s0 stapling, as this is one possible delivery method +for SCTs. +.IP "\fB\-ctlogfile\fR" 4 +.IX Item "-ctlogfile" +A file containing a list of known Certificate Transparency logs. See +\&\fBSSL_CTX_set_ctlog_list_file\fR\|(3) for the expected file format. +.IP "\fB\-keylogfile file\fR" 4 +.IX Item "-keylogfile file" +Appends \s-1TLS\s0 secrets to the specified keylog file such that external programs +(like Wireshark) can decrypt \s-1TLS\s0 connections. +.IP "\fB\-early_data file\fR" 4 +.IX Item "-early_data file" +Reads the contents of the specified file and attempts to send it as early data +to the server. This will only work with resumed sessions that support early +data and when the server accepts the early data. +.IP "\fB\-enable_pha\fR" 4 +.IX Item "-enable_pha" +For TLSv1.3 only, send the Post-Handshake Authentication extension. This will +happen whether or not a certificate has been provided via \fB\-cert\fR. +.IP "\fB[target]\fR" 4 +.IX Item "[target]" +Rather than providing \fB\-connect\fR, the target hostname and optional port may +be provided as a single positional argument after all options. If neither this +nor \fB\-connect\fR are provided, falls back to attempting to connect to localhost +on port 4433. +.SH "CONNECTED COMMANDS" +.IX Header "CONNECTED COMMANDS" +If a connection is established with an \s-1SSL\s0 server then any data received +from the server is displayed and any key presses will be sent to the +server. If end of file is reached then the connection will be closed down. When +used interactively (which means neither \fB\-quiet\fR nor \fB\-ign_eof\fR have been +given), then certain commands are also recognized which perform special +operations. These commands are a letter which must appear at the start of a +line. They are listed below. +.IP "\fBQ\fR" 4 +.IX Item "Q" +End the current \s-1SSL\s0 connection and exit. +.IP "\fBR\fR" 4 +.IX Item "R" +Renegotiate the \s-1SSL\s0 session (TLSv1.2 and below only). +.IP "\fBB\fR" 4 +.IX Item "B" +Send a heartbeat message to the server (\s-1DTLS\s0 only) +.IP "\fBk\fR" 4 +.IX Item "k" +Send a key update message to the server (TLSv1.3 only) +.IP "\fBK\fR" 4 +.IX Item "K" +Send a key update message to the server and request one back (TLSv1.3 only) +.SH "NOTES" +.IX Header "NOTES" +\&\fBs_client\fR can be used to debug \s-1SSL\s0 servers. To connect to an \s-1SSL HTTP\s0 +server the command: +.PP +.Vb 1 +\& openssl s_client \-connect servername:443 +.Ve +.PP +would typically be used (https uses port 443). If the connection succeeds +then an \s-1HTTP\s0 command can be given such as \*(L"\s-1GET /\*(R"\s0 to retrieve a web page. +.PP +If the handshake fails then there are several possible causes, if it is +nothing obvious like no client certificate then the \fB\-bugs\fR, +\&\fB\-ssl3\fR, \fB\-tls1\fR, \fB\-no_ssl3\fR, \fB\-no_tls1\fR options can be tried +in case it is a buggy server. In particular you should play with these +options \fBbefore\fR submitting a bug report to an OpenSSL mailing list. +.PP +A frequent problem when attempting to get client certificates working +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 \*(L"acceptable \s-1CA\s0 list\*(R" when it +requests a certificate. By using \fBs_client\fR the \s-1CA\s0 list can be viewed +and checked. However some servers only request client authentication +after a specific \s-1URL\s0 is requested. To obtain the list in this case it +is necessary to use the \fB\-prexit\fR option and send an \s-1HTTP\s0 request +for an appropriate page. +.PP +If a certificate is specified on the command line using the \fB\-cert\fR +option it will not be used unless the server specifically requests +a client certificate. Therefor merely including a client certificate +on the command line is no guarantee that the certificate works. +.PP +If there are problems verifying a server certificate then the +\&\fB\-showcerts\fR option can be used to show all the certificates sent by the +server. +.PP +The \fBs_client\fR utility is a test tool and is designed to continue the +handshake after any certificate verification errors. As a result it will +accept any certificate chain (trusted or not) sent by the peer. None test +applications should \fBnot\fR do this as it makes them vulnerable to a \s-1MITM\s0 +attack. This behaviour can be changed by with the \fB\-verify_return_error\fR +option: any verify errors are then returned aborting the handshake. +.PP +The \fB\-bind\fR option may be useful if the server or a firewall requires +connections to come from some particular address and or port. +.SH "BUGS" +.IX Header "BUGS" +Because this program has a lot of options and also because some of the +techniques used are rather old, the C source of \fBs_client\fR is rather hard to +read and not a model of how things should be done. +A typical \s-1SSL\s0 client program would be much simpler. +.PP +The \fB\-prexit\fR option is a bit of a hack. We should really report +information whenever a session is renegotiated. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBSSL_CONF_cmd\fR\|(3), \fBsess_id\fR\|(1), \fBs_server\fR\|(1), \fBciphers\fR\|(1), +\&\fBSSL_CTX_set_max_send_fragment\fR\|(3), \fBSSL_CTX_set_split_send_fragment\fR\|(3), +\&\fBSSL_CTX_set_max_pipelines\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +The \fB\-no_alt_chains\fR option was added in OpenSSL 1.1.0. +The \fB\-name\fR option was added in OpenSSL 1.1.1. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2020 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/s_server.1 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/s_server.1 new file mode 100644 index 00000000..8528a53e --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/s_server.1 @@ -0,0 +1,868 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "S_SERVER 1" +.TH S_SERVER 1 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +openssl\-s_server, s_server \- SSL/TLS server program +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +\&\fBopenssl\fR \fBs_server\fR +[\fB\-help\fR] +[\fB\-port +int\fR] +[\fB\-accept val\fR] +[\fB\-unix val\fR] +[\fB\-4\fR] +[\fB\-6\fR] +[\fB\-unlink\fR] +[\fB\-context val\fR] +[\fB\-verify int\fR] +[\fB\-Verify int\fR] +[\fB\-cert infile\fR] +[\fB\-nameopt val\fR] +[\fB\-naccept +int\fR] +[\fB\-serverinfo val\fR] +[\fB\-certform PEM|DER\fR] +[\fB\-key infile\fR] +[\fB\-keyform format\fR] +[\fB\-pass val\fR] +[\fB\-dcert infile\fR] +[\fB\-dcertform PEM|DER\fR] +[\fB\-dkey infile\fR] +[\fB\-dkeyform PEM|DER\fR] +[\fB\-dpass val\fR] +[\fB\-nbio_test\fR] +[\fB\-crlf\fR] +[\fB\-debug\fR] +[\fB\-msg\fR] +[\fB\-msgfile outfile\fR] +[\fB\-state\fR] +[\fB\-CAfile infile\fR] +[\fB\-CApath dir\fR] +[\fB\-no\-CAfile\fR] +[\fB\-no\-CApath\fR] +[\fB\-nocert\fR] +[\fB\-quiet\fR] +[\fB\-no_resume_ephemeral\fR] +[\fB\-www\fR] +[\fB\-WWW\fR] +[\fB\-servername\fR] +[\fB\-servername_fatal\fR] +[\fB\-cert2 infile\fR] +[\fB\-key2 infile\fR] +[\fB\-tlsextdebug\fR] +[\fB\-HTTP\fR] +[\fB\-id_prefix val\fR] +[\fB\-rand file...\fR] +[\fB\-writerand file\fR] +[\fB\-keymatexport val\fR] +[\fB\-keymatexportlen +int\fR] +[\fB\-CRL infile\fR] +[\fB\-crl_download\fR] +[\fB\-cert_chain infile\fR] +[\fB\-dcert_chain infile\fR] +[\fB\-chainCApath dir\fR] +[\fB\-verifyCApath dir\fR] +[\fB\-no_cache\fR] +[\fB\-ext_cache\fR] +[\fB\-CRLform PEM|DER\fR] +[\fB\-verify_return_error\fR] +[\fB\-verify_quiet\fR] +[\fB\-build_chain\fR] +[\fB\-chainCAfile infile\fR] +[\fB\-verifyCAfile infile\fR] +[\fB\-ign_eof\fR] +[\fB\-no_ign_eof\fR] +[\fB\-status\fR] +[\fB\-status_verbose\fR] +[\fB\-status_timeout int\fR] +[\fB\-status_url val\fR] +[\fB\-status_file infile\fR] +[\fB\-trace\fR] +[\fB\-security_debug\fR] +[\fB\-security_debug_verbose\fR] +[\fB\-brief\fR] +[\fB\-rev\fR] +[\fB\-async\fR] +[\fB\-ssl_config val\fR] +[\fB\-max_send_frag +int\fR] +[\fB\-split_send_frag +int\fR] +[\fB\-max_pipelines +int\fR] +[\fB\-read_buf +int\fR] +[\fB\-no_ssl3\fR] +[\fB\-no_tls1\fR] +[\fB\-no_tls1_1\fR] +[\fB\-no_tls1_2\fR] +[\fB\-no_tls1_3\fR] +[\fB\-bugs\fR] +[\fB\-no_comp\fR] +[\fB\-comp\fR] +[\fB\-no_ticket\fR] +[\fB\-num_tickets\fR] +[\fB\-serverpref\fR] +[\fB\-legacy_renegotiation\fR] +[\fB\-no_renegotiation\fR] +[\fB\-legacy_server_connect\fR] +[\fB\-no_resumption_on_reneg\fR] +[\fB\-no_legacy_server_connect\fR] +[\fB\-allow_no_dhe_kex\fR] +[\fB\-prioritize_chacha\fR] +[\fB\-strict\fR] +[\fB\-sigalgs val\fR] +[\fB\-client_sigalgs val\fR] +[\fB\-groups val\fR] +[\fB\-curves val\fR] +[\fB\-named_curve val\fR] +[\fB\-cipher val\fR] +[\fB\-ciphersuites val\fR] +[\fB\-dhparam infile\fR] +[\fB\-record_padding val\fR] +[\fB\-debug_broken_protocol\fR] +[\fB\-policy val\fR] +[\fB\-purpose val\fR] +[\fB\-verify_name val\fR] +[\fB\-verify_depth int\fR] +[\fB\-auth_level int\fR] +[\fB\-attime intmax\fR] +[\fB\-verify_hostname val\fR] +[\fB\-verify_email val\fR] +[\fB\-verify_ip\fR] +[\fB\-ignore_critical\fR] +[\fB\-issuer_checks\fR] +[\fB\-crl_check\fR] +[\fB\-crl_check_all\fR] +[\fB\-policy_check\fR] +[\fB\-explicit_policy\fR] +[\fB\-inhibit_any\fR] +[\fB\-inhibit_map\fR] +[\fB\-x509_strict\fR] +[\fB\-extended_crl\fR] +[\fB\-use_deltas\fR] +[\fB\-policy_print\fR] +[\fB\-check_ss_sig\fR] +[\fB\-trusted_first\fR] +[\fB\-suiteB_128_only\fR] +[\fB\-suiteB_128\fR] +[\fB\-suiteB_192\fR] +[\fB\-partial_chain\fR] +[\fB\-no_alt_chains\fR] +[\fB\-no_check_time\fR] +[\fB\-allow_proxy_certs\fR] +[\fB\-xkey\fR] +[\fB\-xcert\fR] +[\fB\-xchain\fR] +[\fB\-xchain_build\fR] +[\fB\-xcertform PEM|DER\fR] +[\fB\-xkeyform PEM|DER\fR] +[\fB\-nbio\fR] +[\fB\-psk_identity val\fR] +[\fB\-psk_hint val\fR] +[\fB\-psk val\fR] +[\fB\-psk_session file\fR] +[\fB\-srpvfile infile\fR] +[\fB\-srpuserseed val\fR] +[\fB\-ssl3\fR] +[\fB\-tls1\fR] +[\fB\-tls1_1\fR] +[\fB\-tls1_2\fR] +[\fB\-tls1_3\fR] +[\fB\-dtls\fR] +[\fB\-timeout\fR] +[\fB\-mtu +int\fR] +[\fB\-listen\fR] +[\fB\-dtls1\fR] +[\fB\-dtls1_2\fR] +[\fB\-sctp\fR] +[\fB\-sctp_label_bug\fR] +[\fB\-no_dhe\fR] +[\fB\-nextprotoneg val\fR] +[\fB\-use_srtp val\fR] +[\fB\-alpn val\fR] +[\fB\-engine val\fR] +[\fB\-keylogfile outfile\fR] +[\fB\-max_early_data int\fR] +[\fB\-early_data\fR] +[\fB\-anti_replay\fR] +[\fB\-no_anti_replay\fR] +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fBs_server\fR command implements a generic \s-1SSL/TLS\s0 server which listens +for connections on a given port using \s-1SSL/TLS.\s0 +.SH "OPTIONS" +.IX Header "OPTIONS" +In addition to the options below the \fBs_server\fR utility also supports the +common and server only options documented +in the \*(L"Supported Command Line Commands\*(R" section of the \fBSSL_CONF_cmd\fR\|(3) +manual page. +.IP "\fB\-help\fR" 4 +.IX Item "-help" +Print out a usage message. +.IP "\fB\-port +int\fR" 4 +.IX Item "-port +int" +The \s-1TCP\s0 port to listen on for connections. If not specified 4433 is used. +.IP "\fB\-accept val\fR" 4 +.IX Item "-accept val" +The optional \s-1TCP\s0 host and port to listen on for connections. If not specified, *:4433 is used. +.IP "\fB\-unix val\fR" 4 +.IX Item "-unix val" +Unix domain socket to accept on. +.IP "\fB\-4\fR" 4 +.IX Item "-4" +Use IPv4 only. +.IP "\fB\-6\fR" 4 +.IX Item "-6" +Use IPv6 only. +.IP "\fB\-unlink\fR" 4 +.IX Item "-unlink" +For \-unix, unlink any existing socket first. +.IP "\fB\-context val\fR" 4 +.IX Item "-context val" +Sets the \s-1SSL\s0 context id. It can be given any string value. If this option +is not present a default value will be used. +.IP "\fB\-verify int\fR, \fB\-Verify int\fR" 4 +.IX Item "-verify int, -Verify int" +The verify depth to use. This specifies the maximum length of the +client certificate chain and makes the server request a certificate from +the client. With the \fB\-verify\fR option a certificate is requested but the +client does not have to send one, with the \fB\-Verify\fR option the client +must supply a certificate or an error occurs. +.Sp +If the cipher suite cannot request a client certificate (for example an +anonymous cipher suite or \s-1PSK\s0) this option has no effect. +.IP "\fB\-cert infile\fR" 4 +.IX Item "-cert infile" +The certificate to use, most servers cipher suites require the use of a +certificate and some require a certificate with a certain public key type: +for example the \s-1DSS\s0 cipher suites require a certificate containing a \s-1DSS\s0 +(\s-1DSA\s0) key. If not specified then the filename \*(L"server.pem\*(R" will be used. +.IP "\fB\-cert_chain\fR" 4 +.IX Item "-cert_chain" +A file containing trusted certificates to use when attempting to build the +client/server certificate chain related to the certificate specified via the +\&\fB\-cert\fR option. +.IP "\fB\-build_chain\fR" 4 +.IX Item "-build_chain" +Specify whether the application should build the certificate chain to be +provided to the client. +.IP "\fB\-nameopt val\fR" 4 +.IX Item "-nameopt val" +Option which determines how the subject or issuer names are displayed. The +\&\fBval\fR argument can be a single option or multiple options separated by +commas. Alternatively the \fB\-nameopt\fR switch may be used more than once to +set multiple options. See the \fBx509\fR\|(1) manual page for details. +.IP "\fB\-naccept +int\fR" 4 +.IX Item "-naccept +int" +The server will exit after receiving the specified number of connections, +default unlimited. +.IP "\fB\-serverinfo val\fR" 4 +.IX Item "-serverinfo val" +A file containing one or more blocks of \s-1PEM\s0 data. Each \s-1PEM\s0 block +must encode a \s-1TLS\s0 ServerHello extension (2 bytes type, 2 bytes length, +followed by \*(L"length\*(R" bytes of extension data). If the client sends +an empty \s-1TLS\s0 ClientHello extension matching the type, the corresponding +ServerHello extension will be returned. +.IP "\fB\-certform PEM|DER\fR" 4 +.IX Item "-certform PEM|DER" +The certificate format to use: \s-1DER\s0 or \s-1PEM. PEM\s0 is the default. +.IP "\fB\-key infile\fR" 4 +.IX Item "-key infile" +The private key to use. If not specified then the certificate file will +be used. +.IP "\fB\-keyform format\fR" 4 +.IX Item "-keyform format" +The private format to use: \s-1DER\s0 or \s-1PEM. PEM\s0 is the default. +.IP "\fB\-pass val\fR" 4 +.IX Item "-pass val" +The private key password source. For more information about the format of \fBval\fR +see the \fB\s-1PASS PHRASE ARGUMENTS\s0\fR section in \fBopenssl\fR\|(1). +.IP "\fB\-dcert infile\fR, \fB\-dkey infile\fR" 4 +.IX Item "-dcert infile, -dkey infile" +Specify an additional certificate and private key, these behave in the +same manner as the \fB\-cert\fR and \fB\-key\fR options except there is no default +if they are not specified (no additional certificate and key is used). As +noted above some cipher suites require a certificate containing a key of +a certain type. Some cipher suites need a certificate carrying an \s-1RSA\s0 key +and some a \s-1DSS\s0 (\s-1DSA\s0) key. By using \s-1RSA\s0 and \s-1DSS\s0 certificates and keys +a server can support clients which only support \s-1RSA\s0 or \s-1DSS\s0 cipher suites +by using an appropriate certificate. +.IP "\fB\-dcert_chain\fR" 4 +.IX Item "-dcert_chain" +A file containing trusted certificates to use when attempting to build the +server certificate chain when a certificate specified via the \fB\-dcert\fR option +is in use. +.IP "\fB\-dcertform PEM|DER\fR, \fB\-dkeyform PEM|DER\fR, \fB\-dpass val\fR" 4 +.IX Item "-dcertform PEM|DER, -dkeyform PEM|DER, -dpass val" +Additional certificate and private key format and passphrase respectively. +.IP "\fB\-xkey infile\fR, \fB\-xcert infile\fR, \fB\-xchain\fR" 4 +.IX Item "-xkey infile, -xcert infile, -xchain" +Specify an extra certificate, private key and certificate chain. These behave +in the same manner as the \fB\-cert\fR, \fB\-key\fR and \fB\-cert_chain\fR options. When +specified, the callback returning the first valid chain will be in use by +the server. +.IP "\fB\-xchain_build\fR" 4 +.IX Item "-xchain_build" +Specify whether the application should build the certificate chain to be +provided to the client for the extra certificates provided via \fB\-xkey infile\fR, +\&\fB\-xcert infile\fR, \fB\-xchain\fR options. +.IP "\fB\-xcertform PEM|DER\fR, \fB\-xkeyform PEM|DER\fR" 4 +.IX Item "-xcertform PEM|DER, -xkeyform PEM|DER" +Extra certificate and private key format respectively. +.IP "\fB\-nbio_test\fR" 4 +.IX Item "-nbio_test" +Tests non blocking I/O. +.IP "\fB\-crlf\fR" 4 +.IX Item "-crlf" +This option translated a line feed from the terminal into \s-1CR+LF.\s0 +.IP "\fB\-debug\fR" 4 +.IX Item "-debug" +Print extensive debugging information including a hex dump of all traffic. +.IP "\fB\-msg\fR" 4 +.IX Item "-msg" +Show all protocol messages with hex dump. +.IP "\fB\-msgfile outfile\fR" 4 +.IX Item "-msgfile outfile" +File to send output of \fB\-msg\fR or \fB\-trace\fR to, default standard output. +.IP "\fB\-state\fR" 4 +.IX Item "-state" +Prints the \s-1SSL\s0 session states. +.IP "\fB\-CAfile infile\fR" 4 +.IX Item "-CAfile infile" +A file containing trusted certificates to use during client authentication +and to use when attempting to build the server certificate chain. The list +is also used in the list of acceptable client CAs passed to the client when +a certificate is requested. +.IP "\fB\-CApath dir\fR" 4 +.IX Item "-CApath dir" +The directory to use for client certificate verification. This directory +must be in \*(L"hash format\*(R", see \fBverify\fR\|(1) for more information. These are +also used when building the server certificate chain. +.IP "\fB\-chainCApath dir\fR" 4 +.IX Item "-chainCApath dir" +The directory to use for building the chain provided to the client. This +directory must be in \*(L"hash format\*(R", see \fBverify\fR\|(1) for more information. +.IP "\fB\-chainCAfile file\fR" 4 +.IX Item "-chainCAfile file" +A file containing trusted certificates to use when attempting to build the +server certificate chain. +.IP "\fB\-no\-CAfile\fR" 4 +.IX Item "-no-CAfile" +Do not load the trusted \s-1CA\s0 certificates from the default file location. +.IP "\fB\-no\-CApath\fR" 4 +.IX Item "-no-CApath" +Do not load the trusted \s-1CA\s0 certificates from the default directory location. +.IP "\fB\-nocert\fR" 4 +.IX Item "-nocert" +If this option is set then no certificate is used. This restricts the +cipher suites available to the anonymous ones (currently just anonymous +\&\s-1DH\s0). +.IP "\fB\-quiet\fR" 4 +.IX Item "-quiet" +Inhibit printing of session and certificate information. +.IP "\fB\-www\fR" 4 +.IX Item "-www" +Sends a status message back to the client when it connects. This includes +information about the ciphers used and various session parameters. +The output is in \s-1HTML\s0 format so this option will normally be used with a +web browser. Cannot be used in conjunction with \fB\-early_data\fR. +.IP "\fB\-WWW\fR" 4 +.IX Item "-WWW" +Emulates a simple web server. Pages will be resolved relative to the +current directory, for example if the \s-1URL\s0 https://myhost/page.html is +requested the file ./page.html will be loaded. Cannot be used in conjunction +with \fB\-early_data\fR. +.IP "\fB\-tlsextdebug\fR" 4 +.IX Item "-tlsextdebug" +Print a hex dump of any \s-1TLS\s0 extensions received from the server. +.IP "\fB\-HTTP\fR" 4 +.IX Item "-HTTP" +Emulates a simple web server. Pages will be resolved relative to the +current directory, for example if the \s-1URL\s0 https://myhost/page.html is +requested the file ./page.html will be loaded. The files loaded are +assumed to contain a complete and correct \s-1HTTP\s0 response (lines that +are part of the \s-1HTTP\s0 response line and headers must end with \s-1CRLF\s0). Cannot be +used in conjunction with \fB\-early_data\fR. +.IP "\fB\-id_prefix val\fR" 4 +.IX Item "-id_prefix val" +Generate \s-1SSL/TLS\s0 session IDs prefixed by \fBval\fR. This is mostly useful +for testing any \s-1SSL/TLS\s0 code (eg. 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). +.IP "\fB\-rand file...\fR" 4 +.IX Item "-rand file..." +A file or files containing random data used to seed the random number +generator. +Multiple files can be specified separated by an OS-dependent character. +The separator is \fB;\fR for MS-Windows, \fB,\fR for OpenVMS, and \fB:\fR for +all others. +.IP "[\fB\-writerand file\fR]" 4 +.IX Item "[-writerand file]" +Writes random data to the specified \fIfile\fR upon exit. +This can be used with a subsequent \fB\-rand\fR flag. +.IP "\fB\-verify_return_error\fR" 4 +.IX Item "-verify_return_error" +Verification errors normally just print a message but allow the +connection to continue, for debugging purposes. +If this option is used, then verification errors close the connection. +.IP "\fB\-status\fR" 4 +.IX Item "-status" +Enables certificate status request support (aka \s-1OCSP\s0 stapling). +.IP "\fB\-status_verbose\fR" 4 +.IX Item "-status_verbose" +Enables certificate status request support (aka \s-1OCSP\s0 stapling) and gives +a verbose printout of the \s-1OCSP\s0 response. +.IP "\fB\-status_timeout int\fR" 4 +.IX Item "-status_timeout int" +Sets the timeout for \s-1OCSP\s0 response to \fBint\fR seconds. +.IP "\fB\-status_url val\fR" 4 +.IX Item "-status_url val" +Sets a fallback responder \s-1URL\s0 to use if no responder \s-1URL\s0 is present in the +server certificate. Without this option an error is returned if the server +certificate does not contain a responder address. +.IP "\fB\-status_file infile\fR" 4 +.IX Item "-status_file infile" +Overrides any \s-1OCSP\s0 responder URLs from the certificate and always provides the +\&\s-1OCSP\s0 Response stored in the file. The file must be in \s-1DER\s0 format. +.IP "\fB\-trace\fR" 4 +.IX Item "-trace" +Show verbose trace output of protocol messages. OpenSSL needs to be compiled +with \fBenable-ssl-trace\fR for this option to work. +.IP "\fB\-brief\fR" 4 +.IX Item "-brief" +Provide a brief summary of connection parameters instead of the normal verbose +output. +.IP "\fB\-rev\fR" 4 +.IX Item "-rev" +Simple test server which just reverses the text received from the client +and sends it back to the server. Also sets \fB\-brief\fR. Cannot be used in +conjunction with \fB\-early_data\fR. +.IP "\fB\-async\fR" 4 +.IX Item "-async" +Switch on asynchronous mode. Cryptographic operations will be performed +asynchronously. This will only have an effect if an asynchronous capable engine +is also used via the \fB\-engine\fR option. For test purposes the dummy async engine +(dasync) can be used (if available). +.IP "\fB\-max_send_frag +int\fR" 4 +.IX Item "-max_send_frag +int" +The maximum size of data fragment to send. +See \fBSSL_CTX_set_max_send_fragment\fR\|(3) for further information. +.IP "\fB\-split_send_frag +int\fR" 4 +.IX Item "-split_send_frag +int" +The size used to split data for encrypt pipelines. If more data is written in +one go than this value then it will be split into multiple pipelines, up to the +maximum number of pipelines defined by max_pipelines. This only has an effect if +a suitable cipher suite has been negotiated, an engine that supports pipelining +has been loaded, and max_pipelines is greater than 1. See +\&\fBSSL_CTX_set_split_send_fragment\fR\|(3) for further information. +.IP "\fB\-max_pipelines +int\fR" 4 +.IX Item "-max_pipelines +int" +The maximum number of encrypt/decrypt pipelines to be used. This will only have +an effect if an engine has been loaded that supports pipelining (e.g. the dasync +engine) and a suitable cipher suite has been negotiated. The default value is 1. +See \fBSSL_CTX_set_max_pipelines\fR\|(3) for further information. +.IP "\fB\-read_buf +int\fR" 4 +.IX Item "-read_buf +int" +The default read buffer size to be used for connections. This will only have an +effect if the buffer size is larger than the size that would otherwise be used +and pipelining is in use (see \fBSSL_CTX_set_default_read_buffer_len\fR\|(3) for +further information). +.IP "\fB\-ssl2\fR, \fB\-ssl3\fR, \fB\-tls1\fR, \fB\-tls1_1\fR, \fB\-tls1_2\fR, \fB\-tls1_3\fR, \fB\-no_ssl2\fR, \fB\-no_ssl3\fR, \fB\-no_tls1\fR, \fB\-no_tls1_1\fR, \fB\-no_tls1_2\fR, \fB\-no_tls1_3\fR" 4 +.IX Item "-ssl2, -ssl3, -tls1, -tls1_1, -tls1_2, -tls1_3, -no_ssl2, -no_ssl3, -no_tls1, -no_tls1_1, -no_tls1_2, -no_tls1_3" +These options require or disable the use of the specified \s-1SSL\s0 or \s-1TLS\s0 protocols. +By default \fBs_server\fR will negotiate the highest mutually supported protocol +version. +When a specific \s-1TLS\s0 version is required, only that version will be accepted +from the client. +Note that not all protocols and flags may be available, depending on how +OpenSSL was built. +.IP "\fB\-bugs\fR" 4 +.IX Item "-bugs" +There are several known bugs in \s-1SSL\s0 and \s-1TLS\s0 implementations. Adding this +option enables various workarounds. +.IP "\fB\-no_comp\fR" 4 +.IX Item "-no_comp" +Disable negotiation of \s-1TLS\s0 compression. +\&\s-1TLS\s0 compression is not recommended and is off by default as of +OpenSSL 1.1.0. +.IP "\fB\-comp\fR" 4 +.IX Item "-comp" +Enable negotiation of \s-1TLS\s0 compression. +This option was introduced in OpenSSL 1.1.0. +\&\s-1TLS\s0 compression is not recommended and is off by default as of +OpenSSL 1.1.0. +.IP "\fB\-no_ticket\fR" 4 +.IX Item "-no_ticket" +Disable RFC4507bis session ticket support. This option has no effect if TLSv1.3 +is negotiated. See \fB\-num_tickets\fR. +.IP "\fB\-num_tickets\fR" 4 +.IX Item "-num_tickets" +Control the number of tickets that will be sent to the client after a full +handshake in TLSv1.3. The default number of tickets is 2. This option does not +affect the number of tickets sent after a resumption handshake. +.IP "\fB\-serverpref\fR" 4 +.IX Item "-serverpref" +Use the server's cipher preferences, rather than the client's preferences. +.IP "\fB\-prioritize_chacha\fR" 4 +.IX Item "-prioritize_chacha" +Prioritize ChaCha ciphers when preferred by clients. Requires \fB\-serverpref\fR. +.IP "\fB\-no_resumption_on_reneg\fR" 4 +.IX Item "-no_resumption_on_reneg" +Set the \fB\s-1SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION\s0\fR option. +.IP "\fB\-client_sigalgs val\fR" 4 +.IX Item "-client_sigalgs val" +Signature algorithms to support for client certificate authentication +(colon-separated list). +.IP "\fB\-named_curve val\fR" 4 +.IX Item "-named_curve val" +Specifies the elliptic curve to use. \s-1NOTE:\s0 this is single curve, not a list. +For a list of all possible curves, use: +.Sp +.Vb 1 +\& $ openssl ecparam \-list_curves +.Ve +.IP "\fB\-cipher val\fR" 4 +.IX Item "-cipher val" +This allows the list of TLSv1.2 and below ciphersuites used by the server to be +modified. This list is combined with any TLSv1.3 ciphersuites that have been +configured. When the client sends a list of supported ciphers the first client +cipher also included in the server list is used. Because the client specifies +the preference order, the order of the server cipherlist is irrelevant. See +the \fBciphers\fR command for more information. +.IP "\fB\-ciphersuites val\fR" 4 +.IX Item "-ciphersuites val" +This allows the list of TLSv1.3 ciphersuites used by the server to be modified. +This list is combined with any TLSv1.2 and below ciphersuites that have been +configured. When the client sends a list of supported ciphers the first client +cipher also included in the server list is used. Because the client specifies +the preference order, the order of the server cipherlist is irrelevant. See +the \fBciphers\fR command for more information. The format for this list is a +simple colon (\*(L":\*(R") separated list of TLSv1.3 ciphersuite names. +.IP "\fB\-dhparam infile\fR" 4 +.IX Item "-dhparam infile" +The \s-1DH\s0 parameter file to use. The ephemeral \s-1DH\s0 cipher suites generate keys +using a set of \s-1DH\s0 parameters. If not specified then an attempt is made to +load the parameters from the server certificate file. +If this fails then a static set of parameters hard coded into the \fBs_server\fR +program will be used. +.IP "\fB\-attime\fR, \fB\-check_ss_sig\fR, \fB\-crl_check\fR, \fB\-crl_check_all\fR, \fB\-explicit_policy\fR, \fB\-extended_crl\fR, \fB\-ignore_critical\fR, \fB\-inhibit_any\fR, \fB\-inhibit_map\fR, \fB\-no_alt_chains\fR, \fB\-no_check_time\fR, \fB\-partial_chain\fR, \fB\-policy\fR, \fB\-policy_check\fR, \fB\-policy_print\fR, \fB\-purpose\fR, \fB\-suiteB_128\fR, \fB\-suiteB_128_only\fR, \fB\-suiteB_192\fR, \fB\-trusted_first\fR, \fB\-use_deltas\fR, \fB\-auth_level\fR, \fB\-verify_depth\fR, \fB\-verify_email\fR, \fB\-verify_hostname\fR, \fB\-verify_ip\fR, \fB\-verify_name\fR, \fB\-x509_strict\fR" 4 +.IX Item "-attime, -check_ss_sig, -crl_check, -crl_check_all, -explicit_policy, -extended_crl, -ignore_critical, -inhibit_any, -inhibit_map, -no_alt_chains, -no_check_time, -partial_chain, -policy, -policy_check, -policy_print, -purpose, -suiteB_128, -suiteB_128_only, -suiteB_192, -trusted_first, -use_deltas, -auth_level, -verify_depth, -verify_email, -verify_hostname, -verify_ip, -verify_name, -x509_strict" +Set different peer certificate verification options. +See the \fBverify\fR\|(1) manual page for details. +.IP "\fB\-crl_check\fR, \fB\-crl_check_all\fR" 4 +.IX Item "-crl_check, -crl_check_all" +Check the peer certificate has not been revoked by its \s-1CA.\s0 +The \s-1CRL\s0(s) are appended to the certificate file. With the \fB\-crl_check_all\fR +option all CRLs of all CAs in the chain are checked. +.IP "\fB\-nbio\fR" 4 +.IX Item "-nbio" +Turns on non blocking I/O. +.IP "\fB\-psk_identity val\fR" 4 +.IX Item "-psk_identity val" +Expect the client to send \s-1PSK\s0 identity \fBval\fR when using a \s-1PSK\s0 +cipher suite, and warn if they do not. By default, the expected \s-1PSK\s0 +identity is the string \*(L"Client_identity\*(R". +.IP "\fB\-psk_hint val\fR" 4 +.IX Item "-psk_hint val" +Use the \s-1PSK\s0 identity hint \fBval\fR when using a \s-1PSK\s0 cipher suite. +.IP "\fB\-psk val\fR" 4 +.IX Item "-psk val" +Use the \s-1PSK\s0 key \fBval\fR when using a \s-1PSK\s0 cipher suite. The key is +given as a hexadecimal number without leading 0x, for example \-psk +1a2b3c4d. +This option must be provided in order to use a \s-1PSK\s0 cipher. +.IP "\fB\-psk_session file\fR" 4 +.IX Item "-psk_session file" +Use the pem encoded \s-1SSL_SESSION\s0 data stored in \fBfile\fR as the basis of a \s-1PSK.\s0 +Note that this will only work if TLSv1.3 is negotiated. +.IP "\fB\-listen\fR" 4 +.IX Item "-listen" +This option can only be used in conjunction with one of the \s-1DTLS\s0 options above. +With this option \fBs_server\fR will listen on a \s-1UDP\s0 port for incoming connections. +Any ClientHellos that arrive will be checked to see if they have a cookie in +them or not. +Any without a cookie will be responded to with a HelloVerifyRequest. +If a ClientHello with a cookie is received then \fBs_server\fR will connect to +that peer and complete the handshake. +.IP "\fB\-dtls\fR, \fB\-dtls1\fR, \fB\-dtls1_2\fR" 4 +.IX Item "-dtls, -dtls1, -dtls1_2" +These options make \fBs_server\fR use \s-1DTLS\s0 protocols instead of \s-1TLS.\s0 +With \fB\-dtls\fR, \fBs_server\fR will negotiate any supported \s-1DTLS\s0 protocol version, +whilst \fB\-dtls1\fR and \fB\-dtls1_2\fR will only support DTLSv1.0 and DTLSv1.2 +respectively. +.IP "\fB\-sctp\fR" 4 +.IX Item "-sctp" +Use \s-1SCTP\s0 for the transport protocol instead of \s-1UDP\s0 in \s-1DTLS.\s0 Must be used in +conjunction with \fB\-dtls\fR, \fB\-dtls1\fR or \fB\-dtls1_2\fR. This option is only +available where OpenSSL has support for \s-1SCTP\s0 enabled. +.IP "\fB\-sctp_label_bug\fR" 4 +.IX Item "-sctp_label_bug" +Use the incorrect behaviour of older OpenSSL implementations when computing +endpoint-pair shared secrets for \s-1DTLS/SCTP.\s0 This allows communication with +older broken implementations but breaks interoperability with correct +implementations. Must be used in conjunction with \fB\-sctp\fR. This option is only +available where OpenSSL has support for \s-1SCTP\s0 enabled. +.IP "\fB\-no_dhe\fR" 4 +.IX Item "-no_dhe" +If this option is set then no \s-1DH\s0 parameters will be loaded effectively +disabling the ephemeral \s-1DH\s0 cipher suites. +.IP "\fB\-alpn val\fR, \fB\-nextprotoneg val\fR" 4 +.IX Item "-alpn val, -nextprotoneg val" +These flags enable the Enable the Application-Layer Protocol Negotiation +or Next Protocol Negotiation (\s-1NPN\s0) extension, respectively. \s-1ALPN\s0 is the +\&\s-1IETF\s0 standard and replaces \s-1NPN.\s0 +The \fBval\fR list is a comma-separated list of supported protocol +names. The list should contain the most desirable protocols first. +Protocol names are printable \s-1ASCII\s0 strings, for example \*(L"http/1.1\*(R" or +\&\*(L"spdy/3\*(R". +The flag \fB\-nextprotoneg\fR cannot be specified if \fB\-tls1_3\fR is used. +.IP "\fB\-engine val\fR" 4 +.IX Item "-engine val" +Specifying an engine (by its unique id string in \fBval\fR) will cause \fBs_server\fR +to attempt to obtain a functional reference to the specified engine, +thus initialising it if needed. The engine will then be set as the default +for all available algorithms. +.IP "\fB\-keylogfile outfile\fR" 4 +.IX Item "-keylogfile outfile" +Appends \s-1TLS\s0 secrets to the specified keylog file such that external programs +(like Wireshark) can decrypt \s-1TLS\s0 connections. +.IP "\fB\-max_early_data int\fR" 4 +.IX Item "-max_early_data int" +Change the default maximum early data bytes that are specified for new sessions +and any incoming early data (when used in conjunction with the \fB\-early_data\fR +flag). The default value is approximately 16k. The argument must be an integer +greater than or equal to 0. +.IP "\fB\-early_data\fR" 4 +.IX Item "-early_data" +Accept early data where possible. Cannot be used in conjunction with \fB\-www\fR, +\&\fB\-WWW\fR, \fB\-HTTP\fR or \fB\-rev\fR. +.IP "\fB\-anti_replay\fR, \fB\-no_anti_replay\fR" 4 +.IX Item "-anti_replay, -no_anti_replay" +Switches replay protection on or off, respectively. Replay protection is on by +default unless overridden by a configuration file. When it is on, OpenSSL will +automatically detect if a session ticket has been used more than once, TLSv1.3 +has been negotiated, and early data is enabled on the server. A full handshake +is forced if a session ticket is used a second or subsequent time. Any early +data that was sent will be rejected. +.SH "CONNECTED COMMANDS" +.IX Header "CONNECTED COMMANDS" +If a connection request is established with an \s-1SSL\s0 client and neither the +\&\fB\-www\fR nor the \fB\-WWW\fR option has been used then normally any data received +from the client is displayed and any key presses will be sent to the client. +.PP +Certain commands are also recognized which perform special operations. These +commands are a letter which must appear at the start of a line. They are listed +below. +.IP "\fBq\fR" 4 +.IX Item "q" +End the current \s-1SSL\s0 connection but still accept new connections. +.IP "\fBQ\fR" 4 +.IX Item "Q" +End the current \s-1SSL\s0 connection and exit. +.IP "\fBr\fR" 4 +.IX Item "r" +Renegotiate the \s-1SSL\s0 session (TLSv1.2 and below only). +.IP "\fBR\fR" 4 +.IX Item "R" +Renegotiate the \s-1SSL\s0 session and request a client certificate (TLSv1.2 and below +only). +.IP "\fBP\fR" 4 +.IX Item "P" +Send some plain text down the underlying \s-1TCP\s0 connection: this should +cause the client to disconnect due to a protocol violation. +.IP "\fBS\fR" 4 +.IX Item "S" +Print out some session cache status information. +.IP "\fBB\fR" 4 +.IX Item "B" +Send a heartbeat message to the client (\s-1DTLS\s0 only) +.IP "\fBk\fR" 4 +.IX Item "k" +Send a key update message to the client (TLSv1.3 only) +.IP "\fBK\fR" 4 +.IX Item "K" +Send a key update message to the client and request one back (TLSv1.3 only) +.IP "\fBc\fR" 4 +.IX Item "c" +Send a certificate request to the client (TLSv1.3 only) +.SH "NOTES" +.IX Header "NOTES" +\&\fBs_server\fR can be used to debug \s-1SSL\s0 clients. To accept connections from +a web browser the command: +.PP +.Vb 1 +\& openssl s_server \-accept 443 \-www +.Ve +.PP +can be used for example. +.PP +Although specifying an empty list of CAs when requesting a client certificate +is strictly speaking a protocol violation, some \s-1SSL\s0 clients interpret this to +mean any \s-1CA\s0 is acceptable. This is useful for debugging purposes. +.PP +The session parameters can printed out using the \fBsess_id\fR program. +.SH "BUGS" +.IX Header "BUGS" +Because this program has a lot of options and also because some of the +techniques used are rather old, the C source of \fBs_server\fR is rather hard to +read and not a model of how things should be done. +A typical \s-1SSL\s0 server program would be much simpler. +.PP +The output of common ciphers is wrong: it just gives the list of ciphers that +OpenSSL recognizes and the client supports. +.PP +There should be a way for the \fBs_server\fR program to print out details of any +unknown cipher suites a client says it supports. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBSSL_CONF_cmd\fR\|(3), \fBsess_id\fR\|(1), \fBs_client\fR\|(1), \fBciphers\fR\|(1) +\&\fBSSL_CTX_set_max_send_fragment\fR\|(3), +\&\fBSSL_CTX_set_split_send_fragment\fR\|(3), +\&\fBSSL_CTX_set_max_pipelines\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +The \-no_alt_chains option was added in OpenSSL 1.1.0. +.PP +The +\&\-allow\-no\-dhe\-kex and \-prioritize_chacha options were added in OpenSSL 1.1.1. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/s_time.1 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/s_time.1 new file mode 100644 index 00000000..0cdc5fa3 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/s_time.1 @@ -0,0 +1,320 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "S_TIME 1" +.TH S_TIME 1 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +openssl\-s_time, s_time \- SSL/TLS performance timing program +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +\&\fBopenssl\fR \fBs_time\fR +[\fB\-help\fR] +[\fB\-connect host:port\fR] +[\fB\-www page\fR] +[\fB\-cert filename\fR] +[\fB\-key filename\fR] +[\fB\-CApath directory\fR] +[\fB\-CAfile filename\fR] +[\fB\-no\-CAfile\fR] +[\fB\-no\-CApath\fR] +[\fB\-reuse\fR] +[\fB\-new\fR] +[\fB\-verify depth\fR] +[\fB\-nameopt option\fR] +[\fB\-time seconds\fR] +[\fB\-ssl3\fR] +[\fB\-bugs\fR] +[\fB\-cipher cipherlist\fR] +[\fB\-ciphersuites val\fR] +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fBs_time\fR command implements a generic \s-1SSL/TLS\s0 client which connects to a +remote host using \s-1SSL/TLS.\s0 It can request a page from the server and includes +the time to transfer the payload data in its timing measurements. It measures +the number of connections within a given timeframe, the amount of data +transferred (if any), and calculates the average time spent for one connection. +.SH "OPTIONS" +.IX Header "OPTIONS" +.IP "\fB\-help\fR" 4 +.IX Item "-help" +Print out a usage message. +.IP "\fB\-connect host:port\fR" 4 +.IX Item "-connect host:port" +This specifies the host and optional port to connect to. +.IP "\fB\-www page\fR" 4 +.IX Item "-www page" +This specifies the page to \s-1GET\s0 from the server. A value of '/' gets the +index.htm[l] page. If this parameter is not specified, then \fBs_time\fR will only +perform the handshake to establish \s-1SSL\s0 connections but not transfer any +payload data. +.IP "\fB\-cert certname\fR" 4 +.IX Item "-cert certname" +The certificate to use, if one is requested by the server. The default is +not to use a certificate. The file is in \s-1PEM\s0 format. +.IP "\fB\-key keyfile\fR" 4 +.IX Item "-key keyfile" +The private key to use. If not specified then the certificate file will +be used. The file is in \s-1PEM\s0 format. +.IP "\fB\-verify depth\fR" 4 +.IX Item "-verify depth" +The verify depth to use. This specifies the maximum length of the +server certificate chain and turns on server certificate verification. +Currently the verify operation continues after errors so all the problems +with a certificate chain can be seen. As a side effect the connection +will never fail due to a server certificate verify failure. +.IP "\fB\-nameopt option\fR" 4 +.IX Item "-nameopt option" +Option which determines how the subject or issuer names are displayed. The +\&\fBoption\fR argument can be a single option or multiple options separated by +commas. Alternatively the \fB\-nameopt\fR switch may be used more than once to +set multiple options. See the \fBx509\fR\|(1) manual page for details. +.IP "\fB\-CApath directory\fR" 4 +.IX Item "-CApath directory" +The directory to use for server certificate verification. This directory +must be in \*(L"hash format\*(R", see \fBverify\fR for more information. These are +also used when building the client certificate chain. +.IP "\fB\-CAfile file\fR" 4 +.IX Item "-CAfile file" +A file containing trusted certificates to use during server authentication +and to use when attempting to build the client certificate chain. +.IP "\fB\-no\-CAfile\fR" 4 +.IX Item "-no-CAfile" +Do not load the trusted \s-1CA\s0 certificates from the default file location +.IP "\fB\-no\-CApath\fR" 4 +.IX Item "-no-CApath" +Do not load the trusted \s-1CA\s0 certificates from the default directory location +.IP "\fB\-new\fR" 4 +.IX Item "-new" +Performs the timing test using a new session \s-1ID\s0 for each connection. +If neither \fB\-new\fR nor \fB\-reuse\fR are specified, they are both on by default +and executed in sequence. +.IP "\fB\-reuse\fR" 4 +.IX Item "-reuse" +Performs the timing test using the same session \s-1ID\s0; this can be used as a test +that session caching is working. If neither \fB\-new\fR nor \fB\-reuse\fR are +specified, they are both on by default and executed in sequence. +.IP "\fB\-ssl3\fR" 4 +.IX Item "-ssl3" +This option disables the use of \s-1SSL\s0 version 3. By default +the initial handshake uses a method which should be compatible with all +servers and permit them to use \s-1SSL\s0 v3 or \s-1TLS\s0 as appropriate. +.Sp +The timing program is not as rich in options to turn protocols on and off as +the \fBs_client\fR\|(1) program and may not connect to all servers. +Unfortunately there are a lot of ancient and broken servers in use which +cannot handle this technique and will fail to connect. Some servers only +work if \s-1TLS\s0 is turned off with the \fB\-ssl3\fR option. +.Sp +Note that this option may not be available, depending on how +OpenSSL was built. +.IP "\fB\-bugs\fR" 4 +.IX Item "-bugs" +There are several known bugs in \s-1SSL\s0 and \s-1TLS\s0 implementations. Adding this +option enables various workarounds. +.IP "\fB\-cipher cipherlist\fR" 4 +.IX Item "-cipher cipherlist" +This allows the TLSv1.2 and below cipher list sent by the client to be modified. +This list will be combined with any TLSv1.3 ciphersuites that have been +configured. Although the server determines which cipher suite is used it should +take the first supported cipher in the list sent by the client. See +\&\fBciphers\fR\|(1) for more information. +.IP "\fB\-ciphersuites val\fR" 4 +.IX Item "-ciphersuites val" +This allows the TLSv1.3 ciphersuites sent by the client to be modified. This +list will be combined with any TLSv1.2 and below ciphersuites that have been +configured. Although the server determines which cipher suite is used it should +take the first supported cipher in the list sent by the client. See +\&\fBciphers\fR\|(1) for more information. The format for this list is a simple +colon (\*(L":\*(R") separated list of TLSv1.3 ciphersuite names. +.IP "\fB\-time length\fR" 4 +.IX Item "-time length" +Specifies how long (in seconds) \fBs_time\fR should establish connections and +optionally transfer payload data from a server. Server and client performance +and the link speed determine how many connections \fBs_time\fR can establish. +.SH "NOTES" +.IX Header "NOTES" +\&\fBs_time\fR can be used to measure the performance of an \s-1SSL\s0 connection. +To connect to an \s-1SSL HTTP\s0 server and get the default page the command +.PP +.Vb 1 +\& openssl s_time \-connect servername:443 \-www / \-CApath yourdir \-CAfile yourfile.pem \-cipher commoncipher [\-ssl3] +.Ve +.PP +would typically be used (https uses port 443). 'commoncipher' is a cipher to +which both client and server can agree, see the \fBciphers\fR\|(1) command +for details. +.PP +If the handshake fails then there are several possible causes, if it is +nothing obvious like no client certificate then the \fB\-bugs\fR and +\&\fB\-ssl3\fR options can be tried +in case it is a buggy server. In particular you should play with these +options \fBbefore\fR submitting a bug report to an OpenSSL mailing list. +.PP +A frequent problem when attempting to get client certificates working +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 \*(L"acceptable \s-1CA\s0 list\*(R" when it +requests a certificate. By using \fBs_client\fR\|(1) the \s-1CA\s0 list can be +viewed and checked. However some servers only request client authentication +after a specific \s-1URL\s0 is requested. To obtain the list in this case it +is necessary to use the \fB\-prexit\fR option of \fBs_client\fR\|(1) and +send an \s-1HTTP\s0 request for an appropriate page. +.PP +If a certificate is specified on the command line using the \fB\-cert\fR +option it will not be used unless the server specifically requests +a client certificate. Therefor merely including a client certificate +on the command line is no guarantee that the certificate works. +.SH "BUGS" +.IX Header "BUGS" +Because this program does not have all the options of the +\&\fBs_client\fR\|(1) program to turn protocols on and off, you may not be +able to measure the performance of all protocols with all servers. +.PP +The \fB\-verify\fR option should really exit if the server verification +fails. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBs_client\fR\|(1), \fBs_server\fR\|(1), \fBciphers\fR\|(1) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2004\-2020 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/sess_id.1 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/sess_id.1 new file mode 100644 index 00000000..3df11f66 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/sess_id.1 @@ -0,0 +1,272 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SESS_ID 1" +.TH SESS_ID 1 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +openssl\-sess_id, sess_id \- SSL/TLS session handling utility +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +\&\fBopenssl\fR \fBsess_id\fR +[\fB\-help\fR] +[\fB\-inform PEM|DER\fR] +[\fB\-outform PEM|DER|NSS\fR] +[\fB\-in filename\fR] +[\fB\-out filename\fR] +[\fB\-text\fR] +[\fB\-noout\fR] +[\fB\-context \s-1ID\s0\fR] +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fBsess_id\fR process the encoded version of the \s-1SSL\s0 session structure +and optionally prints out \s-1SSL\s0 session details (for example the \s-1SSL\s0 session +master key) in human readable format. Since this is a diagnostic tool that +needs some knowledge of the \s-1SSL\s0 protocol to use properly, most users will +not need to use it. +.SH "OPTIONS" +.IX Header "OPTIONS" +.IP "\fB\-help\fR" 4 +.IX Item "-help" +Print out a usage message. +.IP "\fB\-inform DER|PEM\fR" 4 +.IX Item "-inform DER|PEM" +This specifies the input format. The \fB\s-1DER\s0\fR option uses an \s-1ASN1 DER\s0 encoded +format containing session details. The precise format can vary from one version +to the next. The \fB\s-1PEM\s0\fR form is the default format: it consists of the \fB\s-1DER\s0\fR +format base64 encoded with additional header and footer lines. +.IP "\fB\-outform DER|PEM|NSS\fR" 4 +.IX Item "-outform DER|PEM|NSS" +This specifies the output format. The \fB\s-1PEM\s0\fR and \fB\s-1DER\s0\fR options have the same meaning +and default as the \fB\-inform\fR option. The \fB\s-1NSS\s0\fR option outputs the session id and +the master key in \s-1NSS\s0 keylog format. +.IP "\fB\-in filename\fR" 4 +.IX Item "-in filename" +This specifies the input filename to read session information from or standard +input by default. +.IP "\fB\-out filename\fR" 4 +.IX Item "-out filename" +This specifies the output filename to write session information to or standard +output if this option is not specified. +.IP "\fB\-text\fR" 4 +.IX Item "-text" +Prints out the various public or private key components in +plain text in addition to the encoded version. +.IP "\fB\-cert\fR" 4 +.IX Item "-cert" +If a certificate is present in the session it will be output using this option, +if the \fB\-text\fR option is also present then it will be printed out in text form. +.IP "\fB\-noout\fR" 4 +.IX Item "-noout" +This option prevents output of the encoded version of the session. +.IP "\fB\-context \s-1ID\s0\fR" 4 +.IX Item "-context ID" +This option can set the session id so the output session information uses the +supplied \s-1ID.\s0 The \s-1ID\s0 can be any string of characters. This option won't normally +be used. +.SH "OUTPUT" +.IX Header "OUTPUT" +Typical output: +.PP +.Vb 10 +\& SSL\-Session: +\& Protocol : TLSv1 +\& Cipher : 0016 +\& Session\-ID: 871E62626C554CE95488823752CBD5F3673A3EF3DCE9C67BD916C809914B40ED +\& Session\-ID\-ctx: 01000000 +\& Master\-Key: A7CEFC571974BE02CAC305269DC59F76EA9F0B180CB6642697A68251F2D2BB57E51DBBB4C7885573192AE9AEE220FACD +\& Key\-Arg : None +\& Start Time: 948459261 +\& Timeout : 300 (sec) +\& Verify return code 0 (ok) +.Ve +.PP +These are described below in more detail. +.IP "\fBProtocol\fR" 4 +.IX Item "Protocol" +This is the protocol in use TLSv1.3, TLSv1.2, TLSv1.1, TLSv1 or SSLv3. +.IP "\fBCipher\fR" 4 +.IX Item "Cipher" +The cipher used this is the actual raw \s-1SSL\s0 or \s-1TLS\s0 cipher code, see the \s-1SSL\s0 +or \s-1TLS\s0 specifications for more information. +.IP "\fBSession-ID\fR" 4 +.IX Item "Session-ID" +The \s-1SSL\s0 session \s-1ID\s0 in hex format. +.IP "\fBSession-ID-ctx\fR" 4 +.IX Item "Session-ID-ctx" +The session \s-1ID\s0 context in hex format. +.IP "\fBMaster-Key\fR" 4 +.IX Item "Master-Key" +This is the \s-1SSL\s0 session master key. +.IP "\fBStart Time\fR" 4 +.IX Item "Start Time" +This is the session start time represented as an integer in standard +Unix format. +.IP "\fBTimeout\fR" 4 +.IX Item "Timeout" +The timeout in seconds. +.IP "\fBVerify return code\fR" 4 +.IX Item "Verify return code" +This is the return code when an \s-1SSL\s0 client certificate is verified. +.SH "NOTES" +.IX Header "NOTES" +The \s-1PEM\s0 encoded session format uses the header and footer lines: +.PP +.Vb 2 +\& \-\-\-\-\-BEGIN SSL SESSION PARAMETERS\-\-\-\-\- +\& \-\-\-\-\-END SSL SESSION PARAMETERS\-\-\-\-\- +.Ve +.PP +Since the \s-1SSL\s0 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 +the information is being output by a \*(L"real\*(R" application. This is however +strongly discouraged and should only be used for debugging purposes. +.SH "BUGS" +.IX Header "BUGS" +The cipher and start time should be printed out in human readable form. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBciphers\fR\|(1), \fBs_server\fR\|(1) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2020 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/smime.1 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/smime.1 new file mode 100644 index 00000000..d61174c9 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/smime.1 @@ -0,0 +1,617 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SMIME 1" +.TH SMIME 1 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +openssl\-smime, smime \- S/MIME utility +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +\&\fBopenssl\fR \fBsmime\fR +[\fB\-help\fR] +[\fB\-encrypt\fR] +[\fB\-decrypt\fR] +[\fB\-sign\fR] +[\fB\-resign\fR] +[\fB\-verify\fR] +[\fB\-pk7out\fR] +[\fB\-binary\fR] +[\fB\-crlfeol\fR] +[\fB\-\f(BIcipher\fB\fR] +[\fB\-in file\fR] +[\fB\-CAfile file\fR] +[\fB\-CApath dir\fR] +[\fB\-no\-CAfile\fR] +[\fB\-no\-CApath\fR] +[\fB\-attime timestamp\fR] +[\fB\-check_ss_sig\fR] +[\fB\-crl_check\fR] +[\fB\-crl_check_all\fR] +[\fB\-explicit_policy\fR] +[\fB\-extended_crl\fR] +[\fB\-ignore_critical\fR] +[\fB\-inhibit_any\fR] +[\fB\-inhibit_map\fR] +[\fB\-partial_chain\fR] +[\fB\-policy arg\fR] +[\fB\-policy_check\fR] +[\fB\-policy_print\fR] +[\fB\-purpose purpose\fR] +[\fB\-suiteB_128\fR] +[\fB\-suiteB_128_only\fR] +[\fB\-suiteB_192\fR] +[\fB\-trusted_first\fR] +[\fB\-no_alt_chains\fR] +[\fB\-use_deltas\fR] +[\fB\-auth_level num\fR] +[\fB\-verify_depth num\fR] +[\fB\-verify_email email\fR] +[\fB\-verify_hostname hostname\fR] +[\fB\-verify_ip ip\fR] +[\fB\-verify_name name\fR] +[\fB\-x509_strict\fR] +[\fB\-certfile file\fR] +[\fB\-signer file\fR] +[\fB\-recip file\fR] +[\fB\-inform SMIME|PEM|DER\fR] +[\fB\-passin arg\fR] +[\fB\-inkey file_or_id\fR] +[\fB\-out file\fR] +[\fB\-outform SMIME|PEM|DER\fR] +[\fB\-content file\fR] +[\fB\-to addr\fR] +[\fB\-from ad\fR] +[\fB\-subject s\fR] +[\fB\-text\fR] +[\fB\-indef\fR] +[\fB\-noindef\fR] +[\fB\-stream\fR] +[\fB\-rand file...\fR] +[\fB\-writerand file\fR] +[\fB\-md digest\fR] +[cert.pem]... +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fBsmime\fR command handles S/MIME mail. It can encrypt, decrypt, sign and +verify S/MIME messages. +.SH "OPTIONS" +.IX Header "OPTIONS" +There are six operation options that set the type of operation to be performed. +The meaning of the other options varies according to the operation type. +.IP "\fB\-help\fR" 4 +.IX Item "-help" +Print out a usage message. +.IP "\fB\-encrypt\fR" 4 +.IX Item "-encrypt" +Encrypt mail for the given recipient certificates. Input file is the message +to be encrypted. The output file is the encrypted mail in \s-1MIME\s0 format. +.Sp +Note that no revocation check is done for the recipient cert, so if that +key has been compromised, others may be able to decrypt the text. +.IP "\fB\-decrypt\fR" 4 +.IX Item "-decrypt" +Decrypt mail using the supplied certificate and private key. Expects an +encrypted mail message in \s-1MIME\s0 format for the input file. The decrypted mail +is written to the output file. +.IP "\fB\-sign\fR" 4 +.IX Item "-sign" +Sign mail using the supplied certificate and private key. Input file is +the message to be signed. The signed message in \s-1MIME\s0 format is written +to the output file. +.IP "\fB\-verify\fR" 4 +.IX Item "-verify" +Verify signed mail. Expects a signed mail message on input and outputs +the signed data. Both clear text and opaque signing is supported. +.IP "\fB\-pk7out\fR" 4 +.IX Item "-pk7out" +Takes an input message and writes out a \s-1PEM\s0 encoded PKCS#7 structure. +.IP "\fB\-resign\fR" 4 +.IX Item "-resign" +Resign a message: take an existing message and one or more new signers. +.IP "\fB\-in filename\fR" 4 +.IX Item "-in filename" +The input message to be encrypted or signed or the \s-1MIME\s0 message to +be decrypted or verified. +.IP "\fB\-inform SMIME|PEM|DER\fR" 4 +.IX Item "-inform SMIME|PEM|DER" +This specifies the input format for the PKCS#7 structure. The default +is \fB\s-1SMIME\s0\fR which reads an S/MIME format message. \fB\s-1PEM\s0\fR and \fB\s-1DER\s0\fR +format change this to expect \s-1PEM\s0 and \s-1DER\s0 format PKCS#7 structures +instead. This currently only affects the input format of the PKCS#7 +structure, if no PKCS#7 structure is being input (for example with +\&\fB\-encrypt\fR or \fB\-sign\fR) this option has no effect. +.IP "\fB\-out filename\fR" 4 +.IX Item "-out filename" +The message text that has been decrypted or verified or the output \s-1MIME\s0 +format message that has been signed or verified. +.IP "\fB\-outform SMIME|PEM|DER\fR" 4 +.IX Item "-outform SMIME|PEM|DER" +This specifies the output format for the PKCS#7 structure. The default +is \fB\s-1SMIME\s0\fR which write an S/MIME format message. \fB\s-1PEM\s0\fR and \fB\s-1DER\s0\fR +format change this to write \s-1PEM\s0 and \s-1DER\s0 format PKCS#7 structures +instead. This currently only affects the output format of the PKCS#7 +structure, if no PKCS#7 structure is being output (for example with +\&\fB\-verify\fR or \fB\-decrypt\fR) this option has no effect. +.IP "\fB\-stream \-indef \-noindef\fR" 4 +.IX Item "-stream -indef -noindef" +The \fB\-stream\fR and \fB\-indef\fR options are equivalent and enable streaming I/O +for encoding operations. This permits single pass processing of data without +the need to hold the entire contents in memory, potentially supporting very +large files. Streaming is automatically set for S/MIME signing with detached +data if the output format is \fB\s-1SMIME\s0\fR it is currently off by default for all +other operations. +.IP "\fB\-noindef\fR" 4 +.IX Item "-noindef" +Disable streaming I/O where it would produce and indefinite length constructed +encoding. This option currently has no effect. In future streaming will be +enabled by default on all relevant operations and this option will disable it. +.IP "\fB\-content filename\fR" 4 +.IX Item "-content filename" +This specifies a file containing the detached content, this is only +useful with the \fB\-verify\fR command. This is only usable if the PKCS#7 +structure is using the detached signature form where the content is +not included. This option will override any content if the input format +is S/MIME and it uses the multipart/signed \s-1MIME\s0 content type. +.IP "\fB\-text\fR" 4 +.IX Item "-text" +This option adds plain text (text/plain) \s-1MIME\s0 headers to the supplied +message if encrypting or signing. If decrypting or verifying it strips +off text headers: if the decrypted or verified message is not of \s-1MIME\s0 +type text/plain then an error occurs. +.IP "\fB\-CAfile file\fR" 4 +.IX Item "-CAfile file" +A file containing trusted \s-1CA\s0 certificates, only used with \fB\-verify\fR. +.IP "\fB\-CApath dir\fR" 4 +.IX Item "-CApath dir" +A directory containing trusted \s-1CA\s0 certificates, only used with +\&\fB\-verify\fR. This directory must be a standard certificate directory: that +is a hash of each subject name (using \fBx509 \-hash\fR) should be linked +to each certificate. +.IP "\fB\-no\-CAfile\fR" 4 +.IX Item "-no-CAfile" +Do not load the trusted \s-1CA\s0 certificates from the default file location. +.IP "\fB\-no\-CApath\fR" 4 +.IX Item "-no-CApath" +Do not load the trusted \s-1CA\s0 certificates from the default directory location. +.IP "\fB\-md digest\fR" 4 +.IX Item "-md digest" +Digest algorithm to use when signing or resigning. If not present then the +default digest algorithm for the signing key will be used (usually \s-1SHA1\s0). +.IP "\fB\-\f(BIcipher\fB\fR" 4 +.IX Item "-cipher" +The encryption algorithm to use. For example \s-1DES\s0 (56 bits) \- \fB\-des\fR, +triple \s-1DES\s0 (168 bits) \- \fB\-des3\fR, +\&\fBEVP_get_cipherbyname()\fR function) can also be used preceded by a dash, for +example \fB\-aes\-128\-cbc\fR. See \fBenc\fR for list of ciphers +supported by your version of OpenSSL. +.Sp +If not specified triple \s-1DES\s0 is used. Only used with \fB\-encrypt\fR. +.IP "\fB\-nointern\fR" 4 +.IX Item "-nointern" +When verifying a message normally certificates (if any) included in +the message are searched for the signing certificate. With this option +only the certificates specified in the \fB\-certfile\fR option are used. +The supplied certificates can still be used as untrusted CAs however. +.IP "\fB\-noverify\fR" 4 +.IX Item "-noverify" +Do not verify the signers certificate of a signed message. +.IP "\fB\-nochain\fR" 4 +.IX Item "-nochain" +Do not do chain verification of signers certificates: that is don't +use the certificates in the signed message as untrusted CAs. +.IP "\fB\-nosigs\fR" 4 +.IX Item "-nosigs" +Don't try to verify the signatures on the message. +.IP "\fB\-nocerts\fR" 4 +.IX Item "-nocerts" +When signing a message the signer's certificate is normally included +with this option it is excluded. This will reduce the size of the +signed message but the verifier must have a copy of the signers certificate +available locally (passed using the \fB\-certfile\fR option for example). +.IP "\fB\-noattr\fR" 4 +.IX Item "-noattr" +Normally when a message is signed a set of attributes are included which +include the signing time and supported symmetric algorithms. With this +option they are not included. +.IP "\fB\-binary\fR" 4 +.IX Item "-binary" +Normally the input message is converted to \*(L"canonical\*(R" format which is +effectively using \s-1CR\s0 and \s-1LF\s0 as end of line: as required by the S/MIME +specification. When this option is present no translation occurs. This +is useful when handling binary data which may not be in \s-1MIME\s0 format. +.IP "\fB\-crlfeol\fR" 4 +.IX Item "-crlfeol" +Normally the output file uses a single \fB\s-1LF\s0\fR as end of line. When this +option is present \fB\s-1CRLF\s0\fR is used instead. +.IP "\fB\-nodetach\fR" 4 +.IX Item "-nodetach" +When signing a message use opaque signing: this form is more resistant +to translation by mail relays but it cannot be read by mail agents that +do not support S/MIME. Without this option cleartext signing with +the \s-1MIME\s0 type multipart/signed is used. +.IP "\fB\-certfile file\fR" 4 +.IX Item "-certfile file" +Allows additional certificates to be specified. When signing these will +be included with the message. When verifying these will be searched for +the signers certificates. The certificates should be in \s-1PEM\s0 format. +.IP "\fB\-signer file\fR" 4 +.IX Item "-signer file" +A signing certificate when signing or resigning a message, this option can be +used multiple times if more than one signer is required. If a message is being +verified then the signers certificates will be written to this file if the +verification was successful. +.IP "\fB\-recip file\fR" 4 +.IX Item "-recip file" +The recipients certificate when decrypting a message. This certificate +must match one of the recipients of the message or an error occurs. +.IP "\fB\-inkey file_or_id\fR" 4 +.IX Item "-inkey file_or_id" +The private key to use when signing or decrypting. This must match the +corresponding certificate. If this option is not specified then the +private key must be included in the certificate file specified with +the \fB\-recip\fR or \fB\-signer\fR file. When signing this option can be used +multiple times to specify successive keys. +If no engine is used, the argument is taken as a file; if an engine is +specified, the argument is given to the engine as a key identifier. +.IP "\fB\-passin arg\fR" 4 +.IX Item "-passin arg" +The private key password source. For more information about the format of \fBarg\fR +see the \fB\s-1PASS PHRASE ARGUMENTS\s0\fR section in \fBopenssl\fR\|(1). +.IP "\fB\-rand file...\fR" 4 +.IX Item "-rand file..." +A file or files containing random data used to seed the random number +generator. +Multiple files can be specified separated by an OS-dependent character. +The separator is \fB;\fR for MS-Windows, \fB,\fR for OpenVMS, and \fB:\fR for +all others. +.IP "[\fB\-writerand file\fR]" 4 +.IX Item "[-writerand file]" +Writes random data to the specified \fIfile\fR upon exit. +This can be used with a subsequent \fB\-rand\fR flag. +.IP "\fBcert.pem...\fR" 4 +.IX Item "cert.pem..." +One or more certificates of message recipients: used when encrypting +a message. +.IP "\fB\-to, \-from, \-subject\fR" 4 +.IX Item "-to, -from, -subject" +The relevant mail headers. These are included outside the signed +portion of a message so they may be included manually. If signing +then many S/MIME mail clients check the signers certificate's email +address matches that specified in the From: address. +.IP "\fB\-attime\fR, \fB\-check_ss_sig\fR, \fB\-crl_check\fR, \fB\-crl_check_all\fR, \fB\-explicit_policy\fR, \fB\-extended_crl\fR, \fB\-ignore_critical\fR, \fB\-inhibit_any\fR, \fB\-inhibit_map\fR, \fB\-no_alt_chains\fR, \fB\-partial_chain\fR, \fB\-policy\fR, \fB\-policy_check\fR, \fB\-policy_print\fR, \fB\-purpose\fR, \fB\-suiteB_128\fR, \fB\-suiteB_128_only\fR, \fB\-suiteB_192\fR, \fB\-trusted_first\fR, \fB\-use_deltas\fR, \fB\-auth_level\fR, \fB\-verify_depth\fR, \fB\-verify_email\fR, \fB\-verify_hostname\fR, \fB\-verify_ip\fR, \fB\-verify_name\fR, \fB\-x509_strict\fR" 4 +.IX Item "-attime, -check_ss_sig, -crl_check, -crl_check_all, -explicit_policy, -extended_crl, -ignore_critical, -inhibit_any, -inhibit_map, -no_alt_chains, -partial_chain, -policy, -policy_check, -policy_print, -purpose, -suiteB_128, -suiteB_128_only, -suiteB_192, -trusted_first, -use_deltas, -auth_level, -verify_depth, -verify_email, -verify_hostname, -verify_ip, -verify_name, -x509_strict" +Set various options of certificate chain verification. See +\&\fBverify\fR\|(1) manual page for details. +.SH "NOTES" +.IX Header "NOTES" +The \s-1MIME\s0 message must be sent without any blank lines between the +headers and the output. Some mail programs will automatically add +a blank line. Piping the mail directly to sendmail is one way to +achieve the correct format. +.PP +The supplied message to be signed or encrypted must include the +necessary \s-1MIME\s0 headers or many S/MIME clients won't display it +properly (if at all). You can use the \fB\-text\fR option to automatically +add plain text headers. +.PP +A \*(L"signed and encrypted\*(R" message is one where a signed message is +then encrypted. This can be produced by encrypting an already signed +message: see the examples section. +.PP +This version of the program only allows one signer per message but it +will verify multiple signers on received messages. Some S/MIME clients +choke if a message contains multiple signers. It is possible to sign +messages \*(L"in parallel\*(R" by signing an already signed message. +.PP +The options \fB\-encrypt\fR and \fB\-decrypt\fR reflect common usage in S/MIME +clients. Strictly speaking these process PKCS#7 enveloped data: PKCS#7 +encrypted data is used for other purposes. +.PP +The \fB\-resign\fR option uses an existing message digest when adding a new +signer. This means that attributes must be present in at least one existing +signer using the same message digest or this operation will fail. +.PP +The \fB\-stream\fR and \fB\-indef\fR options enable streaming I/O support. +As a result the encoding is \s-1BER\s0 using indefinite length constructed encoding +and no longer \s-1DER.\s0 Streaming is supported for the \fB\-encrypt\fR operation and the +\&\fB\-sign\fR operation if the content is not detached. +.PP +Streaming is always used for the \fB\-sign\fR operation with detached data but +since the content is no longer part of the PKCS#7 structure the encoding +remains \s-1DER.\s0 +.SH "EXIT CODES" +.IX Header "EXIT CODES" +.IP "0" 4 +The operation was completely successfully. +.IP "1" 4 +.IX Item "1" +An error occurred parsing the command options. +.IP "2" 4 +.IX Item "2" +One of the input files could not be read. +.IP "3" 4 +.IX Item "3" +An error occurred creating the PKCS#7 file or when reading the \s-1MIME\s0 +message. +.IP "4" 4 +.IX Item "4" +An error occurred decrypting or verifying the message. +.IP "5" 4 +.IX Item "5" +The message was verified correctly but an error occurred writing out +the signers certificates. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +Create a cleartext signed message: +.PP +.Vb 2 +\& openssl smime \-sign \-in message.txt \-text \-out mail.msg \e +\& \-signer mycert.pem +.Ve +.PP +Create an opaque signed message: +.PP +.Vb 2 +\& openssl smime \-sign \-in message.txt \-text \-out mail.msg \-nodetach \e +\& \-signer mycert.pem +.Ve +.PP +Create a signed message, include some additional certificates and +read the private key from another file: +.PP +.Vb 2 +\& openssl smime \-sign \-in in.txt \-text \-out mail.msg \e +\& \-signer mycert.pem \-inkey mykey.pem \-certfile mycerts.pem +.Ve +.PP +Create a signed message with two signers: +.PP +.Vb 2 +\& openssl smime \-sign \-in message.txt \-text \-out mail.msg \e +\& \-signer mycert.pem \-signer othercert.pem +.Ve +.PP +Send a signed message under Unix directly to sendmail, including headers: +.PP +.Vb 3 +\& openssl smime \-sign \-in in.txt \-text \-signer mycert.pem \e +\& \-from steve@openssl.org \-to someone@somewhere \e +\& \-subject "Signed message" | sendmail someone@somewhere +.Ve +.PP +Verify a message and extract the signer's certificate if successful: +.PP +.Vb 1 +\& openssl smime \-verify \-in mail.msg \-signer user.pem \-out signedtext.txt +.Ve +.PP +Send encrypted mail using triple \s-1DES:\s0 +.PP +.Vb 3 +\& openssl smime \-encrypt \-in in.txt \-from steve@openssl.org \e +\& \-to someone@somewhere \-subject "Encrypted message" \e +\& \-des3 user.pem \-out mail.msg +.Ve +.PP +Sign and encrypt mail: +.PP +.Vb 4 +\& openssl smime \-sign \-in ml.txt \-signer my.pem \-text \e +\& | openssl smime \-encrypt \-out mail.msg \e +\& \-from steve@openssl.org \-to someone@somewhere \e +\& \-subject "Signed and Encrypted message" \-des3 user.pem +.Ve +.PP +Note: the encryption command does not include the \fB\-text\fR option because the +message being encrypted already has \s-1MIME\s0 headers. +.PP +Decrypt mail: +.PP +.Vb 1 +\& openssl smime \-decrypt \-in mail.msg \-recip mycert.pem \-inkey key.pem +.Ve +.PP +The output from Netscape form signing is a PKCS#7 structure with the +detached signature format. You can use this program to verify the +signature by line wrapping the base64 encoded structure and surrounding +it with: +.PP +.Vb 2 +\& \-\-\-\-\-BEGIN PKCS7\-\-\-\-\- +\& \-\-\-\-\-END PKCS7\-\-\-\-\- +.Ve +.PP +and using the command: +.PP +.Vb 1 +\& openssl smime \-verify \-inform PEM \-in signature.pem \-content content.txt +.Ve +.PP +Alternatively you can base64 decode the signature and use: +.PP +.Vb 1 +\& openssl smime \-verify \-inform DER \-in signature.der \-content content.txt +.Ve +.PP +Create an encrypted message using 128 bit Camellia: +.PP +.Vb 1 +\& openssl smime \-encrypt \-in plain.txt \-camellia128 \-out mail.msg cert.pem +.Ve +.PP +Add a signer to an existing message: +.PP +.Vb 1 +\& openssl smime \-resign \-in mail.msg \-signer newsign.pem \-out mail2.msg +.Ve +.SH "BUGS" +.IX Header "BUGS" +The \s-1MIME\s0 parser isn't very clever: it seems to handle most messages that I've +thrown at it but it may choke on others. +.PP +The code currently will only write out the signer's certificate to a file: if +the signer has a separate encryption certificate this must be manually +extracted. There should be some heuristic that determines the correct +encryption certificate. +.PP +Ideally a database should be maintained of a certificates for each email +address. +.PP +The code doesn't currently take note of the permitted symmetric encryption +algorithms as supplied in the SMIMECapabilities signed attribute. This means the +user has to manually include the correct encryption algorithm. It should store +the list of permitted ciphers in a database and only use those. +.PP +No revocation checking is done on the signer's certificate. +.PP +The current code can only handle S/MIME v2 messages, the more complex S/MIME v3 +structures may cause parsing errors. +.SH "HISTORY" +.IX Header "HISTORY" +The use of multiple \fB\-signer\fR options and the \fB\-resign\fR command were first +added in OpenSSL 1.0.0 +.PP +The \-no_alt_chains option was added in OpenSSL 1.1.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/speed.1 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/speed.1 new file mode 100644 index 00000000..8b6998ff --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/speed.1 @@ -0,0 +1,220 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SPEED 1" +.TH SPEED 1 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +openssl\-speed, speed \- test library performance +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +\&\fBopenssl speed\fR +[\fB\-help\fR] +[\fB\-engine id\fR] +[\fB\-elapsed\fR] +[\fB\-evp algo\fR] +[\fB\-decrypt\fR] +[\fB\-rand file...\fR] +[\fB\-writerand file\fR] +[\fB\-primes num\fR] +[\fB\-seconds num\fR] +[\fB\-bytes num\fR] +[\fBalgorithm...\fR] +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +This command is used to test the performance of cryptographic algorithms. +To see the list of supported algorithms, use the \fIlist \-\-digest\-commands\fR +or \fIlist \-\-cipher\-commands\fR command. The global \s-1CSPRNG\s0 is denoted by +the \fIrand\fR algorithm name. +.SH "OPTIONS" +.IX Header "OPTIONS" +.IP "\fB\-help\fR" 4 +.IX Item "-help" +Print out a usage message. +.IP "\fB\-engine id\fR" 4 +.IX Item "-engine id" +Specifying an engine (by its unique \fBid\fR string) will cause \fBspeed\fR +to attempt to obtain a functional reference to the specified engine, +thus initialising it if needed. The engine will then be set as the default +for all available algorithms. +.IP "\fB\-elapsed\fR" 4 +.IX Item "-elapsed" +When calculating operations\- or bytes-per-second, use wall-clock time +instead of \s-1CPU\s0 user time as divisor. It can be useful when testing speed +of hardware engines. +.IP "\fB\-evp algo\fR" 4 +.IX Item "-evp algo" +Use the specified cipher or message digest algorithm via the \s-1EVP\s0 interface. +If \fBalgo\fR is an \s-1AEAD\s0 cipher, then you can pass <\-aead> to benchmark a +TLS-like sequence. And if \fBalgo\fR is a multi-buffer capable cipher, e.g. +aes\-128\-cbc\-hmac\-sha1, then \fB\-mb\fR will time multi-buffer operation. +.IP "\fB\-decrypt\fR" 4 +.IX Item "-decrypt" +Time the decryption instead of encryption. Affects only the \s-1EVP\s0 testing. +.IP "\fB\-rand file...\fR" 4 +.IX Item "-rand file..." +A file or files containing random data used to seed the random number +generator. +Multiple files can be specified separated by an OS-dependent character. +The separator is \fB;\fR for MS-Windows, \fB,\fR for OpenVMS, and \fB:\fR for +all others. +.IP "[\fB\-writerand file\fR]" 4 +.IX Item "[-writerand file]" +Writes random data to the specified \fIfile\fR upon exit. +This can be used with a subsequent \fB\-rand\fR flag. +.IP "\fB\-primes num\fR" 4 +.IX Item "-primes num" +Generate a \fBnum\fR\-prime \s-1RSA\s0 key and use it to run the benchmarks. This option +is only effective if \s-1RSA\s0 algorithm is specified to test. +.IP "\fB\-seconds num\fR" 4 +.IX Item "-seconds num" +Run benchmarks for \fBnum\fR seconds. +.IP "\fB\-bytes num\fR" 4 +.IX Item "-bytes num" +Run benchmarks on \fBnum\fR\-byte buffers. Affects ciphers, digests and the \s-1CSPRNG.\s0 +.IP "\fB[zero or more test algorithms]\fR" 4 +.IX Item "[zero or more test algorithms]" +If any options are given, \fBspeed\fR tests those algorithms, otherwise a +pre-compiled grand selection is tested. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/spkac.1 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/spkac.1 new file mode 100644 index 00000000..f5691003 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/spkac.1 @@ -0,0 +1,274 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SPKAC 1" +.TH SPKAC 1 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +openssl\-spkac, spkac \- SPKAC printing and generating utility +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +\&\fBopenssl\fR \fBspkac\fR +[\fB\-help\fR] +[\fB\-in filename\fR] +[\fB\-out filename\fR] +[\fB\-key keyfile\fR] +[\fB\-keyform PEM|DER|ENGINE\fR] +[\fB\-passin arg\fR] +[\fB\-challenge string\fR] +[\fB\-pubkey\fR] +[\fB\-spkac spkacname\fR] +[\fB\-spksect section\fR] +[\fB\-noout\fR] +[\fB\-verify\fR] +[\fB\-engine id\fR] +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fBspkac\fR command processes Netscape signed public key and challenge +(\s-1SPKAC\s0) files. It can print out their contents, verify the signature and +produce its own SPKACs from a supplied private key. +.SH "OPTIONS" +.IX Header "OPTIONS" +.IP "\fB\-help\fR" 4 +.IX Item "-help" +Print out a usage message. +.IP "\fB\-in filename\fR" 4 +.IX Item "-in filename" +This specifies the input filename to read from or standard input if this +option is not specified. Ignored if the \fB\-key\fR option is used. +.IP "\fB\-out filename\fR" 4 +.IX Item "-out filename" +Specifies the output filename to write to or standard output by +default. +.IP "\fB\-key keyfile\fR" 4 +.IX Item "-key keyfile" +Create an \s-1SPKAC\s0 file using the private key in \fBkeyfile\fR. The +\&\fB\-in\fR, \fB\-noout\fR, \fB\-spksect\fR and \fB\-verify\fR options are ignored if +present. +.IP "\fB\-keyform PEM|DER|ENGINE\fR" 4 +.IX Item "-keyform PEM|DER|ENGINE" +Whether the key format is \s-1PEM, DER,\s0 or an engine-backed key. +The default is \s-1PEM.\s0 +.IP "\fB\-passin password\fR" 4 +.IX Item "-passin password" +The input file password source. For more information about the format of \fBarg\fR +see the \fB\s-1PASS PHRASE ARGUMENTS\s0\fR section in \fBopenssl\fR\|(1). +.IP "\fB\-challenge string\fR" 4 +.IX Item "-challenge string" +Specifies the challenge string if an \s-1SPKAC\s0 is being created. +.IP "\fB\-spkac spkacname\fR" 4 +.IX Item "-spkac spkacname" +Allows an alternative name form the variable containing the +\&\s-1SPKAC.\s0 The default is \*(L"\s-1SPKAC\*(R".\s0 This option affects both +generated and input \s-1SPKAC\s0 files. +.IP "\fB\-spksect section\fR" 4 +.IX Item "-spksect section" +Allows an alternative name form the section containing the +\&\s-1SPKAC.\s0 The default is the default section. +.IP "\fB\-noout\fR" 4 +.IX Item "-noout" +Don't output the text version of the \s-1SPKAC\s0 (not used if an +\&\s-1SPKAC\s0 is being created). +.IP "\fB\-pubkey\fR" 4 +.IX Item "-pubkey" +Output the public key of an \s-1SPKAC\s0 (not used if an \s-1SPKAC\s0 is +being created). +.IP "\fB\-verify\fR" 4 +.IX Item "-verify" +Verifies the digital signature on the supplied \s-1SPKAC.\s0 +.IP "\fB\-engine id\fR" 4 +.IX Item "-engine id" +Specifying an engine (by its unique \fBid\fR string) will cause \fBspkac\fR +to attempt to obtain a functional reference to the specified engine, +thus initialising it if needed. The engine will then be set as the default +for all available algorithms. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +Print out the contents of an \s-1SPKAC:\s0 +.PP +.Vb 1 +\& openssl spkac \-in spkac.cnf +.Ve +.PP +Verify the signature of an \s-1SPKAC:\s0 +.PP +.Vb 1 +\& openssl spkac \-in spkac.cnf \-noout \-verify +.Ve +.PP +Create an \s-1SPKAC\s0 using the challenge string \*(L"hello\*(R": +.PP +.Vb 1 +\& openssl spkac \-key key.pem \-challenge hello \-out spkac.cnf +.Ve +.PP +Example of an \s-1SPKAC,\s0 (long lines split up for clarity): +.PP +.Vb 6 +\& SPKAC=MIG5MGUwXDANBgkqhkiG9w0BAQEFAANLADBIAkEA\e +\& 1cCoq2Wa3Ixs47uI7FPVwHVIPDx5yso105Y6zpozam135a\e +\& 8R0CpoRvkkigIyXfcCjiVi5oWk+6FfPaD03uPFoQIDAQAB\e +\& FgVoZWxsbzANBgkqhkiG9w0BAQQFAANBAFpQtY/FojdwkJ\e +\& h1bEIYuc2EeM2KHTWPEepWYeawvHD0gQ3DngSC75YCWnnD\e +\& dq+NQ3F+X4deMx9AaEglZtULwV4= +.Ve +.SH "NOTES" +.IX Header "NOTES" +A created \s-1SPKAC\s0 with suitable \s-1DN\s0 components appended can be fed into +the \fBca\fR utility. +.PP +SPKACs are typically generated by Netscape when a form is submitted +containing the \fB\s-1KEYGEN\s0\fR tag as part of the certificate enrollment +process. +.PP +The challenge string permits a primitive form of proof of possession +of private key. By checking the \s-1SPKAC\s0 signature and a random challenge +string some guarantee is given that the user knows the private key +corresponding to the public key being certified. This is important in +some applications. Without this it is possible for a previous \s-1SPKAC\s0 +to be used in a \*(L"replay attack\*(R". +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBca\fR\|(1) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/srp.1 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/srp.1 new file mode 100644 index 00000000..7ad993d1 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/srp.1 @@ -0,0 +1,198 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SRP 1" +.TH SRP 1 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +openssl\-srp, srp \- maintain SRP password file +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +\&\fBopenssl srp\fR +[\fB\-help\fR] +[\fB\-verbose\fR] +[\fB\-add\fR] +[\fB\-modify\fR] +[\fB\-delete\fR] +[\fB\-list\fR] +[\fB\-name section\fR] +[\fB\-config file\fR] +[\fB\-srpvfile file\fR] +[\fB\-gn identifier\fR] +[\fB\-userinfo text...\fR] +[\fB\-passin arg\fR] +[\fB\-passout arg\fR] +[\fIuser...\fR] +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fBsrp\fR command is user to maintain an \s-1SRP\s0 (secure remote password) +file. +At most one of the \fB\-add\fR, \fB\-modify\fR, \fB\-delete\fR, and \fB\-list\fR options +can be specified. +These options take zero or more usernames as parameters and perform the +appropriate operation on the \s-1SRP\s0 file. +For \fB\-list\fR, if no \fBuser\fR is given then all users are displayed. +.PP +The configuration file to use, and the section within the file, can be +specified with the \fB\-config\fR and \fB\-name\fR flags, respectively. +If the config file is not specified, the \fB\-srpvfile\fR can be used to +just specify the file to operate on. +.PP +The \fB\-userinfo\fR option specifies additional information to add when +adding or modifying a user. +.PP +The \fB\-gn\fR flag specifies the \fBg\fR and \fBN\fR values, using one of +the strengths defined in \s-1IETF RFC 5054.\s0 +.PP +The \fB\-passin\fR and \fB\-passout\fR arguments are parsed as described in +the \fBopenssl\fR\|(1) command. +.SH "OPTIONS" +.IX Header "OPTIONS" +.IP "[\fB\-help\fR]" 4 +.IX Item "[-help]" +Display an option summary. +.IP "[\fB\-verbose\fR]" 4 +.IX Item "[-verbose]" +Generate verbose output while processing. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/storeutl.1 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/storeutl.1 new file mode 100644 index 00000000..a15a3fc6 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/storeutl.1 @@ -0,0 +1,249 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "STOREUTL 1" +.TH STOREUTL 1 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +openssl\-storeutl, storeutl \- STORE utility +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +\&\fBopenssl\fR \fBstoreutl\fR +[\fB\-help\fR] +[\fB\-out file\fR] +[\fB\-noout\fR] +[\fB\-passin arg\fR] +[\fB\-text arg\fR] +[\fB\-engine id\fR] +[\fB\-r\fR] +[\fB\-certs\fR] +[\fB\-keys\fR] +[\fB\-crls\fR] +[\fB\-subject arg\fR] +[\fB\-issuer arg\fR] +[\fB\-serial arg\fR] +[\fB\-alias arg\fR] +[\fB\-fingerprint arg\fR] +[\fB\-\f(BIdigest\fB\fR] +\&\fBuri\fR ... +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fBstoreutl\fR command can be used to display the contents (after decryption +as the case may be) fetched from the given URIs. +.SH "OPTIONS" +.IX Header "OPTIONS" +.IP "\fB\-help\fR" 4 +.IX Item "-help" +Print out a usage message. +.IP "\fB\-out filename\fR" 4 +.IX Item "-out filename" +specifies the output filename to write to or standard output by +default. +.IP "\fB\-noout\fR" 4 +.IX Item "-noout" +this option prevents output of the \s-1PEM\s0 data. +.IP "\fB\-passin arg\fR" 4 +.IX Item "-passin arg" +the key password source. For more information about the format of \fBarg\fR +see the \fB\s-1PASS PHRASE ARGUMENTS\s0\fR section in \fBopenssl\fR\|(1). +.IP "\fB\-text\fR" 4 +.IX Item "-text" +Prints out the objects in text form, similarly to the \fB\-text\fR output from +\&\fBopenssl x509\fR, \fBopenssl pkey\fR, etc. +.IP "\fB\-engine id\fR" 4 +.IX Item "-engine id" +specifying an engine (by its unique \fBid\fR string) will cause \fBstoreutl\fR +to attempt to obtain a functional reference to the specified engine, +thus initialising it if needed. +The engine will then be set as the default for all available algorithms. +.IP "\fB\-r\fR" 4 +.IX Item "-r" +Fetch objects recursively when possible. +.IP "\fB\-certs\fR" 4 +.IX Item "-certs" +.PD 0 +.IP "\fB\-keys\fR" 4 +.IX Item "-keys" +.IP "\fB\-crls\fR" 4 +.IX Item "-crls" +.PD +Only select the certificates, keys or CRLs from the given \s-1URI.\s0 +However, if this \s-1URI\s0 would return a set of names (URIs), those are always +returned. +.IP "\fB\-subject arg\fR" 4 +.IX Item "-subject arg" +Search for an object having the subject name \fBarg\fR. +The arg must be formatted as \fI/type0=value0/type1=value1/type2=...\fR. +Keyword characters may be escaped by \e (backslash), and whitespace is retained. +Empty values are permitted but are ignored for the search. That is, +a search with an empty value will have the same effect as not specifying +the type at all. +.IP "\fB\-issuer arg\fR" 4 +.IX Item "-issuer arg" +.PD 0 +.IP "\fB\-serial arg\fR" 4 +.IX Item "-serial arg" +.PD +Search for an object having the given issuer name and serial number. +These two options \fImust\fR be used together. +The issuer arg must be formatted as \fI/type0=value0/type1=value1/type2=...\fR, +characters may be escaped by \e (backslash), no spaces are skipped. +The serial arg may be specified as a decimal value or a hex value if preceded +by \fB0x\fR. +.IP "\fB\-alias arg\fR" 4 +.IX Item "-alias arg" +Search for an object having the given alias. +.IP "\fB\-fingerprint arg\fR" 4 +.IX Item "-fingerprint arg" +Search for an object having the given fingerprint. +.IP "\fB\-\f(BIdigest\fB\fR" 4 +.IX Item "-digest" +The digest that was used to compute the fingerprint given with \fB\-fingerprint\fR. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBopenssl\fR\|(1) +.SH "HISTORY" +.IX Header "HISTORY" +The \fBopenssl\fR \fBstoreutl\fR app was added in OpenSSL 1.1.1. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2016\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/ts.1 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/ts.1 new file mode 100644 index 00000000..e7d59eb3 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/ts.1 @@ -0,0 +1,727 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "TS 1" +.TH TS 1 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +openssl\-ts, ts \- Time Stamping Authority tool (client/server) +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +\&\fBopenssl\fR \fBts\fR +\&\fB\-query\fR +[\fB\-rand file...\fR] +[\fB\-writerand file\fR] +[\fB\-config\fR configfile] +[\fB\-data\fR file_to_hash] +[\fB\-digest\fR digest_bytes] +[\fB\-\f(BIdigest\fB\fR] +[\fB\-tspolicy\fR object_id] +[\fB\-no_nonce\fR] +[\fB\-cert\fR] +[\fB\-in\fR request.tsq] +[\fB\-out\fR request.tsq] +[\fB\-text\fR] +.PP +\&\fBopenssl\fR \fBts\fR +\&\fB\-reply\fR +[\fB\-config\fR configfile] +[\fB\-section\fR tsa_section] +[\fB\-queryfile\fR request.tsq] +[\fB\-passin\fR password_src] +[\fB\-signer\fR tsa_cert.pem] +[\fB\-inkey\fR file_or_id] +[\fB\-\f(BIdigest\fB\fR] +[\fB\-chain\fR certs_file.pem] +[\fB\-tspolicy\fR object_id] +[\fB\-in\fR response.tsr] +[\fB\-token_in\fR] +[\fB\-out\fR response.tsr] +[\fB\-token_out\fR] +[\fB\-text\fR] +[\fB\-engine\fR id] +.PP +\&\fBopenssl\fR \fBts\fR +\&\fB\-verify\fR +[\fB\-data\fR file_to_hash] +[\fB\-digest\fR digest_bytes] +[\fB\-queryfile\fR request.tsq] +[\fB\-in\fR response.tsr] +[\fB\-token_in\fR] +[\fB\-CApath\fR trusted_cert_path] +[\fB\-CAfile\fR trusted_certs.pem] +[\fB\-untrusted\fR cert_file.pem] +[\fIverify options\fR] +.PP +\&\fIverify options:\fR +[\-attime timestamp] +[\-check_ss_sig] +[\-crl_check] +[\-crl_check_all] +[\-explicit_policy] +[\-extended_crl] +[\-ignore_critical] +[\-inhibit_any] +[\-inhibit_map] +[\-issuer_checks] +[\-no_alt_chains] +[\-no_check_time] +[\-partial_chain] +[\-policy arg] +[\-policy_check] +[\-policy_print] +[\-purpose purpose] +[\-suiteB_128] +[\-suiteB_128_only] +[\-suiteB_192] +[\-trusted_first] +[\-use_deltas] +[\-auth_level num] +[\-verify_depth num] +[\-verify_email email] +[\-verify_hostname hostname] +[\-verify_ip ip] +[\-verify_name name] +[\-x509_strict] +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fBts\fR command is a basic Time Stamping Authority (\s-1TSA\s0) client and server +application as specified in \s-1RFC 3161\s0 (Time-Stamp Protocol, \s-1TSP\s0). A +\&\s-1TSA\s0 can be part of a \s-1PKI\s0 deployment and its role is to provide long +term proof of the existence of a certain datum before a particular +time. Here is a brief description of the protocol: +.IP "1." 4 +The \s-1TSA\s0 client computes a one-way hash value for a data file and sends +the hash to the \s-1TSA.\s0 +.IP "2." 4 +The \s-1TSA\s0 attaches the current date and time to the received hash value, +signs them and sends the time stamp token back to the client. By +creating this token the \s-1TSA\s0 certifies the existence of the original +data file at the time of response generation. +.IP "3." 4 +The \s-1TSA\s0 client receives the time stamp token and verifies the +signature on it. It also checks if the token contains the same hash +value that it had sent to the \s-1TSA.\s0 +.PP +There is one \s-1DER\s0 encoded protocol data unit defined for transporting a time +stamp request to the \s-1TSA\s0 and one for sending the time stamp response +back to the client. The \fBts\fR 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 +response corresponds to a particular request or a data file. +.PP +There is no support for sending the requests/responses automatically +over \s-1HTTP\s0 or \s-1TCP\s0 yet as suggested in \s-1RFC 3161.\s0 The users must send the +requests either by ftp or e\-mail. +.SH "OPTIONS" +.IX Header "OPTIONS" +.SS "Time Stamp Request generation" +.IX Subsection "Time Stamp Request generation" +The \fB\-query\fR switch can be used for creating and printing a time stamp +request with the following options: +.IP "\fB\-rand file...\fR" 4 +.IX Item "-rand file..." +A file or files containing random data used to seed the random number +generator. +Multiple files can be specified separated by an OS-dependent character. +The separator is \fB;\fR for MS-Windows, \fB,\fR for OpenVMS, and \fB:\fR for +all others. +.IP "[\fB\-writerand file\fR]" 4 +.IX Item "[-writerand file]" +Writes random data to the specified \fIfile\fR upon exit. +This can be used with a subsequent \fB\-rand\fR flag. +.IP "\fB\-config\fR configfile" 4 +.IX Item "-config configfile" +The configuration file to use. +Optional; for a description of the default value, +see \*(L"\s-1COMMAND SUMMARY\*(R"\s0 in \fBopenssl\fR\|(1). +.IP "\fB\-data\fR file_to_hash" 4 +.IX Item "-data file_to_hash" +The data file for which the time stamp request needs to be +created. stdin is the default if neither the \fB\-data\fR nor the \fB\-digest\fR +parameter is specified. (Optional) +.IP "\fB\-digest\fR digest_bytes" 4 +.IX Item "-digest digest_bytes" +It is possible to specify the message imprint explicitly without the data +file. The imprint must be specified in a hexadecimal format, two characters +per byte, the bytes optionally separated by colons (e.g. 1A:F6:01:... or +1AF601...). The number of bytes must match the message digest algorithm +in use. (Optional) +.IP "\fB\-\f(BIdigest\fB\fR" 4 +.IX Item "-digest" +The message digest to apply to the data file. +Any digest supported by the OpenSSL \fBdgst\fR command can be used. +The default is \s-1SHA\-1.\s0 (Optional) +.IP "\fB\-tspolicy\fR object_id" 4 +.IX Item "-tspolicy object_id" +The policy that the client expects the \s-1TSA\s0 to use for creating the +time stamp token. Either the dotted \s-1OID\s0 notation or \s-1OID\s0 names defined +in the config file can be used. If no policy is requested the \s-1TSA\s0 will +use its own default policy. (Optional) +.IP "\fB\-no_nonce\fR" 4 +.IX Item "-no_nonce" +No nonce is specified in the request if this option is +given. Otherwise a 64 bit long pseudo-random none is +included in the request. It is recommended to use nonce to +protect against replay-attacks. (Optional) +.IP "\fB\-cert\fR" 4 +.IX Item "-cert" +The \s-1TSA\s0 is expected to include its signing certificate in the +response. (Optional) +.IP "\fB\-in\fR request.tsq" 4 +.IX Item "-in request.tsq" +This option specifies a previously created time stamp request in \s-1DER\s0 +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) +.IP "\fB\-out\fR request.tsq" 4 +.IX Item "-out request.tsq" +Name of the output file to which the request will be written. Default +is stdout. (Optional) +.IP "\fB\-text\fR" 4 +.IX Item "-text" +If this option is specified the output is human-readable text format +instead of \s-1DER.\s0 (Optional) +.SS "Time Stamp Response generation" +.IX Subsection "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 \fB\-reply\fR command is for creating a time stamp +response or time stamp token based on a request and printing the +response/token in human-readable format. If \fB\-token_out\fR is not +specified the output is always a time stamp response (TimeStampResp), +otherwise it is a time stamp token (ContentInfo). +.IP "\fB\-config\fR configfile" 4 +.IX Item "-config configfile" +The configuration file to use. +Optional; for a description of the default value, +see \*(L"\s-1COMMAND SUMMARY\*(R"\s0 in \fBopenssl\fR\|(1). +See \fB\s-1CONFIGURATION FILE OPTIONS\s0\fR for configurable variables. +.IP "\fB\-section\fR tsa_section" 4 +.IX Item "-section tsa_section" +The name of the config file section containing the settings for the +response generation. If not specified the default \s-1TSA\s0 section is +used, see \fB\s-1CONFIGURATION FILE OPTIONS\s0\fR for details. (Optional) +.IP "\fB\-queryfile\fR request.tsq" 4 +.IX Item "-queryfile request.tsq" +The name of the file containing a \s-1DER\s0 encoded time stamp request. (Optional) +.IP "\fB\-passin\fR password_src" 4 +.IX Item "-passin password_src" +Specifies the password source for the private key of the \s-1TSA.\s0 See +\&\fB\s-1PASS PHRASE ARGUMENTS\s0\fR in \fBopenssl\fR\|(1). (Optional) +.IP "\fB\-signer\fR tsa_cert.pem" 4 +.IX Item "-signer tsa_cert.pem" +The signer certificate of the \s-1TSA\s0 in \s-1PEM\s0 format. The \s-1TSA\s0 signing +certificate must have exactly one extended key usage assigned to it: +timeStamping. The extended key usage must also be critical, otherwise +the certificate is going to be refused. Overrides the \fBsigner_cert\fR +variable of the config file. (Optional) +.IP "\fB\-inkey\fR file_or_id" 4 +.IX Item "-inkey file_or_id" +The signer private key of the \s-1TSA\s0 in \s-1PEM\s0 format. Overrides the +\&\fBsigner_key\fR config file option. (Optional) +If no engine is used, the argument is taken as a file; if an engine is +specified, the argument is given to the engine as a key identifier. +.IP "\fB\-\f(BIdigest\fB\fR" 4 +.IX Item "-digest" +Signing digest to use. Overrides the \fBsigner_digest\fR config file +option. (Mandatory unless specified in the config file) +.IP "\fB\-chain\fR certs_file.pem" 4 +.IX Item "-chain certs_file.pem" +The collection of certificates in \s-1PEM\s0 format that will all +be included in the response in addition to the signer certificate if +the \fB\-cert\fR option was used for the request. This file is supposed to +contain the certificate chain for the signer certificate from its +issuer upwards. The \fB\-reply\fR command does not build a certificate +chain automatically. (Optional) +.IP "\fB\-tspolicy\fR object_id" 4 +.IX Item "-tspolicy object_id" +The default policy to use for the response unless the client +explicitly requires a particular \s-1TSA\s0 policy. The \s-1OID\s0 can be specified +either in dotted notation or with its name. Overrides the +\&\fBdefault_policy\fR config file option. (Optional) +.IP "\fB\-in\fR response.tsr" 4 +.IX Item "-in response.tsr" +Specifies a previously created time stamp response or time stamp token +(if \fB\-token_in\fR is also specified) in \s-1DER\s0 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 +\&'granted' status info is added to the token. (Optional) +.IP "\fB\-token_in\fR" 4 +.IX Item "-token_in" +This flag can be used together with the \fB\-in\fR option and indicates +that the input is a \s-1DER\s0 encoded time stamp token (ContentInfo) instead +of a time stamp response (TimeStampResp). (Optional) +.IP "\fB\-out\fR response.tsr" 4 +.IX Item "-out response.tsr" +The response is written to this file. The format and content of the +file depends on other options (see \fB\-text\fR, \fB\-token_out\fR). The default is +stdout. (Optional) +.IP "\fB\-token_out\fR" 4 +.IX Item "-token_out" +The output is a time stamp token (ContentInfo) instead of time stamp +response (TimeStampResp). (Optional) +.IP "\fB\-text\fR" 4 +.IX Item "-text" +If this option is specified the output is human-readable text format +instead of \s-1DER.\s0 (Optional) +.IP "\fB\-engine\fR id" 4 +.IX Item "-engine id" +Specifying an engine (by its unique \fBid\fR string) will cause \fBts\fR +to attempt to obtain a functional reference to the specified engine, +thus initialising it if needed. The engine will then be set as the default +for all available algorithms. Default is builtin. (Optional) +.SS "Time Stamp Response verification" +.IX Subsection "Time Stamp Response verification" +The \fB\-verify\fR command is for verifying if a time stamp response or time +stamp token is valid and matches a particular time stamp request or +data file. The \fB\-verify\fR command does not use the configuration file. +.IP "\fB\-data\fR file_to_hash" 4 +.IX Item "-data file_to_hash" +The response or token must be verified against file_to_hash. The file +is hashed with the message digest algorithm specified in the token. +The \fB\-digest\fR and \fB\-queryfile\fR options must not be specified with this one. +(Optional) +.IP "\fB\-digest\fR digest_bytes" 4 +.IX Item "-digest digest_bytes" +The response or token must be verified against the message digest specified +with this option. The number of bytes must match the message digest algorithm +specified in the token. The \fB\-data\fR and \fB\-queryfile\fR options must not be +specified with this one. (Optional) +.IP "\fB\-queryfile\fR request.tsq" 4 +.IX Item "-queryfile request.tsq" +The original time stamp request in \s-1DER\s0 format. The \fB\-data\fR and \fB\-digest\fR +options must not be specified with this one. (Optional) +.IP "\fB\-in\fR response.tsr" 4 +.IX Item "-in response.tsr" +The time stamp response that needs to be verified in \s-1DER\s0 format. (Mandatory) +.IP "\fB\-token_in\fR" 4 +.IX Item "-token_in" +This flag can be used together with the \fB\-in\fR option and indicates +that the input is a \s-1DER\s0 encoded time stamp token (ContentInfo) instead +of a time stamp response (TimeStampResp). (Optional) +.IP "\fB\-CApath\fR trusted_cert_path" 4 +.IX Item "-CApath trusted_cert_path" +The name of the directory containing the trusted \s-1CA\s0 certificates of the +client. See the similar option of \fBverify\fR\|(1) for additional +details. Either this option or \fB\-CAfile\fR must be specified. (Optional) +.IP "\fB\-CAfile\fR trusted_certs.pem" 4 +.IX Item "-CAfile trusted_certs.pem" +The name of the file containing a set of trusted self-signed \s-1CA\s0 +certificates in \s-1PEM\s0 format. See the similar option of +\&\fBverify\fR\|(1) for additional details. Either this option +or \fB\-CApath\fR must be specified. +(Optional) +.IP "\fB\-untrusted\fR cert_file.pem" 4 +.IX Item "-untrusted cert_file.pem" +Set of additional untrusted certificates in \s-1PEM\s0 format which may be +needed when building the certificate chain for the \s-1TSA\s0's signing +certificate. This file must contain the \s-1TSA\s0 signing certificate and +all intermediate \s-1CA\s0 certificates unless the response includes them. +(Optional) +.IP "\fIverify options\fR" 4 +.IX Item "verify options" +The options \fB\-attime timestamp\fR, \fB\-check_ss_sig\fR, \fB\-crl_check\fR, +\&\fB\-crl_check_all\fR, \fB\-explicit_policy\fR, \fB\-extended_crl\fR, \fB\-ignore_critical\fR, +\&\fB\-inhibit_any\fR, \fB\-inhibit_map\fR, \fB\-issuer_checks\fR, \fB\-no_alt_chains\fR, +\&\fB\-no_check_time\fR, \fB\-partial_chain\fR, \fB\-policy\fR, \fB\-policy_check\fR, +\&\fB\-policy_print\fR, \fB\-purpose\fR, \fB\-suiteB_128\fR, \fB\-suiteB_128_only\fR, +\&\fB\-suiteB_192\fR, \fB\-trusted_first\fR, \fB\-use_deltas\fR, \fB\-auth_level\fR, +\&\fB\-verify_depth\fR, \fB\-verify_email\fR, \fB\-verify_hostname\fR, \fB\-verify_ip\fR, +\&\fB\-verify_name\fR, and \fB\-x509_strict\fR can be used to control timestamp +verification. See \fBverify\fR\|(1). +.SH "CONFIGURATION FILE OPTIONS" +.IX Header "CONFIGURATION FILE OPTIONS" +The \fB\-query\fR and \fB\-reply\fR commands make use of a configuration file. +See \fBconfig\fR\|(5) +for a general description of the syntax of the config file. The +\&\fB\-query\fR command uses only the symbolic \s-1OID\s0 names section +and it can work without it. However, the \fB\-reply\fR command needs the +config file for its operation. +.PP +When there is a command line switch equivalent of a variable the +switch always overrides the settings in the config file. +.IP "\fBtsa\fR section, \fBdefault_tsa\fR" 4 +.IX Item "tsa section, default_tsa" +This is the main section and it specifies the name of another section +that contains all the options for the \fB\-reply\fR command. This default +section can be overridden with the \fB\-section\fR command line switch. (Optional) +.IP "\fBoid_file\fR" 4 +.IX Item "oid_file" +See \fBca\fR\|(1) for description. (Optional) +.IP "\fBoid_section\fR" 4 +.IX Item "oid_section" +See \fBca\fR\|(1) for description. (Optional) +.IP "\fB\s-1RANDFILE\s0\fR" 4 +.IX Item "RANDFILE" +See \fBca\fR\|(1) for description. (Optional) +.IP "\fBserial\fR" 4 +.IX Item "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 +each response. If the file does not exist at the time of response +generation a new file is created with serial number 1. (Mandatory) +.IP "\fBcrypto_device\fR" 4 +.IX Item "crypto_device" +Specifies the OpenSSL engine that will be set as the default for +all available algorithms. The default value is builtin, you can specify +any other engines supported by OpenSSL (e.g. use chil for the NCipher \s-1HSM\s0). +(Optional) +.IP "\fBsigner_cert\fR" 4 +.IX Item "signer_cert" +\&\s-1TSA\s0 signing certificate in \s-1PEM\s0 format. The same as the \fB\-signer\fR +command line option. (Optional) +.IP "\fBcerts\fR" 4 +.IX Item "certs" +A file containing a set of \s-1PEM\s0 encoded certificates that need to be +included in the response. The same as the \fB\-chain\fR command line +option. (Optional) +.IP "\fBsigner_key\fR" 4 +.IX Item "signer_key" +The private key of the \s-1TSA\s0 in \s-1PEM\s0 format. The same as the \fB\-inkey\fR +command line option. (Optional) +.IP "\fBsigner_digest\fR" 4 +.IX Item "signer_digest" +Signing digest to use. The same as the +\&\fB\-\f(BIdigest\fB\fR command line option. (Mandatory unless specified on the command +line) +.IP "\fBdefault_policy\fR" 4 +.IX Item "default_policy" +The default policy to use when the request does not mandate any +policy. The same as the \fB\-tspolicy\fR command line option. (Optional) +.IP "\fBother_policies\fR" 4 +.IX Item "other_policies" +Comma separated list of policies that are also acceptable by the \s-1TSA\s0 +and used only if the request explicitly specifies one of them. (Optional) +.IP "\fBdigests\fR" 4 +.IX Item "digests" +The list of message digest algorithms that the \s-1TSA\s0 accepts. At least +one algorithm must be specified. (Mandatory) +.IP "\fBaccuracy\fR" 4 +.IX Item "accuracy" +The accuracy of the time source of the \s-1TSA\s0 in seconds, milliseconds +and microseconds. E.g. secs:1, millisecs:500, microsecs:100. If any of +the components is missing zero is assumed for that field. (Optional) +.IP "\fBclock_precision_digits\fR" 4 +.IX Item "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 +must be removed from the time, so there might actually be fewer digits, +or no fraction of seconds at all. Supported only on \s-1UNIX\s0 platforms. +The maximum value is 6, default is 0. +(Optional) +.IP "\fBordering\fR" 4 +.IX Item "ordering" +If this option is yes the responses generated by this \s-1TSA\s0 can always +be ordered, even if the time difference between two responses is less +than the sum of their accuracies. Default is no. (Optional) +.IP "\fBtsa_name\fR" 4 +.IX Item "tsa_name" +Set this option to yes if the subject name of the \s-1TSA\s0 must be included in +the \s-1TSA\s0 name field of the response. Default is no. (Optional) +.IP "\fBess_cert_id_chain\fR" 4 +.IX Item "ess_cert_id_chain" +The SignedData objects created by the \s-1TSA\s0 always contain the +certificate identifier of the signing certificate in a signed +attribute (see \s-1RFC 2634,\s0 Enhanced Security Services). If this option +is set to yes and either the \fBcerts\fR variable or the \fB\-chain\fR option +is specified then the certificate identifiers of the chain will also +be included in the SigningCertificate signed attribute. If this +variable is set to no, only the signing certificate identifier is +included. Default is no. (Optional) +.IP "\fBess_cert_id_alg\fR" 4 +.IX Item "ess_cert_id_alg" +This option specifies the hash function to be used to calculate the \s-1TSA\s0's +public key certificate identifier. Default is sha1. (Optional) +.SH "EXAMPLES" +.IX Header "EXAMPLES" +All the examples below presume that \fB\s-1OPENSSL_CONF\s0\fR is set to a proper +configuration file, e.g. the example configuration file +openssl/apps/openssl.cnf will do. +.SS "Time Stamp Request" +.IX Subsection "Time Stamp Request" +To create a time stamp request for design1.txt with \s-1SHA\-1\s0 +without nonce and policy and no certificate is required in the response: +.PP +.Vb 2 +\& openssl ts \-query \-data design1.txt \-no_nonce \e +\& \-out design1.tsq +.Ve +.PP +To create a similar time stamp request with specifying the message imprint +explicitly: +.PP +.Vb 2 +\& openssl ts \-query \-digest b7e5d3f93198b38379852f2c04e78d73abdd0f4b \e +\& \-no_nonce \-out design1.tsq +.Ve +.PP +To print the content of the previous request in human readable format: +.PP +.Vb 1 +\& openssl ts \-query \-in design1.tsq \-text +.Ve +.PP +To create a time stamp request which includes the \s-1MD\-5\s0 digest +of design2.txt, requests the signer certificate and nonce, +specifies a policy id (assuming the tsa_policy1 name is defined in the +\&\s-1OID\s0 section of the config file): +.PP +.Vb 2 +\& openssl ts \-query \-data design2.txt \-md5 \e +\& \-tspolicy tsa_policy1 \-cert \-out design2.tsq +.Ve +.SS "Time Stamp Response" +.IX Subsection "Time Stamp Response" +Before generating a response a signing certificate must be created for +the \s-1TSA\s0 that contains the \fBtimeStamping\fR critical extended key usage extension +without any other key usage extensions. You can add this line to the +user certificate section of the config file to generate a proper certificate; +.PP +.Vb 1 +\& extendedKeyUsage = critical,timeStamping +.Ve +.PP +See \fBreq\fR\|(1), \fBca\fR\|(1), and \fBx509\fR\|(1) for instructions. The examples +below assume that cacert.pem contains the certificate of the \s-1CA,\s0 +tsacert.pem is the signing certificate issued by cacert.pem and +tsakey.pem is the private key of the \s-1TSA.\s0 +.PP +To create a time stamp response for a request: +.PP +.Vb 2 +\& openssl ts \-reply \-queryfile design1.tsq \-inkey tsakey.pem \e +\& \-signer tsacert.pem \-out design1.tsr +.Ve +.PP +If you want to use the settings in the config file you could just write: +.PP +.Vb 1 +\& openssl ts \-reply \-queryfile design1.tsq \-out design1.tsr +.Ve +.PP +To print a time stamp reply to stdout in human readable format: +.PP +.Vb 1 +\& openssl ts \-reply \-in design1.tsr \-text +.Ve +.PP +To create a time stamp token instead of time stamp response: +.PP +.Vb 1 +\& openssl ts \-reply \-queryfile design1.tsq \-out design1_token.der \-token_out +.Ve +.PP +To print a time stamp token to stdout in human readable format: +.PP +.Vb 1 +\& openssl ts \-reply \-in design1_token.der \-token_in \-text \-token_out +.Ve +.PP +To extract the time stamp token from a response: +.PP +.Vb 1 +\& openssl ts \-reply \-in design1.tsr \-out design1_token.der \-token_out +.Ve +.PP +To add 'granted' status info to a time stamp token thereby creating a +valid response: +.PP +.Vb 1 +\& openssl ts \-reply \-in design1_token.der \-token_in \-out design1.tsr +.Ve +.SS "Time Stamp Verification" +.IX Subsection "Time Stamp Verification" +To verify a time stamp reply against a request: +.PP +.Vb 2 +\& openssl ts \-verify \-queryfile design1.tsq \-in design1.tsr \e +\& \-CAfile cacert.pem \-untrusted tsacert.pem +.Ve +.PP +To verify a time stamp reply that includes the certificate chain: +.PP +.Vb 2 +\& openssl ts \-verify \-queryfile design2.tsq \-in design2.tsr \e +\& \-CAfile cacert.pem +.Ve +.PP +To verify a time stamp token against the original data file: + openssl ts \-verify \-data design2.txt \-in design2.tsr \e + \-CAfile cacert.pem +.PP +To verify a time stamp token against a message imprint: + openssl ts \-verify \-digest b7e5d3f93198b38379852f2c04e78d73abdd0f4b \e + \-in design2.tsr \-CAfile cacert.pem +.PP +You could also look at the 'test' directory for more examples. +.SH "BUGS" +.IX Header "BUGS" +.IP "\(bu" 2 +No support for time stamps over \s-1SMTP,\s0 though it is quite easy +to implement an automatic e\-mail based \s-1TSA\s0 with \fBprocmail\fR\|(1) +and \fBperl\fR\|(1). \s-1HTTP\s0 server support is provided in the form of +a separate apache module. \s-1HTTP\s0 client support is provided by +\&\fBtsget\fR\|(1). Pure \s-1TCP/IP\s0 protocol is not supported. +.IP "\(bu" 2 +The file containing the last serial number of the \s-1TSA\s0 is not +locked when being read or written. This is a problem if more than one +instance of \fBopenssl\fR\|(1) is trying to create a time stamp +response at the same time. This is not an issue when using the apache +server module, it does proper locking. +.IP "\(bu" 2 +Look for the \s-1FIXME\s0 word in the source files. +.IP "\(bu" 2 +The source code should really be reviewed by somebody else, too. +.IP "\(bu" 2 +More testing is needed, I have done only some basic tests (see +test/testtsa). +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBtsget\fR\|(1), \fBopenssl\fR\|(1), \fBreq\fR\|(1), +\&\fBx509\fR\|(1), \fBca\fR\|(1), \fBgenrsa\fR\|(1), +\&\fBconfig\fR\|(5) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2006\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/tsget.1 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/tsget.1 new file mode 100644 index 00000000..4129953d --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/tsget.1 @@ -0,0 +1,325 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "TSGET 1" +.TH TSGET 1 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +openssl\-tsget, tsget \- Time Stamping HTTP/HTTPS client +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +\&\fBtsget\fR +\&\fB\-h\fR server_url +[\fB\-e\fR extension] +[\fB\-o\fR output] +[\fB\-v\fR] +[\fB\-d\fR] +[\fB\-k\fR private_key.pem] +[\fB\-p\fR key_password] +[\fB\-c\fR client_cert.pem] +[\fB\-C\fR CA_certs.pem] +[\fB\-P\fR CA_path] +[\fB\-r\fR file:file...] +[\fB\-g\fR EGD_socket] +[request]... +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fBtsget\fR command can be used for sending a time stamp request, as +specified in \fB\s-1RFC 3161\s0\fR, to a time stamp server over \s-1HTTP\s0 or \s-1HTTPS\s0 and storing +the time stamp response in a file. This tool cannot be used for creating the +requests and verifying responses, you can use the OpenSSL \fB\fBts\fB\|(1)\fR command to +do that. \fBtsget\fR can send several requests to the server without closing +the \s-1TCP\s0 connection if more than one requests are specified on the command +line. +.PP +The tool sends the following \s-1HTTP\s0 request for each time stamp request: +.PP +.Vb 7 +\& POST url HTTP/1.1 +\& User\-Agent: OpenTSA tsget.pl/ +\& Host: : +\& Pragma: no\-cache +\& Content\-Type: application/timestamp\-query +\& Accept: application/timestamp\-reply +\& Content\-Length: length of body +\& +\& ...binary request specified by the user... +.Ve +.PP +\&\fBtsget\fR expects a response of type application/timestamp\-reply, which is +written to a file without any interpretation. +.SH "OPTIONS" +.IX Header "OPTIONS" +.IP "\fB\-h\fR server_url" 4 +.IX Item "-h server_url" +The \s-1URL\s0 of the \s-1HTTP/HTTPS\s0 server listening for time stamp requests. +.IP "\fB\-e\fR extension" 4 +.IX Item "-e extension" +If the \fB\-o\fR option is not given this argument specifies the extension of the +output files. The base name of the output file will be the same as those of +the input files. Default extension is '.tsr'. (Optional) +.IP "\fB\-o\fR output" 4 +.IX Item "-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 +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) +.IP "\fB\-v\fR" 4 +.IX Item "-v" +The name of the currently processed request is printed on standard +error. (Optional) +.IP "\fB\-d\fR" 4 +.IX Item "-d" +Switches on verbose mode for the underlying \fBcurl\fR library. You can see +detailed debug messages for the connection. (Optional) +.IP "\fB\-k\fR private_key.pem" 4 +.IX Item "-k private_key.pem" +(\s-1HTTPS\s0) In case of certificate-based client authentication over \s-1HTTPS\s0 + must contain the private key of the user. The private key +file can optionally be protected by a passphrase. The \fB\-c\fR option must also +be specified. (Optional) +.IP "\fB\-p\fR key_password" 4 +.IX Item "-p key_password" +(\s-1HTTPS\s0) Specifies the passphrase for the private key specified by the \fB\-k\fR +argument. If this option is omitted and the key is passphrase protected \fBtsget\fR +will ask for it. (Optional) +.IP "\fB\-c\fR client_cert.pem" 4 +.IX Item "-c client_cert.pem" +(\s-1HTTPS\s0) In case of certificate-based client authentication over \s-1HTTPS\s0 + must contain the X.509 certificate of the user. The \fB\-k\fR +option must also be specified. If this option is not specified no +certificate-based client authentication will take place. (Optional) +.IP "\fB\-C\fR CA_certs.pem" 4 +.IX Item "-C CA_certs.pem" +(\s-1HTTPS\s0) The trusted \s-1CA\s0 certificate store. The certificate chain of the peer's +certificate must include one of the \s-1CA\s0 certificates specified in this file. +Either option \fB\-C\fR or option \fB\-P\fR must be given in case of \s-1HTTPS.\s0 (Optional) +.IP "\fB\-P\fR CA_path" 4 +.IX Item "-P CA_path" +(\s-1HTTPS\s0) The path containing the trusted \s-1CA\s0 certificates to verify the peer's +certificate. The directory must be prepared with the \fBc_rehash\fR +OpenSSL utility. Either option \fB\-C\fR or option \fB\-P\fR must be given in case of +\&\s-1HTTPS.\s0 (Optional) +.IP "\fB\-rand\fR file:file..." 4 +.IX Item "-rand file:file..." +The files containing random data for seeding the random number +generator. Multiple files can be specified, the separator is \fB;\fR for +MS-Windows, \fB,\fR for \s-1VMS\s0 and \fB:\fR for all other platforms. (Optional) +.IP "\fB\-g\fR EGD_socket" 4 +.IX Item "-g EGD_socket" +The name of an \s-1EGD\s0 socket to get random data from. (Optional) +.IP "[request]..." 4 +.IX Item "[request]..." +List of files containing \fB\s-1RFC 3161\s0\fR DER-encoded time stamp 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) +.SH "ENVIRONMENT VARIABLES" +.IX Header "ENVIRONMENT VARIABLES" +The \fB\s-1TSGET\s0\fR environment variable can optionally contain default +arguments. The content of this variable is added to the list of command line +arguments. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +The examples below presume that \fBfile1.tsq\fR and \fBfile2.tsq\fR contain valid +time stamp requests, tsa.opentsa.org listens at port 8080 for \s-1HTTP\s0 requests +and at port 8443 for \s-1HTTPS\s0 requests, the \s-1TSA\s0 service is available at the /tsa +absolute path. +.PP +Get a time stamp response for file1.tsq over \s-1HTTP,\s0 output is written to +file1.tsr: +.PP +.Vb 1 +\& tsget \-h http://tsa.opentsa.org:8080/tsa file1.tsq +.Ve +.PP +Get a time stamp response for file1.tsq and file2.tsq over \s-1HTTP\s0 showing +progress, output is written to file1.reply and file2.reply respectively: +.PP +.Vb 2 +\& tsget \-h http://tsa.opentsa.org:8080/tsa \-v \-e .reply \e +\& file1.tsq file2.tsq +.Ve +.PP +Create a time stamp request, write it to file3.tsq, send it to the server and +write the response to file3.tsr: +.PP +.Vb 3 +\& openssl ts \-query \-data file3.txt \-cert | tee file3.tsq \e +\& | tsget \-h http://tsa.opentsa.org:8080/tsa \e +\& \-o file3.tsr +.Ve +.PP +Get a time stamp response for file1.tsq over \s-1HTTPS\s0 without client +authentication: +.PP +.Vb 2 +\& tsget \-h https://tsa.opentsa.org:8443/tsa \e +\& \-C cacerts.pem file1.tsq +.Ve +.PP +Get a time stamp response for file1.tsq over \s-1HTTPS\s0 with certificate-based +client authentication (it will ask for the passphrase if client_key.pem is +protected): +.PP +.Vb 2 +\& tsget \-h https://tsa.opentsa.org:8443/tsa \-C cacerts.pem \e +\& \-k client_key.pem \-c client_cert.pem file1.tsq +.Ve +.PP +You can shorten the previous command line if you make use of the \fB\s-1TSGET\s0\fR +environment variable. The following commands do the same as the previous +example: +.PP +.Vb 4 +\& TSGET=\*(Aq\-h https://tsa.opentsa.org:8443/tsa \-C cacerts.pem \e +\& \-k client_key.pem \-c client_cert.pem\*(Aq +\& export TSGET +\& tsget file1.tsq +.Ve +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBopenssl\fR\|(1), \fBts\fR\|(1), \fBcurl\fR\|(1), +\&\fB\s-1RFC 3161\s0\fR +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2006\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/verify.1 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/verify.1 new file mode 100644 index 00000000..65b07720 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/verify.1 @@ -0,0 +1,780 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "VERIFY 1" +.TH VERIFY 1 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +openssl\-verify, verify \- Utility to verify certificates +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +\&\fBopenssl\fR \fBverify\fR +[\fB\-help\fR] +[\fB\-CAfile file\fR] +[\fB\-CApath directory\fR] +[\fB\-no\-CAfile\fR] +[\fB\-no\-CApath\fR] +[\fB\-allow_proxy_certs\fR] +[\fB\-attime timestamp\fR] +[\fB\-check_ss_sig\fR] +[\fB\-CRLfile file\fR] +[\fB\-crl_download\fR] +[\fB\-crl_check\fR] +[\fB\-crl_check_all\fR] +[\fB\-engine id\fR] +[\fB\-explicit_policy\fR] +[\fB\-extended_crl\fR] +[\fB\-ignore_critical\fR] +[\fB\-inhibit_any\fR] +[\fB\-inhibit_map\fR] +[\fB\-nameopt option\fR] +[\fB\-no_check_time\fR] +[\fB\-partial_chain\fR] +[\fB\-policy arg\fR] +[\fB\-policy_check\fR] +[\fB\-policy_print\fR] +[\fB\-purpose purpose\fR] +[\fB\-suiteB_128\fR] +[\fB\-suiteB_128_only\fR] +[\fB\-suiteB_192\fR] +[\fB\-trusted_first\fR] +[\fB\-no_alt_chains\fR] +[\fB\-untrusted file\fR] +[\fB\-trusted file\fR] +[\fB\-use_deltas\fR] +[\fB\-verbose\fR] +[\fB\-auth_level level\fR] +[\fB\-verify_depth num\fR] +[\fB\-verify_email email\fR] +[\fB\-verify_hostname hostname\fR] +[\fB\-verify_ip ip\fR] +[\fB\-verify_name name\fR] +[\fB\-x509_strict\fR] +[\fB\-show_chain\fR] +[\fB\-\fR] +[certificates] +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fBverify\fR command verifies certificate chains. +.SH "OPTIONS" +.IX Header "OPTIONS" +.IP "\fB\-help\fR" 4 +.IX Item "-help" +Print out a usage message. +.IP "\fB\-CAfile file\fR" 4 +.IX Item "-CAfile file" +A \fBfile\fR of trusted certificates. +The file should contain one or more certificates in \s-1PEM\s0 format. +.IP "\fB\-CApath directory\fR" 4 +.IX Item "-CApath directory" +A directory of trusted certificates. The certificates should have names +of the form: hash.0 or have symbolic links to them of this +form (\*(L"hash\*(R" is the hashed certificate subject name: see the \fB\-hash\fR option +of the \fBx509\fR utility). Under Unix the \fBc_rehash\fR script will automatically +create symbolic links to a directory of certificates. +.IP "\fB\-no\-CAfile\fR" 4 +.IX Item "-no-CAfile" +Do not load the trusted \s-1CA\s0 certificates from the default file location. +.IP "\fB\-no\-CApath\fR" 4 +.IX Item "-no-CApath" +Do not load the trusted \s-1CA\s0 certificates from the default directory location. +.IP "\fB\-allow_proxy_certs\fR" 4 +.IX Item "-allow_proxy_certs" +Allow the verification of proxy certificates. +.IP "\fB\-attime timestamp\fR" 4 +.IX Item "-attime timestamp" +Perform validation checks using time specified by \fBtimestamp\fR and not +current system time. \fBtimestamp\fR is the number of seconds since +01.01.1970 (\s-1UNIX\s0 time). +.IP "\fB\-check_ss_sig\fR" 4 +.IX Item "-check_ss_sig" +Verify the signature on the self-signed root \s-1CA.\s0 This is disabled by default +because it doesn't add any security. +.IP "\fB\-CRLfile file\fR" 4 +.IX Item "-CRLfile file" +The \fBfile\fR should contain one or more CRLs in \s-1PEM\s0 format. +This option can be specified more than once to include CRLs from multiple +\&\fBfiles\fR. +.IP "\fB\-crl_download\fR" 4 +.IX Item "-crl_download" +Attempt to download \s-1CRL\s0 information for this certificate. +.IP "\fB\-crl_check\fR" 4 +.IX Item "-crl_check" +Checks end entity certificate validity by attempting to look up a valid \s-1CRL.\s0 +If a valid \s-1CRL\s0 cannot be found an error occurs. +.IP "\fB\-crl_check_all\fR" 4 +.IX Item "-crl_check_all" +Checks the validity of \fBall\fR certificates in the chain by attempting +to look up valid CRLs. +.IP "\fB\-engine id\fR" 4 +.IX Item "-engine id" +Specifying an engine \fBid\fR will cause \fBverify\fR\|(1) to attempt to load the +specified engine. +The engine will then be set as the default for all its supported algorithms. +If you want to load certificates or CRLs that require engine support via any of +the \fB\-trusted\fR, \fB\-untrusted\fR or \fB\-CRLfile\fR options, the \fB\-engine\fR option +must be specified before those options. +.IP "\fB\-explicit_policy\fR" 4 +.IX Item "-explicit_policy" +Set policy variable require-explicit-policy (see \s-1RFC5280\s0). +.IP "\fB\-extended_crl\fR" 4 +.IX Item "-extended_crl" +Enable extended \s-1CRL\s0 features such as indirect CRLs and alternate \s-1CRL\s0 +signing keys. +.IP "\fB\-ignore_critical\fR" 4 +.IX Item "-ignore_critical" +Normally if an unhandled critical extension is present which is not +supported by OpenSSL the certificate is rejected (as required by \s-1RFC5280\s0). +If this option is set critical extensions are ignored. +.IP "\fB\-inhibit_any\fR" 4 +.IX Item "-inhibit_any" +Set policy variable inhibit-any-policy (see \s-1RFC5280\s0). +.IP "\fB\-inhibit_map\fR" 4 +.IX Item "-inhibit_map" +Set policy variable inhibit-policy-mapping (see \s-1RFC5280\s0). +.IP "\fB\-nameopt option\fR" 4 +.IX Item "-nameopt option" +Option which determines how the subject or issuer names are displayed. The +\&\fBoption\fR argument can be a single option or multiple options separated by +commas. Alternatively the \fB\-nameopt\fR switch may be used more than once to +set multiple options. See the \fBx509\fR\|(1) manual page for details. +.IP "\fB\-no_check_time\fR" 4 +.IX Item "-no_check_time" +This option suppresses checking the validity period of certificates and CRLs +against the current time. If option \fB\-attime timestamp\fR is used to specify +a verification time, the check is not suppressed. +.IP "\fB\-partial_chain\fR" 4 +.IX Item "-partial_chain" +Allow verification to succeed even if a \fIcomplete\fR chain cannot be built to a +self-signed trust-anchor, provided it is possible to construct a chain to a +trusted certificate that might not be self-signed. +.IP "\fB\-policy arg\fR" 4 +.IX Item "-policy arg" +Enable policy processing and add \fBarg\fR to the user-initial-policy-set (see +\&\s-1RFC5280\s0). The policy \fBarg\fR can be an object name an \s-1OID\s0 in numeric form. +This argument can appear more than once. +.IP "\fB\-policy_check\fR" 4 +.IX Item "-policy_check" +Enables certificate policy processing. +.IP "\fB\-policy_print\fR" 4 +.IX Item "-policy_print" +Print out diagnostics related to policy processing. +.IP "\fB\-purpose purpose\fR" 4 +.IX Item "-purpose purpose" +The intended use for the certificate. If this option is not specified, +\&\fBverify\fR will not consider certificate purpose during chain verification. +Currently accepted uses are \fBsslclient\fR, \fBsslserver\fR, \fBnssslserver\fR, +\&\fBsmimesign\fR, \fBsmimeencrypt\fR. See the \fB\s-1VERIFY OPERATION\s0\fR section for more +information. +.IP "\fB\-suiteB_128_only\fR, \fB\-suiteB_128\fR, \fB\-suiteB_192\fR" 4 +.IX Item "-suiteB_128_only, -suiteB_128, -suiteB_192" +Enable the Suite B mode operation at 128 bit Level of Security, 128 bit or +192 bit, or only 192 bit Level of Security respectively. +See \s-1RFC6460\s0 for details. In particular the supported signature algorithms are +reduced to support only \s-1ECDSA\s0 and \s-1SHA256\s0 or \s-1SHA384\s0 and only the elliptic curves +P\-256 and P\-384. +.IP "\fB\-trusted_first\fR" 4 +.IX Item "-trusted_first" +When constructing the certificate chain, use the trusted certificates specified +via \fB\-CAfile\fR, \fB\-CApath\fR or \fB\-trusted\fR before any certificates specified via +\&\fB\-untrusted\fR. +This can be useful in environments with Bridge or Cross-Certified CAs. +As of OpenSSL 1.1.0 this option is on by default and cannot be disabled. +.IP "\fB\-no_alt_chains\fR" 4 +.IX Item "-no_alt_chains" +By default, unless \fB\-trusted_first\fR is specified, when building a certificate +chain, if the first certificate chain found is not trusted, then OpenSSL will +attempt to replace untrusted issuer certificates with certificates from the +trust store to see if an alternative chain can be found that is trusted. +As of OpenSSL 1.1.0, with \fB\-trusted_first\fR always on, this option has no +effect. +.IP "\fB\-untrusted file\fR" 4 +.IX Item "-untrusted file" +A \fBfile\fR of additional untrusted certificates (intermediate issuer CAs) used +to construct a certificate chain from the subject certificate to a trust-anchor. +The \fBfile\fR should contain one or more certificates in \s-1PEM\s0 format. +This option can be specified more than once to include untrusted certificates +from multiple \fBfiles\fR. +.IP "\fB\-trusted file\fR" 4 +.IX Item "-trusted file" +A \fBfile\fR of trusted certificates, which must be self-signed, unless the +\&\fB\-partial_chain\fR option is specified. +The \fBfile\fR contains one or more certificates in \s-1PEM\s0 format. +With this option, no additional (e.g., default) certificate lists are +consulted. +That is, the only trust-anchors are those listed in \fBfile\fR. +This option can be specified more than once to include trusted certificates +from multiple \fBfiles\fR. +This option implies the \fB\-no\-CAfile\fR and \fB\-no\-CApath\fR options. +This option cannot be used in combination with either of the \fB\-CAfile\fR or +\&\fB\-CApath\fR options. +.IP "\fB\-use_deltas\fR" 4 +.IX Item "-use_deltas" +Enable support for delta CRLs. +.IP "\fB\-verbose\fR" 4 +.IX Item "-verbose" +Print extra information about the operations being performed. +.IP "\fB\-auth_level level\fR" 4 +.IX Item "-auth_level level" +Set the certificate chain authentication security level to \fBlevel\fR. +The authentication security level determines the acceptable signature and +public key strength when verifying certificate chains. +For a certificate chain to validate, the public keys of all the certificates +must meet the specified security \fBlevel\fR. +The signature algorithm security level is enforced for all the certificates in +the chain except for the chain's \fItrust anchor\fR, which is either directly +trusted or validated by means other than its signature. +See \fBSSL_CTX_set_security_level\fR\|(3) for the definitions of the available +levels. +The default security level is \-1, or \*(L"not set\*(R". +At security level 0 or lower all algorithms are acceptable. +Security level 1 requires at least 80\-bit\-equivalent security and is broadly +interoperable, though it will, for example, reject \s-1MD5\s0 signatures or \s-1RSA\s0 keys +shorter than 1024 bits. +.IP "\fB\-verify_depth num\fR" 4 +.IX Item "-verify_depth num" +Limit the certificate chain to \fBnum\fR intermediate \s-1CA\s0 certificates. +A maximal depth chain can have up to \fBnum+2\fR certificates, since neither the +end-entity certificate nor the trust-anchor certificate count against the +\&\fB\-verify_depth\fR limit. +.IP "\fB\-verify_email email\fR" 4 +.IX Item "-verify_email email" +Verify if the \fBemail\fR matches the email address in Subject Alternative Name or +the email in the subject Distinguished Name. +.IP "\fB\-verify_hostname hostname\fR" 4 +.IX Item "-verify_hostname hostname" +Verify if the \fBhostname\fR matches \s-1DNS\s0 name in Subject Alternative Name or +Common Name in the subject certificate. +.IP "\fB\-verify_ip ip\fR" 4 +.IX Item "-verify_ip ip" +Verify if the \fBip\fR matches the \s-1IP\s0 address in Subject Alternative Name of +the subject certificate. +.IP "\fB\-verify_name name\fR" 4 +.IX Item "-verify_name name" +Use default verification policies like trust model and required certificate +policies identified by \fBname\fR. +The trust model determines which auxiliary trust or reject OIDs are applicable +to verifying the given certificate chain. +See the \fB\-addtrust\fR and \fB\-addreject\fR options of the \fBx509\fR\|(1) command-line +utility. +Supported policy names include: \fBdefault\fR, \fBpkcs7\fR, \fBsmime_sign\fR, +\&\fBssl_client\fR, \fBssl_server\fR. +These mimics the combinations of purpose and trust settings used in \s-1SSL, CMS\s0 +and S/MIME. +As of OpenSSL 1.1.0, the trust model is inferred from the purpose when not +specified, so the \fB\-verify_name\fR options are functionally equivalent to the +corresponding \fB\-purpose\fR settings. +.IP "\fB\-x509_strict\fR" 4 +.IX Item "-x509_strict" +For strict X.509 compliance, disable non-compliant workarounds for broken +certificates. +.IP "\fB\-show_chain\fR" 4 +.IX Item "-show_chain" +Display information about the certificate chain that has been built (if +successful). Certificates in the chain that came from the untrusted list will be +flagged as \*(L"untrusted\*(R". +.IP "\fB\-\fR" 4 +.IX Item "-" +Indicates the last option. All arguments following this are assumed to be +certificate files. This is useful if the first certificate filename begins +with a \fB\-\fR. +.IP "\fBcertificates\fR" 4 +.IX Item "certificates" +One or more certificates to verify. If no certificates are given, \fBverify\fR +will attempt to read a certificate from standard input. Certificates must be +in \s-1PEM\s0 format. +.SH "VERIFY OPERATION" +.IX Header "VERIFY OPERATION" +The \fBverify\fR program uses the same functions as the internal \s-1SSL\s0 and S/MIME +verification, therefore this description applies to these verify operations +too. +.PP +There is one crucial difference between the verify operations performed +by the \fBverify\fR program: wherever possible an attempt is made to continue +after an error whereas normally the verify operation would halt on the +first error. This allows all the problems with a certificate chain to be +determined. +.PP +The verify operation consists of a number of separate steps. +.PP +Firstly a certificate chain is built up starting from the supplied certificate +and ending in the root \s-1CA.\s0 +It is an error if the whole chain cannot be built up. +The chain is built up by looking up the issuers certificate of the current +certificate. +If a certificate is found which is its own issuer it is assumed to be the root +\&\s-1CA.\s0 +.PP +The process of 'looking up the issuers certificate' itself involves a number of +steps. +After all certificates whose subject name matches the issuer name of the current +certificate are subject to further tests. +The relevant authority key identifier components of the current certificate (if +present) must match the subject key identifier (if present) and issuer and +serial number of the candidate issuer, in addition the keyUsage extension of +the candidate issuer (if present) must permit certificate signing. +.PP +The lookup first looks in the list of untrusted certificates and if no match +is found the remaining lookups are from the trusted certificates. The root \s-1CA\s0 +is always looked up in the trusted certificate list: if the certificate to +verify is a root certificate then an exact match must be found in the trusted +list. +.PP +The second operation is to check every untrusted certificate's extensions for +consistency with the supplied purpose. If the \fB\-purpose\fR option is not included +then no checks are done. The supplied or \*(L"leaf\*(R" certificate must have extensions +compatible with the supplied purpose and all other certificates must also be valid +\&\s-1CA\s0 certificates. The precise extensions required are described in more detail in +the \fB\s-1CERTIFICATE EXTENSIONS\s0\fR section of the \fBx509\fR utility. +.PP +The third operation is to check the trust settings on the root \s-1CA.\s0 The root \s-1CA\s0 +should be trusted for the supplied purpose. +For compatibility with previous versions of OpenSSL, a certificate with no +trust settings is considered to be valid for all purposes. +.PP +The final operation is to check the validity of the certificate chain. The validity +period is checked against the current system time and the notBefore and notAfter +dates in the certificate. The certificate signatures are also checked at this +point. +.PP +If all operations complete successfully then certificate is considered valid. If +any operation fails then the certificate is not valid. +.SH "DIAGNOSTICS" +.IX Header "DIAGNOSTICS" +When a verify operation fails the output messages can be somewhat cryptic. The +general form of the error message is: +.PP +.Vb 2 +\& server.pem: /C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test CA (1024 bit) +\& error 24 at 1 depth lookup:invalid CA certificate +.Ve +.PP +The first line contains the name of the certificate being verified followed by +the subject name of the certificate. The second line contains the error number +and the depth. The depth is number of the certificate being verified when a +problem was detected starting with zero for the certificate being verified itself +then 1 for the \s-1CA\s0 that signed the certificate and so on. Finally a text version +of the error number is presented. +.PP +A partial list of the error codes and messages is shown below, this also +includes the name of the error code as defined in the header file x509_vfy.h +Some of the error codes are defined but never returned: these are described +as \*(L"unused\*(R". +.IP "\fBX509_V_OK\fR" 4 +.IX Item "X509_V_OK" +The operation was successful. +.IP "\fBX509_V_ERR_UNSPECIFIED\fR" 4 +.IX Item "X509_V_ERR_UNSPECIFIED" +Unspecified error; should not happen. +.IP "\fBX509_V_ERR_UNABLE_TO_GET_ISSUER_CERT\fR" 4 +.IX Item "X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT" +The issuer certificate of a looked up certificate could not be found. This +normally means the list of trusted certificates is not complete. +.IP "\fBX509_V_ERR_UNABLE_TO_GET_CRL\fR" 4 +.IX Item "X509_V_ERR_UNABLE_TO_GET_CRL" +The \s-1CRL\s0 of a certificate could not be found. +.IP "\fBX509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE\fR" 4 +.IX Item "X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE" +The certificate signature could not be decrypted. This means that the +actual signature value could not be determined rather than it not matching +the expected value, this is only meaningful for \s-1RSA\s0 keys. +.IP "\fBX509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE\fR" 4 +.IX Item "X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE" +The \s-1CRL\s0 signature could not be decrypted: this means that the actual +signature value could not be determined rather than it not matching the +expected value. Unused. +.IP "\fBX509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY\fR" 4 +.IX Item "X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY" +The public key in the certificate SubjectPublicKeyInfo could not be read. +.IP "\fBX509_V_ERR_CERT_SIGNATURE_FAILURE\fR" 4 +.IX Item "X509_V_ERR_CERT_SIGNATURE_FAILURE" +The signature of the certificate is invalid. +.IP "\fBX509_V_ERR_CRL_SIGNATURE_FAILURE\fR" 4 +.IX Item "X509_V_ERR_CRL_SIGNATURE_FAILURE" +The signature of the certificate is invalid. +.IP "\fBX509_V_ERR_CERT_NOT_YET_VALID\fR" 4 +.IX Item "X509_V_ERR_CERT_NOT_YET_VALID" +The certificate is not yet valid: the notBefore date is after the +current time. +.IP "\fBX509_V_ERR_CERT_HAS_EXPIRED\fR" 4 +.IX Item "X509_V_ERR_CERT_HAS_EXPIRED" +The certificate has expired: that is the notAfter date is before the +current time. +.IP "\fBX509_V_ERR_CRL_NOT_YET_VALID\fR" 4 +.IX Item "X509_V_ERR_CRL_NOT_YET_VALID" +The \s-1CRL\s0 is not yet valid. +.IP "\fBX509_V_ERR_CRL_HAS_EXPIRED\fR" 4 +.IX Item "X509_V_ERR_CRL_HAS_EXPIRED" +The \s-1CRL\s0 has expired. +.IP "\fBX509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD\fR" 4 +.IX Item "X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD" +The certificate notBefore field contains an invalid time. +.IP "\fBX509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD\fR" 4 +.IX Item "X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD" +The certificate notAfter field contains an invalid time. +.IP "\fBX509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD\fR" 4 +.IX Item "X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD" +The \s-1CRL\s0 lastUpdate field contains an invalid time. +.IP "\fBX509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD\fR" 4 +.IX Item "X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD" +The \s-1CRL\s0 nextUpdate field contains an invalid time. +.IP "\fBX509_V_ERR_OUT_OF_MEM\fR" 4 +.IX Item "X509_V_ERR_OUT_OF_MEM" +An error occurred trying to allocate memory. This should never happen. +.IP "\fBX509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT\fR" 4 +.IX Item "X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT" +The passed certificate is self-signed and the same certificate cannot +be found in the list of trusted certificates. +.IP "\fBX509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN\fR" 4 +.IX Item "X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN" +The certificate chain could be built up using the untrusted certificates +but the root could not be found locally. +.IP "\fBX509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY\fR" 4 +.IX Item "X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY" +The issuer certificate could not be found: this occurs if the issuer +certificate of an untrusted certificate cannot be found. +.IP "\fBX509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE\fR" 4 +.IX Item "X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE" +No signatures could be verified because the chain contains only one +certificate and it is not self signed. +.IP "\fBX509_V_ERR_CERT_CHAIN_TOO_LONG\fR" 4 +.IX Item "X509_V_ERR_CERT_CHAIN_TOO_LONG" +The certificate chain length is greater than the supplied maximum +depth. Unused. +.IP "\fBX509_V_ERR_CERT_REVOKED\fR" 4 +.IX Item "X509_V_ERR_CERT_REVOKED" +The certificate has been revoked. +.IP "\fBX509_V_ERR_INVALID_CA\fR" 4 +.IX Item "X509_V_ERR_INVALID_CA" +A \s-1CA\s0 certificate is invalid. Either it is not a \s-1CA\s0 or its extensions +are not consistent with the supplied purpose. +.IP "\fBX509_V_ERR_PATH_LENGTH_EXCEEDED\fR" 4 +.IX Item "X509_V_ERR_PATH_LENGTH_EXCEEDED" +The basicConstraints pathlength parameter has been exceeded. +.IP "\fBX509_V_ERR_INVALID_PURPOSE\fR" 4 +.IX Item "X509_V_ERR_INVALID_PURPOSE" +The supplied certificate cannot be used for the specified purpose. +.IP "\fBX509_V_ERR_CERT_UNTRUSTED\fR" 4 +.IX Item "X509_V_ERR_CERT_UNTRUSTED" +The root \s-1CA\s0 is not marked as trusted for the specified purpose. +.IP "\fBX509_V_ERR_CERT_REJECTED\fR" 4 +.IX Item "X509_V_ERR_CERT_REJECTED" +The root \s-1CA\s0 is marked to reject the specified purpose. +.IP "\fBX509_V_ERR_SUBJECT_ISSUER_MISMATCH\fR" 4 +.IX Item "X509_V_ERR_SUBJECT_ISSUER_MISMATCH" +Not used as of OpenSSL 1.1.0 as a result of the deprecation of the +\&\fB\-issuer_checks\fR option. +.IP "\fBX509_V_ERR_AKID_SKID_MISMATCH\fR" 4 +.IX Item "X509_V_ERR_AKID_SKID_MISMATCH" +Not used as of OpenSSL 1.1.0 as a result of the deprecation of the +\&\fB\-issuer_checks\fR option. +.IP "\fBX509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH\fR" 4 +.IX Item "X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH" +Not used as of OpenSSL 1.1.0 as a result of the deprecation of the +\&\fB\-issuer_checks\fR option. +.IP "\fBX509_V_ERR_KEYUSAGE_NO_CERTSIGN\fR" 4 +.IX Item "X509_V_ERR_KEYUSAGE_NO_CERTSIGN" +Not used as of OpenSSL 1.1.0 as a result of the deprecation of the +\&\fB\-issuer_checks\fR option. +.IP "\fBX509_V_ERR_UNABLE_TO_GET_CRL_ISSUER\fR" 4 +.IX Item "X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER" +Unable to get \s-1CRL\s0 issuer certificate. +.IP "\fBX509_V_ERR_UNHANDLED_CRITICAL_EXTENSION\fR" 4 +.IX Item "X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION" +Unhandled critical extension. +.IP "\fBX509_V_ERR_KEYUSAGE_NO_CRL_SIGN\fR" 4 +.IX Item "X509_V_ERR_KEYUSAGE_NO_CRL_SIGN" +Key usage does not include \s-1CRL\s0 signing. +.IP "\fBX509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION\fR" 4 +.IX Item "X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION" +Unhandled critical \s-1CRL\s0 extension. +.IP "\fBX509_V_ERR_INVALID_NON_CA\fR" 4 +.IX Item "X509_V_ERR_INVALID_NON_CA" +Invalid non-CA certificate has \s-1CA\s0 markings. +.IP "\fBX509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED\fR" 4 +.IX Item "X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED" +Proxy path length constraint exceeded. +.IP "\fBX509_V_ERR_PROXY_SUBJECT_INVALID\fR" 4 +.IX Item "X509_V_ERR_PROXY_SUBJECT_INVALID" +Proxy certificate subject is invalid. It \s-1MUST\s0 be the same as the issuer +with a single \s-1CN\s0 component added. +.IP "\fBX509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE\fR" 4 +.IX Item "X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE" +Key usage does not include digital signature. +.IP "\fBX509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED\fR" 4 +.IX Item "X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED" +Proxy certificates not allowed, please use \fB\-allow_proxy_certs\fR. +.IP "\fBX509_V_ERR_INVALID_EXTENSION\fR" 4 +.IX Item "X509_V_ERR_INVALID_EXTENSION" +Invalid or inconsistent certificate extension. +.IP "\fBX509_V_ERR_INVALID_POLICY_EXTENSION\fR" 4 +.IX Item "X509_V_ERR_INVALID_POLICY_EXTENSION" +Invalid or inconsistent certificate policy extension. +.IP "\fBX509_V_ERR_NO_EXPLICIT_POLICY\fR" 4 +.IX Item "X509_V_ERR_NO_EXPLICIT_POLICY" +No explicit policy. +.IP "\fBX509_V_ERR_DIFFERENT_CRL_SCOPE\fR" 4 +.IX Item "X509_V_ERR_DIFFERENT_CRL_SCOPE" +Different \s-1CRL\s0 scope. +.IP "\fBX509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE\fR" 4 +.IX Item "X509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE" +Unsupported extension feature. +.IP "\fBX509_V_ERR_UNNESTED_RESOURCE\fR" 4 +.IX Item "X509_V_ERR_UNNESTED_RESOURCE" +\&\s-1RFC 3779\s0 resource not subset of parent's resources. +.IP "\fBX509_V_ERR_PERMITTED_VIOLATION\fR" 4 +.IX Item "X509_V_ERR_PERMITTED_VIOLATION" +Permitted subtree violation. +.IP "\fBX509_V_ERR_EXCLUDED_VIOLATION\fR" 4 +.IX Item "X509_V_ERR_EXCLUDED_VIOLATION" +Excluded subtree violation. +.IP "\fBX509_V_ERR_SUBTREE_MINMAX\fR" 4 +.IX Item "X509_V_ERR_SUBTREE_MINMAX" +Name constraints minimum and maximum not supported. +.IP "\fBX509_V_ERR_APPLICATION_VERIFICATION\fR" 4 +.IX Item "X509_V_ERR_APPLICATION_VERIFICATION" +Application verification failure. Unused. +.IP "\fBX509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE\fR" 4 +.IX Item "X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE" +Unsupported name constraint type. +.IP "\fBX509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX\fR" 4 +.IX Item "X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX" +Unsupported or invalid name constraint syntax. +.IP "\fBX509_V_ERR_UNSUPPORTED_NAME_SYNTAX\fR" 4 +.IX Item "X509_V_ERR_UNSUPPORTED_NAME_SYNTAX" +Unsupported or invalid name syntax. +.IP "\fBX509_V_ERR_CRL_PATH_VALIDATION_ERROR\fR" 4 +.IX Item "X509_V_ERR_CRL_PATH_VALIDATION_ERROR" +\&\s-1CRL\s0 path validation error. +.IP "\fBX509_V_ERR_PATH_LOOP\fR" 4 +.IX Item "X509_V_ERR_PATH_LOOP" +Path loop. +.IP "\fBX509_V_ERR_SUITE_B_INVALID_VERSION\fR" 4 +.IX Item "X509_V_ERR_SUITE_B_INVALID_VERSION" +Suite B: certificate version invalid. +.IP "\fBX509_V_ERR_SUITE_B_INVALID_ALGORITHM\fR" 4 +.IX Item "X509_V_ERR_SUITE_B_INVALID_ALGORITHM" +Suite B: invalid public key algorithm. +.IP "\fBX509_V_ERR_SUITE_B_INVALID_CURVE\fR" 4 +.IX Item "X509_V_ERR_SUITE_B_INVALID_CURVE" +Suite B: invalid \s-1ECC\s0 curve. +.IP "\fBX509_V_ERR_SUITE_B_INVALID_SIGNATURE_ALGORITHM\fR" 4 +.IX Item "X509_V_ERR_SUITE_B_INVALID_SIGNATURE_ALGORITHM" +Suite B: invalid signature algorithm. +.IP "\fBX509_V_ERR_SUITE_B_LOS_NOT_ALLOWED\fR" 4 +.IX Item "X509_V_ERR_SUITE_B_LOS_NOT_ALLOWED" +Suite B: curve not allowed for this \s-1LOS.\s0 +.IP "\fBX509_V_ERR_SUITE_B_CANNOT_SIGN_P_384_WITH_P_256\fR" 4 +.IX Item "X509_V_ERR_SUITE_B_CANNOT_SIGN_P_384_WITH_P_256" +Suite B: cannot sign P\-384 with P\-256. +.IP "\fBX509_V_ERR_HOSTNAME_MISMATCH\fR" 4 +.IX Item "X509_V_ERR_HOSTNAME_MISMATCH" +Hostname mismatch. +.IP "\fBX509_V_ERR_EMAIL_MISMATCH\fR" 4 +.IX Item "X509_V_ERR_EMAIL_MISMATCH" +Email address mismatch. +.IP "\fBX509_V_ERR_IP_ADDRESS_MISMATCH\fR" 4 +.IX Item "X509_V_ERR_IP_ADDRESS_MISMATCH" +\&\s-1IP\s0 address mismatch. +.IP "\fBX509_V_ERR_DANE_NO_MATCH\fR" 4 +.IX Item "X509_V_ERR_DANE_NO_MATCH" +\&\s-1DANE TLSA\s0 authentication is enabled, but no \s-1TLSA\s0 records matched the +certificate chain. +This error is only possible in \fBs_client\fR\|(1). +.IP "\fBX509_V_ERR_EE_KEY_TOO_SMALL\fR" 4 +.IX Item "X509_V_ERR_EE_KEY_TOO_SMALL" +\&\s-1EE\s0 certificate key too weak. +.IP "\fBX509_ERR_CA_KEY_TOO_SMALL\fR" 4 +.IX Item "X509_ERR_CA_KEY_TOO_SMALL" +\&\s-1CA\s0 certificate key too weak. +.IP "\fBX509_ERR_CA_MD_TOO_WEAK\fR" 4 +.IX Item "X509_ERR_CA_MD_TOO_WEAK" +\&\s-1CA\s0 signature digest algorithm too weak. +.IP "\fBX509_V_ERR_INVALID_CALL\fR" 4 +.IX Item "X509_V_ERR_INVALID_CALL" +nvalid certificate verification context. +.IP "\fBX509_V_ERR_STORE_LOOKUP\fR" 4 +.IX Item "X509_V_ERR_STORE_LOOKUP" +Issuer certificate lookup error. +.IP "\fBX509_V_ERR_NO_VALID_SCTS\fR" 4 +.IX Item "X509_V_ERR_NO_VALID_SCTS" +Certificate Transparency required, but no valid SCTs found. +.IP "\fBX509_V_ERR_PROXY_SUBJECT_NAME_VIOLATION\fR" 4 +.IX Item "X509_V_ERR_PROXY_SUBJECT_NAME_VIOLATION" +Proxy subject name violation. +.IP "\fBX509_V_ERR_OCSP_VERIFY_NEEDED\fR" 4 +.IX Item "X509_V_ERR_OCSP_VERIFY_NEEDED" +Returned by the verify callback to indicate an \s-1OCSP\s0 verification is needed. +.IP "\fBX509_V_ERR_OCSP_VERIFY_FAILED\fR" 4 +.IX Item "X509_V_ERR_OCSP_VERIFY_FAILED" +Returned by the verify callback to indicate \s-1OCSP\s0 verification failed. +.IP "\fBX509_V_ERR_OCSP_CERT_UNKNOWN\fR" 4 +.IX Item "X509_V_ERR_OCSP_CERT_UNKNOWN" +Returned by the verify callback to indicate that the certificate is not recognized +by the \s-1OCSP\s0 responder. +.SH "BUGS" +.IX Header "BUGS" +Although the issuer checks are a considerable improvement over the old +technique they still suffer from limitations in the underlying X509_LOOKUP +\&\s-1API.\s0 One consequence of this is that trusted certificates with matching +subject name must either appear in a file (as specified by the \fB\-CAfile\fR +option) or a directory (as specified by \fB\-CApath\fR). If they occur in +both then only the certificates in the file will be recognised. +.PP +Previous versions of OpenSSL assume certificates with matching subject +name are identical and mishandled them. +.PP +Previous versions of this documentation swapped the meaning of the +\&\fBX509_V_ERR_UNABLE_TO_GET_ISSUER_CERT\fR and +\&\fBX509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY\fR error codes. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBx509\fR\|(1) +.SH "HISTORY" +.IX Header "HISTORY" +The \fB\-show_chain\fR option was added in OpenSSL 1.1.0. +.PP +The \fB\-issuer_checks\fR option is deprecated as of OpenSSL 1.1.0 and +is silently ignored. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/version.1 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/version.1 new file mode 100644 index 00000000..909783b5 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/version.1 @@ -0,0 +1,198 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "VERSION 1" +.TH VERSION 1 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +openssl\-version, version \- print OpenSSL version information +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +\&\fBopenssl version\fR +[\fB\-help\fR] +[\fB\-a\fR] +[\fB\-v\fR] +[\fB\-b\fR] +[\fB\-o\fR] +[\fB\-f\fR] +[\fB\-p\fR] +[\fB\-d\fR] +[\fB\-e\fR] +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +This command is used to print out version information about OpenSSL. +.SH "OPTIONS" +.IX Header "OPTIONS" +.IP "\fB\-help\fR" 4 +.IX Item "-help" +Print out a usage message. +.IP "\fB\-a\fR" 4 +.IX Item "-a" +All information, this is the same as setting all the other flags. +.IP "\fB\-v\fR" 4 +.IX Item "-v" +The current OpenSSL version. +.IP "\fB\-b\fR" 4 +.IX Item "-b" +The date the current version of OpenSSL was built. +.IP "\fB\-o\fR" 4 +.IX Item "-o" +Option information: various options set when the library was built. +.IP "\fB\-f\fR" 4 +.IX Item "-f" +Compilation flags. +.IP "\fB\-p\fR" 4 +.IX Item "-p" +Platform setting. +.IP "\fB\-d\fR" 4 +.IX Item "-d" +\&\s-1OPENSSLDIR\s0 setting. +.IP "\fB\-e\fR" 4 +.IX Item "-e" +\&\s-1ENGINESDIR\s0 setting. +.SH "NOTES" +.IX Header "NOTES" +The output of \fBopenssl version \-a\fR would typically be used when sending +in a bug report. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/x509.1 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/x509.1 new file mode 100644 index 00000000..a493207e --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man1/x509.1 @@ -0,0 +1,955 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "X509 1" +.TH X509 1 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +openssl\-x509, x509 \- Certificate display and signing utility +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +\&\fBopenssl\fR \fBx509\fR +[\fB\-help\fR] +[\fB\-inform DER|PEM\fR] +[\fB\-outform DER|PEM\fR] +[\fB\-keyform DER|PEM|ENGINE\fR] +[\fB\-CAform DER|PEM\fR] +[\fB\-CAkeyform DER|PEM\fR] +[\fB\-in filename\fR] +[\fB\-out filename\fR] +[\fB\-serial\fR] +[\fB\-hash\fR] +[\fB\-subject_hash\fR] +[\fB\-issuer_hash\fR] +[\fB\-ocspid\fR] +[\fB\-subject\fR] +[\fB\-issuer\fR] +[\fB\-nameopt option\fR] +[\fB\-email\fR] +[\fB\-ocsp_uri\fR] +[\fB\-startdate\fR] +[\fB\-enddate\fR] +[\fB\-purpose\fR] +[\fB\-dates\fR] +[\fB\-checkend num\fR] +[\fB\-modulus\fR] +[\fB\-pubkey\fR] +[\fB\-fingerprint\fR] +[\fB\-alias\fR] +[\fB\-noout\fR] +[\fB\-trustout\fR] +[\fB\-clrtrust\fR] +[\fB\-clrreject\fR] +[\fB\-addtrust arg\fR] +[\fB\-addreject arg\fR] +[\fB\-setalias arg\fR] +[\fB\-days arg\fR] +[\fB\-set_serial n\fR] +[\fB\-signkey arg\fR] +[\fB\-passin arg\fR] +[\fB\-x509toreq\fR] +[\fB\-req\fR] +[\fB\-CA filename\fR] +[\fB\-CAkey filename\fR] +[\fB\-CAcreateserial\fR] +[\fB\-CAserial filename\fR] +[\fB\-force_pubkey key\fR] +[\fB\-text\fR] +[\fB\-ext extensions\fR] +[\fB\-certopt option\fR] +[\fB\-C\fR] +[\fB\-\f(BIdigest\fB\fR] +[\fB\-clrext\fR] +[\fB\-extfile filename\fR] +[\fB\-extensions section\fR] +[\fB\-sigopt nm:v\fR] +[\fB\-rand file...\fR] +[\fB\-writerand file\fR] +[\fB\-engine id\fR] +[\fB\-preserve_dates\fR] +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fBx509\fR command is a multi purpose certificate utility. It can be +used to display certificate information, convert certificates to +various forms, sign certificate requests like a \*(L"mini \s-1CA\*(R"\s0 or edit +certificate trust settings. +.PP +Since there are a large number of options they will split up into +various sections. +.SH "OPTIONS" +.IX Header "OPTIONS" +.SS "Input, Output, and General Purpose Options" +.IX Subsection "Input, Output, and General Purpose Options" +.IP "\fB\-help\fR" 4 +.IX Item "-help" +Print out a usage message. +.IP "\fB\-inform DER|PEM\fR" 4 +.IX Item "-inform DER|PEM" +This specifies the input format normally the command will expect an X509 +certificate but this can change if other options such as \fB\-req\fR are +present. The \s-1DER\s0 format is the \s-1DER\s0 encoding of the certificate and \s-1PEM\s0 +is the base64 encoding of the \s-1DER\s0 encoding with header and footer lines +added. The default format is \s-1PEM.\s0 +.IP "\fB\-outform DER|PEM\fR" 4 +.IX Item "-outform DER|PEM" +This specifies the output format, the options have the same meaning and default +as the \fB\-inform\fR option. +.IP "\fB\-in filename\fR" 4 +.IX Item "-in filename" +This specifies the input filename to read a certificate from or standard input +if this option is not specified. +.IP "\fB\-out filename\fR" 4 +.IX Item "-out filename" +This specifies the output filename to write to or standard output by +default. +.IP "\fB\-\f(BIdigest\fB\fR" 4 +.IX Item "-digest" +The digest to use. +This affects any signing or display option that uses a message +digest, such as the \fB\-fingerprint\fR, \fB\-signkey\fR and \fB\-CA\fR options. +Any digest supported by the OpenSSL \fBdgst\fR command can be used. +If not specified then \s-1SHA1\s0 is used with \fB\-fingerprint\fR or +the default digest for the signing algorithm is used, typically \s-1SHA256.\s0 +.IP "\fB\-rand file...\fR" 4 +.IX Item "-rand file..." +A file or files containing random data used to seed the random number +generator. +Multiple files can be specified separated by an OS-dependent character. +The separator is \fB;\fR for MS-Windows, \fB,\fR for OpenVMS, and \fB:\fR for +all others. +.IP "[\fB\-writerand file\fR]" 4 +.IX Item "[-writerand file]" +Writes random data to the specified \fIfile\fR upon exit. +This can be used with a subsequent \fB\-rand\fR flag. +.IP "\fB\-engine id\fR" 4 +.IX Item "-engine id" +Specifying an engine (by its unique \fBid\fR string) will cause \fBx509\fR +to attempt to obtain a functional reference to the specified engine, +thus initialising it if needed. The engine will then be set as the default +for all available algorithms. +.IP "\fB\-preserve_dates\fR" 4 +.IX Item "-preserve_dates" +When signing a certificate, preserve the \*(L"notBefore\*(R" and \*(L"notAfter\*(R" dates instead +of adjusting them to current time and duration. Cannot be used with the \fB\-days\fR option. +.SS "Display Options" +.IX Subsection "Display Options" +Note: the \fB\-alias\fR and \fB\-purpose\fR options are also display options +but are described in the \fB\s-1TRUST SETTINGS\s0\fR section. +.IP "\fB\-text\fR" 4 +.IX Item "-text" +Prints out the certificate in text form. Full details are output including the +public key, signature algorithms, issuer and subject names, serial number +any extensions present and any trust settings. +.IP "\fB\-ext extensions\fR" 4 +.IX Item "-ext extensions" +Prints out the certificate extensions in text form. Extensions are specified +with a comma separated string, e.g., \*(L"subjectAltName,subjectKeyIdentifier\*(R". +See the \fBx509v3_config\fR\|(5) manual page for the extension names. +.IP "\fB\-certopt option\fR" 4 +.IX Item "-certopt option" +Customise the output format used with \fB\-text\fR. The \fBoption\fR argument +can be a single option or multiple options separated by commas. The +\&\fB\-certopt\fR switch may be also be used more than once to set multiple +options. See the \fB\s-1TEXT OPTIONS\s0\fR section for more information. +.IP "\fB\-noout\fR" 4 +.IX Item "-noout" +This option prevents output of the encoded version of the certificate. +.IP "\fB\-pubkey\fR" 4 +.IX Item "-pubkey" +Outputs the certificate's SubjectPublicKeyInfo block in \s-1PEM\s0 format. +.IP "\fB\-modulus\fR" 4 +.IX Item "-modulus" +This option prints out the value of the modulus of the public key +contained in the certificate. +.IP "\fB\-serial\fR" 4 +.IX Item "-serial" +Outputs the certificate serial number. +.IP "\fB\-subject_hash\fR" 4 +.IX Item "-subject_hash" +Outputs the \*(L"hash\*(R" of the certificate subject name. This is used in OpenSSL to +form an index to allow certificates in a directory to be looked up by subject +name. +.IP "\fB\-issuer_hash\fR" 4 +.IX Item "-issuer_hash" +Outputs the \*(L"hash\*(R" of the certificate issuer name. +.IP "\fB\-ocspid\fR" 4 +.IX Item "-ocspid" +Outputs the \s-1OCSP\s0 hash values for the subject name and public key. +.IP "\fB\-hash\fR" 4 +.IX Item "-hash" +Synonym for \*(L"\-subject_hash\*(R" for backward compatibility reasons. +.IP "\fB\-subject_hash_old\fR" 4 +.IX Item "-subject_hash_old" +Outputs the \*(L"hash\*(R" of the certificate subject name using the older algorithm +as used by OpenSSL before version 1.0.0. +.IP "\fB\-issuer_hash_old\fR" 4 +.IX Item "-issuer_hash_old" +Outputs the \*(L"hash\*(R" of the certificate issuer name using the older algorithm +as used by OpenSSL before version 1.0.0. +.IP "\fB\-subject\fR" 4 +.IX Item "-subject" +Outputs the subject name. +.IP "\fB\-issuer\fR" 4 +.IX Item "-issuer" +Outputs the issuer name. +.IP "\fB\-nameopt option\fR" 4 +.IX Item "-nameopt option" +Option which determines how the subject or issuer names are displayed. The +\&\fBoption\fR argument can be a single option or multiple options separated by +commas. Alternatively the \fB\-nameopt\fR switch may be used more than once to +set multiple options. See the \fB\s-1NAME OPTIONS\s0\fR section for more information. +.IP "\fB\-email\fR" 4 +.IX Item "-email" +Outputs the email address(es) if any. +.IP "\fB\-ocsp_uri\fR" 4 +.IX Item "-ocsp_uri" +Outputs the \s-1OCSP\s0 responder address(es) if any. +.IP "\fB\-startdate\fR" 4 +.IX Item "-startdate" +Prints out the start date of the certificate, that is the notBefore date. +.IP "\fB\-enddate\fR" 4 +.IX Item "-enddate" +Prints out the expiry date of the certificate, that is the notAfter date. +.IP "\fB\-dates\fR" 4 +.IX Item "-dates" +Prints out the start and expiry dates of a certificate. +.IP "\fB\-checkend arg\fR" 4 +.IX Item "-checkend arg" +Checks if the certificate expires within the next \fBarg\fR seconds and exits +non-zero if yes it will expire or zero if not. +.IP "\fB\-fingerprint\fR" 4 +.IX Item "-fingerprint" +Calculates and outputs the digest of the \s-1DER\s0 encoded version of the entire +certificate (see digest options). +This is commonly called a \*(L"fingerprint\*(R". Because of the nature of message +digests, the fingerprint of a certificate is unique to that certificate and +two certificates with the same fingerprint can be considered to be the same. +.IP "\fB\-C\fR" 4 +.IX Item "-C" +This outputs the certificate in the form of a C source file. +.SS "Trust Settings" +.IX Subsection "Trust Settings" +A \fBtrusted certificate\fR is an ordinary certificate which has several +additional pieces of information attached to it such as the permitted +and prohibited uses of the certificate and an \*(L"alias\*(R". +.PP +Normally when a certificate is being verified at least one certificate +must be \*(L"trusted\*(R". By default a trusted certificate must be stored +locally and must be a root \s-1CA:\s0 any certificate chain ending in this \s-1CA\s0 +is then usable for any purpose. +.PP +Trust settings currently are only used with a root \s-1CA.\s0 They allow a finer +control over the purposes the root \s-1CA\s0 can be used for. For example a \s-1CA\s0 +may be trusted for \s-1SSL\s0 client but not \s-1SSL\s0 server use. +.PP +See the description of the \fBverify\fR utility for more information on the +meaning of trust settings. +.PP +Future versions of OpenSSL will recognize trust settings on any +certificate: not just root CAs. +.IP "\fB\-trustout\fR" 4 +.IX Item "-trustout" +This causes \fBx509\fR to output a \fBtrusted\fR certificate. An ordinary +or trusted certificate can be input but by default an ordinary +certificate is output and any trust settings are discarded. With the +\&\fB\-trustout\fR option a trusted certificate is output. A trusted +certificate is automatically output if any trust settings are modified. +.IP "\fB\-setalias arg\fR" 4 +.IX Item "-setalias arg" +Sets the alias of the certificate. This will allow the certificate +to be referred to using a nickname for example \*(L"Steve's Certificate\*(R". +.IP "\fB\-alias\fR" 4 +.IX Item "-alias" +Outputs the certificate alias, if any. +.IP "\fB\-clrtrust\fR" 4 +.IX Item "-clrtrust" +Clears all the permitted or trusted uses of the certificate. +.IP "\fB\-clrreject\fR" 4 +.IX Item "-clrreject" +Clears all the prohibited or rejected uses of the certificate. +.IP "\fB\-addtrust arg\fR" 4 +.IX Item "-addtrust arg" +Adds a trusted certificate use. +Any object name can be used here but currently only \fBclientAuth\fR (\s-1SSL\s0 client +use), \fBserverAuth\fR (\s-1SSL\s0 server use), \fBemailProtection\fR (S/MIME email) and +\&\fBanyExtendedKeyUsage\fR are used. +As of OpenSSL 1.1.0, the last of these blocks all purposes when rejected or +enables all purposes when trusted. +Other OpenSSL applications may define additional uses. +.IP "\fB\-addreject arg\fR" 4 +.IX Item "-addreject arg" +Adds a prohibited use. It accepts the same values as the \fB\-addtrust\fR +option. +.IP "\fB\-purpose\fR" 4 +.IX Item "-purpose" +This option performs tests on the certificate extensions and outputs +the results. For a more complete description see the \fB\s-1CERTIFICATE +EXTENSIONS\s0\fR section. +.SS "Signing Options" +.IX Subsection "Signing Options" +The \fBx509\fR utility can be used to sign certificates and requests: it +can thus behave like a \*(L"mini \s-1CA\*(R".\s0 +.IP "\fB\-signkey arg\fR" 4 +.IX Item "-signkey arg" +This option causes the input file to be self signed using the supplied +private key or engine. The private key's format is specified with the +\&\fB\-keyform\fR option. +.Sp +If the input file is a certificate it sets the issuer name to the +subject name (i.e. makes it self signed) changes the public key to the +supplied value and changes the start and end dates. The start date is +set to the current time and the end date is set to a value determined +by the \fB\-days\fR option. Any certificate extensions are retained unless +the \fB\-clrext\fR option is supplied; this includes, for example, any existing +key identifier extensions. +.Sp +If the input is a certificate request then a self signed certificate +is created using the supplied private key using the subject name in +the request. +.IP "\fB\-sigopt nm:v\fR" 4 +.IX Item "-sigopt nm:v" +Pass options to the signature algorithm during sign or verify operations. +Names and values of these options are algorithm-specific. +.IP "\fB\-passin arg\fR" 4 +.IX Item "-passin arg" +The key password source. For more information about the format of \fBarg\fR +see the \fB\s-1PASS PHRASE ARGUMENTS\s0\fR section in \fBopenssl\fR\|(1). +.IP "\fB\-clrext\fR" 4 +.IX Item "-clrext" +Delete any extensions from a certificate. This option is used when a +certificate is being created from another certificate (for example with +the \fB\-signkey\fR or the \fB\-CA\fR options). Normally all extensions are +retained. +.IP "\fB\-keyform PEM|DER|ENGINE\fR" 4 +.IX Item "-keyform PEM|DER|ENGINE" +Specifies the format (\s-1DER\s0 or \s-1PEM\s0) of the private key file used in the +\&\fB\-signkey\fR option. +.IP "\fB\-days arg\fR" 4 +.IX Item "-days arg" +Specifies the number of days to make a certificate valid for. The default +is 30 days. Cannot be used with the \fB\-preserve_dates\fR option. +.IP "\fB\-x509toreq\fR" 4 +.IX Item "-x509toreq" +Converts a certificate into a certificate request. The \fB\-signkey\fR option +is used to pass the required private key. +.IP "\fB\-req\fR" 4 +.IX Item "-req" +By default a certificate is expected on input. With this option a +certificate request is expected instead. +.IP "\fB\-set_serial n\fR" 4 +.IX Item "-set_serial n" +Specifies the serial number to use. This option can be used with either +the \fB\-signkey\fR or \fB\-CA\fR options. If used in conjunction with the \fB\-CA\fR +option the serial number file (as specified by the \fB\-CAserial\fR or +\&\fB\-CAcreateserial\fR options) is not used. +.Sp +The serial number can be decimal or hex (if preceded by \fB0x\fR). +.IP "\fB\-CA filename\fR" 4 +.IX Item "-CA filename" +Specifies the \s-1CA\s0 certificate to be used for signing. When this option is +present \fBx509\fR behaves like a \*(L"mini \s-1CA\*(R".\s0 The input file is signed by this +\&\s-1CA\s0 using this option: that is its issuer name is set to the subject name +of the \s-1CA\s0 and it is digitally signed using the CAs private key. +.Sp +This option is normally combined with the \fB\-req\fR option. Without the +\&\fB\-req\fR option the input is a certificate which must be self signed. +.IP "\fB\-CAkey filename\fR" 4 +.IX Item "-CAkey filename" +Sets the \s-1CA\s0 private key to sign a certificate with. If this option is +not specified then it is assumed that the \s-1CA\s0 private key is present in +the \s-1CA\s0 certificate file. +.IP "\fB\-CAserial filename\fR" 4 +.IX Item "-CAserial filename" +Sets the \s-1CA\s0 serial number file to use. +.Sp +When the \fB\-CA\fR option is used to sign a certificate it uses a serial +number specified in a file. This file consists of one line containing +an even number of hex digits with the serial number to use. After each +use the serial number is incremented and written out to the file again. +.Sp +The default filename consists of the \s-1CA\s0 certificate file base name with +\&\*(L".srl\*(R" appended. For example if the \s-1CA\s0 certificate file is called +\&\*(L"mycacert.pem\*(R" it expects to find a serial number file called \*(L"mycacert.srl\*(R". +.IP "\fB\-CAcreateserial\fR" 4 +.IX Item "-CAcreateserial" +With this option the \s-1CA\s0 serial number file is created if it does not exist: +it will contain the serial number \*(L"02\*(R" and the certificate being signed will +have the 1 as its serial number. If the \fB\-CA\fR option is specified +and the serial number file does not exist a random number is generated; +this is the recommended practice. +.IP "\fB\-extfile filename\fR" 4 +.IX Item "-extfile filename" +File containing certificate extensions to use. If not specified then +no extensions are added to the certificate. +.IP "\fB\-extensions section\fR" 4 +.IX Item "-extensions section" +The section to add certificate extensions from. If this option is not +specified then the extensions should either be contained in the unnamed +(default) section or the default section should contain a variable called +\&\*(L"extensions\*(R" which contains the section to use. See the +\&\fBx509v3_config\fR\|(5) manual page for details of the +extension section format. +.IP "\fB\-force_pubkey key\fR" 4 +.IX Item "-force_pubkey key" +When a certificate is created set its public key to \fBkey\fR instead of the +key in the certificate or certificate request. This option is useful for +creating certificates where the algorithm can't normally sign requests, for +example \s-1DH.\s0 +.Sp +The format or \fBkey\fR can be specified using the \fB\-keyform\fR option. +.SS "Name Options" +.IX Subsection "Name Options" +The \fBnameopt\fR command line switch determines how the subject and issuer +names are displayed. If no \fBnameopt\fR switch is present the default \*(L"oneline\*(R" +format is used which is compatible with previous versions of OpenSSL. +Each option is described in detail below, all options can be preceded by +a \fB\-\fR to turn the option off. Only the first four will normally be used. +.IP "\fBcompat\fR" 4 +.IX Item "compat" +Use the old format. +.IP "\fB\s-1RFC2253\s0\fR" 4 +.IX Item "RFC2253" +Displays names compatible with \s-1RFC2253\s0 equivalent to \fBesc_2253\fR, \fBesc_ctrl\fR, +\&\fBesc_msb\fR, \fButf8\fR, \fBdump_nostr\fR, \fBdump_unknown\fR, \fBdump_der\fR, +\&\fBsep_comma_plus\fR, \fBdn_rev\fR and \fBsname\fR. +.IP "\fBoneline\fR" 4 +.IX Item "oneline" +A oneline format which is more readable than \s-1RFC2253.\s0 It is equivalent to +specifying the \fBesc_2253\fR, \fBesc_ctrl\fR, \fBesc_msb\fR, \fButf8\fR, \fBdump_nostr\fR, +\&\fBdump_der\fR, \fBuse_quote\fR, \fBsep_comma_plus_space\fR, \fBspace_eq\fR and \fBsname\fR +options. This is the \fIdefault\fR of no name options are given explicitly. +.IP "\fBmultiline\fR" 4 +.IX Item "multiline" +A multiline format. It is equivalent \fBesc_ctrl\fR, \fBesc_msb\fR, \fBsep_multiline\fR, +\&\fBspace_eq\fR, \fBlname\fR and \fBalign\fR. +.IP "\fBesc_2253\fR" 4 +.IX Item "esc_2253" +Escape the \*(L"special\*(R" characters required by \s-1RFC2253\s0 in a field. That is +\&\fB,+"<>;\fR. Additionally \fB#\fR is escaped at the beginning of a string +and a space character at the beginning or end of a string. +.IP "\fBesc_2254\fR" 4 +.IX Item "esc_2254" +Escape the \*(L"special\*(R" characters required by \s-1RFC2254\s0 in a field. That is +the \fB\s-1NUL\s0\fR character as well as and \fB()*\fR. +.IP "\fBesc_ctrl\fR" 4 +.IX Item "esc_ctrl" +Escape control characters. That is those with \s-1ASCII\s0 values less than +0x20 (space) and the delete (0x7f) character. They are escaped using the +\&\s-1RFC2253\s0 \eXX notation (where \s-1XX\s0 are two hex digits representing the +character value). +.IP "\fBesc_msb\fR" 4 +.IX Item "esc_msb" +Escape characters with the \s-1MSB\s0 set, that is with \s-1ASCII\s0 values larger than +127. +.IP "\fBuse_quote\fR" 4 +.IX Item "use_quote" +Escapes some characters by surrounding the whole string with \fB"\fR characters, +without the option all escaping is done with the \fB\e\fR character. +.IP "\fButf8\fR" 4 +.IX Item "utf8" +Convert all strings to \s-1UTF8\s0 format first. This is required by \s-1RFC2253.\s0 If +you are lucky enough to have a \s-1UTF8\s0 compatible terminal then the use +of this option (and \fBnot\fR setting \fBesc_msb\fR) may result in the correct +display of multibyte (international) characters. Is this option is not +present then multibyte characters larger than 0xff will be represented +using the format \eUXXXX for 16 bits and \eWXXXXXXXX for 32 bits. +Also if this option is off any UTF8Strings will be converted to their +character form first. +.IP "\fBignore_type\fR" 4 +.IX Item "ignore_type" +This option does not attempt to interpret multibyte characters in any +way. That is their content octets are merely dumped as though one octet +represents each character. This is useful for diagnostic purposes but +will result in rather odd looking output. +.IP "\fBshow_type\fR" 4 +.IX Item "show_type" +Show the type of the \s-1ASN1\s0 character string. The type precedes the +field contents. For example \*(L"\s-1BMPSTRING:\s0 Hello World\*(R". +.IP "\fBdump_der\fR" 4 +.IX Item "dump_der" +When this option is set any fields that need to be hexdumped will +be dumped using the \s-1DER\s0 encoding of the field. Otherwise just the +content octets will be displayed. Both options use the \s-1RFC2253\s0 +\&\fB#XXXX...\fR format. +.IP "\fBdump_nostr\fR" 4 +.IX Item "dump_nostr" +Dump non character string types (for example \s-1OCTET STRING\s0) if this +option is not set then non character string types will be displayed +as though each content octet represents a single character. +.IP "\fBdump_all\fR" 4 +.IX Item "dump_all" +Dump all fields. This option when used with \fBdump_der\fR allows the +\&\s-1DER\s0 encoding of the structure to be unambiguously determined. +.IP "\fBdump_unknown\fR" 4 +.IX Item "dump_unknown" +Dump any field whose \s-1OID\s0 is not recognised by OpenSSL. +.IP "\fBsep_comma_plus\fR, \fBsep_comma_plus_space\fR, \fBsep_semi_plus_space\fR, \fBsep_multiline\fR" 4 +.IX Item "sep_comma_plus, sep_comma_plus_space, sep_semi_plus_space, sep_multiline" +These options determine the field separators. The first character is +between RDNs and the second between multiple AVAs (multiple AVAs are +very rare and their use is discouraged). The options ending in +\&\*(L"space\*(R" additionally place a space after the separator to make it +more readable. The \fBsep_multiline\fR uses a linefeed character for +the \s-1RDN\s0 separator and a spaced \fB+\fR for the \s-1AVA\s0 separator. It also +indents the fields by four characters. If no field separator is specified +then \fBsep_comma_plus_space\fR is used by default. +.IP "\fBdn_rev\fR" 4 +.IX Item "dn_rev" +Reverse the fields of the \s-1DN.\s0 This is required by \s-1RFC2253.\s0 As a side +effect this also reverses the order of multiple AVAs but this is +permissible. +.IP "\fBnofname\fR, \fBsname\fR, \fBlname\fR, \fBoid\fR" 4 +.IX Item "nofname, sname, lname, oid" +These options alter how the field name is displayed. \fBnofname\fR does +not display the field at all. \fBsname\fR uses the \*(L"short name\*(R" form +(\s-1CN\s0 for commonName for example). \fBlname\fR uses the long form. +\&\fBoid\fR represents the \s-1OID\s0 in numerical form and is useful for +diagnostic purpose. +.IP "\fBalign\fR" 4 +.IX Item "align" +Align field values for a more readable output. Only usable with +\&\fBsep_multiline\fR. +.IP "\fBspace_eq\fR" 4 +.IX Item "space_eq" +Places spaces round the \fB=\fR character which follows the field +name. +.SS "Text Options" +.IX Subsection "Text Options" +As well as customising the name output format, it is also possible to +customise the actual fields printed using the \fBcertopt\fR options when +the \fBtext\fR option is present. The default behaviour is to print all fields. +.IP "\fBcompatible\fR" 4 +.IX Item "compatible" +Use the old format. This is equivalent to specifying no output options at all. +.IP "\fBno_header\fR" 4 +.IX Item "no_header" +Don't print header information: that is the lines saying \*(L"Certificate\*(R" +and \*(L"Data\*(R". +.IP "\fBno_version\fR" 4 +.IX Item "no_version" +Don't print out the version number. +.IP "\fBno_serial\fR" 4 +.IX Item "no_serial" +Don't print out the serial number. +.IP "\fBno_signame\fR" 4 +.IX Item "no_signame" +Don't print out the signature algorithm used. +.IP "\fBno_validity\fR" 4 +.IX Item "no_validity" +Don't print the validity, that is the \fBnotBefore\fR and \fBnotAfter\fR fields. +.IP "\fBno_subject\fR" 4 +.IX Item "no_subject" +Don't print out the subject name. +.IP "\fBno_issuer\fR" 4 +.IX Item "no_issuer" +Don't print out the issuer name. +.IP "\fBno_pubkey\fR" 4 +.IX Item "no_pubkey" +Don't print out the public key. +.IP "\fBno_sigdump\fR" 4 +.IX Item "no_sigdump" +Don't give a hexadecimal dump of the certificate signature. +.IP "\fBno_aux\fR" 4 +.IX Item "no_aux" +Don't print out certificate trust information. +.IP "\fBno_extensions\fR" 4 +.IX Item "no_extensions" +Don't print out any X509V3 extensions. +.IP "\fBext_default\fR" 4 +.IX Item "ext_default" +Retain default extension behaviour: attempt to print out unsupported +certificate extensions. +.IP "\fBext_error\fR" 4 +.IX Item "ext_error" +Print an error message for unsupported certificate extensions. +.IP "\fBext_parse\fR" 4 +.IX Item "ext_parse" +\&\s-1ASN1\s0 parse unsupported extensions. +.IP "\fBext_dump\fR" 4 +.IX Item "ext_dump" +Hex dump unsupported extensions. +.IP "\fBca_default\fR" 4 +.IX Item "ca_default" +The value used by the \fBca\fR utility, equivalent to \fBno_issuer\fR, \fBno_pubkey\fR, +\&\fBno_header\fR, and \fBno_version\fR. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +Note: in these examples the '\e' means the example should be all on one +line. +.PP +Display the contents of a certificate: +.PP +.Vb 1 +\& openssl x509 \-in cert.pem \-noout \-text +.Ve +.PP +Display the \*(L"Subject Alternative Name\*(R" extension of a certificate: +.PP +.Vb 1 +\& openssl x509 \-in cert.pem \-noout \-ext subjectAltName +.Ve +.PP +Display more extensions of a certificate: +.PP +.Vb 1 +\& openssl x509 \-in cert.pem \-noout \-ext subjectAltName,nsCertType +.Ve +.PP +Display the certificate serial number: +.PP +.Vb 1 +\& openssl x509 \-in cert.pem \-noout \-serial +.Ve +.PP +Display the certificate subject name: +.PP +.Vb 1 +\& openssl x509 \-in cert.pem \-noout \-subject +.Ve +.PP +Display the certificate subject name in \s-1RFC2253\s0 form: +.PP +.Vb 1 +\& openssl x509 \-in cert.pem \-noout \-subject \-nameopt RFC2253 +.Ve +.PP +Display the certificate subject name in oneline form on a terminal +supporting \s-1UTF8:\s0 +.PP +.Vb 1 +\& openssl x509 \-in cert.pem \-noout \-subject \-nameopt oneline,\-esc_msb +.Ve +.PP +Display the certificate \s-1SHA1\s0 fingerprint: +.PP +.Vb 1 +\& openssl x509 \-sha1 \-in cert.pem \-noout \-fingerprint +.Ve +.PP +Convert a certificate from \s-1PEM\s0 to \s-1DER\s0 format: +.PP +.Vb 1 +\& openssl x509 \-in cert.pem \-inform PEM \-out cert.der \-outform DER +.Ve +.PP +Convert a certificate to a certificate request: +.PP +.Vb 1 +\& openssl x509 \-x509toreq \-in cert.pem \-out req.pem \-signkey key.pem +.Ve +.PP +Convert a certificate request into a self signed certificate using +extensions for a \s-1CA:\s0 +.PP +.Vb 2 +\& openssl x509 \-req \-in careq.pem \-extfile openssl.cnf \-extensions v3_ca \e +\& \-signkey key.pem \-out cacert.pem +.Ve +.PP +Sign a certificate request using the \s-1CA\s0 certificate above and add user +certificate extensions: +.PP +.Vb 2 +\& openssl x509 \-req \-in req.pem \-extfile openssl.cnf \-extensions v3_usr \e +\& \-CA cacert.pem \-CAkey key.pem \-CAcreateserial +.Ve +.PP +Set a certificate to be trusted for \s-1SSL\s0 client use and change set its alias to +\&\*(L"Steve's Class 1 \s-1CA\*(R"\s0 +.PP +.Vb 2 +\& openssl x509 \-in cert.pem \-addtrust clientAuth \e +\& \-setalias "Steve\*(Aqs Class 1 CA" \-out trust.pem +.Ve +.SH "NOTES" +.IX Header "NOTES" +The \s-1PEM\s0 format uses the header and footer lines: +.PP +.Vb 2 +\& \-\-\-\-\-BEGIN CERTIFICATE\-\-\-\-\- +\& \-\-\-\-\-END CERTIFICATE\-\-\-\-\- +.Ve +.PP +it will also handle files containing: +.PP +.Vb 2 +\& \-\-\-\-\-BEGIN X509 CERTIFICATE\-\-\-\-\- +\& \-\-\-\-\-END X509 CERTIFICATE\-\-\-\-\- +.Ve +.PP +Trusted certificates have the lines +.PP +.Vb 2 +\& \-\-\-\-\-BEGIN TRUSTED CERTIFICATE\-\-\-\-\- +\& \-\-\-\-\-END TRUSTED CERTIFICATE\-\-\-\-\- +.Ve +.PP +The conversion to \s-1UTF8\s0 format used with the name options assumes that +T61Strings use the \s-1ISO8859\-1\s0 character set. This is wrong but Netscape +and \s-1MSIE\s0 do this as do many certificates. So although this is incorrect +it is more likely to display the majority of certificates correctly. +.PP +The \fB\-email\fR option searches the subject name and the subject alternative +name extension. Only unique email addresses will be printed out: it will +not print the same address more than once. +.SH "CERTIFICATE EXTENSIONS" +.IX Header "CERTIFICATE EXTENSIONS" +The \fB\-purpose\fR option checks the certificate extensions and determines +what the certificate can be used for. The actual checks done are rather +complex and include various hacks and workarounds to handle broken +certificates and software. +.PP +The same code is used when verifying untrusted certificates in chains +so this section is useful if a chain is rejected by the verify code. +.PP +The basicConstraints extension \s-1CA\s0 flag is used to determine whether the +certificate can be used as a \s-1CA.\s0 If the \s-1CA\s0 flag is true then it is a \s-1CA,\s0 +if the \s-1CA\s0 flag is false then it is not a \s-1CA.\s0 \fBAll\fR CAs should have the +\&\s-1CA\s0 flag set to true. +.PP +If the basicConstraints extension is absent then the certificate is +considered to be a \*(L"possible \s-1CA\*(R"\s0 other extensions are checked according +to the intended use of the certificate. A warning is given in this case +because the certificate should really not be regarded as a \s-1CA:\s0 however +it is allowed to be a \s-1CA\s0 to work around some broken software. +.PP +If the certificate is a V1 certificate (and thus has no extensions) and +it is self signed it is also assumed to be a \s-1CA\s0 but a warning is again +given: this is to work around the problem of Verisign roots which are V1 +self signed certificates. +.PP +If the keyUsage extension is present then additional restraints are +made on the uses of the certificate. A \s-1CA\s0 certificate \fBmust\fR have the +keyCertSign bit set if the keyUsage extension is present. +.PP +The extended key usage extension places additional restrictions on the +certificate uses. If this extension is present (whether critical or not) +the key can only be used for the purposes specified. +.PP +A complete description of each test is given below. The comments about +basicConstraints and keyUsage and V1 certificates above apply to \fBall\fR +\&\s-1CA\s0 certificates. +.IP "\fB\s-1SSL\s0 Client\fR" 4 +.IX Item "SSL Client" +The extended key usage extension must be absent or include the \*(L"web client +authentication\*(R" \s-1OID.\s0 keyUsage must be absent or it must have the +digitalSignature bit set. Netscape certificate type must be absent or it must +have the \s-1SSL\s0 client bit set. +.IP "\fB\s-1SSL\s0 Client \s-1CA\s0\fR" 4 +.IX Item "SSL Client CA" +The extended key usage extension must be absent or include the \*(L"web client +authentication\*(R" \s-1OID.\s0 Netscape certificate type must be absent or it must have +the \s-1SSL CA\s0 bit set: this is used as a work around if the basicConstraints +extension is absent. +.IP "\fB\s-1SSL\s0 Server\fR" 4 +.IX Item "SSL Server" +The extended key usage extension must be absent or include the \*(L"web server +authentication\*(R" and/or one of the \s-1SGC\s0 OIDs. keyUsage must be absent or it +must have the digitalSignature, the keyEncipherment set or both bits set. +Netscape certificate type must be absent or have the \s-1SSL\s0 server bit set. +.IP "\fB\s-1SSL\s0 Server \s-1CA\s0\fR" 4 +.IX Item "SSL Server CA" +The extended key usage extension must be absent or include the \*(L"web server +authentication\*(R" and/or one of the \s-1SGC\s0 OIDs. Netscape certificate type must +be absent or the \s-1SSL CA\s0 bit must be set: this is used as a work around if the +basicConstraints extension is absent. +.IP "\fBNetscape \s-1SSL\s0 Server\fR" 4 +.IX Item "Netscape SSL Server" +For Netscape \s-1SSL\s0 clients to connect to an \s-1SSL\s0 server it must have the +keyEncipherment bit set if the keyUsage extension is present. This isn't +always valid because some cipher suites use the key for digital signing. +Otherwise it is the same as a normal \s-1SSL\s0 server. +.IP "\fBCommon S/MIME Client Tests\fR" 4 +.IX Item "Common S/MIME Client Tests" +The extended key usage extension must be absent or include the \*(L"email +protection\*(R" \s-1OID.\s0 Netscape certificate type must be absent or should have the +S/MIME bit set. If the S/MIME bit is not set in Netscape certificate type +then the \s-1SSL\s0 client bit is tolerated as an alternative but a warning is shown: +this is because some Verisign certificates don't set the S/MIME bit. +.IP "\fBS/MIME Signing\fR" 4 +.IX Item "S/MIME Signing" +In addition to the common S/MIME client tests the digitalSignature bit or +the nonRepudiation bit must be set if the keyUsage extension is present. +.IP "\fBS/MIME Encryption\fR" 4 +.IX Item "S/MIME Encryption" +In addition to the common S/MIME tests the keyEncipherment bit must be set +if the keyUsage extension is present. +.IP "\fBS/MIME \s-1CA\s0\fR" 4 +.IX Item "S/MIME CA" +The extended key usage extension must be absent or include the \*(L"email +protection\*(R" \s-1OID.\s0 Netscape certificate type must be absent or must have the +S/MIME \s-1CA\s0 bit set: this is used as a work around if the basicConstraints +extension is absent. +.IP "\fB\s-1CRL\s0 Signing\fR" 4 +.IX Item "CRL Signing" +The keyUsage extension must be absent or it must have the \s-1CRL\s0 signing bit +set. +.IP "\fB\s-1CRL\s0 Signing \s-1CA\s0\fR" 4 +.IX Item "CRL Signing CA" +The normal \s-1CA\s0 tests apply. Except in this case the basicConstraints extension +must be present. +.SH "BUGS" +.IX Header "BUGS" +Extensions in certificates are not transferred to certificate requests and +vice versa. +.PP +It is possible to produce invalid certificates or requests by specifying the +wrong private key or using inconsistent options in some cases: these should +be checked. +.PP +There should be options to explicitly set such things as start and end +dates rather than an offset from the current time. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBreq\fR\|(1), \fBca\fR\|(1), \fBgenrsa\fR\|(1), +\&\fBgendsa\fR\|(1), \fBverify\fR\|(1), +\&\fBx509v3_config\fR\|(5) +.SH "HISTORY" +.IX Header "HISTORY" +The hash algorithm used in the \fB\-subject_hash\fR and \fB\-issuer_hash\fR options +before OpenSSL 1.0.0 was based on the deprecated \s-1MD5\s0 algorithm and the encoding +of the distinguished name. In OpenSSL 1.0.0 and later it is based on a +canonical version of the \s-1DN\s0 using \s-1SHA1.\s0 This means that any directories using +the old form must have their links rebuilt using \fBc_rehash\fR or similar. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2020 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ADMISSIONS.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ADMISSIONS.3 new file mode 100644 index 00000000..7024dc09 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ADMISSIONS.3 @@ -0,0 +1,280 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "ADMISSIONS 3" +.TH ADMISSIONS 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +ADMISSIONS, ADMISSIONS_get0_admissionAuthority, ADMISSIONS_get0_namingAuthority, ADMISSIONS_get0_professionInfos, ADMISSIONS_set0_admissionAuthority, ADMISSIONS_set0_namingAuthority, ADMISSIONS_set0_professionInfos, ADMISSION_SYNTAX, ADMISSION_SYNTAX_get0_admissionAuthority, ADMISSION_SYNTAX_get0_contentsOfAdmissions, ADMISSION_SYNTAX_set0_admissionAuthority, ADMISSION_SYNTAX_set0_contentsOfAdmissions, NAMING_AUTHORITY, NAMING_AUTHORITY_get0_authorityId, NAMING_AUTHORITY_get0_authorityURL, NAMING_AUTHORITY_get0_authorityText, NAMING_AUTHORITY_set0_authorityId, NAMING_AUTHORITY_set0_authorityURL, NAMING_AUTHORITY_set0_authorityText, PROFESSION_INFO, PROFESSION_INFOS, PROFESSION_INFO_get0_addProfessionInfo, PROFESSION_INFO_get0_namingAuthority, PROFESSION_INFO_get0_professionItems, PROFESSION_INFO_get0_professionOIDs, PROFESSION_INFO_get0_registrationNumber, PROFESSION_INFO_set0_addProfessionInfo, PROFESSION_INFO_set0_namingAuthority, PROFESSION_INFO_set0_professionItems, PROFESSION_INFO_set0_professionOIDs, PROFESSION_INFO_set0_registrationNumber \&\- Accessors and settors for ADMISSION_SYNTAX +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 5 +\& typedef struct NamingAuthority_st NAMING_AUTHORITY; +\& typedef struct ProfessionInfo_st PROFESSION_INFO; +\& typedef STACK_OF(PROFESSION_INFO) PROFESSION_INFOS; +\& typedef struct Admissions_st ADMISSIONS; +\& typedef struct AdmissionSyntax_st ADMISSION_SYNTAX; +\& +\& const ASN1_OBJECT *NAMING_AUTHORITY_get0_authorityId( +\& const NAMING_AUTHORITY *n); +\& void NAMING_AUTHORITY_set0_authorityId(NAMING_AUTHORITY *n, +\& ASN1_OBJECT* namingAuthorityId); +\& const ASN1_IA5STRING *NAMING_AUTHORITY_get0_authorityURL( +\& const NAMING_AUTHORITY *n); +\& void NAMING_AUTHORITY_set0_authorityURL(NAMING_AUTHORITY *n, +\& ASN1_IA5STRING* namingAuthorityUrl); +\& const ASN1_STRING *NAMING_AUTHORITY_get0_authorityText( +\& const NAMING_AUTHORITY *n); +\& void NAMING_AUTHORITY_set0_authorityText(NAMING_AUTHORITY *n, +\& ASN1_STRING* namingAuthorityText); +\& +\& const GENERAL_NAME *ADMISSION_SYNTAX_get0_admissionAuthority( +\& const ADMISSION_SYNTAX *as); +\& void ADMISSION_SYNTAX_set0_admissionAuthority( +\& ADMISSION_SYNTAX *as, GENERAL_NAME *aa); +\& const STACK_OF(ADMISSIONS) *ADMISSION_SYNTAX_get0_contentsOfAdmissions( +\& const ADMISSION_SYNTAX *as); +\& void ADMISSION_SYNTAX_set0_contentsOfAdmissions( +\& ADMISSION_SYNTAX *as, STACK_OF(ADMISSIONS) *a); +\& +\& const GENERAL_NAME *ADMISSIONS_get0_admissionAuthority(const ADMISSIONS *a); +\& void ADMISSIONS_set0_admissionAuthority(ADMISSIONS *a, GENERAL_NAME *aa); +\& const NAMING_AUTHORITY *ADMISSIONS_get0_namingAuthority(const ADMISSIONS *a); +\& void ADMISSIONS_set0_namingAuthority(ADMISSIONS *a, NAMING_AUTHORITY *na); +\& const PROFESSION_INFOS *ADMISSIONS_get0_professionInfos(const ADMISSIONS *a); +\& void ADMISSIONS_set0_professionInfos(ADMISSIONS *a, PROFESSION_INFOS *pi); +\& +\& const ASN1_OCTET_STRING *PROFESSION_INFO_get0_addProfessionInfo( +\& const PROFESSION_INFO *pi); +\& void PROFESSION_INFO_set0_addProfessionInfo( +\& PROFESSION_INFO *pi, ASN1_OCTET_STRING *aos); +\& const NAMING_AUTHORITY *PROFESSION_INFO_get0_namingAuthority( +\& const PROFESSION_INFO *pi); +\& void PROFESSION_INFO_set0_namingAuthority( +\& PROFESSION_INFO *pi, NAMING_AUTHORITY *na); +\& const STACK_OF(ASN1_STRING) *PROFESSION_INFO_get0_professionItems( +\& const PROFESSION_INFO *pi); +\& void PROFESSION_INFO_set0_professionItems( +\& PROFESSION_INFO *pi, STACK_OF(ASN1_STRING) *as); +\& const STACK_OF(ASN1_OBJECT) *PROFESSION_INFO_get0_professionOIDs( +\& const PROFESSION_INFO *pi); +\& void PROFESSION_INFO_set0_professionOIDs( +\& PROFESSION_INFO *pi, STACK_OF(ASN1_OBJECT) *po); +\& const ASN1_PRINTABLESTRING *PROFESSION_INFO_get0_registrationNumber( +\& const PROFESSION_INFO *pi); +\& void PROFESSION_INFO_set0_registrationNumber( +\& PROFESSION_INFO *pi, ASN1_PRINTABLESTRING *rn); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fB\s-1PROFESSION_INFOS\s0\fR, \fB\s-1ADMISSION_SYNTAX\s0\fR, \fB\s-1ADMISSIONS\s0\fR, and +\&\fB\s-1PROFESSION_INFO\s0\fR types are opaque structures representing the +analogous types defined in the Common \s-1PKI\s0 Specification published +by . +Knowledge of those structures and their semantics is assumed. +.PP +The conventional routines to convert between \s-1DER\s0 and the local format +are described in \fBd2i_X509\fR\|(3). +The conventional routines to allocate and free the types are defined +in \fBX509_dup\fR\|(3). +.PP +The \fB\s-1PROFESSION_INFOS\s0\fR type is a stack of \fB\s-1PROFESSION_INFO\s0\fR; see +\&\s-1\fBDEFINE_STACK_OF\s0\fR\|(3) for details. +.PP +The \fB\s-1NAMING_AUTHORITY\s0\fR type has an authority \s-1ID\s0 and \s-1URL,\s0 and text fields. +The \fBNAMING_AUTHORITY_get0_authorityId()\fR, +\&\fBNAMING_AUTHORITY_get0_get0_authorityURL()\fR, and +\&\fBNAMING_AUTHORITY_get0_get0_authorityText()\fR, functions return pointers +to those values within the object. +The \fBNAMING_AUTHORITY_set0_authorityId()\fR, +\&\fBNAMING_AUTHORITY_set0_get0_authorityURL()\fR, and +\&\fBNAMING_AUTHORITY_set0_get0_authorityText()\fR, +functions free any existing value and set the pointer to the specified value. +.PP +The \fB\s-1ADMISSION_SYNTAX\s0\fR type has an authority name and a stack of +\&\fB\s-1ADMISSION\s0\fR objects. +The \fBADMISSION_SYNTAX_get0_admissionAuthority()\fR +and \fBADMISSION_SYNTAX_get0_contentsOfAdmissions()\fR functions return pointers +to those values within the object. +The +\&\fBADMISSION_SYNTAX_set0_admissionAuthority()\fR and +\&\fBADMISSION_SYNTAX_set0_contentsOfAdmissions()\fR +functions free any existing value and set the pointer to the specified value. +.PP +The \fB\s-1ADMISSION\s0\fR type has an authority name, authority object, and a +stack of \fB\s-1PROFESSION_INFO\s0\fR items. +The \fBADMISSIONS_get0_admissionAuthority()\fR, \fBADMISSIONS_get0_namingAuthority()\fR, +and \fBADMISSIONS_get0_professionInfos()\fR +functions return pointers to those values within the object. +The +\&\fBADMISSIONS_set0_admissionAuthority()\fR, +\&\fBADMISSIONS_set0_namingAuthority()\fR, and +\&\fBADMISSIONS_set0_professionInfos()\fR +functions free any existing value and set the pointer to the specified value. +.PP +The \fB\s-1PROFESSION_INFO\s0\fR type has a name authority, stacks of +profession Items and OIDs, a registration number, and additional +profession info. +The functions \fBPROFESSION_INFO_get0_addProfessionInfo()\fR, +\&\fBPROFESSION_INFO_get0_namingAuthority()\fR, \fBPROFESSION_INFO_get0_professionItems()\fR, +\&\fBPROFESSION_INFO_get0_professionOIDs()\fR, and +\&\fBPROFESSION_INFO_get0_registrationNumber()\fR +functions return pointers to those values within the object. +The +\&\fBPROFESSION_INFO_set0_addProfessionInfo()\fR, +\&\fBPROFESSION_INFO_set0_namingAuthority()\fR, +\&\fBPROFESSION_INFO_set0_professionItems()\fR, +\&\fBPROFESSION_INFO_set0_professionOIDs()\fR, and +\&\fBPROFESSION_INFO_set0_registrationNumber()\fR +functions free any existing value and set the pointer to the specified value. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +Described above. +Note that all of the \fIget0\fR functions return a pointer to the internal data +structure and must not be freed. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBX509_dup\fR\|(3), +\&\fBd2i_X509\fR\|(3), +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ASN1_INTEGER_get_int64.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ASN1_INTEGER_get_int64.3 new file mode 100644 index 00000000..2aa52a5d --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ASN1_INTEGER_get_int64.3 @@ -0,0 +1,260 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "ASN1_INTEGER_GET_INT64 3" +.TH ASN1_INTEGER_GET_INT64 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +ASN1_INTEGER_get_uint64, ASN1_INTEGER_set_uint64, ASN1_INTEGER_get_int64, ASN1_INTEGER_get, ASN1_INTEGER_set_int64, ASN1_INTEGER_set, BN_to_ASN1_INTEGER, ASN1_INTEGER_to_BN, ASN1_ENUMERATED_get_int64, ASN1_ENUMERATED_get, ASN1_ENUMERATED_set_int64, ASN1_ENUMERATED_set, BN_to_ASN1_ENUMERATED, ASN1_ENUMERATED_to_BN \&\- ASN.1 INTEGER and ENUMERATED utilities +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int ASN1_INTEGER_get_int64(int64_t *pr, const ASN1_INTEGER *a); +\& long ASN1_INTEGER_get(const ASN1_INTEGER *a); +\& +\& int ASN1_INTEGER_set_int64(ASN1_INTEGER *a, int64_t r); +\& int ASN1_INTEGER_set(const ASN1_INTEGER *a, long v); +\& +\& int ASN1_INTEGER_get_uint64(uint64_t *pr, const ASN1_INTEGER *a); +\& int ASN1_INTEGER_set_uint64(ASN1_INTEGER *a, uint64_t r); +\& +\& ASN1_INTEGER *BN_to_ASN1_INTEGER(const BIGNUM *bn, ASN1_INTEGER *ai); +\& BIGNUM *ASN1_INTEGER_to_BN(const ASN1_INTEGER *ai, BIGNUM *bn); +\& +\& int ASN1_ENUMERATED_get_int64(int64_t *pr, const ASN1_ENUMERATED *a); +\& long ASN1_ENUMERATED_get(const ASN1_ENUMERATED *a); +\& +\& int ASN1_ENUMERATED_set_int64(ASN1_ENUMERATED *a, int64_t r); +\& int ASN1_ENUMERATED_set(ASN1_ENUMERATED *a, long v); +\& +\& ASN1_ENUMERATED *BN_to_ASN1_ENUMERATED(BIGNUM *bn, ASN1_ENUMERATED *ai); +\& BIGNUM *ASN1_ENUMERATED_to_BN(ASN1_ENUMERATED *ai, BIGNUM *bn); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +These functions convert to and from \fB\s-1ASN1_INTEGER\s0\fR and \fB\s-1ASN1_ENUMERATED\s0\fR +structures. +.PP +\&\fBASN1_INTEGER_get_int64()\fR converts an \fB\s-1ASN1_INTEGER\s0\fR into an \fBint64_t\fR type +If successful it returns 1 and sets \fB*pr\fR to the value of \fBa\fR. If it fails +(due to invalid type or the value being too big to fit into an \fBint64_t\fR type) +it returns 0. +.PP +\&\fBASN1_INTEGER_get_uint64()\fR is similar to \fBASN1_INTEGER_get_int64_t()\fR except it +converts to a \fBuint64_t\fR type and an error is returned if the passed integer +is negative. +.PP +\&\fBASN1_INTEGER_get()\fR also returns the value of \fBa\fR but it returns 0 if \fBa\fR is +\&\s-1NULL\s0 and \-1 on error (which is ambiguous because \-1 is a legitimate value for +an \fB\s-1ASN1_INTEGER\s0\fR). New applications should use \fBASN1_INTEGER_get_int64()\fR +instead. +.PP +\&\fBASN1_INTEGER_set_int64()\fR sets the value of \fB\s-1ASN1_INTEGER\s0\fR \fBa\fR to the +\&\fBint64_t\fR value \fBr\fR. +.PP +\&\fBASN1_INTEGER_set_uint64()\fR sets the value of \fB\s-1ASN1_INTEGER\s0\fR \fBa\fR to the +\&\fBuint64_t\fR value \fBr\fR. +.PP +\&\fBASN1_INTEGER_set()\fR sets the value of \fB\s-1ASN1_INTEGER\s0\fR \fBa\fR to the \fBlong\fR value +\&\fBv\fR. +.PP +\&\fBBN_to_ASN1_INTEGER()\fR converts \fB\s-1BIGNUM\s0\fR \fBbn\fR to an \fB\s-1ASN1_INTEGER\s0\fR. If \fBai\fR +is \s-1NULL\s0 a new \fB\s-1ASN1_INTEGER\s0\fR structure is returned. If \fBai\fR is not \s-1NULL\s0 then +the existing structure will be used instead. +.PP +\&\fBASN1_INTEGER_to_BN()\fR converts \s-1ASN1_INTEGER\s0 \fBai\fR into a \fB\s-1BIGNUM\s0\fR. If \fBbn\fR is +\&\s-1NULL\s0 a new \fB\s-1BIGNUM\s0\fR structure is returned. If \fBbn\fR is not \s-1NULL\s0 then the +existing structure will be used instead. +.PP +\&\fBASN1_ENUMERATED_get_int64()\fR, \fBASN1_ENUMERATED_set_int64()\fR, +\&\fBASN1_ENUMERATED_set()\fR, \fBBN_to_ASN1_ENUMERATED()\fR and \fBASN1_ENUMERATED_to_BN()\fR +behave in an identical way to their \s-1ASN1_INTEGER\s0 counterparts except they +operate on an \fB\s-1ASN1_ENUMERATED\s0\fR value. +.PP +\&\fBASN1_ENUMERATED_get()\fR returns the value of \fBa\fR in a similar way to +\&\fBASN1_INTEGER_get()\fR but it returns \fB0xffffffffL\fR if the value of \fBa\fR will not +fit in a long type. New applications should use \fBASN1_ENUMERATED_get_int64()\fR +instead. +.SH "NOTES" +.IX Header "NOTES" +In general an \fB\s-1ASN1_INTEGER\s0\fR or \fB\s-1ASN1_ENUMERATED\s0\fR type can contain an +integer of almost arbitrary size and so cannot always be represented by a C +\&\fBint64_t\fR 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. +.SH "BUGS" +.IX Header "BUGS" +The ambiguous return values of \fBASN1_INTEGER_get()\fR and \fBASN1_ENUMERATED_get()\fR +mean these functions should be avoided if possible. They are retained for +compatibility. Normally the ambiguous return values are not legitimate +values for the fields they represent. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBASN1_INTEGER_set_int64()\fR, \fBASN1_INTEGER_set()\fR, \fBASN1_ENUMERATED_set_int64()\fR and +\&\fBASN1_ENUMERATED_set()\fR return 1 for success and 0 for failure. They will only +fail if a memory allocation error occurs. +.PP +\&\fBASN1_INTEGER_get_int64()\fR and \fBASN1_ENUMERATED_get_int64()\fR return 1 for success +and 0 for failure. They will fail if the passed type is incorrect (this will +only happen if there is a programming error) or if the value exceeds the range +of an \fBint64_t\fR type. +.PP +\&\fBBN_to_ASN1_INTEGER()\fR and \fBBN_to_ASN1_ENUMERATED()\fR return an \fB\s-1ASN1_INTEGER\s0\fR or +\&\fB\s-1ASN1_ENUMERATED\s0\fR structure respectively or \s-1NULL\s0 if an error occurs. They will +only fail due to a memory allocation error. +.PP +\&\fBASN1_INTEGER_to_BN()\fR and \fBASN1_ENUMERATED_to_BN()\fR return a \fB\s-1BIGNUM\s0\fR structure +of \s-1NULL\s0 if an error occurs. They can fail if the passed type is incorrect +(due to programming error) or due to a memory allocation failure. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_get_error\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +\&\fBASN1_INTEGER_set_int64()\fR, \fBASN1_INTEGER_get_int64()\fR, +\&\fBASN1_ENUMERATED_set_int64()\fR and \fBASN1_ENUMERATED_get_int64()\fR +were added in OpenSSL 1.1.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2015\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ASN1_ITEM_lookup.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ASN1_ITEM_lookup.3 new file mode 100644 index 00000000..26d5d713 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ASN1_ITEM_lookup.3 @@ -0,0 +1,171 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "ASN1_ITEM_LOOKUP 3" +.TH ASN1_ITEM_LOOKUP 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +ASN1_ITEM_lookup, ASN1_ITEM_get \- lookup ASN.1 structures +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& const ASN1_ITEM *ASN1_ITEM_lookup(const char *name); +\& const ASN1_ITEM *ASN1_ITEM_get(size_t i); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBASN1_ITEM_lookup()\fR returns the \fB\s-1ASN1_ITEM\s0 name\fR. +.PP +\&\fBASN1_ITEM_get()\fR returns the \fB\s-1ASN1_ITEM\s0\fR with index \fBi\fR. This function +returns \fB\s-1NULL\s0\fR if the index \fBi\fR is out of range. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBASN1_ITEM_lookup()\fR and \fBASN1_ITEM_get()\fR return a valid \fB\s-1ASN1_ITEM\s0\fR structure +or \fB\s-1NULL\s0\fR if an error occurred. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_get_error\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ASN1_OBJECT_new.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ASN1_OBJECT_new.3 new file mode 100644 index 00000000..bb047dcd --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ASN1_OBJECT_new.3 @@ -0,0 +1,182 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "ASN1_OBJECT_NEW 3" +.TH ASN1_OBJECT_NEW 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +ASN1_OBJECT_new, ASN1_OBJECT_free \- object allocation functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& ASN1_OBJECT *ASN1_OBJECT_new(void); +\& void ASN1_OBJECT_free(ASN1_OBJECT *a); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \s-1ASN1_OBJECT\s0 allocation routines, allocate and free an +\&\s-1ASN1_OBJECT\s0 structure, which represents an \s-1ASN1 OBJECT IDENTIFIER.\s0 +.PP +\&\fBASN1_OBJECT_new()\fR allocates and initializes an \s-1ASN1_OBJECT\s0 structure. +.PP +\&\fBASN1_OBJECT_free()\fR frees up the \fB\s-1ASN1_OBJECT\s0\fR structure \fBa\fR. +If \fBa\fR is \s-1NULL,\s0 nothing is done. +.SH "NOTES" +.IX Header "NOTES" +Although \fBASN1_OBJECT_new()\fR allocates a new \s-1ASN1_OBJECT\s0 structure it +is almost never used in applications. The \s-1ASN1\s0 object utility functions +such as \fBOBJ_nid2obj()\fR are used instead. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +If the allocation fails, \fBASN1_OBJECT_new()\fR returns \fB\s-1NULL\s0\fR and sets an error +code that can be obtained by \fBERR_get_error\fR\|(3). +Otherwise it returns a pointer to the newly allocated structure. +.PP +\&\fBASN1_OBJECT_free()\fR returns no value. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_get_error\fR\|(3), \fBd2i_ASN1_OBJECT\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2002\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ASN1_STRING_TABLE_add.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ASN1_STRING_TABLE_add.3 new file mode 100644 index 00000000..0cc94413 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ASN1_STRING_TABLE_add.3 @@ -0,0 +1,195 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "ASN1_STRING_TABLE_ADD 3" +.TH ASN1_STRING_TABLE_ADD 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +ASN1_STRING_TABLE, ASN1_STRING_TABLE_add, ASN1_STRING_TABLE_get, ASN1_STRING_TABLE_cleanup \- ASN1_STRING_TABLE manipulation functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& typedef struct asn1_string_table_st ASN1_STRING_TABLE; +\& +\& int ASN1_STRING_TABLE_add(int nid, long minsize, long maxsize, +\& unsigned long mask, unsigned long flags); +\& ASN1_STRING_TABLE * ASN1_STRING_TABLE_get(int nid); +\& void ASN1_STRING_TABLE_cleanup(void); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +.SS "Types" +.IX Subsection "Types" +\&\fB\s-1ASN1_STRING_TABLE\s0\fR is a table which holds string information +(basically minimum size, maximum size, type and etc) for a \s-1NID\s0 object. +.SS "Functions" +.IX Subsection "Functions" +\&\fBASN1_STRING_TABLE_add()\fR adds a new \fB\s-1ASN1_STRING_TABLE\s0\fR item into the +local \s-1ASN1\s0 string table based on the \fBnid\fR along with other parameters. +.PP +If the item is already in the table, fields of \fB\s-1ASN1_STRING_TABLE\s0\fR are +updated (depending on the values of those parameters, e.g., \fBminsize\fR +and \fBmaxsize\fR >= 0, \fBmask\fR and \fBflags\fR != 0). If the \fBnid\fR is standard, +a copy of the standard \fB\s-1ASN1_STRING_TABLE\s0\fR is created and updated with +other parameters. +.PP +\&\fBASN1_STRING_TABLE_get()\fR searches for an \fB\s-1ASN1_STRING_TABLE\s0\fR item based +on \fBnid\fR. It will search the local table first, then the standard one. +.PP +\&\fBASN1_STRING_TABLE_cleanup()\fR frees all \fB\s-1ASN1_STRING_TABLE\s0\fR items added +by \fBASN1_STRING_TABLE_add()\fR. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBASN1_STRING_TABLE_add()\fR returns 1 on success, 0 if an error occurred. +.PP +\&\fBASN1_STRING_TABLE_get()\fR returns a valid \fB\s-1ASN1_STRING_TABLE\s0\fR structure +or \fB\s-1NULL\s0\fR if nothing is found. +.PP +\&\fBASN1_STRING_TABLE_cleanup()\fR does not return a value. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_get_error\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ASN1_STRING_length.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ASN1_STRING_length.3 new file mode 100644 index 00000000..8144eae1 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ASN1_STRING_length.3 @@ -0,0 +1,242 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "ASN1_STRING_LENGTH 3" +.TH ASN1_STRING_LENGTH 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +ASN1_STRING_dup, ASN1_STRING_cmp, ASN1_STRING_set, ASN1_STRING_length, ASN1_STRING_type, ASN1_STRING_get0_data, ASN1_STRING_data, ASN1_STRING_to_UTF8 \- ASN1_STRING utility functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int ASN1_STRING_length(ASN1_STRING *x); +\& const unsigned char * ASN1_STRING_get0_data(const ASN1_STRING *x); +\& unsigned char * ASN1_STRING_data(ASN1_STRING *x); +\& +\& ASN1_STRING * ASN1_STRING_dup(ASN1_STRING *a); +\& +\& int ASN1_STRING_cmp(ASN1_STRING *a, ASN1_STRING *b); +\& +\& int ASN1_STRING_set(ASN1_STRING *str, const void *data, int len); +\& +\& int ASN1_STRING_type(const ASN1_STRING *x); +\& +\& int ASN1_STRING_to_UTF8(unsigned char **out, const ASN1_STRING *in); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +These functions allow an \fB\s-1ASN1_STRING\s0\fR structure to be manipulated. +.PP +\&\fBASN1_STRING_length()\fR returns the length of the content of \fBx\fR. +.PP +\&\fBASN1_STRING_get0_data()\fR returns an internal pointer to the data of \fBx\fR. +Since this is an internal pointer it should \fBnot\fR be freed or +modified in any way. +.PP +\&\fBASN1_STRING_data()\fR is similar to \fBASN1_STRING_get0_data()\fR except the +returned value is not constant. This function is deprecated: +applications should use \fBASN1_STRING_get0_data()\fR instead. +.PP +\&\fBASN1_STRING_dup()\fR returns a copy of the structure \fBa\fR. +.PP +\&\fBASN1_STRING_cmp()\fR compares \fBa\fR and \fBb\fR returning 0 if the two +are identical. The string types and content are compared. +.PP +\&\fBASN1_STRING_set()\fR sets the data of string \fBstr\fR to the buffer +\&\fBdata\fR or length \fBlen\fR. The supplied data is copied. If \fBlen\fR +is \-1 then the length is determined by strlen(data). +.PP +\&\fBASN1_STRING_type()\fR returns the type of \fBx\fR, using standard constants +such as \fBV_ASN1_OCTET_STRING\fR. +.PP +\&\fBASN1_STRING_to_UTF8()\fR converts the string \fBin\fR to \s-1UTF8\s0 format, the +converted data is allocated in a buffer in \fB*out\fR. The length of +\&\fBout\fR is returned or a negative error code. The buffer \fB*out\fR +should be freed using \fBOPENSSL_free()\fR. +.SH "NOTES" +.IX Header "NOTES" +Almost all \s-1ASN1\s0 types in OpenSSL are represented as an \fB\s-1ASN1_STRING\s0\fR +structure. Other types such as \fB\s-1ASN1_OCTET_STRING\s0\fR are simply typedef'ed +to \fB\s-1ASN1_STRING\s0\fR and the functions call the \fB\s-1ASN1_STRING\s0\fR equivalents. +\&\fB\s-1ASN1_STRING\s0\fR is also used for some \fB\s-1CHOICE\s0\fR types which consist +entirely of primitive string types such as \fBDirectoryString\fR and +\&\fBTime\fR. +.PP +These functions should \fBnot\fR be used to examine or modify \fB\s-1ASN1_INTEGER\s0\fR +or \fB\s-1ASN1_ENUMERATED\s0\fR types: the relevant \fB\s-1INTEGER\s0\fR or \fB\s-1ENUMERATED\s0\fR +utility functions should be used instead. +.PP +In general it cannot be assumed that the data returned by \fBASN1_STRING_data()\fR +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 \s-1ASCII,\s0 for a BMPString two bytes per +character in big endian format, and for an UTF8String it will be in \s-1UTF8\s0 format. +.PP +Similar care should be take to ensure the data is in the correct format +when calling \fBASN1_STRING_set()\fR. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBASN1_STRING_length()\fR returns the length of the content of \fBx\fR. +.PP +\&\fBASN1_STRING_get0_data()\fR and \fBASN1_STRING_data()\fR return an internal pointer to +the data of \fBx\fR. +.PP +\&\fBASN1_STRING_dup()\fR returns a valid \fB\s-1ASN1_STRING\s0\fR structure or \fB\s-1NULL\s0\fR if an +error occurred. +.PP +\&\fBASN1_STRING_cmp()\fR returns an integer greater than, equal to, or less than 0, +according to whether \fBa\fR is greater than, equal to, or less than \fBb\fR. +.PP +\&\fBASN1_STRING_set()\fR returns 1 on success or 0 on error. +.PP +\&\fBASN1_STRING_type()\fR returns the type of \fBx\fR. +.PP +\&\fBASN1_STRING_to_UTF8()\fR returns the number of bytes in output string \fBout\fR or a +negative value if an error occurred. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_get_error\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2002\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ASN1_STRING_new.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ASN1_STRING_new.3 new file mode 100644 index 00000000..67f58a9d --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ASN1_STRING_new.3 @@ -0,0 +1,182 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "ASN1_STRING_NEW 3" +.TH ASN1_STRING_NEW 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +ASN1_STRING_new, ASN1_STRING_type_new, ASN1_STRING_free \- ASN1_STRING allocation functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& ASN1_STRING * ASN1_STRING_new(void); +\& ASN1_STRING * ASN1_STRING_type_new(int type); +\& void ASN1_STRING_free(ASN1_STRING *a); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBASN1_STRING_new()\fR returns an allocated \fB\s-1ASN1_STRING\s0\fR structure. Its type +is undefined. +.PP +\&\fBASN1_STRING_type_new()\fR returns an allocated \fB\s-1ASN1_STRING\s0\fR structure of +type \fBtype\fR. +.PP +\&\fBASN1_STRING_free()\fR frees up \fBa\fR. +If \fBa\fR is \s-1NULL\s0 nothing is done. +.SH "NOTES" +.IX Header "NOTES" +Other string types call the \fB\s-1ASN1_STRING\s0\fR functions. For example +\&\fBASN1_OCTET_STRING_new()\fR calls ASN1_STRING_type(V_ASN1_OCTET_STRING). +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBASN1_STRING_new()\fR and \fBASN1_STRING_type_new()\fR return a valid +\&\s-1ASN1_STRING\s0 structure or \fB\s-1NULL\s0\fR if an error occurred. +.PP +\&\fBASN1_STRING_free()\fR does not return a value. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_get_error\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2002\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ASN1_STRING_print_ex.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ASN1_STRING_print_ex.3 new file mode 100644 index 00000000..d02ee537 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ASN1_STRING_print_ex.3 @@ -0,0 +1,245 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "ASN1_STRING_PRINT_EX 3" +.TH ASN1_STRING_PRINT_EX 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +ASN1_tag2str, ASN1_STRING_print_ex, ASN1_STRING_print_ex_fp, ASN1_STRING_print \&\- ASN1_STRING output routines +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int ASN1_STRING_print_ex(BIO *out, const ASN1_STRING *str, unsigned long flags); +\& int ASN1_STRING_print_ex_fp(FILE *fp, const ASN1_STRING *str, unsigned long flags); +\& int ASN1_STRING_print(BIO *out, const ASN1_STRING *str); +\& +\& const char *ASN1_tag2str(int tag); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +These functions output an \fB\s-1ASN1_STRING\s0\fR structure. \fB\s-1ASN1_STRING\s0\fR is used to +represent all the \s-1ASN1\s0 string types. +.PP +\&\fBASN1_STRING_print_ex()\fR outputs \fBstr\fR to \fBout\fR, the format is determined by +the options \fBflags\fR. \fBASN1_STRING_print_ex_fp()\fR is identical except it outputs +to \fBfp\fR instead. +.PP +\&\fBASN1_STRING_print()\fR prints \fBstr\fR to \fBout\fR but using a different format to +\&\fBASN1_STRING_print_ex()\fR. It replaces unprintable characters (other than \s-1CR, LF\s0) +with '.'. +.PP +\&\fBASN1_tag2str()\fR returns a human-readable name of the specified \s-1ASN.1\s0 \fBtag\fR. +.SH "NOTES" +.IX Header "NOTES" +\&\fBASN1_STRING_print()\fR is a deprecated function which should be avoided; use +\&\fBASN1_STRING_print_ex()\fR instead. +.PP +Although there are a large number of options frequently \fB\s-1ASN1_STRFLGS_RFC2253\s0\fR is +suitable, or on \s-1UTF8\s0 terminals \fB\s-1ASN1_STRFLGS_RFC2253 &\s0 ~ASN1_STRFLGS_ESC_MSB\fR. +.PP +The complete set of supported options for \fBflags\fR is listed below. +.PP +Various characters can be escaped. If \fB\s-1ASN1_STRFLGS_ESC_2253\s0\fR is set the characters +determined by \s-1RFC2253\s0 are escaped. If \fB\s-1ASN1_STRFLGS_ESC_CTRL\s0\fR is set control +characters are escaped. If \fB\s-1ASN1_STRFLGS_ESC_MSB\s0\fR is set characters with the +\&\s-1MSB\s0 set are escaped: this option should \fBnot\fR be used if the terminal correctly +interprets \s-1UTF8\s0 sequences. +.PP +Escaping takes several forms. +.PP +If the character being escaped is a 16 bit character then the form \*(L"\eUXXXX\*(R" is used +using exactly four characters for the hex representation. If it is 32 bits then +\&\*(L"\eWXXXXXXXX\*(R" is used using eight characters of its hex representation. These forms +will only be used if \s-1UTF8\s0 conversion is not set (see below). +.PP +Printable characters are normally escaped using the backslash '\e' character. If +\&\fB\s-1ASN1_STRFLGS_ESC_QUOTE\s0\fR is set then the whole string is instead surrounded by +double quote characters: this is arguably more readable than the backslash +notation. Other characters use the \*(L"\eXX\*(R" using exactly two characters of the hex +representation. +.PP +If \fB\s-1ASN1_STRFLGS_UTF8_CONVERT\s0\fR is set then characters are converted to \s-1UTF8\s0 +format first. If the terminal supports the display of \s-1UTF8\s0 sequences then this +option will correctly display multi byte characters. +.PP +If \fB\s-1ASN1_STRFLGS_IGNORE_TYPE\s0\fR is set then the string type is not interpreted at +all: everything is assumed to be one byte per character. This is primarily for +debugging purposes and can result in confusing output in multi character strings. +.PP +If \fB\s-1ASN1_STRFLGS_SHOW_TYPE\s0\fR is set then the string type itself is printed out +before its value (for example \*(L"\s-1BMPSTRING\*(R"\s0), this actually uses \fBASN1_tag2str()\fR. +.PP +The content of a string instead of being interpreted can be \*(L"dumped\*(R": this just +outputs the value of the string using the form #XXXX using hex format for each +octet. +.PP +If \fB\s-1ASN1_STRFLGS_DUMP_ALL\s0\fR is set then any type is dumped. +.PP +Normally non character string types (such as \s-1OCTET STRING\s0) are assumed to be +one byte per character, if \fB\s-1ASN1_STRFLGS_DUMP_UNKNOWN\s0\fR is set then they will +be dumped instead. +.PP +When a type is dumped normally just the content octets are printed, if +\&\fB\s-1ASN1_STRFLGS_DUMP_DER\s0\fR is set then the complete encoding is dumped +instead (including tag and length octets). +.PP +\&\fB\s-1ASN1_STRFLGS_RFC2253\s0\fR includes all the flags required by \s-1RFC2253.\s0 It is +equivalent to: + \s-1ASN1_STRFLGS_ESC_2253\s0 | \s-1ASN1_STRFLGS_ESC_CTRL\s0 | \s-1ASN1_STRFLGS_ESC_MSB\s0 | + \s-1ASN1_STRFLGS_UTF8_CONVERT\s0 | \s-1ASN1_STRFLGS_DUMP_UNKNOWN ASN1_STRFLGS_DUMP_DER\s0 +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBASN1_STRING_print_ex()\fR and \fBASN1_STRING_print_ex_fp()\fR return the number of +characters written or \-1 if an error occurred. +.PP +\&\fBASN1_STRING_print()\fR returns 1 on success or 0 on error. +.PP +\&\fBASN1_tag2str()\fR returns a human-readable name of the specified \s-1ASN.1\s0 \fBtag\fR. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBX509_NAME_print_ex\fR\|(3), +\&\fBASN1_tag2str\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2002\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ASN1_TIME_set.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ASN1_TIME_set.3 new file mode 100644 index 00000000..ef59456f --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ASN1_TIME_set.3 @@ -0,0 +1,380 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "ASN1_TIME_SET 3" +.TH ASN1_TIME_SET 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +ASN1_TIME_set, ASN1_UTCTIME_set, ASN1_GENERALIZEDTIME_set, ASN1_TIME_adj, ASN1_UTCTIME_adj, ASN1_GENERALIZEDTIME_adj, ASN1_TIME_check, ASN1_UTCTIME_check, ASN1_GENERALIZEDTIME_check, ASN1_TIME_set_string, ASN1_UTCTIME_set_string, ASN1_GENERALIZEDTIME_set_string, ASN1_TIME_set_string_X509, ASN1_TIME_normalize, ASN1_TIME_to_tm, ASN1_TIME_print, ASN1_UTCTIME_print, ASN1_GENERALIZEDTIME_print, ASN1_TIME_diff, ASN1_TIME_cmp_time_t, ASN1_UTCTIME_cmp_time_t, ASN1_TIME_compare, ASN1_TIME_to_generalizedtime \- ASN.1 Time functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 4 +\& ASN1_TIME *ASN1_TIME_set(ASN1_TIME *s, time_t t); +\& ASN1_UTCTIME *ASN1_UTCTIME_set(ASN1_UTCTIME *s, time_t t); +\& ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_set(ASN1_GENERALIZEDTIME *s, +\& time_t t); +\& +\& ASN1_TIME *ASN1_TIME_adj(ASN1_TIME *s, time_t t, int offset_day, +\& long offset_sec); +\& ASN1_UTCTIME *ASN1_UTCTIME_adj(ASN1_UTCTIME *s, time_t t, +\& int offset_day, long offset_sec); +\& ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_adj(ASN1_GENERALIZEDTIME *s, +\& time_t t, int offset_day, +\& long offset_sec); +\& +\& int ASN1_TIME_set_string(ASN1_TIME *s, const char *str); +\& int ASN1_TIME_set_string_X509(ASN1_TIME *s, const char *str); +\& int ASN1_UTCTIME_set_string(ASN1_UTCTIME *s, const char *str); +\& int ASN1_GENERALIZEDTIME_set_string(ASN1_GENERALIZEDTIME *s, +\& const char *str); +\& +\& int ASN1_TIME_normalize(ASN1_TIME *s); +\& +\& int ASN1_TIME_check(const ASN1_TIME *t); +\& int ASN1_UTCTIME_check(const ASN1_UTCTIME *t); +\& int ASN1_GENERALIZEDTIME_check(const ASN1_GENERALIZEDTIME *t); +\& +\& int ASN1_TIME_print(BIO *b, const ASN1_TIME *s); +\& int ASN1_UTCTIME_print(BIO *b, const ASN1_UTCTIME *s); +\& int ASN1_GENERALIZEDTIME_print(BIO *b, const ASN1_GENERALIZEDTIME *s); +\& +\& int ASN1_TIME_to_tm(const ASN1_TIME *s, struct tm *tm); +\& int ASN1_TIME_diff(int *pday, int *psec, const ASN1_TIME *from, +\& const ASN1_TIME *to); +\& +\& int ASN1_TIME_cmp_time_t(const ASN1_TIME *s, time_t t); +\& int ASN1_UTCTIME_cmp_time_t(const ASN1_UTCTIME *s, time_t t); +\& +\& int ASN1_TIME_compare(const ASN1_TIME *a, const ASN1_TIME *b); +\& +\& ASN1_GENERALIZEDTIME *ASN1_TIME_to_generalizedtime(ASN1_TIME *t, +\& ASN1_GENERALIZEDTIME **out); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fBASN1_TIME_set()\fR, \fBASN1_UTCTIME_set()\fR and \fBASN1_GENERALIZEDTIME_set()\fR +functions set the structure \fBs\fR to the time represented by the time_t +value \fBt\fR. If \fBs\fR is \s-1NULL\s0 a new time structure is allocated and returned. +.PP +The \fBASN1_TIME_adj()\fR, \fBASN1_UTCTIME_adj()\fR and \fBASN1_GENERALIZEDTIME_adj()\fR +functions set the time structure \fBs\fR to the time represented +by the time \fBoffset_day\fR and \fBoffset_sec\fR after the time_t value \fBt\fR. +The values of \fBoffset_day\fR or \fBoffset_sec\fR can be negative to set a +time before \fBt\fR. The \fBoffset_sec\fR value can also exceed the number of +seconds in a day. If \fBs\fR is \s-1NULL\s0 a new structure is allocated +and returned. +.PP +The \fBASN1_TIME_set_string()\fR, \fBASN1_UTCTIME_set_string()\fR and +\&\fBASN1_GENERALIZEDTIME_set_string()\fR functions set the time structure \fBs\fR +to the time represented by string \fBstr\fR which must be in appropriate \s-1ASN.1\s0 +time format (for example \s-1YYMMDDHHMMSSZ\s0 or \s-1YYYYMMDDHHMMSSZ\s0). If \fBs\fR is \s-1NULL\s0 +this function performs a format check on \fBstr\fR only. The string \fBstr\fR +is copied into \fBs\fR. +.PP +\&\fBASN1_TIME_set_string_X509()\fR sets \s-1ASN1_TIME\s0 structure \fBs\fR to the time +represented by string \fBstr\fR which must be in appropriate time format +that \s-1RFC 5280\s0 requires, which means it only allows \s-1YYMMDDHHMMSSZ\s0 and +\&\s-1YYYYMMDDHHMMSSZ\s0 (leap second is rejected), all other \s-1ASN.1\s0 time format +are not allowed. If \fBs\fR is \s-1NULL\s0 this function performs a format check +on \fBstr\fR only. +.PP +The \fBASN1_TIME_normalize()\fR function converts an \s-1ASN1_GENERALIZEDTIME\s0 or +\&\s-1ASN1_UTCTIME\s0 into a time value that can be used in a certificate. It +should be used after the \fBASN1_TIME_set_string()\fR functions and before +\&\fBASN1_TIME_print()\fR functions to get consistent (i.e. \s-1GMT\s0) results. +.PP +The \fBASN1_TIME_check()\fR, \fBASN1_UTCTIME_check()\fR and \fBASN1_GENERALIZEDTIME_check()\fR +functions check the syntax of the time structure \fBs\fR. +.PP +The \fBASN1_TIME_print()\fR, \fBASN1_UTCTIME_print()\fR and \fBASN1_GENERALIZEDTIME_print()\fR +functions print the time structure \fBs\fR to \s-1BIO\s0 \fBb\fR in human readable +format. It will be of the format \s-1MMM DD HH:MM:SS YYYY\s0 [\s-1GMT\s0], for example +\&\*(L"Feb 3 00:55:52 2015 \s-1GMT\*(R"\s0 it does not include a newline. If the time +structure has invalid format it prints out \*(L"Bad time value\*(R" and returns +an error. The output for generalized time may include a fractional part +following the second. +.PP +\&\fBASN1_TIME_to_tm()\fR converts the time \fBs\fR to the standard \fBtm\fR structure. +If \fBs\fR is \s-1NULL,\s0 then the current time is converted. The output time is \s-1GMT.\s0 +The \fBtm_sec\fR, \fBtm_min\fR, \fBtm_hour\fR, \fBtm_mday\fR, \fBtm_wday\fR, \fBtm_yday\fR, +\&\fBtm_mon\fR and \fBtm_year\fR fields of \fBtm\fR structure are set to proper values, +whereas all other fields are set to 0. If \fBtm\fR is \s-1NULL\s0 this function performs +a format check on \fBs\fR only. If \fBs\fR is in Generalized format with fractional +seconds, e.g. \s-1YYYYMMDDHHMMSS.SSSZ,\s0 the fractional seconds will be lost while +converting \fBs\fR to \fBtm\fR structure. +.PP +\&\fBASN1_TIME_diff()\fR sets \fB*pday\fR and \fB*psec\fR to the time difference between +\&\fBfrom\fR and \fBto\fR. If \fBto\fR represents a time later than \fBfrom\fR then +one or both (depending on the time difference) of \fB*pday\fR and \fB*psec\fR +will be positive. If \fBto\fR represents a time earlier than \fBfrom\fR then +one or both of \fB*pday\fR and \fB*psec\fR will be negative. If \fBto\fR and \fBfrom\fR +represent the same time then \fB*pday\fR and \fB*psec\fR will both be zero. +If both \fB*pday\fR and \fB*psec\fR are non-zero they will always have the same +sign. The value of \fB*psec\fR will always be less than the number of seconds +in a day. If \fBfrom\fR or \fBto\fR is \s-1NULL\s0 the current time is used. +.PP +The \fBASN1_TIME_cmp_time_t()\fR and \fBASN1_UTCTIME_cmp_time_t()\fR functions compare +the two times represented by the time structure \fBs\fR and the time_t \fBt\fR. +.PP +The \fBASN1_TIME_compare()\fR function compares the two times represented by the +time structures \fBa\fR and \fBb\fR. +.PP +The \fBASN1_TIME_to_generalizedtime()\fR function converts an \s-1ASN1_TIME\s0 to an +\&\s-1ASN1_GENERALIZEDTIME,\s0 regardless of year. If either \fBout\fR or +\&\fB*out\fR are \s-1NULL,\s0 then a new object is allocated and must be freed after use. +.SH "NOTES" +.IX Header "NOTES" +The \s-1ASN1_TIME\s0 structure corresponds to the \s-1ASN.1\s0 structure \fBTime\fR +defined in \s-1RFC5280\s0 et al. The time setting functions obey the rules outlined +in \s-1RFC5280:\s0 if the date can be represented by UTCTime it is used, else +GeneralizedTime is used. +.PP +The \s-1ASN1_TIME, ASN1_UTCTIME\s0 and \s-1ASN1_GENERALIZEDTIME\s0 structures are represented +as an \s-1ASN1_STRING\s0 internally and can be freed up using \fBASN1_STRING_free()\fR. +.PP +The \s-1ASN1_TIME\s0 structure can represent years from 0000 to 9999 but no attempt +is made to correct ancient calendar changes (for example from Julian to +Gregorian calendars). +.PP +\&\s-1ASN1_UTCTIME\s0 is limited to a year range of 1950 through 2049. +.PP +Some applications add offset times directly to a time_t value and pass the +results to \fBASN1_TIME_set()\fR (or equivalent). This can cause problems as the +time_t value can overflow on some systems resulting in unexpected results. +New applications should use \fBASN1_TIME_adj()\fR instead and pass the offset value +in the \fBoffset_sec\fR and \fBoffset_day\fR parameters instead of directly +manipulating a time_t value. +.PP +\&\fBASN1_TIME_adj()\fR may change the type from \s-1ASN1_GENERALIZEDTIME\s0 to \s-1ASN1_UTCTIME,\s0 +or vice versa, based on the resulting year. The \fBASN1_GENERALIZEDTIME_adj()\fR and +\&\fBASN1_UTCTIME_adj()\fR functions will not modify the type of the return structure. +.PP +It is recommended that functions starting with \s-1ASN1_TIME\s0 be used instead of +those starting with \s-1ASN1_UTCTIME\s0 or \s-1ASN1_GENERALIZEDTIME.\s0 The functions +starting with \s-1ASN1_UTCTIME\s0 and \s-1ASN1_GENERALIZEDTIME\s0 act only on that specific +time format. The functions starting with \s-1ASN1_TIME\s0 will operate on either +format. +.SH "BUGS" +.IX Header "BUGS" +\&\fBASN1_TIME_print()\fR, \fBASN1_UTCTIME_print()\fR and \fBASN1_GENERALIZEDTIME_print()\fR +do not print out the time zone: it either prints out \*(L"\s-1GMT\*(R"\s0 or nothing. But all +certificates complying with \s-1RFC5280\s0 et al use \s-1GMT\s0 anyway. +.PP +Use the \fBASN1_TIME_normalize()\fR function to normalize the time value before +printing to get \s-1GMT\s0 results. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBASN1_TIME_set()\fR, \fBASN1_UTCTIME_set()\fR, \fBASN1_GENERALIZEDTIME_set()\fR, \fBASN1_TIME_adj()\fR, +ASN1_UTCTIME_adj and ASN1_GENERALIZEDTIME_set return a pointer to a time structure +or \s-1NULL\s0 if an error occurred. +.PP +\&\fBASN1_TIME_set_string()\fR, \fBASN1_UTCTIME_set_string()\fR, \fBASN1_GENERALIZEDTIME_set_string()\fR +\&\fBASN1_TIME_set_string_X509()\fR return 1 if the time value is successfully set and 0 otherwise. +.PP +\&\fBASN1_TIME_normalize()\fR returns 1 on success, and 0 on error. +.PP +\&\fBASN1_TIME_check()\fR, ASN1_UTCTIME_check and \fBASN1_GENERALIZEDTIME_check()\fR return 1 +if the structure is syntactically correct and 0 otherwise. +.PP +\&\fBASN1_TIME_print()\fR, \fBASN1_UTCTIME_print()\fR and \fBASN1_GENERALIZEDTIME_print()\fR return 1 +if the time is successfully printed out and 0 if an error occurred (I/O error or +invalid time format). +.PP +\&\fBASN1_TIME_to_tm()\fR returns 1 if the time is successfully parsed and 0 if an +error occurred (invalid time format). +.PP +\&\fBASN1_TIME_diff()\fR returns 1 for success and 0 for failure. It can fail if the +passed-in time structure has invalid syntax, for example. +.PP +\&\fBASN1_TIME_cmp_time_t()\fR and \fBASN1_UTCTIME_cmp_time_t()\fR return \-1 if \fBs\fR is +before \fBt\fR, 0 if \fBs\fR equals \fBt\fR, or 1 if \fBs\fR is after \fBt\fR. \-2 is returned +on error. +.PP +\&\fBASN1_TIME_compare()\fR returns \-1 if \fBa\fR is before \fBb\fR, 0 if \fBa\fR equals \fBb\fR, or 1 if \fBa\fR is after \fBb\fR. \-2 is returned on error. +.PP +\&\fBASN1_TIME_to_generalizedtime()\fR returns a pointer to +the appropriate time structure on success or \s-1NULL\s0 if an error occurred. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +Set a time structure to one hour after the current time and print it out: +.PP +.Vb 2 +\& #include +\& #include +\& +\& ASN1_TIME *tm; +\& time_t t; +\& BIO *b; +\& +\& t = time(NULL); +\& tm = ASN1_TIME_adj(NULL, t, 0, 60 * 60); +\& b = BIO_new_fp(stdout, BIO_NOCLOSE); +\& ASN1_TIME_print(b, tm); +\& ASN1_STRING_free(tm); +\& BIO_free(b); +.Ve +.PP +Determine if one time is later or sooner than the current time: +.PP +.Vb 1 +\& int day, sec; +\& +\& if (!ASN1_TIME_diff(&day, &sec, NULL, to)) +\& /* Invalid time format */ +\& +\& if (day > 0 || sec > 0) +\& printf("Later\en"); +\& else if (day < 0 || sec < 0) +\& printf("Sooner\en"); +\& else +\& printf("Same\en"); +.Ve +.SH "HISTORY" +.IX Header "HISTORY" +The \fBASN1_TIME_to_tm()\fR function was added in OpenSSL 1.1.1. +The \fBASN1_TIME_set_string_X509()\fR function was added in OpenSSL 1.1.1. +The \fBASN1_TIME_normalize()\fR function was added in OpenSSL 1.1.1. +The \fBASN1_TIME_cmp_time_t()\fR function was added in OpenSSL 1.1.1. +The \fBASN1_TIME_compare()\fR function was added in OpenSSL 1.1.1. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2015\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ASN1_TYPE_get.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ASN1_TYPE_get.3 new file mode 100644 index 00000000..7e4d4f53 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ASN1_TYPE_get.3 @@ -0,0 +1,231 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "ASN1_TYPE_GET 3" +.TH ASN1_TYPE_GET 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +ASN1_TYPE_get, ASN1_TYPE_set, ASN1_TYPE_set1, ASN1_TYPE_cmp, ASN1_TYPE_unpack_sequence, ASN1_TYPE_pack_sequence \- ASN1_TYPE utility functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int ASN1_TYPE_get(const ASN1_TYPE *a); +\& void ASN1_TYPE_set(ASN1_TYPE *a, int type, void *value); +\& int ASN1_TYPE_set1(ASN1_TYPE *a, int type, const void *value); +\& int ASN1_TYPE_cmp(const ASN1_TYPE *a, const ASN1_TYPE *b); +\& +\& void *ASN1_TYPE_unpack_sequence(const ASN1_ITEM *it, const ASN1_TYPE *t); +\& ASN1_TYPE *ASN1_TYPE_pack_sequence(const ASN1_ITEM *it, void *s, +\& ASN1_TYPE **t); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +These functions allow an \s-1ASN1_TYPE\s0 structure to be manipulated. The +\&\s-1ASN1_TYPE\s0 structure can contain any \s-1ASN.1\s0 type or constructed type +such as a \s-1SEQUENCE:\s0 it is effectively equivalent to the \s-1ASN.1 ANY\s0 type. +.PP +\&\fBASN1_TYPE_get()\fR returns the type of \fBa\fR. +.PP +\&\fBASN1_TYPE_set()\fR sets the value of \fBa\fR to \fBtype\fR and \fBvalue\fR. This +function uses the pointer \fBvalue\fR internally so it must \fBnot\fR be freed +up after the call. +.PP +\&\fBASN1_TYPE_set1()\fR sets the value of \fBa\fR to \fBtype\fR a copy of \fBvalue\fR. +.PP +\&\fBASN1_TYPE_cmp()\fR compares \s-1ASN.1\s0 types \fBa\fR and \fBb\fR and returns 0 if +they are identical and non-zero otherwise. +.PP +\&\fBASN1_TYPE_unpack_sequence()\fR attempts to parse the \s-1SEQUENCE\s0 present in +\&\fBt\fR using the \s-1ASN.1\s0 structure \fBit\fR. If successful it returns a pointer +to the \s-1ASN.1\s0 structure corresponding to \fBit\fR which must be freed by the +caller. If it fails it return \s-1NULL.\s0 +.PP +\&\fBASN1_TYPE_pack_sequence()\fR attempts to encode the \s-1ASN.1\s0 structure \fBs\fR +corresponding to \fBit\fR into an \s-1ASN1_TYPE.\s0 If successful the encoded +\&\s-1ASN1_TYPE\s0 is returned. If \fBt\fR and \fB*t\fR are not \s-1NULL\s0 the encoded type +is written to \fBt\fR overwriting any existing data. If \fBt\fR is not \s-1NULL\s0 +but \fB*t\fR is \s-1NULL\s0 the returned \s-1ASN1_TYPE\s0 is written to \fB*t\fR. +.SH "NOTES" +.IX Header "NOTES" +The type and meaning of the \fBvalue\fR parameter for \fBASN1_TYPE_set()\fR and +\&\fBASN1_TYPE_set1()\fR is determined by the \fBtype\fR parameter. +If \fBtype\fR is V_ASN1_NULL \fBvalue\fR is ignored. If \fBtype\fR is V_ASN1_BOOLEAN +then the boolean is set to \s-1TRUE\s0 if \fBvalue\fR is not \s-1NULL.\s0 If \fBtype\fR is +V_ASN1_OBJECT then value is an \s-1ASN1_OBJECT\s0 structure. Otherwise \fBtype\fR +is and \s-1ASN1_STRING\s0 structure. If \fBtype\fR corresponds to a primitive type +(or a string type) then the contents of the \s-1ASN1_STRING\s0 contain the content +octets of the type. If \fBtype\fR corresponds to a constructed type or +a tagged type (V_ASN1_SEQUENCE, V_ASN1_SET or V_ASN1_OTHER) then the +\&\s-1ASN1_STRING\s0 contains the entire \s-1ASN.1\s0 encoding verbatim (including tag and +length octets). +.PP +\&\fBASN1_TYPE_cmp()\fR may not return zero if two types are equivalent but have +different encodings. For example the single content octet of the boolean \s-1TRUE\s0 +value under \s-1BER\s0 can have any non-zero encoding but \fBASN1_TYPE_cmp()\fR will +only return zero if the values are the same. +.PP +If either or both of the parameters passed to \fBASN1_TYPE_cmp()\fR is \s-1NULL\s0 the +return value is non-zero. Technically if both parameters are \s-1NULL\s0 the two +types could be absent \s-1OPTIONAL\s0 fields and so should match, however passing +\&\s-1NULL\s0 values could also indicate a programming error (for example an +unparsable type which returns \s-1NULL\s0) for types which do \fBnot\fR match. So +applications should handle the case of two absent values separately. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBASN1_TYPE_get()\fR returns the type of the \s-1ASN1_TYPE\s0 argument. +.PP +\&\fBASN1_TYPE_set()\fR does not return a value. +.PP +\&\fBASN1_TYPE_set1()\fR returns 1 for success and 0 for failure. +.PP +\&\fBASN1_TYPE_cmp()\fR returns 0 if the types are identical and non-zero otherwise. +.PP +\&\fBASN1_TYPE_unpack_sequence()\fR returns a pointer to an \s-1ASN.1\s0 structure or +\&\s-1NULL\s0 on failure. +.PP +\&\fBASN1_TYPE_pack_sequence()\fR return an \s-1ASN1_TYPE\s0 structure if it succeeds or +\&\s-1NULL\s0 on failure. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2015\-2020 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ASN1_generate_nconf.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ASN1_generate_nconf.3 new file mode 100644 index 00000000..6151bdf1 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ASN1_generate_nconf.3 @@ -0,0 +1,381 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "ASN1_GENERATE_NCONF 3" +.TH ASN1_GENERATE_NCONF 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +ASN1_generate_nconf, ASN1_generate_v3 \- ASN1 generation functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& ASN1_TYPE *ASN1_generate_nconf(const char *str, CONF *nconf); +\& ASN1_TYPE *ASN1_generate_v3(const char *str, X509V3_CTX *cnf); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +These functions generate the \s-1ASN1\s0 encoding of a string +in an \fB\s-1ASN1_TYPE\s0\fR structure. +.PP +\&\fBstr\fR contains the string to encode \fBnconf\fR or \fBcnf\fR contains +the optional configuration information where additional strings +will be read from. \fBnconf\fR will typically come from a config +file whereas \fBcnf\fR is obtained from an \fBX509V3_CTX\fR structure +which will typically be used by X509 v3 certificate extension +functions. \fBcnf\fR or \fBnconf\fR can be set to \fB\s-1NULL\s0\fR if no additional +configuration will be used. +.SH "GENERATION STRING FORMAT" +.IX Header "GENERATION STRING FORMAT" +The actual data encoded is determined by the string \fBstr\fR and +the configuration information. The general format of the string +is: +.IP "\fB[modifier,]type[:value]\fR" 4 +.IX Item "[modifier,]type[:value]" +.PP +That is zero or more comma separated modifiers followed by a type +followed by an optional colon and a value. The formats of \fBtype\fR, +\&\fBvalue\fR and \fBmodifier\fR are explained below. +.SS "Supported Types" +.IX Subsection "Supported Types" +The supported types are listed below. Unless otherwise specified +only the \fB\s-1ASCII\s0\fR format is permissible. +.IP "\fB\s-1BOOLEAN\s0\fR, \fB\s-1BOOL\s0\fR" 4 +.IX Item "BOOLEAN, BOOL" +This encodes a boolean type. The \fBvalue\fR string is mandatory and +should be \fB\s-1TRUE\s0\fR or \fB\s-1FALSE\s0\fR. Additionally \fB\s-1TRUE\s0\fR, \fBtrue\fR, \fBY\fR, +\&\fBy\fR, \fB\s-1YES\s0\fR, \fByes\fR, \fB\s-1FALSE\s0\fR, \fBfalse\fR, \fBN\fR, \fBn\fR, \fB\s-1NO\s0\fR and \fBno\fR +are acceptable. +.IP "\fB\s-1NULL\s0\fR" 4 +.IX Item "NULL" +Encode the \fB\s-1NULL\s0\fR type, the \fBvalue\fR string must not be present. +.IP "\fB\s-1INTEGER\s0\fR, \fB\s-1INT\s0\fR" 4 +.IX Item "INTEGER, INT" +Encodes an \s-1ASN1\s0 \fB\s-1INTEGER\s0\fR type. The \fBvalue\fR string represents +the value of the integer, it can be prefaced by a minus sign and +is normally interpreted as a decimal value unless the prefix \fB0x\fR +is included. +.IP "\fB\s-1ENUMERATED\s0\fR, \fB\s-1ENUM\s0\fR" 4 +.IX Item "ENUMERATED, ENUM" +Encodes the \s-1ASN1\s0 \fB\s-1ENUMERATED\s0\fR type, it is otherwise identical to +\&\fB\s-1INTEGER\s0\fR. +.IP "\fB\s-1OBJECT\s0\fR, \fB\s-1OID\s0\fR" 4 +.IX Item "OBJECT, OID" +Encodes an \s-1ASN1\s0 \fB\s-1OBJECT IDENTIFIER\s0\fR, the \fBvalue\fR string can be +a short name, a long name or numerical format. +.IP "\fB\s-1UTCTIME\s0\fR, \fB\s-1UTC\s0\fR" 4 +.IX Item "UTCTIME, UTC" +Encodes an \s-1ASN1\s0 \fBUTCTime\fR structure, the value should be in +the format \fB\s-1YYMMDDHHMMSSZ\s0\fR. +.IP "\fB\s-1GENERALIZEDTIME\s0\fR, \fB\s-1GENTIME\s0\fR" 4 +.IX Item "GENERALIZEDTIME, GENTIME" +Encodes an \s-1ASN1\s0 \fBGeneralizedTime\fR structure, the value should be in +the format \fB\s-1YYYYMMDDHHMMSSZ\s0\fR. +.IP "\fB\s-1OCTETSTRING\s0\fR, \fB\s-1OCT\s0\fR" 4 +.IX Item "OCTETSTRING, OCT" +Encodes an \s-1ASN1\s0 \fB\s-1OCTET STRING\s0\fR. \fBvalue\fR represents the contents +of this structure, the format strings \fB\s-1ASCII\s0\fR and \fB\s-1HEX\s0\fR can be +used to specify the format of \fBvalue\fR. +.IP "\fB\s-1BITSTRING\s0\fR, \fB\s-1BITSTR\s0\fR" 4 +.IX Item "BITSTRING, BITSTR" +Encodes an \s-1ASN1\s0 \fB\s-1BIT STRING\s0\fR. \fBvalue\fR represents the contents +of this structure, the format strings \fB\s-1ASCII\s0\fR, \fB\s-1HEX\s0\fR and \fB\s-1BITLIST\s0\fR +can be used to specify the format of \fBvalue\fR. +.Sp +If the format is anything other than \fB\s-1BITLIST\s0\fR the number of unused +bits is set to zero. +.IP "\fB\s-1UNIVERSALSTRING\s0\fR, \fB\s-1UNIV\s0\fR, \fB\s-1IA5\s0\fR, \fB\s-1IA5STRING\s0\fR, \fB\s-1UTF8\s0\fR, \fBUTF8String\fR, \fB\s-1BMP\s0\fR, \fB\s-1BMPSTRING\s0\fR, \fB\s-1VISIBLESTRING\s0\fR, \fB\s-1VISIBLE\s0\fR, \fB\s-1PRINTABLESTRING\s0\fR, \fB\s-1PRINTABLE\s0\fR, \fBT61\fR, \fBT61STRING\fR, \fB\s-1TELETEXSTRING\s0\fR, \fBGeneralString\fR, \fB\s-1NUMERICSTRING\s0\fR, \fB\s-1NUMERIC\s0\fR" 4 +.IX Item "UNIVERSALSTRING, UNIV, IA5, IA5STRING, UTF8, UTF8String, BMP, BMPSTRING, VISIBLESTRING, VISIBLE, PRINTABLESTRING, PRINTABLE, T61, T61STRING, TELETEXSTRING, GeneralString, NUMERICSTRING, NUMERIC" +These encode the corresponding string types. \fBvalue\fR represents the +contents of this structure. The format can be \fB\s-1ASCII\s0\fR or \fB\s-1UTF8\s0\fR. +.IP "\fB\s-1SEQUENCE\s0\fR, \fB\s-1SEQ\s0\fR, \fB\s-1SET\s0\fR" 4 +.IX Item "SEQUENCE, SEQ, SET" +Formats the result as an \s-1ASN1\s0 \fB\s-1SEQUENCE\s0\fR or \fB\s-1SET\s0\fR type. \fBvalue\fR +should be a section name which will contain the contents. The +field names in the section are ignored and the values are in the +generated string format. If \fBvalue\fR is absent then an empty \s-1SEQUENCE\s0 +will be encoded. +.SS "Modifiers" +.IX Subsection "Modifiers" +Modifiers affect the following structure, they can be used to +add \s-1EXPLICIT\s0 or \s-1IMPLICIT\s0 tagging, add wrappers or to change +the string format of the final type and value. The supported +formats are documented below. +.IP "\fB\s-1EXPLICIT\s0\fR, \fB\s-1EXP\s0\fR" 4 +.IX Item "EXPLICIT, EXP" +Add an explicit tag to the following structure. This string +should be followed by a colon and the tag value to use as a +decimal value. +.Sp +By following the number with \fBU\fR, \fBA\fR, \fBP\fR or \fBC\fR \s-1UNIVERSAL, +APPLICATION, PRIVATE\s0 or \s-1CONTEXT SPECIFIC\s0 tagging can be used, +the default is \s-1CONTEXT SPECIFIC.\s0 +.IP "\fB\s-1IMPLICIT\s0\fR, \fB\s-1IMP\s0\fR" 4 +.IX Item "IMPLICIT, IMP" +This is the same as \fB\s-1EXPLICIT\s0\fR except \s-1IMPLICIT\s0 tagging is used +instead. +.IP "\fB\s-1OCTWRAP\s0\fR, \fB\s-1SEQWRAP\s0\fR, \fB\s-1SETWRAP\s0\fR, \fB\s-1BITWRAP\s0\fR" 4 +.IX Item "OCTWRAP, SEQWRAP, SETWRAP, BITWRAP" +The following structure is surrounded by an \s-1OCTET STRING,\s0 a \s-1SEQUENCE,\s0 +a \s-1SET\s0 or a \s-1BIT STRING\s0 respectively. For a \s-1BIT STRING\s0 the number of unused +bits is set to zero. +.IP "\fB\s-1FORMAT\s0\fR" 4 +.IX Item "FORMAT" +This specifies the format of the ultimate value. It should be followed +by a colon and one of the strings \fB\s-1ASCII\s0\fR, \fB\s-1UTF8\s0\fR, \fB\s-1HEX\s0\fR or \fB\s-1BITLIST\s0\fR. +.Sp +If no format specifier is included then \fB\s-1ASCII\s0\fR is used. If \fB\s-1UTF8\s0\fR is +specified then the value string must be a valid \fB\s-1UTF8\s0\fR string. For \fB\s-1HEX\s0\fR the +output must be a set of hex digits. \fB\s-1BITLIST\s0\fR (which is only valid for a \s-1BIT +STRING\s0) is a comma separated list of the indices of the set bits, all other +bits are zero. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBASN1_generate_nconf()\fR and \fBASN1_generate_v3()\fR return the encoded +data as an \fB\s-1ASN1_TYPE\s0\fR structure or \fB\s-1NULL\s0\fR if an error occurred. +.PP +The error codes that can be obtained by \fBERR_get_error\fR\|(3). +.SH "EXAMPLES" +.IX Header "EXAMPLES" +A simple IA5String: +.PP +.Vb 1 +\& IA5STRING:Hello World +.Ve +.PP +An IA5String explicitly tagged: +.PP +.Vb 1 +\& EXPLICIT:0,IA5STRING:Hello World +.Ve +.PP +An IA5String explicitly tagged using \s-1APPLICATION\s0 tagging: +.PP +.Vb 1 +\& EXPLICIT:0A,IA5STRING:Hello World +.Ve +.PP +A \s-1BITSTRING\s0 with bits 1 and 5 set and all others zero: +.PP +.Vb 1 +\& FORMAT:BITLIST,BITSTRING:1,5 +.Ve +.PP +A more complex example using a config file to produce a +\&\s-1SEQUENCE\s0 consisting of a \s-1BOOL\s0 an \s-1OID\s0 and a UTF8String: +.PP +.Vb 1 +\& asn1 = SEQUENCE:seq_section +\& +\& [seq_section] +\& +\& field1 = BOOLEAN:TRUE +\& field2 = OID:commonName +\& field3 = UTF8:Third field +.Ve +.PP +This example produces an RSAPrivateKey structure, this is the +key contained in the file client.pem in all OpenSSL distributions +(note: the field names such as 'coeff' are ignored and are present just +for clarity): +.PP +.Vb 3 +\& asn1=SEQUENCE:private_key +\& [private_key] +\& version=INTEGER:0 +\& +\& n=INTEGER:0xBB6FE79432CC6EA2D8F970675A5A87BFBE1AFF0BE63E879F2AFFB93644\e +\& D4D2C6D000430DEC66ABF47829E74B8C5108623A1C0EE8BE217B3AD8D36D5EB4FCA1D9 +\& +\& e=INTEGER:0x010001 +\& +\& d=INTEGER:0x6F05EAD2F27FFAEC84BEC360C4B928FD5F3A9865D0FCAAD291E2A52F4A\e +\& F810DC6373278C006A0ABBA27DC8C63BF97F7E666E27C5284D7D3B1FFFE16B7A87B51D +\& +\& p=INTEGER:0xF3929B9435608F8A22C208D86795271D54EBDFB09DDEF539AB083DA912\e +\& D4BD57 +\& +\& q=INTEGER:0xC50016F89DFF2561347ED1186A46E150E28BF2D0F539A1594BBD7FE467\e +\& 46EC4F +\& +\& exp1=INTEGER:0x9E7D4326C924AFC1DEA40B45650134966D6F9DFA3A7F9D698CD4ABEA\e +\& 9C0A39B9 +\& +\& exp2=INTEGER:0xBA84003BB95355AFB7C50DF140C60513D0BA51D637272E355E397779\e +\& E7B2458F +\& +\& coeff=INTEGER:0x30B9E4F2AFA5AC679F920FC83F1F2DF1BAF1779CF989447FABC2F5\e +\& 628657053A +.Ve +.PP +This example is the corresponding public key in a SubjectPublicKeyInfo +structure: +.PP +.Vb 2 +\& # Start with a SEQUENCE +\& asn1=SEQUENCE:pubkeyinfo +\& +\& # pubkeyinfo contains an algorithm identifier and the public key wrapped +\& # in a BIT STRING +\& [pubkeyinfo] +\& algorithm=SEQUENCE:rsa_alg +\& pubkey=BITWRAP,SEQUENCE:rsapubkey +\& +\& # algorithm ID for RSA is just an OID and a NULL +\& [rsa_alg] +\& algorithm=OID:rsaEncryption +\& parameter=NULL +\& +\& # Actual public key: modulus and exponent +\& [rsapubkey] +\& n=INTEGER:0xBB6FE79432CC6EA2D8F970675A5A87BFBE1AFF0BE63E879F2AFFB93644\e +\& D4D2C6D000430DEC66ABF47829E74B8C5108623A1C0EE8BE217B3AD8D36D5EB4FCA1D9 +\& +\& e=INTEGER:0x010001 +.Ve +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_get_error\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2002\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ASYNC_WAIT_CTX_new.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ASYNC_WAIT_CTX_new.3 new file mode 100644 index 00000000..dde3e6af --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ASYNC_WAIT_CTX_new.3 @@ -0,0 +1,270 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "ASYNC_WAIT_CTX_NEW 3" +.TH ASYNC_WAIT_CTX_NEW 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +ASYNC_WAIT_CTX_new, ASYNC_WAIT_CTX_free, ASYNC_WAIT_CTX_set_wait_fd, ASYNC_WAIT_CTX_get_fd, ASYNC_WAIT_CTX_get_all_fds, ASYNC_WAIT_CTX_get_changed_fds, ASYNC_WAIT_CTX_clear_fd \- functions to manage waiting for asynchronous jobs to complete +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& ASYNC_WAIT_CTX *ASYNC_WAIT_CTX_new(void); +\& void ASYNC_WAIT_CTX_free(ASYNC_WAIT_CTX *ctx); +\& int ASYNC_WAIT_CTX_set_wait_fd(ASYNC_WAIT_CTX *ctx, const void *key, +\& OSSL_ASYNC_FD fd, +\& void *custom_data, +\& void (*cleanup)(ASYNC_WAIT_CTX *, const void *, +\& OSSL_ASYNC_FD, void *)); +\& int ASYNC_WAIT_CTX_get_fd(ASYNC_WAIT_CTX *ctx, const void *key, +\& OSSL_ASYNC_FD *fd, void **custom_data); +\& int ASYNC_WAIT_CTX_get_all_fds(ASYNC_WAIT_CTX *ctx, OSSL_ASYNC_FD *fd, +\& size_t *numfds); +\& int ASYNC_WAIT_CTX_get_changed_fds(ASYNC_WAIT_CTX *ctx, OSSL_ASYNC_FD *addfd, +\& size_t *numaddfds, OSSL_ASYNC_FD *delfd, +\& size_t *numdelfds); +\& int ASYNC_WAIT_CTX_clear_fd(ASYNC_WAIT_CTX *ctx, const void *key); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +For an overview of how asynchronous operations are implemented in OpenSSL see +\&\fBASYNC_start_job\fR\|(3). An \s-1ASYNC_WAIT_CTX\s0 object represents an asynchronous +\&\*(L"session\*(R", i.e. a related set of crypto operations. For example in \s-1SSL\s0 terms +this would have a one-to-one correspondence with an \s-1SSL\s0 connection. +.PP +Application code must create an \s-1ASYNC_WAIT_CTX\s0 using the \fBASYNC_WAIT_CTX_new()\fR +function prior to calling \fBASYNC_start_job()\fR (see \fBASYNC_start_job\fR\|(3)). When +the job is started it is associated with the \s-1ASYNC_WAIT_CTX\s0 for the duration of +that job. An \s-1ASYNC_WAIT_CTX\s0 should only be used for one \s-1ASYNC_JOB\s0 at any one +time, but can be reused after an \s-1ASYNC_JOB\s0 has finished for a subsequent +\&\s-1ASYNC_JOB.\s0 When the session is complete (e.g. the \s-1SSL\s0 connection is closed), +application code cleans up with \fBASYNC_WAIT_CTX_free()\fR. +.PP +ASYNC_WAIT_CTXs can have \*(L"wait\*(R" file descriptors associated with them. Calling +\&\fBASYNC_WAIT_CTX_get_all_fds()\fR and passing in a pointer to an \s-1ASYNC_WAIT_CTX\s0 in +the \fBctx\fR parameter will return the wait file descriptors associated with that +job in \fB*fd\fR. The number of file descriptors returned will be stored in +\&\fB*numfds\fR. It is the caller's responsibility to ensure that sufficient memory +has been allocated in \fB*fd\fR to receive all the file descriptors. Calling +\&\fBASYNC_WAIT_CTX_get_all_fds()\fR with a \s-1NULL\s0 \fBfd\fR value will return no file +descriptors but will still populate \fB*numfds\fR. 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 +one fd. If multiple asynchronous engines are being used then more could be +returned. +.PP +The function \fBASYNC_WAIT_CTX_get_changed_fds()\fR can be used to detect if any fds +have changed since the last call time \fBASYNC_start_job()\fR returned an \s-1ASYNC_PAUSE\s0 +result (or since the \s-1ASYNC_WAIT_CTX\s0 was created if no \s-1ASYNC_PAUSE\s0 result has +been received). The \fBnumaddfds\fR and \fBnumdelfds\fR parameters will be populated +with the number of fds added or deleted respectively. \fB*addfd\fR and \fB*delfd\fR +will be populated with the list of added and deleted fds respectively. Similarly +to \fBASYNC_WAIT_CTX_get_all_fds()\fR either of these can be \s-1NULL,\s0 but if they are not +\&\s-1NULL\s0 then the caller is responsible for ensuring sufficient memory is allocated. +.PP +Implementors of async aware code (e.g. engines) are encouraged to return a +stable fd for the lifetime of the \s-1ASYNC_WAIT_CTX\s0 in order to reduce the \*(L"churn\*(R" +of regularly changing fds \- although no guarantees of this are provided to +applications. +.PP +Applications can wait for the file descriptor to be ready for \*(L"read\*(R" using a +system function call such as select or poll (being ready for \*(L"read\*(R" indicates +that the job should be resumed). If no file descriptor is made available then an +application will have to periodically \*(L"poll\*(R" the job by attempting to restart it +to see if it is ready to continue. +.PP +Async aware code (e.g. engines) can get the current \s-1ASYNC_WAIT_CTX\s0 from the job +via \fBASYNC_get_wait_ctx\fR\|(3) and provide a file descriptor to use for waiting +on by calling \fBASYNC_WAIT_CTX_set_wait_fd()\fR. Typically this would be done by an +engine immediately prior to calling \fBASYNC_pause_job()\fR and not by end user code. +An existing association with a file descriptor can be obtained using +\&\fBASYNC_WAIT_CTX_get_fd()\fR and cleared using \fBASYNC_WAIT_CTX_clear_fd()\fR. Both of +these functions requires a \fBkey\fR value which is unique to the async aware +code. This could be any unique value but a good candidate might be the +\&\fB\s-1ENGINE\s0 *\fR for the engine. The \fBcustom_data\fR parameter can be any value, and +will be returned in a subsequent call to \fBASYNC_WAIT_CTX_get_fd()\fR. The +\&\fBASYNC_WAIT_CTX_set_wait_fd()\fR function also expects a pointer to a \*(L"cleanup\*(R" +routine. This can be \s-1NULL\s0 but if provided will automatically get called when +the \s-1ASYNC_WAIT_CTX\s0 is freed, and gives the engine the opportunity to close the +fd or any other resources. Note: The \*(L"cleanup\*(R" routine does not get called if +the fd is cleared directly via a call to \fBASYNC_WAIT_CTX_clear_fd()\fR. +.PP +An example of typical usage might be an async capable engine. User code would +initiate cryptographic operations. The engine would initiate those operations +asynchronously and then call \fBASYNC_WAIT_CTX_set_wait_fd()\fR followed by +\&\fBASYNC_pause_job()\fR to return control to the user code. The user code can then +perform other tasks or wait for the job to be ready by calling \*(L"select\*(R" or other +similar function on the wait file descriptor. The engine can signal to the user +code that the job should be resumed by making the wait file descriptor +\&\*(L"readable\*(R". Once resumed the engine should clear the wake signal on the wait +file descriptor. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBASYNC_WAIT_CTX_new()\fR returns a pointer to the newly allocated \s-1ASYNC_WAIT_CTX\s0 or +\&\s-1NULL\s0 on error. +.PP +ASYNC_WAIT_CTX_set_wait_fd, ASYNC_WAIT_CTX_get_fd, ASYNC_WAIT_CTX_get_all_fds, +ASYNC_WAIT_CTX_get_changed_fds and ASYNC_WAIT_CTX_clear_fd all return 1 on +success or 0 on error. +.SH "NOTES" +.IX Header "NOTES" +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 +it is defined as an application developer's responsibility to include +windows.h prior to async.h. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBcrypto\fR\|(7), \fBASYNC_start_job\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +\&\fBASYNC_WAIT_CTX_new()\fR, \fBASYNC_WAIT_CTX_free()\fR, \fBASYNC_WAIT_CTX_set_wait_fd()\fR, +\&\fBASYNC_WAIT_CTX_get_fd()\fR, \fBASYNC_WAIT_CTX_get_all_fds()\fR, +\&\fBASYNC_WAIT_CTX_get_changed_fds()\fR and \fBASYNC_WAIT_CTX_clear_fd()\fR +were added in OpenSSL 1.1.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ASYNC_start_job.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ASYNC_start_job.3 new file mode 100644 index 00000000..3fc57943 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ASYNC_start_job.3 @@ -0,0 +1,453 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "ASYNC_START_JOB 3" +.TH ASYNC_START_JOB 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +ASYNC_get_wait_ctx, ASYNC_init_thread, ASYNC_cleanup_thread, ASYNC_start_job, ASYNC_pause_job, ASYNC_get_current_job, ASYNC_block_pause, ASYNC_unblock_pause, ASYNC_is_capable \&\- asynchronous job management functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int ASYNC_init_thread(size_t max_size, size_t init_size); +\& void ASYNC_cleanup_thread(void); +\& +\& int ASYNC_start_job(ASYNC_JOB **job, ASYNC_WAIT_CTX *ctx, int *ret, +\& int (*func)(void *), void *args, size_t size); +\& int ASYNC_pause_job(void); +\& +\& ASYNC_JOB *ASYNC_get_current_job(void); +\& ASYNC_WAIT_CTX *ASYNC_get_wait_ctx(ASYNC_JOB *job); +\& void ASYNC_block_pause(void); +\& void ASYNC_unblock_pause(void); +\& +\& int ASYNC_is_capable(void); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +OpenSSL implements asynchronous capabilities through an \s-1ASYNC_JOB.\s0 This +represents code that can be started and executes until some event occurs. At +that point the code can be paused and control returns to user code until some +subsequent event indicates that the job can be resumed. +.PP +The creation of an \s-1ASYNC_JOB\s0 is a relatively expensive operation. Therefore, for +efficiency reasons, jobs can be created up front and reused many times. They are +held in a pool until they are needed, at which point they are removed from the +pool, used, and then returned to the pool when the job completes. If the user +application is multi-threaded, then \fBASYNC_init_thread()\fR may be called for each +thread that will initiate asynchronous jobs. Before +user code exits per-thread resources need to be cleaned up. This will normally +occur automatically (see \fBOPENSSL_init_crypto\fR\|(3)) but may be explicitly +initiated by using \fBASYNC_cleanup_thread()\fR. No asynchronous jobs must be +outstanding for the thread when \fBASYNC_cleanup_thread()\fR is called. Failing to +ensure this will result in memory leaks. +.PP +The \fBmax_size\fR argument limits the number of ASYNC_JOBs that will be held in +the pool. If \fBmax_size\fR is set to 0 then no upper limit is set. When an +\&\s-1ASYNC_JOB\s0 is needed but there are none available in the pool already then one +will be automatically created, as long as the total of ASYNC_JOBs managed by the +pool does not exceed \fBmax_size\fR. When the pool is first initialised +\&\fBinit_size\fR ASYNC_JOBs will be created immediately. If \fBASYNC_init_thread()\fR is +not called before the pool is first used then it will be called automatically +with a \fBmax_size\fR of 0 (no upper limit) and an \fBinit_size\fR of 0 (no ASYNC_JOBs +created up front). +.PP +An asynchronous job is started by calling the \fBASYNC_start_job()\fR function. +Initially \fB*job\fR should be \s-1NULL.\s0 \fBctx\fR should point to an \s-1ASYNC_WAIT_CTX\s0 +object created through the \fBASYNC_WAIT_CTX_new\fR\|(3) function. \fBret\fR should +point to a location where the return value of the asynchronous function should +be stored on completion of the job. \fBfunc\fR represents the function that should +be started asynchronously. The data pointed to by \fBargs\fR and of size \fBsize\fR +will be copied and then passed as an argument to \fBfunc\fR when the job starts. +ASYNC_start_job will return one of the following values: +.IP "\fB\s-1ASYNC_ERR\s0\fR" 4 +.IX Item "ASYNC_ERR" +An error occurred trying to start the job. Check the OpenSSL error queue (e.g. +see \fBERR_print_errors\fR\|(3)) for more details. +.IP "\fB\s-1ASYNC_NO_JOBS\s0\fR" 4 +.IX Item "ASYNC_NO_JOBS" +There are no jobs currently available in the pool. This call can be retried +again at a later time. +.IP "\fB\s-1ASYNC_PAUSE\s0\fR" 4 +.IX Item "ASYNC_PAUSE" +The job was successfully started but was \*(L"paused\*(R" before it completed (see +\&\fBASYNC_pause_job()\fR below). A handle to the job is placed in \fB*job\fR. Other work +can be performed (if desired) and the job restarted at a later time. To restart +a job call \fBASYNC_start_job()\fR again passing the job handle in \fB*job\fR. The +\&\fBfunc\fR, \fBargs\fR and \fBsize\fR parameters will be ignored when restarting a job. +When restarting a job \fBASYNC_start_job()\fR \fBmust\fR be called from the same thread +that the job was originally started from. +.IP "\fB\s-1ASYNC_FINISH\s0\fR" 4 +.IX Item "ASYNC_FINISH" +The job completed. \fB*job\fR will be \s-1NULL\s0 and the return value from \fBfunc\fR will +be placed in \fB*ret\fR. +.PP +At any one time there can be a maximum of one job actively running per thread +(you can have many that are paused). \fBASYNC_get_current_job()\fR can be used to get +a pointer to the currently executing \s-1ASYNC_JOB.\s0 If no job is currently executing +then this will return \s-1NULL.\s0 +.PP +If executing within the context of a job (i.e. having been called directly or +indirectly by the function \*(L"func\*(R" passed as an argument to \fBASYNC_start_job()\fR) +then \fBASYNC_pause_job()\fR will immediately return control to the calling +application with \s-1ASYNC_PAUSE\s0 returned from the \fBASYNC_start_job()\fR call. A +subsequent call to ASYNC_start_job passing in the relevant \s-1ASYNC_JOB\s0 in the +\&\fB*job\fR parameter will resume execution from the \fBASYNC_pause_job()\fR call. If +\&\fBASYNC_pause_job()\fR is called whilst not within the context of a job then no +action is taken and \fBASYNC_pause_job()\fR returns immediately. +.PP +\&\fBASYNC_get_wait_ctx()\fR can be used to get a pointer to the \s-1ASYNC_WAIT_CTX\s0 +for the \fBjob\fR. ASYNC_WAIT_CTXs can have a \*(L"wait\*(R" file descriptor associated +with them. Applications can wait for the file descriptor to be ready for \*(L"read\*(R" +using a system function call such as select or poll (being ready for \*(L"read\*(R" +indicates that the job should be resumed). If no file descriptor is made +available then an application will have to periodically \*(L"poll\*(R" the job by +attempting to restart it to see if it is ready to continue. +.PP +An example of typical usage might be an async capable engine. User code would +initiate cryptographic operations. The engine would initiate those operations +asynchronously and then call \fBASYNC_WAIT_CTX_set_wait_fd\fR\|(3) followed by +\&\fBASYNC_pause_job()\fR to return control to the user code. The user code can then +perform other tasks or wait for the job to be ready by calling \*(L"select\*(R" or other +similar function on the wait file descriptor. The engine can signal to the user +code that the job should be resumed by making the wait file descriptor +\&\*(L"readable\*(R". Once resumed the engine should clear the wake signal on the wait +file descriptor. +.PP +The \fBASYNC_block_pause()\fR function will prevent the currently active job from +pausing. The block will remain in place until a subsequent call to +\&\fBASYNC_unblock_pause()\fR. These functions can be nested, e.g. if you call +\&\fBASYNC_block_pause()\fR twice then you must call \fBASYNC_unblock_pause()\fR twice in +order to re-enable pausing. If these functions are called while there is no +currently active job then they have no effect. This functionality can be useful +to avoid deadlock scenarios. For example during the execution of an \s-1ASYNC_JOB\s0 an +application acquires a lock. It then calls some cryptographic function which +invokes \fBASYNC_pause_job()\fR. This returns control back to the code that created +the \s-1ASYNC_JOB.\s0 If that code then attempts to acquire the same lock before +resuming the original job then a deadlock can occur. By calling +\&\fBASYNC_block_pause()\fR immediately after acquiring the lock and +\&\fBASYNC_unblock_pause()\fR immediately before releasing it then this situation cannot +occur. +.PP +Some platforms cannot support async operations. The \fBASYNC_is_capable()\fR function +can be used to detect whether the current platform is async capable or not. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +ASYNC_init_thread returns 1 on success or 0 otherwise. +.PP +ASYNC_start_job returns one of \s-1ASYNC_ERR, ASYNC_NO_JOBS, ASYNC_PAUSE\s0 or +\&\s-1ASYNC_FINISH\s0 as described above. +.PP +ASYNC_pause_job returns 0 if an error occurred or 1 on success. If called when +not within the context of an \s-1ASYNC_JOB\s0 then this is counted as success so 1 is +returned. +.PP +ASYNC_get_current_job returns a pointer to the currently executing \s-1ASYNC_JOB\s0 or +\&\s-1NULL\s0 if not within the context of a job. +.PP +\&\fBASYNC_get_wait_ctx()\fR returns a pointer to the \s-1ASYNC_WAIT_CTX\s0 for the job. +.PP +\&\fBASYNC_is_capable()\fR returns 1 if the current platform is async capable or 0 +otherwise. +.SH "NOTES" +.IX Header "NOTES" +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 +it is defined as an application developer's responsibility to include +windows.h prior to async.h. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +The following example demonstrates how to use most of the core async APIs: +.PP +.Vb 7 +\& #ifdef _WIN32 +\& # include +\& #endif +\& #include +\& #include +\& #include +\& #include +\& +\& int unique = 0; +\& +\& void cleanup(ASYNC_WAIT_CTX *ctx, const void *key, OSSL_ASYNC_FD r, void *vw) +\& { +\& OSSL_ASYNC_FD *w = (OSSL_ASYNC_FD *)vw; +\& +\& close(r); +\& close(*w); +\& OPENSSL_free(w); +\& } +\& +\& int jobfunc(void *arg) +\& { +\& ASYNC_JOB *currjob; +\& unsigned char *msg; +\& int pipefds[2] = {0, 0}; +\& OSSL_ASYNC_FD *wptr; +\& char buf = \*(AqX\*(Aq; +\& +\& currjob = ASYNC_get_current_job(); +\& if (currjob != NULL) { +\& printf("Executing within a job\en"); +\& } else { +\& printf("Not executing within a job \- should not happen\en"); +\& return 0; +\& } +\& +\& msg = (unsigned char *)arg; +\& printf("Passed in message is: %s\en", msg); +\& +\& if (pipe(pipefds) != 0) { +\& printf("Failed to create pipe\en"); +\& return 0; +\& } +\& wptr = OPENSSL_malloc(sizeof(OSSL_ASYNC_FD)); +\& if (wptr == NULL) { +\& printf("Failed to malloc\en"); +\& return 0; +\& } +\& *wptr = pipefds[1]; +\& ASYNC_WAIT_CTX_set_wait_fd(ASYNC_get_wait_ctx(currjob), &unique, +\& pipefds[0], wptr, cleanup); +\& +\& /* +\& * Normally some external event would cause this to happen at some +\& * later point \- but we do it here for demo purposes, i.e. +\& * immediately signalling that the job is ready to be woken up after +\& * we return to main via ASYNC_pause_job(). +\& */ +\& write(pipefds[1], &buf, 1); +\& +\& /* Return control back to main */ +\& ASYNC_pause_job(); +\& +\& /* Clear the wake signal */ +\& read(pipefds[0], &buf, 1); +\& +\& printf ("Resumed the job after a pause\en"); +\& +\& return 1; +\& } +\& +\& int main(void) +\& { +\& ASYNC_JOB *job = NULL; +\& ASYNC_WAIT_CTX *ctx = NULL; +\& int ret; +\& OSSL_ASYNC_FD waitfd; +\& fd_set waitfdset; +\& size_t numfds; +\& unsigned char msg[13] = "Hello world!"; +\& +\& printf("Starting...\en"); +\& +\& ctx = ASYNC_WAIT_CTX_new(); +\& if (ctx == NULL) { +\& printf("Failed to create ASYNC_WAIT_CTX\en"); +\& abort(); +\& } +\& +\& for (;;) { +\& switch (ASYNC_start_job(&job, ctx, &ret, jobfunc, msg, sizeof(msg))) { +\& case ASYNC_ERR: +\& case ASYNC_NO_JOBS: +\& printf("An error occurred\en"); +\& goto end; +\& case ASYNC_PAUSE: +\& printf("Job was paused\en"); +\& break; +\& case ASYNC_FINISH: +\& printf("Job finished with return value %d\en", ret); +\& goto end; +\& } +\& +\& /* Wait for the job to be woken */ +\& printf("Waiting for the job to be woken up\en"); +\& +\& if (!ASYNC_WAIT_CTX_get_all_fds(ctx, NULL, &numfds) +\& || numfds > 1) { +\& printf("Unexpected number of fds\en"); +\& abort(); +\& } +\& ASYNC_WAIT_CTX_get_all_fds(ctx, &waitfd, &numfds); +\& FD_ZERO(&waitfdset); +\& FD_SET(waitfd, &waitfdset); +\& select(waitfd + 1, &waitfdset, NULL, NULL, NULL); +\& } +\& +\& end: +\& ASYNC_WAIT_CTX_free(ctx); +\& printf("Finishing\en"); +\& +\& return 0; +\& } +.Ve +.PP +The expected output from executing the above example program is: +.PP +.Vb 8 +\& Starting... +\& Executing within a job +\& Passed in message is: Hello world! +\& Job was paused +\& Waiting for the job to be woken up +\& Resumed the job after a pause +\& Job finished with return value 1 +\& Finishing +.Ve +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBcrypto\fR\|(7), \fBERR_print_errors\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +ASYNC_init_thread, ASYNC_cleanup_thread, +ASYNC_start_job, ASYNC_pause_job, ASYNC_get_current_job, \fBASYNC_get_wait_ctx()\fR, +\&\fBASYNC_block_pause()\fR, \fBASYNC_unblock_pause()\fR and \fBASYNC_is_capable()\fR were first +added in OpenSSL 1.1.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2015\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BF_encrypt.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BF_encrypt.3 new file mode 100644 index 00000000..19fbc380 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BF_encrypt.3 @@ -0,0 +1,249 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "BF_ENCRYPT 3" +.TH BF_ENCRYPT 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +BF_set_key, BF_encrypt, BF_decrypt, BF_ecb_encrypt, BF_cbc_encrypt, BF_cfb64_encrypt, BF_ofb64_encrypt, BF_options \- Blowfish encryption +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& void BF_set_key(BF_KEY *key, int len, const unsigned char *data); +\& +\& void BF_ecb_encrypt(const unsigned char *in, unsigned char *out, +\& BF_KEY *key, int enc); +\& void BF_cbc_encrypt(const unsigned char *in, unsigned char *out, +\& long length, BF_KEY *schedule, +\& unsigned char *ivec, int enc); +\& void BF_cfb64_encrypt(const unsigned char *in, unsigned char *out, +\& long length, BF_KEY *schedule, +\& unsigned char *ivec, int *num, int enc); +\& void BF_ofb64_encrypt(const unsigned char *in, unsigned char *out, +\& long length, BF_KEY *schedule, +\& unsigned char *ivec, int *num); +\& const char *BF_options(void); +\& +\& void BF_encrypt(BF_LONG *data, const BF_KEY *key); +\& void BF_decrypt(BF_LONG *data, const BF_KEY *key); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +This library implements the Blowfish cipher, which was invented and described +by Counterpane (see http://www.counterpane.com/blowfish.html ). +.PP +Blowfish is a block cipher that operates on 64 bit (8 byte) blocks of data. +It uses a variable size key, but typically, 128 bit (16 byte) keys are +considered good for strong encryption. Blowfish can be used in the same +modes as \s-1DES\s0 (see \fBdes_modes\fR\|(7)). Blowfish is currently one +of the faster block ciphers. It is quite a bit faster than \s-1DES,\s0 and much +faster than \s-1IDEA\s0 or \s-1RC2.\s0 +.PP +Blowfish consists of a key setup phase and the actual encryption or decryption +phase. +.PP +\&\fBBF_set_key()\fR sets up the \fB\s-1BF_KEY\s0\fR \fBkey\fR using the \fBlen\fR bytes long key +at \fBdata\fR. +.PP +\&\fBBF_ecb_encrypt()\fR is the basic Blowfish encryption and decryption function. +It encrypts or decrypts the first 64 bits of \fBin\fR using the key \fBkey\fR, +putting the result in \fBout\fR. \fBenc\fR decides if encryption (\fB\s-1BF_ENCRYPT\s0\fR) +or decryption (\fB\s-1BF_DECRYPT\s0\fR) shall be performed. The vector pointed at by +\&\fBin\fR and \fBout\fR must be 64 bits in length, no less. If they are larger, +everything after the first 64 bits is ignored. +.PP +The mode functions \fBBF_cbc_encrypt()\fR, \fBBF_cfb64_encrypt()\fR and \fBBF_ofb64_encrypt()\fR +all operate on variable length data. They all take an initialization vector +\&\fBivec\fR which needs to be passed along into the next call of the same function +for the same message. \fBivec\fR may be initialized with anything, but the +recipient needs to know what it was initialized with, or it won't be able +to decrypt. Some programs and protocols simplify this, like \s-1SSH,\s0 where +\&\fBivec\fR is simply initialized to zero. +\&\fBBF_cbc_encrypt()\fR operates on data that is a multiple of 8 bytes long, while +\&\fBBF_cfb64_encrypt()\fR and \fBBF_ofb64_encrypt()\fR are used to encrypt an 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 \fBnum\fR, which is a pointer to an integer where the current +offset in \fBivec\fR is stored between calls. This integer must be initialized +to zero when \fBivec\fR is initialized. +.PP +\&\fBBF_cbc_encrypt()\fR is the Cipher Block Chaining function for Blowfish. It +encrypts or decrypts the 64 bits chunks of \fBin\fR using the key \fBschedule\fR, +putting the result in \fBout\fR. \fBenc\fR decides if encryption (\s-1BF_ENCRYPT\s0) or +decryption (\s-1BF_DECRYPT\s0) shall be performed. \fBivec\fR must point at an 8 byte +long initialization vector. +.PP +\&\fBBF_cfb64_encrypt()\fR is the \s-1CFB\s0 mode for Blowfish with 64 bit feedback. +It encrypts or decrypts the bytes in \fBin\fR using the key \fBschedule\fR, +putting the result in \fBout\fR. \fBenc\fR decides if encryption (\fB\s-1BF_ENCRYPT\s0\fR) +or decryption (\fB\s-1BF_DECRYPT\s0\fR) shall be performed. \fBivec\fR must point at an +8 byte long initialization vector. \fBnum\fR must point at an integer which must +be initially zero. +.PP +\&\fBBF_ofb64_encrypt()\fR is the \s-1OFB\s0 mode for Blowfish with 64 bit feedback. +It uses the same parameters as \fBBF_cfb64_encrypt()\fR, which must be initialized +the same way. +.PP +\&\fBBF_encrypt()\fR and \fBBF_decrypt()\fR are the lowest level functions for Blowfish +encryption. They encrypt/decrypt the first 64 bits of the vector pointed by +\&\fBdata\fR, using the key \fBkey\fR. These functions should not be used unless you +implement 'modes' of Blowfish. The alternative is to use \fBBF_ecb_encrypt()\fR. +If you still want to use these functions, you should be aware that they take +each 32\-bit chunk in host-byte order, which is little-endian on little-endian +platforms and big-endian on big-endian ones. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +None of the functions presented here return any value. +.SH "NOTE" +.IX Header "NOTE" +Applications should use the higher level functions +\&\fBEVP_EncryptInit\fR\|(3) etc. instead of calling these +functions directly. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBEVP_EncryptInit\fR\|(3), +\&\fBdes_modes\fR\|(7) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_ADDR.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_ADDR.3 new file mode 100644 index 00000000..900b8066 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_ADDR.3 @@ -0,0 +1,253 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "BIO_ADDR 3" +.TH BIO_ADDR 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +BIO_ADDR, BIO_ADDR_new, BIO_ADDR_clear, BIO_ADDR_free, BIO_ADDR_rawmake, BIO_ADDR_family, BIO_ADDR_rawaddress, BIO_ADDR_rawport, BIO_ADDR_hostname_string, BIO_ADDR_service_string, BIO_ADDR_path_string \- BIO_ADDR routines +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 2 +\& #include +\& #include +\& +\& typedef union bio_addr_st BIO_ADDR; +\& +\& BIO_ADDR *BIO_ADDR_new(void); +\& void BIO_ADDR_free(BIO_ADDR *); +\& void BIO_ADDR_clear(BIO_ADDR *ap); +\& int BIO_ADDR_rawmake(BIO_ADDR *ap, int family, +\& const void *where, size_t wherelen, unsigned short port); +\& int BIO_ADDR_family(const BIO_ADDR *ap); +\& int BIO_ADDR_rawaddress(const BIO_ADDR *ap, void *p, size_t *l); +\& unsigned short BIO_ADDR_rawport(const BIO_ADDR *ap); +\& char *BIO_ADDR_hostname_string(const BIO_ADDR *ap, int numeric); +\& char *BIO_ADDR_service_string(const BIO_ADDR *ap, int numeric); +\& char *BIO_ADDR_path_string(const BIO_ADDR *ap); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fB\s-1BIO_ADDR\s0\fR type is a wrapper around all types of socket +addresses that OpenSSL deals with, currently transparently +supporting \s-1AF_INET, AF_INET6\s0 and \s-1AF_UNIX\s0 according to what's +available on the platform at hand. +.PP +\&\fBBIO_ADDR_new()\fR creates a new unfilled \fB\s-1BIO_ADDR\s0\fR, to be used +with routines that will fill it with information, such as +\&\fBBIO_accept_ex()\fR. +.PP +\&\fBBIO_ADDR_free()\fR frees a \fB\s-1BIO_ADDR\s0\fR created with \fBBIO_ADDR_new()\fR. +.PP +\&\fBBIO_ADDR_clear()\fR clears any data held within the provided \fB\s-1BIO_ADDR\s0\fR and sets +it back to an uninitialised state. +.PP +\&\fBBIO_ADDR_rawmake()\fR takes a protocol \fBfamily\fR, an byte array of +size \fBwherelen\fR with an address in network byte order pointed at +by \fBwhere\fR and a port number in network byte order in \fBport\fR (except +for the \fB\s-1AF_UNIX\s0\fR protocol family, where \fBport\fR is meaningless and +therefore ignored) and populates the given \fB\s-1BIO_ADDR\s0\fR with them. +In case this creates a \fB\s-1AF_UNIX\s0\fR \fB\s-1BIO_ADDR\s0\fR, \fBwherelen\fR is expected +to be the length of the path string (not including the terminating +\&\s-1NUL,\s0 such as the result of a call to \fBstrlen()\fR). +\&\fIRead on about the addresses in \*(L"\s-1RAW ADDRESSES\*(R"\s0 below\fR. +.PP +\&\fBBIO_ADDR_family()\fR returns the protocol family of the given +\&\fB\s-1BIO_ADDR\s0\fR. The possible non-error results are one of the +constants \s-1AF_INET, AF_INET6\s0 and \s-1AF_UNIX.\s0 It will also return \s-1AF_UNSPEC\s0 if the +\&\s-1BIO_ADDR\s0 has not been initialised. +.PP +\&\fBBIO_ADDR_rawaddress()\fR will write the raw address of the given +\&\fB\s-1BIO_ADDR\s0\fR in the area pointed at by \fBp\fR if \fBp\fR is non-NULL, +and will set \fB*l\fR to be the amount of bytes the raw address +takes up if \fBl\fR is non-NULL. +A technique to only find out the size of the address is a call +with \fBp\fR set to \fB\s-1NULL\s0\fR. The raw address will be in network byte +order, most significant byte first. +In case this is a \fB\s-1AF_UNIX\s0\fR \fB\s-1BIO_ADDR\s0\fR, \fBl\fR gets the length of the +path string (not including the terminating \s-1NUL,\s0 such as the result of +a call to \fBstrlen()\fR). +\&\fIRead on about the addresses in \*(L"\s-1RAW ADDRESSES\*(R"\s0 below\fR. +.PP +\&\fBBIO_ADDR_rawport()\fR returns the raw port of the given \fB\s-1BIO_ADDR\s0\fR. +The raw port will be in network byte order. +.PP +\&\fBBIO_ADDR_hostname_string()\fR returns a character string with the +hostname of the given \fB\s-1BIO_ADDR\s0\fR. If \fBnumeric\fR is 1, the string +will contain the numerical form of the address. This only works for +\&\fB\s-1BIO_ADDR\s0\fR of the protocol families \s-1AF_INET\s0 and \s-1AF_INET6.\s0 The +returned string has been allocated on the heap and must be freed +with \fBOPENSSL_free()\fR. +.PP +\&\fBBIO_ADDR_service_string()\fR returns a character string with the +service name of the port of the given \fB\s-1BIO_ADDR\s0\fR. If \fBnumeric\fR +is 1, the string will contain the port number. This only works +for \fB\s-1BIO_ADDR\s0\fR of the protocol families \s-1AF_INET\s0 and \s-1AF_INET6.\s0 The +returned string has been allocated on the heap and must be freed +with \fBOPENSSL_free()\fR. +.PP +\&\fBBIO_ADDR_path_string()\fR returns a character string with the path +of the given \fB\s-1BIO_ADDR\s0\fR. This only works for \fB\s-1BIO_ADDR\s0\fR of the +protocol family \s-1AF_UNIX.\s0 The returned string has been allocated +on the heap and must be freed with \fBOPENSSL_free()\fR. +.SH "RAW ADDRESSES" +.IX Header "RAW ADDRESSES" +Both \fBBIO_ADDR_rawmake()\fR and \fBBIO_ADDR_rawaddress()\fR take a pointer to a +network byte order address of a specific site. Internally, those are +treated as a pointer to \fBstruct in_addr\fR (for \fB\s-1AF_INET\s0\fR), \fBstruct +in6_addr\fR (for \fB\s-1AF_INET6\s0\fR) or \fBchar *\fR (for \fB\s-1AF_UNIX\s0\fR), all +depending on the protocol family the address is for. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +The string producing functions \fBBIO_ADDR_hostname_string()\fR, +\&\fBBIO_ADDR_service_string()\fR and \fBBIO_ADDR_path_string()\fR will +return \fB\s-1NULL\s0\fR on error and leave an error indication on the +OpenSSL error stack. +.PP +All other functions described here return 0 or \fB\s-1NULL\s0\fR when the +information they should return isn't available. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBBIO_connect\fR\|(3), \fBBIO_s_connect\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_ADDRINFO.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_ADDRINFO.3 new file mode 100644 index 00000000..f787744d --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_ADDRINFO.3 @@ -0,0 +1,239 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "BIO_ADDRINFO 3" +.TH BIO_ADDRINFO 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +BIO_lookup_type, BIO_ADDRINFO, BIO_ADDRINFO_next, BIO_ADDRINFO_free, BIO_ADDRINFO_family, BIO_ADDRINFO_socktype, BIO_ADDRINFO_protocol, BIO_ADDRINFO_address, BIO_lookup_ex, BIO_lookup \&\- BIO_ADDRINFO type and routines +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 2 +\& #include +\& #include +\& +\& typedef union bio_addrinfo_st BIO_ADDRINFO; +\& +\& enum BIO_lookup_type { +\& BIO_LOOKUP_CLIENT, BIO_LOOKUP_SERVER +\& }; +\& +\& int BIO_lookup_ex(const char *host, const char *service, int lookup_type, +\& int family, int socktype, int protocol, BIO_ADDRINFO **res); +\& int BIO_lookup(const char *node, const char *service, +\& enum BIO_lookup_type lookup_type, +\& int family, int socktype, BIO_ADDRINFO **res); +\& +\& const BIO_ADDRINFO *BIO_ADDRINFO_next(const BIO_ADDRINFO *bai); +\& int BIO_ADDRINFO_family(const BIO_ADDRINFO *bai); +\& int BIO_ADDRINFO_socktype(const BIO_ADDRINFO *bai); +\& int BIO_ADDRINFO_protocol(const BIO_ADDRINFO *bai); +\& const BIO_ADDR *BIO_ADDRINFO_address(const BIO_ADDRINFO *bai); +\& void BIO_ADDRINFO_free(BIO_ADDRINFO *bai); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fB\s-1BIO_ADDRINFO\s0\fR type is a wrapper for address information +types provided on your platform. +.PP +\&\fB\s-1BIO_ADDRINFO\s0\fR normally forms a chain of several that can be +picked at one by one. +.PP +\&\fBBIO_lookup_ex()\fR looks up a specified \fBhost\fR and \fBservice\fR, and +uses \fBlookup_type\fR to determine what the default address should +be if \fBhost\fR is \fB\s-1NULL\s0\fR. \fBfamily\fR, \fBsocktype\fR and \fBprotocol\fR are used to +determine what protocol family, socket type and protocol should be used for +the lookup. \fBfamily\fR can be any of \s-1AF_INET, AF_INET6, AF_UNIX\s0 and +\&\s-1AF_UNSPEC.\s0 \fBsocktype\fR can be \s-1SOCK_STREAM, SOCK_DGRAM\s0 or 0. Specifying 0 +indicates that any type can be used. \fBprotocol\fR specifies a protocol such as +\&\s-1IPPROTO_TCP, IPPROTO_UDP\s0 or \s-1IPPORTO_SCTP.\s0 If set to 0 than any protocol can be +used. \fBres\fR points at a pointer to hold the start of a \fB\s-1BIO_ADDRINFO\s0\fR +chain. +.PP +For the family \fB\s-1AF_UNIX\s0\fR, \fBBIO_lookup_ex()\fR will ignore the \fBservice\fR +parameter and expects the \fBnode\fR parameter to hold the path to the +socket file. +.PP +\&\fBBIO_lookup()\fR does the same as \fBBIO_lookup_ex()\fR but does not provide the ability +to select based on the protocol (any protocol may be returned). +.PP +\&\fBBIO_ADDRINFO_family()\fR returns the family of the given +\&\fB\s-1BIO_ADDRINFO\s0\fR. The result will be one of the constants +\&\s-1AF_INET, AF_INET6\s0 and \s-1AF_UNIX.\s0 +.PP +\&\fBBIO_ADDRINFO_socktype()\fR returns the socket type of the given +\&\fB\s-1BIO_ADDRINFO\s0\fR. The result will be one of the constants +\&\s-1SOCK_STREAM\s0 and \s-1SOCK_DGRAM.\s0 +.PP +\&\fBBIO_ADDRINFO_protocol()\fR returns the protocol id of the given +\&\fB\s-1BIO_ADDRINFO\s0\fR. The result will be one of the constants +\&\s-1IPPROTO_TCP\s0 and \s-1IPPROTO_UDP.\s0 +.PP +\&\fBBIO_ADDRINFO_address()\fR returns the underlying \fB\s-1BIO_ADDR\s0\fR +of the given \fB\s-1BIO_ADDRINFO\s0\fR. +.PP +\&\fBBIO_ADDRINFO_next()\fR returns the next \fB\s-1BIO_ADDRINFO\s0\fR in the chain +from the given one. +.PP +\&\fBBIO_ADDRINFO_free()\fR frees the chain of \fB\s-1BIO_ADDRINFO\s0\fR starting +with the given one. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBBIO_lookup_ex()\fR and \fBBIO_lookup()\fR return 1 on success and 0 when an error +occurred, and will leave an error indication on the OpenSSL error stack in that +case. +.PP +All other functions described here return 0 or \fB\s-1NULL\s0\fR when the +information they should return isn't available. +.SH "NOTES" +.IX Header "NOTES" +The \fBBIO_lookup_ex()\fR implementation uses the platform provided \fBgetaddrinfo()\fR +function. On Linux it is known that specifying 0 for the protocol will not +return any \s-1SCTP\s0 based addresses when calling \fBgetaddrinfo()\fR. Therefore if an \s-1SCTP\s0 +address is required then the \fBprotocol\fR parameter to \fBBIO_lookup_ex()\fR should be +explicitly set to \s-1IPPROTO_SCTP.\s0 The same may be true on other platforms. +.SH "HISTORY" +.IX Header "HISTORY" +The \fBBIO_lookup_ex()\fR function was added in OpenSSL 1.1.1. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2016\-2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_connect.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_connect.3 new file mode 100644 index 00000000..860f6da6 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_connect.3 @@ -0,0 +1,240 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "BIO_CONNECT 3" +.TH BIO_CONNECT 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +BIO_socket, BIO_bind, BIO_connect, BIO_listen, BIO_accept_ex, BIO_closesocket \- BIO socket communication setup routines +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int BIO_socket(int domain, int socktype, int protocol, int options); +\& int BIO_bind(int sock, const BIO_ADDR *addr, int options); +\& int BIO_connect(int sock, const BIO_ADDR *addr, int options); +\& int BIO_listen(int sock, const BIO_ADDR *addr, int options); +\& int BIO_accept_ex(int accept_sock, BIO_ADDR *peer, int options); +\& int BIO_closesocket(int sock); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBBIO_socket()\fR creates a socket in the domain \fBdomain\fR, of type +\&\fBsocktype\fR and \fBprotocol\fR. Socket \fBoptions\fR are currently unused, +but is present for future use. +.PP +\&\fBBIO_bind()\fR binds the source address and service to a socket and +may be useful before calling \fBBIO_connect()\fR. The options may include +\&\fB\s-1BIO_SOCK_REUSEADDR\s0\fR, which is described in \*(L"\s-1FLAGS\*(R"\s0 below. +.PP +\&\fBBIO_connect()\fR connects \fBsock\fR to the address and service given by +\&\fBaddr\fR. Connection \fBoptions\fR may be zero or any combination of +\&\fB\s-1BIO_SOCK_KEEPALIVE\s0\fR, \fB\s-1BIO_SOCK_NONBLOCK\s0\fR and \fB\s-1BIO_SOCK_NODELAY\s0\fR. +The flags are described in \*(L"\s-1FLAGS\*(R"\s0 below. +.PP +\&\fBBIO_listen()\fR has \fBsock\fR start listening on the address and service +given by \fBaddr\fR. Connection \fBoptions\fR may be zero or any +combination of \fB\s-1BIO_SOCK_KEEPALIVE\s0\fR, \fB\s-1BIO_SOCK_NONBLOCK\s0\fR, +\&\fB\s-1BIO_SOCK_NODELAY\s0\fR, \fB\s-1BIO_SOCK_REUSEADDR\s0\fR and \fB\s-1BIO_SOCK_V6_ONLY\s0\fR. +The flags are described in \*(L"\s-1FLAGS\*(R"\s0 below. +.PP +\&\fBBIO_accept_ex()\fR waits for an incoming connections on the given +socket \fBaccept_sock\fR. When it gets a connection, the address and +port of the peer gets stored in \fBpeer\fR if that one is non-NULL. +Accept \fBoptions\fR may be zero or \fB\s-1BIO_SOCK_NONBLOCK\s0\fR, and is applied +on the accepted socket. The flags are described in \*(L"\s-1FLAGS\*(R"\s0 below. +.PP +\&\fBBIO_closesocket()\fR closes \fBsock\fR. +.SH "FLAGS" +.IX Header "FLAGS" +.IP "\s-1BIO_SOCK_KEEPALIVE\s0" 4 +.IX Item "BIO_SOCK_KEEPALIVE" +Enables regular sending of keep-alive messages. +.IP "\s-1BIO_SOCK_NONBLOCK\s0" 4 +.IX Item "BIO_SOCK_NONBLOCK" +Sets the socket to non-blocking mode. +.IP "\s-1BIO_SOCK_NODELAY\s0" 4 +.IX Item "BIO_SOCK_NODELAY" +Corresponds to \fB\s-1TCP_NODELAY\s0\fR, and disables the Nagle algorithm. With +this set, any data will be sent as soon as possible instead of being +buffered until there's enough for the socket to send out in one go. +.IP "\s-1BIO_SOCK_REUSEADDR\s0" 4 +.IX Item "BIO_SOCK_REUSEADDR" +Try to reuse the address and port combination for a recently closed +port. +.IP "\s-1BIO_SOCK_V6_ONLY\s0" 4 +.IX Item "BIO_SOCK_V6_ONLY" +When creating an IPv6 socket, make it only listen for IPv6 addresses +and not IPv4 addresses mapped to IPv6. +.PP +These flags are bit flags, so they are to be combined with the +\&\f(CW\*(C`|\*(C'\fR operator, for example: +.PP +.Vb 1 +\& BIO_connect(sock, addr, BIO_SOCK_KEEPALIVE | BIO_SOCK_NONBLOCK); +.Ve +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBBIO_socket()\fR returns the socket number on success or \fB\s-1INVALID_SOCKET\s0\fR +(\-1) on error. When an error has occurred, the OpenSSL error stack +will hold the error data and errno has the system error. +.PP +\&\fBBIO_bind()\fR, \fBBIO_connect()\fR and \fBBIO_listen()\fR return 1 on success or 0 on error. +When an error has occurred, the OpenSSL error stack will hold the error +data and errno has the system error. +.PP +\&\fBBIO_accept_ex()\fR returns the accepted socket on success or +\&\fB\s-1INVALID_SOCKET\s0\fR (\-1) on error. When an error has occurred, the +OpenSSL error stack will hold the error data and errno has the system +error. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\s-1\fBBIO_ADDR\s0\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +\&\fBBIO_gethostname()\fR, \fBBIO_get_port()\fR, \fBBIO_get_host_ip()\fR, +\&\fBBIO_get_accept_socket()\fR and \fBBIO_accept()\fR were deprecated in OpenSSL 1.1.0. +Use the functions described above instead. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2016\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_ctrl.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_ctrl.3 new file mode 100644 index 00000000..5a641f8d --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_ctrl.3 @@ -0,0 +1,263 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "BIO_CTRL 3" +.TH BIO_CTRL 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +BIO_ctrl, BIO_callback_ctrl, BIO_ptr_ctrl, BIO_int_ctrl, BIO_reset, BIO_seek, BIO_tell, BIO_flush, BIO_eof, BIO_set_close, BIO_get_close, BIO_pending, BIO_wpending, BIO_ctrl_pending, BIO_ctrl_wpending, BIO_get_info_callback, BIO_set_info_callback, BIO_info_cb \&\- BIO control operations +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& typedef int BIO_info_cb(BIO *b, int state, int res); +\& +\& long BIO_ctrl(BIO *bp, int cmd, long larg, void *parg); +\& long BIO_callback_ctrl(BIO *b, int cmd, BIO_info_cb *cb); +\& char *BIO_ptr_ctrl(BIO *bp, int cmd, long larg); +\& long BIO_int_ctrl(BIO *bp, int cmd, long larg, int iarg); +\& +\& int BIO_reset(BIO *b); +\& int BIO_seek(BIO *b, int ofs); +\& int BIO_tell(BIO *b); +\& int BIO_flush(BIO *b); +\& int BIO_eof(BIO *b); +\& int BIO_set_close(BIO *b, long flag); +\& int BIO_get_close(BIO *b); +\& int BIO_pending(BIO *b); +\& int BIO_wpending(BIO *b); +\& size_t BIO_ctrl_pending(BIO *b); +\& size_t BIO_ctrl_wpending(BIO *b); +\& +\& int BIO_get_info_callback(BIO *b, BIO_info_cb **cbp); +\& int BIO_set_info_callback(BIO *b, BIO_info_cb *cb); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBBIO_ctrl()\fR, \fBBIO_callback_ctrl()\fR, \fBBIO_ptr_ctrl()\fR and \fBBIO_int_ctrl()\fR +are \s-1BIO\s0 \*(L"control\*(R" operations taking arguments of various types. +These functions are not normally called directly, various macros +are used instead. The standard macros are described below, macros +specific to a particular type of \s-1BIO\s0 are described in the specific +BIOs manual page as well as any special features of the standard +calls. +.PP +\&\fBBIO_reset()\fR typically resets a \s-1BIO\s0 to some initial state, in the case +of file related BIOs for example it rewinds the file pointer to the +start of the file. +.PP +\&\fBBIO_seek()\fR resets a file related \s-1BIO\s0's (that is file descriptor and +\&\s-1FILE\s0 BIOs) file position pointer to \fBofs\fR bytes from start of file. +.PP +\&\fBBIO_tell()\fR returns the current file position of a file related \s-1BIO.\s0 +.PP +\&\fBBIO_flush()\fR normally writes out any internally buffered data, in some +cases it is used to signal \s-1EOF\s0 and that no more data will be written. +.PP +\&\fBBIO_eof()\fR returns 1 if the \s-1BIO\s0 has read \s-1EOF,\s0 the precise meaning of +\&\*(L"\s-1EOF\*(R"\s0 varies according to the \s-1BIO\s0 type. +.PP +\&\fBBIO_set_close()\fR sets the \s-1BIO\s0 \fBb\fR close flag to \fBflag\fR. \fBflag\fR can +take the value \s-1BIO_CLOSE\s0 or \s-1BIO_NOCLOSE.\s0 Typically \s-1BIO_CLOSE\s0 is used +in a source/sink \s-1BIO\s0 to indicate that the underlying I/O stream should +be closed when the \s-1BIO\s0 is freed. +.PP +\&\fBBIO_get_close()\fR returns the BIOs close flag. +.PP +\&\fBBIO_pending()\fR, \fBBIO_ctrl_pending()\fR, \fBBIO_wpending()\fR and \fBBIO_ctrl_wpending()\fR +return the number of pending characters in the BIOs read and write buffers. +Not all BIOs support these calls. \fBBIO_ctrl_pending()\fR and \fBBIO_ctrl_wpending()\fR +return a size_t type and are functions, \fBBIO_pending()\fR and \fBBIO_wpending()\fR are +macros which call \fBBIO_ctrl()\fR. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBBIO_reset()\fR normally returns 1 for success and 0 or \-1 for failure. File +BIOs are an exception, they return 0 for success and \-1 for failure. +.PP +\&\fBBIO_seek()\fR and \fBBIO_tell()\fR both return the current file position on success +and \-1 for failure, except file BIOs which for \fBBIO_seek()\fR always return 0 +for success and \-1 for failure. +.PP +\&\fBBIO_flush()\fR returns 1 for success and 0 or \-1 for failure. +.PP +\&\fBBIO_eof()\fR returns 1 if \s-1EOF\s0 has been reached 0 otherwise. +.PP +\&\fBBIO_set_close()\fR always returns 1. +.PP +\&\fBBIO_get_close()\fR returns the close flag value: \s-1BIO_CLOSE\s0 or \s-1BIO_NOCLOSE.\s0 +.PP +\&\fBBIO_pending()\fR, \fBBIO_ctrl_pending()\fR, \fBBIO_wpending()\fR and \fBBIO_ctrl_wpending()\fR +return the amount of pending data. +.SH "NOTES" +.IX Header "NOTES" +\&\fBBIO_flush()\fR, because it can write data may return 0 or \-1 indicating +that the call should be retried later in a similar manner to \fBBIO_write_ex()\fR. +The \fBBIO_should_retry()\fR call should be used and appropriate action taken +is the call fails. +.PP +The return values of \fBBIO_pending()\fR and \fBBIO_wpending()\fR may not reliably +determine the amount of pending data in all cases. For example in the +case of a file \s-1BIO\s0 some data may be available in the \s-1FILE\s0 structures +internal buffers but it is not possible to determine this in a +portably way. For other types of \s-1BIO\s0 they may not be supported. +.PP +Filter BIOs if they do not internally handle a particular \fBBIO_ctrl()\fR +operation usually pass the operation to the next \s-1BIO\s0 in the chain. +This often means there is no need to locate the required \s-1BIO\s0 for +a particular operation, it can be called on a chain and it will +be automatically passed to the relevant \s-1BIO.\s0 However this can cause +unexpected results: for example no current filter BIOs implement +\&\fBBIO_seek()\fR, but this may still succeed if the chain ends in a \s-1FILE\s0 +or file descriptor \s-1BIO.\s0 +.PP +Source/sink BIOs return an 0 if they do not recognize the \fBBIO_ctrl()\fR +operation. +.SH "BUGS" +.IX Header "BUGS" +Some of the return values are ambiguous and care should be taken. In +particular a return value of 0 can be returned if an operation is not +supported, if an error occurred, if \s-1EOF\s0 has not been reached and in +the case of \fBBIO_seek()\fR on a file \s-1BIO\s0 for a successful operation. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_f_base64.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_f_base64.3 new file mode 100644 index 00000000..c08d55d1 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_f_base64.3 @@ -0,0 +1,223 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "BIO_F_BASE64 3" +.TH BIO_F_BASE64 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +BIO_f_base64 \- base64 BIO filter +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 2 +\& #include +\& #include +\& +\& const BIO_METHOD *BIO_f_base64(void); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBBIO_f_base64()\fR returns the base64 \s-1BIO\s0 method. This is a filter +\&\s-1BIO\s0 that base64 encodes any data written through it and decodes +any data read through it. +.PP +Base64 BIOs do not support \fBBIO_gets()\fR or \fBBIO_puts()\fR. +.PP +\&\fBBIO_flush()\fR on a base64 \s-1BIO\s0 that is being written through is +used to signal that no more data is to be encoded: this is used +to flush the final block through the \s-1BIO.\s0 +.PP +The flag \s-1BIO_FLAGS_BASE64_NO_NL\s0 can be set with \fBBIO_set_flags()\fR +to encode the data all on one line or expect the data to be all +on one line. +.SH "NOTES" +.IX Header "NOTES" +Because of the format of base64 encoding the end of the encoded +block cannot always be reliably determined. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBBIO_f_base64()\fR returns the base64 \s-1BIO\s0 method. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +Base64 encode the string \*(L"Hello World\en\*(R" and write the result +to standard output: +.PP +.Vb 2 +\& BIO *bio, *b64; +\& char message[] = "Hello World \en"; +\& +\& b64 = BIO_new(BIO_f_base64()); +\& bio = BIO_new_fp(stdout, BIO_NOCLOSE); +\& BIO_push(b64, bio); +\& BIO_write(b64, message, strlen(message)); +\& BIO_flush(b64); +\& +\& BIO_free_all(b64); +.Ve +.PP +Read Base64 encoded data from standard input and write the decoded +data to standard output: +.PP +.Vb 3 +\& BIO *bio, *b64, *bio_out; +\& char inbuf[512]; +\& int inlen; +\& +\& b64 = BIO_new(BIO_f_base64()); +\& bio = BIO_new_fp(stdin, BIO_NOCLOSE); +\& bio_out = BIO_new_fp(stdout, BIO_NOCLOSE); +\& BIO_push(b64, bio); +\& while ((inlen = BIO_read(b64, inbuf, 512)) > 0) +\& BIO_write(bio_out, inbuf, inlen); +\& +\& BIO_flush(bio_out); +\& BIO_free_all(b64); +.Ve +.SH "BUGS" +.IX Header "BUGS" +The ambiguity of \s-1EOF\s0 in base64 encoded data can cause additional +data following the base64 encoded block to be misinterpreted. +.PP +There should be some way of specifying a test that the \s-1BIO\s0 can perform +to reliably determine \s-1EOF\s0 (for example a \s-1MIME\s0 boundary). +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_f_buffer.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_f_buffer.3 new file mode 100644 index 00000000..696ccb70 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_f_buffer.3 @@ -0,0 +1,227 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "BIO_F_BUFFER 3" +.TH BIO_F_BUFFER 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +BIO_get_buffer_num_lines, BIO_set_read_buffer_size, BIO_set_write_buffer_size, BIO_set_buffer_size, BIO_set_buffer_read_data, BIO_f_buffer \&\- buffering BIO +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& const BIO_METHOD *BIO_f_buffer(void); +\& +\& long BIO_get_buffer_num_lines(BIO *b); +\& long BIO_set_read_buffer_size(BIO *b, long size); +\& long BIO_set_write_buffer_size(BIO *b, long size); +\& long BIO_set_buffer_size(BIO *b, long size); +\& long BIO_set_buffer_read_data(BIO *b, void *buf, long num); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBBIO_f_buffer()\fR returns the buffering \s-1BIO\s0 method. +.PP +Data written to a buffering \s-1BIO\s0 is buffered and periodically written +to the next \s-1BIO\s0 in the chain. Data read from a buffering \s-1BIO\s0 comes from +an internal buffer which is filled from the next \s-1BIO\s0 in the chain. +Both \fBBIO_gets()\fR and \fBBIO_puts()\fR are supported. +.PP +Calling \fBBIO_reset()\fR on a buffering \s-1BIO\s0 clears any buffered data. +.PP +\&\fBBIO_get_buffer_num_lines()\fR returns the number of lines currently buffered. +.PP +\&\fBBIO_set_read_buffer_size()\fR, \fBBIO_set_write_buffer_size()\fR and \fBBIO_set_buffer_size()\fR +set the read, write or both read and write buffer sizes to \fBsize\fR. The initial +buffer size is \s-1DEFAULT_BUFFER_SIZE,\s0 currently 4096. Any attempt to reduce the +buffer size below \s-1DEFAULT_BUFFER_SIZE\s0 is ignored. Any buffered data is cleared +when the buffer is resized. +.PP +\&\fBBIO_set_buffer_read_data()\fR clears the read buffer and fills it with \fBnum\fR +bytes of \fBbuf\fR. If \fBnum\fR is larger than the current buffer size the buffer +is expanded. +.SH "NOTES" +.IX Header "NOTES" +These functions, other than \fBBIO_f_buffer()\fR, are implemented as macros. +.PP +Buffering BIOs implement \fBBIO_read_ex()\fR and \fBBIO_gets()\fR by using +\&\fBBIO_read_ex()\fR operations on the next \s-1BIO\s0 in the chain and storing the +result in an internal buffer, from which bytes are given back to the +caller as appropriate for the call; a \fBBIO_gets()\fR is guaranteed to give +the caller a whole line, and \fBBIO_read_ex()\fR is guaranteed to give the +caller the number of bytes it asks for, unless there's an error or end +of communication is reached in the next \s-1BIO.\s0 By prepending a +buffering \s-1BIO\s0 to a chain it is therefore possible to provide +\&\fBBIO_gets()\fR or exact size \fBBIO_read_ex()\fR functionality if the following +BIOs do not support it. +.PP +Do not add more than one \fBBIO_f_buffer()\fR to a \s-1BIO\s0 chain. The result of +doing so will force a full read of the size of the internal buffer of +the top \fBBIO_f_buffer()\fR, which is 4 KiB at a minimum. +.PP +Data is only written to the next \s-1BIO\s0 in the chain when the write buffer fills +or when \fBBIO_flush()\fR is called. It is therefore important to call \fBBIO_flush()\fR +whenever any pending data should be written such as when removing a buffering +\&\s-1BIO\s0 using \fBBIO_pop()\fR. \fBBIO_flush()\fR may need to be retried if the ultimate +source/sink \s-1BIO\s0 is non blocking. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBBIO_f_buffer()\fR returns the buffering \s-1BIO\s0 method. +.PP +\&\fBBIO_get_buffer_num_lines()\fR returns the number of lines buffered (may be 0). +.PP +\&\fBBIO_set_read_buffer_size()\fR, \fBBIO_set_write_buffer_size()\fR and \fBBIO_set_buffer_size()\fR +return 1 if the buffer was successfully resized or 0 for failure. +.PP +\&\fBBIO_set_buffer_read_data()\fR returns 1 if the data was set correctly or 0 if +there was an error. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBbio\fR\|(7), +\&\fBBIO_reset\fR\|(3), +\&\fBBIO_flush\fR\|(3), +\&\fBBIO_pop\fR\|(3), +\&\fBBIO_ctrl\fR\|(3). +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2020 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_f_cipher.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_f_cipher.3 new file mode 100644 index 00000000..adebf229 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_f_cipher.3 @@ -0,0 +1,211 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "BIO_F_CIPHER 3" +.TH BIO_F_CIPHER 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +BIO_f_cipher, BIO_set_cipher, BIO_get_cipher_status, BIO_get_cipher_ctx \- cipher BIO filter +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 2 +\& #include +\& #include +\& +\& const BIO_METHOD *BIO_f_cipher(void); +\& void BIO_set_cipher(BIO *b, const EVP_CIPHER *cipher, +\& unsigned char *key, unsigned char *iv, int enc); +\& int BIO_get_cipher_status(BIO *b) +\& int BIO_get_cipher_ctx(BIO *b, EVP_CIPHER_CTX **pctx) +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBBIO_f_cipher()\fR returns the cipher \s-1BIO\s0 method. This is a filter +\&\s-1BIO\s0 that encrypts any data written through it, and decrypts any data +read from it. It is a \s-1BIO\s0 wrapper for the cipher routines +\&\fBEVP_CipherInit()\fR, \fBEVP_CipherUpdate()\fR and \fBEVP_CipherFinal()\fR. +.PP +Cipher BIOs do not support \fBBIO_gets()\fR or \fBBIO_puts()\fR. +.PP +\&\fBBIO_flush()\fR on an encryption \s-1BIO\s0 that is being written through is +used to signal that no more data is to be encrypted: this is used +to flush and possibly pad the final block through the \s-1BIO.\s0 +.PP +\&\fBBIO_set_cipher()\fR sets the cipher of \s-1BIO\s0 \fBb\fR to \fBcipher\fR using key \fBkey\fR +and \s-1IV\s0 \fBiv\fR. \fBenc\fR should be set to 1 for encryption and zero for +decryption. +.PP +When reading from an encryption \s-1BIO\s0 the final block is automatically +decrypted and checked when \s-1EOF\s0 is detected. \fBBIO_get_cipher_status()\fR +is a \fBBIO_ctrl()\fR macro which can be called to determine whether the +decryption operation was successful. +.PP +\&\fBBIO_get_cipher_ctx()\fR is a \fBBIO_ctrl()\fR macro which retrieves the internal +\&\s-1BIO\s0 cipher context. The retrieved context can be used in conjunction +with the standard cipher routines to set it up. This is useful when +\&\fBBIO_set_cipher()\fR is not flexible enough for the applications needs. +.SH "NOTES" +.IX Header "NOTES" +When encrypting \fBBIO_flush()\fR \fBmust\fR be called to flush the final block +through the \s-1BIO.\s0 If it is not then the final block will fail a subsequent +decrypt. +.PP +When decrypting an error on the final block is signaled by a zero +return value from the read operation. A successful decrypt followed +by \s-1EOF\s0 will also return zero for the final read. \fBBIO_get_cipher_status()\fR +should be called to determine if the decrypt was successful. +.PP +As always, if \fBBIO_gets()\fR or \fBBIO_puts()\fR support is needed then it can +be achieved by preceding the cipher \s-1BIO\s0 with a buffering \s-1BIO.\s0 +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBBIO_f_cipher()\fR returns the cipher \s-1BIO\s0 method. +.PP +\&\fBBIO_set_cipher()\fR does not return a value. +.PP +\&\fBBIO_get_cipher_status()\fR returns 1 for a successful decrypt and 0 +for failure. +.PP +\&\fBBIO_get_cipher_ctx()\fR currently always returns 1. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_f_md.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_f_md.3 new file mode 100644 index 00000000..c9cb4f11 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_f_md.3 @@ -0,0 +1,295 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "BIO_F_MD 3" +.TH BIO_F_MD 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +BIO_f_md, BIO_set_md, BIO_get_md, BIO_get_md_ctx \- message digest BIO filter +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 2 +\& #include +\& #include +\& +\& const BIO_METHOD *BIO_f_md(void); +\& int BIO_set_md(BIO *b, EVP_MD *md); +\& int BIO_get_md(BIO *b, EVP_MD **mdp); +\& int BIO_get_md_ctx(BIO *b, EVP_MD_CTX **mdcp); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBBIO_f_md()\fR returns the message digest \s-1BIO\s0 method. This is a filter +\&\s-1BIO\s0 that digests any data passed through it, it is a \s-1BIO\s0 wrapper +for the digest routines \fBEVP_DigestInit()\fR, \fBEVP_DigestUpdate()\fR +and \fBEVP_DigestFinal()\fR. +.PP +Any data written or read through a digest \s-1BIO\s0 using \fBBIO_read_ex()\fR and +\&\fBBIO_write_ex()\fR is digested. +.PP +\&\fBBIO_gets()\fR, if its \fBsize\fR parameter is large enough finishes the +digest calculation and returns the digest value. \fBBIO_puts()\fR is +not supported. +.PP +\&\fBBIO_reset()\fR reinitialises a digest \s-1BIO.\s0 +.PP +\&\fBBIO_set_md()\fR sets the message digest of \s-1BIO\s0 \fBb\fR to \fBmd\fR: this +must be called to initialize a digest \s-1BIO\s0 before any data is +passed through it. It is a \fBBIO_ctrl()\fR macro. +.PP +\&\fBBIO_get_md()\fR places the a pointer to the digest BIOs digest method +in \fBmdp\fR, it is a \fBBIO_ctrl()\fR macro. +.PP +\&\fBBIO_get_md_ctx()\fR returns the digest BIOs context into \fBmdcp\fR. +.SH "NOTES" +.IX Header "NOTES" +The context returned by \fBBIO_get_md_ctx()\fR can be used in calls +to \fBEVP_DigestFinal()\fR and also the signature routines \fBEVP_SignFinal()\fR +and \fBEVP_VerifyFinal()\fR. +.PP +The context returned by \fBBIO_get_md_ctx()\fR is an internal context +structure. Changes made to this context will affect the digest +\&\s-1BIO\s0 itself and the context pointer will become invalid when the digest +\&\s-1BIO\s0 is freed. +.PP +After the digest has been retrieved from a digest \s-1BIO\s0 it must be +reinitialized by calling \fBBIO_reset()\fR, or \fBBIO_set_md()\fR before any more +data is passed through it. +.PP +If an application needs to call \fBBIO_gets()\fR or \fBBIO_puts()\fR through +a chain containing digest BIOs then this can be done by prepending +a buffering \s-1BIO.\s0 +.PP +Calling \fBBIO_get_md_ctx()\fR will return the context and initialize the \s-1BIO\s0 +state. This allows applications to initialize the context externally +if the standard calls such as \fBBIO_set_md()\fR are not sufficiently flexible. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBBIO_f_md()\fR returns the digest \s-1BIO\s0 method. +.PP +\&\fBBIO_set_md()\fR, \fBBIO_get_md()\fR and \fBBIO_md_ctx()\fR return 1 for success and +0 for failure. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +The following example creates a \s-1BIO\s0 chain containing an \s-1SHA1\s0 and \s-1MD5\s0 +digest \s-1BIO\s0 and passes the string \*(L"Hello World\*(R" through it. Error +checking has been omitted for clarity. +.PP +.Vb 2 +\& BIO *bio, *mdtmp; +\& char message[] = "Hello World"; +\& +\& bio = BIO_new(BIO_s_null()); +\& mdtmp = BIO_new(BIO_f_md()); +\& BIO_set_md(mdtmp, EVP_sha1()); +\& /* +\& * For BIO_push() we want to append the sink BIO and keep a note of +\& * the start of the chain. +\& */ +\& bio = BIO_push(mdtmp, bio); +\& mdtmp = BIO_new(BIO_f_md()); +\& BIO_set_md(mdtmp, EVP_md5()); +\& bio = BIO_push(mdtmp, bio); +\& /* Note: mdtmp can now be discarded */ +\& BIO_write(bio, message, strlen(message)); +.Ve +.PP +The next example digests data by reading through a chain instead: +.PP +.Vb 3 +\& BIO *bio, *mdtmp; +\& char buf[1024]; +\& int rdlen; +\& +\& bio = BIO_new_file(file, "rb"); +\& mdtmp = BIO_new(BIO_f_md()); +\& BIO_set_md(mdtmp, EVP_sha1()); +\& bio = BIO_push(mdtmp, bio); +\& mdtmp = BIO_new(BIO_f_md()); +\& BIO_set_md(mdtmp, EVP_md5()); +\& bio = BIO_push(mdtmp, bio); +\& do { +\& rdlen = BIO_read(bio, buf, sizeof(buf)); +\& /* Might want to do something with the data here */ +\& } while (rdlen > 0); +.Ve +.PP +This next example retrieves the message digests from a \s-1BIO\s0 chain and +outputs them. This could be used with the examples above. +.PP +.Vb 4 +\& BIO *mdtmp; +\& unsigned char mdbuf[EVP_MAX_MD_SIZE]; +\& int mdlen; +\& int i; +\& +\& mdtmp = bio; /* Assume bio has previously been set up */ +\& do { +\& EVP_MD *md; +\& +\& mdtmp = BIO_find_type(mdtmp, BIO_TYPE_MD); +\& if (!mdtmp) +\& break; +\& BIO_get_md(mdtmp, &md); +\& printf("%s digest", OBJ_nid2sn(EVP_MD_type(md))); +\& mdlen = BIO_gets(mdtmp, mdbuf, EVP_MAX_MD_SIZE); +\& for (i = 0; i < mdlen; i++) printf(":%02X", mdbuf[i]); +\& printf("\en"); +\& mdtmp = BIO_next(mdtmp); +\& } while (mdtmp); +\& +\& BIO_free_all(bio); +.Ve +.SH "BUGS" +.IX Header "BUGS" +The lack of support for \fBBIO_puts()\fR and the non standard behaviour of +\&\fBBIO_gets()\fR could be regarded as anomalous. It could be argued that \fBBIO_gets()\fR +and \fBBIO_puts()\fR should be passed to the next \s-1BIO\s0 in the chain and digest +the data passed through and that digests should be retrieved using a +separate \fBBIO_ctrl()\fR call. +.SH "HISTORY" +.IX Header "HISTORY" +Before OpenSSL 1.0.0., the call to \fBBIO_get_md_ctx()\fR would only work if the +\&\s-1BIO\s0 was initialized first. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_f_null.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_f_null.3 new file mode 100644 index 00000000..177aef4a --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_f_null.3 @@ -0,0 +1,171 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "BIO_F_NULL 3" +.TH BIO_F_NULL 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +BIO_f_null \- null filter +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& const BIO_METHOD *BIO_f_null(void); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBBIO_f_null()\fR returns the null filter \s-1BIO\s0 method. This is a filter \s-1BIO\s0 +that does nothing. +.PP +All requests to a null filter \s-1BIO\s0 are passed through to the next \s-1BIO\s0 in +the chain: this means that a \s-1BIO\s0 chain containing a null filter \s-1BIO\s0 +behaves just as though the \s-1BIO\s0 was not there. +.SH "NOTES" +.IX Header "NOTES" +As may be apparent a null filter \s-1BIO\s0 is not particularly useful. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBBIO_f_null()\fR returns the null filter \s-1BIO\s0 method. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_f_ssl.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_f_ssl.3 new file mode 100644 index 00000000..797b762b --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_f_ssl.3 @@ -0,0 +1,435 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "BIO_F_SSL 3" +.TH BIO_F_SSL 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +BIO_do_handshake, BIO_f_ssl, BIO_set_ssl, BIO_get_ssl, BIO_set_ssl_mode, BIO_set_ssl_renegotiate_bytes, BIO_get_num_renegotiates, BIO_set_ssl_renegotiate_timeout, BIO_new_ssl, BIO_new_ssl_connect, BIO_new_buffer_ssl_connect, BIO_ssl_copy_session_id, BIO_ssl_shutdown \- SSL BIO +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 2 +\& #include +\& #include +\& +\& const BIO_METHOD *BIO_f_ssl(void); +\& +\& long BIO_set_ssl(BIO *b, SSL *ssl, long c); +\& long BIO_get_ssl(BIO *b, SSL **sslp); +\& long BIO_set_ssl_mode(BIO *b, long client); +\& long BIO_set_ssl_renegotiate_bytes(BIO *b, long num); +\& long BIO_set_ssl_renegotiate_timeout(BIO *b, long seconds); +\& long BIO_get_num_renegotiates(BIO *b); +\& +\& BIO *BIO_new_ssl(SSL_CTX *ctx, int client); +\& BIO *BIO_new_ssl_connect(SSL_CTX *ctx); +\& BIO *BIO_new_buffer_ssl_connect(SSL_CTX *ctx); +\& int BIO_ssl_copy_session_id(BIO *to, BIO *from); +\& void BIO_ssl_shutdown(BIO *bio); +\& +\& long BIO_do_handshake(BIO *b); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBBIO_f_ssl()\fR returns the \s-1SSL BIO\s0 method. This is a filter \s-1BIO\s0 which +is a wrapper round the OpenSSL \s-1SSL\s0 routines adding a \s-1BIO\s0 \*(L"flavour\*(R" to +\&\s-1SSL I/O.\s0 +.PP +I/O performed on an \s-1SSL BIO\s0 communicates using the \s-1SSL\s0 protocol with +the SSLs read and write BIOs. If an \s-1SSL\s0 connection is not established +then an attempt is made to establish one on the first I/O call. +.PP +If a \s-1BIO\s0 is appended to an \s-1SSL BIO\s0 using \fBBIO_push()\fR it is automatically +used as the \s-1SSL\s0 BIOs read and write BIOs. +.PP +Calling \fBBIO_reset()\fR on an \s-1SSL BIO\s0 closes down any current \s-1SSL\s0 connection +by calling \fBSSL_shutdown()\fR. \fBBIO_reset()\fR is then sent to the next \s-1BIO\s0 in +the chain: this will typically disconnect the underlying transport. +The \s-1SSL BIO\s0 is then reset to the initial accept or connect state. +.PP +If the close flag is set when an \s-1SSL BIO\s0 is freed then the internal +\&\s-1SSL\s0 structure is also freed using \fBSSL_free()\fR. +.PP +\&\fBBIO_set_ssl()\fR sets the internal \s-1SSL\s0 pointer of \s-1BIO\s0 \fBb\fR to \fBssl\fR using +the close flag \fBc\fR. +.PP +\&\fBBIO_get_ssl()\fR retrieves the \s-1SSL\s0 pointer of \s-1BIO\s0 \fBb\fR, it can then be +manipulated using the standard \s-1SSL\s0 library functions. +.PP +\&\fBBIO_set_ssl_mode()\fR sets the \s-1SSL BIO\s0 mode to \fBclient\fR. If \fBclient\fR +is 1 client mode is set. If \fBclient\fR is 0 server mode is set. +.PP +\&\fBBIO_set_ssl_renegotiate_bytes()\fR sets the renegotiate byte count +to \fBnum\fR. When set after every \fBnum\fR bytes of I/O (read and write) +the \s-1SSL\s0 session is automatically renegotiated. \fBnum\fR must be at +least 512 bytes. +.PP +\&\fBBIO_set_ssl_renegotiate_timeout()\fR sets the renegotiate timeout to +\&\fBseconds\fR. When the renegotiate timeout elapses the session is +automatically renegotiated. +.PP +\&\fBBIO_get_num_renegotiates()\fR returns the total number of session +renegotiations due to I/O or timeout. +.PP +\&\fBBIO_new_ssl()\fR allocates an \s-1SSL BIO\s0 using \s-1SSL_CTX\s0 \fBctx\fR and using +client mode if \fBclient\fR is non zero. +.PP +\&\fBBIO_new_ssl_connect()\fR creates a new \s-1BIO\s0 chain consisting of an +\&\s-1SSL BIO\s0 (using \fBctx\fR) followed by a connect \s-1BIO.\s0 +.PP +\&\fBBIO_new_buffer_ssl_connect()\fR creates a new \s-1BIO\s0 chain consisting +of a buffering \s-1BIO,\s0 an \s-1SSL BIO\s0 (using \fBctx\fR) and a connect +\&\s-1BIO.\s0 +.PP +\&\fBBIO_ssl_copy_session_id()\fR copies an \s-1SSL\s0 session id between +\&\s-1BIO\s0 chains \fBfrom\fR and \fBto\fR. It does this by locating the +\&\s-1SSL\s0 BIOs in each chain and calling \fBSSL_copy_session_id()\fR on +the internal \s-1SSL\s0 pointer. +.PP +\&\fBBIO_ssl_shutdown()\fR closes down an \s-1SSL\s0 connection on \s-1BIO\s0 +chain \fBbio\fR. It does this by locating the \s-1SSL BIO\s0 in the +chain and calling \fBSSL_shutdown()\fR on its internal \s-1SSL\s0 +pointer. +.PP +\&\fBBIO_do_handshake()\fR attempts to complete an \s-1SSL\s0 handshake on the +supplied \s-1BIO\s0 and establish the \s-1SSL\s0 connection. It returns 1 +if the connection was established successfully. A zero or negative +value is returned if the connection could not be established, the +call \fBBIO_should_retry()\fR should be used for non blocking connect BIOs +to determine if the call should be retried. If an \s-1SSL\s0 connection has +already been established this call has no effect. +.SH "NOTES" +.IX Header "NOTES" +\&\s-1SSL\s0 BIOs are exceptional in that if the underlying transport +is non blocking they can still request a retry in exceptional +circumstances. Specifically this will happen if a session +renegotiation takes place during a \fBBIO_read_ex()\fR operation, one +case where this happens is when step up occurs. +.PP +The \s-1SSL\s0 flag \s-1SSL_AUTO_RETRY\s0 can be +set to disable this behaviour. That is when this flag is set +an \s-1SSL BIO\s0 using a blocking transport will never request a +retry. +.PP +Since unknown \fBBIO_ctrl()\fR operations are sent through filter +BIOs the servers name and port can be set using \fBBIO_set_host()\fR +on the \s-1BIO\s0 returned by \fBBIO_new_ssl_connect()\fR without having +to locate the connect \s-1BIO\s0 first. +.PP +Applications do not have to call \fBBIO_do_handshake()\fR but may wish +to do so to separate the handshake process from other I/O +processing. +.PP +\&\fBBIO_set_ssl()\fR, \fBBIO_get_ssl()\fR, \fBBIO_set_ssl_mode()\fR, +\&\fBBIO_set_ssl_renegotiate_bytes()\fR, \fBBIO_set_ssl_renegotiate_timeout()\fR, +\&\fBBIO_get_num_renegotiates()\fR, and \fBBIO_do_handshake()\fR are implemented as macros. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBBIO_f_ssl()\fR returns the \s-1SSL\s0 \fB\s-1BIO_METHOD\s0\fR structure. +.PP +\&\fBBIO_set_ssl()\fR, \fBBIO_get_ssl()\fR, \fBBIO_set_ssl_mode()\fR, \fBBIO_set_ssl_renegotiate_bytes()\fR, +\&\fBBIO_set_ssl_renegotiate_timeout()\fR and \fBBIO_get_num_renegotiates()\fR return 1 on +success or a value which is less than or equal to 0 if an error occurred. +.PP +\&\fBBIO_new_ssl()\fR, \fBBIO_new_ssl_connect()\fR and \fBBIO_new_buffer_ssl_connect()\fR return +a valid \fB\s-1BIO\s0\fR structure on success or \fB\s-1NULL\s0\fR if an error occurred. +.PP +\&\fBBIO_ssl_copy_session_id()\fR returns 1 on success or 0 on error. +.PP +\&\fBBIO_do_handshake()\fR returns 1 if the connection was established successfully. +A zero or negative value is returned if the connection could not be established. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +This \s-1SSL/TLS\s0 client example attempts to retrieve a page from an +\&\s-1SSL/TLS\s0 web server. The I/O routines are identical to those of the +unencrypted example in \fBBIO_s_connect\fR\|(3). +.PP +.Vb 5 +\& BIO *sbio, *out; +\& int len; +\& char tmpbuf[1024]; +\& SSL_CTX *ctx; +\& SSL *ssl; +\& +\& /* XXX Seed the PRNG if needed. */ +\& +\& ctx = SSL_CTX_new(TLS_client_method()); +\& +\& /* XXX Set verify paths and mode here. */ +\& +\& sbio = BIO_new_ssl_connect(ctx); +\& BIO_get_ssl(sbio, &ssl); +\& if (ssl == NULL) { +\& fprintf(stderr, "Can\*(Aqt locate SSL pointer\en"); +\& ERR_print_errors_fp(stderr); +\& exit(1); +\& } +\& +\& /* Don\*(Aqt want any retries */ +\& SSL_set_mode(ssl, SSL_MODE_AUTO_RETRY); +\& +\& /* XXX We might want to do other things with ssl here */ +\& +\& /* An empty host part means the loopback address */ +\& BIO_set_conn_hostname(sbio, ":https"); +\& +\& out = BIO_new_fp(stdout, BIO_NOCLOSE); +\& if (BIO_do_connect(sbio) <= 0) { +\& fprintf(stderr, "Error connecting to server\en"); +\& ERR_print_errors_fp(stderr); +\& exit(1); +\& } +\& if (BIO_do_handshake(sbio) <= 0) { +\& fprintf(stderr, "Error establishing SSL connection\en"); +\& ERR_print_errors_fp(stderr); +\& exit(1); +\& } +\& +\& /* XXX Could examine ssl here to get connection info */ +\& +\& BIO_puts(sbio, "GET / HTTP/1.0\en\en"); +\& for (;;) { +\& len = BIO_read(sbio, tmpbuf, 1024); +\& if (len <= 0) +\& break; +\& BIO_write(out, tmpbuf, len); +\& } +\& BIO_free_all(sbio); +\& BIO_free(out); +.Ve +.PP +Here is a simple server example. It makes use of a buffering +\&\s-1BIO\s0 to allow lines to be read from the \s-1SSL BIO\s0 using BIO_gets. +It creates a pseudo web page containing the actual request from +a client and also echoes the request to standard output. +.PP +.Vb 5 +\& BIO *sbio, *bbio, *acpt, *out; +\& int len; +\& char tmpbuf[1024]; +\& SSL_CTX *ctx; +\& SSL *ssl; +\& +\& /* XXX Seed the PRNG if needed. */ +\& +\& ctx = SSL_CTX_new(TLS_server_method()); +\& if (!SSL_CTX_use_certificate_file(ctx, "server.pem", SSL_FILETYPE_PEM) +\& || !SSL_CTX_use_PrivateKey_file(ctx, "server.pem", SSL_FILETYPE_PEM) +\& || !SSL_CTX_check_private_key(ctx)) { +\& fprintf(stderr, "Error setting up SSL_CTX\en"); +\& ERR_print_errors_fp(stderr); +\& exit(1); +\& } +\& +\& /* XXX Other things like set verify locations, EDH temp callbacks. */ +\& +\& /* New SSL BIO setup as server */ +\& sbio = BIO_new_ssl(ctx, 0); +\& BIO_get_ssl(sbio, &ssl); +\& if (ssl == NULL) { +\& fprintf(stderr, "Can\*(Aqt locate SSL pointer\en"); +\& ERR_print_errors_fp(stderr); +\& exit(1); +\& } +\& +\& SSL_set_mode(ssl, SSL_MODE_AUTO_RETRY); +\& bbio = BIO_new(BIO_f_buffer()); +\& sbio = BIO_push(bbio, sbio); +\& acpt = BIO_new_accept("4433"); +\& +\& /* +\& * By doing this when a new connection is established +\& * we automatically have sbio inserted into it. The +\& * BIO chain is now \*(Aqswallowed\*(Aq by the accept BIO and +\& * will be freed when the accept BIO is freed. +\& */ +\& BIO_set_accept_bios(acpt, sbio); +\& out = BIO_new_fp(stdout, BIO_NOCLOSE); +\& +\& /* Setup accept BIO */ +\& if (BIO_do_accept(acpt) <= 0) { +\& fprintf(stderr, "Error setting up accept BIO\en"); +\& ERR_print_errors_fp(stderr); +\& exit(1); +\& } +\& +\& /* We only want one connection so remove and free accept BIO */ +\& sbio = BIO_pop(acpt); +\& BIO_free_all(acpt); +\& +\& if (BIO_do_handshake(sbio) <= 0) { +\& fprintf(stderr, "Error in SSL handshake\en"); +\& ERR_print_errors_fp(stderr); +\& exit(1); +\& } +\& +\& BIO_puts(sbio, "HTTP/1.0 200 OK\er\enContent\-type: text/plain\er\en\er\en"); +\& BIO_puts(sbio, "\er\enConnection Established\er\enRequest headers:\er\en"); +\& BIO_puts(sbio, "\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\er\en"); +\& +\& for (;;) { +\& len = BIO_gets(sbio, tmpbuf, 1024); +\& if (len <= 0) +\& break; +\& BIO_write(sbio, tmpbuf, len); +\& BIO_write(out, tmpbuf, len); +\& /* Look for blank line signifying end of headers*/ +\& if (tmpbuf[0] == \*(Aq\er\*(Aq || tmpbuf[0] == \*(Aq\en\*(Aq) +\& break; +\& } +\& +\& BIO_puts(sbio, "\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\er\en"); +\& BIO_puts(sbio, "\er\en"); +\& BIO_flush(sbio); +\& BIO_free_all(sbio); +.Ve +.SH "HISTORY" +.IX Header "HISTORY" +In OpenSSL before 1.0.0 the \fBBIO_pop()\fR call was handled incorrectly, +the I/O \s-1BIO\s0 reference count was incorrectly incremented (instead of +decremented) and dissociated with the \s-1SSL BIO\s0 even if the \s-1SSL BIO\s0 was not +explicitly being popped (e.g. a pop higher up the chain). Applications which +included workarounds for this bug (e.g. freeing BIOs more than once) should +be modified to handle this fix or they may free up an already freed \s-1BIO.\s0 +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_find_type.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_find_type.3 new file mode 100644 index 00000000..2ec0d108 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_find_type.3 @@ -0,0 +1,203 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "BIO_FIND_TYPE 3" +.TH BIO_FIND_TYPE 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +BIO_find_type, BIO_next, BIO_method_type \- BIO chain traversal +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& BIO *BIO_find_type(BIO *b, int bio_type); +\& BIO *BIO_next(BIO *b); +\& int BIO_method_type(const BIO *b); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fBBIO_find_type()\fR searches for a \s-1BIO\s0 of a given type in a chain, starting +at \s-1BIO\s0 \fBb\fR. If \fBtype\fR is a specific type (such as \fB\s-1BIO_TYPE_MEM\s0\fR) then a search +is made for a \s-1BIO\s0 of that type. If \fBtype\fR is a general type (such as +\&\fB\s-1BIO_TYPE_SOURCE_SINK\s0\fR) then the next matching \s-1BIO\s0 of the given general type is +searched for. \fBBIO_find_type()\fR returns the next matching \s-1BIO\s0 or \s-1NULL\s0 if none is +found. +.PP +The following general types are defined: +\&\fB\s-1BIO_TYPE_DESCRIPTOR\s0\fR, \fB\s-1BIO_TYPE_FILTER\s0\fR, and \fB\s-1BIO_TYPE_SOURCE_SINK\s0\fR. +.PP +For a list of the specific types, see the \fBopenssl/bio.h\fR header file. +.PP +\&\fBBIO_next()\fR returns the next \s-1BIO\s0 in a chain. It can be used to traverse all BIOs +in a chain or used in conjunction with \fBBIO_find_type()\fR to find all BIOs of a +certain type. +.PP +\&\fBBIO_method_type()\fR returns the type of a \s-1BIO.\s0 +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBBIO_find_type()\fR returns a matching \s-1BIO\s0 or \s-1NULL\s0 for no match. +.PP +\&\fBBIO_next()\fR returns the next \s-1BIO\s0 in a chain. +.PP +\&\fBBIO_method_type()\fR returns the type of the \s-1BIO\s0 \fBb\fR. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +Traverse a chain looking for digest BIOs: +.PP +.Vb 1 +\& BIO *btmp; +\& +\& btmp = in_bio; /* in_bio is chain to search through */ +\& do { +\& btmp = BIO_find_type(btmp, BIO_TYPE_MD); +\& if (btmp == NULL) +\& break; /* Not found */ +\& /* btmp is a digest BIO, do something with it ...*/ +\& ... +\& +\& btmp = BIO_next(btmp); +\& } while (btmp); +.Ve +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_get_data.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_get_data.3 new file mode 100644 index 00000000..949d5223 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_get_data.3 @@ -0,0 +1,195 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "BIO_GET_DATA 3" +.TH BIO_GET_DATA 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +BIO_set_data, BIO_get_data, BIO_set_init, BIO_get_init, BIO_set_shutdown, BIO_get_shutdown \- functions for managing BIO state information +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& void BIO_set_data(BIO *a, void *ptr); +\& void *BIO_get_data(BIO *a); +\& void BIO_set_init(BIO *a, int init); +\& int BIO_get_init(BIO *a); +\& void BIO_set_shutdown(BIO *a, int shut); +\& int BIO_get_shutdown(BIO *a); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +These functions are mainly useful when implementing a custom \s-1BIO.\s0 +.PP +The \fBBIO_set_data()\fR function associates the custom data pointed to by \fBptr\fR with +the \s-1BIO.\s0 This data can subsequently be retrieved via a call to \fBBIO_get_data()\fR. +This can be used by custom BIOs for storing implementation specific information. +.PP +The \fBBIO_set_init()\fR function sets the value of the \s-1BIO\s0's \*(L"init\*(R" flag to indicate +whether initialisation has been completed for this \s-1BIO\s0 or not. A non-zero value +indicates that initialisation is complete, whilst zero indicates that it is not. +Often initialisation will complete during initial construction of the \s-1BIO.\s0 For +some BIOs however, initialisation may not complete until after additional steps +have occurred (for example through calling custom ctrls). The \fBBIO_get_init()\fR +function returns the value of the \*(L"init\*(R" flag. +.PP +The \fBBIO_set_shutdown()\fR and \fBBIO_get_shutdown()\fR functions set and get the state of +this \s-1BIO\s0's shutdown (i.e. \s-1BIO_CLOSE\s0) flag. If set then the underlying resource +is also closed when the \s-1BIO\s0 is freed. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBBIO_get_data()\fR returns a pointer to the implementation specific custom data +associated with this \s-1BIO,\s0 or \s-1NULL\s0 if none has been set. +.PP +\&\fBBIO_get_init()\fR returns the state of the \s-1BIO\s0's init flag. +.PP +\&\fBBIO_get_shutdown()\fR returns the stat of the \s-1BIO\s0's shutdown (i.e. \s-1BIO_CLOSE\s0) flag. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +bio, BIO_meth_new +.SH "HISTORY" +.IX Header "HISTORY" +The functions described here were added in OpenSSL 1.1.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_get_ex_new_index.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_get_ex_new_index.3 new file mode 100644 index 00000000..532d0414 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_get_ex_new_index.3 @@ -0,0 +1,191 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "BIO_GET_EX_NEW_INDEX 3" +.TH BIO_GET_EX_NEW_INDEX 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +BIO_get_ex_new_index, BIO_set_ex_data, BIO_get_ex_data, ENGINE_get_ex_new_index, ENGINE_set_ex_data, ENGINE_get_ex_data, UI_get_ex_new_index, UI_set_ex_data, UI_get_ex_data, X509_get_ex_new_index, X509_set_ex_data, X509_get_ex_data, X509_STORE_get_ex_new_index, X509_STORE_set_ex_data, X509_STORE_get_ex_data, X509_STORE_CTX_get_ex_new_index, X509_STORE_CTX_set_ex_data, X509_STORE_CTX_get_ex_data, DH_get_ex_new_index, DH_set_ex_data, DH_get_ex_data, DSA_get_ex_new_index, DSA_set_ex_data, DSA_get_ex_data, ECDH_get_ex_new_index, ECDH_set_ex_data, ECDH_get_ex_data, EC_KEY_get_ex_new_index, EC_KEY_set_ex_data, EC_KEY_get_ex_data, RSA_get_ex_new_index, RSA_set_ex_data, RSA_get_ex_data \&\- application\-specific data +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int TYPE_get_ex_new_index(long argl, void *argp, +\& CRYPTO_EX_new *new_func, +\& CRYPTO_EX_dup *dup_func, +\& CRYPTO_EX_free *free_func); +\& +\& int TYPE_set_ex_data(TYPE *d, int idx, void *arg); +\& +\& void *TYPE_get_ex_data(TYPE *d, int idx); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +In the description here, \fI\s-1TYPE\s0\fR is used a placeholder +for any of the OpenSSL datatypes listed in +\&\fBCRYPTO_get_ex_new_index\fR\|(3). +.PP +These functions handle application-specific data for OpenSSL data +structures. +.PP +\&\fBTYPE_get_ex_new_index()\fR is a macro that calls \fBCRYPTO_get_ex_new_index()\fR +with the correct \fBindex\fR value. +.PP +\&\fBTYPE_set_ex_data()\fR is a function that calls \fBCRYPTO_set_ex_data()\fR with +an offset into the opaque exdata part of the \s-1TYPE\s0 object. +.PP +\&\fBTYPE_get_ex_data()\fR is a function that calls \fBCRYPTO_get_ex_data()\fR with +an offset into the opaque exdata part of the \s-1TYPE\s0 object. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBTYPE_get_ex_new_index()\fR returns a new index on success or \-1 on error. +.PP +\&\fBTYPE_set_ex_data()\fR returns 1 on success or 0 on error. +.PP +\&\fBTYPE_get_ex_data()\fR returns the application data or \s-1NULL\s0 if an error occurred. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBCRYPTO_get_ex_new_index\fR\|(3). +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2015\-2020 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_meth_new.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_meth_new.3 new file mode 100644 index 00000000..afef7268 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_meth_new.3 @@ -0,0 +1,288 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "BIO_METH_NEW 3" +.TH BIO_METH_NEW 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +BIO_get_new_index, BIO_meth_new, BIO_meth_free, BIO_meth_get_read_ex, BIO_meth_set_read_ex, BIO_meth_get_write_ex, BIO_meth_set_write_ex, BIO_meth_get_write, BIO_meth_set_write, BIO_meth_get_read, BIO_meth_set_read, BIO_meth_get_puts, BIO_meth_set_puts, BIO_meth_get_gets, BIO_meth_set_gets, BIO_meth_get_ctrl, BIO_meth_set_ctrl, BIO_meth_get_create, BIO_meth_set_create, BIO_meth_get_destroy, BIO_meth_set_destroy, BIO_meth_get_callback_ctrl, BIO_meth_set_callback_ctrl \- Routines to build up BIO methods +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int BIO_get_new_index(void); +\& +\& BIO_METHOD *BIO_meth_new(int type, const char *name); +\& +\& void BIO_meth_free(BIO_METHOD *biom); +\& +\& int (*BIO_meth_get_write_ex(const BIO_METHOD *biom))(BIO *, const char *, size_t, +\& size_t *); +\& int (*BIO_meth_get_write(const BIO_METHOD *biom))(BIO *, const char *, int); +\& int BIO_meth_set_write_ex(BIO_METHOD *biom, +\& int (*bwrite)(BIO *, const char *, size_t, size_t *)); +\& int BIO_meth_set_write(BIO_METHOD *biom, +\& int (*write)(BIO *, const char *, int)); +\& +\& int (*BIO_meth_get_read_ex(const BIO_METHOD *biom))(BIO *, char *, size_t, size_t *); +\& int (*BIO_meth_get_read(const BIO_METHOD *biom))(BIO *, char *, int); +\& int BIO_meth_set_read_ex(BIO_METHOD *biom, +\& int (*bread)(BIO *, char *, size_t, size_t *)); +\& int BIO_meth_set_read(BIO_METHOD *biom, int (*read)(BIO *, char *, int)); +\& +\& int (*BIO_meth_get_puts(const BIO_METHOD *biom))(BIO *, const char *); +\& int BIO_meth_set_puts(BIO_METHOD *biom, int (*puts)(BIO *, const char *)); +\& +\& int (*BIO_meth_get_gets(const BIO_METHOD *biom))(BIO *, char *, int); +\& int BIO_meth_set_gets(BIO_METHOD *biom, +\& int (*gets)(BIO *, char *, int)); +\& +\& long (*BIO_meth_get_ctrl(const BIO_METHOD *biom))(BIO *, int, long, void *); +\& int BIO_meth_set_ctrl(BIO_METHOD *biom, +\& long (*ctrl)(BIO *, int, long, void *)); +\& +\& int (*BIO_meth_get_create(const BIO_METHOD *bion))(BIO *); +\& int BIO_meth_set_create(BIO_METHOD *biom, int (*create)(BIO *)); +\& +\& int (*BIO_meth_get_destroy(const BIO_METHOD *biom))(BIO *); +\& int BIO_meth_set_destroy(BIO_METHOD *biom, int (*destroy)(BIO *)); +\& +\& long (*BIO_meth_get_callback_ctrl(const BIO_METHOD *biom))(BIO *, int, BIO_info_cb *); +\& int BIO_meth_set_callback_ctrl(BIO_METHOD *biom, +\& long (*callback_ctrl)(BIO *, int, BIO_info_cb *)); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fB\s-1BIO_METHOD\s0\fR type is a structure used for the implementation of new \s-1BIO\s0 +types. It provides a set of functions used by OpenSSL for the implementation +of the various \s-1BIO\s0 capabilities. See the bio page for more information. +.PP +\&\fBBIO_meth_new()\fR creates a new \fB\s-1BIO_METHOD\s0\fR structure. It should be given a +unique integer \fBtype\fR and a string that represents its \fBname\fR. +Use \fBBIO_get_new_index()\fR to get the value for \fBtype\fR. +.PP +The set of +standard OpenSSL provided \s-1BIO\s0 types is provided in \fBbio.h\fR. Some examples +include \fB\s-1BIO_TYPE_BUFFER\s0\fR and \fB\s-1BIO_TYPE_CIPHER\s0\fR. Filter BIOs should have a +type which have the \*(L"filter\*(R" bit set (\fB\s-1BIO_TYPE_FILTER\s0\fR). Source/sink BIOs +should have the \*(L"source/sink\*(R" bit set (\fB\s-1BIO_TYPE_SOURCE_SINK\s0\fR). File descriptor +based BIOs (e.g. socket, fd, connect, accept etc) should additionally have the +\&\*(L"descriptor\*(R" bit set (\fB\s-1BIO_TYPE_DESCRIPTOR\s0\fR). See the BIO_find_type page for +more information. +.PP +\&\fBBIO_meth_free()\fR destroys a \fB\s-1BIO_METHOD\s0\fR structure and frees up any memory +associated with it. +.PP +\&\fBBIO_meth_get_write_ex()\fR and \fBBIO_meth_set_write_ex()\fR get and set the function +used for writing arbitrary length data to the \s-1BIO\s0 respectively. This function +will be called in response to the application calling \fBBIO_write_ex()\fR or +\&\fBBIO_write()\fR. The parameters for the function have the same meaning as for +\&\fBBIO_write_ex()\fR. Older code may call \fBBIO_meth_get_write()\fR and +\&\fBBIO_meth_set_write()\fR instead. Applications should not call both +\&\fBBIO_meth_set_write_ex()\fR and \fBBIO_meth_set_write()\fR or call \fBBIO_meth_get_write()\fR +when the function was set with \fBBIO_meth_set_write_ex()\fR. +.PP +\&\fBBIO_meth_get_read_ex()\fR and \fBBIO_meth_set_read_ex()\fR get and set the function used +for reading arbitrary length data from the \s-1BIO\s0 respectively. This function will +be called in response to the application calling \fBBIO_read_ex()\fR or \fBBIO_read()\fR. +The parameters for the function have the same meaning as for \fBBIO_read_ex()\fR. +Older code may call \fBBIO_meth_get_read()\fR and \fBBIO_meth_set_read()\fR instead. +Applications should not call both \fBBIO_meth_set_read_ex()\fR and \fBBIO_meth_set_read()\fR +or call \fBBIO_meth_get_read()\fR when the function was set with +\&\fBBIO_meth_set_read_ex()\fR. +.PP +\&\fBBIO_meth_get_puts()\fR and \fBBIO_meth_set_puts()\fR get and set the function used for +writing a \s-1NULL\s0 terminated string to the \s-1BIO\s0 respectively. This function will be +called in response to the application calling \fBBIO_puts()\fR. The parameters for +the function have the same meaning as for \fBBIO_puts()\fR. +.PP +\&\fBBIO_meth_get_gets()\fR and \fBBIO_meth_set_gets()\fR get and set the function typically +used for reading a line of data from the \s-1BIO\s0 respectively (see the \fBBIO_gets\fR\|(3) +page for more information). This function will be called in response to the +application calling \fBBIO_gets()\fR. The parameters for the function have the same +meaning as for \fBBIO_gets()\fR. +.PP +\&\fBBIO_meth_get_ctrl()\fR and \fBBIO_meth_set_ctrl()\fR get and set the function used for +processing ctrl messages in the \s-1BIO\s0 respectively. See the BIO_ctrl page for +more information. This function will be called in response to the application +calling \fBBIO_ctrl()\fR. The parameters for the function have the same meaning as for +\&\fBBIO_ctrl()\fR. +.PP +\&\fBBIO_meth_get_create()\fR and \fBBIO_meth_set_create()\fR get and set the function used +for creating a new instance of the \s-1BIO\s0 respectively. This function will be +called in response to the application calling \fBBIO_new()\fR and passing +in a pointer to the current \s-1BIO_METHOD.\s0 The \fBBIO_new()\fR function will allocate the +memory for the new \s-1BIO,\s0 and a pointer to this newly allocated structure will +be passed as a parameter to the function. +.PP +\&\fBBIO_meth_get_destroy()\fR and \fBBIO_meth_set_destroy()\fR get and set the function used +for destroying an instance of a \s-1BIO\s0 respectively. This function will be +called in response to the application calling \fBBIO_free()\fR. A pointer to the \s-1BIO\s0 +to be destroyed is passed as a parameter. The destroy function should be used +for \s-1BIO\s0 specific clean up. The memory for the \s-1BIO\s0 itself should not be freed by +this function. +.PP +\&\fBBIO_meth_get_callback_ctrl()\fR and \fBBIO_meth_set_callback_ctrl()\fR get and set the +function used for processing callback ctrl messages in the \s-1BIO\s0 respectively. See +the \fBBIO_callback_ctrl\fR\|(3) page for more information. This function will be called +in response to the application calling \fBBIO_callback_ctrl()\fR. The parameters for +the function have the same meaning as for \fBBIO_callback_ctrl()\fR. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBBIO_get_new_index()\fR returns the new \s-1BIO\s0 type value or \-1 if an error occurred. +.PP +BIO_meth_new(int type, const char *name) returns a valid \fB\s-1BIO_METHOD\s0\fR or \s-1NULL\s0 +if an error occurred. +.PP +The \fBBIO_meth_set\fR functions return 1 on success or 0 on error. +.PP +The \fBBIO_meth_get\fR functions return the corresponding function pointers. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +bio, BIO_find_type, BIO_ctrl, BIO_read_ex, BIO_new +.SH "HISTORY" +.IX Header "HISTORY" +The functions described here were added in OpenSSL 1.1.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2016\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_new.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_new.3 new file mode 100644 index 00000000..a2f9290d --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_new.3 @@ -0,0 +1,202 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "BIO_NEW 3" +.TH BIO_NEW 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +BIO_new, BIO_up_ref, BIO_free, BIO_vfree, BIO_free_all \&\- BIO allocation and freeing functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& BIO * BIO_new(const BIO_METHOD *type); +\& int BIO_up_ref(BIO *a); +\& int BIO_free(BIO *a); +\& void BIO_vfree(BIO *a); +\& void BIO_free_all(BIO *a); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fBBIO_new()\fR function returns a new \s-1BIO\s0 using method \fBtype\fR. +.PP +\&\fBBIO_up_ref()\fR increments the reference count associated with the \s-1BIO\s0 object. +.PP +\&\fBBIO_free()\fR frees up a single \s-1BIO,\s0 \fBBIO_vfree()\fR also frees up a single \s-1BIO\s0 +but it does not return a value. +If \fBa\fR is \s-1NULL\s0 nothing is done. +Calling \fBBIO_free()\fR may also have some effect +on the underlying I/O structure, for example it may close the file being +referred to under certain circumstances. For more details see the individual +\&\s-1BIO_METHOD\s0 descriptions. +.PP +\&\fBBIO_free_all()\fR frees up an entire \s-1BIO\s0 chain, it does not halt if an error +occurs freeing up an individual \s-1BIO\s0 in the chain. +If \fBa\fR is \s-1NULL\s0 nothing is done. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBBIO_new()\fR returns a newly created \s-1BIO\s0 or \s-1NULL\s0 if the call fails. +.PP +\&\fBBIO_up_ref()\fR and \fBBIO_free()\fR return 1 for success and 0 for failure. +.PP +\&\fBBIO_free_all()\fR and \fBBIO_vfree()\fR do not return values. +.SH "NOTES" +.IX Header "NOTES" +If \fBBIO_free()\fR is called on a \s-1BIO\s0 chain it will only free one \s-1BIO\s0 resulting +in a memory leak. +.PP +Calling \fBBIO_free_all()\fR on a single \s-1BIO\s0 has the same effect as calling \fBBIO_free()\fR +on it other than the discarded return value. +.SH "HISTORY" +.IX Header "HISTORY" +\&\fBBIO_set()\fR was removed in OpenSSL 1.1.0 as \s-1BIO\s0 type is now opaque. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +Create a memory \s-1BIO:\s0 +.PP +.Vb 1 +\& BIO *mem = BIO_new(BIO_s_mem()); +.Ve +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_new_CMS.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_new_CMS.3 new file mode 100644 index 00000000..8a468cfd --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_new_CMS.3 @@ -0,0 +1,204 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "BIO_NEW_CMS 3" +.TH BIO_NEW_CMS 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +BIO_new_CMS \- CMS streaming filter BIO +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& BIO *BIO_new_CMS(BIO *out, CMS_ContentInfo *cms); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBBIO_new_CMS()\fR returns a streaming filter \s-1BIO\s0 chain based on \fBcms\fR. The output +of the filter is written to \fBout\fR. Any data written to the chain is +automatically translated to a \s-1BER\s0 format \s-1CMS\s0 structure of the appropriate type. +.SH "NOTES" +.IX Header "NOTES" +The chain returned by this function behaves like a standard filter \s-1BIO.\s0 It +supports non blocking I/O. Content is processed and streamed on the fly and not +all held in memory at once: so it is possible to encode very large structures. +After all content has been written through the chain \fBBIO_flush()\fR must be called +to finalise the structure. +.PP +The \fB\s-1CMS_STREAM\s0\fR flag must be included in the corresponding \fBflags\fR +parameter of the \fBcms\fR creation function. +.PP +If an application wishes to write additional data to \fBout\fR BIOs should be +removed from the chain using \fBBIO_pop()\fR and freed with \fBBIO_free()\fR until \fBout\fR +is reached. If no additional data needs to be written \fBBIO_free_all()\fR can be +called to free up the whole chain. +.PP +Any content written through the filter is used verbatim: no canonical +translation is performed. +.PP +It is possible to chain multiple BIOs to, for example, create a triple wrapped +signed, enveloped, signed structure. In this case it is the applications +responsibility to set the inner content type of any outer CMS_ContentInfo +structures. +.PP +Large numbers of small writes through the chain should be avoided as this will +produce an output consisting of lots of \s-1OCTET STRING\s0 structures. Prepending +a \fBBIO_f_buffer()\fR buffering \s-1BIO\s0 will prevent this. +.SH "BUGS" +.IX Header "BUGS" +There is currently no corresponding inverse \s-1BIO:\s0 i.e. one which can decode +a \s-1CMS\s0 structure on the fly. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBBIO_new_CMS()\fR returns a \s-1BIO\s0 chain when successful or \s-1NULL\s0 if an error +occurred. The error can be obtained from \fBERR_get_error\fR\|(3). +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_get_error\fR\|(3), \fBCMS_sign\fR\|(3), +\&\fBCMS_encrypt\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +The \fBBIO_new_CMS()\fR function was added in OpenSSL 1.0.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2008\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_parse_hostserv.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_parse_hostserv.3 new file mode 100644 index 00000000..f344b875 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_parse_hostserv.3 @@ -0,0 +1,212 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "BIO_PARSE_HOSTSERV 3" +.TH BIO_PARSE_HOSTSERV 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +BIO_hostserv_priorities, BIO_parse_hostserv \&\- utility routines to parse a standard host and service string +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& enum BIO_hostserv_priorities { +\& BIO_PARSE_PRIO_HOST, BIO_PARSE_PRIO_SERV +\& }; +\& int BIO_parse_hostserv(const char *hostserv, char **host, char **service, +\& enum BIO_hostserv_priorities hostserv_prio); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBBIO_parse_hostserv()\fR will parse the information given in \fBhostserv\fR, +create strings with the host name and service name and give those +back via \fBhost\fR and \fBservice\fR. Those will need to be freed after +they are used. \fBhostserv_prio\fR helps determine if \fBhostserv\fR shall +be interpreted primarily as a host name or a service name in ambiguous +cases. +.PP +The syntax the \fBBIO_parse_hostserv()\fR recognises is: +.PP +.Vb 7 +\& host + \*(Aq:\*(Aq + service +\& host + \*(Aq:\*(Aq + \*(Aq*\*(Aq +\& host + \*(Aq:\*(Aq +\& \*(Aq:\*(Aq + service +\& \*(Aq*\*(Aq + \*(Aq:\*(Aq + service +\& host +\& service +.Ve +.PP +The host part can be a name or an \s-1IP\s0 address. If it's a IPv6 +address, it \s-1MUST\s0 be enclosed in brackets, such as '[::1]'. +.PP +The service part can be a service name or its port number. +.PP +The returned values will depend on the given \fBhostserv\fR string +and \fBhostserv_prio\fR, as follows: +.PP +.Vb 5 +\& host + \*(Aq:\*(Aq + service => *host = "host", *service = "service" +\& host + \*(Aq:\*(Aq + \*(Aq*\*(Aq => *host = "host", *service = NULL +\& host + \*(Aq:\*(Aq => *host = "host", *service = NULL +\& \*(Aq:\*(Aq + service => *host = NULL, *service = "service" +\& \*(Aq*\*(Aq + \*(Aq:\*(Aq + service => *host = NULL, *service = "service" +\& +\& in case no \*(Aq:\*(Aq is present in the string, the result depends on +\& hostserv_prio, as follows: +\& +\& when hostserv_prio == BIO_PARSE_PRIO_HOST +\& host => *host = "host", *service untouched +\& +\& when hostserv_prio == BIO_PARSE_PRIO_SERV +\& service => *host untouched, *service = "service" +.Ve +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBBIO_parse_hostserv()\fR returns 1 on success or 0 on error. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\s-1\fBBIO_ADDRINFO\s0\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2016\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_printf.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_printf.3 new file mode 100644 index 00000000..3d981a14 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_printf.3 @@ -0,0 +1,182 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "BIO_PRINTF 3" +.TH BIO_PRINTF 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +BIO_printf, BIO_vprintf, BIO_snprintf, BIO_vsnprintf \&\- formatted output to a BIO +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int BIO_printf(BIO *bio, const char *format, ...) +\& int BIO_vprintf(BIO *bio, const char *format, va_list args) +\& +\& int BIO_snprintf(char *buf, size_t n, const char *format, ...) +\& int BIO_vsnprintf(char *buf, size_t n, const char *format, va_list args) +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBBIO_printf()\fR is similar to the standard C \fBprintf()\fR function, except that +the output is sent to the specified \s-1BIO,\s0 \fBbio\fR, rather than standard +output. All common format specifiers are supported. +.PP +\&\fBBIO_vprintf()\fR is similar to the \fBvprintf()\fR function found on many platforms, +the output is sent to the specified \s-1BIO,\s0 \fBbio\fR, rather than standard +output. All common format specifiers are supported. The argument +list \fBargs\fR is a stdarg argument list. +.PP +\&\fBBIO_snprintf()\fR is for platforms that do not have the common \fBsnprintf()\fR +function. It is like \fBsprintf()\fR except that the size parameter, \fBn\fR, +specifies the size of the output buffer. +.PP +\&\fBBIO_vsnprintf()\fR is to \fBBIO_snprintf()\fR as \fBBIO_vprintf()\fR is to \fBBIO_printf()\fR. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +All functions return the number of bytes written, or \-1 on error. +For \fBBIO_snprintf()\fR and \fBBIO_vsnprintf()\fR this includes when the output +buffer is too small. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_push.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_push.3 new file mode 100644 index 00000000..e1386735 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_push.3 @@ -0,0 +1,224 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "BIO_PUSH 3" +.TH BIO_PUSH 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +BIO_push, BIO_pop, BIO_set_next \- add and remove BIOs from a chain +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& BIO *BIO_push(BIO *b, BIO *append); +\& BIO *BIO_pop(BIO *b); +\& void BIO_set_next(BIO *b, BIO *next); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fBBIO_push()\fR function appends the \s-1BIO\s0 \fBappend\fR to \fBb\fR, it returns +\&\fBb\fR. +.PP +\&\fBBIO_pop()\fR removes the \s-1BIO\s0 \fBb\fR from a chain and returns the next \s-1BIO\s0 +in the chain, or \s-1NULL\s0 if there is no next \s-1BIO.\s0 The removed \s-1BIO\s0 then +becomes a single \s-1BIO\s0 with no association with the original chain, +it can thus be freed or attached to a different chain. +.PP +\&\fBBIO_set_next()\fR replaces the existing next \s-1BIO\s0 in a chain with the \s-1BIO\s0 pointed to +by \fBnext\fR. The new chain may include some of the same BIOs from the old chain +or it may be completely different. +.SH "NOTES" +.IX Header "NOTES" +The names of these functions are perhaps a little misleading. \fBBIO_push()\fR +joins two \s-1BIO\s0 chains whereas \fBBIO_pop()\fR deletes a single \s-1BIO\s0 from a chain, +the deleted \s-1BIO\s0 does not need to be at the end of a chain. +.PP +The process of calling \fBBIO_push()\fR and \fBBIO_pop()\fR on a \s-1BIO\s0 may have additional +consequences (a control call is made to the affected BIOs) any effects will +be noted in the descriptions of individual BIOs. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBBIO_push()\fR returns the end of the chain, \fBb\fR. +.PP +\&\fBBIO_pop()\fR returns the next \s-1BIO\s0 in the chain, or \s-1NULL\s0 if there is no next +\&\s-1BIO.\s0 +.SH "EXAMPLES" +.IX Header "EXAMPLES" +For these examples suppose \fBmd1\fR and \fBmd2\fR are digest BIOs, \fBb64\fR is +a base64 \s-1BIO\s0 and \fBf\fR is a file \s-1BIO.\s0 +.PP +If the call: +.PP +.Vb 1 +\& BIO_push(b64, f); +.Ve +.PP +is made then the new chain will be \fBb64\-f\fR. After making the calls +.PP +.Vb 2 +\& BIO_push(md2, b64); +\& BIO_push(md1, md2); +.Ve +.PP +the new chain is \fBmd1\-md2\-b64\-f\fR. Data written to \fBmd1\fR will be digested +by \fBmd1\fR and \fBmd2\fR, \fBbase64\fR encoded and written to \fBf\fR. +.PP +It should be noted that reading causes data to pass in the reverse +direction, that is data is read from \fBf\fR, base64 \fBdecoded\fR and digested +by \fBmd1\fR and \fBmd2\fR. If the call: +.PP +.Vb 1 +\& BIO_pop(md2); +.Ve +.PP +The call will return \fBb64\fR and the new chain will be \fBmd1\-b64\-f\fR data can +be written to \fBmd1\fR as before. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +bio +.SH "HISTORY" +.IX Header "HISTORY" +The \fBBIO_set_next()\fR function was added in OpenSSL 1.1.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_read.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_read.3 new file mode 100644 index 00000000..1dad2173 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_read.3 @@ -0,0 +1,226 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "BIO_READ 3" +.TH BIO_READ 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +BIO_read_ex, BIO_write_ex, BIO_read, BIO_write, BIO_gets, BIO_puts \&\- BIO I/O functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int BIO_read_ex(BIO *b, void *data, size_t dlen, size_t *readbytes); +\& int BIO_write_ex(BIO *b, const void *data, size_t dlen, size_t *written); +\& +\& int BIO_read(BIO *b, void *data, int dlen); +\& int BIO_gets(BIO *b, char *buf, int size); +\& int BIO_write(BIO *b, const void *data, int dlen); +\& int BIO_puts(BIO *b, const char *buf); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBBIO_read_ex()\fR attempts to read \fBdlen\fR bytes from \s-1BIO\s0 \fBb\fR and places the data +in \fBdata\fR. If any bytes were successfully read then the number of bytes read is +stored in \fB*readbytes\fR. +.PP +\&\fBBIO_write_ex()\fR attempts to write \fBdlen\fR bytes from \fBdata\fR to \s-1BIO\s0 \fBb\fR. If +successful then the number of bytes written is stored in \fB*written\fR. +.PP +\&\fBBIO_read()\fR attempts to read \fBlen\fR bytes from \s-1BIO\s0 \fBb\fR and places +the data in \fBbuf\fR. +.PP +\&\fBBIO_gets()\fR performs the BIOs \*(L"gets\*(R" operation and places the data +in \fBbuf\fR. Usually this operation will attempt to read a line of data +from the \s-1BIO\s0 of maximum length \fBsize\-1\fR. There are exceptions to this, +however; for example, \fBBIO_gets()\fR on a digest \s-1BIO\s0 will calculate and +return the digest and other BIOs may not support \fBBIO_gets()\fR at all. +The returned string is always NUL-terminated and the '\en' is preserved +if present in the input data. +.PP +\&\fBBIO_write()\fR attempts to write \fBlen\fR bytes from \fBbuf\fR to \s-1BIO\s0 \fBb\fR. +.PP +\&\fBBIO_puts()\fR attempts to write a NUL-terminated string \fBbuf\fR to \s-1BIO\s0 \fBb\fR. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBBIO_read_ex()\fR and \fBBIO_write_ex()\fR return 1 if data was successfully read or +written, and 0 otherwise. +.PP +All other functions return either the amount of data successfully read or +written (if the return value is positive) or that no data was successfully +read or written if the result is 0 or \-1. If the return value is \-2 then +the operation is not implemented in the specific \s-1BIO\s0 type. The trailing +\&\s-1NUL\s0 is not included in the length returned by \fBBIO_gets()\fR. +.SH "NOTES" +.IX Header "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 +it may merely be an indication that no data is currently available and that +the application should retry the operation later. +.PP +One technique sometimes used with blocking sockets is to use a system call +(such as \fBselect()\fR, \fBpoll()\fR or equivalent) to determine when data is available +and then call \fBread()\fR to read the data. The equivalent with BIOs (that is call +\&\fBselect()\fR on the underlying I/O structure and then call \fBBIO_read()\fR to +read the data) should \fBnot\fR be used because a single call to \fBBIO_read()\fR +can cause several reads (and writes in the case of \s-1SSL\s0 BIOs) on the underlying +I/O structure and may block as a result. Instead \fBselect()\fR (or equivalent) +should be combined with non blocking I/O so successive reads will request +a retry instead of blocking. +.PP +See \fBBIO_should_retry\fR\|(3) for details of how to +determine the cause of a retry and other I/O issues. +.PP +If the \fBBIO_gets()\fR function is not supported by a \s-1BIO\s0 then it possible to +work around this by adding a buffering \s-1BIO\s0 \fBBIO_f_buffer\fR\|(3) +to the chain. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBBIO_should_retry\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +\&\fBBIO_gets()\fR on 1.1.0 and older when called on \fBBIO_fd()\fR based \s-1BIO\s0 does not +keep the '\en' at the end of the line in the buffer. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_s_accept.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_s_accept.3 new file mode 100644 index 00000000..b65d29f4 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_s_accept.3 @@ -0,0 +1,365 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "BIO_S_ACCEPT 3" +.TH BIO_S_ACCEPT 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +BIO_s_accept, BIO_set_accept_name, BIO_set_accept_port, BIO_get_accept_name, BIO_get_accept_port, BIO_new_accept, BIO_set_nbio_accept, BIO_set_accept_bios, BIO_get_peer_name, BIO_get_peer_port, BIO_get_accept_ip_family, BIO_set_accept_ip_family, BIO_set_bind_mode, BIO_get_bind_mode, BIO_do_accept \- accept BIO +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& const BIO_METHOD *BIO_s_accept(void); +\& +\& long BIO_set_accept_name(BIO *b, char *name); +\& char *BIO_get_accept_name(BIO *b); +\& +\& long BIO_set_accept_port(BIO *b, char *port); +\& char *BIO_get_accept_port(BIO *b); +\& +\& BIO *BIO_new_accept(char *host_port); +\& +\& long BIO_set_nbio_accept(BIO *b, int n); +\& long BIO_set_accept_bios(BIO *b, char *bio); +\& +\& char *BIO_get_peer_name(BIO *b); +\& char *BIO_get_peer_port(BIO *b); +\& long BIO_get_accept_ip_family(BIO *b); +\& long BIO_set_accept_ip_family(BIO *b, long family); +\& +\& long BIO_set_bind_mode(BIO *b, long mode); +\& long BIO_get_bind_mode(BIO *b); +\& +\& int BIO_do_accept(BIO *b); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBBIO_s_accept()\fR returns the accept \s-1BIO\s0 method. This is a wrapper +round the platform's \s-1TCP/IP\s0 socket accept routines. +.PP +Using accept BIOs, \s-1TCP/IP\s0 connections can be accepted and data +transferred using only \s-1BIO\s0 routines. In this way any platform +specific operations are hidden by the \s-1BIO\s0 abstraction. +.PP +Read and write operations on an accept \s-1BIO\s0 will perform I/O +on the underlying connection. If no connection is established +and the port (see below) is set up properly then the \s-1BIO\s0 +waits for an incoming connection. +.PP +Accept BIOs support \fBBIO_puts()\fR but not \fBBIO_gets()\fR. +.PP +If the close flag is set on an accept \s-1BIO\s0 then any active +connection on that chain is shutdown and the socket closed when +the \s-1BIO\s0 is freed. +.PP +Calling \fBBIO_reset()\fR on an accept \s-1BIO\s0 will close any active +connection and reset the \s-1BIO\s0 into a state where it awaits another +incoming connection. +.PP +\&\fBBIO_get_fd()\fR and \fBBIO_set_fd()\fR can be called to retrieve or set +the accept socket. See \fBBIO_s_fd\fR\|(3) +.PP +\&\fBBIO_set_accept_name()\fR uses the string \fBname\fR to set the accept +name. The name is represented as a string of the form \*(L"host:port\*(R", +where \*(L"host\*(R" is the interface to use and \*(L"port\*(R" is the port. +The host can be \*(L"*\*(R" or empty which is interpreted as meaning +any interface. If the host is an IPv6 address, it has to be +enclosed in brackets, for example \*(L"[::1]:https\*(R". \*(L"port\*(R" has the +same syntax as the port specified in \fBBIO_set_conn_port()\fR for +connect BIOs, that is it can be a numerical port string or a +string to lookup using \fBgetservbyname()\fR and a string table. +.PP +\&\fBBIO_set_accept_port()\fR uses the string \fBport\fR to set the accept +port. \*(L"port\*(R" has the same syntax as the port specified in +\&\fBBIO_set_conn_port()\fR for connect BIOs, that is it can be a numerical +port string or a string to lookup using \fBgetservbyname()\fR and a string +table. +.PP +\&\fBBIO_new_accept()\fR combines \fBBIO_new()\fR and \fBBIO_set_accept_name()\fR into +a single call: that is it creates a new accept \s-1BIO\s0 with port +\&\fBhost_port\fR. +.PP +\&\fBBIO_set_nbio_accept()\fR sets the accept socket to blocking mode +(the default) if \fBn\fR is 0 or non blocking mode if \fBn\fR is 1. +.PP +\&\fBBIO_set_accept_bios()\fR can be used to set a chain of BIOs which +will be duplicated and prepended to the chain when an incoming +connection is received. This is useful if, for example, a +buffering or \s-1SSL BIO\s0 is required for each connection. The +chain of BIOs must not be freed after this call, they will +be automatically freed when the accept \s-1BIO\s0 is freed. +.PP +\&\fBBIO_set_bind_mode()\fR and \fBBIO_get_bind_mode()\fR set and retrieve +the current bind mode. If \fB\s-1BIO_BIND_NORMAL\s0\fR (the default) is set +then another socket cannot be bound to the same port. If +\&\fB\s-1BIO_BIND_REUSEADDR\s0\fR is set then other sockets can bind to the +same port. If \fB\s-1BIO_BIND_REUSEADDR_IF_UNUSED\s0\fR is set then and +attempt is first made to use \s-1BIO_BIN_NORMAL,\s0 if this fails +and the port is not in use then a second attempt is made +using \fB\s-1BIO_BIND_REUSEADDR\s0\fR. +.PP +\&\fBBIO_do_accept()\fR serves two functions. When it is first +called, after the accept \s-1BIO\s0 has been setup, it will attempt +to create the accept socket and bind an address to it. Second +and subsequent calls to \fBBIO_do_accept()\fR will await an incoming +connection, or request a retry in non blocking mode. +.SH "NOTES" +.IX Header "NOTES" +When an accept \s-1BIO\s0 is at the end of a chain it will await an +incoming connection before processing I/O calls. When an accept +\&\s-1BIO\s0 is not at then end of a chain it passes I/O calls to the next +\&\s-1BIO\s0 in the chain. +.PP +When a connection is established a new socket \s-1BIO\s0 is created for +the connection and appended to the chain. That is the chain is now +accept\->socket. This effectively means that attempting I/O on +an initial accept socket will await an incoming connection then +perform I/O on it. +.PP +If any additional BIOs have been set using \fBBIO_set_accept_bios()\fR +then they are placed between the socket and the accept \s-1BIO,\s0 +that is the chain will be accept\->otherbios\->socket. +.PP +If a server wishes to process multiple connections (as is normally +the case) then the accept \s-1BIO\s0 must be made available for further +incoming connections. This can be done by waiting for a connection and +then calling: +.PP +.Vb 1 +\& connection = BIO_pop(accept); +.Ve +.PP +After this call \fBconnection\fR will contain a \s-1BIO\s0 for the recently +established connection and \fBaccept\fR will now be a single \s-1BIO\s0 +again which can be used to await further incoming connections. +If no further connections will be accepted the \fBaccept\fR can +be freed using \fBBIO_free()\fR. +.PP +If only a single connection will be processed it is possible to +perform I/O using the accept \s-1BIO\s0 itself. This is often undesirable +however because the accept \s-1BIO\s0 will still accept additional incoming +connections. This can be resolved by using \fBBIO_pop()\fR (see above) +and freeing up the accept \s-1BIO\s0 after the initial connection. +.PP +If the underlying accept socket is non-blocking and \fBBIO_do_accept()\fR is +called to await an incoming connection it is possible for +\&\fBBIO_should_io_special()\fR with the reason \s-1BIO_RR_ACCEPT.\s0 If this happens +then it is an indication that an accept attempt would block: the application +should take appropriate action to wait until the underlying socket has +accepted a connection and retry the call. +.PP +\&\fBBIO_set_accept_name()\fR, \fBBIO_get_accept_name()\fR, \fBBIO_set_accept_port()\fR, +\&\fBBIO_get_accept_port()\fR, \fBBIO_set_nbio_accept()\fR, \fBBIO_set_accept_bios()\fR, +\&\fBBIO_get_peer_name()\fR, \fBBIO_get_peer_port()\fR, +\&\fBBIO_get_accept_ip_family()\fR, \fBBIO_set_accept_ip_family()\fR, +\&\fBBIO_set_bind_mode()\fR, \fBBIO_get_bind_mode()\fR and \fBBIO_do_accept()\fR are macros. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBBIO_do_accept()\fR, +\&\fBBIO_set_accept_name()\fR, \fBBIO_set_accept_port()\fR, \fBBIO_set_nbio_accept()\fR, +\&\fBBIO_set_accept_bios()\fR, \fBBIO_set_accept_ip_family()\fR, and \fBBIO_set_bind_mode()\fR +return 1 for success and 0 or \-1 for failure. +.PP +\&\fBBIO_get_accept_name()\fR returns the accept name or \s-1NULL\s0 on error. +\&\fBBIO_get_peer_name()\fR returns the peer name or \s-1NULL\s0 on error. +.PP +\&\fBBIO_get_accept_port()\fR returns the accept port as a string or \s-1NULL\s0 on error. +\&\fBBIO_get_peer_port()\fR returns the peer port as a string or \s-1NULL\s0 on error. +\&\fBBIO_get_accept_ip_family()\fR returns the \s-1IP\s0 family or \-1 on error. +.PP +\&\fBBIO_get_bind_mode()\fR returns the set of \fB\s-1BIO_BIND\s0\fR flags, or \-1 on failure. +.PP +\&\fBBIO_new_accept()\fR returns a \s-1BIO\s0 or \s-1NULL\s0 on error. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +This example accepts two connections on port 4444, sends messages +down each and finally closes both down. +.PP +.Vb 1 +\& BIO *abio, *cbio, *cbio2; +\& +\& /* First call to BIO_accept() sets up accept BIO */ +\& abio = BIO_new_accept("4444"); +\& if (BIO_do_accept(abio) <= 0) { +\& fprintf(stderr, "Error setting up accept\en"); +\& ERR_print_errors_fp(stderr); +\& exit(1); +\& } +\& +\& /* Wait for incoming connection */ +\& if (BIO_do_accept(abio) <= 0) { +\& fprintf(stderr, "Error accepting connection\en"); +\& ERR_print_errors_fp(stderr); +\& exit(1); +\& } +\& fprintf(stderr, "Connection 1 established\en"); +\& +\& /* Retrieve BIO for connection */ +\& cbio = BIO_pop(abio); +\& BIO_puts(cbio, "Connection 1: Sending out Data on initial connection\en"); +\& fprintf(stderr, "Sent out data on connection 1\en"); +\& +\& /* Wait for another connection */ +\& if (BIO_do_accept(abio) <= 0) { +\& fprintf(stderr, "Error accepting connection\en"); +\& ERR_print_errors_fp(stderr); +\& exit(1); +\& } +\& fprintf(stderr, "Connection 2 established\en"); +\& +\& /* Close accept BIO to refuse further connections */ +\& cbio2 = BIO_pop(abio); +\& BIO_free(abio); +\& BIO_puts(cbio2, "Connection 2: Sending out Data on second\en"); +\& fprintf(stderr, "Sent out data on connection 2\en"); +\& +\& BIO_puts(cbio, "Connection 1: Second connection established\en"); +\& +\& /* Close the two established connections */ +\& BIO_free(cbio); +\& BIO_free(cbio2); +.Ve +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_s_bio.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_s_bio.3 new file mode 100644 index 00000000..1ef52461 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_s_bio.3 @@ -0,0 +1,329 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "BIO_S_BIO 3" +.TH BIO_S_BIO 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +BIO_s_bio, BIO_make_bio_pair, BIO_destroy_bio_pair, BIO_shutdown_wr, BIO_set_write_buf_size, BIO_get_write_buf_size, BIO_new_bio_pair, BIO_get_write_guarantee, BIO_ctrl_get_write_guarantee, BIO_get_read_request, BIO_ctrl_get_read_request, BIO_ctrl_reset_read_request \- BIO pair BIO +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& const BIO_METHOD *BIO_s_bio(void); +\& +\& int BIO_make_bio_pair(BIO *b1, BIO *b2); +\& int BIO_destroy_bio_pair(BIO *b); +\& int BIO_shutdown_wr(BIO *b); +\& +\& int BIO_set_write_buf_size(BIO *b, long size); +\& size_t BIO_get_write_buf_size(BIO *b, long size); +\& +\& int BIO_new_bio_pair(BIO **bio1, size_t writebuf1, BIO **bio2, size_t writebuf2); +\& +\& int BIO_get_write_guarantee(BIO *b); +\& size_t BIO_ctrl_get_write_guarantee(BIO *b); +\& int BIO_get_read_request(BIO *b); +\& size_t BIO_ctrl_get_read_request(BIO *b); +\& int BIO_ctrl_reset_read_request(BIO *b); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBBIO_s_bio()\fR returns the method for a \s-1BIO\s0 pair. A \s-1BIO\s0 pair is a pair of source/sink +BIOs where data written to either half of the pair is buffered and can be read from +the other half. Both halves must usually by handled by the same application thread +since no locking is done on the internal data structures. +.PP +Since \s-1BIO\s0 chains typically end in a source/sink \s-1BIO\s0 it is possible to make this +one half of a \s-1BIO\s0 pair and have all the data processed by the chain under application +control. +.PP +One typical use of \s-1BIO\s0 pairs is to place \s-1TLS/SSL I/O\s0 under application control, this +can be used when the application wishes to use a non standard transport for +\&\s-1TLS/SSL\s0 or the normal socket routines are inappropriate. +.PP +Calls to \fBBIO_read_ex()\fR will read data from the buffer or request a retry if no +data is available. +.PP +Calls to \fBBIO_write_ex()\fR will place data in the buffer or request a retry if the +buffer is full. +.PP +The standard calls \fBBIO_ctrl_pending()\fR and \fBBIO_ctrl_wpending()\fR can be used to +determine the amount of pending data in the read or write buffer. +.PP +\&\fBBIO_reset()\fR clears any data in the write buffer. +.PP +\&\fBBIO_make_bio_pair()\fR joins two separate BIOs into a connected pair. +.PP +\&\fBBIO_destroy_pair()\fR destroys the association between two connected BIOs. Freeing +up any half of the pair will automatically destroy the association. +.PP +\&\fBBIO_shutdown_wr()\fR is used to close down a \s-1BIO\s0 \fBb\fR. After this call no further +writes on \s-1BIO\s0 \fBb\fR are allowed (they will return an error). Reads on the other +half of the pair will return any pending data or \s-1EOF\s0 when all pending data has +been read. +.PP +\&\fBBIO_set_write_buf_size()\fR sets the write buffer size of \s-1BIO\s0 \fBb\fR to \fBsize\fR. +If the size is not initialized a default value is used. This is currently +17K, sufficient for a maximum size \s-1TLS\s0 record. +.PP +\&\fBBIO_get_write_buf_size()\fR returns the size of the write buffer. +.PP +\&\fBBIO_new_bio_pair()\fR combines the calls to \fBBIO_new()\fR, \fBBIO_make_bio_pair()\fR and +\&\fBBIO_set_write_buf_size()\fR to create a connected pair of BIOs \fBbio1\fR, \fBbio2\fR +with write buffer sizes \fBwritebuf1\fR and \fBwritebuf2\fR. If either size is +zero then the default size is used. \fBBIO_new_bio_pair()\fR does not check whether +\&\fBbio1\fR or \fBbio2\fR do point to some other \s-1BIO,\s0 the values are overwritten, +\&\fBBIO_free()\fR is not called. +.PP +\&\fBBIO_get_write_guarantee()\fR and \fBBIO_ctrl_get_write_guarantee()\fR return the maximum +length of data that can be currently written to the \s-1BIO.\s0 Writes larger than this +value will return a value from \fBBIO_write_ex()\fR less than the amount requested or +if the buffer is full request a retry. \fBBIO_ctrl_get_write_guarantee()\fR is a +function whereas \fBBIO_get_write_guarantee()\fR is a macro. +.PP +\&\fBBIO_get_read_request()\fR and \fBBIO_ctrl_get_read_request()\fR return the +amount of data requested, or the buffer size if it is less, if the +last read attempt at the other half of the \s-1BIO\s0 pair failed due to an +empty buffer. This can be used to determine how much data should be +written to the \s-1BIO\s0 so the next read will succeed: this is most useful +in \s-1TLS/SSL\s0 applications where the amount of data read is usually +meaningful rather than just a buffer size. After a successful read +this call will return zero. It also will return zero once new data +has been written satisfying the read request or part of it. +Note that \fBBIO_get_read_request()\fR never returns an amount larger +than that returned by \fBBIO_get_write_guarantee()\fR. +.PP +\&\fBBIO_ctrl_reset_read_request()\fR can also be used to reset the value returned by +\&\fBBIO_get_read_request()\fR to zero. +.SH "NOTES" +.IX Header "NOTES" +Both halves of a \s-1BIO\s0 pair should be freed. That is even if one half is implicit +freed due to a \fBBIO_free_all()\fR or \fBSSL_free()\fR call the other half needs to be freed. +.PP +When used in bidirectional applications (such as \s-1TLS/SSL\s0) care should be taken to +flush any data in the write buffer. This can be done by calling \fBBIO_pending()\fR +on the other half of the pair and, if any data is pending, reading it and sending +it to the underlying transport. This must be done before any normal processing +(such as calling \fBselect()\fR ) due to a request and \fBBIO_should_read()\fR being true. +.PP +To see why this is important consider a case where a request is sent using +\&\fBBIO_write_ex()\fR and a response read with \fBBIO_read_ex()\fR, this can occur during an +\&\s-1TLS/SSL\s0 handshake for example. \fBBIO_write_ex()\fR will succeed and place data in the +write buffer. \fBBIO_read_ex()\fR will initially fail and \fBBIO_should_read()\fR will be +true. If the application then waits for data to be available on the underlying +transport before flushing the write buffer it will never succeed because the +request was never sent! +.PP +\&\fBBIO_eof()\fR is true if no data is in the peer \s-1BIO\s0 and the peer \s-1BIO\s0 has been +shutdown. +.PP +\&\fBBIO_make_bio_pair()\fR, \fBBIO_destroy_bio_pair()\fR, \fBBIO_shutdown_wr()\fR, +\&\fBBIO_set_write_buf_size()\fR, \fBBIO_get_write_buf_size()\fR, +\&\fBBIO_get_write_guarantee()\fR, and \fBBIO_get_read_request()\fR are implemented +as macros. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBBIO_new_bio_pair()\fR returns 1 on success, with the new BIOs available in +\&\fBbio1\fR and \fBbio2\fR, or 0 on failure, with \s-1NULL\s0 pointers stored into the +locations for \fBbio1\fR and \fBbio2\fR. Check the error stack for more information. +.PP +[\s-1XXXXX:\s0 More return values need to be added here] +.SH "EXAMPLES" +.IX Header "EXAMPLES" +The \s-1BIO\s0 pair can be used to have full control over the network access of an +application. The application can call \fBselect()\fR on the socket as required +without having to go through the SSL-interface. +.PP +.Vb 1 +\& BIO *internal_bio, *network_bio; +\& +\& ... +\& 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 */ +\& ... +\& +\& application | TLS\-engine +\& | | +\& +\-\-\-\-\-\-\-\-\-\-> SSL_operations() +\& | /\e || +\& | || \e/ +\& | BIO\-pair (internal_bio) +\& | BIO\-pair (network_bio) +\& | || /\e +\& | \e/ || +\& +\-\-\-\-\-\-\-\-\-\-\-< BIO_operations() +\& | | +\& | | +\& socket +\& +\& ... +\& SSL_free(ssl); /* implicitly frees internal_bio */ +\& BIO_free(network_bio); +\& ... +.Ve +.PP +As the \s-1BIO\s0 pair will only buffer the data and never directly access the +connection, it behaves non-blocking 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. +.PP +Use the \fBBIO_ctrl_pending()\fR, to find out whether data is buffered in the \s-1BIO\s0 +and must be transferred to the network. Use \fBBIO_ctrl_get_read_request()\fR to +find out, how many bytes must be written into the buffer before the +\&\fBSSL_operation()\fR can successfully be continued. +.SH "WARNINGS" +.IX Header "WARNINGS" +As the data is buffered, \fBSSL_operation()\fR may return with an \s-1ERROR_SSL_WANT_READ\s0 +condition, but there is still data in the write buffer. An application must +not rely on the error value of \fBSSL_operation()\fR but must assure that the +write buffer is always flushed first. Otherwise a deadlock may occur as +the peer might be waiting for the data before being able to continue. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBSSL_set_bio\fR\|(3), \fBssl\fR\|(7), \fBbio\fR\|(7), +\&\fBBIO_should_retry\fR\|(3), \fBBIO_read_ex\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_s_connect.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_s_connect.3 new file mode 100644 index 00000000..3130dfbd --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_s_connect.3 @@ -0,0 +1,338 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "BIO_S_CONNECT 3" +.TH BIO_S_CONNECT 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +BIO_set_conn_address, BIO_get_conn_address, BIO_s_connect, BIO_new_connect, BIO_set_conn_hostname, BIO_set_conn_port, BIO_set_conn_ip_family, BIO_get_conn_ip_family, BIO_get_conn_hostname, BIO_get_conn_port, BIO_set_nbio, BIO_do_connect \- connect BIO +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& const BIO_METHOD * BIO_s_connect(void); +\& +\& BIO *BIO_new_connect(char *name); +\& +\& long BIO_set_conn_hostname(BIO *b, char *name); +\& long BIO_set_conn_port(BIO *b, char *port); +\& long BIO_set_conn_address(BIO *b, BIO_ADDR *addr); +\& long BIO_set_conn_ip_family(BIO *b, long family); +\& const char *BIO_get_conn_hostname(BIO *b); +\& const char *BIO_get_conn_port(BIO *b); +\& const BIO_ADDR *BIO_get_conn_address(BIO *b); +\& const long BIO_get_conn_ip_family(BIO *b); +\& +\& long BIO_set_nbio(BIO *b, long n); +\& +\& int BIO_do_connect(BIO *b); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBBIO_s_connect()\fR returns the connect \s-1BIO\s0 method. This is a wrapper +round the platform's \s-1TCP/IP\s0 socket connection routines. +.PP +Using connect BIOs, \s-1TCP/IP\s0 connections can be made and data +transferred using only \s-1BIO\s0 routines. In this way any platform +specific operations are hidden by the \s-1BIO\s0 abstraction. +.PP +Read and write operations on a connect \s-1BIO\s0 will perform I/O +on the underlying connection. If no connection is established +and the port and hostname (see below) is set up properly then +a connection is established first. +.PP +Connect BIOs support \fBBIO_puts()\fR but not \fBBIO_gets()\fR. +.PP +If the close flag is set on a connect \s-1BIO\s0 then any active +connection is shutdown and the socket closed when the \s-1BIO\s0 +is freed. +.PP +Calling \fBBIO_reset()\fR on a connect \s-1BIO\s0 will close any active +connection and reset the \s-1BIO\s0 into a state where it can connect +to the same host again. +.PP +\&\fBBIO_get_fd()\fR places the underlying socket in \fBc\fR if it is not \s-1NULL,\s0 +it also returns the socket . If \fBc\fR is not \s-1NULL\s0 it should be of +type (int *). +.PP +\&\fBBIO_set_conn_hostname()\fR uses the string \fBname\fR to set the hostname. +The hostname can be an \s-1IP\s0 address; if the address is an IPv6 one, it +must be enclosed with brackets. The hostname can also include the +port in the form hostname:port. +.PP +\&\fBBIO_set_conn_port()\fR sets the port to \fBport\fR. \fBport\fR can be the +numerical form or a string such as \*(L"http\*(R". A string will be looked +up first using \fBgetservbyname()\fR on the host platform but if that +fails a standard table of port names will be used. This internal +list is http, telnet, socks, https, ssl, ftp, and gopher. +.PP +\&\fBBIO_set_conn_address()\fR sets the address and port information using +a \s-1\fBBIO_ADDR\s0\fR\|(3ssl). +.PP +\&\fBBIO_set_conn_ip_family()\fR sets the \s-1IP\s0 family. +.PP +\&\fBBIO_get_conn_hostname()\fR returns the hostname of the connect \s-1BIO\s0 or +\&\s-1NULL\s0 if the \s-1BIO\s0 is initialized but no hostname is set. +This return value is an internal pointer which should not be modified. +.PP +\&\fBBIO_get_conn_port()\fR returns the port as a string. +This return value is an internal pointer which should not be modified. +.PP +\&\fBBIO_get_conn_address()\fR returns the address information as a \s-1BIO_ADDR.\s0 +This return value is an internal pointer which should not be modified. +.PP +\&\fBBIO_get_conn_ip_family()\fR returns the \s-1IP\s0 family of the connect \s-1BIO.\s0 +.PP +\&\fBBIO_set_nbio()\fR sets the non blocking I/O flag to \fBn\fR. If \fBn\fR is +zero then blocking I/O is set. If \fBn\fR is 1 then non blocking I/O +is set. Blocking I/O is the default. The call to \fBBIO_set_nbio()\fR +should be made before the connection is established because +non blocking I/O is set during the connect process. +.PP +\&\fBBIO_new_connect()\fR combines \fBBIO_new()\fR and \fBBIO_set_conn_hostname()\fR into +a single call: that is it creates a new connect \s-1BIO\s0 with \fBname\fR. +.PP +\&\fBBIO_do_connect()\fR attempts to connect the supplied \s-1BIO.\s0 It returns 1 +if the connection was established successfully. A zero or negative +value is returned if the connection could not be established, the +call \fBBIO_should_retry()\fR should be used for non blocking connect BIOs +to determine if the call should be retried. +.SH "NOTES" +.IX Header "NOTES" +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. +.PP +If the port name is supplied as part of the host name then this will +override any value set with \fBBIO_set_conn_port()\fR. 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 ':' +character in the passed hostname and either indicating an error or +truncating the string at that point. +.PP +The values returned by \fBBIO_get_conn_hostname()\fR, \fBBIO_get_conn_address()\fR, +and \fBBIO_get_conn_port()\fR are updated when a connection attempt is made. +Before any connection attempt the values returned are those set by the +application itself. +.PP +Applications do not have to call \fBBIO_do_connect()\fR but may wish to do +so to separate the connection process from other I/O processing. +.PP +If non blocking I/O is set then retries will be requested as appropriate. +.PP +It addition to \fBBIO_should_read()\fR and \fBBIO_should_write()\fR it is also +possible for \fBBIO_should_io_special()\fR to be true during the initial +connection process with the reason \s-1BIO_RR_CONNECT.\s0 If this is returned +then this is an indication that a connection attempt would block, +the application should then take appropriate action to wait until +the underlying socket has connected and retry the call. +.PP +\&\fBBIO_set_conn_hostname()\fR, \fBBIO_set_conn_port()\fR, \fBBIO_get_conn_hostname()\fR, +\&\fBBIO_set_conn_address()\fR, \fBBIO_get_conn_port()\fR, \fBBIO_get_conn_address()\fR, +\&\fBBIO_set_conn_ip_family()\fR, \fBBIO_get_conn_ip_family()\fR, +\&\fBBIO_set_nbio()\fR, and \fBBIO_do_connect()\fR are macros. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBBIO_s_connect()\fR returns the connect \s-1BIO\s0 method. +.PP +\&\fBBIO_get_fd()\fR returns the socket or \-1 if the \s-1BIO\s0 has not +been initialized. +.PP +\&\fBBIO_set_conn_address()\fR, \fBBIO_set_conn_port()\fR, and \fBBIO_set_conn_ip_family()\fR +always return 1. +.PP +\&\fBBIO_set_conn_hostname()\fR returns 1 on success and 0 on failure. +.PP +\&\fBBIO_get_conn_address()\fR returns the address information or \s-1NULL\s0 if none +was set. +.PP +\&\fBBIO_get_conn_hostname()\fR returns the connected hostname or \s-1NULL\s0 if +none was set. +.PP +\&\fBBIO_get_conn_ip_family()\fR returns the address family or \-1 if none was set. +.PP +\&\fBBIO_get_conn_port()\fR returns a string representing the connected +port or \s-1NULL\s0 if not set. +.PP +\&\fBBIO_set_nbio()\fR always returns 1. +.PP +\&\fBBIO_do_connect()\fR returns 1 if the connection was successfully +established and 0 or \-1 if the connection failed. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +This is example connects to a webserver on the local host and attempts +to retrieve a page and copy the result to standard output. +.PP +.Vb 3 +\& BIO *cbio, *out; +\& int len; +\& char tmpbuf[1024]; +\& +\& cbio = BIO_new_connect("localhost:http"); +\& out = BIO_new_fp(stdout, BIO_NOCLOSE); +\& if (BIO_do_connect(cbio) <= 0) { +\& fprintf(stderr, "Error connecting to server\en"); +\& ERR_print_errors_fp(stderr); +\& exit(1); +\& } +\& BIO_puts(cbio, "GET / HTTP/1.0\en\en"); +\& for (;;) { +\& len = BIO_read(cbio, tmpbuf, 1024); +\& if (len <= 0) +\& break; +\& BIO_write(out, tmpbuf, len); +\& } +\& BIO_free(cbio); +\& BIO_free(out); +.Ve +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\s-1\fBBIO_ADDR\s0\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +\&\fBBIO_set_conn_int_port()\fR, \fBBIO_get_conn_int_port()\fR, \fBBIO_set_conn_ip()\fR, and \fBBIO_get_conn_ip()\fR +were removed in OpenSSL 1.1.0. +Use \fBBIO_set_conn_address()\fR and \fBBIO_get_conn_address()\fR instead. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_s_fd.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_s_fd.3 new file mode 100644 index 00000000..54811459 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_s_fd.3 @@ -0,0 +1,230 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "BIO_S_FD 3" +.TH BIO_S_FD 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +BIO_s_fd, BIO_set_fd, BIO_get_fd, BIO_new_fd \- file descriptor BIO +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& const BIO_METHOD *BIO_s_fd(void); +\& +\& int BIO_set_fd(BIO *b, int fd, int c); +\& int BIO_get_fd(BIO *b, int *c); +\& +\& BIO *BIO_new_fd(int fd, int close_flag); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBBIO_s_fd()\fR returns the file descriptor \s-1BIO\s0 method. This is a wrapper +round the platforms file descriptor routines such as \fBread()\fR and \fBwrite()\fR. +.PP +\&\fBBIO_read_ex()\fR and \fBBIO_write_ex()\fR read or write the underlying descriptor. +\&\fBBIO_puts()\fR is supported but \fBBIO_gets()\fR is not. +.PP +If the close flag is set then \fBclose()\fR is called on the underlying +file descriptor when the \s-1BIO\s0 is freed. +.PP +\&\fBBIO_reset()\fR attempts to change the file pointer to the start of file +such as by using \fBlseek(fd, 0, 0)\fR. +.PP +\&\fBBIO_seek()\fR sets the file pointer to position \fBofs\fR from start of file +such as by using \fBlseek(fd, ofs, 0)\fR. +.PP +\&\fBBIO_tell()\fR returns the current file position such as by calling +\&\fBlseek(fd, 0, 1)\fR. +.PP +\&\fBBIO_set_fd()\fR sets the file descriptor of \s-1BIO\s0 \fBb\fR to \fBfd\fR and the close +flag to \fBc\fR. +.PP +\&\fBBIO_get_fd()\fR places the file descriptor in \fBc\fR if it is not \s-1NULL,\s0 it also +returns the file descriptor. +.PP +\&\fBBIO_new_fd()\fR returns a file descriptor \s-1BIO\s0 using \fBfd\fR and \fBclose_flag\fR. +.SH "NOTES" +.IX Header "NOTES" +The behaviour of \fBBIO_read_ex()\fR and \fBBIO_write_ex()\fR depends on the behavior of the +platforms \fBread()\fR and \fBwrite()\fR calls on the descriptor. If the underlying +file descriptor is in a non blocking mode then the \s-1BIO\s0 will behave in the +manner described in the \fBBIO_read_ex\fR\|(3) and \fBBIO_should_retry\fR\|(3) +manual pages. +.PP +File descriptor BIOs should not be used for socket I/O. Use socket BIOs +instead. +.PP +\&\fBBIO_set_fd()\fR and \fBBIO_get_fd()\fR are implemented as macros. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBBIO_s_fd()\fR returns the file descriptor \s-1BIO\s0 method. +.PP +\&\fBBIO_set_fd()\fR always returns 1. +.PP +\&\fBBIO_get_fd()\fR returns the file descriptor or \-1 if the \s-1BIO\s0 has not +been initialized. +.PP +\&\fBBIO_new_fd()\fR returns the newly allocated \s-1BIO\s0 or \s-1NULL\s0 is an error +occurred. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +This is a file descriptor \s-1BIO\s0 version of \*(L"Hello World\*(R": +.PP +.Vb 1 +\& BIO *out; +\& +\& out = BIO_new_fd(fileno(stdout), BIO_NOCLOSE); +\& BIO_printf(out, "Hello World\en"); +\& BIO_free(out); +.Ve +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBBIO_seek\fR\|(3), \fBBIO_tell\fR\|(3), +\&\fBBIO_reset\fR\|(3), \fBBIO_read_ex\fR\|(3), +\&\fBBIO_write_ex\fR\|(3), \fBBIO_puts\fR\|(3), +\&\fBBIO_gets\fR\|(3), \fBBIO_printf\fR\|(3), +\&\fBBIO_set_close\fR\|(3), \fBBIO_get_close\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_s_file.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_s_file.3 new file mode 100644 index 00000000..e6f478f9 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_s_file.3 @@ -0,0 +1,303 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "BIO_S_FILE 3" +.TH BIO_S_FILE 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +BIO_s_file, BIO_new_file, BIO_new_fp, BIO_set_fp, BIO_get_fp, BIO_read_filename, BIO_write_filename, BIO_append_filename, BIO_rw_filename \- FILE bio +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& const BIO_METHOD *BIO_s_file(void); +\& BIO *BIO_new_file(const char *filename, const char *mode); +\& BIO *BIO_new_fp(FILE *stream, int flags); +\& +\& BIO_set_fp(BIO *b, FILE *fp, int flags); +\& BIO_get_fp(BIO *b, FILE **fpp); +\& +\& int BIO_read_filename(BIO *b, char *name) +\& int BIO_write_filename(BIO *b, char *name) +\& int BIO_append_filename(BIO *b, char *name) +\& int BIO_rw_filename(BIO *b, char *name) +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBBIO_s_file()\fR returns the \s-1BIO\s0 file method. As its name implies it +is a wrapper round the stdio \s-1FILE\s0 structure and it is a +source/sink \s-1BIO.\s0 +.PP +Calls to \fBBIO_read_ex()\fR and \fBBIO_write_ex()\fR read and write data to the +underlying stream. \fBBIO_gets()\fR and \fBBIO_puts()\fR are supported on file BIOs. +.PP +\&\fBBIO_flush()\fR on a file \s-1BIO\s0 calls the \fBfflush()\fR function on the wrapped +stream. +.PP +\&\fBBIO_reset()\fR attempts to change the file pointer to the start of file +using fseek(stream, 0, 0). +.PP +\&\fBBIO_seek()\fR sets the file pointer to position \fBofs\fR from start of file +using fseek(stream, ofs, 0). +.PP +\&\fBBIO_eof()\fR calls \fBfeof()\fR. +.PP +Setting the \s-1BIO_CLOSE\s0 flag calls \fBfclose()\fR on the stream when the \s-1BIO\s0 +is freed. +.PP +\&\fBBIO_new_file()\fR creates a new file \s-1BIO\s0 with mode \fBmode\fR the meaning +of \fBmode\fR is the same as the stdio function \fBfopen()\fR. The \s-1BIO_CLOSE\s0 +flag is set on the returned \s-1BIO.\s0 +.PP +\&\fBBIO_new_fp()\fR creates a file \s-1BIO\s0 wrapping \fBstream\fR. Flags can be: +\&\s-1BIO_CLOSE, BIO_NOCLOSE\s0 (the close flag) \s-1BIO_FP_TEXT\s0 (sets the underlying +stream to text mode, default is binary: this only has any effect under +Win32). +.PP +\&\fBBIO_set_fp()\fR sets the fp of a file \s-1BIO\s0 to \fBfp\fR. \fBflags\fR has the same +meaning as in \fBBIO_new_fp()\fR, it is a macro. +.PP +\&\fBBIO_get_fp()\fR retrieves the fp of a file \s-1BIO,\s0 it is a macro. +.PP +\&\fBBIO_seek()\fR is a macro that sets the position pointer to \fBoffset\fR bytes +from the start of file. +.PP +\&\fBBIO_tell()\fR returns the value of the position pointer. +.PP +\&\fBBIO_read_filename()\fR, \fBBIO_write_filename()\fR, \fBBIO_append_filename()\fR and +\&\fBBIO_rw_filename()\fR set the file \s-1BIO\s0 \fBb\fR to use file \fBname\fR for +reading, writing, append or read write respectively. +.SH "NOTES" +.IX Header "NOTES" +When wrapping stdout, stdin or stderr the underlying stream should not +normally be closed so the \s-1BIO_NOCLOSE\s0 flag should be set. +.PP +Because the file \s-1BIO\s0 calls the underlying stdio functions any quirks +in stdio behaviour will be mirrored by the corresponding \s-1BIO.\s0 +.PP +On Windows BIO_new_files reserves for the filename argument to be +\&\s-1UTF\-8\s0 encoded. In other words if you have to make it work in multi\- +lingual environment, encode file names in \s-1UTF\-8.\s0 +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBBIO_s_file()\fR returns the file \s-1BIO\s0 method. +.PP +\&\fBBIO_new_file()\fR and \fBBIO_new_fp()\fR return a file \s-1BIO\s0 or \s-1NULL\s0 if an error +occurred. +.PP +\&\fBBIO_set_fp()\fR and \fBBIO_get_fp()\fR return 1 for success or 0 for failure +(although the current implementation never return 0). +.PP +\&\fBBIO_seek()\fR returns the same value as the underlying \fBfseek()\fR function: +0 for success or \-1 for failure. +.PP +\&\fBBIO_tell()\fR returns the current file position. +.PP +\&\fBBIO_read_filename()\fR, \fBBIO_write_filename()\fR, \fBBIO_append_filename()\fR and +\&\fBBIO_rw_filename()\fR return 1 for success or 0 for failure. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +File \s-1BIO\s0 \*(L"hello world\*(R": +.PP +.Vb 1 +\& BIO *bio_out; +\& +\& bio_out = BIO_new_fp(stdout, BIO_NOCLOSE); +\& BIO_printf(bio_out, "Hello World\en"); +.Ve +.PP +Alternative technique: +.PP +.Vb 1 +\& BIO *bio_out; +\& +\& bio_out = BIO_new(BIO_s_file()); +\& if (bio_out == NULL) +\& /* Error */ +\& if (!BIO_set_fp(bio_out, stdout, BIO_NOCLOSE)) +\& /* Error */ +\& BIO_printf(bio_out, "Hello World\en"); +.Ve +.PP +Write to a file: +.PP +.Vb 1 +\& BIO *out; +\& +\& out = BIO_new_file("filename.txt", "w"); +\& if (!out) +\& /* Error */ +\& BIO_printf(out, "Hello World\en"); +\& BIO_free(out); +.Ve +.PP +Alternative technique: +.PP +.Vb 1 +\& BIO *out; +\& +\& out = BIO_new(BIO_s_file()); +\& if (out == NULL) +\& /* Error */ +\& if (!BIO_write_filename(out, "filename.txt")) +\& /* Error */ +\& BIO_printf(out, "Hello World\en"); +\& BIO_free(out); +.Ve +.SH "BUGS" +.IX Header "BUGS" +\&\fBBIO_reset()\fR and \fBBIO_seek()\fR are implemented using \fBfseek()\fR on the underlying +stream. The return value for \fBfseek()\fR is 0 for success or \-1 if an error +occurred this differs from other types of \s-1BIO\s0 which will typically return +1 for success and a non positive value if an error occurred. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBBIO_seek\fR\|(3), \fBBIO_tell\fR\|(3), +\&\fBBIO_reset\fR\|(3), \fBBIO_flush\fR\|(3), +\&\fBBIO_read_ex\fR\|(3), +\&\fBBIO_write_ex\fR\|(3), \fBBIO_puts\fR\|(3), +\&\fBBIO_gets\fR\|(3), \fBBIO_printf\fR\|(3), +\&\fBBIO_set_close\fR\|(3), \fBBIO_get_close\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_s_mem.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_s_mem.3 new file mode 100644 index 00000000..9c220924 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_s_mem.3 @@ -0,0 +1,297 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "BIO_S_MEM 3" +.TH BIO_S_MEM 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +BIO_s_secmem, BIO_s_mem, BIO_set_mem_eof_return, BIO_get_mem_data, BIO_set_mem_buf, BIO_get_mem_ptr, BIO_new_mem_buf \- memory BIO +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& const BIO_METHOD *BIO_s_mem(void); +\& const BIO_METHOD *BIO_s_secmem(void); +\& +\& BIO_set_mem_eof_return(BIO *b, int v) +\& long BIO_get_mem_data(BIO *b, char **pp) +\& BIO_set_mem_buf(BIO *b, BUF_MEM *bm, int c) +\& BIO_get_mem_ptr(BIO *b, BUF_MEM **pp) +\& +\& BIO *BIO_new_mem_buf(const void *buf, int len); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBBIO_s_mem()\fR returns the memory \s-1BIO\s0 method function. +.PP +A memory \s-1BIO\s0 is a source/sink \s-1BIO\s0 which uses memory for its I/O. Data +written to a memory \s-1BIO\s0 is stored in a \s-1BUF_MEM\s0 structure which is extended +as appropriate to accommodate the stored data. +.PP +\&\fBBIO_s_secmem()\fR is like \fBBIO_s_mem()\fR except that the secure heap is used +for buffer storage. +.PP +Any data written to a memory \s-1BIO\s0 can be recalled by reading from it. +Unless the memory \s-1BIO\s0 is read only any data read from it is deleted from +the \s-1BIO.\s0 +.PP +Memory BIOs support \fBBIO_gets()\fR and \fBBIO_puts()\fR. +.PP +If the \s-1BIO_CLOSE\s0 flag is set when a memory \s-1BIO\s0 is freed then the underlying +\&\s-1BUF_MEM\s0 structure is also freed. +.PP +Calling \fBBIO_reset()\fR on a read write memory \s-1BIO\s0 clears any data in it if the +flag \s-1BIO_FLAGS_NONCLEAR_RST\s0 is not set, otherwise it just restores the read +pointer to the state it was just after the last write was performed and the +data can be read again. On a read only \s-1BIO\s0 it similarly restores the \s-1BIO\s0 to +its original state and the read only data can be read again. +.PP +\&\fBBIO_eof()\fR is true if no data is in the \s-1BIO.\s0 +.PP +\&\fBBIO_ctrl_pending()\fR returns the number of bytes currently stored. +.PP +\&\fBBIO_set_mem_eof_return()\fR sets the behaviour of memory \s-1BIO\s0 \fBb\fR when it is +empty. If the \fBv\fR is zero then an empty memory \s-1BIO\s0 will return \s-1EOF\s0 (that is +it will return zero and BIO_should_retry(b) will be false. If \fBv\fR is non +zero then it will return \fBv\fR when it is empty and it will set the read retry +flag (that is BIO_read_retry(b) is true). To avoid ambiguity with a normal +positive return value \fBv\fR should be set to a negative value, typically \-1. +.PP +\&\fBBIO_get_mem_data()\fR sets *\fBpp\fR to a pointer to the start of the memory BIOs data +and returns the total amount of data available. It is implemented as a macro. +.PP +\&\fBBIO_set_mem_buf()\fR sets the internal \s-1BUF_MEM\s0 structure to \fBbm\fR and sets the +close flag to \fBc\fR, that is \fBc\fR should be either \s-1BIO_CLOSE\s0 or \s-1BIO_NOCLOSE.\s0 +It is a macro. +.PP +\&\fBBIO_get_mem_ptr()\fR places the underlying \s-1BUF_MEM\s0 structure in *\fBpp\fR. It is +a macro. +.PP +\&\fBBIO_new_mem_buf()\fR creates a memory \s-1BIO\s0 using \fBlen\fR bytes of data at \fBbuf\fR, +if \fBlen\fR is \-1 then the \fBbuf\fR is assumed to be nul terminated and its +length is determined by \fBstrlen\fR. The \s-1BIO\s0 is set to a read only state and +as a result cannot be written to. This is useful when some data needs to be +made available from a static area of memory in the form of a \s-1BIO.\s0 The +supplied data is read directly from the supplied buffer: it is \fBnot\fR copied +first, so the supplied area of memory must be unchanged until the \s-1BIO\s0 is freed. +.SH "NOTES" +.IX Header "NOTES" +Writes to memory BIOs will always succeed if memory is available: that is +their size can grow indefinitely. +.PP +Every write after partial read (not all data in the memory buffer was read) +to a read write memory \s-1BIO\s0 will have to move the unread data with an internal +copy operation, if a \s-1BIO\s0 contains a lot of data and it is read in small +chunks intertwined with writes the operation can be very slow. Adding +a buffering \s-1BIO\s0 to the chain can speed up the process. +.PP +Calling \fBBIO_set_mem_buf()\fR on a \s-1BIO\s0 created with \fBBIO_new_secmem()\fR will +give undefined results, including perhaps a program crash. +.PP +Switching the memory \s-1BIO\s0 from read write to read only is not supported and +can give undefined results including a program crash. There are two notable +exceptions to the rule. The first one is to assign a static memory buffer +immediately after \s-1BIO\s0 creation and set the \s-1BIO\s0 as read only. +.PP +The other supported sequence is to start with read write \s-1BIO\s0 then temporarily +switch it to read only and call \fBBIO_reset()\fR on the read only \s-1BIO\s0 immediately +before switching it back to read write. Before the \s-1BIO\s0 is freed it must be +switched back to the read write mode. +.PP +Calling \fBBIO_get_mem_ptr()\fR on read only \s-1BIO\s0 will return a \s-1BUF_MEM\s0 that +contains only the remaining data to be read. If the close status of the +\&\s-1BIO\s0 is set to \s-1BIO_NOCLOSE,\s0 before freeing the \s-1BUF_MEM\s0 the data pointer +in it must be set to \s-1NULL\s0 as the data pointer does not point to an +allocated memory. +.PP +Calling \fBBIO_reset()\fR on a read write memory \s-1BIO\s0 with \s-1BIO_FLAGS_NONCLEAR_RST\s0 +flag set can have unexpected outcome when the reads and writes to the +\&\s-1BIO\s0 are intertwined. As documented above the \s-1BIO\s0 will be reset to the +state after the last completed write operation. The effects of reads +preceding that write operation cannot be undone. +.PP +Calling \fBBIO_get_mem_ptr()\fR prior to a \fBBIO_reset()\fR call with +\&\s-1BIO_FLAGS_NONCLEAR_RST\s0 set has the same effect as a write operation. +.SH "BUGS" +.IX Header "BUGS" +There should be an option to set the maximum size of a memory \s-1BIO.\s0 +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBBIO_s_mem()\fR and \fBBIO_s_secmem()\fR return a valid memory \fB\s-1BIO_METHOD\s0\fR structure. +.PP +\&\fBBIO_set_mem_eof_return()\fR, \fBBIO_set_mem_buf()\fR and \fBBIO_get_mem_ptr()\fR +return 1 on success or a value which is less than or equal to 0 if an error occurred. +.PP +\&\fBBIO_get_mem_data()\fR returns the total number of bytes available on success, +0 if b is \s-1NULL,\s0 or a negative value in case of other errors. +.PP +\&\fBBIO_new_mem_buf()\fR returns a valid \fB\s-1BIO\s0\fR structure on success or \s-1NULL\s0 on error. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +Create a memory \s-1BIO\s0 and write some data to it: +.PP +.Vb 1 +\& BIO *mem = BIO_new(BIO_s_mem()); +\& +\& BIO_puts(mem, "Hello World\en"); +.Ve +.PP +Create a read only memory \s-1BIO:\s0 +.PP +.Vb 2 +\& char data[] = "Hello World"; +\& BIO *mem = BIO_new_mem_buf(data, \-1); +.Ve +.PP +Extract the \s-1BUF_MEM\s0 structure from a memory \s-1BIO\s0 and then free up the \s-1BIO:\s0 +.PP +.Vb 1 +\& BUF_MEM *bptr; +\& +\& BIO_get_mem_ptr(mem, &bptr); +\& BIO_set_close(mem, BIO_NOCLOSE); /* So BIO_free() leaves BUF_MEM alone */ +\& BIO_free(mem); +.Ve +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_s_null.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_s_null.3 new file mode 100644 index 00000000..4f8becc9 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_s_null.3 @@ -0,0 +1,176 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "BIO_S_NULL 3" +.TH BIO_S_NULL 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +BIO_s_null \- null data sink +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& const BIO_METHOD *BIO_s_null(void); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBBIO_s_null()\fR returns the null sink \s-1BIO\s0 method. Data written to +the null sink is discarded, reads return \s-1EOF.\s0 +.SH "NOTES" +.IX Header "NOTES" +A null sink \s-1BIO\s0 behaves in a similar manner to the Unix /dev/null +device. +.PP +A null bio can be placed on the end of a chain to discard any data +passed through it. +.PP +A null sink is useful if, for example, an application wishes to digest some +data by writing through a digest bio but not send the digested data anywhere. +Since a \s-1BIO\s0 chain must normally include a source/sink \s-1BIO\s0 this can be achieved +by adding a null sink \s-1BIO\s0 to the end of the chain +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBBIO_s_null()\fR returns the null sink \s-1BIO\s0 method. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_s_socket.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_s_socket.3 new file mode 100644 index 00000000..5e29cfac --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_s_socket.3 @@ -0,0 +1,186 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "BIO_S_SOCKET 3" +.TH BIO_S_SOCKET 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +BIO_s_socket, BIO_new_socket \- socket BIO +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& const BIO_METHOD *BIO_s_socket(void); +\& +\& BIO *BIO_new_socket(int sock, int close_flag); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBBIO_s_socket()\fR returns the socket \s-1BIO\s0 method. This is a wrapper +round the platform's socket routines. +.PP +\&\fBBIO_read_ex()\fR and \fBBIO_write_ex()\fR read or write the underlying socket. +\&\fBBIO_puts()\fR is supported but \fBBIO_gets()\fR is not. +.PP +If the close flag is set then the socket is shut down and closed +when the \s-1BIO\s0 is freed. +.PP +\&\fBBIO_new_socket()\fR returns a socket \s-1BIO\s0 using \fBsock\fR and \fBclose_flag\fR. +.SH "NOTES" +.IX Header "NOTES" +Socket BIOs also support any relevant functionality of file descriptor +BIOs. +.PP +The reason for having separate file descriptor and socket BIOs is that on some +platforms sockets are not file descriptors and use distinct I/O routines, +Windows is one such platform. Any code mixing the two will not work on +all platforms. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBBIO_s_socket()\fR returns the socket \s-1BIO\s0 method. +.PP +\&\fBBIO_new_socket()\fR returns the newly allocated \s-1BIO\s0 or \s-1NULL\s0 is an error +occurred. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_set_callback.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_set_callback.3 new file mode 100644 index 00000000..6f14d176 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_set_callback.3 @@ -0,0 +1,392 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "BIO_SET_CALLBACK 3" +.TH BIO_SET_CALLBACK 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +BIO_set_callback_ex, BIO_get_callback_ex, BIO_set_callback, BIO_get_callback, BIO_set_callback_arg, BIO_get_callback_arg, BIO_debug_callback, BIO_callback_fn_ex, BIO_callback_fn \&\- BIO callback functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& typedef long (*BIO_callback_fn_ex)(BIO *b, int oper, const char *argp, +\& size_t len, int argi, +\& long argl, int ret, size_t *processed); +\& typedef long (*BIO_callback_fn)(BIO *b, int oper, const char *argp, int argi, +\& long argl, long ret); +\& +\& void BIO_set_callback_ex(BIO *b, BIO_callback_fn_ex callback); +\& BIO_callback_fn_ex BIO_get_callback_ex(const BIO *b); +\& +\& void BIO_set_callback(BIO *b, BIO_callback_fn cb); +\& BIO_callback_fn BIO_get_callback(BIO *b); +\& void BIO_set_callback_arg(BIO *b, char *arg); +\& char *BIO_get_callback_arg(const BIO *b); +\& +\& long BIO_debug_callback(BIO *bio, int cmd, const char *argp, int argi, +\& long argl, long ret); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBBIO_set_callback_ex()\fR and \fBBIO_get_callback_ex()\fR set and retrieve the \s-1BIO\s0 +callback. The callback is called during most high level \s-1BIO\s0 operations. It can +be used for debugging purposes to trace operations on a \s-1BIO\s0 or to modify its +operation. +.PP +\&\fBBIO_set_callback()\fR and \fBBIO_get_callback()\fR set and retrieve the old format \s-1BIO\s0 +callback. New code should not use these functions, but they are retained for +backwards compatibility. Any callback set via \fBBIO_set_callback_ex()\fR will get +called in preference to any set by \fBBIO_set_callback()\fR. +.PP +\&\fBBIO_set_callback_arg()\fR and \fBBIO_get_callback_arg()\fR are macros which can be +used to set and retrieve an argument for use in the callback. +.PP +\&\fBBIO_debug_callback()\fR is a standard debugging callback which prints +out information relating to each \s-1BIO\s0 operation. If the callback +argument is set it is interpreted as a \s-1BIO\s0 to send the information +to, otherwise stderr is used. +.PP +\&\fBBIO_callback_fn_ex()\fR is the type of the callback function and \fBBIO_callback_fn()\fR +is the type of the old format callback function. The meaning of each argument +is described below: +.IP "\fBb\fR" 4 +.IX Item "b" +The \s-1BIO\s0 the callback is attached to is passed in \fBb\fR. +.IP "\fBoper\fR" 4 +.IX Item "oper" +\&\fBoper\fR is set to the operation being performed. For some operations +the callback is called twice, once before and once after the actual +operation, the latter case has \fBoper\fR or'ed with \s-1BIO_CB_RETURN.\s0 +.IP "\fBlen\fR" 4 +.IX Item "len" +The length of the data requested to be read or written. This is only useful if +\&\fBoper\fR is \s-1BIO_CB_READ, BIO_CB_WRITE\s0 or \s-1BIO_CB_GETS.\s0 +.IP "\fBargp\fR \fBargi\fR \fBargl\fR" 4 +.IX Item "argp argi argl" +The meaning of the arguments \fBargp\fR, \fBargi\fR and \fBargl\fR depends on +the value of \fBoper\fR, that is the operation being performed. +.IP "\fBprocessed\fR" 4 +.IX Item "processed" +\&\fBprocessed\fR is a pointer to a location which will be updated with the amount of +data that was actually read or written. Only used for \s-1BIO_CB_READ, BIO_CB_WRITE, +BIO_CB_GETS\s0 and \s-1BIO_CB_PUTS.\s0 +.IP "\fBret\fR" 4 +.IX Item "ret" +\&\fBret\fR is the return value that would be returned to the +application if no callback were present. The actual value returned +is the return value of the callback itself. In the case of callbacks +called before the actual \s-1BIO\s0 operation 1 is placed in \fBret\fR, if +the return value is not positive it will be immediately returned to +the application and the \s-1BIO\s0 operation will not be performed. +.PP +The callback should normally simply return \fBret\fR when it has +finished processing, unless it specifically wishes to modify the +value returned to the application. +.SH "CALLBACK OPERATIONS" +.IX Header "CALLBACK OPERATIONS" +In the notes below, \fBcallback\fR defers to the actual callback +function that is called. +.IP "\fBBIO_free(b)\fR" 4 +.IX Item "BIO_free(b)" +.Vb 1 +\& callback_ex(b, BIO_CB_FREE, NULL, 0, 0, 0L, 1L, NULL) +.Ve +.Sp +or +.Sp +.Vb 1 +\& callback(b, BIO_CB_FREE, NULL, 0L, 0L, 1L) +.Ve +.Sp +is called before the free operation. +.IP "\fBBIO_read_ex(b, data, dlen, readbytes)\fR" 4 +.IX Item "BIO_read_ex(b, data, dlen, readbytes)" +.Vb 1 +\& callback_ex(b, BIO_CB_READ, data, dlen, 0, 0L, 1L, NULL) +.Ve +.Sp +or +.Sp +.Vb 1 +\& callback(b, BIO_CB_READ, data, dlen, 0L, 1L) +.Ve +.Sp +is called before the read and +.Sp +.Vb 2 +\& callback_ex(b, BIO_CB_READ | BIO_CB_RETURN, data, dlen, 0, 0L, retvalue, +\& &readbytes) +.Ve +.Sp +or +.Sp +.Vb 1 +\& callback(b, BIO_CB_READ|BIO_CB_RETURN, data, dlen, 0L, retvalue) +.Ve +.Sp +after. +.IP "\fBBIO_write(b, data, dlen, written)\fR" 4 +.IX Item "BIO_write(b, data, dlen, written)" +.Vb 1 +\& callback_ex(b, BIO_CB_WRITE, data, dlen, 0, 0L, 1L, NULL) +.Ve +.Sp +or +.Sp +.Vb 1 +\& callback(b, BIO_CB_WRITE, datat, dlen, 0L, 1L) +.Ve +.Sp +is called before the write and +.Sp +.Vb 2 +\& callback_ex(b, BIO_CB_WRITE | BIO_CB_RETURN, data, dlen, 0, 0L, retvalue, +\& &written) +.Ve +.Sp +or +.Sp +.Vb 1 +\& callback(b, BIO_CB_WRITE|BIO_CB_RETURN, data, dlen, 0L, retvalue) +.Ve +.Sp +after. +.IP "\fBBIO_gets(b, buf, size)\fR" 4 +.IX Item "BIO_gets(b, buf, size)" +.Vb 1 +\& callback_ex(b, BIO_CB_GETS, buf, size, 0, 0L, 1, NULL, NULL) +.Ve +.Sp +or +.Sp +.Vb 1 +\& callback(b, BIO_CB_GETS, buf, size, 0L, 1L) +.Ve +.Sp +is called before the operation and +.Sp +.Vb 2 +\& callback_ex(b, BIO_CB_GETS | BIO_CB_RETURN, buf, size, 0, 0L, retvalue, +\& &readbytes) +.Ve +.Sp +or +.Sp +.Vb 1 +\& callback(b, BIO_CB_GETS|BIO_CB_RETURN, buf, size, 0L, retvalue) +.Ve +.Sp +after. +.IP "\fBBIO_puts(b, buf)\fR" 4 +.IX Item "BIO_puts(b, buf)" +.Vb 1 +\& callback_ex(b, BIO_CB_PUTS, buf, 0, 0, 0L, 1L, NULL); +.Ve +.Sp +or +.Sp +.Vb 1 +\& callback(b, BIO_CB_PUTS, buf, 0, 0L, 1L) +.Ve +.Sp +is called before the operation and +.Sp +.Vb 1 +\& callback_ex(b, BIO_CB_PUTS | BIO_CB_RETURN, buf, 0, 0, 0L, retvalue, &written) +.Ve +.Sp +or +.Sp +.Vb 1 +\& callback(b, BIO_CB_PUTS|BIO_CB_RETURN, buf, 0, 0L, retvalue) +.Ve +.Sp +after. +.IP "\fBBIO_ctrl(\s-1BIO\s0 *b, int cmd, long larg, void *parg)\fR" 4 +.IX Item "BIO_ctrl(BIO *b, int cmd, long larg, void *parg)" +.Vb 1 +\& callback_ex(b, BIO_CB_CTRL, parg, 0, cmd, larg, 1L, NULL) +.Ve +.Sp +or +.Sp +.Vb 1 +\& callback(b, BIO_CB_CTRL, parg, cmd, larg, 1L) +.Ve +.Sp +is called before the call and +.Sp +.Vb 1 +\& callback_ex(b, BIO_CB_CTRL | BIO_CB_RETURN, parg, 0, cmd, larg, ret, NULL) +.Ve +.Sp +or +.Sp +.Vb 1 +\& callback(b, BIO_CB_CTRL|BIO_CB_RETURN, parg, cmd, larg, ret) +.Ve +.Sp +after. +.Sp +Note: \fBcmd\fR == \fB\s-1BIO_CTRL_SET_CALLBACK\s0\fR is special, because \fBparg\fR is not the +argument of type \fBBIO_info_cb\fR itself. In this case \fBparg\fR is a pointer to +the actual call parameter, see \fBBIO_callback_ctrl\fR. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBBIO_get_callback_ex()\fR and \fBBIO_get_callback()\fR return the callback function +previously set by a call to \fBBIO_set_callback_ex()\fR and \fBBIO_set_callback()\fR +respectively. +.PP +\&\fBBIO_get_callback_arg()\fR returns a \fBchar\fR pointer to the value previously set +via a call to \fBBIO_set_callback_arg()\fR. +.PP +\&\fBBIO_debug_callback()\fR returns 1 or \fBret\fR if it's called after specific \s-1BIO\s0 +operations. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +The \fBBIO_debug_callback()\fR function is a good example, its source is +in crypto/bio/bio_cb.c +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_should_retry.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_should_retry.3 new file mode 100644 index 00000000..3b773e3e --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BIO_should_retry.3 @@ -0,0 +1,273 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "BIO_SHOULD_RETRY 3" +.TH BIO_SHOULD_RETRY 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +BIO_should_read, BIO_should_write, BIO_should_io_special, BIO_retry_type, BIO_should_retry, BIO_get_retry_BIO, BIO_get_retry_reason, BIO_set_retry_reason \- BIO retry functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int BIO_should_read(BIO *b); +\& int BIO_should_write(BIO *b); +\& int BIO_should_io_special(iBIO *b); +\& int BIO_retry_type(BIO *b); +\& int BIO_should_retry(BIO *b); +\& +\& BIO *BIO_get_retry_BIO(BIO *bio, int *reason); +\& int BIO_get_retry_reason(BIO *bio); +\& void BIO_set_retry_reason(BIO *bio, int reason); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +These functions determine why a \s-1BIO\s0 is not able to read or write data. +They will typically be called after a failed \fBBIO_read_ex()\fR or \fBBIO_write_ex()\fR +call. +.PP +\&\fBBIO_should_retry()\fR is true if the call that produced this condition +should then be retried at a later time. +.PP +If \fBBIO_should_retry()\fR is false then the cause is an error condition. +.PP +\&\fBBIO_should_read()\fR is true if the cause of the condition is that the \s-1BIO\s0 +has insufficient data to return. Check for readability and/or retry the +last operation. +.PP +\&\fBBIO_should_write()\fR is true if the cause of the condition is that the \s-1BIO\s0 +has pending data to write. Check for writability and/or retry the +last operation. +.PP +\&\fBBIO_should_io_special()\fR is true if some \*(L"special\*(R" condition, that is a +reason other than reading or writing is the cause of the condition. +.PP +\&\fBBIO_retry_type()\fR returns a mask of the cause of a retry condition +consisting of the values \fB\s-1BIO_FLAGS_READ\s0\fR, \fB\s-1BIO_FLAGS_WRITE\s0\fR, +\&\fB\s-1BIO_FLAGS_IO_SPECIAL\s0\fR though current \s-1BIO\s0 types will only set one of +these. +.PP +\&\fBBIO_get_retry_BIO()\fR determines the precise reason for the special +condition, it returns the \s-1BIO\s0 that caused this condition and if +\&\fBreason\fR is not \s-1NULL\s0 it contains the reason code. The meaning of +the reason code and the action that should be taken depends on +the type of \s-1BIO\s0 that resulted in this condition. +.PP +\&\fBBIO_get_retry_reason()\fR returns the reason for a special condition if +passed the relevant \s-1BIO,\s0 for example as returned by \fBBIO_get_retry_BIO()\fR. +.PP +\&\fBBIO_set_retry_reason()\fR sets the retry reason for a special condition for a given +\&\s-1BIO.\s0 This would usually only be called by \s-1BIO\s0 implementations. +.SH "NOTES" +.IX Header "NOTES" +\&\fBBIO_should_read()\fR, \fBBIO_should_write()\fR, \fBBIO_should_io_special()\fR, +\&\fBBIO_retry_type()\fR, and \fBBIO_should_retry()\fR, are implemented as macros. +.PP +If \fBBIO_should_retry()\fR returns false then the precise \*(L"error condition\*(R" +depends on the \s-1BIO\s0 type that caused it and the return code of the \s-1BIO\s0 +operation. For example if a call to \fBBIO_read_ex()\fR on a socket \s-1BIO\s0 returns +0 and \fBBIO_should_retry()\fR is false then the cause will be that the +connection closed. A similar condition on a file \s-1BIO\s0 will mean that it +has reached \s-1EOF.\s0 Some \s-1BIO\s0 types may place additional information on +the error queue. For more details see the individual \s-1BIO\s0 type manual +pages. +.PP +If the underlying I/O structure is in a blocking mode almost all current +\&\s-1BIO\s0 types will not request a retry, because the underlying I/O +calls will not. If the application knows that the \s-1BIO\s0 type will never +signal a retry then it need not call \fBBIO_should_retry()\fR after a failed +\&\s-1BIO I/O\s0 call. This is typically done with file BIOs. +.PP +\&\s-1SSL\s0 BIOs are the only current exception to this rule: they can request a +retry even if the underlying I/O structure is blocking, if a handshake +occurs during a call to \fBBIO_read()\fR. An application can retry the failed +call immediately or avoid this situation by setting \s-1SSL_MODE_AUTO_RETRY\s0 +on the underlying \s-1SSL\s0 structure. +.PP +While an application may retry a failed non blocking call immediately +this is likely to be very inefficient because the call will fail +repeatedly until data can be processed or is available. An application +will normally wait until the necessary condition is satisfied. How +this is done depends on the underlying I/O structure. +.PP +For example if the cause is ultimately a socket and \fBBIO_should_read()\fR +is true then a call to \fBselect()\fR may be made to wait until data is +available and then retry the \s-1BIO\s0 operation. By combining the retry +conditions of several non blocking BIOs in a single \fBselect()\fR call +it is possible to service several BIOs in a single thread, though +the performance may be poor if \s-1SSL\s0 BIOs are present because long delays +can occur during the initial handshake process. +.PP +It is possible for a \s-1BIO\s0 to block indefinitely if the underlying I/O +structure cannot process or return any data. This depends on the behaviour of +the platforms I/O functions. This is often not desirable: one solution +is to use non blocking I/O and use a timeout on the \fBselect()\fR (or +equivalent) call. +.SH "BUGS" +.IX Header "BUGS" +The OpenSSL \s-1ASN1\s0 functions cannot gracefully deal with non blocking I/O: +that is they cannot retry after a partial read or write. This is usually +worked around by only passing the relevant data to \s-1ASN1\s0 functions when +the entire structure can be read or written. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBBIO_should_read()\fR, \fBBIO_should_write()\fR, \fBBIO_should_io_special()\fR, and +\&\fBBIO_should_retry()\fR return either 1 or 0 based on the actual conditions +of the \fB\s-1BIO\s0\fR. +.PP +\&\fBBIO_retry_type()\fR returns a flag combination presenting the cause of a retry +condition or false if there is no retry condition. +.PP +\&\fBBIO_get_retry_BIO()\fR returns a valid \fB\s-1BIO\s0\fR structure. +.PP +\&\fBBIO_get_retry_reason()\fR returns the reason for a special condition. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +bio +.SH "HISTORY" +.IX Header "HISTORY" +The \fBBIO_get_retry_reason()\fR and \fBBIO_set_retry_reason()\fR functions were added in +OpenSSL 1.1.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_BLINDING_new.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_BLINDING_new.3 new file mode 100644 index 00000000..01b756d3 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_BLINDING_new.3 @@ -0,0 +1,254 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "BN_BLINDING_NEW 3" +.TH BN_BLINDING_NEW 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +BN_BLINDING_new, BN_BLINDING_free, BN_BLINDING_update, BN_BLINDING_convert, BN_BLINDING_invert, BN_BLINDING_convert_ex, BN_BLINDING_invert_ex, BN_BLINDING_is_current_thread, BN_BLINDING_set_current_thread, BN_BLINDING_lock, BN_BLINDING_unlock, BN_BLINDING_get_flags, BN_BLINDING_set_flags, BN_BLINDING_create_param \- blinding related BIGNUM functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& BN_BLINDING *BN_BLINDING_new(const BIGNUM *A, const BIGNUM *Ai, +\& BIGNUM *mod); +\& void BN_BLINDING_free(BN_BLINDING *b); +\& int BN_BLINDING_update(BN_BLINDING *b, BN_CTX *ctx); +\& int BN_BLINDING_convert(BIGNUM *n, BN_BLINDING *b, BN_CTX *ctx); +\& int BN_BLINDING_invert(BIGNUM *n, BN_BLINDING *b, BN_CTX *ctx); +\& int BN_BLINDING_convert_ex(BIGNUM *n, BIGNUM *r, BN_BLINDING *b, +\& BN_CTX *ctx); +\& int BN_BLINDING_invert_ex(BIGNUM *n, const BIGNUM *r, BN_BLINDING *b, +\& BN_CTX *ctx); +\& int BN_BLINDING_is_current_thread(BN_BLINDING *b); +\& void BN_BLINDING_set_current_thread(BN_BLINDING *b); +\& int BN_BLINDING_lock(BN_BLINDING *b); +\& int BN_BLINDING_unlock(BN_BLINDING *b); +\& unsigned long BN_BLINDING_get_flags(const BN_BLINDING *); +\& void BN_BLINDING_set_flags(BN_BLINDING *, unsigned long); +\& BN_BLINDING *BN_BLINDING_create_param(BN_BLINDING *b, +\& const BIGNUM *e, BIGNUM *m, BN_CTX *ctx, +\& int (*bn_mod_exp)(BIGNUM *r, +\& const BIGNUM *a, +\& const BIGNUM *p, +\& const BIGNUM *m, +\& BN_CTX *ctx, +\& BN_MONT_CTX *m_ctx), +\& BN_MONT_CTX *m_ctx); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBBN_BLINDING_new()\fR allocates a new \fB\s-1BN_BLINDING\s0\fR structure and copies +the \fBA\fR and \fBAi\fR values into the newly created \fB\s-1BN_BLINDING\s0\fR object. +.PP +\&\fBBN_BLINDING_free()\fR frees the \fB\s-1BN_BLINDING\s0\fR structure. +If \fBb\fR is \s-1NULL,\s0 nothing is done. +.PP +\&\fBBN_BLINDING_update()\fR updates the \fB\s-1BN_BLINDING\s0\fR parameters by squaring +the \fBA\fR and \fBAi\fR or, after specific number of uses and if the +necessary parameters are set, by re-creating the blinding parameters. +.PP +\&\fBBN_BLINDING_convert_ex()\fR multiplies \fBn\fR with the blinding factor \fBA\fR. +If \fBr\fR is not \s-1NULL\s0 a copy the inverse blinding factor \fBAi\fR will be +returned in \fBr\fR (this is useful if a \fB\s-1RSA\s0\fR object is shared among +several threads). \fBBN_BLINDING_invert_ex()\fR multiplies \fBn\fR with the +inverse blinding factor \fBAi\fR. If \fBr\fR is not \s-1NULL\s0 it will be used as +the inverse blinding. +.PP +\&\fBBN_BLINDING_convert()\fR and \fBBN_BLINDING_invert()\fR are wrapper +functions for \fBBN_BLINDING_convert_ex()\fR and \fBBN_BLINDING_invert_ex()\fR +with \fBr\fR set to \s-1NULL.\s0 +.PP +\&\fBBN_BLINDING_is_current_thread()\fR returns whether the \fB\s-1BN_BLINDING\s0\fR +structure is owned by the current thread. This is to help users +provide proper locking if needed for multi-threaded use. +.PP +\&\fBBN_BLINDING_set_current_thread()\fR sets the current thread as the +owner of the \fB\s-1BN_BLINDING\s0\fR structure. +.PP +\&\fBBN_BLINDING_lock()\fR locks the \fB\s-1BN_BLINDING\s0\fR structure. +.PP +\&\fBBN_BLINDING_unlock()\fR unlocks the \fB\s-1BN_BLINDING\s0\fR structure. +.PP +\&\fBBN_BLINDING_get_flags()\fR returns the \s-1BN_BLINDING\s0 flags. Currently +there are two supported flags: \fB\s-1BN_BLINDING_NO_UPDATE\s0\fR and +\&\fB\s-1BN_BLINDING_NO_RECREATE\s0\fR. \fB\s-1BN_BLINDING_NO_UPDATE\s0\fR inhibits the +automatic update of the \fB\s-1BN_BLINDING\s0\fR parameters after each use +and \fB\s-1BN_BLINDING_NO_RECREATE\s0\fR inhibits the automatic re-creation +of the \fB\s-1BN_BLINDING\s0\fR parameters after a fixed number of uses (currently +32). In newly allocated \fB\s-1BN_BLINDING\s0\fR objects no flags are set. +\&\fBBN_BLINDING_set_flags()\fR sets the \fB\s-1BN_BLINDING\s0\fR parameters flags. +.PP +\&\fBBN_BLINDING_create_param()\fR creates new \fB\s-1BN_BLINDING\s0\fR parameters +using the exponent \fBe\fR and the modulus \fBm\fR. \fBbn_mod_exp\fR and +\&\fBm_ctx\fR can be used to pass special functions for exponentiation +(normally \fBBN_mod_exp_mont()\fR and \fB\s-1BN_MONT_CTX\s0\fR). +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBBN_BLINDING_new()\fR returns the newly allocated \fB\s-1BN_BLINDING\s0\fR structure +or \s-1NULL\s0 in case of an error. +.PP +\&\fBBN_BLINDING_update()\fR, \fBBN_BLINDING_convert()\fR, \fBBN_BLINDING_invert()\fR, +\&\fBBN_BLINDING_convert_ex()\fR and \fBBN_BLINDING_invert_ex()\fR return 1 on +success and 0 if an error occurred. +.PP +\&\fBBN_BLINDING_is_current_thread()\fR returns 1 if the current thread owns +the \fB\s-1BN_BLINDING\s0\fR object, 0 otherwise. +.PP +\&\fBBN_BLINDING_set_current_thread()\fR doesn't return anything. +.PP +\&\fBBN_BLINDING_lock()\fR, \fBBN_BLINDING_unlock()\fR return 1 if the operation +succeeded or 0 on error. +.PP +\&\fBBN_BLINDING_get_flags()\fR returns the currently set \fB\s-1BN_BLINDING\s0\fR flags +(a \fBunsigned long\fR value). +.PP +\&\fBBN_BLINDING_create_param()\fR returns the newly created \fB\s-1BN_BLINDING\s0\fR +parameters or \s-1NULL\s0 on error. +.SH "HISTORY" +.IX Header "HISTORY" +\&\fBBN_BLINDING_thread_id()\fR was first introduced in OpenSSL 1.0.0, and it +deprecates \fBBN_BLINDING_set_thread_id()\fR and \fBBN_BLINDING_get_thread_id()\fR. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2005\-2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_CTX_new.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_CTX_new.3 new file mode 100644 index 00000000..08b045fd --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_CTX_new.3 @@ -0,0 +1,213 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "BN_CTX_NEW 3" +.TH BN_CTX_NEW 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +BN_CTX_new, BN_CTX_secure_new, BN_CTX_free \- allocate and free BN_CTX structures +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& BN_CTX *BN_CTX_new(void); +\& +\& BN_CTX *BN_CTX_secure_new(void); +\& +\& void BN_CTX_free(BN_CTX *c); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +A \fB\s-1BN_CTX\s0\fR is a structure that holds \fB\s-1BIGNUM\s0\fR temporary variables used by +library functions. Since dynamic memory allocation to create \fB\s-1BIGNUM\s0\fRs +is rather expensive when used in conjunction with repeated subroutine +calls, the \fB\s-1BN_CTX\s0\fR structure is used. +.PP +\&\fBBN_CTX_new()\fR allocates and initializes a \fB\s-1BN_CTX\s0\fR structure. +\&\fBBN_CTX_secure_new()\fR allocates and initializes a \fB\s-1BN_CTX\s0\fR structure +but uses the secure heap (see \fBCRYPTO_secure_malloc\fR\|(3)) to hold the +\&\fB\s-1BIGNUM\s0\fRs. +.PP +\&\fBBN_CTX_free()\fR frees the components of the \fB\s-1BN_CTX\s0\fR and the structure itself. +Since \fBBN_CTX_start()\fR is required in order to obtain \fB\s-1BIGNUM\s0\fRs from the +\&\fB\s-1BN_CTX\s0\fR, in most cases \fBBN_CTX_end()\fR must be called before the \fB\s-1BN_CTX\s0\fR may +be freed by \fBBN_CTX_free()\fR. If \fBc\fR is \s-1NULL,\s0 nothing is done. +.PP +A given \fB\s-1BN_CTX\s0\fR must only be used by a single thread of execution. No +locking is performed, and the internal pool allocator will not properly handle +multiple threads of execution. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBBN_CTX_new()\fR and \fBBN_CTX_secure_new()\fR return a pointer to the \fB\s-1BN_CTX\s0\fR. +If the allocation fails, +they return \fB\s-1NULL\s0\fR and sets an error code that can be obtained by +\&\fBERR_get_error\fR\|(3). +.PP +\&\fBBN_CTX_free()\fR has no return values. +.SH "REMOVED FUNCTIONALITY" +.IX Header "REMOVED FUNCTIONALITY" +.Vb 1 +\& void BN_CTX_init(BN_CTX *c); +.Ve +.PP +\&\fBBN_CTX_init()\fR is no longer available as of OpenSSL 1.1.0. Applications should +replace use of BN_CTX_init with BN_CTX_new instead: +.PP +.Vb 6 +\& BN_CTX *ctx; +\& ctx = BN_CTX_new(); +\& if (!ctx) +\& /* error */ +\& ... +\& BN_CTX_free(ctx); +.Ve +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_get_error\fR\|(3), \fBBN_add\fR\|(3), +\&\fBBN_CTX_start\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +\&\fBBN_CTX_init()\fR was removed in OpenSSL 1.1.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_CTX_start.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_CTX_start.3 new file mode 100644 index 00000000..3a74b470 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_CTX_start.3 @@ -0,0 +1,189 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "BN_CTX_START 3" +.TH BN_CTX_START 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +BN_CTX_start, BN_CTX_get, BN_CTX_end \- use temporary BIGNUM variables +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& void BN_CTX_start(BN_CTX *ctx); +\& +\& BIGNUM *BN_CTX_get(BN_CTX *ctx); +\& +\& void BN_CTX_end(BN_CTX *ctx); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +These functions are used to obtain temporary \fB\s-1BIGNUM\s0\fR variables from +a \fB\s-1BN_CTX\s0\fR (which can been created by using \fBBN_CTX_new\fR\|(3)) +in order to save the overhead of repeatedly creating and +freeing \fB\s-1BIGNUM\s0\fRs in functions that are called from inside a loop. +.PP +A function must call \fBBN_CTX_start()\fR first. Then, \fBBN_CTX_get()\fR may be +called repeatedly to obtain temporary \fB\s-1BIGNUM\s0\fRs. All \fBBN_CTX_get()\fR +calls must be made before calling any other functions that use the +\&\fBctx\fR as an argument. +.PP +Finally, \fBBN_CTX_end()\fR must be called before returning from the function. +If \fBctx\fR is \s-1NULL,\s0 nothing is done. +When \fBBN_CTX_end()\fR is called, the \fB\s-1BIGNUM\s0\fR pointers obtained from +\&\fBBN_CTX_get()\fR become invalid. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBBN_CTX_start()\fR and \fBBN_CTX_end()\fR return no values. +.PP +\&\fBBN_CTX_get()\fR returns a pointer to the \fB\s-1BIGNUM\s0\fR, or \fB\s-1NULL\s0\fR on error. +Once \fBBN_CTX_get()\fR has failed, the subsequent calls will return \fB\s-1NULL\s0\fR +as well, so it is sufficient to check the return value of the last +\&\fBBN_CTX_get()\fR call. In case of an error, an error code is set, which +can be obtained by \fBERR_get_error\fR\|(3). +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBBN_CTX_new\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_add.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_add.3 new file mode 100644 index 00000000..640e2080 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_add.3 @@ -0,0 +1,259 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "BN_ADD 3" +.TH BN_ADD 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +BN_add, BN_sub, BN_mul, BN_sqr, BN_div, BN_mod, BN_nnmod, BN_mod_add, BN_mod_sub, BN_mod_mul, BN_mod_sqr, BN_exp, BN_mod_exp, BN_gcd \- arithmetic operations on BIGNUMs +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int BN_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); +\& +\& int BN_sub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); +\& +\& int BN_mul(BIGNUM *r, BIGNUM *a, BIGNUM *b, BN_CTX *ctx); +\& +\& int BN_sqr(BIGNUM *r, BIGNUM *a, BN_CTX *ctx); +\& +\& int BN_div(BIGNUM *dv, BIGNUM *rem, const BIGNUM *a, const BIGNUM *d, +\& BN_CTX *ctx); +\& +\& int BN_mod(BIGNUM *rem, const BIGNUM *a, const BIGNUM *m, BN_CTX *ctx); +\& +\& int BN_nnmod(BIGNUM *r, const BIGNUM *a, const BIGNUM *m, BN_CTX *ctx); +\& +\& int BN_mod_add(BIGNUM *r, BIGNUM *a, BIGNUM *b, const BIGNUM *m, +\& BN_CTX *ctx); +\& +\& int BN_mod_sub(BIGNUM *r, BIGNUM *a, BIGNUM *b, const BIGNUM *m, +\& BN_CTX *ctx); +\& +\& int BN_mod_mul(BIGNUM *r, BIGNUM *a, BIGNUM *b, const BIGNUM *m, +\& BN_CTX *ctx); +\& +\& int BN_mod_sqr(BIGNUM *r, BIGNUM *a, const BIGNUM *m, BN_CTX *ctx); +\& +\& int BN_exp(BIGNUM *r, BIGNUM *a, BIGNUM *p, BN_CTX *ctx); +\& +\& int BN_mod_exp(BIGNUM *r, BIGNUM *a, const BIGNUM *p, +\& const BIGNUM *m, BN_CTX *ctx); +\& +\& int BN_gcd(BIGNUM *r, BIGNUM *a, BIGNUM *b, BN_CTX *ctx); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBBN_add()\fR adds \fIa\fR and \fIb\fR and places the result in \fIr\fR (\f(CW\*(C`r=a+b\*(C'\fR). +\&\fIr\fR may be the same \fB\s-1BIGNUM\s0\fR as \fIa\fR or \fIb\fR. +.PP +\&\fBBN_sub()\fR subtracts \fIb\fR from \fIa\fR and places the result in \fIr\fR (\f(CW\*(C`r=a\-b\*(C'\fR). +\&\fIr\fR may be the same \fB\s-1BIGNUM\s0\fR as \fIa\fR or \fIb\fR. +.PP +\&\fBBN_mul()\fR multiplies \fIa\fR and \fIb\fR and places the result in \fIr\fR (\f(CW\*(C`r=a*b\*(C'\fR). +\&\fIr\fR may be the same \fB\s-1BIGNUM\s0\fR as \fIa\fR or \fIb\fR. +For multiplication by powers of 2, use \fBBN_lshift\fR\|(3). +.PP +\&\fBBN_sqr()\fR takes the square of \fIa\fR and places the result in \fIr\fR +(\f(CW\*(C`r=a^2\*(C'\fR). \fIr\fR and \fIa\fR may be the same \fB\s-1BIGNUM\s0\fR. +This function is faster than BN_mul(r,a,a). +.PP +\&\fBBN_div()\fR divides \fIa\fR by \fId\fR and places the result in \fIdv\fR and the +remainder in \fIrem\fR (\f(CW\*(C`dv=a/d, rem=a%d\*(C'\fR). Either of \fIdv\fR and \fIrem\fR may +be \fB\s-1NULL\s0\fR, in which case the respective value is not returned. +The result is rounded towards zero; thus if \fIa\fR is negative, the +remainder will be zero or negative. +For division by powers of 2, use \fBBN_rshift\fR\|(3). +.PP +\&\fBBN_mod()\fR corresponds to \fBBN_div()\fR with \fIdv\fR set to \fB\s-1NULL\s0\fR. +.PP +\&\fBBN_nnmod()\fR reduces \fIa\fR modulo \fIm\fR and places the non-negative +remainder in \fIr\fR. +.PP +\&\fBBN_mod_add()\fR adds \fIa\fR to \fIb\fR modulo \fIm\fR and places the non-negative +result in \fIr\fR. +.PP +\&\fBBN_mod_sub()\fR subtracts \fIb\fR from \fIa\fR modulo \fIm\fR and places the +non-negative result in \fIr\fR. +.PP +\&\fBBN_mod_mul()\fR multiplies \fIa\fR by \fIb\fR and finds the non-negative +remainder respective to modulus \fIm\fR (\f(CW\*(C`r=(a*b) mod m\*(C'\fR). \fIr\fR may be +the same \fB\s-1BIGNUM\s0\fR as \fIa\fR or \fIb\fR. For more efficient algorithms for +repeated computations using the same modulus, see +\&\fBBN_mod_mul_montgomery\fR\|(3) and +\&\fBBN_mod_mul_reciprocal\fR\|(3). +.PP +\&\fBBN_mod_sqr()\fR takes the square of \fIa\fR modulo \fBm\fR and places the +result in \fIr\fR. +.PP +\&\fBBN_exp()\fR raises \fIa\fR to the \fIp\fR\-th power and places the result in \fIr\fR +(\f(CW\*(C`r=a^p\*(C'\fR). This function is faster than repeated applications of +\&\fBBN_mul()\fR. +.PP +\&\fBBN_mod_exp()\fR computes \fIa\fR to the \fIp\fR\-th power modulo \fIm\fR (\f(CW\*(C`r=a^p % +m\*(C'\fR). This function uses less time and space than \fBBN_exp()\fR. Do not call this +function when \fBm\fR is even and any of the parameters have the +\&\fB\s-1BN_FLG_CONSTTIME\s0\fR flag set. +.PP +\&\fBBN_gcd()\fR computes the greatest common divisor of \fIa\fR and \fIb\fR and +places the result in \fIr\fR. \fIr\fR may be the same \fB\s-1BIGNUM\s0\fR as \fIa\fR or +\&\fIb\fR. +.PP +For all functions, \fIctx\fR is a previously allocated \fB\s-1BN_CTX\s0\fR used for +temporary variables; see \fBBN_CTX_new\fR\|(3). +.PP +Unless noted otherwise, the result \fB\s-1BIGNUM\s0\fR must be different from +the arguments. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +For all functions, 1 is returned for success, 0 on error. The return +value should always be checked (e.g., \f(CW\*(C`if (!BN_add(r,a,b)) goto err;\*(C'\fR). +The error codes can be obtained by \fBERR_get_error\fR\|(3). +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_get_error\fR\|(3), \fBBN_CTX_new\fR\|(3), +\&\fBBN_add_word\fR\|(3), \fBBN_set_bit\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_add_word.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_add_word.3 new file mode 100644 index 00000000..9f4ba410 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_add_word.3 @@ -0,0 +1,192 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "BN_ADD_WORD 3" +.TH BN_ADD_WORD 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +BN_add_word, BN_sub_word, BN_mul_word, BN_div_word, BN_mod_word \- arithmetic functions on BIGNUMs with integers +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int BN_add_word(BIGNUM *a, BN_ULONG w); +\& +\& int BN_sub_word(BIGNUM *a, BN_ULONG w); +\& +\& int BN_mul_word(BIGNUM *a, BN_ULONG w); +\& +\& BN_ULONG BN_div_word(BIGNUM *a, BN_ULONG w); +\& +\& BN_ULONG BN_mod_word(const BIGNUM *a, BN_ULONG w); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +These functions perform arithmetic operations on BIGNUMs with unsigned +integers. They are much more efficient than the normal \s-1BIGNUM\s0 +arithmetic operations. +.PP +\&\fBBN_add_word()\fR adds \fBw\fR to \fBa\fR (\f(CW\*(C`a+=w\*(C'\fR). +.PP +\&\fBBN_sub_word()\fR subtracts \fBw\fR from \fBa\fR (\f(CW\*(C`a\-=w\*(C'\fR). +.PP +\&\fBBN_mul_word()\fR multiplies \fBa\fR and \fBw\fR (\f(CW\*(C`a*=w\*(C'\fR). +.PP +\&\fBBN_div_word()\fR divides \fBa\fR by \fBw\fR (\f(CW\*(C`a/=w\*(C'\fR) and returns the remainder. +.PP +\&\fBBN_mod_word()\fR returns the remainder of \fBa\fR divided by \fBw\fR (\f(CW\*(C`a%w\*(C'\fR). +.PP +For \fBBN_div_word()\fR and \fBBN_mod_word()\fR, \fBw\fR must not be 0. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBBN_add_word()\fR, \fBBN_sub_word()\fR and \fBBN_mul_word()\fR return 1 for success, 0 +on error. The error codes can be obtained by \fBERR_get_error\fR\|(3). +.PP +\&\fBBN_mod_word()\fR and \fBBN_div_word()\fR return \fBa\fR%\fBw\fR on success and +\&\fB(\s-1BN_ULONG\s0)\-1\fR if an error occurred. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_get_error\fR\|(3), \fBBN_add\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_bn2bin.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_bn2bin.3 new file mode 100644 index 00000000..17f55b92 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_bn2bin.3 @@ -0,0 +1,245 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "BN_BN2BIN 3" +.TH BN_BN2BIN 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +BN_bn2binpad, BN_bn2bin, BN_bin2bn, BN_bn2lebinpad, BN_lebin2bn, BN_bn2hex, BN_bn2dec, BN_hex2bn, BN_dec2bn, BN_print, BN_print_fp, BN_bn2mpi, BN_mpi2bn \- format conversions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int BN_bn2bin(const BIGNUM *a, unsigned char *to); +\& int BN_bn2binpad(const BIGNUM *a, unsigned char *to, int tolen); +\& BIGNUM *BN_bin2bn(const unsigned char *s, int len, BIGNUM *ret); +\& +\& int BN_bn2lebinpad(const BIGNUM *a, unsigned char *to, int tolen); +\& BIGNUM *BN_lebin2bn(const unsigned char *s, int len, BIGNUM *ret); +\& +\& char *BN_bn2hex(const BIGNUM *a); +\& char *BN_bn2dec(const BIGNUM *a); +\& int BN_hex2bn(BIGNUM **a, const char *str); +\& int BN_dec2bn(BIGNUM **a, const char *str); +\& +\& int BN_print(BIO *fp, const BIGNUM *a); +\& int BN_print_fp(FILE *fp, const BIGNUM *a); +\& +\& int BN_bn2mpi(const BIGNUM *a, unsigned char *to); +\& BIGNUM *BN_mpi2bn(unsigned char *s, int len, BIGNUM *ret); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBBN_bn2bin()\fR converts the absolute value of \fBa\fR into big-endian form +and stores it at \fBto\fR. \fBto\fR must point to BN_num_bytes(\fBa\fR) bytes of +memory. +.PP +\&\fBBN_bn2binpad()\fR also converts the absolute value of \fBa\fR into big-endian form +and stores it at \fBto\fR. \fBtolen\fR indicates the length of the output buffer +\&\fBto\fR. The result is padded with zeroes if necessary. If \fBtolen\fR is less than +BN_num_bytes(\fBa\fR) an error is returned. +.PP +\&\fBBN_bin2bn()\fR converts the positive integer in big-endian form of length +\&\fBlen\fR at \fBs\fR into a \fB\s-1BIGNUM\s0\fR and places it in \fBret\fR. If \fBret\fR is +\&\s-1NULL,\s0 a new \fB\s-1BIGNUM\s0\fR is created. +.PP +\&\fBBN_bn2lebinpad()\fR and \fBBN_lebin2bn()\fR are identical to \fBBN_bn2binpad()\fR and +\&\fBBN_bin2bn()\fR except the buffer is in little-endian format. +.PP +\&\fBBN_bn2hex()\fR and \fBBN_bn2dec()\fR return printable strings containing the +hexadecimal and decimal encoding of \fBa\fR respectively. For negative +numbers, the string is prefaced with a leading '\-'. The string must be +freed later using \fBOPENSSL_free()\fR. +.PP +\&\fBBN_hex2bn()\fR takes as many characters as possible from the string \fBstr\fR, +including the leading character '\-' which means negative, to form a valid +hexadecimal number representation and converts them to a \fB\s-1BIGNUM\s0\fR and +stores it in **\fBa\fR. If *\fBa\fR is \s-1NULL,\s0 a new \fB\s-1BIGNUM\s0\fR is created. If +\&\fBa\fR is \s-1NULL,\s0 it only computes the length of valid representation. +A \*(L"negative zero\*(R" is converted to zero. +\&\fBBN_dec2bn()\fR is the same using the decimal system. +.PP +\&\fBBN_print()\fR and \fBBN_print_fp()\fR write the hexadecimal encoding of \fBa\fR, +with a leading '\-' for negative numbers, to the \fB\s-1BIO\s0\fR or \fB\s-1FILE\s0\fR +\&\fBfp\fR. +.PP +\&\fBBN_bn2mpi()\fR and \fBBN_mpi2bn()\fR convert \fB\s-1BIGNUM\s0\fRs from and to a format +that consists of the number's length in bytes represented as a 4\-byte +big-endian number, and the number itself in big-endian format, where +the most significant bit signals a negative number (the representation +of numbers with the \s-1MSB\s0 set is prefixed with null byte). +.PP +\&\fBBN_bn2mpi()\fR stores the representation of \fBa\fR at \fBto\fR, where \fBto\fR +must be large enough to hold the result. The size can be determined by +calling BN_bn2mpi(\fBa\fR, \s-1NULL\s0). +.PP +\&\fBBN_mpi2bn()\fR converts the \fBlen\fR bytes long representation at \fBs\fR to +a \fB\s-1BIGNUM\s0\fR and stores it at \fBret\fR, or in a newly allocated \fB\s-1BIGNUM\s0\fR +if \fBret\fR is \s-1NULL.\s0 +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBBN_bn2bin()\fR returns the length of the big-endian number placed at \fBto\fR. +\&\fBBN_bin2bn()\fR returns the \fB\s-1BIGNUM\s0\fR, \s-1NULL\s0 on error. +.PP +\&\fBBN_bn2binpad()\fR returns the number of bytes written or \-1 if the supplied +buffer is too small. +.PP +\&\fBBN_bn2hex()\fR and \fBBN_bn2dec()\fR return a null-terminated string, or \s-1NULL\s0 +on error. \fBBN_hex2bn()\fR and \fBBN_dec2bn()\fR return the number of characters +used in parsing, or 0 on error, in which +case no new \fB\s-1BIGNUM\s0\fR will be created. +.PP +\&\fBBN_print_fp()\fR and \fBBN_print()\fR return 1 on success, 0 on write errors. +.PP +\&\fBBN_bn2mpi()\fR returns the length of the representation. \fBBN_mpi2bn()\fR +returns the \fB\s-1BIGNUM\s0\fR, and \s-1NULL\s0 on error. +.PP +The error codes can be obtained by \fBERR_get_error\fR\|(3). +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_get_error\fR\|(3), \fBBN_zero\fR\|(3), +\&\fBASN1_INTEGER_to_BN\fR\|(3), +\&\fBBN_num_bytes\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_cmp.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_cmp.3 new file mode 100644 index 00000000..0d949da2 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_cmp.3 @@ -0,0 +1,180 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "BN_CMP 3" +.TH BN_CMP 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +BN_cmp, BN_ucmp, BN_is_zero, BN_is_one, BN_is_word, BN_is_odd \- BIGNUM comparison and test functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int BN_cmp(BIGNUM *a, BIGNUM *b); +\& int BN_ucmp(BIGNUM *a, BIGNUM *b); +\& +\& int BN_is_zero(BIGNUM *a); +\& int BN_is_one(BIGNUM *a); +\& int BN_is_word(BIGNUM *a, BN_ULONG w); +\& int BN_is_odd(BIGNUM *a); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBBN_cmp()\fR compares the numbers \fBa\fR and \fBb\fR. \fBBN_ucmp()\fR compares their +absolute values. +.PP +\&\fBBN_is_zero()\fR, \fBBN_is_one()\fR and \fBBN_is_word()\fR test if \fBa\fR equals 0, 1, +or \fBw\fR respectively. \fBBN_is_odd()\fR tests if a is odd. +.PP +\&\fBBN_is_zero()\fR, \fBBN_is_one()\fR, \fBBN_is_word()\fR and \fBBN_is_odd()\fR are macros. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBBN_cmp()\fR returns \-1 if \fBa\fR < \fBb\fR, 0 if \fBa\fR == \fBb\fR and 1 if +\&\fBa\fR > \fBb\fR. \fBBN_ucmp()\fR is the same using the absolute values +of \fBa\fR and \fBb\fR. +.PP +\&\fBBN_is_zero()\fR, \fBBN_is_one()\fR \fBBN_is_word()\fR and \fBBN_is_odd()\fR return 1 if +the condition is true, 0 otherwise. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_copy.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_copy.3 new file mode 100644 index 00000000..009cd642 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_copy.3 @@ -0,0 +1,191 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "BN_COPY 3" +.TH BN_COPY 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +BN_copy, BN_dup, BN_with_flags \- copy BIGNUMs +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& BIGNUM *BN_copy(BIGNUM *to, const BIGNUM *from); +\& +\& BIGNUM *BN_dup(const BIGNUM *from); +\& +\& void BN_with_flags(BIGNUM *dest, const BIGNUM *b, int flags); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBBN_copy()\fR copies \fBfrom\fR to \fBto\fR. \fBBN_dup()\fR creates a new \fB\s-1BIGNUM\s0\fR +containing the value \fBfrom\fR. +.PP +BN_with_flags creates a \fBtemporary\fR shallow copy of \fBb\fR in \fBdest\fR. It places +significant restrictions on the copied data. Applications that do no adhere to +these restrictions may encounter unexpected side effects or crashes. For that +reason use of this function is discouraged. Any flags provided in \fBflags\fR will +be set in \fBdest\fR in addition to any flags already set in \fBb\fR. For example this +might commonly be used to create a temporary copy of a \s-1BIGNUM\s0 with the +\&\fB\s-1BN_FLG_CONSTTIME\s0\fR flag set for constant time operations. The temporary copy in +\&\fBdest\fR will share some internal state with \fBb\fR. For this reason the following +restrictions apply to the use of \fBdest\fR: +.IP "\(bu" 2 +\&\fBdest\fR should be a newly allocated \s-1BIGNUM\s0 obtained via a call to \fBBN_new()\fR. It +should not have been used for other purposes or initialised in any way. +.IP "\(bu" 2 +\&\fBdest\fR must only be used in \*(L"read-only\*(R" operations, i.e. typically those +functions where the relevant parameter is declared \*(L"const\*(R". +.IP "\(bu" 2 +\&\fBdest\fR must be used and freed before any further subsequent use of \fBb\fR +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBBN_copy()\fR returns \fBto\fR on success, \s-1NULL\s0 on error. \fBBN_dup()\fR returns +the new \fB\s-1BIGNUM\s0\fR, and \s-1NULL\s0 on error. The error codes can be obtained +by \fBERR_get_error\fR\|(3). +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_get_error\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_generate_prime.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_generate_prime.3 new file mode 100644 index 00000000..1f481ae8 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_generate_prime.3 @@ -0,0 +1,341 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "BN_GENERATE_PRIME 3" +.TH BN_GENERATE_PRIME 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +BN_generate_prime_ex, BN_is_prime_ex, BN_is_prime_fasttest_ex, BN_GENCB_call, BN_GENCB_new, BN_GENCB_free, BN_GENCB_set_old, BN_GENCB_set, BN_GENCB_get_arg, BN_generate_prime, BN_is_prime, BN_is_prime_fasttest \- generate primes and test for primality +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int BN_generate_prime_ex(BIGNUM *ret, int bits, int safe, const BIGNUM *add, +\& const BIGNUM *rem, BN_GENCB *cb); +\& +\& int BN_is_prime_ex(const BIGNUM *p, int nchecks, BN_CTX *ctx, BN_GENCB *cb); +\& +\& int BN_is_prime_fasttest_ex(const BIGNUM *p, int nchecks, BN_CTX *ctx, +\& int do_trial_division, BN_GENCB *cb); +\& +\& int BN_GENCB_call(BN_GENCB *cb, int a, int b); +\& +\& BN_GENCB *BN_GENCB_new(void); +\& +\& void BN_GENCB_free(BN_GENCB *cb); +\& +\& void BN_GENCB_set_old(BN_GENCB *gencb, +\& void (*callback)(int, int, void *), void *cb_arg); +\& +\& void BN_GENCB_set(BN_GENCB *gencb, +\& int (*callback)(int, int, BN_GENCB *), void *cb_arg); +\& +\& void *BN_GENCB_get_arg(BN_GENCB *cb); +.Ve +.PP +Deprecated: +.PP +.Vb 4 +\& #if OPENSSL_API_COMPAT < 0x00908000L +\& BIGNUM *BN_generate_prime(BIGNUM *ret, int num, int safe, BIGNUM *add, +\& BIGNUM *rem, void (*callback)(int, int, void *), +\& void *cb_arg); +\& +\& int BN_is_prime(const BIGNUM *a, int checks, +\& void (*callback)(int, int, void *), BN_CTX *ctx, void *cb_arg); +\& +\& int BN_is_prime_fasttest(const BIGNUM *a, int checks, +\& void (*callback)(int, int, void *), BN_CTX *ctx, +\& void *cb_arg, int do_trial_division); +\& #endif +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBBN_generate_prime_ex()\fR generates a pseudo-random prime number of +at least bit length \fBbits\fR. The returned number is probably prime +with a negligible error. If \fBadd\fR is \fB\s-1NULL\s0\fR the returned prime +number will have exact bit length \fBbits\fR with the top most two +bits set. +.PP +If \fBret\fR is not \fB\s-1NULL\s0\fR, it will be used to store the number. +.PP +If \fBcb\fR is not \fB\s-1NULL\s0\fR, it is used as follows: +.IP "\(bu" 2 +\&\fBBN_GENCB_call(cb, 0, i)\fR is called after generating the i\-th +potential prime number. +.IP "\(bu" 2 +While the number is being tested for primality, +\&\fBBN_GENCB_call(cb, 1, j)\fR is called as described below. +.IP "\(bu" 2 +When a prime has been found, \fBBN_GENCB_call(cb, 2, i)\fR is called. +.IP "\(bu" 2 +The callers of \fBBN_generate_prime_ex()\fR may call \fBBN_GENCB_call(cb, i, j)\fR with +other values as described in their respective man pages; see \*(L"\s-1SEE ALSO\*(R"\s0. +.PP +The prime may have to fulfill additional requirements for use in +Diffie-Hellman key exchange: +.PP +If \fBadd\fR is not \fB\s-1NULL\s0\fR, the prime will fulfill the condition p % \fBadd\fR +== \fBrem\fR (p % \fBadd\fR == 1 if \fBrem\fR == \fB\s-1NULL\s0\fR) in order to suit a given +generator. +.PP +If \fBsafe\fR is true, it will be a safe prime (i.e. a prime p so +that (p\-1)/2 is also prime). If \fBsafe\fR is true, and \fBrem\fR == \fB\s-1NULL\s0\fR +the condition will be p % \fBadd\fR == 3. +It is recommended that \fBadd\fR is a multiple of 4. +.PP +The random generator must be seeded prior to calling \fBBN_generate_prime_ex()\fR. +If the automatic seeding or reseeding of the OpenSSL \s-1CSPRNG\s0 fails due to +external circumstances (see \s-1\fBRAND\s0\fR\|(7)), the operation will fail. +.PP +\&\fBBN_is_prime_ex()\fR and \fBBN_is_prime_fasttest_ex()\fR test if the number \fBp\fR is +prime. The following tests are performed until one of them shows that +\&\fBp\fR is composite; if \fBp\fR passes all these tests, it is considered +prime. +.PP +\&\fBBN_is_prime_fasttest_ex()\fR, when called with \fBdo_trial_division == 1\fR, +first attempts trial division by a number of small primes; +if no divisors are found by this test and \fBcb\fR is not \fB\s-1NULL\s0\fR, +\&\fBBN_GENCB_call(cb, 1, \-1)\fR is called. +If \fBdo_trial_division == 0\fR, this test is skipped. +.PP +Both \fBBN_is_prime_ex()\fR and \fBBN_is_prime_fasttest_ex()\fR perform a Miller-Rabin +probabilistic primality test with \fBnchecks\fR iterations. If +\&\fBnchecks == BN_prime_checks\fR, a number of iterations is used that +yields a false positive rate of at most 2^\-64 for random input. +The error rate depends on the size of the prime and goes down for bigger primes. +The rate is 2^\-80 starting at 308 bits, 2^\-112 at 852 bits, 2^\-128 at 1080 bits, +2^\-192 at 3747 bits and 2^\-256 at 6394 bits. +.PP +When the source of the prime is not random or not trusted, the number +of checks needs to be much higher to reach the same level of assurance: +It should equal half of the targeted security level in bits (rounded up to the +next integer if necessary). +For instance, to reach the 128 bit security level, \fBnchecks\fR should be set to +64. +.PP +If \fBcb\fR is not \fB\s-1NULL\s0\fR, \fBBN_GENCB_call(cb, 1, j)\fR is called +after the j\-th iteration (j = 0, 1, ...). \fBctx\fR is a +pre-allocated \fB\s-1BN_CTX\s0\fR (to save the overhead of allocating and +freeing the structure in a loop), or \fB\s-1NULL\s0\fR. +.PP +\&\fBBN_GENCB_call()\fR calls the callback function held in the \fB\s-1BN_GENCB\s0\fR structure +and passes the ints \fBa\fR and \fBb\fR as arguments. There are two types of +\&\fB\s-1BN_GENCB\s0\fR structure that are supported: \*(L"new\*(R" style and \*(L"old\*(R" style. New +programs should prefer the \*(L"new\*(R" style, whilst the \*(L"old\*(R" style is provided +for backwards compatibility purposes. +.PP +A \fB\s-1BN_GENCB\s0\fR structure should be created through a call to \fBBN_GENCB_new()\fR, +and freed through a call to \fBBN_GENCB_free()\fR. +.PP +For \*(L"new\*(R" style callbacks a \s-1BN_GENCB\s0 structure should be initialised with a +call to \fBBN_GENCB_set()\fR, where \fBgencb\fR is a \fB\s-1BN_GENCB\s0 *\fR, \fBcallback\fR is of +type \fBint (*callback)(int, int, \s-1BN_GENCB\s0 *)\fR and \fBcb_arg\fR is a \fBvoid *\fR. +\&\*(L"Old\*(R" style callbacks are the same except they are initialised with a call +to \fBBN_GENCB_set_old()\fR and \fBcallback\fR is of type +\&\fBvoid (*callback)(int, int, void *)\fR. +.PP +A callback is invoked through a call to \fBBN_GENCB_call\fR. This will check +the type of the callback and will invoke \fBcallback(a, b, gencb)\fR for new +style callbacks or \fBcallback(a, b, cb_arg)\fR for old style. +.PP +It is possible to obtain the argument associated with a \s-1BN_GENCB\s0 structure +(set via a call to BN_GENCB_set or BN_GENCB_set_old) using BN_GENCB_get_arg. +.PP +\&\fBBN_generate_prime()\fR (deprecated) works in the same way as +\&\fBBN_generate_prime_ex()\fR but expects an old-style callback function +directly in the \fBcallback\fR parameter, and an argument to pass to it in +the \fBcb_arg\fR. \fBBN_is_prime()\fR and \fBBN_is_prime_fasttest()\fR +can similarly be compared to \fBBN_is_prime_ex()\fR and +\&\fBBN_is_prime_fasttest_ex()\fR, respectively. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBBN_generate_prime_ex()\fR return 1 on success or 0 on error. +.PP +\&\fBBN_is_prime_ex()\fR, \fBBN_is_prime_fasttest_ex()\fR, \fBBN_is_prime()\fR and +\&\fBBN_is_prime_fasttest()\fR return 0 if the number is composite, 1 if it is +prime with an error probability of less than 0.25^\fBnchecks\fR, and +\&\-1 on error. +.PP +\&\fBBN_generate_prime()\fR returns the prime number on success, \fB\s-1NULL\s0\fR otherwise. +.PP +BN_GENCB_new returns a pointer to a \s-1BN_GENCB\s0 structure on success, or \fB\s-1NULL\s0\fR +otherwise. +.PP +BN_GENCB_get_arg returns the argument previously associated with a \s-1BN_GENCB\s0 +structure. +.PP +Callback functions should return 1 on success or 0 on error. +.PP +The error codes can be obtained by \fBERR_get_error\fR\|(3). +.SH "REMOVED FUNCTIONALITY" +.IX Header "REMOVED FUNCTIONALITY" +As of OpenSSL 1.1.0 it is no longer possible to create a \s-1BN_GENCB\s0 structure +directly, as in: +.PP +.Vb 1 +\& BN_GENCB callback; +.Ve +.PP +Instead applications should create a \s-1BN_GENCB\s0 structure using BN_GENCB_new: +.PP +.Vb 6 +\& BN_GENCB *callback; +\& callback = BN_GENCB_new(); +\& if (!callback) +\& /* error */ +\& ... +\& BN_GENCB_free(callback); +.Ve +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBDH_generate_parameters\fR\|(3), \fBDSA_generate_parameters\fR\|(3), +\&\fBRSA_generate_key\fR\|(3), \fBERR_get_error\fR\|(3), \fBRAND_bytes\fR\|(3), +\&\s-1\fBRAND\s0\fR\|(7) +.SH "HISTORY" +.IX Header "HISTORY" +The \fBBN_GENCB_new()\fR, \fBBN_GENCB_free()\fR, +and \fBBN_GENCB_get_arg()\fR functions were added in OpenSSL 1.1.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2020 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_mod_inverse.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_mod_inverse.3 new file mode 100644 index 00000000..0ab1f7eb --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_mod_inverse.3 @@ -0,0 +1,173 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "BN_MOD_INVERSE 3" +.TH BN_MOD_INVERSE 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +BN_mod_inverse \- compute inverse modulo n +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& BIGNUM *BN_mod_inverse(BIGNUM *r, BIGNUM *a, const BIGNUM *n, +\& BN_CTX *ctx); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBBN_mod_inverse()\fR computes the inverse of \fBa\fR modulo \fBn\fR +places the result in \fBr\fR (\f(CW\*(C`(a*r)%n==1\*(C'\fR). If \fBr\fR is \s-1NULL,\s0 +a new \fB\s-1BIGNUM\s0\fR is created. +.PP +\&\fBctx\fR is a previously allocated \fB\s-1BN_CTX\s0\fR used for temporary +variables. \fBr\fR may be the same \fB\s-1BIGNUM\s0\fR as \fBa\fR or \fBn\fR. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBBN_mod_inverse()\fR returns the \fB\s-1BIGNUM\s0\fR containing the inverse, and +\&\s-1NULL\s0 on error. The error codes can be obtained by \fBERR_get_error\fR\|(3). +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_get_error\fR\|(3), \fBBN_add\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_mod_mul_montgomery.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_mod_mul_montgomery.3 new file mode 100644 index 00000000..d8fd3b1a --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_mod_mul_montgomery.3 @@ -0,0 +1,218 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "BN_MOD_MUL_MONTGOMERY 3" +.TH BN_MOD_MUL_MONTGOMERY 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +BN_mod_mul_montgomery, BN_MONT_CTX_new, BN_MONT_CTX_free, BN_MONT_CTX_set, BN_MONT_CTX_copy, BN_from_montgomery, BN_to_montgomery \- Montgomery multiplication +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& BN_MONT_CTX *BN_MONT_CTX_new(void); +\& void BN_MONT_CTX_free(BN_MONT_CTX *mont); +\& +\& int BN_MONT_CTX_set(BN_MONT_CTX *mont, const BIGNUM *m, BN_CTX *ctx); +\& BN_MONT_CTX *BN_MONT_CTX_copy(BN_MONT_CTX *to, BN_MONT_CTX *from); +\& +\& int BN_mod_mul_montgomery(BIGNUM *r, BIGNUM *a, BIGNUM *b, +\& BN_MONT_CTX *mont, BN_CTX *ctx); +\& +\& int BN_from_montgomery(BIGNUM *r, BIGNUM *a, BN_MONT_CTX *mont, +\& BN_CTX *ctx); +\& +\& int BN_to_montgomery(BIGNUM *r, BIGNUM *a, BN_MONT_CTX *mont, +\& BN_CTX *ctx); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +These functions implement Montgomery multiplication. They are used +automatically when \fBBN_mod_exp\fR\|(3) is called with suitable input, +but they may be useful when several operations are to be performed +using the same modulus. +.PP +\&\fBBN_MONT_CTX_new()\fR allocates and initializes a \fB\s-1BN_MONT_CTX\s0\fR structure. +.PP +\&\fBBN_MONT_CTX_set()\fR sets up the \fImont\fR structure from the modulus \fIm\fR +by precomputing its inverse and a value R. +.PP +\&\fBBN_MONT_CTX_copy()\fR copies the \fB\s-1BN_MONT_CTX\s0\fR \fIfrom\fR to \fIto\fR. +.PP +\&\fBBN_MONT_CTX_free()\fR frees the components of the \fB\s-1BN_MONT_CTX\s0\fR, and, if +it was created by \fBBN_MONT_CTX_new()\fR, also the structure itself. +If \fBmont\fR is \s-1NULL,\s0 nothing is done. +.PP +\&\fBBN_mod_mul_montgomery()\fR computes Mont(\fIa\fR,\fIb\fR):=\fIa\fR*\fIb\fR*R^\-1 and places +the result in \fIr\fR. +.PP +\&\fBBN_from_montgomery()\fR performs the Montgomery reduction \fIr\fR = \fIa\fR*R^\-1. +.PP +\&\fBBN_to_montgomery()\fR computes Mont(\fIa\fR,R^2), i.e. \fIa\fR*R. +Note that \fIa\fR must be non-negative and smaller than the modulus. +.PP +For all functions, \fIctx\fR is a previously allocated \fB\s-1BN_CTX\s0\fR used for +temporary variables. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBBN_MONT_CTX_new()\fR returns the newly allocated \fB\s-1BN_MONT_CTX\s0\fR, and \s-1NULL\s0 +on error. +.PP +\&\fBBN_MONT_CTX_free()\fR has no return value. +.PP +For the other functions, 1 is returned for success, 0 on error. +The error codes can be obtained by \fBERR_get_error\fR\|(3). +.SH "WARNINGS" +.IX Header "WARNINGS" +The inputs must be reduced modulo \fBm\fR, otherwise the result will be +outside the expected range. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_get_error\fR\|(3), \fBBN_add\fR\|(3), +\&\fBBN_CTX_new\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +\&\fBBN_MONT_CTX_init()\fR was removed in OpenSSL 1.1.0 +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_mod_mul_reciprocal.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_mod_mul_reciprocal.3 new file mode 100644 index 00000000..7a9d3be8 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_mod_mul_reciprocal.3 @@ -0,0 +1,205 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "BN_MOD_MUL_RECIPROCAL 3" +.TH BN_MOD_MUL_RECIPROCAL 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +BN_mod_mul_reciprocal, BN_div_recp, BN_RECP_CTX_new, BN_RECP_CTX_free, BN_RECP_CTX_set \- modular multiplication using reciprocal +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& BN_RECP_CTX *BN_RECP_CTX_new(void); +\& void BN_RECP_CTX_free(BN_RECP_CTX *recp); +\& +\& int BN_RECP_CTX_set(BN_RECP_CTX *recp, const BIGNUM *m, BN_CTX *ctx); +\& +\& int BN_div_recp(BIGNUM *dv, BIGNUM *rem, BIGNUM *a, BN_RECP_CTX *recp, +\& BN_CTX *ctx); +\& +\& int BN_mod_mul_reciprocal(BIGNUM *r, BIGNUM *a, BIGNUM *b, +\& BN_RECP_CTX *recp, BN_CTX *ctx); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBBN_mod_mul_reciprocal()\fR can be used to perform an efficient +\&\fBBN_mod_mul\fR\|(3) operation when the operation will be performed +repeatedly with the same modulus. It computes \fBr\fR=(\fBa\fR*\fBb\fR)%\fBm\fR +using \fBrecp\fR=1/\fBm\fR, which is set as described below. \fBctx\fR is a +previously allocated \fB\s-1BN_CTX\s0\fR used for temporary variables. +.PP +\&\fBBN_RECP_CTX_new()\fR allocates and initializes a \fB\s-1BN_RECP\s0\fR structure. +.PP +\&\fBBN_RECP_CTX_free()\fR frees the components of the \fB\s-1BN_RECP\s0\fR, and, if it +was created by \fBBN_RECP_CTX_new()\fR, also the structure itself. +If \fBrecp\fR is \s-1NULL,\s0 nothing is done. +.PP +\&\fBBN_RECP_CTX_set()\fR stores \fBm\fR in \fBrecp\fR and sets it up for computing +1/\fBm\fR and shifting it left by BN_num_bits(\fBm\fR)+1 to make it an +integer. The result and the number of bits it was shifted left will +later be stored in \fBrecp\fR. +.PP +\&\fBBN_div_recp()\fR divides \fBa\fR by \fBm\fR using \fBrecp\fR. It places the quotient +in \fBdv\fR and the remainder in \fBrem\fR. +.PP +The \fB\s-1BN_RECP_CTX\s0\fR structure cannot be shared between threads. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBBN_RECP_CTX_new()\fR returns the newly allocated \fB\s-1BN_RECP_CTX\s0\fR, and \s-1NULL\s0 +on error. +.PP +\&\fBBN_RECP_CTX_free()\fR has no return value. +.PP +For the other functions, 1 is returned for success, 0 on error. +The error codes can be obtained by \fBERR_get_error\fR\|(3). +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_get_error\fR\|(3), \fBBN_add\fR\|(3), +\&\fBBN_CTX_new\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +\&\fBBN_RECP_CTX_init()\fR was removed in OpenSSL 1.1.0 +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_new.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_new.3 new file mode 100644 index 00000000..2a59e453 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_new.3 @@ -0,0 +1,195 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "BN_NEW 3" +.TH BN_NEW 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +BN_new, BN_secure_new, BN_clear, BN_free, BN_clear_free \- allocate and free BIGNUMs +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& BIGNUM *BN_new(void); +\& +\& BIGNUM *BN_secure_new(void); +\& +\& void BN_clear(BIGNUM *a); +\& +\& void BN_free(BIGNUM *a); +\& +\& void BN_clear_free(BIGNUM *a); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBBN_new()\fR allocates and initializes a \fB\s-1BIGNUM\s0\fR structure. +\&\fBBN_secure_new()\fR does the same except that the secure heap +\&\fBOPENSSL_secure_malloc\fR\|(3) is used to store the value. +.PP +\&\fBBN_clear()\fR is used to destroy sensitive data such as keys when they +are no longer needed. It erases the memory used by \fBa\fR and sets it +to the value 0. +If \fBa\fR is \s-1NULL,\s0 nothing is done. +.PP +\&\fBBN_free()\fR frees the components of the \fB\s-1BIGNUM\s0\fR, and if it was created +by \fBBN_new()\fR, also the structure itself. \fBBN_clear_free()\fR additionally +overwrites the data before the memory is returned to the system. +If \fBa\fR is \s-1NULL,\s0 nothing is done. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBBN_new()\fR and \fBBN_secure_new()\fR +return a pointer to the \fB\s-1BIGNUM\s0\fR initialised to the value 0. +If the allocation fails, +they return \fB\s-1NULL\s0\fR and set an error code that can be obtained +by \fBERR_get_error\fR\|(3). +.PP +\&\fBBN_clear()\fR, \fBBN_free()\fR and \fBBN_clear_free()\fR have no return values. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_get_error\fR\|(3), \fBOPENSSL_secure_malloc\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +\&\fBBN_init()\fR was removed in OpenSSL 1.1.0; use \fBBN_new()\fR instead. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_num_bytes.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_num_bytes.3 new file mode 100644 index 00000000..a3002753 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_num_bytes.3 @@ -0,0 +1,192 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "BN_NUM_BYTES 3" +.TH BN_NUM_BYTES 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +BN_num_bits, BN_num_bytes, BN_num_bits_word \- get BIGNUM size +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int BN_num_bytes(const BIGNUM *a); +\& +\& int BN_num_bits(const BIGNUM *a); +\& +\& int BN_num_bits_word(BN_ULONG w); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBBN_num_bytes()\fR returns the size of a \fB\s-1BIGNUM\s0\fR in bytes. +.PP +\&\fBBN_num_bits_word()\fR returns the number of significant bits in a word. +If we take 0x00000432 as an example, it returns 11, not 16, not 32. +Basically, except for a zero, it returns \fIfloor(log2(w))+1\fR. +.PP +\&\fBBN_num_bits()\fR returns the number of significant bits in a \fB\s-1BIGNUM\s0\fR, +following the same principle as \fBBN_num_bits_word()\fR. +.PP +\&\fBBN_num_bytes()\fR is a macro. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +The size. +.SH "NOTES" +.IX Header "NOTES" +Some have tried using \fBBN_num_bits()\fR on individual numbers in \s-1RSA\s0 keys, +\&\s-1DH\s0 keys and \s-1DSA\s0 keys, and found that they don't always come up with +the number of bits they expected (something like 512, 1024, 2048, +\&...). This is because generating a number with some specific number +of bits doesn't always set the highest bits, thereby making the number +of \fIsignificant\fR bits a little lower. If you want to know the \*(L"key +size\*(R" of such a key, either use functions like \fBRSA_size()\fR, \fBDH_size()\fR +and \fBDSA_size()\fR, or use \fBBN_num_bytes()\fR and multiply with 8 (although +there's no real guarantee that will match the \*(L"key size\*(R", just a lot +more probability). +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBDH_size\fR\|(3), \fBDSA_size\fR\|(3), +\&\fBRSA_size\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_rand.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_rand.3 new file mode 100644 index 00000000..a022b1f9 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_rand.3 @@ -0,0 +1,220 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "BN_RAND 3" +.TH BN_RAND 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +BN_rand, BN_priv_rand, BN_pseudo_rand, BN_rand_range, BN_priv_rand_range, BN_pseudo_rand_range \&\- generate pseudo\-random number +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int BN_rand(BIGNUM *rnd, int bits, int top, int bottom); +\& +\& int BN_priv_rand(BIGNUM *rnd, int bits, int top, int bottom); +\& +\& int BN_pseudo_rand(BIGNUM *rnd, int bits, int top, int bottom); +\& +\& int BN_rand_range(BIGNUM *rnd, BIGNUM *range); +\& +\& int BN_priv_rand_range(BIGNUM *rnd, BIGNUM *range); +\& +\& int BN_pseudo_rand_range(BIGNUM *rnd, BIGNUM *range); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBBN_rand()\fR generates a cryptographically strong pseudo-random number of +\&\fBbits\fR in length and stores it in \fBrnd\fR. +If \fBbits\fR is less than zero, or too small to +accommodate the requirements specified by the \fBtop\fR and \fBbottom\fR +parameters, an error is returned. +The \fBtop\fR parameters specifies +requirements on the most significant bit of the generated number. +If it is \fB\s-1BN_RAND_TOP_ANY\s0\fR, there is no constraint. +If it is \fB\s-1BN_RAND_TOP_ONE\s0\fR, the top bit must be one. +If it is \fB\s-1BN_RAND_TOP_TWO\s0\fR, the two most significant bits of +the number will be set to 1, so that the product of two such random +numbers will always have 2*\fBbits\fR length. +If \fBbottom\fR is \fB\s-1BN_RAND_BOTTOM_ODD\s0\fR, the number will be odd; if it +is \fB\s-1BN_RAND_BOTTOM_ANY\s0\fR it can be odd or even. +If \fBbits\fR is 1 then \fBtop\fR cannot also be \fB\s-1BN_RAND_FLG_TOPTWO\s0\fR. +.PP +\&\fBBN_rand_range()\fR generates a cryptographically strong pseudo-random +number \fBrnd\fR in the range 0 <= \fBrnd\fR < \fBrange\fR. +.PP +\&\fBBN_priv_rand()\fR and \fBBN_priv_rand_range()\fR have the same semantics as +\&\fBBN_rand()\fR and \fBBN_rand_range()\fR respectively. They are intended to be +used for generating values that should remain private, and mirror the +same difference between \fBRAND_bytes\fR\|(3) and \fBRAND_priv_bytes\fR\|(3). +.SH "NOTES" +.IX Header "NOTES" +Always check the error return value of these functions and do not take +randomness for granted: an error occurs if the \s-1CSPRNG\s0 has not been +seeded with enough randomness to ensure an unpredictable byte sequence. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +The functions return 1 on success, 0 on error. +The error codes can be obtained by \fBERR_get_error\fR\|(3). +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_get_error\fR\|(3), +\&\fBRAND_add\fR\|(3), +\&\fBRAND_bytes\fR\|(3), +\&\fBRAND_priv_bytes\fR\|(3), +\&\s-1\fBRAND\s0\fR\|(7), +\&\s-1\fBRAND_DRBG\s0\fR\|(7) +.SH "HISTORY" +.IX Header "HISTORY" +.IP "\(bu" 2 +Starting with OpenSSL release 1.1.0, \fBBN_pseudo_rand()\fR has been identical +to \fBBN_rand()\fR and \fBBN_pseudo_rand_range()\fR has been identical to +\&\fBBN_rand_range()\fR. +The \*(L"pseudo\*(R" functions should not be used and may be deprecated in +a future release. +.IP "\(bu" 2 +The +\&\fBBN_priv_rand()\fR and \fBBN_priv_rand_range()\fR functions were added in OpenSSL 1.1.1. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_security_bits.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_security_bits.3 new file mode 100644 index 00000000..b767c21f --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_security_bits.3 @@ -0,0 +1,181 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "BN_SECURITY_BITS 3" +.TH BN_SECURITY_BITS 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +BN_security_bits \- returns bits of security based on given numbers +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int BN_security_bits(int L, int N); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBBN_security_bits()\fR returns the number of bits of security provided by a +specific algorithm and a particular key size. The bits of security is +defined in \s-1NIST SP800\-57.\s0 Currently, \fBBN_security_bits()\fR support two types +of asymmetric algorithms: the \s-1FFC\s0 (Finite Field Cryptography) and \s-1IFC\s0 +(Integer Factorization Cryptography). For \s-1FFC,\s0 e.g., \s-1DSA\s0 and \s-1DH,\s0 both +parameters \fBL\fR and \fBN\fR are used to decide the bits of security, where +\&\fBL\fR is the size of the public key and \fBN\fR is the size of the private +key. For \s-1IFC,\s0 e.g., \s-1RSA,\s0 only \fBL\fR is used and it's commonly considered +to be the key size (modulus). +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +Number of security bits. +.SH "NOTES" +.IX Header "NOTES" +\&\s-1ECC\s0 (Elliptic Curve Cryptography) is not covered by the \fBBN_security_bits()\fR +function. The symmetric algorithms are not covered neither. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBDH_security_bits\fR\|(3), \fBDSA_security_bits\fR\|(3), \fBRSA_security_bits\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +The \fBBN_security_bits()\fR function was added in OpenSSL 1.1.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_set_bit.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_set_bit.3 new file mode 100644 index 00000000..3ed23ffa --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_set_bit.3 @@ -0,0 +1,200 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "BN_SET_BIT 3" +.TH BN_SET_BIT 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +BN_set_bit, BN_clear_bit, BN_is_bit_set, BN_mask_bits, BN_lshift, BN_lshift1, BN_rshift, BN_rshift1 \- bit operations on BIGNUMs +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int BN_set_bit(BIGNUM *a, int n); +\& int BN_clear_bit(BIGNUM *a, int n); +\& +\& int BN_is_bit_set(const BIGNUM *a, int n); +\& +\& int BN_mask_bits(BIGNUM *a, int n); +\& +\& int BN_lshift(BIGNUM *r, const BIGNUM *a, int n); +\& int BN_lshift1(BIGNUM *r, BIGNUM *a); +\& +\& int BN_rshift(BIGNUM *r, BIGNUM *a, int n); +\& int BN_rshift1(BIGNUM *r, BIGNUM *a); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBBN_set_bit()\fR sets bit \fBn\fR in \fBa\fR to 1 (\f(CW\*(C`a|=(1<>n)\*(C'\fR). An error occurs if \fBa\fR already is +shorter than \fBn\fR bits. +.PP +\&\fBBN_lshift()\fR shifts \fBa\fR left by \fBn\fR bits and places the result in +\&\fBr\fR (\f(CW\*(C`r=a*2^n\*(C'\fR). Note that \fBn\fR must be non-negative. \fBBN_lshift1()\fR shifts +\&\fBa\fR left by one and places the result in \fBr\fR (\f(CW\*(C`r=2*a\*(C'\fR). +.PP +\&\fBBN_rshift()\fR shifts \fBa\fR right by \fBn\fR bits and places the result in +\&\fBr\fR (\f(CW\*(C`r=a/2^n\*(C'\fR). Note that \fBn\fR must be non-negative. \fBBN_rshift1()\fR shifts +\&\fBa\fR right by one and places the result in \fBr\fR (\f(CW\*(C`r=a/2\*(C'\fR). +.PP +For the shift functions, \fBr\fR and \fBa\fR may be the same variable. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBBN_is_bit_set()\fR returns 1 if the bit is set, 0 otherwise. +.PP +All other functions return 1 for success, 0 on error. The error codes +can be obtained by \fBERR_get_error\fR\|(3). +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBBN_num_bytes\fR\|(3), \fBBN_add\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_swap.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_swap.3 new file mode 100644 index 00000000..0b1fcd5c --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_swap.3 @@ -0,0 +1,163 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "BN_SWAP 3" +.TH BN_SWAP 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +BN_swap \- exchange BIGNUMs +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& void BN_swap(BIGNUM *a, BIGNUM *b); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBBN_swap()\fR exchanges the values of \fIa\fR and \fIb\fR. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBBN_swap()\fR does not return a value. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_zero.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_zero.3 new file mode 100644 index 00000000..bf442191 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BN_zero.3 @@ -0,0 +1,197 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "BN_ZERO 3" +.TH BN_ZERO 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +BN_zero, BN_one, BN_value_one, BN_set_word, BN_get_word \- BIGNUM assignment operations +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& void BN_zero(BIGNUM *a); +\& int BN_one(BIGNUM *a); +\& +\& const BIGNUM *BN_value_one(void); +\& +\& int BN_set_word(BIGNUM *a, BN_ULONG w); +\& unsigned BN_ULONG BN_get_word(BIGNUM *a); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fB\s-1BN_ULONG\s0\fR is a macro that will be an unsigned integral type optimized +for the most efficient implementation on the local platform. +.PP +\&\fBBN_zero()\fR, \fBBN_one()\fR and \fBBN_set_word()\fR set \fBa\fR to the values 0, 1 and +\&\fBw\fR respectively. \fBBN_zero()\fR and \fBBN_one()\fR are macros. +.PP +\&\fBBN_value_one()\fR returns a \fB\s-1BIGNUM\s0\fR constant of value 1. This constant +is useful for use in comparisons and assignment. +.PP +\&\fBBN_get_word()\fR returns \fBa\fR, if it can be represented as a \fB\s-1BN_ULONG\s0\fR. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBBN_get_word()\fR returns the value \fBa\fR, or all-bits-set if \fBa\fR cannot +be represented as a single integer. +.PP +\&\fBBN_one()\fR and \fBBN_set_word()\fR return 1 on success, 0 otherwise. +\&\fBBN_value_one()\fR returns the constant. +\&\fBBN_zero()\fR never fails and returns no value. +.SH "BUGS" +.IX Header "BUGS" +If a \fB\s-1BIGNUM\s0\fR is equal to the value of all-bits-set, it will collide +with the error condition returned by \fBBN_get_word()\fR which uses that +as an error value. +.PP +\&\fB\s-1BN_ULONG\s0\fR should probably be a typedef. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBBN_bn2bin\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +In OpenSSL 0.9.8, \fBBN_zero()\fR was changed to not return a value; previous +versions returned an int. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BUF_MEM_new.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BUF_MEM_new.3 new file mode 100644 index 00000000..9cf92773 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/BUF_MEM_new.3 @@ -0,0 +1,204 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "BUF_MEM_NEW 3" +.TH BUF_MEM_NEW 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +BUF_MEM_new, BUF_MEM_new_ex, BUF_MEM_free, BUF_MEM_grow, BUF_MEM_grow_clean, BUF_reverse \&\- simple character array structure +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& BUF_MEM *BUF_MEM_new(void); +\& +\& BUF_MEM *BUF_MEM_new_ex(unsigned long flags); +\& +\& void BUF_MEM_free(BUF_MEM *a); +\& +\& int BUF_MEM_grow(BUF_MEM *str, int len); +\& size_t BUF_MEM_grow_clean(BUF_MEM *str, size_t len); +\& +\& void BUF_reverse(unsigned char *out, const unsigned char *in, size_t size); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The buffer library handles simple character arrays. Buffers are used for +various purposes in the library, most notably memory BIOs. +.PP +\&\fBBUF_MEM_new()\fR allocates a new buffer of zero size. +.PP +\&\fBBUF_MEM_new_ex()\fR allocates a buffer with the specified flags. +The flag \fB\s-1BUF_MEM_FLAG_SECURE\s0\fR specifies that the \fBdata\fR pointer +should be allocated on the secure heap; see \fBCRYPTO_secure_malloc\fR\|(3). +.PP +\&\fBBUF_MEM_free()\fR frees up an already existing buffer. The data is zeroed +before freeing up in case the buffer contains sensitive data. +.PP +\&\fBBUF_MEM_grow()\fR changes the size of an already existing buffer to +\&\fBlen\fR. Any data already in the buffer is preserved if it increases in +size. +.PP +\&\fBBUF_MEM_grow_clean()\fR is similar to \fBBUF_MEM_grow()\fR but it sets any free'd +or additionally-allocated memory to zero. +.PP +\&\fBBUF_reverse()\fR reverses \fBsize\fR bytes at \fBin\fR into \fBout\fR. If \fBin\fR +is \s-1NULL,\s0 the array is reversed in-place. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBBUF_MEM_new()\fR returns the buffer or \s-1NULL\s0 on error. +.PP +\&\fBBUF_MEM_free()\fR has no return value. +.PP +\&\fBBUF_MEM_grow()\fR and \fBBUF_MEM_grow_clean()\fR return +zero on error or the new size (i.e., \fBlen\fR). +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBbio\fR\|(7), +\&\fBCRYPTO_secure_malloc\fR\|(3). +.SH "HISTORY" +.IX Header "HISTORY" +The \fBBUF_MEM_new_ex()\fR function was added in OpenSSL 1.1.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CMS_add0_cert.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CMS_add0_cert.3 new file mode 100644 index 00000000..e0b7505f --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CMS_add0_cert.3 @@ -0,0 +1,200 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "CMS_ADD0_CERT 3" +.TH CMS_ADD0_CERT 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +CMS_add0_cert, CMS_add1_cert, CMS_get1_certs, CMS_add0_crl, CMS_add1_crl, CMS_get1_crls \&\- CMS certificate and CRL utility functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int CMS_add0_cert(CMS_ContentInfo *cms, X509 *cert); +\& int CMS_add1_cert(CMS_ContentInfo *cms, X509 *cert); +\& STACK_OF(X509) *CMS_get1_certs(CMS_ContentInfo *cms); +\& +\& int CMS_add0_crl(CMS_ContentInfo *cms, X509_CRL *crl); +\& int CMS_add1_crl(CMS_ContentInfo *cms, X509_CRL *crl); +\& STACK_OF(X509_CRL) *CMS_get1_crls(CMS_ContentInfo *cms); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBCMS_add0_cert()\fR and \fBCMS_add1_cert()\fR add certificate \fBcert\fR to \fBcms\fR. +must be of type signed data or enveloped data. +.PP +\&\fBCMS_get1_certs()\fR returns all certificates in \fBcms\fR. +.PP +\&\fBCMS_add0_crl()\fR and \fBCMS_add1_crl()\fR add \s-1CRL\s0 \fBcrl\fR to \fBcms\fR. \fBCMS_get1_crls()\fR +returns any CRLs in \fBcms\fR. +.SH "NOTES" +.IX Header "NOTES" +The CMS_ContentInfo structure \fBcms\fR must be of type signed data or enveloped +data or an error will be returned. +.PP +For signed data certificates and CRLs are added to the \fBcertificates\fR and +\&\fBcrls\fR fields of SignedData structure. For enveloped data they are added to +\&\fBOriginatorInfo\fR. +.PP +As the \fB0\fR implies \fBCMS_add0_cert()\fR adds \fBcert\fR internally to \fBcms\fR and it +must not be freed up after the call as opposed to \fBCMS_add1_cert()\fR where \fBcert\fR +must be freed up. +.PP +The same certificate or \s-1CRL\s0 must not be added to the same cms structure more +than once. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBCMS_add0_cert()\fR, \fBCMS_add1_cert()\fR and \fBCMS_add0_crl()\fR and \fBCMS_add1_crl()\fR return +1 for success and 0 for failure. +.PP +\&\fBCMS_get1_certs()\fR and \fBCMS_get1_crls()\fR return the \s-1STACK\s0 of certificates or CRLs +or \s-1NULL\s0 if there are none or an error occurs. The only error which will occur +in practice is if the \fBcms\fR type is invalid. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_get_error\fR\|(3), +\&\fBCMS_sign\fR\|(3), +\&\fBCMS_encrypt\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2008\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CMS_add1_recipient_cert.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CMS_add1_recipient_cert.3 new file mode 100644 index 00000000..909c19b7 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CMS_add1_recipient_cert.3 @@ -0,0 +1,203 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "CMS_ADD1_RECIPIENT_CERT 3" +.TH CMS_ADD1_RECIPIENT_CERT 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +CMS_add1_recipient_cert, CMS_add0_recipient_key \- add recipients to a CMS enveloped data structure +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& CMS_RecipientInfo *CMS_add1_recipient_cert(CMS_ContentInfo *cms, +\& X509 *recip, unsigned int flags); +\& +\& CMS_RecipientInfo *CMS_add0_recipient_key(CMS_ContentInfo *cms, int nid, +\& unsigned char *key, size_t keylen, +\& unsigned char *id, size_t idlen, +\& ASN1_GENERALIZEDTIME *date, +\& ASN1_OBJECT *otherTypeId, +\& ASN1_TYPE *otherType); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBCMS_add1_recipient_cert()\fR adds recipient \fBrecip\fR to CMS_ContentInfo enveloped +data structure \fBcms\fR as a KeyTransRecipientInfo structure. +.PP +\&\fBCMS_add0_recipient_key()\fR adds symmetric key \fBkey\fR of length \fBkeylen\fR using +wrapping algorithm \fBnid\fR, identifier \fBid\fR of length \fBidlen\fR and optional +values \fBdate\fR, \fBotherTypeId\fR and \fBotherType\fR to CMS_ContentInfo enveloped +data structure \fBcms\fR as a KEKRecipientInfo structure. +.PP +The CMS_ContentInfo structure should be obtained from an initial call to +\&\fBCMS_encrypt()\fR with the flag \fB\s-1CMS_PARTIAL\s0\fR set. +.SH "NOTES" +.IX Header "NOTES" +The main purpose of this function is to provide finer control over a \s-1CMS\s0 +enveloped data structure where the simpler \fBCMS_encrypt()\fR function defaults are +not appropriate. For example if one or more KEKRecipientInfo structures +need to be added. New attributes can also be added using the returned +CMS_RecipientInfo structure and the \s-1CMS\s0 attribute utility functions. +.PP +OpenSSL will by default identify recipient certificates using issuer name +and serial number. If \fB\s-1CMS_USE_KEYID\s0\fR is set it will use the subject key +identifier value instead. An error occurs if all recipient certificates do not +have a subject key identifier extension. +.PP +Currently only \s-1AES\s0 based key wrapping algorithms are supported for \fBnid\fR, +specifically: NID_id_aes128_wrap, NID_id_aes192_wrap and NID_id_aes256_wrap. +If \fBnid\fR is set to \fBNID_undef\fR then an \s-1AES\s0 wrap algorithm will be used +consistent with \fBkeylen\fR. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBCMS_add1_recipient_cert()\fR and \fBCMS_add0_recipient_key()\fR return an internal +pointer to the CMS_RecipientInfo structure just added or \s-1NULL\s0 if an error +occurs. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_get_error\fR\|(3), \fBCMS_decrypt\fR\|(3), +\&\fBCMS_final\fR\|(3), +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2008\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CMS_add1_signer.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CMS_add1_signer.3 new file mode 100644 index 00000000..0969ff62 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CMS_add1_signer.3 @@ -0,0 +1,238 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "CMS_ADD1_SIGNER 3" +.TH CMS_ADD1_SIGNER 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +CMS_add1_signer, CMS_SignerInfo_sign \- add a signer to a CMS_ContentInfo signed data structure +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& CMS_SignerInfo *CMS_add1_signer(CMS_ContentInfo *cms, X509 *signcert, +\& EVP_PKEY *pkey, const EVP_MD *md, +\& unsigned int flags); +\& +\& int CMS_SignerInfo_sign(CMS_SignerInfo *si); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBCMS_add1_signer()\fR adds a signer with certificate \fBsigncert\fR and private +key \fBpkey\fR using message digest \fBmd\fR to CMS_ContentInfo SignedData +structure \fBcms\fR. +.PP +The CMS_ContentInfo structure should be obtained from an initial call to +\&\fBCMS_sign()\fR with the flag \fB\s-1CMS_PARTIAL\s0\fR set or in the case or re-signing a +valid CMS_ContentInfo SignedData structure. +.PP +If the \fBmd\fR parameter is \fB\s-1NULL\s0\fR then the default digest for the public +key algorithm will be used. +.PP +Unless the \fB\s-1CMS_REUSE_DIGEST\s0\fR flag is set the returned CMS_ContentInfo +structure is not complete and must be finalized either by streaming (if +applicable) or a call to \fBCMS_final()\fR. +.PP +The \fBCMS_SignerInfo_sign()\fR function will explicitly sign a CMS_SignerInfo +structure, its main use is when \fB\s-1CMS_REUSE_DIGEST\s0\fR and \fB\s-1CMS_PARTIAL\s0\fR flags +are both set. +.SH "NOTES" +.IX Header "NOTES" +The main purpose of \fBCMS_add1_signer()\fR is to provide finer control +over a \s-1CMS\s0 signed data structure where the simpler \fBCMS_sign()\fR function defaults +are not appropriate. For example if multiple signers or non default digest +algorithms are needed. New attributes can also be added using the returned +CMS_SignerInfo structure and the \s-1CMS\s0 attribute utility functions or the +\&\s-1CMS\s0 signed receipt request functions. +.PP +Any of the following flags (ored together) can be passed in the \fBflags\fR +parameter. +.PP +If \fB\s-1CMS_REUSE_DIGEST\s0\fR is set then an attempt is made to copy the content +digest value from the CMS_ContentInfo structure: to add a signer to an existing +structure. An error occurs if a matching digest value cannot be found to copy. +The returned CMS_ContentInfo structure will be valid and finalized when this +flag is set. +.PP +If \fB\s-1CMS_PARTIAL\s0\fR is set in addition to \fB\s-1CMS_REUSE_DIGEST\s0\fR then the +CMS_SignerInfo structure will not be finalized so additional attributes +can be added. In this case an explicit call to \fBCMS_SignerInfo_sign()\fR is +needed to finalize it. +.PP +If \fB\s-1CMS_NOCERTS\s0\fR is set the signer's certificate will not be included in the +CMS_ContentInfo structure, the signer's certificate must still be supplied in +the \fBsigncert\fR parameter though. This can reduce the size of the signature if +the signers certificate can be obtained by other means: for example a +previously signed message. +.PP +The SignedData structure includes several \s-1CMS\s0 signedAttributes including the +signing time, the \s-1CMS\s0 content type and the supported list of ciphers in an +SMIMECapabilities attribute. If \fB\s-1CMS_NOATTR\s0\fR is set then no signedAttributes +will be used. If \fB\s-1CMS_NOSMIMECAP\s0\fR is set then just the SMIMECapabilities are +omitted. +.PP +OpenSSL will by default identify signing certificates using issuer name +and serial number. If \fB\s-1CMS_USE_KEYID\s0\fR is set it will use the subject key +identifier value instead. An error occurs if the signing certificate does not +have a subject key identifier extension. +.PP +If present the SMIMECapabilities attribute indicates support for the following +algorithms in preference order: 256 bit \s-1AES,\s0 Gost R3411\-94, Gost 28147\-89, 192 +bit \s-1AES, 128\s0 bit \s-1AES,\s0 triple \s-1DES, 128\s0 bit \s-1RC2, 64\s0 bit \s-1RC2, DES\s0 and 40 bit \s-1RC2.\s0 +If any of these algorithms is not available then it will not be included: for example the \s-1GOST\s0 algorithms will not be included if the \s-1GOST ENGINE\s0 is +not loaded. +.PP +\&\fBCMS_add1_signer()\fR returns an internal pointer to the CMS_SignerInfo +structure just added, this can be used to set additional attributes +before it is finalized. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBCMS_add1_signer()\fR returns an internal pointer to the CMS_SignerInfo +structure just added or \s-1NULL\s0 if an error occurs. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_get_error\fR\|(3), \fBCMS_sign\fR\|(3), +\&\fBCMS_final\fR\|(3), +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2014\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CMS_compress.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CMS_compress.3 new file mode 100644 index 00000000..b3097108 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CMS_compress.3 @@ -0,0 +1,210 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "CMS_COMPRESS 3" +.TH CMS_COMPRESS 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +CMS_compress \- create a CMS CompressedData structure +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& CMS_ContentInfo *CMS_compress(BIO *in, int comp_nid, unsigned int flags); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBCMS_compress()\fR creates and returns a \s-1CMS\s0 CompressedData structure. \fBcomp_nid\fR +is the compression algorithm to use or \fBNID_undef\fR to use the default +algorithm (zlib compression). \fBin\fR is the content to be compressed. +\&\fBflags\fR is an optional set of flags. +.SH "NOTES" +.IX Header "NOTES" +The only currently supported compression algorithm is zlib using the \s-1NID\s0 +NID_zlib_compression. +.PP +If zlib support is not compiled into OpenSSL then \fBCMS_compress()\fR will return +an error. +.PP +If the \fB\s-1CMS_TEXT\s0\fR flag is set \s-1MIME\s0 headers for type \fBtext/plain\fR are +prepended to the data. +.PP +Normally the supplied content is translated into \s-1MIME\s0 canonical format (as +required by the S/MIME specifications) if \fB\s-1CMS_BINARY\s0\fR is set no translation +occurs. This option should be used if the supplied data is in binary format +otherwise the translation will corrupt it. If \fB\s-1CMS_BINARY\s0\fR is set then +\&\fB\s-1CMS_TEXT\s0\fR is ignored. +.PP +If the \fB\s-1CMS_STREAM\s0\fR flag is set a partial \fBCMS_ContentInfo\fR structure is +returned suitable for streaming I/O: no data is read from the \s-1BIO\s0 \fBin\fR. +.PP +The compressed data is included in the CMS_ContentInfo structure, unless +\&\fB\s-1CMS_DETACHED\s0\fR is set in which case it is omitted. This is rarely used in +practice and is not supported by \fBSMIME_write_CMS()\fR. +.SH "NOTES" +.IX Header "NOTES" +If the flag \fB\s-1CMS_STREAM\s0\fR is set the returned \fBCMS_ContentInfo\fR structure is +\&\fBnot\fR complete and outputting its contents via a function that does not +properly finalize the \fBCMS_ContentInfo\fR structure will give unpredictable +results. +.PP +Several functions including \fBSMIME_write_CMS()\fR, \fBi2d_CMS_bio_stream()\fR, +\&\fBPEM_write_bio_CMS_stream()\fR finalize the structure. Alternatively finalization +can be performed by obtaining the streaming \s-1ASN1\s0 \fB\s-1BIO\s0\fR directly using +\&\fBBIO_new_CMS()\fR. +.PP +Additional compression parameters such as the zlib compression level cannot +currently be set. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBCMS_compress()\fR returns either a CMS_ContentInfo structure or \s-1NULL\s0 if an error +occurred. The error can be obtained from \fBERR_get_error\fR\|(3). +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_get_error\fR\|(3), \fBCMS_uncompress\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +The \fB\s-1CMS_STREAM\s0\fR flag was added in OpenSSL 1.0.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2008\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CMS_decrypt.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CMS_decrypt.3 new file mode 100644 index 00000000..d0c8c8f3 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CMS_decrypt.3 @@ -0,0 +1,212 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "CMS_DECRYPT 3" +.TH CMS_DECRYPT 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +CMS_decrypt \- decrypt content from a CMS envelopedData structure +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int CMS_decrypt(CMS_ContentInfo *cms, EVP_PKEY *pkey, X509 *cert, +\& BIO *dcont, BIO *out, unsigned int flags); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBCMS_decrypt()\fR extracts and decrypts the content from a \s-1CMS\s0 EnvelopedData +structure. \fBpkey\fR is the private key of the recipient, \fBcert\fR is the +recipient's certificate, \fBout\fR is a \s-1BIO\s0 to write the content to and +\&\fBflags\fR is an optional set of flags. +.PP +The \fBdcont\fR parameter is used in the rare case where the encrypted content +is detached. It will normally be set to \s-1NULL.\s0 +.SH "NOTES" +.IX Header "NOTES" +Although the recipients certificate is not needed to decrypt the data it is +needed to locate the appropriate (of possible several) recipients in the \s-1CMS\s0 +structure. +.PP +If \fBcert\fR is set to \s-1NULL\s0 all possible recipients are tried. This case however +is problematic. To thwart the \s-1MMA\s0 attack (Bleichenbacher's attack on +\&\s-1PKCS\s0 #1 v1.5 \s-1RSA\s0 padding) all recipients are tried whether they succeed or +not. If no recipient succeeds then a random symmetric key is used to decrypt +the content: this will typically output garbage and may (but is not guaranteed +to) ultimately return a padding error only. If \fBCMS_decrypt()\fR just returned an +error when all recipient encrypted keys failed to decrypt an attacker could +use this in a timing attack. If the special flag \fB\s-1CMS_DEBUG_DECRYPT\s0\fR is set +then the above behaviour is modified and an error \fBis\fR returned if no +recipient encrypted key can be decrypted \fBwithout\fR generating a random +content encryption key. Applications should use this flag with +\&\fBextreme caution\fR especially in automated gateways as it can leave them +open to attack. +.PP +It is possible to determine the correct recipient key by other means (for +example looking them up in a database) and setting them in the \s-1CMS\s0 structure +in advance using the \s-1CMS\s0 utility functions such as \fBCMS_set1_pkey()\fR. In this +case both \fBcert\fR and \fBpkey\fR should be set to \s-1NULL.\s0 +.PP +To process KEKRecipientInfo types \fBCMS_set1_key()\fR or \fBCMS_RecipientInfo_set0_key()\fR +and \fBCMS_RecipientInfo_decrypt()\fR should be called before \fBCMS_decrypt()\fR and +\&\fBcert\fR and \fBpkey\fR set to \s-1NULL.\s0 +.PP +The following flags can be passed in the \fBflags\fR parameter. +.PP +If the \fB\s-1CMS_TEXT\s0\fR flag is set \s-1MIME\s0 headers for type \fBtext/plain\fR are deleted +from the content. If the content is not of type \fBtext/plain\fR then an error is +returned. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBCMS_decrypt()\fR returns either 1 for success or 0 for failure. +The error can be obtained from \fBERR_get_error\fR\|(3) +.SH "BUGS" +.IX Header "BUGS" +The lack of single pass processing and the need to hold all data in memory as +mentioned in \fBCMS_verify()\fR also applies to \fBCMS_decrypt()\fR. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_get_error\fR\|(3), \fBCMS_encrypt\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2008\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CMS_encrypt.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CMS_encrypt.3 new file mode 100644 index 00000000..ed9ef4d1 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CMS_encrypt.3 @@ -0,0 +1,233 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "CMS_ENCRYPT 3" +.TH CMS_ENCRYPT 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +CMS_encrypt \- create a CMS envelopedData structure +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& CMS_ContentInfo *CMS_encrypt(STACK_OF(X509) *certs, BIO *in, +\& const EVP_CIPHER *cipher, unsigned int flags); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBCMS_encrypt()\fR creates and returns a \s-1CMS\s0 EnvelopedData structure. \fBcerts\fR +is a list of recipient certificates. \fBin\fR is the content to be encrypted. +\&\fBcipher\fR is the symmetric cipher to use. \fBflags\fR is an optional set of flags. +.SH "NOTES" +.IX Header "NOTES" +Only certificates carrying \s-1RSA,\s0 Diffie-Hellman or \s-1EC\s0 keys are supported by this +function. +.PP +\&\fBEVP_des_ede3_cbc()\fR (triple \s-1DES\s0) is the algorithm of choice for S/MIME use +because most clients will support it. +.PP +The algorithm passed in the \fBcipher\fR parameter must support \s-1ASN1\s0 encoding of +its parameters. +.PP +Many browsers implement a \*(L"sign and encrypt\*(R" option which is simply an S/MIME +envelopedData containing an S/MIME signed message. This can be readily produced +by storing the S/MIME signed message in a memory \s-1BIO\s0 and passing it to +\&\fBCMS_encrypt()\fR. +.PP +The following flags can be passed in the \fBflags\fR parameter. +.PP +If the \fB\s-1CMS_TEXT\s0\fR flag is set \s-1MIME\s0 headers for type \fBtext/plain\fR are +prepended to the data. +.PP +Normally the supplied content is translated into \s-1MIME\s0 canonical format (as +required by the S/MIME specifications) if \fB\s-1CMS_BINARY\s0\fR is set no translation +occurs. This option should be used if the supplied data is in binary format +otherwise the translation will corrupt it. If \fB\s-1CMS_BINARY\s0\fR is set then +\&\fB\s-1CMS_TEXT\s0\fR is ignored. +.PP +OpenSSL will by default identify recipient certificates using issuer name +and serial number. If \fB\s-1CMS_USE_KEYID\s0\fR is set it will use the subject key +identifier value instead. An error occurs if all recipient certificates do not +have a subject key identifier extension. +.PP +If the \fB\s-1CMS_STREAM\s0\fR flag is set a partial \fBCMS_ContentInfo\fR structure is +returned suitable for streaming I/O: no data is read from the \s-1BIO\s0 \fBin\fR. +.PP +If the \fB\s-1CMS_PARTIAL\s0\fR flag is set a partial \fBCMS_ContentInfo\fR structure is +returned to which additional recipients and attributes can be added before +finalization. +.PP +The data being encrypted is included in the CMS_ContentInfo structure, unless +\&\fB\s-1CMS_DETACHED\s0\fR is set in which case it is omitted. This is rarely used in +practice and is not supported by \fBSMIME_write_CMS()\fR. +.SH "NOTES" +.IX Header "NOTES" +If the flag \fB\s-1CMS_STREAM\s0\fR is set the returned \fBCMS_ContentInfo\fR structure is +\&\fBnot\fR complete and outputting its contents via a function that does not +properly finalize the \fBCMS_ContentInfo\fR structure will give unpredictable +results. +.PP +Several functions including \fBSMIME_write_CMS()\fR, \fBi2d_CMS_bio_stream()\fR, +\&\fBPEM_write_bio_CMS_stream()\fR finalize the structure. Alternatively finalization +can be performed by obtaining the streaming \s-1ASN1\s0 \fB\s-1BIO\s0\fR directly using +\&\fBBIO_new_CMS()\fR. +.PP +The recipients specified in \fBcerts\fR use a \s-1CMS\s0 KeyTransRecipientInfo info +structure. KEKRecipientInfo is also supported using the flag \fB\s-1CMS_PARTIAL\s0\fR +and \fBCMS_add0_recipient_key()\fR. +.PP +The parameter \fBcerts\fR may be \s-1NULL\s0 if \fB\s-1CMS_PARTIAL\s0\fR is set and recipients +added later using \fBCMS_add1_recipient_cert()\fR or \fBCMS_add0_recipient_key()\fR. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBCMS_encrypt()\fR returns either a CMS_ContentInfo structure or \s-1NULL\s0 if an error +occurred. The error can be obtained from \fBERR_get_error\fR\|(3). +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_get_error\fR\|(3), \fBCMS_decrypt\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +The \fB\s-1CMS_STREAM\s0\fR flag was first supported in OpenSSL 1.0.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2008\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CMS_final.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CMS_final.3 new file mode 100644 index 00000000..61d65fc8 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CMS_final.3 @@ -0,0 +1,177 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "CMS_FINAL 3" +.TH CMS_FINAL 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +CMS_final \- finalise a CMS_ContentInfo structure +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int CMS_final(CMS_ContentInfo *cms, BIO *data, BIO *dcont, unsigned int flags); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBCMS_final()\fR finalises the structure \fBcms\fR. Its purpose is to perform any +operations necessary on \fBcms\fR (digest computation for example) and set the +appropriate fields. The parameter \fBdata\fR contains the content to be +processed. The \fBdcont\fR parameter contains a \s-1BIO\s0 to write content to after +processing: this is only used with detached data and will usually be set to +\&\s-1NULL.\s0 +.SH "NOTES" +.IX Header "NOTES" +This function will normally be called when the \fB\s-1CMS_PARTIAL\s0\fR flag is used. It +should only be used when streaming is not performed because the streaming +I/O functions perform finalisation operations internally. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBCMS_final()\fR returns 1 for success or 0 for failure. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_get_error\fR\|(3), \fBCMS_sign\fR\|(3), +\&\fBCMS_encrypt\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2008\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CMS_get0_RecipientInfos.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CMS_get0_RecipientInfos.3 new file mode 100644 index 00000000..07bf5d24 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CMS_get0_RecipientInfos.3 @@ -0,0 +1,265 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "CMS_GET0_RECIPIENTINFOS 3" +.TH CMS_GET0_RECIPIENTINFOS 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +CMS_get0_RecipientInfos, CMS_RecipientInfo_type, CMS_RecipientInfo_ktri_get0_signer_id, CMS_RecipientInfo_ktri_cert_cmp, CMS_RecipientInfo_set0_pkey, CMS_RecipientInfo_kekri_get0_id, CMS_RecipientInfo_kekri_id_cmp, CMS_RecipientInfo_set0_key, CMS_RecipientInfo_decrypt, CMS_RecipientInfo_encrypt \&\- CMS envelopedData RecipientInfo routines +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& STACK_OF(CMS_RecipientInfo) *CMS_get0_RecipientInfos(CMS_ContentInfo *cms); +\& int CMS_RecipientInfo_type(CMS_RecipientInfo *ri); +\& +\& int CMS_RecipientInfo_ktri_get0_signer_id(CMS_RecipientInfo *ri, +\& ASN1_OCTET_STRING **keyid, +\& X509_NAME **issuer, +\& ASN1_INTEGER **sno); +\& int CMS_RecipientInfo_ktri_cert_cmp(CMS_RecipientInfo *ri, X509 *cert); +\& int CMS_RecipientInfo_set0_pkey(CMS_RecipientInfo *ri, EVP_PKEY *pkey); +\& +\& int CMS_RecipientInfo_kekri_get0_id(CMS_RecipientInfo *ri, X509_ALGOR **palg, +\& ASN1_OCTET_STRING **pid, +\& ASN1_GENERALIZEDTIME **pdate, +\& ASN1_OBJECT **potherid, +\& ASN1_TYPE **pothertype); +\& int CMS_RecipientInfo_kekri_id_cmp(CMS_RecipientInfo *ri, +\& const unsigned char *id, size_t idlen); +\& int CMS_RecipientInfo_set0_key(CMS_RecipientInfo *ri, +\& unsigned char *key, size_t keylen); +\& +\& int CMS_RecipientInfo_decrypt(CMS_ContentInfo *cms, CMS_RecipientInfo *ri); +\& int CMS_RecipientInfo_encrypt(CMS_ContentInfo *cms, CMS_RecipientInfo *ri); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The function \fBCMS_get0_RecipientInfos()\fR returns all the CMS_RecipientInfo +structures associated with a \s-1CMS\s0 EnvelopedData structure. +.PP +\&\fBCMS_RecipientInfo_type()\fR returns the type of CMS_RecipientInfo structure \fBri\fR. +It will currently return \s-1CMS_RECIPINFO_TRANS, CMS_RECIPINFO_AGREE, +CMS_RECIPINFO_KEK, CMS_RECIPINFO_PASS,\s0 or \s-1CMS_RECIPINFO_OTHER.\s0 +.PP +\&\fBCMS_RecipientInfo_ktri_get0_signer_id()\fR retrieves the certificate recipient +identifier associated with a specific CMS_RecipientInfo structure \fBri\fR, which +must be of type \s-1CMS_RECIPINFO_TRANS.\s0 Either the keyidentifier will be set in +\&\fBkeyid\fR or \fBboth\fR issuer name and serial number in \fBissuer\fR and \fBsno\fR. +.PP +\&\fBCMS_RecipientInfo_ktri_cert_cmp()\fR compares the certificate \fBcert\fR against the +CMS_RecipientInfo structure \fBri\fR, which must be of type \s-1CMS_RECIPINFO_TRANS.\s0 +It returns zero if the comparison is successful and non zero if not. +.PP +\&\fBCMS_RecipientInfo_set0_pkey()\fR associates the private key \fBpkey\fR with +the CMS_RecipientInfo structure \fBri\fR, which must be of type +\&\s-1CMS_RECIPINFO_TRANS.\s0 +.PP +\&\fBCMS_RecipientInfo_kekri_get0_id()\fR retrieves the key information from the +CMS_RecipientInfo structure \fBri\fR which must be of type \s-1CMS_RECIPINFO_KEK.\s0 Any +of the remaining parameters can be \s-1NULL\s0 if the application is not interested in +the value of a field. Where a field is optional and absent \s-1NULL\s0 will be written +to the corresponding parameter. The keyEncryptionAlgorithm field is written to +\&\fBpalg\fR, the \fBkeyIdentifier\fR field is written to \fBpid\fR, the \fBdate\fR field if +present is written to \fBpdate\fR, if the \fBother\fR field is present the components +\&\fBkeyAttrId\fR and \fBkeyAttr\fR are written to parameters \fBpotherid\fR and +\&\fBpothertype\fR. +.PP +\&\fBCMS_RecipientInfo_kekri_id_cmp()\fR compares the \s-1ID\s0 in the \fBid\fR and \fBidlen\fR +parameters against the \fBkeyIdentifier\fR CMS_RecipientInfo structure \fBri\fR, +which must be of type \s-1CMS_RECIPINFO_KEK.\s0 It returns zero if the comparison is +successful and non zero if not. +.PP +\&\fBCMS_RecipientInfo_set0_key()\fR associates the symmetric key \fBkey\fR of length +\&\fBkeylen\fR with the CMS_RecipientInfo structure \fBri\fR, which must be of type +\&\s-1CMS_RECIPINFO_KEK.\s0 +.PP +\&\fBCMS_RecipientInfo_decrypt()\fR attempts to decrypt CMS_RecipientInfo structure +\&\fBri\fR in structure \fBcms\fR. A key must have been associated with the structure +first. +.PP +\&\fBCMS_RecipientInfo_encrypt()\fR attempts to encrypt CMS_RecipientInfo structure +\&\fBri\fR in structure \fBcms\fR. A key must have been associated with the structure +first and the content encryption key must be available: for example by a +previous call to \fBCMS_RecipientInfo_decrypt()\fR. +.SH "NOTES" +.IX Header "NOTES" +The main purpose of these functions is to enable an application to lookup +recipient keys using any appropriate technique when the simpler method +of \fBCMS_decrypt()\fR is not appropriate. +.PP +In typical usage and application will retrieve all CMS_RecipientInfo structures +using \fBCMS_get0_RecipientInfos()\fR and check the type of each using +\&\fBCMS_RecipientInfo_type()\fR. Depending on the type the CMS_RecipientInfo structure +can be ignored or its key identifier data retrieved using an appropriate +function. Then if the corresponding secret or private key can be obtained by +any appropriate means it can then associated with the structure and +\&\fBCMS_RecipientInfo_decrypt()\fR called. If successful \fBCMS_decrypt()\fR can be called +with a \s-1NULL\s0 key to decrypt the enveloped content. +.PP +The \fBCMS_RecipientInfo_encrypt()\fR can be used to add a new recipient to an +existing enveloped data structure. Typically an application will first decrypt +an appropriate CMS_RecipientInfo structure to make the content encrypt key +available, it will then add a new recipient using a function such as +\&\fBCMS_add1_recipient_cert()\fR and finally encrypt the content encryption key +using \fBCMS_RecipientInfo_encrypt()\fR. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBCMS_get0_RecipientInfos()\fR returns all CMS_RecipientInfo structures, or \s-1NULL\s0 if +an error occurs. +.PP +\&\fBCMS_RecipientInfo_ktri_get0_signer_id()\fR, \fBCMS_RecipientInfo_set0_pkey()\fR, +\&\fBCMS_RecipientInfo_kekri_get0_id()\fR, \fBCMS_RecipientInfo_set0_key()\fR and +\&\fBCMS_RecipientInfo_decrypt()\fR return 1 for success or 0 if an error occurs. +\&\fBCMS_RecipientInfo_encrypt()\fR return 1 for success or 0 if an error occurs. +.PP +\&\fBCMS_RecipientInfo_ktri_cert_cmp()\fR and \fBCMS_RecipientInfo_kekri_cmp()\fR return 0 +for a successful comparison and non zero otherwise. +.PP +Any error can be obtained from \fBERR_get_error\fR\|(3). +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_get_error\fR\|(3), \fBCMS_decrypt\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2008\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CMS_get0_SignerInfos.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CMS_get0_SignerInfos.3 new file mode 100644 index 00000000..c57544f3 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CMS_get0_SignerInfos.3 @@ -0,0 +1,218 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "CMS_GET0_SIGNERINFOS 3" +.TH CMS_GET0_SIGNERINFOS 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +CMS_SignerInfo_set1_signer_cert, CMS_get0_SignerInfos, CMS_SignerInfo_get0_signer_id, CMS_SignerInfo_get0_signature, CMS_SignerInfo_cert_cmp \&\- CMS signedData signer functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& STACK_OF(CMS_SignerInfo) *CMS_get0_SignerInfos(CMS_ContentInfo *cms); +\& +\& int CMS_SignerInfo_get0_signer_id(CMS_SignerInfo *si, ASN1_OCTET_STRING **keyid, +\& X509_NAME **issuer, ASN1_INTEGER **sno); +\& ASN1_OCTET_STRING *CMS_SignerInfo_get0_signature(CMS_SignerInfo *si); +\& int CMS_SignerInfo_cert_cmp(CMS_SignerInfo *si, X509 *cert); +\& void CMS_SignerInfo_set1_signer_cert(CMS_SignerInfo *si, X509 *signer); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The function \fBCMS_get0_SignerInfos()\fR returns all the CMS_SignerInfo structures +associated with a \s-1CMS\s0 signedData structure. +.PP +\&\fBCMS_SignerInfo_get0_signer_id()\fR retrieves the certificate signer identifier +associated with a specific CMS_SignerInfo structure \fBsi\fR. Either the +keyidentifier will be set in \fBkeyid\fR or \fBboth\fR issuer name and serial number +in \fBissuer\fR and \fBsno\fR. +.PP +\&\fBCMS_SignerInfo_get0_signature()\fR retrieves the signature associated with +\&\fBsi\fR in a pointer to an \s-1ASN1_OCTET_STRING\s0 structure. This pointer returned +corresponds to the internal signature value if \fBsi\fR so it may be read or +modified. +.PP +\&\fBCMS_SignerInfo_cert_cmp()\fR compares the certificate \fBcert\fR against the signer +identifier \fBsi\fR. It returns zero if the comparison is successful and non zero +if not. +.PP +\&\fBCMS_SignerInfo_set1_signer_cert()\fR sets the signers certificate of \fBsi\fR to +\&\fBsigner\fR. +.SH "NOTES" +.IX Header "NOTES" +The main purpose of these functions is to enable an application to lookup +signers certificates using any appropriate technique when the simpler method +of \fBCMS_verify()\fR is not appropriate. +.PP +In typical usage and application will retrieve all CMS_SignerInfo structures +using \fBCMS_get0_SignerInfo()\fR and retrieve the identifier information using +\&\s-1CMS.\s0 It will then obtain the signer certificate by some unspecified means +(or return and error if it cannot be found) and set it using +\&\fBCMS_SignerInfo_set1_signer_cert()\fR. +.PP +Once all signer certificates have been set \fBCMS_verify()\fR can be used. +.PP +Although \fBCMS_get0_SignerInfos()\fR can return \s-1NULL\s0 if an error occurs \fBor\fR if +there are no signers this is not a problem in practice because the only +error which can occur is if the \fBcms\fR structure is not of type signedData +due to application error. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBCMS_get0_SignerInfos()\fR returns all CMS_SignerInfo structures, or \s-1NULL\s0 there +are no signers or an error occurs. +.PP +\&\fBCMS_SignerInfo_get0_signer_id()\fR returns 1 for success and 0 for failure. +.PP +\&\fBCMS_SignerInfo_cert_cmp()\fR returns 0 for a successful comparison and non +zero otherwise. +.PP +\&\fBCMS_SignerInfo_set1_signer_cert()\fR does not return a value. +.PP +Any error can be obtained from \fBERR_get_error\fR\|(3) +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_get_error\fR\|(3), \fBCMS_verify\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2008\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CMS_get0_type.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CMS_get0_type.3 new file mode 100644 index 00000000..ff3079d2 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CMS_get0_type.3 @@ -0,0 +1,217 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "CMS_GET0_TYPE 3" +.TH CMS_GET0_TYPE 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +CMS_get0_type, CMS_set1_eContentType, CMS_get0_eContentType, CMS_get0_content \- get and set CMS content types and content +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& const ASN1_OBJECT *CMS_get0_type(const CMS_ContentInfo *cms); +\& int CMS_set1_eContentType(CMS_ContentInfo *cms, const ASN1_OBJECT *oid); +\& const ASN1_OBJECT *CMS_get0_eContentType(CMS_ContentInfo *cms); +\& ASN1_OCTET_STRING **CMS_get0_content(CMS_ContentInfo *cms); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBCMS_get0_type()\fR returns the content type of a CMS_ContentInfo structure as +an \s-1ASN1_OBJECT\s0 pointer. An application can then decide how to process the +CMS_ContentInfo structure based on this value. +.PP +\&\fBCMS_set1_eContentType()\fR sets the embedded content type of a CMS_ContentInfo +structure. It should be called with \s-1CMS\s0 functions (such as CMS_sign, CMS_encrypt) +with the \fB\s-1CMS_PARTIAL\s0\fR +flag and \fBbefore\fR the structure is finalised, otherwise the results are +undefined. +.PP +\&\s-1ASN1_OBJECT\s0 *\fBCMS_get0_eContentType()\fR returns a pointer to the embedded +content type. +.PP +\&\fBCMS_get0_content()\fR returns a pointer to the \fB\s-1ASN1_OCTET_STRING\s0\fR pointer +containing the embedded content. +.SH "NOTES" +.IX Header "NOTES" +As the \fB0\fR implies \fBCMS_get0_type()\fR, \fBCMS_get0_eContentType()\fR and +\&\fBCMS_get0_content()\fR return internal pointers which should \fBnot\fR be freed up. +\&\fBCMS_set1_eContentType()\fR copies the supplied \s-1OID\s0 and it \fBshould\fR be freed up +after use. +.PP +The \fB\s-1ASN1_OBJECT\s0\fR values returned can be converted to an integer \fB\s-1NID\s0\fR value +using \fBOBJ_obj2nid()\fR. For the currently supported content types the following +values are returned: +.PP +.Vb 6 +\& NID_pkcs7_data +\& NID_pkcs7_signed +\& NID_pkcs7_digest +\& NID_id_smime_ct_compressedData: +\& NID_pkcs7_encrypted +\& NID_pkcs7_enveloped +.Ve +.PP +The return value of \fBCMS_get0_content()\fR is a pointer to the \fB\s-1ASN1_OCTET_STRING\s0\fR +content pointer. That means that for example: +.PP +.Vb 1 +\& ASN1_OCTET_STRING **pconf = CMS_get0_content(cms); +.Ve +.PP +\&\fB*pconf\fR could be \s-1NULL\s0 if there is no embedded content. Applications can +access, modify or create the embedded content in a \fBCMS_ContentInfo\fR structure +using this function. Applications usually will not need to modify the +embedded content as it is normally set by higher level functions. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBCMS_get0_type()\fR and \fBCMS_get0_eContentType()\fR return an \s-1ASN1_OBJECT\s0 structure. +.PP +\&\fBCMS_set1_eContentType()\fR returns 1 for success or 0 if an error occurred. The +error can be obtained from \fBERR_get_error\fR\|(3). +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_get_error\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2008\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CMS_get1_ReceiptRequest.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CMS_get1_ReceiptRequest.3 new file mode 100644 index 00000000..614de9df --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CMS_get1_ReceiptRequest.3 @@ -0,0 +1,209 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "CMS_GET1_RECEIPTREQUEST 3" +.TH CMS_GET1_RECEIPTREQUEST 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +CMS_ReceiptRequest_create0, CMS_add1_ReceiptRequest, CMS_get1_ReceiptRequest, CMS_ReceiptRequest_get0_values \- CMS signed receipt request functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& CMS_ReceiptRequest *CMS_ReceiptRequest_create0(unsigned char *id, int idlen, +\& int allorfirst, +\& STACK_OF(GENERAL_NAMES) *receiptList, +\& STACK_OF(GENERAL_NAMES) *receiptsTo); +\& int CMS_add1_ReceiptRequest(CMS_SignerInfo *si, CMS_ReceiptRequest *rr); +\& int CMS_get1_ReceiptRequest(CMS_SignerInfo *si, CMS_ReceiptRequest **prr); +\& void CMS_ReceiptRequest_get0_values(CMS_ReceiptRequest *rr, ASN1_STRING **pcid, +\& int *pallorfirst, +\& STACK_OF(GENERAL_NAMES) **plist, +\& STACK_OF(GENERAL_NAMES) **prto); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBCMS_ReceiptRequest_create0()\fR creates a signed receipt request structure. The +\&\fBsignedContentIdentifier\fR field is set using \fBid\fR and \fBidlen\fR, or it is set +to 32 bytes of pseudo random data if \fBid\fR is \s-1NULL.\s0 If \fBreceiptList\fR is \s-1NULL\s0 +the allOrFirstTier option in \fBreceiptsFrom\fR is used and set to the value of +the \fBallorfirst\fR parameter. If \fBreceiptList\fR is not \s-1NULL\s0 the \fBreceiptList\fR +option in \fBreceiptsFrom\fR is used. The \fBreceiptsTo\fR parameter specifies the +\&\fBreceiptsTo\fR field value. +.PP +The \fBCMS_add1_ReceiptRequest()\fR function adds a signed receipt request \fBrr\fR +to SignerInfo structure \fBsi\fR. +.PP +int \fBCMS_get1_ReceiptRequest()\fR looks for a signed receipt request in \fBsi\fR, if +any is found it is decoded and written to \fBprr\fR. +.PP +\&\fBCMS_ReceiptRequest_get0_values()\fR retrieves the values of a receipt request. +The signedContentIdentifier is copied to \fBpcid\fR. If the \fBallOrFirstTier\fR +option of \fBreceiptsFrom\fR is used its value is copied to \fBpallorfirst\fR +otherwise the \fBreceiptList\fR field is copied to \fBplist\fR. The \fBreceiptsTo\fR +parameter is copied to \fBprto\fR. +.SH "NOTES" +.IX Header "NOTES" +For more details of the meaning of the fields see \s-1RFC2634.\s0 +.PP +The contents of a signed receipt should only be considered meaningful if the +corresponding CMS_ContentInfo structure can be successfully verified using +\&\fBCMS_verify()\fR. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBCMS_ReceiptRequest_create0()\fR returns a signed receipt request structure or +\&\s-1NULL\s0 if an error occurred. +.PP +\&\fBCMS_add1_ReceiptRequest()\fR returns 1 for success or 0 if an error occurred. +.PP +\&\fBCMS_get1_ReceiptRequest()\fR returns 1 is a signed receipt request is found and +decoded. It returns 0 if a signed receipt request is not present and \-1 if +it is present but malformed. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_get_error\fR\|(3), \fBCMS_sign\fR\|(3), +\&\fBCMS_sign_receipt\fR\|(3), \fBCMS_verify\fR\|(3) +\&\fBCMS_verify_receipt\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2008\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CMS_sign.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CMS_sign.3 new file mode 100644 index 00000000..70af1898 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CMS_sign.3 @@ -0,0 +1,258 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "CMS_SIGN 3" +.TH CMS_SIGN 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +CMS_sign \- create a CMS SignedData structure +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& CMS_ContentInfo *CMS_sign(X509 *signcert, EVP_PKEY *pkey, STACK_OF(X509) *certs, +\& BIO *data, unsigned int flags); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBCMS_sign()\fR creates and returns a \s-1CMS\s0 SignedData structure. \fBsigncert\fR is +the certificate to sign with, \fBpkey\fR is the corresponding private key. +\&\fBcerts\fR is an optional additional set of certificates to include in the \s-1CMS\s0 +structure (for example any intermediate CAs in the chain). Any or all of +these parameters can be \fB\s-1NULL\s0\fR, see \fB\s-1NOTES\s0\fR below. +.PP +The data to be signed is read from \s-1BIO\s0 \fBdata\fR. +.PP +\&\fBflags\fR is an optional set of flags. +.SH "NOTES" +.IX Header "NOTES" +Any of the following flags (ored together) can be passed in the \fBflags\fR +parameter. +.PP +Many S/MIME clients expect the signed content to include valid \s-1MIME\s0 headers. If +the \fB\s-1CMS_TEXT\s0\fR flag is set \s-1MIME\s0 headers for type \fBtext/plain\fR are prepended +to the data. +.PP +If \fB\s-1CMS_NOCERTS\s0\fR is set the signer's certificate will not be included in the +CMS_ContentInfo structure, the signer's certificate must still be supplied in +the \fBsigncert\fR parameter though. This can reduce the size of the signature if +the signers certificate can be obtained by other means: for example a +previously signed message. +.PP +The data being signed is included in the CMS_ContentInfo structure, unless +\&\fB\s-1CMS_DETACHED\s0\fR is set in which case it is omitted. This is used for +CMS_ContentInfo detached signatures which are used in S/MIME plaintext signed +messages for example. +.PP +Normally the supplied content is translated into \s-1MIME\s0 canonical format (as +required by the S/MIME specifications) if \fB\s-1CMS_BINARY\s0\fR is set no translation +occurs. This option should be used if the supplied data is in binary format +otherwise the translation will corrupt it. +.PP +The SignedData structure includes several \s-1CMS\s0 signedAttributes including the +signing time, the \s-1CMS\s0 content type and the supported list of ciphers in an +SMIMECapabilities attribute. If \fB\s-1CMS_NOATTR\s0\fR is set then no signedAttributes +will be used. If \fB\s-1CMS_NOSMIMECAP\s0\fR is set then just the SMIMECapabilities are +omitted. +.PP +If present the SMIMECapabilities attribute indicates support for the following +algorithms in preference order: 256 bit \s-1AES,\s0 Gost R3411\-94, Gost 28147\-89, 192 +bit \s-1AES, 128\s0 bit \s-1AES,\s0 triple \s-1DES, 128\s0 bit \s-1RC2, 64\s0 bit \s-1RC2, DES\s0 and 40 bit \s-1RC2.\s0 +If any of these algorithms is not available then it will not be included: for example the \s-1GOST\s0 algorithms will not be included if the \s-1GOST ENGINE\s0 is +not loaded. +.PP +OpenSSL will by default identify signing certificates using issuer name +and serial number. If \fB\s-1CMS_USE_KEYID\s0\fR is set it will use the subject key +identifier value instead. An error occurs if the signing certificate does not +have a subject key identifier extension. +.PP +If the flags \fB\s-1CMS_STREAM\s0\fR is set then the returned \fBCMS_ContentInfo\fR +structure is just initialized ready to perform the signing operation. The +signing is however \fBnot\fR performed and the data to be signed is not read from +the \fBdata\fR parameter. Signing is deferred until after the data has been +written. In this way data can be signed in a single pass. +.PP +If the \fB\s-1CMS_PARTIAL\s0\fR flag is set a partial \fBCMS_ContentInfo\fR structure is +output to which additional signers and capabilities can be added before +finalization. +.PP +If the flag \fB\s-1CMS_STREAM\s0\fR is set the returned \fBCMS_ContentInfo\fR structure is +\&\fBnot\fR complete and outputting its contents via a function that does not +properly finalize the \fBCMS_ContentInfo\fR structure will give unpredictable +results. +.PP +Several functions including \fBSMIME_write_CMS()\fR, \fBi2d_CMS_bio_stream()\fR, +\&\fBPEM_write_bio_CMS_stream()\fR finalize the structure. Alternatively finalization +can be performed by obtaining the streaming \s-1ASN1\s0 \fB\s-1BIO\s0\fR directly using +\&\fBBIO_new_CMS()\fR. +.PP +If a signer is specified it will use the default digest for the signing +algorithm. This is \fB\s-1SHA1\s0\fR for both \s-1RSA\s0 and \s-1DSA\s0 keys. +.PP +If \fBsigncert\fR and \fBpkey\fR are \s-1NULL\s0 then a certificates only \s-1CMS\s0 structure is +output. +.PP +The function \fBCMS_sign()\fR is a basic \s-1CMS\s0 signing function whose output will be +suitable for many purposes. For finer control of the output format the +\&\fBcerts\fR, \fBsigncert\fR and \fBpkey\fR parameters can all be \fB\s-1NULL\s0\fR and the +\&\fB\s-1CMS_PARTIAL\s0\fR flag set. Then one or more signers can be added using the +function \fBCMS_sign_add1_signer()\fR, non default digests can be used and custom +attributes added. \fBCMS_final()\fR must then be called to finalize the +structure if streaming is not enabled. +.SH "BUGS" +.IX Header "BUGS" +Some attributes such as counter signatures are not supported. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBCMS_sign()\fR returns either a valid CMS_ContentInfo structure or \s-1NULL\s0 if an error +occurred. The error can be obtained from \fBERR_get_error\fR\|(3). +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_get_error\fR\|(3), \fBCMS_verify\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +The \fB\s-1CMS_STREAM\s0\fR flag is only supported for detached data in OpenSSL 0.9.8, +it is supported for embedded data in OpenSSL 1.0.0 and later. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2008\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CMS_sign_receipt.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CMS_sign_receipt.3 new file mode 100644 index 00000000..4b68eb8e --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CMS_sign_receipt.3 @@ -0,0 +1,183 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "CMS_SIGN_RECEIPT 3" +.TH CMS_SIGN_RECEIPT 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +CMS_sign_receipt \- create a CMS signed receipt +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& CMS_ContentInfo *CMS_sign_receipt(CMS_SignerInfo *si, X509 *signcert, +\& EVP_PKEY *pkey, STACK_OF(X509) *certs, +\& unsigned int flags); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBCMS_sign_receipt()\fR creates and returns a \s-1CMS\s0 signed receipt structure. \fBsi\fR is +the \fBCMS_SignerInfo\fR structure containing the signed receipt request. +\&\fBsigncert\fR is the certificate to sign with, \fBpkey\fR is the corresponding +private key. \fBcerts\fR is an optional additional set of certificates to include +in the \s-1CMS\s0 structure (for example any intermediate CAs in the chain). +.PP +\&\fBflags\fR is an optional set of flags. +.SH "NOTES" +.IX Header "NOTES" +This functions behaves in a similar way to \fBCMS_sign()\fR except the flag values +\&\fB\s-1CMS_DETACHED\s0\fR, \fB\s-1CMS_BINARY\s0\fR, \fB\s-1CMS_NOATTR\s0\fR, \fB\s-1CMS_TEXT\s0\fR and \fB\s-1CMS_STREAM\s0\fR +are not supported since they do not make sense in the context of signed +receipts. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBCMS_sign_receipt()\fR returns either a valid CMS_ContentInfo structure or \s-1NULL\s0 if +an error occurred. The error can be obtained from \fBERR_get_error\fR\|(3). +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_get_error\fR\|(3), +\&\fBCMS_verify_receipt\fR\|(3), +\&\fBCMS_sign\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2008\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CMS_uncompress.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CMS_uncompress.3 new file mode 100644 index 00000000..d6e86c15 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CMS_uncompress.3 @@ -0,0 +1,189 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "CMS_UNCOMPRESS 3" +.TH CMS_UNCOMPRESS 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +CMS_uncompress \- uncompress a CMS CompressedData structure +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int CMS_uncompress(CMS_ContentInfo *cms, BIO *dcont, BIO *out, unsigned int flags); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBCMS_uncompress()\fR extracts and uncompresses the content from a \s-1CMS\s0 +CompressedData structure \fBcms\fR. \fBdata\fR is a \s-1BIO\s0 to write the content to and +\&\fBflags\fR is an optional set of flags. +.PP +The \fBdcont\fR parameter is used in the rare case where the compressed content +is detached. It will normally be set to \s-1NULL.\s0 +.SH "NOTES" +.IX Header "NOTES" +The only currently supported compression algorithm is zlib: if the structure +indicates the use of any other algorithm an error is returned. +.PP +If zlib support is not compiled into OpenSSL then \fBCMS_uncompress()\fR will always +return an error. +.PP +The following flags can be passed in the \fBflags\fR parameter. +.PP +If the \fB\s-1CMS_TEXT\s0\fR flag is set \s-1MIME\s0 headers for type \fBtext/plain\fR are deleted +from the content. If the content is not of type \fBtext/plain\fR then an error is +returned. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBCMS_uncompress()\fR returns either 1 for success or 0 for failure. The error can +be obtained from \fBERR_get_error\fR\|(3) +.SH "BUGS" +.IX Header "BUGS" +The lack of single pass processing and the need to hold all data in memory as +mentioned in \fBCMS_verify()\fR also applies to \fBCMS_decompress()\fR. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_get_error\fR\|(3), \fBCMS_compress\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2008\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CMS_verify.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CMS_verify.3 new file mode 100644 index 00000000..c1cdbe42 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CMS_verify.3 @@ -0,0 +1,261 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "CMS_VERIFY 3" +.TH CMS_VERIFY 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +CMS_verify, CMS_get0_signers \- verify a CMS SignedData structure +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int CMS_verify(CMS_ContentInfo *cms, STACK_OF(X509) *certs, X509_STORE *store, +\& BIO *indata, BIO *out, unsigned int flags); +\& +\& STACK_OF(X509) *CMS_get0_signers(CMS_ContentInfo *cms); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBCMS_verify()\fR verifies a \s-1CMS\s0 SignedData structure. \fBcms\fR is the CMS_ContentInfo +structure to verify. \fBcerts\fR is a set of certificates in which to search for +the signing certificate(s). \fBstore\fR is a trusted certificate store used for +chain verification. \fBindata\fR is the detached content if the content is not +present in \fBcms\fR. The content is written to \fBout\fR if it is not \s-1NULL.\s0 +.PP +\&\fBflags\fR is an optional set of flags, which can be used to modify the verify +operation. +.PP +\&\fBCMS_get0_signers()\fR retrieves the signing certificate(s) from \fBcms\fR, it must +be called after a successful \fBCMS_verify()\fR operation. +.SH "VERIFY PROCESS" +.IX Header "VERIFY PROCESS" +Normally the verify process proceeds as follows. +.PP +Initially some sanity checks are performed on \fBcms\fR. The type of \fBcms\fR must +be SignedData. There must be at least one signature on the data and if +the content is detached \fBindata\fR cannot be \fB\s-1NULL\s0\fR. +.PP +An attempt is made to locate all the signing certificate(s), first looking in +the \fBcerts\fR parameter (if it is not \s-1NULL\s0) and then looking in any +certificates contained in the \fBcms\fR structure itself. If any signing +certificate cannot be located the operation fails. +.PP +Each signing certificate is chain verified using the \fBsmimesign\fR purpose and +the supplied trusted certificate store. Any internal certificates in the message +are used as untrusted CAs. If \s-1CRL\s0 checking is enabled in \fBstore\fR any internal +CRLs are used in addition to attempting to look them up in \fBstore\fR. If any +chain verify fails an error code is returned. +.PP +Finally the signed content is read (and written to \fBout\fR if it is not \s-1NULL\s0) +and the signature's checked. +.PP +If all signature's verify correctly then the function is successful. +.PP +Any of the following flags (ored together) can be passed in the \fBflags\fR +parameter to change the default verify behaviour. +.PP +If \fB\s-1CMS_NOINTERN\s0\fR is set the certificates in the message itself are not +searched when locating the signing certificate(s). This means that all the +signing certificates must be in the \fBcerts\fR parameter. +.PP +If \fB\s-1CMS_NOCRL\s0\fR is set and \s-1CRL\s0 checking is enabled in \fBstore\fR then any +CRLs in the message itself are ignored. +.PP +If the \fB\s-1CMS_TEXT\s0\fR flag is set \s-1MIME\s0 headers for type \fBtext/plain\fR are deleted +from the content. If the content is not of type \fBtext/plain\fR then an error is +returned. +.PP +If \fB\s-1CMS_NO_SIGNER_CERT_VERIFY\s0\fR is set the signing certificates are not +verified. +.PP +If \fB\s-1CMS_NO_ATTR_VERIFY\s0\fR is set the signed attributes signature is not +verified. +.PP +If \fB\s-1CMS_NO_CONTENT_VERIFY\s0\fR is set then the content digest is not checked. +.SH "NOTES" +.IX Header "NOTES" +One application of \fB\s-1CMS_NOINTERN\s0\fR is to only accept messages signed by +a small number of certificates. The acceptable certificates would be passed +in the \fBcerts\fR parameter. In this case if the signer is not one of the +certificates supplied in \fBcerts\fR then the verify will fail because the +signer cannot be found. +.PP +In some cases the standard techniques for looking up and validating +certificates are not appropriate: for example an application may wish to +lookup certificates in a database or perform customised verification. This +can be achieved by setting and verifying the signers certificates manually +using the signed data utility functions. +.PP +Care should be taken when modifying the default verify behaviour, for example +setting \fB\s-1CMS_NO_CONTENT_VERIFY\s0\fR will totally disable all content verification +and any modified content will be considered valid. This combination is however +useful if one merely wishes to write the content to \fBout\fR and its validity +is not considered important. +.PP +Chain verification should arguably be performed using the signing time rather +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). +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBCMS_verify()\fR returns 1 for a successful verification and zero if an error +occurred. +.PP +\&\fBCMS_get0_signers()\fR returns all signers or \s-1NULL\s0 if an error occurred. +.PP +The error can be obtained from \fBERR_get_error\fR\|(3) +.SH "BUGS" +.IX Header "BUGS" +The trusted certificate store is not searched for the signing certificate, +this is primarily due to the inadequacies of the current \fBX509_STORE\fR +functionality. +.PP +The lack of single pass processing means that the signed content must all +be held in memory if it is not detached. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_get_error\fR\|(3), \fBCMS_sign\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2008\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CMS_verify_receipt.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CMS_verify_receipt.3 new file mode 100644 index 00000000..b2a48605 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CMS_verify_receipt.3 @@ -0,0 +1,185 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "CMS_VERIFY_RECEIPT 3" +.TH CMS_VERIFY_RECEIPT 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +CMS_verify_receipt \- verify a CMS signed receipt +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int CMS_verify_receipt(CMS_ContentInfo *rcms, CMS_ContentInfo *ocms, +\& STACK_OF(X509) *certs, X509_STORE *store, +\& unsigned int flags); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBCMS_verify_receipt()\fR verifies a \s-1CMS\s0 signed receipt. \fBrcms\fR is the signed +receipt to verify. \fBocms\fR is the original SignedData structure containing the +receipt request. \fBcerts\fR is a set of certificates in which to search for the +signing certificate. \fBstore\fR is a trusted certificate store (used for chain +verification). +.PP +\&\fBflags\fR is an optional set of flags, which can be used to modify the verify +operation. +.SH "NOTES" +.IX Header "NOTES" +This functions behaves in a similar way to \fBCMS_verify()\fR except the flag values +\&\fB\s-1CMS_DETACHED\s0\fR, \fB\s-1CMS_BINARY\s0\fR, \fB\s-1CMS_TEXT\s0\fR and \fB\s-1CMS_STREAM\s0\fR are not +supported since they do not make sense in the context of signed receipts. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBCMS_verify_receipt()\fR returns 1 for a successful verification and zero if an +error occurred. +.PP +The error can be obtained from \fBERR_get_error\fR\|(3) +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_get_error\fR\|(3), +\&\fBCMS_sign_receipt\fR\|(3), +\&\fBCMS_verify\fR\|(3), +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2008\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CONF_modules_free.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CONF_modules_free.3 new file mode 100644 index 00000000..4bad492e --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CONF_modules_free.3 @@ -0,0 +1,190 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "CONF_MODULES_FREE 3" +.TH CONF_MODULES_FREE 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +CONF_modules_free, CONF_modules_finish, CONF_modules_unload \- OpenSSL configuration cleanup functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& void CONF_modules_finish(void); +\& void CONF_modules_unload(int all); +.Ve +.PP +Deprecated: +.PP +.Vb 3 +\& #if OPENSSL_API_COMPAT < 0x10100000L +\& void CONF_modules_free(void) +\& #endif +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBCONF_modules_free()\fR closes down and frees up all memory allocated by all +configuration modules. Normally, in versions of OpenSSL prior to 1.1.0, +applications called +\&\fBCONF_modules_free()\fR at exit to tidy up any configuration performed. +.PP +\&\fBCONF_modules_finish()\fR calls each configuration modules \fBfinish\fR handler +to free up any configuration that module may have performed. +.PP +\&\fBCONF_modules_unload()\fR finishes and unloads configuration modules. If +\&\fBall\fR is set to \fB0\fR only modules loaded from DSOs will be unloads. If +\&\fBall\fR is \fB1\fR all modules, including builtin modules will be unloaded. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +None of the functions return a value. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBconfig\fR\|(5), \fBOPENSSL_config\fR\|(3), +\&\fBCONF_modules_load_file\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +\&\fBCONF_modules_free()\fR was deprecated in OpenSSL 1.1.0; do not use it. +For more information see \fBOPENSSL_init_crypto\fR\|(3). +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2004\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CONF_modules_load_file.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CONF_modules_load_file.3 new file mode 100644 index 00000000..e25a82df --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CONF_modules_load_file.3 @@ -0,0 +1,282 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "CONF_MODULES_LOAD_FILE 3" +.TH CONF_MODULES_LOAD_FILE 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +CONF_modules_load_file, CONF_modules_load \- OpenSSL configuration functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int CONF_modules_load_file(const char *filename, const char *appname, +\& unsigned long flags); +\& int CONF_modules_load(const CONF *cnf, const char *appname, +\& unsigned long flags); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The function \fBCONF_modules_load_file()\fR configures OpenSSL using file +\&\fBfilename\fR and application name \fBappname\fR. If \fBfilename\fR is \s-1NULL\s0 +the standard OpenSSL configuration file is used. If \fBappname\fR is +\&\s-1NULL\s0 the standard OpenSSL application name \fBopenssl_conf\fR is used. +The behaviour can be customized using \fBflags\fR. +.PP +\&\fBCONF_modules_load()\fR is identical to \fBCONF_modules_load_file()\fR except it +reads configuration information from \fBcnf\fR. +.SH "NOTES" +.IX Header "NOTES" +The following \fBflags\fR are currently recognized: +.PP +If \fB\s-1CONF_MFLAGS_IGNORE_ERRORS\s0\fR is set errors returned by individual +configuration modules are ignored. If not set the first module error is +considered fatal and no further modules are loaded. +.PP +Normally any modules errors will add error information to the error queue. If +\&\fB\s-1CONF_MFLAGS_SILENT\s0\fR is set no error information is added. +.PP +If \fB\s-1CONF_MFLAGS_IGNORE_RETURN_CODES\s0\fR is set the function unconditionally +returns success. +This is used by default in \fBOPENSSL_init_crypto\fR\|(3) to ignore any errors in +the default system-wide configuration file, as having all OpenSSL applications +fail to start when there are potentially minor issues in the file is too risky. +Applications calling \fBCONF_modules_load_file\fR explicitly should not generally +set this flag. +.PP +If \fB\s-1CONF_MFLAGS_NO_DSO\s0\fR is set configuration module loading from DSOs is +disabled. +.PP +\&\fB\s-1CONF_MFLAGS_IGNORE_MISSING_FILE\s0\fR if set will make \fBCONF_load_modules_file()\fR +ignore missing configuration files. Normally a missing configuration file +return an error. +.PP +\&\fB\s-1CONF_MFLAGS_DEFAULT_SECTION\s0\fR if set and \fBappname\fR is not \s-1NULL\s0 will use the +default section pointed to by \fBopenssl_conf\fR if \fBappname\fR does not exist. +.PP +By using \fBCONF_modules_load_file()\fR with appropriate flags an application can +customise application configuration to best suit its needs. In some cases the +use of a configuration file is optional and its absence is not an error: in +this case \fB\s-1CONF_MFLAGS_IGNORE_MISSING_FILE\s0\fR would be set. +.PP +Errors during configuration may also be handled differently by different +applications. For example in some cases an error may simply print out a warning +message and the application continue. In other cases an application might +consider a configuration file error as fatal and exit immediately. +.PP +Applications can use the \fBCONF_modules_load()\fR function if they wish to load a +configuration file themselves and have finer control over how errors are +treated. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +These functions return 1 for success and a zero or negative value for +failure. If module errors are not ignored the return code will reflect the +return value of the failing module (this will always be zero or negative). +.SH "EXAMPLES" +.IX Header "EXAMPLES" +Load a configuration file and print out any errors and exit (missing file +considered fatal): +.PP +.Vb 5 +\& if (CONF_modules_load_file(NULL, NULL, 0) <= 0) { +\& fprintf(stderr, "FATAL: error loading configuration file\en"); +\& ERR_print_errors_fp(stderr); +\& exit(1); +\& } +.Ve +.PP +Load default configuration file using the section indicated by \*(L"myapp\*(R", +tolerate missing files, but exit on other errors: +.PP +.Vb 6 +\& if (CONF_modules_load_file(NULL, "myapp", +\& CONF_MFLAGS_IGNORE_MISSING_FILE) <= 0) { +\& fprintf(stderr, "FATAL: error loading configuration file\en"); +\& ERR_print_errors_fp(stderr); +\& exit(1); +\& } +.Ve +.PP +Load custom configuration file and section, only print warnings on error, +missing configuration file ignored: +.PP +.Vb 5 +\& if (CONF_modules_load_file("/something/app.cnf", "myapp", +\& CONF_MFLAGS_IGNORE_MISSING_FILE) <= 0) { +\& fprintf(stderr, "WARNING: error loading configuration file\en"); +\& ERR_print_errors_fp(stderr); +\& } +.Ve +.PP +Load and parse configuration file manually, custom error handling: +.PP +.Vb 3 +\& FILE *fp; +\& CONF *cnf = NULL; +\& long eline; +\& +\& fp = fopen("/somepath/app.cnf", "r"); +\& if (fp == NULL) { +\& fprintf(stderr, "Error opening configuration file\en"); +\& /* Other missing configuration file behaviour */ +\& } else { +\& cnf = NCONF_new(NULL); +\& if (NCONF_load_fp(cnf, fp, &eline) == 0) { +\& fprintf(stderr, "Error on line %ld of configuration file\en", eline); +\& ERR_print_errors_fp(stderr); +\& /* Other malformed configuration file behaviour */ +\& } else if (CONF_modules_load(cnf, "appname", 0) <= 0) { +\& fprintf(stderr, "Error configuring application\en"); +\& ERR_print_errors_fp(stderr); +\& /* Other configuration error behaviour */ +\& } +\& fclose(fp); +\& NCONF_free(cnf); +\& } +.Ve +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBconfig\fR\|(5), \fBOPENSSL_config\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2004\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CRYPTO_THREAD_run_once.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CRYPTO_THREAD_run_once.3 new file mode 100644 index 00000000..fff4237c --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CRYPTO_THREAD_run_once.3 @@ -0,0 +1,283 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "CRYPTO_THREAD_RUN_ONCE 3" +.TH CRYPTO_THREAD_RUN_ONCE 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +CRYPTO_THREAD_run_once, CRYPTO_THREAD_lock_new, CRYPTO_THREAD_read_lock, CRYPTO_THREAD_write_lock, CRYPTO_THREAD_unlock, CRYPTO_THREAD_lock_free, CRYPTO_atomic_add \- OpenSSL thread support +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& CRYPTO_ONCE CRYPTO_ONCE_STATIC_INIT; +\& int CRYPTO_THREAD_run_once(CRYPTO_ONCE *once, void (*init)(void)); +\& +\& CRYPTO_RWLOCK *CRYPTO_THREAD_lock_new(void); +\& int CRYPTO_THREAD_read_lock(CRYPTO_RWLOCK *lock); +\& int CRYPTO_THREAD_write_lock(CRYPTO_RWLOCK *lock); +\& int CRYPTO_THREAD_unlock(CRYPTO_RWLOCK *lock); +\& void CRYPTO_THREAD_lock_free(CRYPTO_RWLOCK *lock); +\& +\& int CRYPTO_atomic_add(int *val, int amount, int *ret, CRYPTO_RWLOCK *lock); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +OpenSSL can be safely used in multi-threaded applications provided that +support for the underlying \s-1OS\s0 threading \s-1API\s0 is built-in. Currently, OpenSSL +supports the pthread and Windows APIs. OpenSSL can also be built without +any multi-threading support, for example on platforms that don't provide +any threading support or that provide a threading \s-1API\s0 that is not yet +supported by OpenSSL. +.PP +The following multi-threading function are provided: +.IP "\(bu" 2 +\&\fBCRYPTO_THREAD_run_once()\fR can be used to perform one-time initialization. +The \fBonce\fR argument must be a pointer to a static object of type +\&\fB\s-1CRYPTO_ONCE\s0\fR that was statically initialized to the value +\&\fB\s-1CRYPTO_ONCE_STATIC_INIT\s0\fR. +The \fBinit\fR argument is a pointer to a function that performs the desired +exactly once initialization. +In particular, this can be used to allocate locks in a thread-safe manner, +which can then be used with the locking functions below. +.IP "\(bu" 2 +\&\fBCRYPTO_THREAD_lock_new()\fR allocates, initializes and returns a new read/write +lock. +.IP "\(bu" 2 +\&\fBCRYPTO_THREAD_read_lock()\fR locks the provided \fBlock\fR for reading. +.IP "\(bu" 2 +\&\fBCRYPTO_THREAD_write_lock()\fR locks the provided \fBlock\fR for writing. +.IP "\(bu" 2 +\&\fBCRYPTO_THREAD_unlock()\fR unlocks the previously locked \fBlock\fR. +.IP "\(bu" 2 +\&\fBCRYPTO_THREAD_lock_free()\fR frees the provided \fBlock\fR. +.IP "\(bu" 2 +\&\fBCRYPTO_atomic_add()\fR atomically adds \fBamount\fR to \fBval\fR and returns the +result of the operation in \fBret\fR. \fBlock\fR will be locked, unless atomic +operations are supported on the specific platform. Because of this, if a +variable is modified by \fBCRYPTO_atomic_add()\fR then \fBCRYPTO_atomic_add()\fR must +be the only way that the variable is modified. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBCRYPTO_THREAD_run_once()\fR returns 1 on success, or 0 on error. +.PP +\&\fBCRYPTO_THREAD_lock_new()\fR returns the allocated lock, or \s-1NULL\s0 on error. +.PP +\&\fBCRYPTO_THREAD_lock_free()\fR returns no value. +.PP +The other functions return 1 on success, or 0 on error. +.SH "NOTES" +.IX Header "NOTES" +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 +application developer's responsibility to include windows.h prior to +crypto.h where use of CRYPTO_THREAD_* types and functions is required. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +This example safely initializes and uses a lock. +.PP +.Vb 4 +\& #ifdef _WIN32 +\& # include +\& #endif +\& #include +\& +\& static CRYPTO_ONCE once = CRYPTO_ONCE_STATIC_INIT; +\& static CRYPTO_RWLOCK *lock; +\& +\& static void myinit(void) +\& { +\& lock = CRYPTO_THREAD_lock_new(); +\& } +\& +\& static int mylock(void) +\& { +\& if (!CRYPTO_THREAD_run_once(&once, void init) || lock == NULL) +\& return 0; +\& return CRYPTO_THREAD_write_lock(lock); +\& } +\& +\& static int myunlock(void) +\& { +\& return CRYPTO_THREAD_unlock(lock); +\& } +\& +\& int serialized(void) +\& { +\& int ret = 0; +\& +\& if (mylock()) { +\& /* Your code here, do not return without releasing the lock! */ +\& ret = ... ; +\& } +\& myunlock(); +\& return ret; +\& } +.Ve +.PP +Finalization of locks is an advanced topic, not covered in this example. +This can only be done at process exit or when a dynamically loaded library is +no longer in use and is unloaded. +The simplest solution is to just \*(L"leak\*(R" the lock in applications and not +repeatedly load/unload shared libraries that allocate locks. +.SH "NOTES" +.IX Header "NOTES" +You can find out if OpenSSL was configured with thread support: +.PP +.Vb 6 +\& #include +\& #if defined(OPENSSL_THREADS) +\& /* thread support enabled */ +\& #else +\& /* no thread support */ +\& #endif +.Ve +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBcrypto\fR\|(7) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CRYPTO_get_ex_new_index.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CRYPTO_get_ex_new_index.3 new file mode 100644 index 00000000..3ca05a17 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CRYPTO_get_ex_new_index.3 @@ -0,0 +1,298 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "CRYPTO_GET_EX_NEW_INDEX 3" +.TH CRYPTO_GET_EX_NEW_INDEX 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +CRYPTO_EX_new, CRYPTO_EX_free, CRYPTO_EX_dup, CRYPTO_free_ex_index, CRYPTO_get_ex_new_index, CRYPTO_set_ex_data, CRYPTO_get_ex_data, CRYPTO_free_ex_data, CRYPTO_new_ex_data \&\- functions supporting application\-specific data +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int CRYPTO_get_ex_new_index(int class_index, +\& long argl, void *argp, +\& CRYPTO_EX_new *new_func, +\& CRYPTO_EX_dup *dup_func, +\& CRYPTO_EX_free *free_func); +\& +\& typedef void CRYPTO_EX_new(void *parent, void *ptr, CRYPTO_EX_DATA *ad, +\& int idx, long argl, void *argp); +\& typedef void CRYPTO_EX_free(void *parent, void *ptr, CRYPTO_EX_DATA *ad, +\& int idx, long argl, void *argp); +\& typedef int CRYPTO_EX_dup(CRYPTO_EX_DATA *to, const CRYPTO_EX_DATA *from, +\& void *from_d, int idx, long argl, void *argp); +\& +\& int CRYPTO_new_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad) +\& +\& int CRYPTO_set_ex_data(CRYPTO_EX_DATA *r, int idx, void *arg); +\& +\& void *CRYPTO_get_ex_data(CRYPTO_EX_DATA *r, int idx); +\& +\& void CRYPTO_free_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *r); +\& +\& int CRYPTO_free_ex_index(int class_index, int idx); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +Several OpenSSL structures can have application-specific data attached to them, +known as \*(L"exdata.\*(R" +The specific structures are: +.PP +.Vb 10 +\& APP +\& BIO +\& DH +\& DRBG +\& DSA +\& EC_KEY +\& ENGINE +\& RSA +\& SSL +\& SSL_CTX +\& SSL_SESSION +\& UI +\& UI_METHOD +\& X509 +\& X509_STORE +\& X509_STORE_CTX +.Ve +.PP +Each is identified by an \fBCRYPTO_EX_INDEX_xxx\fR define in the \fBcrypto.h\fR +header file. In addition, \fB\s-1CRYPTO_EX_INDEX_APP\s0\fR is reserved for +applications to use this facility for their own structures. +.PP +The \s-1API\s0 described here is used by OpenSSL to manipulate exdata for specific +structures. Since the application data can be anything at all it is passed +and retrieved as a \fBvoid *\fR type. +.PP +The \fB\s-1CRYPTO_EX_DATA\s0\fR type is opaque. To initialize the exdata part of +a structure, call \fBCRYPTO_new_ex_data()\fR. This is only necessary for +\&\fB\s-1CRYPTO_EX_INDEX_APP\s0\fR objects. +.PP +Exdata types are identified by an \fBindex\fR, an integer guaranteed to be +unique within structures for the lifetime of the program. Applications +using exdata typically call \fBCRYPTO_get_ex_new_index\fR at startup, and +store the result in a global variable, or write a wrapper function to +provide lazy evaluation. The \fBclass_index\fR should be one of the +\&\fBCRYPTO_EX_INDEX_xxx\fR values. The \fBargl\fR and \fBargp\fR parameters are saved +to be passed to the callbacks but are otherwise not used. In order to +transparently manipulate exdata, three callbacks must be provided. The +semantics of those callbacks are described below. +.PP +When copying or releasing objects with exdata, the callback functions +are called in increasing order of their \fBindex\fR value. +.PP +If a dynamic library can be unloaded, it should call \fBCRYPTO_free_ex_index()\fR +when this is done. +This will replace the callbacks with no-ops +so that applications don't crash. Any existing exdata will be leaked. +.PP +To set or get the exdata on an object, the appropriate type-specific +routine must be used. This is because the containing structure is opaque +and the \fB\s-1CRYPTO_EX_DATA\s0\fR field is not accessible. In both \s-1API\s0's, the +\&\fBidx\fR parameter should be an already-created index value. +.PP +When setting exdata, the pointer specified with a particular index is saved, +and returned on a subsequent \*(L"get\*(R" call. If the application is going to +release the data, it must make sure to set a \fB\s-1NULL\s0\fR value at the index, +to avoid likely double-free crashes. +.PP +The function \fBCRYPTO_free_ex_data\fR is used to free all exdata attached +to a structure. The appropriate type-specific routine must be used. +The \fBclass_index\fR identifies the structure type, the \fBobj\fR is +a pointer to the actual structure, and \fBr\fR is a pointer to the +structure's exdata field. +.SS "Callback Functions" +.IX Subsection "Callback Functions" +This section describes how the callback functions are used. Applications +that are defining their own exdata using \fB\s-1CYPRTO_EX_INDEX_APP\s0\fR must +call them as described here. +.PP +When a structure is initially allocated (such as \fBRSA_new()\fR) then the +\&\fBnew_func()\fR is called for every defined index. There is no requirement +that the entire parent, or containing, structure has been set up. +The \fBnew_func()\fR is typically used only to allocate memory to store the +exdata, and perhaps an \*(L"initialized\*(R" flag within that memory. +The exdata value should be set by calling \fBCRYPTO_set_ex_data()\fR. +.PP +When a structure is free'd (such as \fBSSL_CTX_free()\fR) then the +\&\fBfree_func()\fR is called for every defined index. Again, the state of the +parent structure is not guaranteed. The \fBfree_func()\fR may be called with a +\&\s-1NULL\s0 pointer. +.PP +Both \fBnew_func()\fR and \fBfree_func()\fR take the same parameters. +The \fBparent\fR is the pointer to the structure that contains the exdata. +The \fBptr\fR is the current exdata item; for \fBnew_func()\fR this will typically +be \s-1NULL.\s0 The \fBr\fR parameter is a pointer to the exdata field of the object. +The \fBidx\fR is the index and is the value returned when the callbacks were +initially registered via \fBCRYPTO_get_ex_new_index()\fR and can be used if +the same callback handles different types of exdata. +.PP +\&\fBdup_func()\fR is called when a structure is being copied. This is only done +for \fB\s-1SSL\s0\fR, \fB\s-1SSL_SESSION\s0\fR, \fB\s-1EC_KEY\s0\fR objects and \fB\s-1BIO\s0\fR chains via +\&\fBBIO_dup_chain()\fR. The \fBto\fR and \fBfrom\fR parameters +are pointers to the destination and source \fB\s-1CRYPTO_EX_DATA\s0\fR structures, +respectively. The \fBfrom_d\fR parameter needs to be cast to a \fBvoid **pptr\fR +as the \s-1API\s0 has currently the wrong signature; that will be changed in a +future version. The \fB*pptr\fR is a pointer to the source exdata. +When the \fBdup_func()\fR returns, the value in \fB*pptr\fR is copied to the +destination ex_data. If the pointer contained in \fB*pptr\fR is not modified +by the \fBdup_func()\fR, then both \fBto\fR and \fBfrom\fR will point to the same data. +The \fBidx\fR, \fBargl\fR and \fBargp\fR parameters are as described for the other +two callbacks. If the \fBdup_func()\fR returns \fB0\fR the whole \fBCRYPTO_dup_ex_data()\fR +will fail. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBCRYPTO_get_ex_new_index()\fR returns a new index or \-1 on failure. +.PP +\&\fBCRYPTO_free_ex_index()\fR and +\&\fBCRYPTO_set_ex_data()\fR return 1 on success or 0 on failure. +.PP +\&\fBCRYPTO_get_ex_data()\fR returns the application data or \s-1NULL\s0 on failure; +note that \s-1NULL\s0 may be a valid value. +.PP +\&\fBdup_func()\fR should return 0 for failure and 1 for success. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2015\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CRYPTO_memcmp.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CRYPTO_memcmp.3 new file mode 100644 index 00000000..cb3fc228 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CRYPTO_memcmp.3 @@ -0,0 +1,171 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "CRYPTO_MEMCMP 3" +.TH CRYPTO_MEMCMP 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +CRYPTO_memcmp \- Constant time memory comparison +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int CRYPTO_memcmp(const void *a, const void *b, size_t len); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The CRYPTO_memcmp function compares the \fBlen\fR bytes pointed to by \fBa\fR and \fBb\fR +for equality. +It takes an amount of time dependent on \fBlen\fR, but independent of the +contents of the memory regions pointed to by \fBa\fR and \fBb\fR. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBCRYPTO_memcmp()\fR returns 0 if the memory regions are equal and non-zero +otherwise. +.SH "NOTES" +.IX Header "NOTES" +Unlike \fBmemcmp\fR\|(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. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the Apache License 2.0 (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CTLOG_STORE_get0_log_by_id.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CTLOG_STORE_get0_log_by_id.3 new file mode 100644 index 00000000..e1415ea4 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CTLOG_STORE_get0_log_by_id.3 @@ -0,0 +1,179 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "CTLOG_STORE_GET0_LOG_BY_ID 3" +.TH CTLOG_STORE_GET0_LOG_BY_ID 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +CTLOG_STORE_get0_log_by_id \- Get a Certificate Transparency log from a CTLOG_STORE +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& const CTLOG *CTLOG_STORE_get0_log_by_id(const CTLOG_STORE *store, +\& const uint8_t *log_id, +\& size_t log_id_len); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +A Signed Certificate Timestamp (\s-1SCT\s0) identifies the Certificate Transparency +(\s-1CT\s0) log that issued it using the log's LogID (see \s-1RFC 6962,\s0 Section 3.2). +Therefore, it is useful to be able to look up more information about a log +(e.g. its public key) using this LogID. +.PP +\&\fBCTLOG_STORE_get0_log_by_id()\fR provides a way to do this. It will find a \s-1CTLOG\s0 +in a \s-1CTLOG_STORE\s0 that has a given LogID. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBCTLOG_STORE_get0_log_by_id\fR returns a \s-1CTLOG\s0 with the given LogID, if it +exists in the given \s-1CTLOG_STORE,\s0 otherwise it returns \s-1NULL.\s0 +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBct\fR\|(7), +\&\fBCTLOG_STORE_new\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +The \fBCTLOG_STORE_get0_log_by_id()\fR function was added in OpenSSL 1.1.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CTLOG_STORE_new.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CTLOG_STORE_new.3 new file mode 100644 index 00000000..6b3067e7 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CTLOG_STORE_new.3 @@ -0,0 +1,209 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "CTLOG_STORE_NEW 3" +.TH CTLOG_STORE_NEW 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +CTLOG_STORE_new, CTLOG_STORE_free, CTLOG_STORE_load_default_file, CTLOG_STORE_load_file \- Create and populate a Certificate Transparency log list +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& CTLOG_STORE *CTLOG_STORE_new(void); +\& void CTLOG_STORE_free(CTLOG_STORE *store); +\& +\& int CTLOG_STORE_load_default_file(CTLOG_STORE *store); +\& int CTLOG_STORE_load_file(CTLOG_STORE *store, const char *file); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +A \s-1CTLOG_STORE\s0 is a container for a list of CTLOGs (Certificate Transparency +logs). The list can be loaded from one or more files and then searched by LogID +(see \s-1RFC 6962,\s0 Section 3.2, for the definition of a LogID). +.PP +\&\fBCTLOG_STORE_new()\fR creates an empty list of \s-1CT\s0 logs. This is then populated +by \fBCTLOG_STORE_load_default_file()\fR or \fBCTLOG_STORE_load_file()\fR. +\&\fBCTLOG_STORE_load_default_file()\fR loads from the default file, which is named +\&\*(L"ct_log_list.cnf\*(R" in \s-1OPENSSLDIR\s0 (see the output of version). This can be +overridden using an environment variable named \*(L"\s-1CTLOG_FILE\*(R".\s0 +\&\fBCTLOG_STORE_load_file()\fR loads from a caller-specified file path instead. +Both of these functions append any loaded \s-1CT\s0 logs to the \s-1CTLOG_STORE.\s0 +.PP +The expected format of the file is: +.PP +.Vb 1 +\& enabled_logs=foo,bar +\& +\& [foo] +\& description = Log 1 +\& key = +\& +\& [bar] +\& description = Log 2 +\& key = +.Ve +.PP +Once a \s-1CTLOG_STORE\s0 is no longer required, it should be passed to +\&\fBCTLOG_STORE_free()\fR. This will delete all of the CTLOGs stored within, along +with the \s-1CTLOG_STORE\s0 itself. +.SH "NOTES" +.IX Header "NOTES" +If there are any invalid \s-1CT\s0 logs in a file, they are skipped and the remaining +valid logs will still be added to the \s-1CTLOG_STORE. A CT\s0 log will be considered +invalid if it is missing a \*(L"key\*(R" or \*(L"description\*(R" field. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +Both \fBCTLOG_STORE_load_default_file\fR and \fBCTLOG_STORE_load_file\fR return 1 if +all \s-1CT\s0 logs in the file are successfully parsed and loaded, 0 otherwise. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBct\fR\|(7), +\&\fBCTLOG_STORE_get0_log_by_id\fR\|(3), +\&\fBSSL_CTX_set_ctlog_list_file\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +These functions were added in OpenSSL 1.1.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CTLOG_new.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CTLOG_new.3 new file mode 100644 index 00000000..90dd3e49 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CTLOG_new.3 @@ -0,0 +1,201 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "CTLOG_NEW 3" +.TH CTLOG_NEW 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +CTLOG_new, CTLOG_new_from_base64, CTLOG_free, CTLOG_get0_name, CTLOG_get0_log_id, CTLOG_get0_public_key \- encapsulates information about a Certificate Transparency log +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& CTLOG *CTLOG_new(EVP_PKEY *public_key, const char *name); +\& int CTLOG_new_from_base64(CTLOG ** ct_log, +\& const char *pkey_base64, const char *name); +\& void CTLOG_free(CTLOG *log); +\& const char *CTLOG_get0_name(const CTLOG *log); +\& void CTLOG_get0_log_id(const CTLOG *log, const uint8_t **log_id, +\& size_t *log_id_len); +\& EVP_PKEY *CTLOG_get0_public_key(const CTLOG *log); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBCTLOG_new()\fR returns a new \s-1CTLOG\s0 that represents the Certificate Transparency +(\s-1CT\s0) log with the given public key. A name must also be provided that can be +used to help users identify this log. Ownership of the public key is +transferred. +.PP +\&\fBCTLOG_new_from_base64()\fR also creates a new \s-1CTLOG,\s0 but takes the public key in +base64\-encoded \s-1DER\s0 form and sets the ct_log pointer to point to the new \s-1CTLOG.\s0 +The base64 will be decoded and the public key parsed. +.PP +Regardless of whether \fBCTLOG_new()\fR or \fBCTLOG_new_from_base64()\fR is used, it is the +caller's responsibility to pass the \s-1CTLOG\s0 to \fBCTLOG_free()\fR once it is no longer +needed. This will delete it and, if created by \fBCTLOG_new()\fR, the \s-1EVP_PKEY\s0 that +was passed to it. +.PP +\&\fBCTLOG_get0_name()\fR returns the name of the log, as provided when the \s-1CTLOG\s0 was +created. Ownership of the string remains with the \s-1CTLOG.\s0 +.PP +\&\fBCTLOG_get0_log_id()\fR sets *log_id to point to a string containing that log's +LogID (see \s-1RFC 6962\s0). It sets *log_id_len to the length of that LogID. For a +v1 \s-1CT\s0 log, the LogID will be a \s-1SHA\-256\s0 hash (i.e. 32 bytes long). Ownership of +the string remains with the \s-1CTLOG.\s0 +.PP +\&\fBCTLOG_get0_public_key()\fR returns the public key of the \s-1CT\s0 log. Ownership of the +\&\s-1EVP_PKEY\s0 remains with the \s-1CTLOG.\s0 +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBCTLOG_new()\fR will return \s-1NULL\s0 if an error occurs. +.PP +\&\fBCTLOG_new_from_base64()\fR will return 1 on success, 0 otherwise. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBct\fR\|(7) +.SH "HISTORY" +.IX Header "HISTORY" +These functions were added in OpenSSL 1.1.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CT_POLICY_EVAL_CTX_new.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CT_POLICY_EVAL_CTX_new.3 new file mode 100644 index 00000000..0dc57ec3 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/CT_POLICY_EVAL_CTX_new.3 @@ -0,0 +1,229 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "CT_POLICY_EVAL_CTX_NEW 3" +.TH CT_POLICY_EVAL_CTX_NEW 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +CT_POLICY_EVAL_CTX_new, CT_POLICY_EVAL_CTX_free, CT_POLICY_EVAL_CTX_get0_cert, CT_POLICY_EVAL_CTX_set1_cert, CT_POLICY_EVAL_CTX_get0_issuer, CT_POLICY_EVAL_CTX_set1_issuer, CT_POLICY_EVAL_CTX_get0_log_store, CT_POLICY_EVAL_CTX_set_shared_CTLOG_STORE, CT_POLICY_EVAL_CTX_get_time, CT_POLICY_EVAL_CTX_set_time \- Encapsulates the data required to evaluate whether SCTs meet a Certificate Transparency policy +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& CT_POLICY_EVAL_CTX *CT_POLICY_EVAL_CTX_new(void); +\& void CT_POLICY_EVAL_CTX_free(CT_POLICY_EVAL_CTX *ctx); +\& X509* CT_POLICY_EVAL_CTX_get0_cert(const CT_POLICY_EVAL_CTX *ctx); +\& int CT_POLICY_EVAL_CTX_set1_cert(CT_POLICY_EVAL_CTX *ctx, X509 *cert); +\& X509* CT_POLICY_EVAL_CTX_get0_issuer(const CT_POLICY_EVAL_CTX *ctx); +\& int CT_POLICY_EVAL_CTX_set1_issuer(CT_POLICY_EVAL_CTX *ctx, X509 *issuer); +\& const CTLOG_STORE *CT_POLICY_EVAL_CTX_get0_log_store(const CT_POLICY_EVAL_CTX *ctx); +\& void CT_POLICY_EVAL_CTX_set_shared_CTLOG_STORE(CT_POLICY_EVAL_CTX *ctx, +\& CTLOG_STORE *log_store); +\& uint64_t CT_POLICY_EVAL_CTX_get_time(const CT_POLICY_EVAL_CTX *ctx); +\& void CT_POLICY_EVAL_CTX_set_time(CT_POLICY_EVAL_CTX *ctx, uint64_t time_in_ms); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +A \fB\s-1CT_POLICY_EVAL_CTX\s0\fR is used by functions that evaluate whether Signed +Certificate Timestamps (SCTs) fulfil a Certificate Transparency (\s-1CT\s0) policy. +This policy may be, for example, that at least one valid \s-1SCT\s0 is available. To +determine this, an \s-1SCT\s0's timestamp and signature must be verified. +This requires: +.IP "\(bu" 2 +the public key of the log that issued the \s-1SCT\s0 +.IP "\(bu" 2 +the certificate that the \s-1SCT\s0 was issued for +.IP "\(bu" 2 +the issuer certificate (if the \s-1SCT\s0 was issued for a pre-certificate) +.IP "\(bu" 2 +the current time +.PP +The above requirements are met using the setters described below. +.PP +\&\fBCT_POLICY_EVAL_CTX_new()\fR creates an empty policy evaluation context. This +should then be populated using: +.IP "\(bu" 2 +\&\fBCT_POLICY_EVAL_CTX_set1_cert()\fR to provide the certificate the SCTs were issued for +.Sp +Increments the reference count of the certificate. +.IP "\(bu" 2 +\&\fBCT_POLICY_EVAL_CTX_set1_issuer()\fR to provide the issuer certificate +.Sp +Increments the reference count of the certificate. +.IP "\(bu" 2 +\&\fBCT_POLICY_EVAL_CTX_set_shared_CTLOG_STORE()\fR to provide a list of logs that are trusted as sources of SCTs +.Sp +Holds a pointer to the \s-1CTLOG_STORE,\s0 so the \s-1CTLOG_STORE\s0 must outlive the +\&\s-1CT_POLICY_EVAL_CTX.\s0 +.IP "\(bu" 2 +\&\fBCT_POLICY_EVAL_CTX_set_time()\fR to set the time SCTs should be compared with to determine if they are valid +.Sp +The \s-1SCT\s0 timestamp will be compared to this time to check whether the \s-1SCT\s0 was +issued in the future. \s-1RFC6962\s0 states that \*(L"\s-1TLS\s0 clients \s-1MUST\s0 reject SCTs whose +timestamp is in the future\*(R". By default, this will be set to 5 minutes in the +future (e.g. (\fBtime()\fR + 300) * 1000), to allow for clock drift. +.Sp +The time should be in milliseconds since the Unix epoch. +.PP +Each setter has a matching getter for accessing the current value. +.PP +When no longer required, the \fB\s-1CT_POLICY_EVAL_CTX\s0\fR should be passed to +\&\fBCT_POLICY_EVAL_CTX_free()\fR to delete it. +.SH "NOTES" +.IX Header "NOTES" +The issuer certificate only needs to be provided if at least one of the SCTs +was issued for a pre-certificate. This will be the case for SCTs embedded in a +certificate (i.e. those in an X.509 extension), but may not be the case for SCTs +found in the \s-1TLS SCT\s0 extension or \s-1OCSP\s0 response. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBCT_POLICY_EVAL_CTX_new()\fR will return \s-1NULL\s0 if malloc fails. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBct\fR\|(7) +.SH "HISTORY" +.IX Header "HISTORY" +These functions were added in OpenSSL 1.1.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DEFINE_STACK_OF.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DEFINE_STACK_OF.3 new file mode 100644 index 00000000..cee5b495 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DEFINE_STACK_OF.3 @@ -0,0 +1,404 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "DEFINE_STACK_OF 3" +.TH DEFINE_STACK_OF 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +DEFINE_STACK_OF, DEFINE_STACK_OF_CONST, DEFINE_SPECIAL_STACK_OF, DEFINE_SPECIAL_STACK_OF_CONST, sk_TYPE_num, sk_TYPE_value, sk_TYPE_new, sk_TYPE_new_null, sk_TYPE_reserve, sk_TYPE_free, sk_TYPE_zero, sk_TYPE_delete, sk_TYPE_delete_ptr, sk_TYPE_push, sk_TYPE_unshift, sk_TYPE_pop, sk_TYPE_shift, sk_TYPE_pop_free, sk_TYPE_insert, sk_TYPE_set, sk_TYPE_find, sk_TYPE_find_ex, sk_TYPE_sort, sk_TYPE_is_sorted, sk_TYPE_dup, sk_TYPE_deep_copy, sk_TYPE_set_cmp_func, sk_TYPE_new_reserve \&\- stack container +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& STACK_OF(TYPE) +\& DEFINE_STACK_OF(TYPE) +\& DEFINE_STACK_OF_CONST(TYPE) +\& DEFINE_SPECIAL_STACK_OF(FUNCTYPE, TYPE) +\& DEFINE_SPECIAL_STACK_OF_CONST(FUNCTYPE, TYPE) +\& +\& typedef int (*sk_TYPE_compfunc)(const TYPE *const *a, const TYPE *const *b); +\& typedef TYPE * (*sk_TYPE_copyfunc)(const TYPE *a); +\& typedef void (*sk_TYPE_freefunc)(TYPE *a); +\& +\& int sk_TYPE_num(const STACK_OF(TYPE) *sk); +\& TYPE *sk_TYPE_value(const STACK_OF(TYPE) *sk, int idx); +\& STACK_OF(TYPE) *sk_TYPE_new(sk_TYPE_compfunc compare); +\& STACK_OF(TYPE) *sk_TYPE_new_null(void); +\& int sk_TYPE_reserve(STACK_OF(TYPE) *sk, int n); +\& void sk_TYPE_free(const STACK_OF(TYPE) *sk); +\& void sk_TYPE_zero(const STACK_OF(TYPE) *sk); +\& TYPE *sk_TYPE_delete(STACK_OF(TYPE) *sk, int i); +\& TYPE *sk_TYPE_delete_ptr(STACK_OF(TYPE) *sk, TYPE *ptr); +\& int sk_TYPE_push(STACK_OF(TYPE) *sk, const TYPE *ptr); +\& int sk_TYPE_unshift(STACK_OF(TYPE) *sk, const TYPE *ptr); +\& TYPE *sk_TYPE_pop(STACK_OF(TYPE) *sk); +\& TYPE *sk_TYPE_shift(STACK_OF(TYPE) *sk); +\& void sk_TYPE_pop_free(STACK_OF(TYPE) *sk, sk_TYPE_freefunc freefunc); +\& int sk_TYPE_insert(STACK_OF(TYPE) *sk, TYPE *ptr, int idx); +\& TYPE *sk_TYPE_set(STACK_OF(TYPE) *sk, int idx, const TYPE *ptr); +\& int sk_TYPE_find(STACK_OF(TYPE) *sk, TYPE *ptr); +\& int sk_TYPE_find_ex(STACK_OF(TYPE) *sk, TYPE *ptr); +\& void sk_TYPE_sort(const STACK_OF(TYPE) *sk); +\& int sk_TYPE_is_sorted(const STACK_OF(TYPE) *sk); +\& STACK_OF(TYPE) *sk_TYPE_dup(const STACK_OF(TYPE) *sk); +\& STACK_OF(TYPE) *sk_TYPE_deep_copy(const STACK_OF(TYPE) *sk, +\& sk_TYPE_copyfunc copyfunc, +\& sk_TYPE_freefunc freefunc); +\& sk_TYPE_compfunc (*sk_TYPE_set_cmp_func(STACK_OF(TYPE) *sk, +\& sk_TYPE_compfunc compare)); +\& STACK_OF(TYPE) *sk_TYPE_new_reserve(sk_TYPE_compfunc compare, int n); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +Applications can create and use their own stacks by placing any of the macros +described below in a header file. These macros define typesafe inline +functions that wrap around the utility \fBOPENSSL_sk_\fR \s-1API.\s0 +In the description here, \fI\s-1TYPE\s0\fR is used +as a placeholder for any of the OpenSSL datatypes, such as \fIX509\fR. +.PP +\&\s-1\fBSTACK_OF\s0()\fR returns the name for a stack of the specified \fB\s-1TYPE\s0\fR. +\&\s-1\fBDEFINE_STACK_OF\s0()\fR creates set of functions for a stack of \fB\s-1TYPE\s0\fR. This +will mean that type \fB\s-1TYPE\s0\fR is stored in each stack, the type is referenced by +\&\s-1STACK_OF\s0(\s-1TYPE\s0) and each function name begins with \fIsk_TYPE_\fR. For example: +.PP +.Vb 1 +\& TYPE *sk_TYPE_value(STACK_OF(TYPE) *sk, int idx); +.Ve +.PP +\&\s-1\fBDEFINE_STACK_OF_CONST\s0()\fR is identical to \s-1\fBDEFINE_STACK_OF\s0()\fR except +each element is constant. For example: +.PP +.Vb 1 +\& const TYPE *sk_TYPE_value(STACK_OF(TYPE) *sk, int idx); +.Ve +.PP +\&\s-1\fBDEFINE_SPECIAL_STACK_OF\s0()\fR defines a stack of \fB\s-1TYPE\s0\fR but +each function uses \fB\s-1FUNCNAME\s0\fR in the function name. For example: +.PP +.Vb 1 +\& TYPE *sk_FUNCNAME_value(STACK_OF(TYPE) *sk, int idx); +.Ve +.PP +\&\s-1\fBDEFINE_SPECIAL_STACK_OF_CONST\s0()\fR is similar except that each element is +constant: +.PP +.Vb 1 +\& const TYPE *sk_FUNCNAME_value(STACK_OF(TYPE) *sk, int idx); +.Ve +.PP +\&\fBsk_TYPE_num()\fR returns the number of elements in \fBsk\fR or \-1 if \fBsk\fR is +\&\fB\s-1NULL\s0\fR. +.PP +\&\fBsk_TYPE_value()\fR returns element \fBidx\fR in \fBsk\fR, where \fBidx\fR starts at +zero. If \fBidx\fR is out of range then \fB\s-1NULL\s0\fR is returned. +.PP +\&\fBsk_TYPE_new()\fR allocates a new empty stack using comparison function \fBcompare\fR. +If \fBcompare\fR is \fB\s-1NULL\s0\fR then no comparison function is used. This function is +equivalent to sk_TYPE_new_reserve(compare, 0). +.PP +\&\fBsk_TYPE_new_null()\fR allocates a new empty stack with no comparison function. This +function is equivalent to sk_TYPE_new_reserve(\s-1NULL, 0\s0). +.PP +\&\fBsk_TYPE_reserve()\fR allocates additional memory in the \fBsk\fR structure +such that the next \fBn\fR calls to \fBsk_TYPE_insert()\fR, \fBsk_TYPE_push()\fR +or \fBsk_TYPE_unshift()\fR will not fail or cause memory to be allocated +or reallocated. If \fBn\fR is zero, any excess space allocated in the +\&\fBsk\fR structure is freed. On error \fBsk\fR is unchanged. +.PP +\&\fBsk_TYPE_new_reserve()\fR allocates a new stack. The new stack will have additional +memory allocated to hold \fBn\fR elements if \fBn\fR is positive. The next \fBn\fR calls +to \fBsk_TYPE_insert()\fR, \fBsk_TYPE_push()\fR or \fBsk_TYPE_unshift()\fR will not fail or cause +memory to be allocated or reallocated. If \fBn\fR is zero or less than zero, no +memory is allocated. \fBsk_TYPE_new_reserve()\fR also sets the comparison function +\&\fBcompare\fR to the newly created stack. If \fBcompare\fR is \fB\s-1NULL\s0\fR then no +comparison function is used. +.PP +\&\fBsk_TYPE_set_cmp_func()\fR sets the comparison function of \fBsk\fR to \fBcompare\fR. +The previous comparison function is returned or \fB\s-1NULL\s0\fR if there was +no previous comparison function. +.PP +\&\fBsk_TYPE_free()\fR frees up the \fBsk\fR structure. It does \fBnot\fR free up any +elements of \fBsk\fR. After this call \fBsk\fR is no longer valid. +.PP +\&\fBsk_TYPE_zero()\fR sets the number of elements in \fBsk\fR to zero. It does not free +\&\fBsk\fR so after this call \fBsk\fR is still valid. +.PP +\&\fBsk_TYPE_pop_free()\fR frees up all elements of \fBsk\fR and \fBsk\fR itself. The +free function \fBfreefunc()\fR is called on each element to free it. +.PP +\&\fBsk_TYPE_delete()\fR deletes element \fBi\fR from \fBsk\fR. It returns the deleted +element or \fB\s-1NULL\s0\fR if \fBi\fR is out of range. +.PP +\&\fBsk_TYPE_delete_ptr()\fR deletes element matching \fBptr\fR from \fBsk\fR. It returns +the deleted element or \fB\s-1NULL\s0\fR if no element matching \fBptr\fR was found. +.PP +\&\fBsk_TYPE_insert()\fR inserts \fBptr\fR into \fBsk\fR at position \fBidx\fR. Any existing +elements at or after \fBidx\fR are moved downwards. If \fBidx\fR is out of range +the new element is appended to \fBsk\fR. \fBsk_TYPE_insert()\fR either returns the +number of elements in \fBsk\fR after the new element is inserted or zero if +an error (such as memory allocation failure) occurred. +.PP +\&\fBsk_TYPE_push()\fR appends \fBptr\fR to \fBsk\fR it is equivalent to: +.PP +.Vb 1 +\& sk_TYPE_insert(sk, ptr, \-1); +.Ve +.PP +\&\fBsk_TYPE_unshift()\fR inserts \fBptr\fR at the start of \fBsk\fR it is equivalent to: +.PP +.Vb 1 +\& sk_TYPE_insert(sk, ptr, 0); +.Ve +.PP +\&\fBsk_TYPE_pop()\fR returns and removes the last element from \fBsk\fR. +.PP +\&\fBsk_TYPE_shift()\fR returns and removes the first element from \fBsk\fR. +.PP +\&\fBsk_TYPE_set()\fR sets element \fBidx\fR of \fBsk\fR to \fBptr\fR replacing the current +element. The new element value is returned or \fB\s-1NULL\s0\fR if an error occurred: +this will only happen if \fBsk\fR is \fB\s-1NULL\s0\fR or \fBidx\fR is out of range. +.PP +\&\fBsk_TYPE_find()\fR searches \fBsk\fR for the element \fBptr\fR. In the case +where no comparison function has been specified, the function performs +a linear search for a pointer equal to \fBptr\fR. The index of the first +matching element is returned or \fB\-1\fR if there is no match. In the case +where a comparison function has been specified, \fBsk\fR is sorted then +\&\fBsk_TYPE_find()\fR returns the index of a matching element or \fB\-1\fR if there +is no match. Note that, in this case, the matching element returned is +not guaranteed to be the first; the comparison function will usually +compare the values pointed to rather than the pointers themselves and +the order of elements in \fBsk\fR could change. +.PP +\&\fBsk_TYPE_find_ex()\fR operates like \fBsk_TYPE_find()\fR except when a comparison +function has been specified and no matching element is found. Instead +of returning \fB\-1\fR, \fBsk_TYPE_find_ex()\fR returns the index of the element +either before or after the location where \fBptr\fR would be if it were +present in \fBsk\fR. +.PP +\&\fBsk_TYPE_sort()\fR sorts \fBsk\fR using the supplied comparison function. +.PP +\&\fBsk_TYPE_is_sorted()\fR returns \fB1\fR if \fBsk\fR is sorted and \fB0\fR otherwise. +.PP +\&\fBsk_TYPE_dup()\fR returns a copy of \fBsk\fR. Note the pointers in the copy +are identical to the original. +.PP +\&\fBsk_TYPE_deep_copy()\fR returns a new stack where each element has been copied. +Copying is performed by the supplied \fBcopyfunc()\fR and freeing by \fBfreefunc()\fR. The +function \fBfreefunc()\fR is only called if an error occurs. +.SH "NOTES" +.IX Header "NOTES" +Care should be taken when accessing stacks in multi-threaded environments. +Any operation which increases the size of a stack such as \fBsk_TYPE_insert()\fR or +\&\fBsk_push()\fR can \*(L"grow\*(R" the size of an internal array and cause race conditions +if the same stack is accessed in a different thread. Operations such as +\&\fBsk_find()\fR and \fBsk_sort()\fR can also reorder the stack. +.PP +Any comparison function supplied should use a metric suitable +for use in a binary search operation. That is it should return zero, a +positive or negative value if \fBa\fR is equal to, greater than +or less than \fBb\fR respectively. +.PP +Care should be taken when checking the return values of the functions +\&\fBsk_TYPE_find()\fR and \fBsk_TYPE_find_ex()\fR. They return an index to the +matching element. In particular \fB0\fR indicates a matching first element. +A failed search is indicated by a \fB\-1\fR return value. +.PP +\&\s-1\fBSTACK_OF\s0()\fR, \s-1\fBDEFINE_STACK_OF\s0()\fR, \s-1\fBDEFINE_STACK_OF_CONST\s0()\fR, and +\&\s-1\fBDEFINE_SPECIAL_STACK_OF\s0()\fR are implemented as macros. +.PP +The underlying utility \fBOPENSSL_sk_\fR \s-1API\s0 should not be used directly. +It defines these functions: \fBOPENSSL_sk_deep_copy()\fR, +\&\fBOPENSSL_sk_delete()\fR, \fBOPENSSL_sk_delete_ptr()\fR, \fBOPENSSL_sk_dup()\fR, +\&\fBOPENSSL_sk_find()\fR, \fBOPENSSL_sk_find_ex()\fR, \fBOPENSSL_sk_free()\fR, +\&\fBOPENSSL_sk_insert()\fR, \fBOPENSSL_sk_is_sorted()\fR, \fBOPENSSL_sk_new()\fR, +\&\fBOPENSSL_sk_new_null()\fR, \fBOPENSSL_sk_num()\fR, \fBOPENSSL_sk_pop()\fR, +\&\fBOPENSSL_sk_pop_free()\fR, \fBOPENSSL_sk_push()\fR, \fBOPENSSL_sk_reserve()\fR, +\&\fBOPENSSL_sk_set()\fR, \fBOPENSSL_sk_set_cmp_func()\fR, \fBOPENSSL_sk_shift()\fR, +\&\fBOPENSSL_sk_sort()\fR, \fBOPENSSL_sk_unshift()\fR, \fBOPENSSL_sk_value()\fR, +\&\fBOPENSSL_sk_zero()\fR. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBsk_TYPE_num()\fR returns the number of elements in the stack or \fB\-1\fR if the +passed stack is \fB\s-1NULL\s0\fR. +.PP +\&\fBsk_TYPE_value()\fR returns a pointer to a stack element or \fB\s-1NULL\s0\fR if the +index is out of range. +.PP +\&\fBsk_TYPE_new()\fR, \fBsk_TYPE_new_null()\fR and \fBsk_TYPE_new_reserve()\fR return an empty +stack or \fB\s-1NULL\s0\fR if an error occurs. +.PP +\&\fBsk_TYPE_reserve()\fR returns \fB1\fR on successful allocation of the required memory +or \fB0\fR on error. +.PP +\&\fBsk_TYPE_set_cmp_func()\fR returns the old comparison function or \fB\s-1NULL\s0\fR if +there was no old comparison function. +.PP +\&\fBsk_TYPE_free()\fR, \fBsk_TYPE_zero()\fR, \fBsk_TYPE_pop_free()\fR and \fBsk_TYPE_sort()\fR do +not return values. +.PP +\&\fBsk_TYPE_pop()\fR, \fBsk_TYPE_shift()\fR, \fBsk_TYPE_delete()\fR and \fBsk_TYPE_delete_ptr()\fR +return a pointer to the deleted element or \fB\s-1NULL\s0\fR on error. +.PP +\&\fBsk_TYPE_insert()\fR, \fBsk_TYPE_push()\fR and \fBsk_TYPE_unshift()\fR return the total +number of elements in the stack and 0 if an error occurred. +.PP +\&\fBsk_TYPE_set()\fR returns a pointer to the replacement element or \fB\s-1NULL\s0\fR on +error. +.PP +\&\fBsk_TYPE_find()\fR and \fBsk_TYPE_find_ex()\fR return an index to the found element +or \fB\-1\fR on error. +.PP +\&\fBsk_TYPE_is_sorted()\fR returns \fB1\fR if the stack is sorted and \fB0\fR if it is +not. +.PP +\&\fBsk_TYPE_dup()\fR and \fBsk_TYPE_deep_copy()\fR return a pointer to the copy of the +stack. +.SH "HISTORY" +.IX Header "HISTORY" +Before OpenSSL 1.1.0, this was implemented via macros and not inline functions +and was not a public \s-1API.\s0 +.PP +\&\fBsk_TYPE_reserve()\fR and \fBsk_TYPE_new_reserve()\fR were added in OpenSSL 1.1.1. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DES_random_key.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DES_random_key.3 new file mode 100644 index 00000000..debdb963 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DES_random_key.3 @@ -0,0 +1,444 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "DES_RANDOM_KEY 3" +.TH DES_RANDOM_KEY 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +DES_random_key, DES_set_key, DES_key_sched, DES_set_key_checked, DES_set_key_unchecked, DES_set_odd_parity, DES_is_weak_key, DES_ecb_encrypt, DES_ecb2_encrypt, DES_ecb3_encrypt, DES_ncbc_encrypt, DES_cfb_encrypt, DES_ofb_encrypt, DES_pcbc_encrypt, DES_cfb64_encrypt, DES_ofb64_encrypt, DES_xcbc_encrypt, DES_ede2_cbc_encrypt, DES_ede2_cfb64_encrypt, DES_ede2_ofb64_encrypt, DES_ede3_cbc_encrypt, DES_ede3_cfb64_encrypt, DES_ede3_ofb64_encrypt, DES_cbc_cksum, DES_quad_cksum, DES_string_to_key, DES_string_to_2keys, DES_fcrypt, DES_crypt \- DES encryption +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& void DES_random_key(DES_cblock *ret); +\& +\& int DES_set_key(const_DES_cblock *key, DES_key_schedule *schedule); +\& int DES_key_sched(const_DES_cblock *key, DES_key_schedule *schedule); +\& int DES_set_key_checked(const_DES_cblock *key, DES_key_schedule *schedule); +\& void DES_set_key_unchecked(const_DES_cblock *key, DES_key_schedule *schedule); +\& +\& void DES_set_odd_parity(DES_cblock *key); +\& int DES_is_weak_key(const_DES_cblock *key); +\& +\& void DES_ecb_encrypt(const_DES_cblock *input, DES_cblock *output, +\& DES_key_schedule *ks, int enc); +\& void DES_ecb2_encrypt(const_DES_cblock *input, DES_cblock *output, +\& DES_key_schedule *ks1, DES_key_schedule *ks2, int enc); +\& void DES_ecb3_encrypt(const_DES_cblock *input, DES_cblock *output, +\& DES_key_schedule *ks1, DES_key_schedule *ks2, +\& DES_key_schedule *ks3, int enc); +\& +\& void DES_ncbc_encrypt(const unsigned char *input, unsigned char *output, +\& long length, DES_key_schedule *schedule, DES_cblock *ivec, +\& int enc); +\& void DES_cfb_encrypt(const unsigned char *in, unsigned char *out, +\& int numbits, long length, DES_key_schedule *schedule, +\& DES_cblock *ivec, int enc); +\& void DES_ofb_encrypt(const unsigned char *in, unsigned char *out, +\& int numbits, long length, DES_key_schedule *schedule, +\& DES_cblock *ivec); +\& void DES_pcbc_encrypt(const unsigned char *input, unsigned char *output, +\& long length, DES_key_schedule *schedule, DES_cblock *ivec, +\& int enc); +\& void DES_cfb64_encrypt(const unsigned char *in, unsigned char *out, +\& long length, DES_key_schedule *schedule, DES_cblock *ivec, +\& int *num, int enc); +\& void DES_ofb64_encrypt(const unsigned char *in, unsigned char *out, +\& long length, DES_key_schedule *schedule, DES_cblock *ivec, +\& int *num); +\& +\& void DES_xcbc_encrypt(const unsigned char *input, unsigned char *output, +\& long length, DES_key_schedule *schedule, DES_cblock *ivec, +\& const_DES_cblock *inw, const_DES_cblock *outw, int enc); +\& +\& void DES_ede2_cbc_encrypt(const unsigned char *input, unsigned char *output, +\& long length, DES_key_schedule *ks1, +\& DES_key_schedule *ks2, DES_cblock *ivec, int enc); +\& void DES_ede2_cfb64_encrypt(const unsigned char *in, unsigned char *out, +\& long length, DES_key_schedule *ks1, +\& DES_key_schedule *ks2, DES_cblock *ivec, +\& int *num, int enc); +\& void DES_ede2_ofb64_encrypt(const unsigned char *in, unsigned char *out, +\& long length, DES_key_schedule *ks1, +\& DES_key_schedule *ks2, DES_cblock *ivec, int *num); +\& +\& void DES_ede3_cbc_encrypt(const unsigned char *input, unsigned char *output, +\& long length, DES_key_schedule *ks1, +\& DES_key_schedule *ks2, DES_key_schedule *ks3, +\& DES_cblock *ivec, int enc); +\& void DES_ede3_cfb64_encrypt(const unsigned char *in, unsigned char *out, +\& long length, DES_key_schedule *ks1, +\& DES_key_schedule *ks2, DES_key_schedule *ks3, +\& DES_cblock *ivec, int *num, int enc); +\& void DES_ede3_ofb64_encrypt(const unsigned char *in, unsigned char *out, +\& long length, DES_key_schedule *ks1, +\& DES_key_schedule *ks2, DES_key_schedule *ks3, +\& DES_cblock *ivec, int *num); +\& +\& DES_LONG DES_cbc_cksum(const unsigned char *input, DES_cblock *output, +\& long length, DES_key_schedule *schedule, +\& const_DES_cblock *ivec); +\& DES_LONG DES_quad_cksum(const unsigned char *input, DES_cblock output[], +\& long length, int out_count, DES_cblock *seed); +\& void DES_string_to_key(const char *str, DES_cblock *key); +\& void DES_string_to_2keys(const char *str, DES_cblock *key1, DES_cblock *key2); +\& +\& char *DES_fcrypt(const char *buf, const char *salt, char *ret); +\& char *DES_crypt(const char *buf, const char *salt); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +This library contains a fast implementation of the \s-1DES\s0 encryption +algorithm. +.PP +There are two phases to the use of \s-1DES\s0 encryption. The first is the +generation of a \fIDES_key_schedule\fR from a key, the second is the +actual encryption. A \s-1DES\s0 key is of type \fIDES_cblock\fR. This type +consists of 8 bytes with odd parity. The least significant bit in +each byte is the parity bit. The key schedule is an expanded form of +the key; it is used to speed the encryption process. +.PP +\&\fBDES_random_key()\fR generates a random key. The random generator must be +seeded when calling this function. +If the automatic seeding or reseeding of the OpenSSL \s-1CSPRNG\s0 fails due to +external circumstances (see \s-1\fBRAND\s0\fR\|(7)), the operation will fail. +If the function fails, 0 is returned. +.PP +Before a \s-1DES\s0 key can be used, it must be converted into the +architecture dependent \fIDES_key_schedule\fR via the +\&\fBDES_set_key_checked()\fR or \fBDES_set_key_unchecked()\fR function. +.PP +\&\fBDES_set_key_checked()\fR will check that the key passed is of odd parity +and is not a weak or semi-weak key. If the parity is wrong, then \-1 +is returned. If the key is a weak key, then \-2 is returned. If an +error is returned, the key schedule is not generated. +.PP +\&\fBDES_set_key()\fR works like +\&\fBDES_set_key_checked()\fR if the \fIDES_check_key\fR flag is non-zero, +otherwise like \fBDES_set_key_unchecked()\fR. These functions are available +for compatibility; it is recommended to use a function that does not +depend on a global variable. +.PP +\&\fBDES_set_odd_parity()\fR sets the parity of the passed \fIkey\fR to odd. +.PP +\&\fBDES_is_weak_key()\fR returns 1 if the passed key is a weak key, 0 if it +is ok. +.PP +The following routines mostly operate on an input and output stream of +\&\fIDES_cblock\fRs. +.PP +\&\fBDES_ecb_encrypt()\fR is the basic \s-1DES\s0 encryption routine that encrypts or +decrypts a single 8\-byte \fIDES_cblock\fR in \fIelectronic code book\fR +(\s-1ECB\s0) mode. It always transforms the input data, pointed to by +\&\fIinput\fR, into the output data, pointed to by the \fIoutput\fR argument. +If the \fIencrypt\fR argument is non-zero (\s-1DES_ENCRYPT\s0), the \fIinput\fR +(cleartext) is encrypted in to the \fIoutput\fR (ciphertext) using the +key_schedule specified by the \fIschedule\fR argument, previously set via +\&\fIDES_set_key\fR. If \fIencrypt\fR is zero (\s-1DES_DECRYPT\s0), the \fIinput\fR (now +ciphertext) is decrypted into the \fIoutput\fR (now cleartext). Input +and output may overlap. \fBDES_ecb_encrypt()\fR does not return a value. +.PP +\&\fBDES_ecb3_encrypt()\fR encrypts/decrypts the \fIinput\fR block by using +three-key Triple-DES encryption in \s-1ECB\s0 mode. This involves encrypting +the input with \fIks1\fR, decrypting with the key schedule \fIks2\fR, and +then encrypting with \fIks3\fR. This routine greatly reduces the chances +of brute force breaking of \s-1DES\s0 and has the advantage of if \fIks1\fR, +\&\fIks2\fR and \fIks3\fR are the same, it is equivalent to just encryption +using \s-1ECB\s0 mode and \fIks1\fR as the key. +.PP +The macro \fBDES_ecb2_encrypt()\fR is provided to perform two-key Triple-DES +encryption by using \fIks1\fR for the final encryption. +.PP +\&\fBDES_ncbc_encrypt()\fR encrypts/decrypts using the \fIcipher-block-chaining\fR +(\s-1CBC\s0) mode of \s-1DES.\s0 If the \fIencrypt\fR argument is non-zero, the +routine cipher-block-chain encrypts the cleartext data pointed to by +the \fIinput\fR argument into the ciphertext pointed to by the \fIoutput\fR +argument, using the key schedule provided by the \fIschedule\fR argument, +and initialization vector provided by the \fIivec\fR argument. If the +\&\fIlength\fR argument is not an integral multiple of eight bytes, the +last block is copied to a temporary area and zero filled. The output +is always an integral multiple of eight bytes. +.PP +\&\fBDES_xcbc_encrypt()\fR is \s-1RSA\s0's \s-1DESX\s0 mode of \s-1DES.\s0 It uses \fIinw\fR and +\&\fIoutw\fR to 'whiten' the encryption. \fIinw\fR and \fIoutw\fR are secret +(unlike the iv) and are as such, part of the key. So the key is sort +of 24 bytes. This is much better than \s-1CBC DES.\s0 +.PP +\&\fBDES_ede3_cbc_encrypt()\fR implements outer triple \s-1CBC DES\s0 encryption with +three keys. This means that each \s-1DES\s0 operation inside the \s-1CBC\s0 mode is +\&\f(CW\*(C`C=E(ks3,D(ks2,E(ks1,M)))\*(C'\fR. This mode is used by \s-1SSL.\s0 +.PP +The \fBDES_ede2_cbc_encrypt()\fR macro implements two-key Triple-DES by +reusing \fIks1\fR for the final encryption. \f(CW\*(C`C=E(ks1,D(ks2,E(ks1,M)))\*(C'\fR. +This form of Triple-DES is used by the \s-1RSAREF\s0 library. +.PP +\&\fBDES_pcbc_encrypt()\fR encrypts/decrypts using the propagating cipher block +chaining mode used by Kerberos v4. Its parameters are the same as +\&\fBDES_ncbc_encrypt()\fR. +.PP +\&\fBDES_cfb_encrypt()\fR encrypts/decrypts using cipher feedback mode. This +method takes an array of characters as input and outputs an array of +characters. It does not require any padding to 8 character groups. +Note: the \fIivec\fR variable is changed and the new changed value needs to +be passed to the next call to this function. Since this function runs +a complete \s-1DES ECB\s0 encryption per \fInumbits\fR, this function is only +suggested for use when sending a small number of characters. +.PP +\&\fBDES_cfb64_encrypt()\fR +implements \s-1CFB\s0 mode of \s-1DES\s0 with 64\-bit feedback. Why is this +useful you ask? Because this routine will allow you to encrypt an +arbitrary number of bytes, without 8 byte padding. Each call to this +routine will encrypt the input bytes to output and then update ivec +and num. num contains 'how far' we are though ivec. If this does +not make much sense, read more about \s-1CFB\s0 mode of \s-1DES.\s0 +.PP +\&\fBDES_ede3_cfb64_encrypt()\fR and \fBDES_ede2_cfb64_encrypt()\fR is the same as +\&\fBDES_cfb64_encrypt()\fR except that Triple-DES is used. +.PP +\&\fBDES_ofb_encrypt()\fR encrypts using output feedback mode. This method +takes an array of characters as input and outputs an array of +characters. It does not require any padding to 8 character groups. +Note: the \fIivec\fR variable is changed and the new changed value needs to +be passed to the next call to this function. Since this function runs +a complete \s-1DES ECB\s0 encryption per \fInumbits\fR, this function is only +suggested for use when sending a small number of characters. +.PP +\&\fBDES_ofb64_encrypt()\fR is the same as \fBDES_cfb64_encrypt()\fR using Output +Feed Back mode. +.PP +\&\fBDES_ede3_ofb64_encrypt()\fR and \fBDES_ede2_ofb64_encrypt()\fR is the same as +\&\fBDES_ofb64_encrypt()\fR, using Triple-DES. +.PP +The following functions are included in the \s-1DES\s0 library for +compatibility with the \s-1MIT\s0 Kerberos library. +.PP +\&\fBDES_cbc_cksum()\fR produces an 8 byte checksum based on the input stream +(via \s-1CBC\s0 encryption). The last 4 bytes of the checksum are returned +and the complete 8 bytes are placed in \fIoutput\fR. This function is +used by Kerberos v4. Other applications should use +\&\fBEVP_DigestInit\fR\|(3) etc. instead. +.PP +\&\fBDES_quad_cksum()\fR is a Kerberos v4 function. It returns a 4 byte +checksum from the input bytes. The algorithm can be iterated over the +input, depending on \fIout_count\fR, 1, 2, 3 or 4 times. If \fIoutput\fR is +non-NULL, the 8 bytes generated by each pass are written into +\&\fIoutput\fR. +.PP +The following are DES-based transformations: +.PP +\&\fBDES_fcrypt()\fR is a fast version of the Unix \fBcrypt\fR\|(3) function. This +version takes only a small amount of space relative to other fast +\&\fBcrypt()\fR implementations. This is different to the normal \fBcrypt()\fR in +that the third parameter is the buffer that the return value is +written into. It needs to be at least 14 bytes long. This function +is thread safe, unlike the normal \fBcrypt()\fR. +.PP +\&\fBDES_crypt()\fR is a faster replacement for the normal system \fBcrypt()\fR. +This function calls \fBDES_fcrypt()\fR with a static array passed as the +third parameter. This mostly emulates the normal non-thread-safe semantics +of \fBcrypt\fR\|(3). +The \fBsalt\fR must be two \s-1ASCII\s0 characters. +.PP +The values returned by \fBDES_fcrypt()\fR and \fBDES_crypt()\fR are terminated by \s-1NUL\s0 +character. +.PP +\&\fBDES_enc_write()\fR writes \fIlen\fR bytes to file descriptor \fIfd\fR from +buffer \fIbuf\fR. The data is encrypted via \fIpcbc_encrypt\fR (default) +using \fIsched\fR for the key and \fIiv\fR as a starting vector. The actual +data send down \fIfd\fR consists of 4 bytes (in network byte order) +containing the length of the following encrypted data. The encrypted +data then follows, padded with random data out to a multiple of 8 +bytes. +.SH "BUGS" +.IX Header "BUGS" +\&\fBDES_cbc_encrypt()\fR does not modify \fBivec\fR; use \fBDES_ncbc_encrypt()\fR +instead. +.PP +\&\fBDES_cfb_encrypt()\fR and \fBDES_ofb_encrypt()\fR operates on input of 8 bits. +What this means is that if you set numbits to 12, and length to 2, the +first 12 bits will come from the 1st input byte and the low half of +the second input byte. The second 12 bits will have the low 8 bits +taken from the 3rd input byte and the top 4 bits taken from the 4th +input byte. The same holds for output. This function has been +implemented this way because most people will be using a multiple of 8 +and because once you get into pulling bytes input bytes apart things +get ugly! +.PP +\&\fBDES_string_to_key()\fR is available for backward compatibility with the +\&\s-1MIT\s0 library. New applications should use a cryptographic hash function. +The same applies for \fBDES_string_to_2key()\fR. +.SH "NOTES" +.IX Header "NOTES" +The \fBdes\fR library was written to be source code compatible with +the \s-1MIT\s0 Kerberos library. +.PP +Applications should use the higher level functions +\&\fBEVP_EncryptInit\fR\|(3) etc. instead of calling these +functions directly. +.PP +Single-key \s-1DES\s0 is insecure due to its short key size. \s-1ECB\s0 mode is +not suitable for most applications; see \fBdes_modes\fR\|(7). +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBDES_set_key()\fR, \fBDES_key_sched()\fR, \fBDES_set_key_checked()\fR and \fBDES_is_weak_key()\fR +return 0 on success or negative values on error. +.PP +\&\fBDES_cbc_cksum()\fR and \fBDES_quad_cksum()\fR return 4\-byte integer representing the +last 4 bytes of the checksum of the input. +.PP +\&\fBDES_fcrypt()\fR returns a pointer to the caller-provided buffer and \fBDES_crypt()\fR \- +to a static buffer on success; otherwise they return \s-1NULL.\s0 +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBdes_modes\fR\|(7), +\&\fBEVP_EncryptInit\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +The requirement that the \fBsalt\fR parameter to \fBDES_crypt()\fR and \fBDES_fcrypt()\fR +be two \s-1ASCII\s0 characters was first enforced in +OpenSSL 1.1.0. Previous versions tried to use the letter uppercase \fBA\fR +if both character were not present, and could crash when given non-ASCII +on some platforms. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DH_generate_key.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DH_generate_key.3 new file mode 100644 index 00000000..637d4a87 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DH_generate_key.3 @@ -0,0 +1,186 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "DH_GENERATE_KEY 3" +.TH DH_GENERATE_KEY 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +DH_generate_key, DH_compute_key \- perform Diffie\-Hellman key exchange +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int DH_generate_key(DH *dh); +\& +\& int DH_compute_key(unsigned char *key, BIGNUM *pub_key, DH *dh); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBDH_generate_key()\fR performs the first step of a Diffie-Hellman key +exchange by generating private and public \s-1DH\s0 values. By calling +\&\fBDH_compute_key()\fR, these are combined with the other party's public +value to compute the shared key. +.PP +\&\fBDH_generate_key()\fR expects \fBdh\fR to contain the shared parameters +\&\fBdh\->p\fR and \fBdh\->g\fR. It generates a random private \s-1DH\s0 value +unless \fBdh\->priv_key\fR is already set, and computes the +corresponding public value \fBdh\->pub_key\fR, which can then be +published. +.PP +\&\fBDH_compute_key()\fR computes the shared secret from the private \s-1DH\s0 value +in \fBdh\fR and the other party's public value in \fBpub_key\fR and stores +it in \fBkey\fR. \fBkey\fR must point to \fBDH_size(dh)\fR bytes of memory. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBDH_generate_key()\fR returns 1 on success, 0 otherwise. +.PP +\&\fBDH_compute_key()\fR returns the size of the shared secret on success, \-1 +on error. +.PP +The error codes can be obtained by \fBERR_get_error\fR\|(3). +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBDH_new\fR\|(3), \fBERR_get_error\fR\|(3), \fBRAND_bytes\fR\|(3), \fBDH_size\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DH_generate_parameters.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DH_generate_parameters.3 new file mode 100644 index 00000000..3de6f6de --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DH_generate_parameters.3 @@ -0,0 +1,263 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "DH_GENERATE_PARAMETERS 3" +.TH DH_GENERATE_PARAMETERS 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +DH_generate_parameters_ex, DH_generate_parameters, DH_check, DH_check_params, DH_check_ex, DH_check_params_ex, DH_check_pub_key_ex \&\- generate and check Diffie\-Hellman parameters +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int DH_generate_parameters_ex(DH *dh, int prime_len, int generator, BN_GENCB *cb); +\& +\& int DH_check(DH *dh, int *codes); +\& int DH_check_params(DH *dh, int *codes); +\& +\& int DH_check_ex(const DH *dh); +\& int DH_check_params_ex(const DH *dh); +\& int DH_check_pub_key_ex(const DH *dh, const BIGNUM *pub_key); +.Ve +.PP +Deprecated: +.PP +.Vb 4 +\& #if OPENSSL_API_COMPAT < 0x00908000L +\& DH *DH_generate_parameters(int prime_len, int generator, +\& void (*callback)(int, int, void *), void *cb_arg); +\& #endif +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBDH_generate_parameters_ex()\fR generates Diffie-Hellman parameters that can +be shared among a group of users, and stores them in the provided \fB\s-1DH\s0\fR +structure. The pseudo-random number generator must be +seeded before calling it. +The parameters generated by \fBDH_generate_parameters_ex()\fR should not be used in +signature schemes. +.PP +\&\fBprime_len\fR is the length in bits of the safe prime to be generated. +\&\fBgenerator\fR is a small number > 1, typically 2 or 5. +.PP +A callback function may be used to provide feedback about the progress +of the key generation. If \fBcb\fR is not \fB\s-1NULL\s0\fR, it will be +called as described in \fBBN_generate_prime\fR\|(3) while a random prime +number is generated, and when a prime has been found, \fBBN_GENCB_call(cb, 3, 0)\fR +is called. See \fBBN_generate_prime_ex\fR\|(3) for information on +the \fBBN_GENCB_call()\fR function. +.PP +\&\fBDH_generate_parameters()\fR is similar to \fBDH_generate_prime_ex()\fR but +expects an old-style callback function; see +\&\fBBN_generate_prime\fR\|(3) for information on the old-style callback. +.PP +\&\fBDH_check_params()\fR confirms that the \fBp\fR and \fBg\fR are likely enough to +be valid. +This is a lightweight check, if a more thorough check is needed, use +\&\fBDH_check()\fR. +The value of \fB*codes\fR is updated with any problems found. +If \fB*codes\fR is zero then no problems were found, otherwise the +following bits may be set: +.IP "\s-1DH_CHECK_P_NOT_PRIME\s0" 4 +.IX Item "DH_CHECK_P_NOT_PRIME" +The parameter \fBp\fR has been determined to not being an odd prime. +Note that the lack of this bit doesn't guarantee that \fBp\fR is a +prime. +.IP "\s-1DH_NOT_SUITABLE_GENERATOR\s0" 4 +.IX Item "DH_NOT_SUITABLE_GENERATOR" +The generator \fBg\fR is not suitable. +Note that the lack of this bit doesn't guarantee that \fBg\fR is +suitable, unless \fBp\fR is known to be a strong prime. +.PP +\&\fBDH_check()\fR confirms that the Diffie-Hellman parameters \fBdh\fR are valid. The +value of \fB*codes\fR is updated with any problems found. If \fB*codes\fR is zero then +no problems were found, otherwise the following bits may be set: +.IP "\s-1DH_CHECK_P_NOT_PRIME\s0" 4 +.IX Item "DH_CHECK_P_NOT_PRIME" +The parameter \fBp\fR is not prime. +.IP "\s-1DH_CHECK_P_NOT_SAFE_PRIME\s0" 4 +.IX Item "DH_CHECK_P_NOT_SAFE_PRIME" +The parameter \fBp\fR is not a safe prime and no \fBq\fR value is present. +.IP "\s-1DH_UNABLE_TO_CHECK_GENERATOR\s0" 4 +.IX Item "DH_UNABLE_TO_CHECK_GENERATOR" +The generator \fBg\fR cannot be checked for suitability. +.IP "\s-1DH_NOT_SUITABLE_GENERATOR\s0" 4 +.IX Item "DH_NOT_SUITABLE_GENERATOR" +The generator \fBg\fR is not suitable. +.IP "\s-1DH_CHECK_Q_NOT_PRIME\s0" 4 +.IX Item "DH_CHECK_Q_NOT_PRIME" +The parameter \fBq\fR is not prime. +.IP "\s-1DH_CHECK_INVALID_Q_VALUE\s0" 4 +.IX Item "DH_CHECK_INVALID_Q_VALUE" +The parameter \fBq\fR is invalid. +.IP "\s-1DH_CHECK_INVALID_J_VALUE\s0" 4 +.IX Item "DH_CHECK_INVALID_J_VALUE" +The parameter \fBj\fR is invalid. +.PP +\&\fBDH_check_ex()\fR, \fBDH_check_params()\fR and \fBDH_check_pub_key_ex()\fR are similar to +\&\fBDH_check()\fR and \fBDH_check_params()\fR respectively, but the error reasons are added +to the thread's error queue instead of provided as return values from the +function. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBDH_generate_parameters_ex()\fR, \fBDH_check()\fR and \fBDH_check_params()\fR return 1 +if the check could be performed, 0 otherwise. +.PP +\&\fBDH_generate_parameters()\fR returns a pointer to the \s-1DH\s0 structure or \s-1NULL\s0 if +the parameter generation fails. +.PP +\&\fBDH_check_ex()\fR, \fBDH_check_params()\fR and \fBDH_check_pub_key_ex()\fR return 1 if the +check is successful, 0 for failed. +.PP +The error codes can be obtained by \fBERR_get_error\fR\|(3). +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBDH_new\fR\|(3), \fBERR_get_error\fR\|(3), \fBRAND_bytes\fR\|(3), +\&\fBDH_free\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +\&\fBDH_generate_parameters()\fR was deprecated in OpenSSL 0.9.8; use +\&\fBDH_generate_parameters_ex()\fR instead. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DH_get0_pqg.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DH_get0_pqg.3 new file mode 100644 index 00000000..0a226aef --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DH_get0_pqg.3 @@ -0,0 +1,254 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "DH_GET0_PQG 3" +.TH DH_GET0_PQG 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +DH_get0_pqg, DH_set0_pqg, DH_get0_key, DH_set0_key, DH_get0_p, DH_get0_q, DH_get0_g, DH_get0_priv_key, DH_get0_pub_key, DH_clear_flags, DH_test_flags, DH_set_flags, DH_get0_engine, DH_get_length, DH_set_length \- Routines for getting and setting data in a DH object +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& void DH_get0_pqg(const DH *dh, +\& const BIGNUM **p, const BIGNUM **q, const BIGNUM **g); +\& int DH_set0_pqg(DH *dh, BIGNUM *p, BIGNUM *q, BIGNUM *g); +\& void DH_get0_key(const DH *dh, +\& const BIGNUM **pub_key, const BIGNUM **priv_key); +\& int DH_set0_key(DH *dh, BIGNUM *pub_key, BIGNUM *priv_key); +\& const BIGNUM *DH_get0_p(const DH *dh); +\& const BIGNUM *DH_get0_q(const DH *dh); +\& const BIGNUM *DH_get0_g(const DH *dh); +\& const BIGNUM *DH_get0_priv_key(const DH *dh); +\& const BIGNUM *DH_get0_pub_key(const DH *dh); +\& void DH_clear_flags(DH *dh, int flags); +\& int DH_test_flags(const DH *dh, int flags); +\& void DH_set_flags(DH *dh, int flags); +\& ENGINE *DH_get0_engine(DH *d); +\& long DH_get_length(const DH *dh); +\& int DH_set_length(DH *dh, long length); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +A \s-1DH\s0 object contains the parameters \fBp\fR, \fBq\fR and \fBg\fR. Note that the \fBq\fR +parameter is optional. It also contains a public key (\fBpub_key\fR) and +(optionally) a private key (\fBpriv_key\fR). +.PP +The \fBp\fR, \fBq\fR and \fBg\fR parameters can be obtained by calling \fBDH_get0_pqg()\fR. +If the parameters have not yet been set then \fB*p\fR, \fB*q\fR and \fB*g\fR will be set +to \s-1NULL.\s0 Otherwise they are set to pointers to their respective values. These +point directly to the internal representations of the values and therefore +should not be freed directly. +Any of the out parameters \fBp\fR, \fBq\fR, and \fBg\fR can be \s-1NULL,\s0 in which case no +value will be returned for that parameter. +.PP +The \fBp\fR, \fBq\fR and \fBg\fR values can be set by calling \fBDH_set0_pqg()\fR and passing +the new values for \fBp\fR, \fBq\fR and \fBg\fR as parameters to the function. Calling +this function transfers the memory management of the values to the \s-1DH\s0 object, +and therefore the values that have been passed in should not be freed directly +after this function has been called. The \fBq\fR parameter may be \s-1NULL.\s0 +.PP +To get the public and private key values use the \fBDH_get0_key()\fR function. A +pointer to the public key will be stored in \fB*pub_key\fR, and a pointer to the +private key will be stored in \fB*priv_key\fR. Either may be \s-1NULL\s0 if they have not +been set yet, although if the private key has been set then the public key must +be. The values point to the internal representation of the public key and +private key values. This memory should not be freed directly. +Any of the out parameters \fBpub_key\fR and \fBpriv_key\fR can be \s-1NULL,\s0 in which case +no value will be returned for that parameter. +.PP +The public and private key values can be set using \fBDH_set0_key()\fR. Either +parameter may be \s-1NULL,\s0 which means the corresponding \s-1DH\s0 field is left +untouched. As with \fBDH_set0_pqg()\fR this function transfers the memory management +of the key values to the \s-1DH\s0 object, and therefore they should not be freed +directly after this function has been called. +.PP +Any of the values \fBp\fR, \fBq\fR, \fBg\fR, \fBpriv_key\fR, and \fBpub_key\fR can also be +retrieved separately by the corresponding function \fBDH_get0_p()\fR, \fBDH_get0_q()\fR, +\&\fBDH_get0_g()\fR, \fBDH_get0_priv_key()\fR, and \fBDH_get0_pub_key()\fR, respectively. +.PP +\&\fBDH_set_flags()\fR sets the flags in the \fBflags\fR parameter on the \s-1DH\s0 object. +Multiple flags can be passed in one go (bitwise ORed together). Any flags that +are already set are left set. \fBDH_test_flags()\fR tests to see whether the flags +passed in the \fBflags\fR parameter are currently set in the \s-1DH\s0 object. Multiple +flags can be tested in one go. All flags that are currently set are returned, or +zero if none of the flags are set. \fBDH_clear_flags()\fR clears the specified flags +within the \s-1DH\s0 object. +.PP +\&\fBDH_get0_engine()\fR returns a handle to the \s-1ENGINE\s0 that has been set for this \s-1DH\s0 +object, or \s-1NULL\s0 if no such \s-1ENGINE\s0 has been set. +.PP +The \fBDH_get_length()\fR and \fBDH_set_length()\fR functions get and set the optional +length parameter associated with this \s-1DH\s0 object. If the length is non-zero then +it is used, otherwise it is ignored. The \fBlength\fR parameter indicates the +length of the secret exponent (private key) in bits. +.SH "NOTES" +.IX Header "NOTES" +Values retrieved with \fBDH_get0_key()\fR are owned by the \s-1DH\s0 object used +in the call and may therefore \fInot\fR be passed to \fBDH_set0_key()\fR. If +needed, duplicate the received value using \fBBN_dup()\fR and pass the +duplicate. The same applies to \fBDH_get0_pqg()\fR and \fBDH_set0_pqg()\fR. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBDH_set0_pqg()\fR and \fBDH_set0_key()\fR return 1 on success or 0 on failure. +.PP +\&\fBDH_get0_p()\fR, \fBDH_get0_q()\fR, \fBDH_get0_g()\fR, \fBDH_get0_priv_key()\fR, and \fBDH_get0_pub_key()\fR +return the respective value, or \s-1NULL\s0 if it is unset. +.PP +\&\fBDH_test_flags()\fR returns the current state of the flags in the \s-1DH\s0 object. +.PP +\&\fBDH_get0_engine()\fR returns the \s-1ENGINE\s0 set for the \s-1DH\s0 object or \s-1NULL\s0 if no \s-1ENGINE\s0 +has been set. +.PP +\&\fBDH_get_length()\fR returns the length of the secret exponent (private key) in bits, +or zero if no such length has been explicitly set. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBDH_new\fR\|(3), \fBDH_new\fR\|(3), \fBDH_generate_parameters\fR\|(3), \fBDH_generate_key\fR\|(3), +\&\fBDH_set_method\fR\|(3), \fBDH_size\fR\|(3), \fBDH_meth_new\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +The functions described here were added in OpenSSL 1.1.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2016\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DH_get_1024_160.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DH_get_1024_160.3 new file mode 100644 index 00000000..03513428 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DH_get_1024_160.3 @@ -0,0 +1,191 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "DH_GET_1024_160 3" +.TH DH_GET_1024_160 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +DH_get_1024_160, DH_get_2048_224, DH_get_2048_256, BN_get0_nist_prime_192, BN_get0_nist_prime_224, BN_get0_nist_prime_256, BN_get0_nist_prime_384, BN_get0_nist_prime_521, BN_get_rfc2409_prime_768, BN_get_rfc2409_prime_1024, BN_get_rfc3526_prime_1536, BN_get_rfc3526_prime_2048, BN_get_rfc3526_prime_3072, BN_get_rfc3526_prime_4096, BN_get_rfc3526_prime_6144, BN_get_rfc3526_prime_8192 \&\- Create standardized public primes or DH pairs +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 4 +\& #include +\& DH *DH_get_1024_160(void) +\& DH *DH_get_2048_224(void) +\& DH *DH_get_2048_256(void) +\& +\& const BIGNUM *BN_get0_nist_prime_192(void) +\& const BIGNUM *BN_get0_nist_prime_224(void) +\& const BIGNUM *BN_get0_nist_prime_256(void) +\& const BIGNUM *BN_get0_nist_prime_384(void) +\& const BIGNUM *BN_get0_nist_prime_521(void) +\& +\& BIGNUM *BN_get_rfc2409_prime_768(BIGNUM *bn) +\& BIGNUM *BN_get_rfc2409_prime_1024(BIGNUM *bn) +\& BIGNUM *BN_get_rfc3526_prime_1536(BIGNUM *bn) +\& BIGNUM *BN_get_rfc3526_prime_2048(BIGNUM *bn) +\& BIGNUM *BN_get_rfc3526_prime_3072(BIGNUM *bn) +\& BIGNUM *BN_get_rfc3526_prime_4096(BIGNUM *bn) +\& BIGNUM *BN_get_rfc3526_prime_6144(BIGNUM *bn) +\& BIGNUM *BN_get_rfc3526_prime_8192(BIGNUM *bn) +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBDH_get_1024_160()\fR, \fBDH_get_2048_224()\fR, and \fBDH_get_2048_256()\fR each return +a \s-1DH\s0 object for the \s-1IETF RFC 5114\s0 value. +.PP +\&\fBBN_get0_nist_prime_192()\fR, \fBBN_get0_nist_prime_224()\fR, \fBBN_get0_nist_prime_256()\fR, +\&\fBBN_get0_nist_prime_384()\fR, and \fBBN_get0_nist_prime_521()\fR functions return +a \s-1BIGNUM\s0 for the specific \s-1NIST\s0 prime curve (e.g., P\-256). +.PP +\&\fBBN_get_rfc2409_prime_768()\fR, \fBBN_get_rfc2409_prime_1024()\fR, +\&\fBBN_get_rfc3526_prime_1536()\fR, \fBBN_get_rfc3526_prime_2048()\fR, +\&\fBBN_get_rfc3526_prime_3072()\fR, \fBBN_get_rfc3526_prime_4096()\fR, +\&\fBBN_get_rfc3526_prime_6144()\fR, and \fBBN_get_rfc3526_prime_8192()\fR functions +return a \s-1BIGNUM\s0 for the specified size from \s-1IETF RFC 2409.\s0 If \fBbn\fR +is not \s-1NULL,\s0 the \s-1BIGNUM\s0 will be set into that location as well. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +Defined above. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DH_meth_new.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DH_meth_new.3 new file mode 100644 index 00000000..15172015 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DH_meth_new.3 @@ -0,0 +1,294 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "DH_METH_NEW 3" +.TH DH_METH_NEW 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +DH_meth_new, DH_meth_free, DH_meth_dup, DH_meth_get0_name, DH_meth_set1_name, DH_meth_get_flags, DH_meth_set_flags, DH_meth_get0_app_data, DH_meth_set0_app_data, DH_meth_get_generate_key, DH_meth_set_generate_key, DH_meth_get_compute_key, DH_meth_set_compute_key, DH_meth_get_bn_mod_exp, DH_meth_set_bn_mod_exp, DH_meth_get_init, DH_meth_set_init, DH_meth_get_finish, DH_meth_set_finish, DH_meth_get_generate_params, DH_meth_set_generate_params \- Routines to build up DH methods +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& DH_METHOD *DH_meth_new(const char *name, int flags); +\& +\& void DH_meth_free(DH_METHOD *dhm); +\& +\& DH_METHOD *DH_meth_dup(const DH_METHOD *dhm); +\& +\& const char *DH_meth_get0_name(const DH_METHOD *dhm); +\& int DH_meth_set1_name(DH_METHOD *dhm, const char *name); +\& +\& int DH_meth_get_flags(const DH_METHOD *dhm); +\& int DH_meth_set_flags(DH_METHOD *dhm, int flags); +\& +\& void *DH_meth_get0_app_data(const DH_METHOD *dhm); +\& int DH_meth_set0_app_data(DH_METHOD *dhm, void *app_data); +\& +\& int (*DH_meth_get_generate_key(const DH_METHOD *dhm))(DH *); +\& int DH_meth_set_generate_key(DH_METHOD *dhm, int (*generate_key)(DH *)); +\& +\& int (*DH_meth_get_compute_key(const DH_METHOD *dhm)) +\& (unsigned char *key, const BIGNUM *pub_key, DH *dh); +\& int DH_meth_set_compute_key(DH_METHOD *dhm, +\& int (*compute_key)(unsigned char *key, const BIGNUM *pub_key, DH *dh)); +\& +\& int (*DH_meth_get_bn_mod_exp(const DH_METHOD *dhm)) +\& (const DH *dh, BIGNUM *r, const BIGNUM *a, const BIGNUM *p, +\& const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx); +\& int DH_meth_set_bn_mod_exp(DH_METHOD *dhm, +\& int (*bn_mod_exp)(const DH *dh, BIGNUM *r, const BIGNUM *a, +\& const BIGNUM *p, const BIGNUM *m, BN_CTX *ctx, +\& BN_MONT_CTX *m_ctx)); +\& +\& int (*DH_meth_get_init(const DH_METHOD *dhm))(DH *); +\& int DH_meth_set_init(DH_METHOD *dhm, int (*init)(DH *)); +\& +\& int (*DH_meth_get_finish(const DH_METHOD *dhm))(DH *); +\& int DH_meth_set_finish(DH_METHOD *dhm, int (*finish)(DH *)); +\& +\& int (*DH_meth_get_generate_params(const DH_METHOD *dhm)) +\& (DH *, int, int, BN_GENCB *); +\& int DH_meth_set_generate_params(DH_METHOD *dhm, +\& int (*generate_params)(DH *, int, int, BN_GENCB *)); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fB\s-1DH_METHOD\s0\fR type is a structure used for the provision of custom \s-1DH\s0 +implementations. It provides a set of functions used by OpenSSL for the +implementation of the various \s-1DH\s0 capabilities. +.PP +\&\fBDH_meth_new()\fR creates a new \fB\s-1DH_METHOD\s0\fR structure. It should be given a +unique \fBname\fR and a set of \fBflags\fR. The \fBname\fR should be a \s-1NULL\s0 terminated +string, which will be duplicated and stored in the \fB\s-1DH_METHOD\s0\fR object. It is +the callers responsibility to free the original string. The flags will be used +during the construction of a new \fB\s-1DH\s0\fR object based on this \fB\s-1DH_METHOD\s0\fR. Any +new \fB\s-1DH\s0\fR object will have those flags set by default. +.PP +\&\fBDH_meth_dup()\fR creates a duplicate copy of the \fB\s-1DH_METHOD\s0\fR object passed as a +parameter. This might be useful for creating a new \fB\s-1DH_METHOD\s0\fR based on an +existing one, but with some differences. +.PP +\&\fBDH_meth_free()\fR destroys a \fB\s-1DH_METHOD\s0\fR structure and frees up any memory +associated with it. +.PP +\&\fBDH_meth_get0_name()\fR will return a pointer to the name of this \s-1DH_METHOD.\s0 This +is a pointer to the internal name string and so should not be freed by the +caller. \fBDH_meth_set1_name()\fR sets the name of the \s-1DH_METHOD\s0 to \fBname\fR. The +string is duplicated and the copy is stored in the \s-1DH_METHOD\s0 structure, so the +caller remains responsible for freeing the memory associated with the name. +.PP +\&\fBDH_meth_get_flags()\fR returns the current value of the flags associated with this +\&\s-1DH_METHOD.\s0 \fBDH_meth_set_flags()\fR provides the ability to set these flags. +.PP +The functions \fBDH_meth_get0_app_data()\fR and \fBDH_meth_set0_app_data()\fR provide the +ability to associate implementation specific data with the \s-1DH_METHOD.\s0 It is +the application's responsibility to free this data before the \s-1DH_METHOD\s0 is +freed via a call to \fBDH_meth_free()\fR. +.PP +\&\fBDH_meth_get_generate_key()\fR and \fBDH_meth_set_generate_key()\fR get and set the +function used for generating a new \s-1DH\s0 key pair respectively. This function will +be called in response to the application calling \fBDH_generate_key()\fR. The +parameter for the function has the same meaning as for \fBDH_generate_key()\fR. +.PP +\&\fBDH_meth_get_compute_key()\fR and \fBDH_meth_set_compute_key()\fR get and set the +function used for computing a new \s-1DH\s0 shared secret respectively. This function +will be called in response to the application calling \fBDH_compute_key()\fR. The +parameters for the function have the same meaning as for \fBDH_compute_key()\fR. +.PP +\&\fBDH_meth_get_bn_mod_exp()\fR and \fBDH_meth_set_bn_mod_exp()\fR get and set the function +used for computing the following value: +.PP +.Vb 1 +\& r = a ^ p mod m +.Ve +.PP +This function will be called by the default OpenSSL function for +\&\fBDH_generate_key()\fR. The result is stored in the \fBr\fR parameter. This function +may be \s-1NULL\s0 unless using the default generate key function, in which case it +must be present. +.PP +\&\fBDH_meth_get_init()\fR and \fBDH_meth_set_init()\fR get and set the function used +for creating a new \s-1DH\s0 instance respectively. This function will be +called in response to the application calling \fBDH_new()\fR (if the current default +\&\s-1DH_METHOD\s0 is this one) or \fBDH_new_method()\fR. The \fBDH_new()\fR and \fBDH_new_method()\fR +functions will allocate the memory for the new \s-1DH\s0 object, and a pointer to this +newly allocated structure will be passed as a parameter to the function. This +function may be \s-1NULL.\s0 +.PP +\&\fBDH_meth_get_finish()\fR and \fBDH_meth_set_finish()\fR get and set the function used +for destroying an instance of a \s-1DH\s0 object respectively. This function will be +called in response to the application calling \fBDH_free()\fR. A pointer to the \s-1DH\s0 +to be destroyed is passed as a parameter. The destroy function should be used +for \s-1DH\s0 implementation specific clean up. The memory for the \s-1DH\s0 itself should +not be freed by this function. This function may be \s-1NULL.\s0 +.PP +\&\fBDH_meth_get_generate_params()\fR and \fBDH_meth_set_generate_params()\fR get and set the +function used for generating \s-1DH\s0 parameters respectively. This function will be +called in response to the application calling \fBDH_generate_parameters_ex()\fR (or +\&\fBDH_generate_parameters()\fR). The parameters for the function have the same +meaning as for \fBDH_generate_parameters_ex()\fR. This function may be \s-1NULL.\s0 +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBDH_meth_new()\fR and \fBDH_meth_dup()\fR return the newly allocated \s-1DH_METHOD\s0 object +or \s-1NULL\s0 on failure. +.PP +\&\fBDH_meth_get0_name()\fR and \fBDH_meth_get_flags()\fR return the name and flags +associated with the \s-1DH_METHOD\s0 respectively. +.PP +All other DH_meth_get_*() functions return the appropriate function pointer +that has been set in the \s-1DH_METHOD,\s0 or \s-1NULL\s0 if no such pointer has yet been +set. +.PP +\&\fBDH_meth_set1_name()\fR and all DH_meth_set_*() functions return 1 on success or +0 on failure. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBDH_new\fR\|(3), \fBDH_new\fR\|(3), \fBDH_generate_parameters\fR\|(3), \fBDH_generate_key\fR\|(3), +\&\fBDH_set_method\fR\|(3), \fBDH_size\fR\|(3), \fBDH_get0_pqg\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +The functions described here were added in OpenSSL 1.1.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2016\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DH_new.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DH_new.3 new file mode 100644 index 00000000..f765fc81 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DH_new.3 @@ -0,0 +1,178 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "DH_NEW 3" +.TH DH_NEW 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +DH_new, DH_free \- allocate and free DH objects +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& DH* DH_new(void); +\& +\& void DH_free(DH *dh); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBDH_new()\fR allocates and initializes a \fB\s-1DH\s0\fR structure. +.PP +\&\fBDH_free()\fR frees the \fB\s-1DH\s0\fR structure and its components. The values are +erased before the memory is returned to the system. +If \fBdh\fR is \s-1NULL\s0 nothing is done. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +If the allocation fails, \fBDH_new()\fR returns \fB\s-1NULL\s0\fR and sets an error +code that can be obtained by \fBERR_get_error\fR\|(3). Otherwise it returns +a pointer to the newly allocated structure. +.PP +\&\fBDH_free()\fR returns no value. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBDH_new\fR\|(3), \fBERR_get_error\fR\|(3), +\&\fBDH_generate_parameters\fR\|(3), +\&\fBDH_generate_key\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DH_new_by_nid.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DH_new_by_nid.3 new file mode 100644 index 00000000..c993ebe4 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DH_new_by_nid.3 @@ -0,0 +1,172 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "DH_NEW_BY_NID 3" +.TH DH_NEW_BY_NID 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +DH_new_by_nid, DH_get_nid \- get or find DH named parameters +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 3 +\& #include +\& DH *DH_new_by_nid(int nid); +\& int *DH_get_nid(const DH *dh); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBDH_new_by_nid()\fR creates and returns a \s-1DH\s0 structure containing named parameters +\&\fBnid\fR. Currently \fBnid\fR must be \fBNID_ffdhe2048\fR, \fBNID_ffdhe3072\fR, +\&\fBNID_ffdhe4096\fR, \fBNID_ffdhe6144\fR or \fBNID_ffdhe8192\fR. +.PP +\&\fBDH_get_nid()\fR determines if the parameters contained in \fBdh\fR match +any named set. It returns the \s-1NID\s0 corresponding to the matching parameters or +\&\fBNID_undef\fR if there is no match. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBDH_new_by_nid()\fR returns a set of \s-1DH\s0 parameters or \fB\s-1NULL\s0\fR if an error occurred. +.PP +\&\fBDH_get_nid()\fR returns the \s-1NID\s0 of the matching set of parameters or +\&\fBNID_undef\fR if there is no match. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DH_set_method.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DH_set_method.3 new file mode 100644 index 00000000..f9f0c1f0 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DH_set_method.3 @@ -0,0 +1,219 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "DH_SET_METHOD 3" +.TH DH_SET_METHOD 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +DH_set_default_method, DH_get_default_method, DH_set_method, DH_new_method, DH_OpenSSL \- select DH method +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& void DH_set_default_method(const DH_METHOD *meth); +\& +\& const DH_METHOD *DH_get_default_method(void); +\& +\& int DH_set_method(DH *dh, const DH_METHOD *meth); +\& +\& DH *DH_new_method(ENGINE *engine); +\& +\& const DH_METHOD *DH_OpenSSL(void); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +A \fB\s-1DH_METHOD\s0\fR specifies the functions that OpenSSL uses for Diffie-Hellman +operations. By modifying the method, alternative implementations +such as hardware accelerators may be used. \s-1IMPORTANT:\s0 See the \s-1NOTES\s0 section for +important information about how these \s-1DH API\s0 functions are affected by the use +of \fB\s-1ENGINE\s0\fR \s-1API\s0 calls. +.PP +Initially, the default \s-1DH_METHOD\s0 is the OpenSSL internal implementation, as +returned by \fBDH_OpenSSL()\fR. +.PP +\&\fBDH_set_default_method()\fR makes \fBmeth\fR the default method for all \s-1DH\s0 +structures created later. +\&\fB\s-1NB\s0\fR: This is true only whilst no \s-1ENGINE\s0 has been set +as a default for \s-1DH,\s0 so this function is no longer recommended. +This function is not thread-safe and should not be called at the same time +as other OpenSSL functions. +.PP +\&\fBDH_get_default_method()\fR returns a pointer to the current default \s-1DH_METHOD.\s0 +However, the meaningfulness of this result is dependent on whether the \s-1ENGINE +API\s0 is being used, so this function is no longer recommended. +.PP +\&\fBDH_set_method()\fR selects \fBmeth\fR to perform all operations using the key \fBdh\fR. +This will replace the \s-1DH_METHOD\s0 used by the \s-1DH\s0 key and if the previous method +was supplied by an \s-1ENGINE,\s0 the handle to that \s-1ENGINE\s0 will be released during the +change. It is possible to have \s-1DH\s0 keys that only work with certain \s-1DH_METHOD\s0 +implementations (eg. from an \s-1ENGINE\s0 module that supports embedded +hardware-protected keys), and in such cases attempting to change the \s-1DH_METHOD\s0 +for the key can have unexpected results. +.PP +\&\fBDH_new_method()\fR allocates and initializes a \s-1DH\s0 structure so that \fBengine\fR will +be used for the \s-1DH\s0 operations. If \fBengine\fR is \s-1NULL,\s0 the default \s-1ENGINE\s0 for \s-1DH\s0 +operations is used, and if no default \s-1ENGINE\s0 is set, the \s-1DH_METHOD\s0 controlled by +\&\fBDH_set_default_method()\fR is used. +.PP +A new \s-1DH_METHOD\s0 object may be constructed using \fBDH_meth_new()\fR (see +\&\fBDH_meth_new\fR\|(3)). +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBDH_OpenSSL()\fR and \fBDH_get_default_method()\fR return pointers to the respective +\&\fB\s-1DH_METHOD\s0\fRs. +.PP +\&\fBDH_set_default_method()\fR returns no value. +.PP +\&\fBDH_set_method()\fR returns non-zero if the provided \fBmeth\fR was successfully set as +the method for \fBdh\fR (including unloading the \s-1ENGINE\s0 handle if the previous +method was supplied by an \s-1ENGINE\s0). +.PP +\&\fBDH_new_method()\fR returns \s-1NULL\s0 and sets an error code that can be obtained by +\&\fBERR_get_error\fR\|(3) if the allocation fails. Otherwise it +returns a pointer to the newly allocated structure. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBDH_new\fR\|(3), \fBDH_new\fR\|(3), \fBDH_meth_new\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DH_size.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DH_size.3 new file mode 100644 index 00000000..ecdc0b9a --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DH_size.3 @@ -0,0 +1,187 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "DH_SIZE 3" +.TH DH_SIZE 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +DH_size, DH_bits, DH_security_bits \- get Diffie\-Hellman prime size and security bits +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int DH_size(const DH *dh); +\& +\& int DH_bits(const DH *dh); +\& +\& int DH_security_bits(const DH *dh); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBDH_size()\fR returns the Diffie-Hellman prime size in bytes. It can be used +to determine how much memory must be allocated for the shared secret +computed by \fBDH_compute_key\fR\|(3). +.PP +\&\fBDH_bits()\fR returns the number of significant bits. +.PP +\&\fBdh\fR and \fBdh\->p\fR must not be \fB\s-1NULL\s0\fR. +.PP +\&\fBDH_security_bits()\fR returns the number of security bits of the given \fBdh\fR +key. See \fBBN_security_bits\fR\|(3). +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBDH_size()\fR returns the prime size of Diffie-Hellman in bytes. +.PP +\&\fBDH_bits()\fR returns the number of bits in the key. +.PP +\&\fBDH_security_bits()\fR returns the number of security bits. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBDH_new\fR\|(3), \fBDH_generate_key\fR\|(3), +\&\fBBN_num_bits\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +The \fBDH_bits()\fR function was added in OpenSSL 1.1.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DSA_SIG_new.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DSA_SIG_new.3 new file mode 100644 index 00000000..023b20af --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DSA_SIG_new.3 @@ -0,0 +1,189 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "DSA_SIG_NEW 3" +.TH DSA_SIG_NEW 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +DSA_SIG_get0, DSA_SIG_set0, DSA_SIG_new, DSA_SIG_free \- allocate and free DSA signature objects +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& DSA_SIG *DSA_SIG_new(void); +\& void DSA_SIG_free(DSA_SIG *a); +\& void DSA_SIG_get0(const DSA_SIG *sig, const BIGNUM **pr, const BIGNUM **ps); +\& int DSA_SIG_set0(DSA_SIG *sig, BIGNUM *r, BIGNUM *s); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBDSA_SIG_new()\fR allocates an empty \fB\s-1DSA_SIG\s0\fR structure. +.PP +\&\fBDSA_SIG_free()\fR frees the \fB\s-1DSA_SIG\s0\fR structure and its components. The +values are erased before the memory is returned to the system. +.PP +\&\fBDSA_SIG_get0()\fR returns internal pointers to the \fBr\fR and \fBs\fR values contained +in \fBsig\fR. +.PP +The \fBr\fR and \fBs\fR values can be set by calling \fBDSA_SIG_set0()\fR and passing the +new values for \fBr\fR and \fBs\fR as parameters to the function. Calling this +function transfers the memory management of the values to the \s-1DSA_SIG\s0 object, +and therefore the values that have been passed in should not be freed directly +after this function has been called. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +If the allocation fails, \fBDSA_SIG_new()\fR returns \fB\s-1NULL\s0\fR and sets an +error code that can be obtained by +\&\fBERR_get_error\fR\|(3). Otherwise it returns a pointer +to the newly allocated structure. +.PP +\&\fBDSA_SIG_free()\fR returns no value. +.PP +\&\fBDSA_SIG_set0()\fR returns 1 on success or 0 on failure. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBDSA_new\fR\|(3), \fBERR_get_error\fR\|(3), +\&\fBDSA_do_sign\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DSA_do_sign.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DSA_do_sign.3 new file mode 100644 index 00000000..b0e978c3 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DSA_do_sign.3 @@ -0,0 +1,184 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "DSA_DO_SIGN 3" +.TH DSA_DO_SIGN 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +DSA_do_sign, DSA_do_verify \- raw DSA signature operations +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& DSA_SIG *DSA_do_sign(const unsigned char *dgst, int dlen, DSA *dsa); +\& +\& int DSA_do_verify(const unsigned char *dgst, int dgst_len, +\& DSA_SIG *sig, DSA *dsa); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBDSA_do_sign()\fR computes a digital signature on the \fBlen\fR byte message +digest \fBdgst\fR using the private key \fBdsa\fR and returns it in a +newly allocated \fB\s-1DSA_SIG\s0\fR structure. +.PP +\&\fBDSA_sign_setup\fR\|(3) may be used to precompute part +of the signing operation in case signature generation is +time-critical. +.PP +\&\fBDSA_do_verify()\fR verifies that the signature \fBsig\fR matches a given +message digest \fBdgst\fR of size \fBlen\fR. \fBdsa\fR is the signer's public +key. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBDSA_do_sign()\fR returns the signature, \s-1NULL\s0 on error. \fBDSA_do_verify()\fR +returns 1 for a valid signature, 0 for an incorrect signature and \-1 +on error. The error codes can be obtained by +\&\fBERR_get_error\fR\|(3). +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBDSA_new\fR\|(3), \fBERR_get_error\fR\|(3), \fBRAND_bytes\fR\|(3), +\&\fBDSA_SIG_new\fR\|(3), +\&\fBDSA_sign\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DSA_dup_DH.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DSA_dup_DH.3 new file mode 100644 index 00000000..862a5977 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DSA_dup_DH.3 @@ -0,0 +1,172 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "DSA_DUP_DH 3" +.TH DSA_DUP_DH 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +DSA_dup_DH \- create a DH structure out of DSA structure +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& DH *DSA_dup_DH(const DSA *r); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBDSA_dup_DH()\fR duplicates \s-1DSA\s0 parameters/keys as \s-1DH\s0 parameters/keys. q +is lost during that conversion, but the resulting \s-1DH\s0 parameters +contain its length. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBDSA_dup_DH()\fR returns the new \fB\s-1DH\s0\fR structure, and \s-1NULL\s0 on error. The +error codes can be obtained by \fBERR_get_error\fR\|(3). +.SH "NOTE" +.IX Header "NOTE" +Be careful to avoid small subgroup attacks when using this. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBDH_new\fR\|(3), \fBDSA_new\fR\|(3), \fBERR_get_error\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DSA_generate_key.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DSA_generate_key.3 new file mode 100644 index 00000000..7b62ff98 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DSA_generate_key.3 @@ -0,0 +1,173 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "DSA_GENERATE_KEY 3" +.TH DSA_GENERATE_KEY 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +DSA_generate_key \- generate DSA key pair +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int DSA_generate_key(DSA *a); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBDSA_generate_key()\fR expects \fBa\fR to contain \s-1DSA\s0 parameters. It generates +a new key pair and stores it in \fBa\->pub_key\fR and \fBa\->priv_key\fR. +.PP +The random generator must be seeded prior to calling \fBDSA_generate_key()\fR. +If the automatic seeding or reseeding of the OpenSSL \s-1CSPRNG\s0 fails due to +external circumstances (see \s-1\fBRAND\s0\fR\|(7)), the operation will fail. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBDSA_generate_key()\fR returns 1 on success, 0 otherwise. +The error codes can be obtained by \fBERR_get_error\fR\|(3). +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBDSA_new\fR\|(3), \fBERR_get_error\fR\|(3), \fBRAND_bytes\fR\|(3), +\&\fBDSA_generate_parameters_ex\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DSA_generate_parameters.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DSA_generate_parameters.3 new file mode 100644 index 00000000..62466b66 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DSA_generate_parameters.3 @@ -0,0 +1,240 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "DSA_GENERATE_PARAMETERS 3" +.TH DSA_GENERATE_PARAMETERS 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +DSA_generate_parameters_ex, DSA_generate_parameters \- generate DSA parameters +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int DSA_generate_parameters_ex(DSA *dsa, int bits, +\& const unsigned char *seed, int seed_len, +\& int *counter_ret, unsigned long *h_ret, +\& BN_GENCB *cb); +.Ve +.PP +Deprecated: +.PP +.Vb 5 +\& #if OPENSSL_API_COMPAT < 0x00908000L +\& DSA *DSA_generate_parameters(int bits, unsigned char *seed, int seed_len, +\& int *counter_ret, unsigned long *h_ret, +\& void (*callback)(int, int, void *), void *cb_arg); +\& #endif +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBDSA_generate_parameters_ex()\fR generates primes p and q and a generator g +for use in the \s-1DSA\s0 and stores the result in \fBdsa\fR. +.PP +\&\fBbits\fR is the length of the prime p to be generated. +For lengths under 2048 bits, the length of q is 160 bits; for lengths +greater than or equal to 2048 bits, the length of q is set to 256 bits. +.PP +If \fBseed\fR is \s-1NULL,\s0 the primes will be generated at random. +If \fBseed_len\fR is less than the length of q, an error is returned. +.PP +\&\fBDSA_generate_parameters_ex()\fR places the iteration count in +*\fBcounter_ret\fR and a counter used for finding a generator in +*\fBh_ret\fR, unless these are \fB\s-1NULL\s0\fR. +.PP +A callback function may be used to provide feedback about the progress +of the key generation. If \fBcb\fR is not \fB\s-1NULL\s0\fR, it will be +called as shown below. For information on the \s-1BN_GENCB\s0 structure and the +BN_GENCB_call function discussed below, refer to +\&\fBBN_generate_prime\fR\|(3). +.PP +\&\fBDSA_generate_prime()\fR is similar to \fBDSA_generate_prime_ex()\fR but +expects an old-style callback function; see +\&\fBBN_generate_prime\fR\|(3) for information on the old-style callback. +.IP "\(bu" 2 +When a candidate for q is generated, \fBBN_GENCB_call(cb, 0, m++)\fR is called +(m is 0 for the first candidate). +.IP "\(bu" 2 +When a candidate for q has passed a test by trial division, +\&\fBBN_GENCB_call(cb, 1, \-1)\fR is called. +While a candidate for q is tested by Miller-Rabin primality tests, +\&\fBBN_GENCB_call(cb, 1, i)\fR is called in the outer loop +(once for each witness that confirms that the candidate may be prime); +i is the loop counter (starting at 0). +.IP "\(bu" 2 +When a prime q has been found, \fBBN_GENCB_call(cb, 2, 0)\fR and +\&\fBBN_GENCB_call(cb, 3, 0)\fR are called. +.IP "\(bu" 2 +Before a candidate for p (other than the first) is generated and tested, +\&\fBBN_GENCB_call(cb, 0, counter)\fR is called. +.IP "\(bu" 2 +When a candidate for p has passed the test by trial division, +\&\fBBN_GENCB_call(cb, 1, \-1)\fR is called. +While it is tested by the Miller-Rabin primality test, +\&\fBBN_GENCB_call(cb, 1, i)\fR is called in the outer loop +(once for each witness that confirms that the candidate may be prime). +i is the loop counter (starting at 0). +.IP "\(bu" 2 +When p has been found, \fBBN_GENCB_call(cb, 2, 1)\fR is called. +.IP "\(bu" 2 +When the generator has been found, \fBBN_GENCB_call(cb, 3, 1)\fR is called. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBDSA_generate_parameters_ex()\fR returns a 1 on success, or 0 otherwise. +The error codes can be obtained by \fBERR_get_error\fR\|(3). +.PP +\&\fBDSA_generate_parameters()\fR returns a pointer to the \s-1DSA\s0 structure or +\&\fB\s-1NULL\s0\fR if the parameter generation fails. +.SH "BUGS" +.IX Header "BUGS" +Seed lengths greater than 20 are not supported. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBDSA_new\fR\|(3), \fBERR_get_error\fR\|(3), \fBRAND_bytes\fR\|(3), +\&\fBDSA_free\fR\|(3), \fBBN_generate_prime\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +\&\fBDSA_generate_parameters()\fR was deprecated in OpenSSL 0.9.8; use +\&\fBDSA_generate_parameters_ex()\fR instead. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DSA_get0_pqg.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DSA_get0_pqg.3 new file mode 100644 index 00000000..033b873e --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DSA_get0_pqg.3 @@ -0,0 +1,239 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "DSA_GET0_PQG 3" +.TH DSA_GET0_PQG 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +DSA_get0_pqg, DSA_set0_pqg, DSA_get0_key, DSA_set0_key, DSA_get0_p, DSA_get0_q, DSA_get0_g, DSA_get0_pub_key, DSA_get0_priv_key, DSA_clear_flags, DSA_test_flags, DSA_set_flags, DSA_get0_engine \- Routines for getting and setting data in a DSA object +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& void DSA_get0_pqg(const DSA *d, +\& const BIGNUM **p, const BIGNUM **q, const BIGNUM **g); +\& int DSA_set0_pqg(DSA *d, BIGNUM *p, BIGNUM *q, BIGNUM *g); +\& void DSA_get0_key(const DSA *d, +\& const BIGNUM **pub_key, const BIGNUM **priv_key); +\& int DSA_set0_key(DSA *d, BIGNUM *pub_key, BIGNUM *priv_key); +\& const BIGNUM *DSA_get0_p(const DSA *d); +\& const BIGNUM *DSA_get0_q(const DSA *d); +\& const BIGNUM *DSA_get0_g(const DSA *d); +\& const BIGNUM *DSA_get0_pub_key(const DSA *d); +\& const BIGNUM *DSA_get0_priv_key(const DSA *d); +\& void DSA_clear_flags(DSA *d, int flags); +\& int DSA_test_flags(const DSA *d, int flags); +\& void DSA_set_flags(DSA *d, int flags); +\& ENGINE *DSA_get0_engine(DSA *d); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +A \s-1DSA\s0 object contains the parameters \fBp\fR, \fBq\fR and \fBg\fR. It also contains a +public key (\fBpub_key\fR) and (optionally) a private key (\fBpriv_key\fR). +.PP +The \fBp\fR, \fBq\fR and \fBg\fR parameters can be obtained by calling \fBDSA_get0_pqg()\fR. +If the parameters have not yet been set then \fB*p\fR, \fB*q\fR and \fB*g\fR will be set +to \s-1NULL.\s0 Otherwise they are set to pointers to their respective values. These +point directly to the internal representations of the values and therefore +should not be freed directly. +.PP +The \fBp\fR, \fBq\fR and \fBg\fR values can be set by calling \fBDSA_set0_pqg()\fR and passing +the new values for \fBp\fR, \fBq\fR and \fBg\fR as parameters to the function. Calling +this function transfers the memory management of the values to the \s-1DSA\s0 object, +and therefore the values that have been passed in should not be freed directly +after this function has been called. +.PP +To get the public and private key values use the \fBDSA_get0_key()\fR function. A +pointer to the public key will be stored in \fB*pub_key\fR, and a pointer to the +private key will be stored in \fB*priv_key\fR. Either may be \s-1NULL\s0 if they have not +been set yet, although if the private key has been set then the public key must +be. The values point to the internal representation of the public key and +private key values. This memory should not be freed directly. +.PP +The public and private key values can be set using \fBDSA_set0_key()\fR. The public +key must be non-NULL the first time this function is called on a given \s-1DSA\s0 +object. The private key may be \s-1NULL.\s0 On subsequent calls, either may be \s-1NULL,\s0 +which means the corresponding \s-1DSA\s0 field is left untouched. As for \fBDSA_set0_pqg()\fR +this function transfers the memory management of the key values to the \s-1DSA\s0 +object, and therefore they should not be freed directly after this function has +been called. +.PP +Any of the values \fBp\fR, \fBq\fR, \fBg\fR, \fBpriv_key\fR, and \fBpub_key\fR can also be +retrieved separately by the corresponding function \fBDSA_get0_p()\fR, \fBDSA_get0_q()\fR, +\&\fBDSA_get0_g()\fR, \fBDSA_get0_priv_key()\fR, and \fBDSA_get0_pub_key()\fR, respectively. +.PP +\&\fBDSA_set_flags()\fR sets the flags in the \fBflags\fR parameter on the \s-1DSA\s0 object. +Multiple flags can be passed in one go (bitwise ORed together). Any flags that +are already set are left set. \fBDSA_test_flags()\fR tests to see whether the flags +passed in the \fBflags\fR parameter are currently set in the \s-1DSA\s0 object. Multiple +flags can be tested in one go. All flags that are currently set are returned, or +zero if none of the flags are set. \fBDSA_clear_flags()\fR clears the specified flags +within the \s-1DSA\s0 object. +.PP +\&\fBDSA_get0_engine()\fR returns a handle to the \s-1ENGINE\s0 that has been set for this \s-1DSA\s0 +object, or \s-1NULL\s0 if no such \s-1ENGINE\s0 has been set. +.SH "NOTES" +.IX Header "NOTES" +Values retrieved with \fBDSA_get0_key()\fR are owned by the \s-1DSA\s0 object used +in the call and may therefore \fInot\fR be passed to \fBDSA_set0_key()\fR. If +needed, duplicate the received value using \fBBN_dup()\fR and pass the +duplicate. The same applies to \fBDSA_get0_pqg()\fR and \fBDSA_set0_pqg()\fR. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBDSA_set0_pqg()\fR and \fBDSA_set0_key()\fR return 1 on success or 0 on failure. +.PP +\&\fBDSA_test_flags()\fR returns the current state of the flags in the \s-1DSA\s0 object. +.PP +\&\fBDSA_get0_engine()\fR returns the \s-1ENGINE\s0 set for the \s-1DSA\s0 object or \s-1NULL\s0 if no \s-1ENGINE\s0 +has been set. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBDSA_new\fR\|(3), \fBDSA_new\fR\|(3), \fBDSA_generate_parameters\fR\|(3), \fBDSA_generate_key\fR\|(3), +\&\fBDSA_dup_DH\fR\|(3), \fBDSA_do_sign\fR\|(3), \fBDSA_set_method\fR\|(3), \fBDSA_SIG_new\fR\|(3), +\&\fBDSA_sign\fR\|(3), \fBDSA_size\fR\|(3), \fBDSA_meth_new\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +The functions described here were added in OpenSSL 1.1.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2016\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DSA_meth_new.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DSA_meth_new.3 new file mode 100644 index 00000000..aca06aeb --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DSA_meth_new.3 @@ -0,0 +1,342 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "DSA_METH_NEW 3" +.TH DSA_METH_NEW 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +DSA_meth_new, DSA_meth_free, DSA_meth_dup, DSA_meth_get0_name, DSA_meth_set1_name, DSA_meth_get_flags, DSA_meth_set_flags, DSA_meth_get0_app_data, DSA_meth_set0_app_data, DSA_meth_get_sign, DSA_meth_set_sign, DSA_meth_get_sign_setup, DSA_meth_set_sign_setup, DSA_meth_get_verify, DSA_meth_set_verify, DSA_meth_get_mod_exp, DSA_meth_set_mod_exp, DSA_meth_get_bn_mod_exp, DSA_meth_set_bn_mod_exp, DSA_meth_get_init, DSA_meth_set_init, DSA_meth_get_finish, DSA_meth_set_finish, DSA_meth_get_paramgen, DSA_meth_set_paramgen, DSA_meth_get_keygen, DSA_meth_set_keygen \- Routines to build up DSA methods +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& DSA_METHOD *DSA_meth_new(const char *name, int flags); +\& +\& void DSA_meth_free(DSA_METHOD *dsam); +\& +\& DSA_METHOD *DSA_meth_dup(const DSA_METHOD *meth); +\& +\& const char *DSA_meth_get0_name(const DSA_METHOD *dsam); +\& int DSA_meth_set1_name(DSA_METHOD *dsam, const char *name); +\& +\& int DSA_meth_get_flags(const DSA_METHOD *dsam); +\& int DSA_meth_set_flags(DSA_METHOD *dsam, int flags); +\& +\& void *DSA_meth_get0_app_data(const DSA_METHOD *dsam); +\& int DSA_meth_set0_app_data(DSA_METHOD *dsam, void *app_data); +\& +\& DSA_SIG *(*DSA_meth_get_sign(const DSA_METHOD *dsam))(const unsigned char *, +\& int, DSA *); +\& int DSA_meth_set_sign(DSA_METHOD *dsam, DSA_SIG *(*sign)(const unsigned char *, +\& int, DSA *)); +\& +\& int (*DSA_meth_get_sign_setup(const DSA_METHOD *dsam))(DSA *, BN_CTX *,$ +\& BIGNUM **, BIGNUM **); +\& int DSA_meth_set_sign_setup(DSA_METHOD *dsam, int (*sign_setup)(DSA *, BN_CTX *, +\& BIGNUM **, BIGNUM **)); +\& +\& int (*DSA_meth_get_verify(const DSA_METHOD *dsam))(const unsigned char *, +\& int, DSA_SIG *, DSA *); +\& int DSA_meth_set_verify(DSA_METHOD *dsam, int (*verify)(const unsigned char *, +\& int, DSA_SIG *, DSA *)); +\& +\& int (*DSA_meth_get_mod_exp(const DSA_METHOD *dsam))(DSA *dsa, BIGNUM *rr, BIGNUM *a1, +\& BIGNUM *p1, BIGNUM *a2, BIGNUM *p2, +\& BIGNUM *m, BN_CTX *ctx, +\& BN_MONT_CTX *in_mont); +\& int DSA_meth_set_mod_exp(DSA_METHOD *dsam, int (*mod_exp)(DSA *dsa, BIGNUM *rr, +\& BIGNUM *a1, BIGNUM *p1, +\& BIGNUM *a2, BIGNUM *p2, +\& BIGNUM *m, BN_CTX *ctx, +\& BN_MONT_CTX *mont)); +\& +\& int (*DSA_meth_get_bn_mod_exp(const DSA_METHOD *dsam))(DSA *dsa, BIGNUM *r, BIGNUM *a, +\& const BIGNUM *p, const BIGNUM *m, +\& BN_CTX *ctx, BN_MONT_CTX *mont); +\& int DSA_meth_set_bn_mod_exp(DSA_METHOD *dsam, int (*bn_mod_exp)(DSA *dsa, +\& BIGNUM *r, +\& BIGNUM *a, +\& const BIGNUM *p, +\& const BIGNUM *m, +\& BN_CTX *ctx, +\& BN_MONT_CTX *mont)); +\& +\& int (*DSA_meth_get_init(const DSA_METHOD *dsam))(DSA *); +\& int DSA_meth_set_init(DSA_METHOD *dsam, int (*init)(DSA *)); +\& +\& int (*DSA_meth_get_finish(const DSA_METHOD *dsam))(DSA *); +\& int DSA_meth_set_finish(DSA_METHOD *dsam, int (*finish)(DSA *)); +\& +\& int (*DSA_meth_get_paramgen(const DSA_METHOD *dsam))(DSA *, int, +\& const unsigned char *, +\& int, int *, unsigned long *, +\& BN_GENCB *); +\& int DSA_meth_set_paramgen(DSA_METHOD *dsam, +\& int (*paramgen)(DSA *, int, const unsigned char *, +\& int, int *, unsigned long *, BN_GENCB *)); +\& +\& int (*DSA_meth_get_keygen(const DSA_METHOD *dsam))(DSA *); +\& int DSA_meth_set_keygen(DSA_METHOD *dsam, int (*keygen)(DSA *)); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fB\s-1DSA_METHOD\s0\fR type is a structure used for the provision of custom \s-1DSA\s0 +implementations. It provides a set of functions used by OpenSSL for the +implementation of the various \s-1DSA\s0 capabilities. See the dsa page for more +information. +.PP +\&\fBDSA_meth_new()\fR creates a new \fB\s-1DSA_METHOD\s0\fR structure. It should be given a +unique \fBname\fR and a set of \fBflags\fR. The \fBname\fR should be a \s-1NULL\s0 terminated +string, which will be duplicated and stored in the \fB\s-1DSA_METHOD\s0\fR object. It is +the callers responsibility to free the original string. The flags will be used +during the construction of a new \fB\s-1DSA\s0\fR object based on this \fB\s-1DSA_METHOD\s0\fR. Any +new \fB\s-1DSA\s0\fR object will have those flags set by default. +.PP +\&\fBDSA_meth_dup()\fR creates a duplicate copy of the \fB\s-1DSA_METHOD\s0\fR object passed as a +parameter. This might be useful for creating a new \fB\s-1DSA_METHOD\s0\fR based on an +existing one, but with some differences. +.PP +\&\fBDSA_meth_free()\fR destroys a \fB\s-1DSA_METHOD\s0\fR structure and frees up any memory +associated with it. +.PP +\&\fBDSA_meth_get0_name()\fR will return a pointer to the name of this \s-1DSA_METHOD.\s0 This +is a pointer to the internal name string and so should not be freed by the +caller. \fBDSA_meth_set1_name()\fR sets the name of the \s-1DSA_METHOD\s0 to \fBname\fR. The +string is duplicated and the copy is stored in the \s-1DSA_METHOD\s0 structure, so the +caller remains responsible for freeing the memory associated with the name. +.PP +\&\fBDSA_meth_get_flags()\fR returns the current value of the flags associated with this +\&\s-1DSA_METHOD.\s0 \fBDSA_meth_set_flags()\fR provides the ability to set these flags. +.PP +The functions \fBDSA_meth_get0_app_data()\fR and \fBDSA_meth_set0_app_data()\fR provide the +ability to associate implementation specific data with the \s-1DSA_METHOD.\s0 It is +the application's responsibility to free this data before the \s-1DSA_METHOD\s0 is +freed via a call to \fBDSA_meth_free()\fR. +.PP +\&\fBDSA_meth_get_sign()\fR and \fBDSA_meth_set_sign()\fR get and set the function used for +creating a \s-1DSA\s0 signature respectively. This function will be +called in response to the application calling \fBDSA_do_sign()\fR (or \fBDSA_sign()\fR). The +parameters for the function have the same meaning as for \fBDSA_do_sign()\fR. +.PP +\&\fBDSA_meth_get_sign_setup()\fR and \fBDSA_meth_set_sign_setup()\fR get and set the function +used for precalculating the \s-1DSA\s0 signature values \fBk^\-1\fR and \fBr\fR. This function +will be called in response to the application calling \fBDSA_sign_setup()\fR. The +parameters for the function have the same meaning as for \fBDSA_sign_setup()\fR. +.PP +\&\fBDSA_meth_get_verify()\fR and \fBDSA_meth_set_verify()\fR get and set the function used +for verifying a \s-1DSA\s0 signature respectively. This function will be called in +response to the application calling \fBDSA_do_verify()\fR (or \fBDSA_verify()\fR). The +parameters for the function have the same meaning as for \fBDSA_do_verify()\fR. +.PP +\&\fBDSA_meth_get_mod_exp()\fR and \fBDSA_meth_set_mod_exp()\fR get and set the function used +for computing the following value: +.PP +.Vb 1 +\& rr = a1^p1 * a2^p2 mod m +.Ve +.PP +This function will be called by the default OpenSSL method during verification +of a \s-1DSA\s0 signature. The result is stored in the \fBrr\fR parameter. This function +may be \s-1NULL.\s0 +.PP +\&\fBDSA_meth_get_bn_mod_exp()\fR and \fBDSA_meth_set_bn_mod_exp()\fR get and set the function +used for computing the following value: +.PP +.Vb 1 +\& r = a ^ p mod m +.Ve +.PP +This function will be called by the default OpenSSL function for +\&\fBDSA_sign_setup()\fR. The result is stored in the \fBr\fR parameter. This function +may be \s-1NULL.\s0 +.PP +\&\fBDSA_meth_get_init()\fR and \fBDSA_meth_set_init()\fR get and set the function used +for creating a new \s-1DSA\s0 instance respectively. This function will be +called in response to the application calling \fBDSA_new()\fR (if the current default +\&\s-1DSA_METHOD\s0 is this one) or \fBDSA_new_method()\fR. The \fBDSA_new()\fR and \fBDSA_new_method()\fR +functions will allocate the memory for the new \s-1DSA\s0 object, and a pointer to this +newly allocated structure will be passed as a parameter to the function. This +function may be \s-1NULL.\s0 +.PP +\&\fBDSA_meth_get_finish()\fR and \fBDSA_meth_set_finish()\fR get and set the function used +for destroying an instance of a \s-1DSA\s0 object respectively. This function will be +called in response to the application calling \fBDSA_free()\fR. A pointer to the \s-1DSA\s0 +to be destroyed is passed as a parameter. The destroy function should be used +for \s-1DSA\s0 implementation specific clean up. The memory for the \s-1DSA\s0 itself should +not be freed by this function. This function may be \s-1NULL.\s0 +.PP +\&\fBDSA_meth_get_paramgen()\fR and \fBDSA_meth_set_paramgen()\fR get and set the function +used for generating \s-1DSA\s0 parameters respectively. This function will be called in +response to the application calling \fBDSA_generate_parameters_ex()\fR (or +\&\fBDSA_generate_parameters()\fR). The parameters for the function have the same +meaning as for \fBDSA_generate_parameters_ex()\fR. +.PP +\&\fBDSA_meth_get_keygen()\fR and \fBDSA_meth_set_keygen()\fR get and set the function +used for generating a new \s-1DSA\s0 key pair respectively. This function will be +called in response to the application calling \fBDSA_generate_key()\fR. The parameter +for the function has the same meaning as for \fBDSA_generate_key()\fR. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBDSA_meth_new()\fR and \fBDSA_meth_dup()\fR return the newly allocated \s-1DSA_METHOD\s0 object +or \s-1NULL\s0 on failure. +.PP +\&\fBDSA_meth_get0_name()\fR and \fBDSA_meth_get_flags()\fR return the name and flags +associated with the \s-1DSA_METHOD\s0 respectively. +.PP +All other DSA_meth_get_*() functions return the appropriate function pointer +that has been set in the \s-1DSA_METHOD,\s0 or \s-1NULL\s0 if no such pointer has yet been +set. +.PP +\&\fBDSA_meth_set1_name()\fR and all DSA_meth_set_*() functions return 1 on success or +0 on failure. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBDSA_new\fR\|(3), \fBDSA_new\fR\|(3), \fBDSA_generate_parameters\fR\|(3), \fBDSA_generate_key\fR\|(3), +\&\fBDSA_dup_DH\fR\|(3), \fBDSA_do_sign\fR\|(3), \fBDSA_set_method\fR\|(3), \fBDSA_SIG_new\fR\|(3), +\&\fBDSA_sign\fR\|(3), \fBDSA_size\fR\|(3), \fBDSA_get0_pqg\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +The functions described here were added in OpenSSL 1.1.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2016\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DSA_new.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DSA_new.3 new file mode 100644 index 00000000..6043d3b1 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DSA_new.3 @@ -0,0 +1,180 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "DSA_NEW 3" +.TH DSA_NEW 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +DSA_new, DSA_free \- allocate and free DSA objects +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& DSA* DSA_new(void); +\& +\& void DSA_free(DSA *dsa); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBDSA_new()\fR allocates and initializes a \fB\s-1DSA\s0\fR structure. It is equivalent to +calling DSA_new_method(\s-1NULL\s0). +.PP +\&\fBDSA_free()\fR frees the \fB\s-1DSA\s0\fR structure and its components. The values are +erased before the memory is returned to the system. +If \fBdsa\fR is \s-1NULL\s0 nothing is done. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +If the allocation fails, \fBDSA_new()\fR returns \fB\s-1NULL\s0\fR and sets an error +code that can be obtained by +\&\fBERR_get_error\fR\|(3). Otherwise it returns a pointer +to the newly allocated structure. +.PP +\&\fBDSA_free()\fR returns no value. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBDSA_new\fR\|(3), \fBERR_get_error\fR\|(3), +\&\fBDSA_generate_parameters\fR\|(3), +\&\fBDSA_generate_key\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DSA_set_method.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DSA_set_method.3 new file mode 100644 index 00000000..3aa3b047 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DSA_set_method.3 @@ -0,0 +1,219 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "DSA_SET_METHOD 3" +.TH DSA_SET_METHOD 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +DSA_set_default_method, DSA_get_default_method, DSA_set_method, DSA_new_method, DSA_OpenSSL \- select DSA method +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& void DSA_set_default_method(const DSA_METHOD *meth); +\& +\& const DSA_METHOD *DSA_get_default_method(void); +\& +\& int DSA_set_method(DSA *dsa, const DSA_METHOD *meth); +\& +\& DSA *DSA_new_method(ENGINE *engine); +\& +\& DSA_METHOD *DSA_OpenSSL(void); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +A \fB\s-1DSA_METHOD\s0\fR specifies the functions that OpenSSL uses for \s-1DSA\s0 +operations. By modifying the method, alternative implementations +such as hardware accelerators may be used. \s-1IMPORTANT:\s0 See the \s-1NOTES\s0 section for +important information about how these \s-1DSA API\s0 functions are affected by the use +of \fB\s-1ENGINE\s0\fR \s-1API\s0 calls. +.PP +Initially, the default \s-1DSA_METHOD\s0 is the OpenSSL internal implementation, +as returned by \fBDSA_OpenSSL()\fR. +.PP +\&\fBDSA_set_default_method()\fR makes \fBmeth\fR the default method for all \s-1DSA\s0 +structures created later. +\&\fB\s-1NB\s0\fR: This is true only whilst no \s-1ENGINE\s0 has +been set as a default for \s-1DSA,\s0 so this function is no longer recommended. +This function is not thread-safe and should not be called at the same time +as other OpenSSL functions. +.PP +\&\fBDSA_get_default_method()\fR returns a pointer to the current default +\&\s-1DSA_METHOD.\s0 However, the meaningfulness of this result is dependent on +whether the \s-1ENGINE API\s0 is being used, so this function is no longer +recommended. +.PP +\&\fBDSA_set_method()\fR selects \fBmeth\fR to perform all operations using the key +\&\fBrsa\fR. This will replace the \s-1DSA_METHOD\s0 used by the \s-1DSA\s0 key and if the +previous method was supplied by an \s-1ENGINE,\s0 the handle to that \s-1ENGINE\s0 will +be released during the change. It is possible to have \s-1DSA\s0 keys that only +work with certain \s-1DSA_METHOD\s0 implementations (eg. from an \s-1ENGINE\s0 module +that supports embedded hardware-protected keys), and in such cases +attempting to change the \s-1DSA_METHOD\s0 for the key can have unexpected +results. See DSA_meth_new for information on constructing custom \s-1DSA_METHOD\s0 +objects; +.PP +\&\fBDSA_new_method()\fR allocates and initializes a \s-1DSA\s0 structure so that \fBengine\fR +will be used for the \s-1DSA\s0 operations. If \fBengine\fR is \s-1NULL,\s0 the default engine +for \s-1DSA\s0 operations is used, and if no default \s-1ENGINE\s0 is set, the \s-1DSA_METHOD\s0 +controlled by \fBDSA_set_default_method()\fR is used. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBDSA_OpenSSL()\fR and \fBDSA_get_default_method()\fR return pointers to the respective +\&\fB\s-1DSA_METHOD\s0\fRs. +.PP +\&\fBDSA_set_default_method()\fR returns no value. +.PP +\&\fBDSA_set_method()\fR returns non-zero if the provided \fBmeth\fR was successfully set as +the method for \fBdsa\fR (including unloading the \s-1ENGINE\s0 handle if the previous +method was supplied by an \s-1ENGINE\s0). +.PP +\&\fBDSA_new_method()\fR returns \s-1NULL\s0 and sets an error code that can be +obtained by \fBERR_get_error\fR\|(3) if the allocation +fails. Otherwise it returns a pointer to the newly allocated structure. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBDSA_new\fR\|(3), \fBDSA_new\fR\|(3), \fBDSA_meth_new\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DSA_sign.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DSA_sign.3 new file mode 100644 index 00000000..2d6df2d4 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DSA_sign.3 @@ -0,0 +1,202 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "DSA_SIGN 3" +.TH DSA_SIGN 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +DSA_sign, DSA_sign_setup, DSA_verify \- DSA signatures +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int DSA_sign(int type, const unsigned char *dgst, int len, +\& unsigned char *sigret, unsigned int *siglen, DSA *dsa); +\& +\& int DSA_sign_setup(DSA *dsa, BN_CTX *ctx, BIGNUM **kinvp, BIGNUM **rp); +\& +\& int DSA_verify(int type, const unsigned char *dgst, int len, +\& unsigned char *sigbuf, int siglen, DSA *dsa); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBDSA_sign()\fR computes a digital signature on the \fBlen\fR byte message +digest \fBdgst\fR using the private key \fBdsa\fR and places its \s-1ASN.1 DER\s0 +encoding at \fBsigret\fR. The length of the signature is places in +*\fBsiglen\fR. \fBsigret\fR must point to DSA_size(\fBdsa\fR) bytes of memory. +.PP +\&\fBDSA_sign_setup()\fR is defined only for backward binary compatibility and +should not be used. +Since OpenSSL 1.1.0 the \s-1DSA\s0 type is opaque and the output of +\&\fBDSA_sign_setup()\fR cannot be used anyway: calling this function will only +cause overhead, and does not affect the actual signature +(pre\-)computation. +.PP +\&\fBDSA_verify()\fR verifies that the signature \fBsigbuf\fR of size \fBsiglen\fR +matches a given message digest \fBdgst\fR of size \fBlen\fR. +\&\fBdsa\fR is the signer's public key. +.PP +The \fBtype\fR parameter is ignored. +.PP +The random generator must be seeded when \fBDSA_sign()\fR (or \fBDSA_sign_setup()\fR) +is called. +If the automatic seeding or reseeding of the OpenSSL \s-1CSPRNG\s0 fails due to +external circumstances (see \s-1\fBRAND\s0\fR\|(7)), the operation will fail. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBDSA_sign()\fR and \fBDSA_sign_setup()\fR return 1 on success, 0 on error. +\&\fBDSA_verify()\fR returns 1 for a valid signature, 0 for an incorrect +signature and \-1 on error. The error codes can be obtained by +\&\fBERR_get_error\fR\|(3). +.SH "CONFORMING TO" +.IX Header "CONFORMING TO" +\&\s-1US\s0 Federal Information Processing Standard \s-1FIPS 186\s0 (Digital Signature +Standard, \s-1DSS\s0), \s-1ANSI X9.30\s0 +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBDSA_new\fR\|(3), \fBERR_get_error\fR\|(3), \fBRAND_bytes\fR\|(3), +\&\fBDSA_do_sign\fR\|(3), +\&\s-1\fBRAND\s0\fR\|(7) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DSA_size.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DSA_size.3 new file mode 100644 index 00000000..f678c6c5 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DSA_size.3 @@ -0,0 +1,180 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "DSA_SIZE 3" +.TH DSA_SIZE 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +DSA_size, DSA_bits, DSA_security_bits \- get DSA signature size, key bits or security bits +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int DSA_size(const DSA *dsa); +\& int DSA_bits(const DSA *dsa); +\& int DSA_security_bits(const DSA *dsa); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBDSA_size()\fR returns the maximum size of an \s-1ASN.1\s0 encoded \s-1DSA\s0 signature +for key \fBdsa\fR in bytes. It can be used to determine how much memory must +be allocated for a \s-1DSA\s0 signature. +.PP +\&\fBdsa\->q\fR must not be \fB\s-1NULL\s0\fR. +.PP +\&\fBDSA_bits()\fR returns the number of bits in key \fBdsa\fR: this is the number +of bits in the \fBp\fR parameter. +.PP +\&\fBDSA_security_bits()\fR returns the number of security bits of the given \fBdsa\fR +key. See \fBBN_security_bits\fR\|(3). +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBDSA_size()\fR returns the signature size in bytes. +.PP +\&\fBDSA_bits()\fR returns the number of bits in the key. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBDSA_new\fR\|(3), \fBDSA_sign\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DTLS_get_data_mtu.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DTLS_get_data_mtu.3 new file mode 100644 index 00000000..c26592e0 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DTLS_get_data_mtu.3 @@ -0,0 +1,168 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "DTLS_GET_DATA_MTU 3" +.TH DTLS_GET_DATA_MTU 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +DTLS_get_data_mtu \- Get maximum data payload size +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& size_t DTLS_get_data_mtu(const SSL *ssl); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +This function obtains the maximum data payload size for the established +\&\s-1DTLS\s0 connection \fBssl\fR, based on the \s-1DTLS\s0 record \s-1MTU\s0 and the overhead +of the \s-1DTLS\s0 record header, encryption and authentication currently in use. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +Returns the maximum data payload size on success, or 0 on failure. +.SH "HISTORY" +.IX Header "HISTORY" +The \fBDTLS_get_data_mtu()\fR function was added in OpenSSL 1.1.1. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DTLS_set_timer_cb.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DTLS_set_timer_cb.3 new file mode 100644 index 00000000..bc03d54d --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DTLS_set_timer_cb.3 @@ -0,0 +1,170 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "DTLS_SET_TIMER_CB 3" +.TH DTLS_SET_TIMER_CB 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +DTLS_timer_cb, DTLS_set_timer_cb \&\- Set callback for controlling DTLS timer duration +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& typedef unsigned int (*DTLS_timer_cb)(SSL *s, unsigned int timer_us); +\& +\& void DTLS_set_timer_cb(SSL *s, DTLS_timer_cb cb); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +This function sets an optional callback function for controlling the +timeout interval on the \s-1DTLS\s0 protocol. The callback function will be +called by \s-1DTLS\s0 for every new \s-1DTLS\s0 packet that is sent. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +Returns void. +.SH "HISTORY" +.IX Header "HISTORY" +The \fBDTLS_set_timer_cb()\fR function was added in OpenSSL 1.1.1. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DTLSv1_listen.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DTLSv1_listen.3 new file mode 100644 index 00000000..00e9bb2f --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/DTLSv1_listen.3 @@ -0,0 +1,264 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "DTLSV1_LISTEN 3" +.TH DTLSV1_LISTEN 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_stateless, DTLSv1_listen \&\- Statelessly listen for incoming connections +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int SSL_stateless(SSL *s); +\& int DTLSv1_listen(SSL *ssl, BIO_ADDR *peer); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_stateless()\fR statelessly listens for new incoming TLSv1.3 connections. +\&\fBDTLSv1_listen()\fR statelessly listens for new incoming \s-1DTLS\s0 connections. If a +ClientHello is received that does not contain a cookie, then they respond with a +request for a new ClientHello that does contain a cookie. If a ClientHello is +received with a cookie that is verified then the function returns in order to +enable the handshake to be completed (for example by using \fBSSL_accept()\fR). +.SH "NOTES" +.IX Header "NOTES" +Some transport protocols (such as \s-1UDP\s0) can be susceptible to amplification +attacks. Unlike \s-1TCP\s0 there is no initial connection setup in \s-1UDP\s0 that +validates that the client can actually receive messages on its advertised source +address. An attacker could forge its source \s-1IP\s0 address and then send handshake +initiation messages to the server. The server would then send its response to +the forged source \s-1IP.\s0 If the response messages are larger than the original +message then the amplification attack has succeeded. +.PP +If \s-1DTLS\s0 is used over \s-1UDP\s0 (or any datagram based protocol that does not validate +the source \s-1IP\s0) then it is susceptible to this type of attack. TLSv1.3 is +designed to operate over a stream-based transport protocol (such as \s-1TCP\s0). +If \s-1TCP\s0 is being used then there is no need to use \fBSSL_stateless()\fR. However some +stream-based transport protocols (e.g. \s-1QUIC\s0) may not validate the source +address. In this case a TLSv1.3 application would be susceptible to this attack. +.PP +As a countermeasure to this issue TLSv1.3 and \s-1DTLS\s0 include a stateless cookie +mechanism. The idea is that when a client attempts to connect to a server it +sends a ClientHello message. The server responds with a HelloRetryRequest (in +TLSv1.3) or a HelloVerifyRequest (in \s-1DTLS\s0) which contains a unique cookie. The +client then resends the ClientHello, but this time includes the cookie in the +message thus proving that the client is capable of receiving messages sent to +that address. All of this can be done by the server without allocating any +state, and thus without consuming expensive resources. +.PP +OpenSSL implements this capability via the \fBSSL_stateless()\fR and \fBDTLSv1_listen()\fR +functions. The \fBssl\fR parameter should be a newly allocated \s-1SSL\s0 object with its +read and write BIOs set, in the same way as might be done for a call to +\&\fBSSL_accept()\fR. Typically, for \s-1DTLS,\s0 the read \s-1BIO\s0 will be in an \*(L"unconnected\*(R" +state and thus capable of receiving messages from any peer. +.PP +When a ClientHello is received that contains a cookie that has been verified, +then these functions will return with the \fBssl\fR parameter updated into a state +where the handshake can be continued by a call to (for example) \fBSSL_accept()\fR. +Additionally, for \fBDTLSv1_listen()\fR, the \fB\s-1BIO_ADDR\s0\fR pointed to by \fBpeer\fR will be +filled in with details of the peer that sent the ClientHello. If the underlying +\&\s-1BIO\s0 is unable to obtain the \fB\s-1BIO_ADDR\s0\fR of the peer (for example because the \s-1BIO\s0 +does not support this), then \fB*peer\fR will be cleared and the family set to +\&\s-1AF_UNSPEC.\s0 Typically user code is expected to \*(L"connect\*(R" the underlying socket to +the peer and continue the handshake in a connected state. +.PP +Prior to calling \fBDTLSv1_listen()\fR user code must ensure that cookie generation +and verification callbacks have been set up using +\&\fBSSL_CTX_set_cookie_generate_cb\fR\|(3) and \fBSSL_CTX_set_cookie_verify_cb\fR\|(3) +respectively. For \fBSSL_stateless()\fR, \fBSSL_CTX_set_stateless_cookie_generate_cb\fR\|(3) +and \fBSSL_CTX_set_stateless_cookie_verify_cb\fR\|(3) must be used instead. +.PP +Since \fBDTLSv1_listen()\fR operates entirely statelessly whilst processing incoming +ClientHellos it is unable to process fragmented messages (since this would +require the allocation of state). An implication of this is that \fBDTLSv1_listen()\fR +\&\fBonly\fR supports ClientHellos that fit inside a single datagram. +.PP +For \fBSSL_stateless()\fR if an entire ClientHello message cannot be read without the +\&\*(L"read\*(R" \s-1BIO\s0 becoming empty then the \fBSSL_stateless()\fR call will fail. It is the +application's responsibility to ensure that data read from the \*(L"read\*(R" \s-1BIO\s0 during +a single \fBSSL_stateless()\fR call is all from the same peer. +.PP +\&\fBSSL_stateless()\fR will fail (with a 0 return value) if some \s-1TLS\s0 version less than +TLSv1.3 is used. +.PP +Both \fBSSL_stateless()\fR and \fBDTLSv1_listen()\fR will clear the error queue when they +start. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +For \fBSSL_stateless()\fR a return value of 1 indicates success and the \fBssl\fR object +will be set up ready to continue the handshake. A return value of 0 or \-1 +indicates failure. If the value is 0 then a HelloRetryRequest was sent. A value +of \-1 indicates any other error. User code may retry the \fBSSL_stateless()\fR call. +.PP +For \fBDTLSv1_listen()\fR a return value of >= 1 indicates success. The \fBssl\fR object +will be set up ready to continue the handshake. the \fBpeer\fR value will also be +filled in. +.PP +A return value of 0 indicates a non-fatal error. This could (for +example) be because of non-blocking \s-1IO,\s0 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 \fBDTLSv1_listen()\fR in the event of a non-fatal error. +.PP +A return value of <0 indicates a fatal error. This could (for example) be +because of a failure to allocate sufficient memory for the operation. +.PP +For \fBDTLSv1_listen()\fR, prior to OpenSSL 1.1.0, fatal and non-fatal errors both +produce return codes <= 0 (in typical implementations user code treats all +errors as non-fatal), whilst return codes >0 indicate success. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBSSL_CTX_set_cookie_generate_cb\fR\|(3), \fBSSL_CTX_set_cookie_verify_cb\fR\|(3), +\&\fBSSL_CTX_set_stateless_cookie_generate_cb\fR\|(3), +\&\fBSSL_CTX_set_stateless_cookie_verify_cb\fR\|(3), \fBSSL_get_error\fR\|(3), +\&\fBSSL_accept\fR\|(3), \fBssl\fR\|(7), \fBbio\fR\|(7) +.SH "HISTORY" +.IX Header "HISTORY" +The \fBSSL_stateless()\fR function was added in OpenSSL 1.1.1. +.PP +The \fBDTLSv1_listen()\fR return codes were clarified in OpenSSL 1.1.0. +The type of \*(L"peer\*(R" also changed in OpenSSL 1.1.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2015\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ECDSA_SIG_new.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ECDSA_SIG_new.3 new file mode 100644 index 00000000..04e1bba2 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ECDSA_SIG_new.3 @@ -0,0 +1,347 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "ECDSA_SIG_NEW 3" +.TH ECDSA_SIG_NEW 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +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) functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& ECDSA_SIG *ECDSA_SIG_new(void); +\& void ECDSA_SIG_free(ECDSA_SIG *sig); +\& void ECDSA_SIG_get0(const ECDSA_SIG *sig, const BIGNUM **pr, const BIGNUM **ps); +\& const BIGNUM *ECDSA_SIG_get0_r(const ECDSA_SIG *sig); +\& const BIGNUM *ECDSA_SIG_get0_s(const ECDSA_SIG *sig); +\& int ECDSA_SIG_set0(ECDSA_SIG *sig, BIGNUM *r, BIGNUM *s); +\& int ECDSA_size(const EC_KEY *eckey); +\& +\& int ECDSA_sign(int type, const unsigned char *dgst, int dgstlen, +\& unsigned char *sig, unsigned int *siglen, EC_KEY *eckey); +\& ECDSA_SIG *ECDSA_do_sign(const unsigned char *dgst, int dgst_len, +\& EC_KEY *eckey); +\& +\& int ECDSA_verify(int type, const unsigned char *dgst, int dgstlen, +\& const unsigned char *sig, int siglen, EC_KEY *eckey); +\& int ECDSA_do_verify(const unsigned char *dgst, int dgst_len, +\& const ECDSA_SIG *sig, EC_KEY* eckey); +\& +\& ECDSA_SIG *ECDSA_do_sign_ex(const unsigned char *dgst, int dgstlen, +\& const BIGNUM *kinv, const BIGNUM *rp, +\& EC_KEY *eckey); +\& int ECDSA_sign_setup(EC_KEY *eckey, BN_CTX *ctx, BIGNUM **kinv, BIGNUM **rp); +\& int ECDSA_sign_ex(int type, const unsigned char *dgst, int dgstlen, +\& unsigned char *sig, unsigned int *siglen, +\& const BIGNUM *kinv, const BIGNUM *rp, EC_KEY *eckey); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +Note: these functions provide a low level interface to \s-1ECDSA.\s0 Most +applications should use the higher level \fB\s-1EVP\s0\fR interface such as +\&\fBEVP_DigestSignInit\fR\|(3) or \fBEVP_DigestVerifyInit\fR\|(3) instead. +.PP +\&\fB\s-1ECDSA_SIG\s0\fR is an opaque structure consisting of two BIGNUMs for the +\&\fBr\fR and \fBs\fR value of an \s-1ECDSA\s0 signature (see X9.62 or \s-1FIPS 186\-2\s0). +.PP +\&\fBECDSA_SIG_new()\fR allocates an empty \fB\s-1ECDSA_SIG\s0\fR structure. Note: before +OpenSSL 1.1.0 the: the \fBr\fR and \fBs\fR components were initialised. +.PP +\&\fBECDSA_SIG_free()\fR frees the \fB\s-1ECDSA_SIG\s0\fR structure \fBsig\fR. +.PP +\&\fBECDSA_SIG_get0()\fR returns internal pointers the \fBr\fR and \fBs\fR values contained +in \fBsig\fR and stores them in \fB*pr\fR and \fB*ps\fR, respectively. +The pointer \fBpr\fR or \fBps\fR can be \s-1NULL,\s0 in which case the corresponding value +is not returned. +.PP +The values \fBr\fR, \fBs\fR can also be retrieved separately by the corresponding +function \fBECDSA_SIG_get0_r()\fR and \fBECDSA_SIG_get0_s()\fR, respectively. +.PP +The \fBr\fR and \fBs\fR values can be set by calling \fBECDSA_SIG_set0()\fR and passing the +new values for \fBr\fR and \fBs\fR as parameters to the function. Calling this +function transfers the memory management of the values to the \s-1ECDSA_SIG\s0 object, +and therefore the values that have been passed in should not be freed directly +after this function has been called. +.PP +See \fBi2d_ECDSA_SIG\fR\|(3) and \fBd2i_ECDSA_SIG\fR\|(3) for information about encoding +and decoding \s-1ECDSA\s0 signatures to/from \s-1DER.\s0 +.PP +\&\fBECDSA_size()\fR returns the maximum length of a \s-1DER\s0 encoded \s-1ECDSA\s0 signature +created with the private \s-1EC\s0 key \fBeckey\fR. +.PP +\&\fBECDSA_sign()\fR computes a digital signature of the \fBdgstlen\fR bytes hash value +\&\fBdgst\fR using the private \s-1EC\s0 key \fBeckey\fR. The \s-1DER\s0 encoded signatures is +stored in \fBsig\fR and its length is returned in \fBsig_len\fR. Note: \fBsig\fR must +point to ECDSA_size(eckey) bytes of memory. The parameter \fBtype\fR is currently +ignored. \fBECDSA_sign()\fR is wrapper function for \fBECDSA_sign_ex()\fR with \fBkinv\fR +and \fBrp\fR set to \s-1NULL.\s0 +.PP +\&\fBECDSA_do_sign()\fR is similar to \fBECDSA_sign()\fR except the signature is returned +as a newly allocated \fB\s-1ECDSA_SIG\s0\fR structure (or \s-1NULL\s0 on error). \fBECDSA_do_sign()\fR +is a wrapper function for \fBECDSA_do_sign_ex()\fR with \fBkinv\fR and \fBrp\fR set to +\&\s-1NULL.\s0 +.PP +\&\fBECDSA_verify()\fR verifies that the signature in \fBsig\fR of size \fBsiglen\fR is a +valid \s-1ECDSA\s0 signature of the hash value \fBdgst\fR of size \fBdgstlen\fR using the +public key \fBeckey\fR. The parameter \fBtype\fR is ignored. +.PP +\&\fBECDSA_do_verify()\fR is similar to \fBECDSA_verify()\fR except the signature is +presented in the form of a pointer to an \fB\s-1ECDSA_SIG\s0\fR structure. +.PP +The remaining functions utilise the internal \fBkinv\fR and \fBr\fR values used +during signature computation. Most applications will never need to call these +and some external \s-1ECDSA ENGINE\s0 implementations may not support them at all if +either \fBkinv\fR or \fBr\fR is not \fB\s-1NULL\s0\fR. +.PP +\&\fBECDSA_sign_setup()\fR may be used to precompute parts of the signing operation. +\&\fBeckey\fR is the private \s-1EC\s0 key and \fBctx\fR is a pointer to \fB\s-1BN_CTX\s0\fR structure +(or \s-1NULL\s0). The precomputed values or returned in \fBkinv\fR and \fBrp\fR and can be +used in a later call to \fBECDSA_sign_ex()\fR or \fBECDSA_do_sign_ex()\fR. +.PP +\&\fBECDSA_sign_ex()\fR computes a digital signature of the \fBdgstlen\fR bytes hash value +\&\fBdgst\fR using the private \s-1EC\s0 key \fBeckey\fR and the optional pre-computed values +\&\fBkinv\fR and \fBrp\fR. The \s-1DER\s0 encoded signature is stored in \fBsig\fR and its +length is returned in \fBsig_len\fR. Note: \fBsig\fR must point to ECDSA_size(eckey) +bytes of memory. The parameter \fBtype\fR is ignored. +.PP +\&\fBECDSA_do_sign_ex()\fR is similar to \fBECDSA_sign_ex()\fR except the signature is +returned as a newly allocated \fB\s-1ECDSA_SIG\s0\fR structure (or \s-1NULL\s0 on error). +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBECDSA_SIG_new()\fR returns \s-1NULL\s0 if the allocation fails. +.PP +\&\fBECDSA_SIG_set0()\fR returns 1 on success or 0 on failure. +.PP +\&\fBECDSA_SIG_get0_r()\fR and \fBECDSA_SIG_get0_s()\fR return the corresponding value, +or \s-1NULL\s0 if it is unset. +.PP +\&\fBECDSA_size()\fR returns the maximum length signature or 0 on error. +.PP +\&\fBECDSA_sign()\fR, \fBECDSA_sign_ex()\fR and \fBECDSA_sign_setup()\fR return 1 if successful +or 0 on error. +.PP +\&\fBECDSA_do_sign()\fR and \fBECDSA_do_sign_ex()\fR return a pointer to an allocated +\&\fB\s-1ECDSA_SIG\s0\fR structure or \s-1NULL\s0 on error. +.PP +\&\fBECDSA_verify()\fR and \fBECDSA_do_verify()\fR return 1 for a valid +signature, 0 for an invalid signature and \-1 on error. +The error codes can be obtained by \fBERR_get_error\fR\|(3). +.SH "EXAMPLES" +.IX Header "EXAMPLES" +Creating an \s-1ECDSA\s0 signature of a given \s-1SHA\-256\s0 hash value using the +named curve prime256v1 (aka P\-256). +.PP +First step: create an \s-1EC_KEY\s0 object (note: this part is \fBnot\fR \s-1ECDSA\s0 +specific) +.PP +.Vb 3 +\& int ret; +\& ECDSA_SIG *sig; +\& EC_KEY *eckey; +\& +\& eckey = EC_KEY_new_by_curve_name(NID_X9_62_prime256v1); +\& if (eckey == NULL) +\& /* error */ +\& if (EC_KEY_generate_key(eckey) == 0) +\& /* error */ +.Ve +.PP +Second step: compute the \s-1ECDSA\s0 signature of a \s-1SHA\-256\s0 hash value +using \fBECDSA_do_sign()\fR: +.PP +.Vb 3 +\& sig = ECDSA_do_sign(digest, 32, eckey); +\& if (sig == NULL) +\& /* error */ +.Ve +.PP +or using \fBECDSA_sign()\fR: +.PP +.Vb 2 +\& unsigned char *buffer, *pp; +\& int buf_len; +\& +\& buf_len = ECDSA_size(eckey); +\& buffer = OPENSSL_malloc(buf_len); +\& pp = buffer; +\& if (ECDSA_sign(0, dgst, dgstlen, pp, &buf_len, eckey) == 0) +\& /* error */ +.Ve +.PP +Third step: verify the created \s-1ECDSA\s0 signature using \fBECDSA_do_verify()\fR: +.PP +.Vb 1 +\& ret = ECDSA_do_verify(digest, 32, sig, eckey); +.Ve +.PP +or using \fBECDSA_verify()\fR: +.PP +.Vb 1 +\& ret = ECDSA_verify(0, digest, 32, buffer, buf_len, eckey); +.Ve +.PP +and finally evaluate the return value: +.PP +.Vb 6 +\& if (ret == 1) +\& /* signature ok */ +\& else if (ret == 0) +\& /* incorrect signature */ +\& else +\& /* error */ +.Ve +.SH "CONFORMING TO" +.IX Header "CONFORMING TO" +\&\s-1ANSI X9.62, US\s0 Federal Information Processing Standard \s-1FIPS 186\-2\s0 +(Digital Signature Standard, \s-1DSS\s0) +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBEC_KEY_new\fR\|(3), +\&\fBEVP_DigestSignInit\fR\|(3), +\&\fBEVP_DigestVerifyInit\fR\|(3), +\&\fBi2d_ECDSA_SIG\fR\|(3), +\&\fBd2i_ECDSA_SIG\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2004\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ECPKParameters_print.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ECPKParameters_print.3 new file mode 100644 index 00000000..de918ece --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ECPKParameters_print.3 @@ -0,0 +1,175 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "ECPKPARAMETERS_PRINT 3" +.TH ECPKPARAMETERS_PRINT 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +ECPKParameters_print, ECPKParameters_print_fp \- Functions for decoding and encoding ASN1 representations of elliptic curve entities +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int ECPKParameters_print(BIO *bp, const EC_GROUP *x, int off); +\& int ECPKParameters_print_fp(FILE *fp, const EC_GROUP *x, int off); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The ECPKParameters represent the public parameters for an +\&\fB\s-1EC_GROUP\s0\fR structure, which represents a curve. +.PP +The \fBECPKParameters_print()\fR and \fBECPKParameters_print_fp()\fR functions print +a human-readable output of the public parameters of the \s-1EC_GROUP\s0 to \fBbp\fR +or \fBfp\fR. The output lines are indented by \fBoff\fR spaces. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBECPKParameters_print()\fR and \fBECPKParameters_print_fp()\fR +return 1 for success and 0 if an error occurs. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBcrypto\fR\|(7), \fBEC_GROUP_new\fR\|(3), \fBEC_GROUP_copy\fR\|(3), +\&\fBEC_POINT_new\fR\|(3), \fBEC_POINT_add\fR\|(3), \fBEC_KEY_new\fR\|(3), +\&\fBEC_GFp_simple_method\fR\|(3), +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2013\-2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EC_GFp_simple_method.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EC_GFp_simple_method.3 new file mode 100644 index 00000000..a3f36dc3 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EC_GFp_simple_method.3 @@ -0,0 +1,201 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EC_GFP_SIMPLE_METHOD 3" +.TH EC_GFP_SIMPLE_METHOD 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EC_GFp_simple_method, EC_GFp_mont_method, EC_GFp_nist_method, EC_GFp_nistp224_method, EC_GFp_nistp256_method, EC_GFp_nistp521_method, EC_GF2m_simple_method, EC_METHOD_get_field_type \- Functions for obtaining EC_METHOD objects +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& const EC_METHOD *EC_GFp_simple_method(void); +\& const EC_METHOD *EC_GFp_mont_method(void); +\& const EC_METHOD *EC_GFp_nist_method(void); +\& const EC_METHOD *EC_GFp_nistp224_method(void); +\& const EC_METHOD *EC_GFp_nistp256_method(void); +\& const EC_METHOD *EC_GFp_nistp521_method(void); +\& +\& const EC_METHOD *EC_GF2m_simple_method(void); +\& +\& int EC_METHOD_get_field_type(const EC_METHOD *meth); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The Elliptic Curve library provides a number of different implementations through a single common interface. +When constructing a curve using EC_GROUP_new (see \fBEC_GROUP_new\fR\|(3)) an +implementation method must be provided. The functions described here all return a const pointer to an +\&\fB\s-1EC_METHOD\s0\fR structure that can be passed to \s-1EC_GROUP_NEW.\s0 It is important that the correct implementation +type for the form of curve selected is used. +.PP +For F2^m curves there is only one implementation choice, i.e. EC_GF2_simple_method. +.PP +For Fp curves the lowest common denominator implementation is the EC_GFp_simple_method implementation. All +other implementations are based on this one. EC_GFp_mont_method builds on EC_GFp_simple_method but adds the +use of montgomery multiplication (see \fBBN_mod_mul_montgomery\fR\|(3)). EC_GFp_nist_method +offers an implementation optimised for use with \s-1NIST\s0 recommended curves (\s-1NIST\s0 curves are available through +EC_GROUP_new_by_curve_name as described in \fBEC_GROUP_new\fR\|(3)). +.PP +The functions EC_GFp_nistp224_method, EC_GFp_nistp256_method and EC_GFp_nistp521_method offer 64 bit +optimised implementations for the \s-1NIST P224, P256\s0 and P521 curves respectively. Note, however, that these +implementations are not available on all platforms. +.PP +EC_METHOD_get_field_type identifies what type of field the \s-1EC_METHOD\s0 structure supports, which will be either +F2^m or Fp. If the field type is Fp then the value \fBNID_X9_62_prime_field\fR is returned. If the field type is +F2^m then the value \fBNID_X9_62_characteristic_two_field\fR is returned. These values are defined in the +obj_mac.h header file. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +All EC_GFp* functions and EC_GF2m_simple_method always return a const pointer to an \s-1EC_METHOD\s0 structure. +.PP +EC_METHOD_get_field_type returns an integer that identifies the type of field the \s-1EC_METHOD\s0 structure supports. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBcrypto\fR\|(7), \fBEC_GROUP_new\fR\|(3), \fBEC_GROUP_copy\fR\|(3), +\&\fBEC_POINT_new\fR\|(3), \fBEC_POINT_add\fR\|(3), \fBEC_KEY_new\fR\|(3), +\&\fBd2i_ECPKParameters\fR\|(3), +\&\fBBN_mod_mul_montgomery\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2013\-2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EC_GROUP_copy.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EC_GROUP_copy.3 new file mode 100644 index 00000000..f41a962d --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EC_GROUP_copy.3 @@ -0,0 +1,345 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EC_GROUP_COPY 3" +.TH EC_GROUP_COPY 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EC_GROUP_get0_order, EC_GROUP_order_bits, EC_GROUP_get0_cofactor, EC_GROUP_copy, EC_GROUP_dup, EC_GROUP_method_of, EC_GROUP_set_generator, EC_GROUP_get0_generator, EC_GROUP_get_order, EC_GROUP_get_cofactor, EC_GROUP_set_curve_name, EC_GROUP_get_curve_name, EC_GROUP_set_asn1_flag, EC_GROUP_get_asn1_flag, EC_GROUP_set_point_conversion_form, EC_GROUP_get_point_conversion_form, EC_GROUP_get0_seed, EC_GROUP_get_seed_len, EC_GROUP_set_seed, EC_GROUP_get_degree, EC_GROUP_check, EC_GROUP_check_discriminant, EC_GROUP_cmp, EC_GROUP_get_basis_type, EC_GROUP_get_trinomial_basis, EC_GROUP_get_pentanomial_basis \&\- Functions for manipulating EC_GROUP objects +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int EC_GROUP_copy(EC_GROUP *dst, const EC_GROUP *src); +\& EC_GROUP *EC_GROUP_dup(const EC_GROUP *src); +\& +\& const EC_METHOD *EC_GROUP_method_of(const EC_GROUP *group); +\& +\& int EC_GROUP_set_generator(EC_GROUP *group, const EC_POINT *generator, +\& const BIGNUM *order, const BIGNUM *cofactor); +\& const EC_POINT *EC_GROUP_get0_generator(const EC_GROUP *group); +\& +\& int EC_GROUP_get_order(const EC_GROUP *group, BIGNUM *order, BN_CTX *ctx); +\& const BIGNUM *EC_GROUP_get0_order(const EC_GROUP *group); +\& int EC_GROUP_order_bits(const EC_GROUP *group); +\& int EC_GROUP_get_cofactor(const EC_GROUP *group, BIGNUM *cofactor, BN_CTX *ctx); +\& const BIGNUM *EC_GROUP_get0_cofactor(const EC_GROUP *group); +\& +\& void EC_GROUP_set_curve_name(EC_GROUP *group, int nid); +\& int EC_GROUP_get_curve_name(const EC_GROUP *group); +\& +\& void EC_GROUP_set_asn1_flag(EC_GROUP *group, int flag); +\& int EC_GROUP_get_asn1_flag(const EC_GROUP *group); +\& +\& void EC_GROUP_set_point_conversion_form(EC_GROUP *group, point_conversion_form_t form); +\& point_conversion_form_t EC_GROUP_get_point_conversion_form(const EC_GROUP *group); +\& +\& unsigned char *EC_GROUP_get0_seed(const EC_GROUP *x); +\& size_t EC_GROUP_get_seed_len(const EC_GROUP *); +\& size_t EC_GROUP_set_seed(EC_GROUP *, const unsigned char *, size_t len); +\& +\& int EC_GROUP_get_degree(const EC_GROUP *group); +\& +\& int EC_GROUP_check(const EC_GROUP *group, BN_CTX *ctx); +\& +\& int EC_GROUP_check_discriminant(const EC_GROUP *group, BN_CTX *ctx); +\& +\& int EC_GROUP_cmp(const EC_GROUP *a, const EC_GROUP *b, BN_CTX *ctx); +\& +\& int EC_GROUP_get_basis_type(const EC_GROUP *); +\& int EC_GROUP_get_trinomial_basis(const EC_GROUP *, unsigned int *k); +\& int EC_GROUP_get_pentanomial_basis(const EC_GROUP *, unsigned int *k1, +\& unsigned int *k2, unsigned int *k3); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBEC_GROUP_copy()\fR copies the curve \fBsrc\fR into \fBdst\fR. Both \fBsrc\fR and \fBdst\fR must use the same \s-1EC_METHOD.\s0 +.PP +\&\fBEC_GROUP_dup()\fR creates a new \s-1EC_GROUP\s0 object and copies the content from \fBsrc\fR to the newly created +\&\s-1EC_GROUP\s0 object. +.PP +\&\fBEC_GROUP_method_of()\fR obtains the \s-1EC_METHOD\s0 of \fBgroup\fR. +.PP +\&\fBEC_GROUP_set_generator()\fR sets curve parameters that must be agreed by all participants using the curve. These +parameters include the \fBgenerator\fR, the \fBorder\fR and the \fBcofactor\fR. The \fBgenerator\fR is a well defined point on the +curve chosen for cryptographic operations. Integers used for point multiplications will be between 0 and +n\-1 where n is the \fBorder\fR. The \fBorder\fR multiplied by the \fBcofactor\fR gives the number of points on the curve. +.PP +\&\fBEC_GROUP_get0_generator()\fR returns the generator for the identified \fBgroup\fR. +.PP +\&\fBEC_GROUP_get_order()\fR retrieves the order of \fBgroup\fR and copies its value into +\&\fBorder\fR. It fails in case \fBgroup\fR is not fully initialized (i.e., its order +is not set or set to zero). +.PP +\&\fBEC_GROUP_get_cofactor()\fR retrieves the cofactor of \fBgroup\fR and copies its value +into \fBcofactor\fR. It fails in case \fBgroup\fR is not fully initialized or if the +cofactor is not set (or set to zero). +.PP +The functions \fBEC_GROUP_set_curve_name()\fR and \fBEC_GROUP_get_curve_name()\fR, set and get the \s-1NID\s0 for the curve respectively +(see \fBEC_GROUP_new\fR\|(3)). If a curve does not have a \s-1NID\s0 associated with it, then EC_GROUP_get_curve_name +will return NID_undef. +.PP +The asn1_flag value is used to determine whether the curve encoding uses +explicit parameters or a named curve using an \s-1ASN1 OID:\s0 many applications only +support the latter form. If asn1_flag is \fB\s-1OPENSSL_EC_NAMED_CURVE\s0\fR then the +named curve form is used and the parameters must have a corresponding +named curve \s-1NID\s0 set. If asn1_flags is \fB\s-1OPENSSL_EC_EXPLICIT_CURVE\s0\fR the +parameters are explicitly encoded. The functions \fBEC_GROUP_get_asn1_flag()\fR and +\&\fBEC_GROUP_set_asn1_flag()\fR get and set the status of the asn1_flag for the curve. +Note: \fB\s-1OPENSSL_EC_EXPLICIT_CURVE\s0\fR was added in OpenSSL 1.1.0, for +previous versions of OpenSSL the value 0 must be used instead. Before OpenSSL +1.1.0 the default form was to use explicit parameters (meaning that +applications would have to explicitly set the named curve form) in OpenSSL +1.1.0 and later the named curve form is the default. +.PP +The point_conversion_form for a curve controls how \s-1EC_POINT\s0 data is encoded as \s-1ASN1\s0 as defined in X9.62 (\s-1ECDSA\s0). +point_conversion_form_t is an enum defined as follows: +.PP +.Vb 10 +\& typedef enum { +\& /** the point is encoded as z||x, where the octet z specifies +\& * which solution of the quadratic equation y is */ +\& POINT_CONVERSION_COMPRESSED = 2, +\& /** the point is encoded as z||x||y, where z is the octet 0x04 */ +\& POINT_CONVERSION_UNCOMPRESSED = 4, +\& /** the point is encoded as z||x||y, where the octet z specifies +\& * which solution of the quadratic equation y is */ +\& POINT_CONVERSION_HYBRID = 6 +\& } point_conversion_form_t; +.Ve +.PP +For \s-1POINT_CONVERSION_UNCOMPRESSED\s0 the point is encoded as an octet signifying the \s-1UNCOMPRESSED\s0 form has been used followed by +the octets for x, followed by the octets for y. +.PP +For any given x co-ordinate for a point on a curve it is possible to derive two possible y values. For +\&\s-1POINT_CONVERSION_COMPRESSED\s0 the point is encoded as an octet signifying that the \s-1COMPRESSED\s0 form has been used \s-1AND\s0 which of +the two possible solutions for y has been used, followed by the octets for x. +.PP +For \s-1POINT_CONVERSION_HYBRID\s0 the point is encoded as an octet signifying the \s-1HYBRID\s0 form has been used \s-1AND\s0 which of the two +possible solutions for y has been used, followed by the octets for x, followed by the octets for y. +.PP +The functions \fBEC_GROUP_set_point_conversion_form()\fR and \fBEC_GROUP_get_point_conversion_form()\fR, set and get the point_conversion_form +for the curve respectively. +.PP +\&\s-1ANSI X9.62\s0 (\s-1ECDSA\s0 standard) defines a method of generating the curve parameter b from a random number. This provides advantages +in that a parameter obtained in this way is highly unlikely to be susceptible to special purpose attacks, or have any trapdoors in it. +If the seed is present for a curve then the b parameter was generated in a verifiable fashion using that seed. The OpenSSL \s-1EC\s0 library +does not use this seed value but does enable you to inspect it using \fBEC_GROUP_get0_seed()\fR. This returns a pointer to a memory block +containing the seed that was used. The length of the memory block can be obtained using \fBEC_GROUP_get_seed_len()\fR. A number of the +built-in curves within the library provide seed values that can be obtained. It is also possible to set a custom seed using +\&\fBEC_GROUP_set_seed()\fR and passing a pointer to a memory block, along with the length of the seed. Again, the \s-1EC\s0 library will not use +this seed value, although it will be preserved in any \s-1ASN1\s0 based communications. +.PP +\&\fBEC_GROUP_get_degree()\fR gets the degree of the field. For Fp fields this will be the number of bits in p. For F2^m fields this will be +the value m. +.PP +The function \fBEC_GROUP_check_discriminant()\fR calculates the discriminant for the curve and verifies that it is valid. +For a curve defined over Fp the discriminant is given by the formula 4*a^3 + 27*b^2 whilst for F2^m curves the discriminant is +simply b. In either case for the curve to be valid the discriminant must be non zero. +.PP +The function \fBEC_GROUP_check()\fR performs a number of checks on a curve to verify that it is valid. Checks performed include +verifying that the discriminant is non zero; that a generator has been defined; that the generator is on the curve and has +the correct order. +.PP +\&\fBEC_GROUP_cmp()\fR compares \fBa\fR and \fBb\fR to determine whether they represent the same curve or not. +.PP +The functions \fBEC_GROUP_get_basis_type()\fR, \fBEC_GROUP_get_trinomial_basis()\fR and \fBEC_GROUP_get_pentanomial_basis()\fR should only be called for curves +defined over an F2^m field. Addition and multiplication operations within an F2^m field are performed using an irreducible polynomial +function f(x). This function is either a trinomial of the form: +.PP +f(x) = x^m + x^k + 1 with m > k >= 1 +.PP +or a pentanomial of the form: +.PP +f(x) = x^m + x^k3 + x^k2 + x^k1 + 1 with m > k3 > k2 > k1 >= 1 +.PP +The function \fBEC_GROUP_get_basis_type()\fR returns a \s-1NID\s0 identifying whether a trinomial or pentanomial is in use for the field. The +function \fBEC_GROUP_get_trinomial_basis()\fR must only be called where f(x) is of the trinomial form, and returns the value of \fBk\fR. Similarly +the function \fBEC_GROUP_get_pentanomial_basis()\fR must only be called where f(x) is of the pentanomial form, and returns the values of \fBk1\fR, +\&\fBk2\fR and \fBk3\fR respectively. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +The following functions return 1 on success or 0 on error: \fBEC_GROUP_copy()\fR, \fBEC_GROUP_set_generator()\fR, \fBEC_GROUP_check()\fR, +\&\fBEC_GROUP_check_discriminant()\fR, \fBEC_GROUP_get_trinomial_basis()\fR and \fBEC_GROUP_get_pentanomial_basis()\fR. +.PP +\&\fBEC_GROUP_dup()\fR returns a pointer to the duplicated curve, or \s-1NULL\s0 on error. +.PP +\&\fBEC_GROUP_method_of()\fR returns the \s-1EC_METHOD\s0 implementation in use for the given curve or \s-1NULL\s0 on error. +.PP +\&\fBEC_GROUP_get0_generator()\fR returns the generator for the given curve or \s-1NULL\s0 on error. +.PP +\&\fBEC_GROUP_get_order()\fR returns 0 if the order is not set (or set to zero) for +\&\fBgroup\fR or if copying into \fBorder\fR fails, 1 otherwise. +.PP +\&\fBEC_GROUP_get_cofactor()\fR returns 0 if the cofactor is not set (or is set to zero) for \fBgroup\fR or if copying into \fBcofactor\fR fails, 1 otherwise. +.PP +\&\fBEC_GROUP_get_curve_name()\fR returns the curve name (\s-1NID\s0) for \fBgroup\fR or will return NID_undef if no curve name is associated. +.PP +\&\fBEC_GROUP_get_asn1_flag()\fR returns the \s-1ASN1\s0 flag for the specified \fBgroup\fR . +.PP +\&\fBEC_GROUP_get_point_conversion_form()\fR returns the point_conversion_form for \fBgroup\fR. +.PP +\&\fBEC_GROUP_get_degree()\fR returns the degree for \fBgroup\fR or 0 if the operation is not supported by the underlying group implementation. +.PP +\&\fBEC_GROUP_get0_order()\fR returns an internal pointer to the group order. +\&\fBEC_GROUP_order_bits()\fR returns the number of bits in the group order. +\&\fBEC_GROUP_get0_cofactor()\fR returns an internal pointer to the group cofactor. +.PP +\&\fBEC_GROUP_get0_seed()\fR returns a pointer to the seed that was used to generate the parameter b, or \s-1NULL\s0 if the seed is not +specified. \fBEC_GROUP_get_seed_len()\fR returns the length of the seed or 0 if the seed is not specified. +.PP +\&\fBEC_GROUP_set_seed()\fR returns the length of the seed that has been set. If the supplied seed is \s-1NULL,\s0 or the supplied seed length is +0, the return value will be 1. On error 0 is returned. +.PP +\&\fBEC_GROUP_cmp()\fR returns 0 if the curves are equal, 1 if they are not equal, or \-1 on error. +.PP +\&\fBEC_GROUP_get_basis_type()\fR returns the values NID_X9_62_tpBasis or NID_X9_62_ppBasis (as defined in ) for a +trinomial or pentanomial respectively. Alternatively in the event of an error a 0 is returned. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBcrypto\fR\|(7), \fBEC_GROUP_new\fR\|(3), +\&\fBEC_POINT_new\fR\|(3), \fBEC_POINT_add\fR\|(3), \fBEC_KEY_new\fR\|(3), +\&\fBEC_GFp_simple_method\fR\|(3), \fBd2i_ECPKParameters\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2013\-2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EC_GROUP_new.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EC_GROUP_new.3 new file mode 100644 index 00000000..3373ace3 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EC_GROUP_new.3 @@ -0,0 +1,279 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EC_GROUP_NEW 3" +.TH EC_GROUP_NEW 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EC_GROUP_get_ecparameters, EC_GROUP_get_ecpkparameters, EC_GROUP_new, EC_GROUP_new_from_ecparameters, EC_GROUP_new_from_ecpkparameters, EC_GROUP_free, EC_GROUP_clear_free, EC_GROUP_new_curve_GFp, EC_GROUP_new_curve_GF2m, EC_GROUP_new_by_curve_name, EC_GROUP_set_curve, EC_GROUP_get_curve, EC_GROUP_set_curve_GFp, EC_GROUP_get_curve_GFp, EC_GROUP_set_curve_GF2m, EC_GROUP_get_curve_GF2m, EC_get_builtin_curves \- Functions for creating and destroying EC_GROUP objects +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& EC_GROUP *EC_GROUP_new(const EC_METHOD *meth); +\& EC_GROUP *EC_GROUP_new_from_ecparameters(const ECPARAMETERS *params) +\& EC_GROUP *EC_GROUP_new_from_ecpkparameters(const ECPKPARAMETERS *params) +\& void EC_GROUP_free(EC_GROUP *group); +\& void EC_GROUP_clear_free(EC_GROUP *group); +\& +\& EC_GROUP *EC_GROUP_new_curve_GFp(const BIGNUM *p, const BIGNUM *a, +\& const BIGNUM *b, BN_CTX *ctx); +\& EC_GROUP *EC_GROUP_new_curve_GF2m(const BIGNUM *p, const BIGNUM *a, +\& const BIGNUM *b, BN_CTX *ctx); +\& EC_GROUP *EC_GROUP_new_by_curve_name(int nid); +\& +\& int EC_GROUP_set_curve(EC_GROUP *group, const BIGNUM *p, const BIGNUM *a, +\& const BIGNUM *b, BN_CTX *ctx); +\& int EC_GROUP_get_curve(const EC_GROUP *group, BIGNUM *p, BIGNUM *a, BIGNUM *b, +\& BN_CTX *ctx); +\& int EC_GROUP_set_curve_GFp(EC_GROUP *group, const BIGNUM *p, +\& const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); +\& int EC_GROUP_get_curve_GFp(const EC_GROUP *group, BIGNUM *p, +\& BIGNUM *a, BIGNUM *b, BN_CTX *ctx); +\& int EC_GROUP_set_curve_GF2m(EC_GROUP *group, const BIGNUM *p, +\& const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); +\& int EC_GROUP_get_curve_GF2m(const EC_GROUP *group, BIGNUM *p, +\& BIGNUM *a, BIGNUM *b, BN_CTX *ctx); +\& +\& ECPARAMETERS *EC_GROUP_get_ecparameters(const EC_GROUP *group, ECPARAMETERS *params) +\& ECPKPARAMETERS *EC_GROUP_get_ecpkparameters(const EC_GROUP *group, ECPKPARAMETERS *params) +\& +\& size_t EC_get_builtin_curves(EC_builtin_curve *r, size_t nitems); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +Within the library there are two forms of elliptic curve that are of interest. +The first form is those defined over the prime field Fp. The elements of Fp are +the integers 0 to p\-1, where p is a prime number. This gives us a revised +elliptic curve equation as follows: +.PP +y^2 mod p = x^3 +ax + b mod p +.PP +The second form is those defined over a binary field F2^m where the elements of +the field are integers of length at most m bits. For this form the elliptic +curve equation is modified to: +.PP +y^2 + xy = x^3 + ax^2 + b (where b != 0) +.PP +Operations in a binary field are performed relative to an \fBirreducible +polynomial\fR. All such curves with OpenSSL use a trinomial or a pentanomial for +this parameter. +.PP +A new curve can be constructed by calling \fBEC_GROUP_new()\fR, using the +implementation provided by \fBmeth\fR (see \fBEC_GFp_simple_method\fR\|(3)). It is then +necessary to call \fBEC_GROUP_set_curve()\fR to set the curve parameters. +\&\fBEC_GROUP_new_from_ecparameters()\fR will create a group from the specified +\&\fBparams\fR and \fBEC_GROUP_new_from_ecpkparameters()\fR will create a group from the +specific \s-1PK\s0 \fBparams\fR. +.PP +\&\fBEC_GROUP_set_curve()\fR sets the curve parameters \fBp\fR, \fBa\fR and \fBb\fR. For a curve +over Fp \fBp\fR is the prime for the field. For a curve over F2^m \fBp\fR 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 +polynomial is a trinomial or a pentanomial. +In either case, \fBa\fR and \fBb\fR represents the coefficients a and b from the +relevant equation introduced above. +.PP +\&\fBEC_group_get_curve()\fR obtains the previously set curve parameters. +.PP +\&\fBEC_GROUP_set_curve_GFp()\fR and \fBEC_GROUP_set_curve_GF2m()\fR are synonyms for +\&\fBEC_GROUP_set_curve()\fR. They are defined for backwards compatibility only and +should not be used. +.PP +\&\fBEC_GROUP_get_curve_GFp()\fR and \fBEC_GROUP_get_curve_GF2m()\fR are synonyms for +\&\fBEC_GROUP_get_curve()\fR. They are defined for backwards compatibility only and +should not be used. +.PP +The functions \fBEC_GROUP_new_curve_GFp()\fR and \fBEC_GROUP_new_curve_GF2m()\fR are +shortcuts for calling \fBEC_GROUP_new()\fR and then the \fBEC_GROUP_set_curve()\fR function. +An appropriate default implementation method will be used. +.PP +Whilst the library can be used to create any curve using the functions described +above, there are also a number of predefined curves that are available. In order +to obtain a list of all of the predefined curves, call the function +\&\fBEC_get_builtin_curves()\fR. The parameter \fBr\fR should be an array of +EC_builtin_curve structures of size \fBnitems\fR. The function will populate the +\&\fBr\fR array with information about the builtin curves. If \fBnitems\fR is less than +the total number of curves available, then the first \fBnitems\fR curves will be +returned. Otherwise the total number of curves will be provided. The return +value is the total number of curves available (whether that number has been +populated in \fBr\fR or not). Passing a \s-1NULL\s0 \fBr\fR, or setting \fBnitems\fR to 0 will +do nothing other than return the total number of curves available. +The EC_builtin_curve structure is defined as follows: +.PP +.Vb 4 +\& typedef struct { +\& int nid; +\& const char *comment; +\& } EC_builtin_curve; +.Ve +.PP +Each EC_builtin_curve item has a unique integer id (\fBnid\fR), and a human +readable comment string describing the curve. +.PP +In order to construct a builtin curve use the function +\&\fBEC_GROUP_new_by_curve_name()\fR and provide the \fBnid\fR of the curve to +be constructed. +.PP +\&\fBEC_GROUP_free()\fR frees the memory associated with the \s-1EC_GROUP.\s0 +If \fBgroup\fR is \s-1NULL\s0 nothing is done. +.PP +\&\fBEC_GROUP_clear_free()\fR destroys any sensitive data held within the \s-1EC_GROUP\s0 and +then frees its memory. If \fBgroup\fR is \s-1NULL\s0 nothing is done. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +All EC_GROUP_new* functions return a pointer to the newly constructed group, or +\&\s-1NULL\s0 on error. +.PP +\&\fBEC_get_builtin_curves()\fR returns the number of builtin curves that are available. +.PP +\&\fBEC_GROUP_set_curve_GFp()\fR, \fBEC_GROUP_get_curve_GFp()\fR, \fBEC_GROUP_set_curve_GF2m()\fR, +\&\fBEC_GROUP_get_curve_GF2m()\fR return 1 on success or 0 on error. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBcrypto\fR\|(7), \fBEC_GROUP_copy\fR\|(3), +\&\fBEC_POINT_new\fR\|(3), \fBEC_POINT_add\fR\|(3), \fBEC_KEY_new\fR\|(3), +\&\fBEC_GFp_simple_method\fR\|(3), \fBd2i_ECPKParameters\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2013\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EC_KEY_get_enc_flags.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EC_KEY_get_enc_flags.3 new file mode 100644 index 00000000..8c62fdd2 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EC_KEY_get_enc_flags.3 @@ -0,0 +1,190 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EC_KEY_GET_ENC_FLAGS 3" +.TH EC_KEY_GET_ENC_FLAGS 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EC_KEY_get_enc_flags, EC_KEY_set_enc_flags \&\- Get and set flags for encoding EC_KEY structures +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& unsigned int EC_KEY_get_enc_flags(const EC_KEY *key); +\& void EC_KEY_set_enc_flags(EC_KEY *eckey, unsigned int flags); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The format of the external representation of the public key written by +\&\fBi2d_ECPrivateKey()\fR (such as whether it is stored in a compressed form or not) is +described by the point_conversion_form. See \fBEC_GROUP_copy\fR\|(3) +for a description of point_conversion_form. +.PP +When reading a private key encoded without an associated public key (e.g. if +\&\s-1EC_PKEY_NO_PUBKEY\s0 has been used \- see below), then \fBd2i_ECPrivateKey()\fR generates +the missing public key automatically. Private keys encoded without parameters +(e.g. if \s-1EC_PKEY_NO_PARAMETERS\s0 has been used \- see below) cannot be loaded using +\&\fBd2i_ECPrivateKey()\fR. +.PP +The functions \fBEC_KEY_get_enc_flags()\fR and \fBEC_KEY_set_enc_flags()\fR get and set the +value of the encoding flags for the \fBkey\fR. There are two encoding flags +currently defined \- \s-1EC_PKEY_NO_PARAMETERS\s0 and \s-1EC_PKEY_NO_PUBKEY.\s0 These flags +define the behaviour of how the \fBkey\fR is converted into \s-1ASN1\s0 in a call to +\&\fBi2d_ECPrivateKey()\fR. If \s-1EC_PKEY_NO_PARAMETERS\s0 is set then the public parameters for +the curve are not encoded along with the private key. If \s-1EC_PKEY_NO_PUBKEY\s0 is +set then the public key is not encoded along with the private key. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBEC_KEY_get_enc_flags()\fR returns the value of the current encoding flags for the +\&\s-1EC_KEY.\s0 +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBcrypto\fR\|(7), \fBEC_GROUP_new\fR\|(3), +\&\fBEC_GROUP_copy\fR\|(3), \fBEC_POINT_new\fR\|(3), +\&\fBEC_POINT_add\fR\|(3), +\&\fBEC_GFp_simple_method\fR\|(3), +\&\fBd2i_ECPKParameters\fR\|(3), +\&\fBd2i_ECPrivateKey\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2015\-2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EC_KEY_new.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EC_KEY_new.3 new file mode 100644 index 00000000..91d4d8e8 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EC_KEY_new.3 @@ -0,0 +1,309 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EC_KEY_NEW 3" +.TH EC_KEY_NEW 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EC_KEY_get_method, EC_KEY_set_method, EC_KEY_new, EC_KEY_get_flags, EC_KEY_set_flags, EC_KEY_clear_flags, EC_KEY_new_by_curve_name, EC_KEY_free, EC_KEY_copy, EC_KEY_dup, EC_KEY_up_ref, 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_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 EC_KEY objects +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& EC_KEY *EC_KEY_new(void); +\& int EC_KEY_get_flags(const EC_KEY *key); +\& void EC_KEY_set_flags(EC_KEY *key, int flags); +\& void EC_KEY_clear_flags(EC_KEY *key, int flags); +\& EC_KEY *EC_KEY_new_by_curve_name(int nid); +\& void EC_KEY_free(EC_KEY *key); +\& EC_KEY *EC_KEY_copy(EC_KEY *dst, const EC_KEY *src); +\& EC_KEY *EC_KEY_dup(const EC_KEY *src); +\& int EC_KEY_up_ref(EC_KEY *key); +\& ENGINE *EC_KEY_get0_engine(const EC_KEY *eckey); +\& const EC_GROUP *EC_KEY_get0_group(const EC_KEY *key); +\& int EC_KEY_set_group(EC_KEY *key, const EC_GROUP *group); +\& const BIGNUM *EC_KEY_get0_private_key(const EC_KEY *key); +\& int EC_KEY_set_private_key(EC_KEY *key, const BIGNUM *prv); +\& const EC_POINT *EC_KEY_get0_public_key(const EC_KEY *key); +\& int EC_KEY_set_public_key(EC_KEY *key, const EC_POINT *pub); +\& 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_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); +\& int EC_KEY_set_public_key_affine_coordinates(EC_KEY *key, BIGNUM *x, BIGNUM *y); +\& const EC_KEY_METHOD *EC_KEY_get_method(const EC_KEY *key); +\& int EC_KEY_set_method(EC_KEY *key, const EC_KEY_METHOD *meth); +\& +\& int EC_KEY_oct2key(EC_KEY *eckey, const unsigned char *buf, size_t len, BN_CTX *ctx); +\& size_t EC_KEY_key2buf(const EC_KEY *eckey, point_conversion_form_t form, +\& unsigned char **pbuf, BN_CTX *ctx); +\& +\& int EC_KEY_oct2priv(EC_KEY *eckey, const unsigned char *buf, size_t len); +\& size_t EC_KEY_priv2oct(const EC_KEY *eckey, unsigned char *buf, size_t len); +\& +\& size_t EC_KEY_priv2buf(const EC_KEY *eckey, unsigned char **pbuf); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +An \s-1EC_KEY\s0 represents a public key and, optionally, the associated private +key. A new \s-1EC_KEY\s0 with no associated curve can be constructed by calling +\&\fBEC_KEY_new()\fR. The reference count for the newly created \s-1EC_KEY\s0 is initially +set to 1. A curve can be associated with the \s-1EC_KEY\s0 by calling +\&\fBEC_KEY_set_group()\fR. +.PP +Alternatively a new \s-1EC_KEY\s0 can be constructed by calling +\&\fBEC_KEY_new_by_curve_name()\fR and supplying the nid of the associated curve. See +\&\fBEC_GROUP_new\fR\|(3) for a description of curve names. This function simply +wraps calls to \fBEC_KEY_new()\fR and \fBEC_GROUP_new_by_curve_name()\fR. +.PP +Calling \fBEC_KEY_free()\fR decrements the reference count for the \s-1EC_KEY\s0 object, +and if it has dropped to zero then frees the memory associated with it. If +\&\fBkey\fR is \s-1NULL\s0 nothing is done. +.PP +\&\fBEC_KEY_copy()\fR copies the contents of the \s-1EC_KEY\s0 in \fBsrc\fR into \fBdest\fR. +.PP +\&\fBEC_KEY_dup()\fR creates a new \s-1EC_KEY\s0 object and copies \fBec_key\fR into it. +.PP +\&\fBEC_KEY_up_ref()\fR increments the reference count associated with the \s-1EC_KEY\s0 +object. +.PP +\&\fBEC_KEY_get0_engine()\fR returns a handle to the \s-1ENGINE\s0 that has been set for +this \s-1EC_KEY\s0 object. +.PP +\&\fBEC_KEY_generate_key()\fR generates a new public and private key for the supplied +\&\fBeckey\fR object. \fBeckey\fR must have an \s-1EC_GROUP\s0 object associated with it +before calling this function. The private key is a random integer (0 < priv_key +< order, where \fIorder\fR is the order of the \s-1EC_GROUP\s0 object). The public key is +an \s-1EC_POINT\s0 on the curve calculated by multiplying the generator for the +curve by the private key. +.PP +\&\fBEC_KEY_check_key()\fR performs various sanity checks on the \s-1EC_KEY\s0 object to +confirm that it is valid. +.PP +\&\fBEC_KEY_set_public_key_affine_coordinates()\fR sets the public key for \fBkey\fR based +on its affine co-ordinates; i.e., it constructs an \s-1EC_POINT\s0 object based on +the supplied \fBx\fR and \fBy\fR values and sets the public key to be this +\&\s-1EC_POINT.\s0 It also performs certain sanity checks on the key to confirm +that it is valid. +.PP +The functions \fBEC_KEY_get0_group()\fR, \fBEC_KEY_set_group()\fR, +\&\fBEC_KEY_get0_private_key()\fR, \fBEC_KEY_set_private_key()\fR, \fBEC_KEY_get0_public_key()\fR, +and \fBEC_KEY_set_public_key()\fR get and set the \s-1EC_GROUP\s0 object, the private key, +and the \s-1EC_POINT\s0 public key for the \fBkey\fR respectively. +.PP +The functions \fBEC_KEY_get_conv_form()\fR and \fBEC_KEY_set_conv_form()\fR get and set the +point_conversion_form for the \fBkey\fR. For a description of +point_conversion_forms please see \fBEC_POINT_new\fR\|(3). +.PP +\&\fBEC_KEY_set_flags()\fR sets the flags in the \fBflags\fR parameter on the \s-1EC_KEY\s0 +object. Any flags that are already set are left set. The flags currently +defined are \s-1EC_FLAG_NON_FIPS_ALLOW\s0 and \s-1EC_FLAG_FIPS_CHECKED.\s0 In +addition there is the flag \s-1EC_FLAG_COFACTOR_ECDH\s0 which is specific to \s-1ECDH.\s0 +\&\fBEC_KEY_get_flags()\fR returns the current flags that are set for this \s-1EC_KEY.\s0 +\&\fBEC_KEY_clear_flags()\fR clears the flags indicated by the \fBflags\fR parameter; all +other flags are left in their existing state. +.PP +\&\fBEC_KEY_set_asn1_flag()\fR sets the asn1_flag on the underlying \s-1EC_GROUP\s0 object +(if set). Refer to \fBEC_GROUP_copy\fR\|(3) for further information on the +asn1_flag. +.PP +\&\fBEC_KEY_precompute_mult()\fR stores multiples of the underlying \s-1EC_GROUP\s0 generator +for faster point multiplication. See also \fBEC_POINT_add\fR\|(3). +.PP +\&\fBEC_KEY_oct2key()\fR and \fBEC_KEY_key2buf()\fR are identical to the functions +\&\fBEC_POINT_oct2point()\fR and \fBEC_KEY_point2buf()\fR except they use the public key +\&\s-1EC_POINT\s0 in \fBeckey\fR. +.PP +\&\fBEC_KEY_oct2priv()\fR and \fBEC_KEY_priv2oct()\fR convert between the private key +component of \fBeckey\fR and octet form. The octet form consists of the content +octets of the \fBprivateKey\fR \s-1OCTET STRING\s0 in an \fBECPrivateKey\fR \s-1ASN.1\s0 structure. +.PP +The function \fBEC_KEY_priv2oct()\fR must be supplied with a buffer long enough to +store the octet form. The return value provides the number of octets stored. +Calling the function with a \s-1NULL\s0 buffer will not perform the conversion but +will just return the required buffer length. +.PP +The function \fBEC_KEY_priv2buf()\fR allocates a buffer of suitable length and writes +an \s-1EC_KEY\s0 to it in octet format. The allocated buffer is written to \fB*pbuf\fR +and its length is returned. The caller must free up the allocated buffer with a +call to \fBOPENSSL_free()\fR. Since the allocated buffer value is written to \fB*pbuf\fR +the \fBpbuf\fR parameter \fB\s-1MUST NOT\s0\fR be \fB\s-1NULL\s0\fR. +.PP +\&\fBEC_KEY_priv2buf()\fR converts an \s-1EC_KEY\s0 private key into an allocated buffer. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBEC_KEY_new()\fR, \fBEC_KEY_new_by_curve_name()\fR and \fBEC_KEY_dup()\fR return a pointer to +the newly created \s-1EC_KEY\s0 object, or \s-1NULL\s0 on error. +.PP +\&\fBEC_KEY_get_flags()\fR returns the flags associated with the \s-1EC_KEY\s0 object as an +integer. +.PP +\&\fBEC_KEY_copy()\fR returns a pointer to the destination key, or \s-1NULL\s0 on error. +.PP +\&\fBEC_KEY_get0_engine()\fR returns a pointer to an \s-1ENGINE,\s0 or \s-1NULL\s0 if it wasn't set. +.PP +\&\fBEC_KEY_up_ref()\fR, \fBEC_KEY_set_group()\fR, \fBEC_KEY_set_private_key()\fR, +\&\fBEC_KEY_set_public_key()\fR, \fBEC_KEY_precompute_mult()\fR, \fBEC_KEY_generate_key()\fR, +\&\fBEC_KEY_check_key()\fR, \fBEC_KEY_set_public_key_affine_coordinates()\fR, +\&\fBEC_KEY_oct2key()\fR and \fBEC_KEY_oct2priv()\fR return 1 on success or 0 on error. +.PP +\&\fBEC_KEY_get0_group()\fR returns the \s-1EC_GROUP\s0 associated with the \s-1EC_KEY.\s0 +.PP +\&\fBEC_KEY_get0_private_key()\fR returns the private key associated with the \s-1EC_KEY.\s0 +.PP +\&\fBEC_KEY_get_conv_form()\fR return the point_conversion_form for the \s-1EC_KEY.\s0 +.PP +\&\fBEC_KEY_key2buf()\fR, \fBEC_KEY_priv2oct()\fR and \fBEC_KEY_priv2buf()\fR return the length +of the buffer or 0 on error. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBcrypto\fR\|(7), \fBEC_GROUP_new\fR\|(3), +\&\fBEC_GROUP_copy\fR\|(3), \fBEC_POINT_new\fR\|(3), +\&\fBEC_POINT_add\fR\|(3), +\&\fBEC_GFp_simple_method\fR\|(3), +\&\fBd2i_ECPKParameters\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2013\-2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EC_POINT_add.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EC_POINT_add.3 new file mode 100644 index 00000000..763a1095 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EC_POINT_add.3 @@ -0,0 +1,216 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EC_POINT_ADD 3" +.TH EC_POINT_ADD 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EC_POINT_add, EC_POINT_dbl, EC_POINT_invert, EC_POINT_is_at_infinity, EC_POINT_is_on_curve, EC_POINT_cmp, EC_POINT_make_affine, EC_POINTs_make_affine, EC_POINTs_mul, EC_POINT_mul, EC_GROUP_precompute_mult, EC_GROUP_have_precompute_mult \- Functions for performing mathematical operations and tests on EC_POINT objects +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int EC_POINT_add(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a, +\& const EC_POINT *b, BN_CTX *ctx); +\& int EC_POINT_dbl(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a, BN_CTX *ctx); +\& int EC_POINT_invert(const EC_GROUP *group, EC_POINT *a, BN_CTX *ctx); +\& int EC_POINT_is_at_infinity(const EC_GROUP *group, const EC_POINT *p); +\& int EC_POINT_is_on_curve(const EC_GROUP *group, const EC_POINT *point, BN_CTX *ctx); +\& int EC_POINT_cmp(const EC_GROUP *group, const EC_POINT *a, const EC_POINT *b, BN_CTX *ctx); +\& int EC_POINT_make_affine(const EC_GROUP *group, EC_POINT *point, BN_CTX *ctx); +\& int EC_POINTs_make_affine(const EC_GROUP *group, size_t num, +\& EC_POINT *points[], BN_CTX *ctx); +\& int EC_POINTs_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, size_t num, +\& const EC_POINT *p[], const BIGNUM *m[], BN_CTX *ctx); +\& int EC_POINT_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, +\& const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx); +\& int EC_GROUP_precompute_mult(EC_GROUP *group, BN_CTX *ctx); +\& int EC_GROUP_have_precompute_mult(const EC_GROUP *group); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +EC_POINT_add adds the two points \fBa\fR and \fBb\fR and places the result in \fBr\fR. Similarly EC_POINT_dbl doubles the point \fBa\fR and places the +result in \fBr\fR. In both cases it is valid for \fBr\fR to be one of \fBa\fR or \fBb\fR. +.PP +EC_POINT_invert calculates the inverse of the supplied point \fBa\fR. The result is placed back in \fBa\fR. +.PP +The function EC_POINT_is_at_infinity tests whether the supplied point is at infinity or not. +.PP +EC_POINT_is_on_curve tests whether the supplied point is on the curve or not. +.PP +EC_POINT_cmp compares the two supplied points and tests whether or not they are equal. +.PP +The functions EC_POINT_make_affine and EC_POINTs_make_affine force the internal representation of the \s-1EC_POINT\s0(s) into the affine +co-ordinate system. In the case of EC_POINTs_make_affine the value \fBnum\fR provides the number of points in the array \fBpoints\fR to be +forced. +.PP +EC_POINT_mul is a convenient interface to EC_POINTs_mul: it calculates the value generator * \fBn\fR + \fBq\fR * \fBm\fR and stores the result in \fBr\fR. +The value \fBn\fR may be \s-1NULL\s0 in which case the result is just \fBq\fR * \fBm\fR (variable point multiplication). Alternatively, both \fBq\fR and \fBm\fR may be \s-1NULL,\s0 and \fBn\fR non-NULL, in which case the result is just generator * \fBn\fR (fixed point multiplication). +When performing a single fixed or variable point multiplication, the underlying implementation uses a constant time algorithm, when the input scalar (either \fBn\fR or \fBm\fR) is in the range [0, ec_group_order). +.PP +EC_POINTs_mul calculates the value generator * \fBn\fR + \fBq[0]\fR * \fBm[0]\fR + ... + \fBq[num\-1]\fR * \fBm[num\-1]\fR. As for EC_POINT_mul the value \fBn\fR may be \s-1NULL\s0 or \fBnum\fR may be zero. +When performing a fixed point multiplication (\fBn\fR is non-NULL and \fBnum\fR is 0) or a variable point multiplication (\fBn\fR is \s-1NULL\s0 and \fBnum\fR is 1), the underlying implementation uses a constant time algorithm, when the input scalar (either \fBn\fR or \fBm[0]\fR) is in the range [0, ec_group_order). +.PP +The function EC_GROUP_precompute_mult stores multiples of the generator for faster point multiplication, whilst +EC_GROUP_have_precompute_mult tests whether precomputation has already been done. See \fBEC_GROUP_copy\fR\|(3) for information +about the generator. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +The following functions return 1 on success or 0 on error: EC_POINT_add, EC_POINT_dbl, EC_POINT_invert, EC_POINT_make_affine, +EC_POINTs_make_affine, EC_POINTs_make_affine, EC_POINT_mul, EC_POINTs_mul and EC_GROUP_precompute_mult. +.PP +EC_POINT_is_at_infinity returns 1 if the point is at infinity, or 0 otherwise. +.PP +EC_POINT_is_on_curve returns 1 if the point is on the curve, 0 if not, or \-1 on error. +.PP +EC_POINT_cmp returns 1 if the points are not equal, 0 if they are, or \-1 on error. +.PP +EC_GROUP_have_precompute_mult return 1 if a precomputation has been done, or 0 if not. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBcrypto\fR\|(7), \fBEC_GROUP_new\fR\|(3), \fBEC_GROUP_copy\fR\|(3), +\&\fBEC_POINT_new\fR\|(3), \fBEC_KEY_new\fR\|(3), +\&\fBEC_GFp_simple_method\fR\|(3), \fBd2i_ECPKParameters\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2013\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EC_POINT_new.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EC_POINT_new.3 new file mode 100644 index 00000000..238a372a --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EC_POINT_new.3 @@ -0,0 +1,359 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EC_POINT_NEW 3" +.TH EC_POINT_NEW 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EC_POINT_set_Jprojective_coordinates_GFp, EC_POINT_point2buf, EC_POINT_new, EC_POINT_free, EC_POINT_clear_free, EC_POINT_copy, EC_POINT_dup, EC_POINT_method_of, EC_POINT_set_to_infinity, EC_POINT_get_Jprojective_coordinates_GFp, EC_POINT_set_affine_coordinates, EC_POINT_get_affine_coordinates, EC_POINT_set_compressed_coordinates, EC_POINT_set_affine_coordinates_GFp, EC_POINT_get_affine_coordinates_GFp, EC_POINT_set_compressed_coordinates_GFp, EC_POINT_set_affine_coordinates_GF2m, EC_POINT_get_affine_coordinates_GF2m, EC_POINT_set_compressed_coordinates_GF2m, EC_POINT_point2oct, EC_POINT_oct2point, EC_POINT_point2bn, EC_POINT_bn2point, EC_POINT_point2hex, EC_POINT_hex2point \&\- Functions for creating, destroying and manipulating EC_POINT objects +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& EC_POINT *EC_POINT_new(const EC_GROUP *group); +\& void EC_POINT_free(EC_POINT *point); +\& void EC_POINT_clear_free(EC_POINT *point); +\& int EC_POINT_copy(EC_POINT *dst, const EC_POINT *src); +\& EC_POINT *EC_POINT_dup(const EC_POINT *src, const EC_GROUP *group); +\& const EC_METHOD *EC_POINT_method_of(const EC_POINT *point); +\& int EC_POINT_set_to_infinity(const EC_GROUP *group, EC_POINT *point); +\& int EC_POINT_set_Jprojective_coordinates_GFp(const EC_GROUP *group, +\& EC_POINT *p, +\& const BIGNUM *x, const BIGNUM *y, +\& const BIGNUM *z, BN_CTX *ctx); +\& int EC_POINT_get_Jprojective_coordinates_GFp(const EC_GROUP *group, +\& const EC_POINT *p, +\& BIGNUM *x, BIGNUM *y, BIGNUM *z, +\& BN_CTX *ctx); +\& int EC_POINT_set_affine_coordinates(const EC_GROUP *group, EC_POINT *p, +\& const BIGNUM *x, const BIGNUM *y, +\& BN_CTX *ctx); +\& int EC_POINT_get_affine_coordinates(const EC_GROUP *group, const EC_POINT *p, +\& BIGNUM *x, BIGNUM *y, BN_CTX *ctx); +\& int EC_POINT_set_compressed_coordinates(const EC_GROUP *group, EC_POINT *p, +\& const BIGNUM *x, int y_bit, +\& BN_CTX *ctx); +\& int EC_POINT_set_affine_coordinates_GFp(const EC_GROUP *group, EC_POINT *p, +\& const BIGNUM *x, const BIGNUM *y, +\& BN_CTX *ctx); +\& int EC_POINT_get_affine_coordinates_GFp(const EC_GROUP *group, +\& const EC_POINT *p, +\& BIGNUM *x, BIGNUM *y, BN_CTX *ctx); +\& int EC_POINT_set_compressed_coordinates_GFp(const EC_GROUP *group, +\& EC_POINT *p, +\& const BIGNUM *x, int y_bit, +\& BN_CTX *ctx); +\& int EC_POINT_set_affine_coordinates_GF2m(const EC_GROUP *group, EC_POINT *p, +\& const BIGNUM *x, const BIGNUM *y, +\& BN_CTX *ctx); +\& int EC_POINT_get_affine_coordinates_GF2m(const EC_GROUP *group, +\& const EC_POINT *p, +\& BIGNUM *x, BIGNUM *y, BN_CTX *ctx); +\& int EC_POINT_set_compressed_coordinates_GF2m(const EC_GROUP *group, +\& EC_POINT *p, +\& const BIGNUM *x, int y_bit, +\& BN_CTX *ctx); +\& size_t EC_POINT_point2oct(const EC_GROUP *group, const EC_POINT *p, +\& point_conversion_form_t form, +\& unsigned char *buf, size_t len, BN_CTX *ctx); +\& size_t EC_POINT_point2buf(const EC_GROUP *group, const EC_POINT *point, +\& point_conversion_form_t form, +\& unsigned char **pbuf, BN_CTX *ctx); +\& int EC_POINT_oct2point(const EC_GROUP *group, EC_POINT *p, +\& const unsigned char *buf, size_t len, BN_CTX *ctx); +\& BIGNUM *EC_POINT_point2bn(const EC_GROUP *group, const EC_POINT *p, +\& point_conversion_form_t form, BIGNUM *bn, +\& BN_CTX *ctx); +\& EC_POINT *EC_POINT_bn2point(const EC_GROUP *group, const BIGNUM *bn, +\& EC_POINT *p, BN_CTX *ctx); +\& char *EC_POINT_point2hex(const EC_GROUP *group, const EC_POINT *p, +\& point_conversion_form_t form, BN_CTX *ctx); +\& EC_POINT *EC_POINT_hex2point(const EC_GROUP *group, const char *hex, +\& EC_POINT *p, BN_CTX *ctx); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +An \fB\s-1EC_POINT\s0\fR structure represents a point on a curve. A new point is +constructed by calling the function \fBEC_POINT_new()\fR and providing the +\&\fBgroup\fR object that the point relates to. +.PP +\&\fBEC_POINT_free()\fR frees the memory associated with the \fB\s-1EC_POINT\s0\fR. +if \fBpoint\fR is \s-1NULL\s0 nothing is done. +.PP +\&\fBEC_POINT_clear_free()\fR destroys any sensitive data held within the \s-1EC_POINT\s0 and +then frees its memory. If \fBpoint\fR is \s-1NULL\s0 nothing is done. +.PP +\&\fBEC_POINT_copy()\fR copies the point \fBsrc\fR into \fBdst\fR. Both \fBsrc\fR and \fBdst\fR +must use the same \fB\s-1EC_METHOD\s0\fR. +.PP +\&\fBEC_POINT_dup()\fR creates a new \fB\s-1EC_POINT\s0\fR object and copies the content from +\&\fBsrc\fR to the newly created \fB\s-1EC_POINT\s0\fR object. +.PP +\&\fBEC_POINT_method_of()\fR obtains the \fB\s-1EC_METHOD\s0\fR associated with \fBpoint\fR. +.PP +A valid point on a curve is the special point at infinity. A point is set to +be at infinity by calling \fBEC_POINT_set_to_infinity()\fR. +.PP +The affine co-ordinates for a point describe a point in terms of its x and y +position. The function \fBEC_POINT_set_affine_coordinates()\fR sets the \fBx\fR and \fBy\fR +co-ordinates for the point \fBp\fR defined over the curve given in \fBgroup\fR. The +function \fBEC_POINT_get_affine_coordinates()\fR sets \fBx\fR and \fBy\fR, either of which +may be \s-1NULL,\s0 to the corresponding coordinates of \fBp\fR. +.PP +The functions \fBEC_POINT_set_affine_coordinates_GFp()\fR and +\&\fBEC_POINT_set_affine_coordinates_GF2m()\fR are synonyms for +\&\fBEC_POINT_set_affine_coordinates()\fR. They are defined for backwards compatibility +only and should not be used. +.PP +The functions \fBEC_POINT_get_affine_coordinates_GFp()\fR and +\&\fBEC_POINT_get_affine_coordinates_GF2m()\fR are synonyms for +\&\fBEC_POINT_get_affine_coordinates()\fR. They are defined for backwards compatibility +only and should not be used. +.PP +As well as the affine co-ordinates, a point can alternatively be described in +terms of its Jacobian projective co-ordinates (for Fp curves only). Jacobian +projective co-ordinates are expressed as three values x, y and z. Working in +this co-ordinate system provides more efficient point multiplication +operations. A mapping exists between Jacobian projective co-ordinates and +affine co-ordinates. A Jacobian projective co-ordinate (x, y, z) can be written +as an affine co-ordinate as (x/(z^2), y/(z^3)). Conversion to Jacobian +projective from affine co-ordinates is simple. The co-ordinate (x, y) is mapped +to (x, y, 1). To set or get the projective co-ordinates use +\&\fBEC_POINT_set_Jprojective_coordinates_GFp()\fR and +\&\fBEC_POINT_get_Jprojective_coordinates_GFp()\fR respectively. +.PP +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 +using the \fBEC_POINT_set_compressed_coordinates()\fR function where \fBx\fR is the x +co-ordinate and \fBy_bit\fR is a value 0 or 1 to identify which of the two +possible values for y should be used. +.PP +The functions \fBEC_POINT_set_compressed_coordinates_GFp()\fR and +\&\fBEC_POINT_set_compressed_coordinates_GF2m()\fR are synonyms for +\&\fBEC_POINT_set_compressed_coordinates()\fR. They are defined for backwards +compatibility only and should not be used. +.PP +In addition \fB\s-1EC_POINT\s0\fR can be converted to and from various external +representations. The octet form is the binary encoding of the \fBECPoint\fR +structure (as defined in \s-1RFC5480\s0 and used in certificates and \s-1TLS\s0 records): +only the content octets are present, the \fB\s-1OCTET STRING\s0\fR tag and length are +not included. \fB\s-1BIGNUM\s0\fR form is the octet form interpreted as a big endian +integer converted to a \fB\s-1BIGNUM\s0\fR structure. Hexadecimal form is the octet +form converted to a \s-1NULL\s0 terminated character string where each character +is one of the printable values 0\-9 or A\-F (or a\-f). +.PP +The functions \fBEC_POINT_point2oct()\fR, \fBEC_POINT_oct2point()\fR, \fBEC_POINT_point2bn()\fR, +\&\fBEC_POINT_bn2point()\fR, \fBEC_POINT_point2hex()\fR and \fBEC_POINT_hex2point()\fR convert from +and to EC_POINTs for the formats: octet, \s-1BIGNUM\s0 and hexadecimal respectively. +.PP +The function \fBEC_POINT_point2oct()\fR encodes the given curve point \fBp\fR as an +octet string into the buffer \fBbuf\fR of size \fBlen\fR, using the specified +conversion form \fBform\fR. +The encoding conforms with Sec. 2.3.3 of the \s-1SECG SEC 1\s0 (\*(L"Elliptic Curve +Cryptography\*(R") standard. +Similarly the function \fBEC_POINT_oct2point()\fR decodes a curve point into \fBp\fR from +the octet string contained in the given buffer \fBbuf\fR of size \fBlen\fR, conforming +to Sec. 2.3.4 of the \s-1SECG SEC 1\s0 (\*(L"Elliptic Curve Cryptography\*(R") standard. +.PP +The functions \fBEC_POINT_point2hex()\fR and \fBEC_POINT_point2bn()\fR convert a point \fBp\fR, +respectively, to the hexadecimal or \s-1BIGNUM\s0 representation of the same +encoding of the function \fBEC_POINT_point2oct()\fR. +Vice versa, similarly to the function \fBEC_POINT_oct2point()\fR, the functions +\&\fBEC_POINT_hex2point()\fR and \fBEC_POINT_point2bn()\fR decode the hexadecimal or +\&\s-1BIGNUM\s0 representation into the \s-1EC_POINT\s0 \fBp\fR. +.PP +Notice that, according to the standard, the octet string encoding of the point +at infinity for a given curve is fixed to a single octet of value zero and that, +vice versa, a single octet of size zero is decoded as the point at infinity. +.PP +The function \fBEC_POINT_point2oct()\fR must be supplied with a buffer long enough to +store the octet form. The return value provides the number of octets stored. +Calling the function with a \s-1NULL\s0 buffer will not perform the conversion but +will still return the required buffer length. +.PP +The function \fBEC_POINT_point2buf()\fR allocates a buffer of suitable length and +writes an \s-1EC_POINT\s0 to it in octet format. The allocated buffer is written to +\&\fB*pbuf\fR and its length is returned. The caller must free up the allocated +buffer with a call to \fBOPENSSL_free()\fR. Since the allocated buffer value is +written to \fB*pbuf\fR the \fBpbuf\fR parameter \fB\s-1MUST NOT\s0\fR be \fB\s-1NULL\s0\fR. +.PP +The function \fBEC_POINT_point2hex()\fR will allocate sufficient memory to store the +hexadecimal string. It is the caller's responsibility to free this memory with +a subsequent call to \fBOPENSSL_free()\fR. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBEC_POINT_new()\fR and \fBEC_POINT_dup()\fR return the newly allocated \s-1EC_POINT\s0 or \s-1NULL\s0 +on error. +.PP +The following functions return 1 on success or 0 on error: \fBEC_POINT_copy()\fR, +\&\fBEC_POINT_set_to_infinity()\fR, \fBEC_POINT_set_Jprojective_coordinates_GFp()\fR, +\&\fBEC_POINT_get_Jprojective_coordinates_GFp()\fR, +\&\fBEC_POINT_set_affine_coordinates_GFp()\fR, \fBEC_POINT_get_affine_coordinates_GFp()\fR, +\&\fBEC_POINT_set_compressed_coordinates_GFp()\fR, +\&\fBEC_POINT_set_affine_coordinates_GF2m()\fR, \fBEC_POINT_get_affine_coordinates_GF2m()\fR, +\&\fBEC_POINT_set_compressed_coordinates_GF2m()\fR and \fBEC_POINT_oct2point()\fR. +.PP +EC_POINT_method_of returns the \s-1EC_METHOD\s0 associated with the supplied \s-1EC_POINT.\s0 +.PP +\&\fBEC_POINT_point2oct()\fR and \fBEC_POINT_point2buf()\fR return the length of the required +buffer or 0 on error. +.PP +\&\fBEC_POINT_point2bn()\fR returns the pointer to the \s-1BIGNUM\s0 supplied, or \s-1NULL\s0 on +error. +.PP +\&\fBEC_POINT_bn2point()\fR returns the pointer to the \s-1EC_POINT\s0 supplied, or \s-1NULL\s0 on +error. +.PP +\&\fBEC_POINT_point2hex()\fR returns a pointer to the hex string, or \s-1NULL\s0 on error. +.PP +\&\fBEC_POINT_hex2point()\fR returns the pointer to the \s-1EC_POINT\s0 supplied, or \s-1NULL\s0 on +error. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBcrypto\fR\|(7), \fBEC_GROUP_new\fR\|(3), \fBEC_GROUP_copy\fR\|(3), +\&\fBEC_POINT_add\fR\|(3), \fBEC_KEY_new\fR\|(3), +\&\fBEC_GFp_simple_method\fR\|(3), \fBd2i_ECPKParameters\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2013\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ENGINE_add.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ENGINE_add.3 new file mode 100644 index 00000000..369d8e25 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ENGINE_add.3 @@ -0,0 +1,767 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "ENGINE_ADD 3" +.TH ENGINE_ADD 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +ENGINE_get_DH, ENGINE_get_DSA, ENGINE_by_id, ENGINE_get_cipher_engine, ENGINE_get_default_DH, ENGINE_get_default_DSA, ENGINE_get_default_RAND, ENGINE_get_default_RSA, ENGINE_get_digest_engine, ENGINE_get_first, ENGINE_get_last, ENGINE_get_next, ENGINE_get_prev, ENGINE_new, ENGINE_get_ciphers, ENGINE_get_ctrl_function, ENGINE_get_digests, ENGINE_get_destroy_function, ENGINE_get_finish_function, ENGINE_get_init_function, ENGINE_get_load_privkey_function, ENGINE_get_load_pubkey_function, ENGINE_load_private_key, ENGINE_load_public_key, ENGINE_get_RAND, ENGINE_get_RSA, ENGINE_get_id, ENGINE_get_name, ENGINE_get_cmd_defns, ENGINE_get_cipher, ENGINE_get_digest, ENGINE_add, ENGINE_cmd_is_executable, ENGINE_ctrl, ENGINE_ctrl_cmd, ENGINE_ctrl_cmd_string, ENGINE_finish, ENGINE_free, ENGINE_get_flags, ENGINE_init, ENGINE_register_DH, ENGINE_register_DSA, ENGINE_register_RAND, ENGINE_register_RSA, ENGINE_register_all_complete, ENGINE_register_ciphers, ENGINE_register_complete, ENGINE_register_digests, ENGINE_remove, ENGINE_set_DH, ENGINE_set_DSA, ENGINE_set_RAND, ENGINE_set_RSA, ENGINE_set_ciphers, ENGINE_set_cmd_defns, ENGINE_set_ctrl_function, ENGINE_set_default, ENGINE_set_default_DH, ENGINE_set_default_DSA, ENGINE_set_default_RAND, ENGINE_set_default_RSA, ENGINE_set_default_ciphers, ENGINE_set_default_digests, ENGINE_set_default_string, ENGINE_set_destroy_function, ENGINE_set_digests, ENGINE_set_finish_function, ENGINE_set_flags, ENGINE_set_id, ENGINE_set_init_function, ENGINE_set_load_privkey_function, ENGINE_set_load_pubkey_function, ENGINE_set_name, ENGINE_up_ref, ENGINE_get_table_flags, ENGINE_cleanup, ENGINE_load_builtin_engines, ENGINE_register_all_DH, ENGINE_register_all_DSA, ENGINE_register_all_RAND, ENGINE_register_all_RSA, ENGINE_register_all_ciphers, ENGINE_register_all_digests, ENGINE_set_table_flags, ENGINE_unregister_DH, ENGINE_unregister_DSA, ENGINE_unregister_RAND, ENGINE_unregister_RSA, ENGINE_unregister_ciphers, ENGINE_unregister_digests \&\- ENGINE cryptographic module support +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& ENGINE *ENGINE_get_first(void); +\& ENGINE *ENGINE_get_last(void); +\& ENGINE *ENGINE_get_next(ENGINE *e); +\& ENGINE *ENGINE_get_prev(ENGINE *e); +\& +\& int ENGINE_add(ENGINE *e); +\& int ENGINE_remove(ENGINE *e); +\& +\& ENGINE *ENGINE_by_id(const char *id); +\& +\& int ENGINE_init(ENGINE *e); +\& int ENGINE_finish(ENGINE *e); +\& +\& void ENGINE_load_builtin_engines(void); +\& +\& ENGINE *ENGINE_get_default_RSA(void); +\& ENGINE *ENGINE_get_default_DSA(void); +\& ENGINE *ENGINE_get_default_DH(void); +\& ENGINE *ENGINE_get_default_RAND(void); +\& ENGINE *ENGINE_get_cipher_engine(int nid); +\& ENGINE *ENGINE_get_digest_engine(int nid); +\& +\& int ENGINE_set_default_RSA(ENGINE *e); +\& int ENGINE_set_default_DSA(ENGINE *e); +\& int ENGINE_set_default_DH(ENGINE *e); +\& int ENGINE_set_default_RAND(ENGINE *e); +\& int ENGINE_set_default_ciphers(ENGINE *e); +\& int ENGINE_set_default_digests(ENGINE *e); +\& int ENGINE_set_default_string(ENGINE *e, const char *list); +\& +\& int ENGINE_set_default(ENGINE *e, unsigned int flags); +\& +\& unsigned int ENGINE_get_table_flags(void); +\& void ENGINE_set_table_flags(unsigned int flags); +\& +\& int ENGINE_register_RSA(ENGINE *e); +\& void ENGINE_unregister_RSA(ENGINE *e); +\& void ENGINE_register_all_RSA(void); +\& int ENGINE_register_DSA(ENGINE *e); +\& void ENGINE_unregister_DSA(ENGINE *e); +\& void ENGINE_register_all_DSA(void); +\& int ENGINE_register_DH(ENGINE *e); +\& void ENGINE_unregister_DH(ENGINE *e); +\& void ENGINE_register_all_DH(void); +\& int ENGINE_register_RAND(ENGINE *e); +\& void ENGINE_unregister_RAND(ENGINE *e); +\& void ENGINE_register_all_RAND(void); +\& int ENGINE_register_ciphers(ENGINE *e); +\& void ENGINE_unregister_ciphers(ENGINE *e); +\& void ENGINE_register_all_ciphers(void); +\& int ENGINE_register_digests(ENGINE *e); +\& void ENGINE_unregister_digests(ENGINE *e); +\& void ENGINE_register_all_digests(void); +\& int ENGINE_register_complete(ENGINE *e); +\& int ENGINE_register_all_complete(void); +\& +\& int ENGINE_ctrl(ENGINE *e, int cmd, long i, void *p, void (*f)(void)); +\& int ENGINE_cmd_is_executable(ENGINE *e, int cmd); +\& int ENGINE_ctrl_cmd(ENGINE *e, const char *cmd_name, +\& long i, void *p, void (*f)(void), int cmd_optional); +\& int ENGINE_ctrl_cmd_string(ENGINE *e, const char *cmd_name, const char *arg, +\& int cmd_optional); +\& +\& ENGINE *ENGINE_new(void); +\& int ENGINE_free(ENGINE *e); +\& int ENGINE_up_ref(ENGINE *e); +\& +\& int ENGINE_set_id(ENGINE *e, const char *id); +\& int ENGINE_set_name(ENGINE *e, const char *name); +\& int ENGINE_set_RSA(ENGINE *e, const RSA_METHOD *rsa_meth); +\& int ENGINE_set_DSA(ENGINE *e, const DSA_METHOD *dsa_meth); +\& int ENGINE_set_DH(ENGINE *e, const DH_METHOD *dh_meth); +\& int ENGINE_set_RAND(ENGINE *e, const RAND_METHOD *rand_meth); +\& int ENGINE_set_destroy_function(ENGINE *e, ENGINE_GEN_INT_FUNC_PTR destroy_f); +\& int ENGINE_set_init_function(ENGINE *e, ENGINE_GEN_INT_FUNC_PTR init_f); +\& int ENGINE_set_finish_function(ENGINE *e, ENGINE_GEN_INT_FUNC_PTR finish_f); +\& int ENGINE_set_ctrl_function(ENGINE *e, ENGINE_CTRL_FUNC_PTR ctrl_f); +\& int ENGINE_set_load_privkey_function(ENGINE *e, ENGINE_LOAD_KEY_PTR loadpriv_f); +\& int ENGINE_set_load_pubkey_function(ENGINE *e, ENGINE_LOAD_KEY_PTR loadpub_f); +\& int ENGINE_set_ciphers(ENGINE *e, ENGINE_CIPHERS_PTR f); +\& int ENGINE_set_digests(ENGINE *e, ENGINE_DIGESTS_PTR f); +\& int ENGINE_set_flags(ENGINE *e, int flags); +\& int ENGINE_set_cmd_defns(ENGINE *e, const ENGINE_CMD_DEFN *defns); +\& +\& const char *ENGINE_get_id(const ENGINE *e); +\& const char *ENGINE_get_name(const ENGINE *e); +\& const RSA_METHOD *ENGINE_get_RSA(const ENGINE *e); +\& const DSA_METHOD *ENGINE_get_DSA(const ENGINE *e); +\& const DH_METHOD *ENGINE_get_DH(const ENGINE *e); +\& const RAND_METHOD *ENGINE_get_RAND(const ENGINE *e); +\& ENGINE_GEN_INT_FUNC_PTR ENGINE_get_destroy_function(const ENGINE *e); +\& ENGINE_GEN_INT_FUNC_PTR ENGINE_get_init_function(const ENGINE *e); +\& ENGINE_GEN_INT_FUNC_PTR ENGINE_get_finish_function(const ENGINE *e); +\& ENGINE_CTRL_FUNC_PTR ENGINE_get_ctrl_function(const ENGINE *e); +\& ENGINE_LOAD_KEY_PTR ENGINE_get_load_privkey_function(const ENGINE *e); +\& ENGINE_LOAD_KEY_PTR ENGINE_get_load_pubkey_function(const ENGINE *e); +\& ENGINE_CIPHERS_PTR ENGINE_get_ciphers(const ENGINE *e); +\& ENGINE_DIGESTS_PTR ENGINE_get_digests(const ENGINE *e); +\& const EVP_CIPHER *ENGINE_get_cipher(ENGINE *e, int nid); +\& const EVP_MD *ENGINE_get_digest(ENGINE *e, int nid); +\& int ENGINE_get_flags(const ENGINE *e); +\& const ENGINE_CMD_DEFN *ENGINE_get_cmd_defns(const ENGINE *e); +\& +\& EVP_PKEY *ENGINE_load_private_key(ENGINE *e, const char *key_id, +\& UI_METHOD *ui_method, void *callback_data); +\& EVP_PKEY *ENGINE_load_public_key(ENGINE *e, const char *key_id, +\& UI_METHOD *ui_method, void *callback_data); +.Ve +.PP +Deprecated: +.PP +.Vb 3 +\& #if OPENSSL_API_COMPAT < 0x10100000L +\& void ENGINE_cleanup(void) +\& #endif +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +These functions create, manipulate, and use cryptographic modules in the +form of \fB\s-1ENGINE\s0\fR objects. These objects act as containers for +implementations of cryptographic algorithms, and support a +reference-counted mechanism to allow them to be dynamically loaded in and +out of the running application. +.PP +The cryptographic functionality that can be provided by an \fB\s-1ENGINE\s0\fR +implementation includes the following abstractions; +.PP +.Vb 6 +\& RSA_METHOD \- for providing alternative RSA implementations +\& DSA_METHOD, DH_METHOD, RAND_METHOD, ECDH_METHOD, ECDSA_METHOD, +\& \- similarly for other OpenSSL APIs +\& EVP_CIPHER \- potentially multiple cipher algorithms (indexed by \*(Aqnid\*(Aq) +\& EVP_DIGEST \- potentially multiple hash algorithms (indexed by \*(Aqnid\*(Aq) +\& key\-loading \- loading public and/or private EVP_PKEY keys +.Ve +.SS "Reference counting and handles" +.IX Subsection "Reference counting and handles" +Due to the modular nature of the \s-1ENGINE API,\s0 pointers to ENGINEs need to be +treated as handles \- ie. not only as pointers, but also as references to +the underlying \s-1ENGINE\s0 object. Ie. one should obtain a new reference when +making copies of an \s-1ENGINE\s0 pointer if the copies will be used (and +released) independently. +.PP +\&\s-1ENGINE\s0 objects have two levels of reference-counting to match the way in +which the objects are used. At the most basic level, each \s-1ENGINE\s0 pointer is +inherently a \fBstructural\fR reference \- a structural reference is required +to use the pointer value at all, as this kind of reference is a guarantee +that the structure can not be deallocated until the reference is released. +.PP +However, a structural reference provides no guarantee that the \s-1ENGINE\s0 is +initialised and able to use any of its cryptographic +implementations. Indeed it's quite possible that most ENGINEs will not +initialise at all in typical environments, as ENGINEs are typically used to +support specialised hardware. To use an \s-1ENGINE\s0's functionality, you need a +\&\fBfunctional\fR reference. This kind of reference can be considered a +specialised form of structural reference, because each functional reference +implicitly contains a structural reference as well \- however to avoid +difficult-to-find programming bugs, it is recommended to treat the two +kinds of reference independently. If you have a functional reference to an +\&\s-1ENGINE,\s0 you have a guarantee that the \s-1ENGINE\s0 has been initialised and +is ready to perform cryptographic operations, and will remain initialised +until after you have released your reference. +.PP +\&\fIStructural references\fR +.PP +This basic type of reference is used for instantiating new ENGINEs, +iterating across OpenSSL's internal linked-list of loaded +ENGINEs, reading information about an \s-1ENGINE,\s0 etc. Essentially a structural +reference is sufficient if you only need to query or manipulate the data of +an \s-1ENGINE\s0 implementation rather than use its functionality. +.PP +The \fBENGINE_new()\fR function returns a structural reference to a new (empty) +\&\s-1ENGINE\s0 object. There are other \s-1ENGINE API\s0 functions that return structural +references such as; \fBENGINE_by_id()\fR, \fBENGINE_get_first()\fR, \fBENGINE_get_last()\fR, +\&\fBENGINE_get_next()\fR, \fBENGINE_get_prev()\fR. All structural references should be +released by a corresponding to call to the \fBENGINE_free()\fR function \- the +\&\s-1ENGINE\s0 object itself will only actually be cleaned up and deallocated when +the last structural reference is released. +.PP +It should also be noted that many \s-1ENGINE API\s0 function calls that accept a +structural reference will internally obtain another reference \- typically +this happens whenever the supplied \s-1ENGINE\s0 will be needed by OpenSSL after +the function has returned. Eg. the function to add a new \s-1ENGINE\s0 to +OpenSSL's internal list is \fBENGINE_add()\fR \- if this function returns success, +then OpenSSL will have stored a new structural reference internally so the +caller is still responsible for freeing their own reference with +\&\fBENGINE_free()\fR when they are finished with it. In a similar way, some +functions will automatically release the structural reference passed to it +if part of the function's job is to do so. Eg. the \fBENGINE_get_next()\fR and +\&\fBENGINE_get_prev()\fR functions are used for iterating across the internal +\&\s-1ENGINE\s0 list \- they will return a new structural reference to the next (or +previous) \s-1ENGINE\s0 in the list or \s-1NULL\s0 if at the end (or beginning) of the +list, but in either case the structural reference passed to the function is +released on behalf of the caller. +.PP +To clarify a particular function's handling of references, one should +always consult that function's documentation \*(L"man\*(R" page, or failing that +the openssl/engine.h header file includes some hints. +.PP +\&\fIFunctional references\fR +.PP +As mentioned, functional references exist when the cryptographic +functionality of an \s-1ENGINE\s0 is required to be available. A functional +reference can be obtained in one of two ways; from an existing structural +reference to the required \s-1ENGINE,\s0 or by asking OpenSSL for the default +operational \s-1ENGINE\s0 for a given cryptographic purpose. +.PP +To obtain a functional reference from an existing structural reference, +call the \fBENGINE_init()\fR function. This returns zero if the \s-1ENGINE\s0 was not +already operational and couldn't be successfully initialised (eg. lack of +system drivers, no special hardware attached, etc), otherwise it will +return non-zero to indicate that the \s-1ENGINE\s0 is now operational and will +have allocated a new \fBfunctional\fR reference to the \s-1ENGINE.\s0 All functional +references are released by calling \fBENGINE_finish()\fR (which removes the +implicit structural reference as well). +.PP +The second way to get a functional reference is by asking OpenSSL for a +default implementation for a given task, eg. by \fBENGINE_get_default_RSA()\fR, +\&\fBENGINE_get_default_cipher_engine()\fR, 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 +algorithm-specific types in OpenSSL, such as \s-1RSA, DSA, EVP_CIPHER_CTX,\s0 etc. +.SS "Default implementations" +.IX Subsection "Default implementations" +For each supported abstraction, the \s-1ENGINE\s0 code maintains an internal table +of state to control which implementations are available for a given +abstraction and which should be used by default. These implementations are +registered in the tables and indexed by an 'nid' value, because +abstractions like \s-1EVP_CIPHER\s0 and \s-1EVP_DIGEST\s0 support many distinct +algorithms and modes, and ENGINEs can support arbitrarily many of them. +In the case of other abstractions like \s-1RSA, DSA,\s0 etc, there is only one +\&\*(L"algorithm\*(R" so all implementations implicitly register using the same 'nid' +index. +.PP +When a default \s-1ENGINE\s0 is requested for a given abstraction/algorithm/mode, (eg. +when calling RSA_new_method(\s-1NULL\s0)), a \*(L"get_default\*(R" call will be made to the +\&\s-1ENGINE\s0 subsystem to process the corresponding state table and return a +functional reference to an initialised \s-1ENGINE\s0 whose implementation should be +used. If no \s-1ENGINE\s0 should (or can) be used, it will return \s-1NULL\s0 and the caller +will operate with a \s-1NULL ENGINE\s0 handle \- this usually equates to using the +conventional software implementation. In the latter case, OpenSSL will from +then on behave the way it used to before the \s-1ENGINE API\s0 existed. +.PP +Each state table has a flag to note whether it has processed this +\&\*(L"get_default\*(R" query since the table was last modified, because to process +this question it must iterate across all the registered ENGINEs in the +table trying to initialise each of them in turn, in case one of them is +operational. If it returns a functional reference to an \s-1ENGINE,\s0 it will +also cache another reference to speed up processing future queries (without +needing to iterate across the table). Likewise, it will cache a \s-1NULL\s0 +response if no \s-1ENGINE\s0 was available so that future queries won't repeat the +same iteration unless the state table changes. This behaviour can also be +changed; if the \s-1ENGINE_TABLE_FLAG_NOINIT\s0 flag is set (using +\&\fBENGINE_set_table_flags()\fR), no attempted initialisations will take place, +instead the only way for the state table to return a non-NULL \s-1ENGINE\s0 to the +\&\*(L"get_default\*(R" query will be if one is expressly set in the table. Eg. +\&\fBENGINE_set_default_RSA()\fR does the same job as \fBENGINE_register_RSA()\fR except +that it also sets the state table's cached response for the \*(L"get_default\*(R" +query. In the case of abstractions like \s-1EVP_CIPHER,\s0 where implementations are +indexed by 'nid', these flags and cached-responses are distinct for each 'nid' +value. +.SS "Application requirements" +.IX Subsection "Application requirements" +This section will explain the basic things an application programmer should +support to make the most useful elements of the \s-1ENGINE\s0 functionality +available to the user. The first thing to consider is whether the +programmer wishes to make alternative \s-1ENGINE\s0 modules available to the +application and user. OpenSSL maintains an internal linked list of +\&\*(L"visible\*(R" ENGINEs from which it has to operate \- at start-up, this list is +empty and in fact if an application does not call any \s-1ENGINE API\s0 calls and +it uses static linking against openssl, then the resulting application +binary will not contain any alternative \s-1ENGINE\s0 code at all. So the first +consideration is whether any/all available \s-1ENGINE\s0 implementations should be +made visible to OpenSSL \- this is controlled by calling the various \*(L"load\*(R" +functions. +.PP +The fact that ENGINEs are made visible to OpenSSL (and thus are linked into +the program and loaded into memory at run-time) does not mean they are +\&\*(L"registered\*(R" or called into use by OpenSSL automatically \- that behaviour +is something for the application to control. Some applications +will want to allow the user to specify exactly which \s-1ENGINE\s0 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 \s-1ENGINE\s0 that is able to +successfully initialise \- ie. 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 +couple of simple cases and leave developers to consider these and the +source code to openssl's builtin utilities as guides. +.PP +If no \s-1ENGINE API\s0 functions are called within an application, then OpenSSL +will not allocate any internal resources. Prior to OpenSSL 1.1.0, however, +if any ENGINEs are loaded, even if not registered or used, it was necessary to +call \fBENGINE_cleanup()\fR before the program exits. +.PP +\&\fIUsing a specific \s-1ENGINE\s0 implementation\fR +.PP +Here we'll assume an application has been configured by its user or admin +to want to use the \*(L"\s-1ACME\*(R" ENGINE\s0 if it is available in the version of +OpenSSL the application was compiled with. If it is available, it should be +used by default for all \s-1RSA, DSA,\s0 and symmetric cipher operations, otherwise +OpenSSL should use its builtin software as per usual. The following code +illustrates how to approach this; +.PP +.Vb 10 +\& ENGINE *e; +\& const char *engine_id = "ACME"; +\& ENGINE_load_builtin_engines(); +\& e = ENGINE_by_id(engine_id); +\& if (!e) +\& /* the engine isn\*(Aqt available */ +\& return; +\& if (!ENGINE_init(e)) { +\& /* the engine couldn\*(Aqt initialise, release \*(Aqe\*(Aq */ +\& ENGINE_free(e); +\& return; +\& } +\& if (!ENGINE_set_default_RSA(e)) +\& /* +\& * This should only happen when \*(Aqe\*(Aq can\*(Aqt initialise, but the previous +\& * statement suggests it did. +\& */ +\& abort(); +\& ENGINE_set_default_DSA(e); +\& ENGINE_set_default_ciphers(e); +\& /* Release the functional reference from ENGINE_init() */ +\& ENGINE_finish(e); +\& /* Release the structural reference from ENGINE_by_id() */ +\& ENGINE_free(e); +.Ve +.PP +\&\fIAutomatically using builtin \s-1ENGINE\s0 implementations\fR +.PP +Here we'll assume we want to load and register all \s-1ENGINE\s0 implementations +bundled with OpenSSL, such that for any cryptographic algorithm required by +OpenSSL \- if there is an \s-1ENGINE\s0 that implements it and can be initialised, +it should be used. The following code illustrates how this can work; +.PP +.Vb 4 +\& /* Load all bundled ENGINEs into memory and make them visible */ +\& ENGINE_load_builtin_engines(); +\& /* Register all of them for every algorithm they collectively implement */ +\& ENGINE_register_all_complete(); +.Ve +.PP +That's all that's required. Eg. the next time OpenSSL tries to set up an +\&\s-1RSA\s0 key, any bundled ENGINEs that implement \s-1RSA_METHOD\s0 will be passed to +\&\fBENGINE_init()\fR and if any of those succeed, that \s-1ENGINE\s0 will be set as the +default for \s-1RSA\s0 use from then on. +.SS "Advanced configuration support" +.IX Subsection "Advanced configuration support" +There is a mechanism supported by the \s-1ENGINE\s0 framework that allows each +\&\s-1ENGINE\s0 implementation to define an arbitrary set of configuration +\&\*(L"commands\*(R" and expose them to OpenSSL and any applications based on +OpenSSL. This mechanism is entirely based on the use of name-value pairs +and assumes \s-1ASCII\s0 input (no unicode or \s-1UTF\s0 for now!), so it is ideal if +applications want to provide a transparent way for users to provide +arbitrary configuration \*(L"directives\*(R" directly to such ENGINEs. It is also +possible for the application to dynamically interrogate the loaded \s-1ENGINE\s0 +implementations for the names, descriptions, and input flags of their +available \*(L"control commands\*(R", providing a more flexible configuration +scheme. However, if the user is expected to know which \s-1ENGINE\s0 device he/she +is using (in the case of specialised hardware, this goes without saying) +then applications may not need to concern themselves with discovering the +supported control commands and simply prefer to pass settings into ENGINEs +exactly as they are provided by the user. +.PP +Before illustrating how control commands work, it is worth mentioning what +they are typically used for. Broadly speaking there are two uses for +control commands; the first is to provide the necessary details to the +implementation (which may know nothing at all specific to the host system) +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 \s-1ENGINE\s0 \fBbefore\fR attempting to initialise it, ie. before +calling \fBENGINE_init()\fR. 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 \fBENGINE_init()\fR, or +in some cases both. \s-1ENGINE\s0 implementations should provide indications of +this in the descriptions attached to builtin control commands and/or in +external product documentation. +.PP +\&\fIIssuing control commands to an \s-1ENGINE\s0\fR +.PP +Let's illustrate by example; a function for which the caller supplies the +name of the \s-1ENGINE\s0 it wishes to use, a table of string-pairs for use before +initialisation, and another table for use after initialisation. Note that +the string-pairs used for control commands consist of a command \*(L"name\*(R" +followed by the command \*(L"parameter\*(R" \- the parameter could be \s-1NULL\s0 in some +cases but the name can not. This function should initialise the \s-1ENGINE\s0 +(issuing the \*(L"pre\*(R" commands beforehand and the \*(L"post\*(R" commands afterwards) +and set it as the default for everything except \s-1RAND\s0 and then return a +boolean success or failure. +.PP +.Vb 10 +\& int generic_load_engine_fn(const char *engine_id, +\& const char **pre_cmds, int pre_num, +\& const char **post_cmds, int post_num) +\& { +\& ENGINE *e = ENGINE_by_id(engine_id); +\& if (!e) return 0; +\& while (pre_num\-\-) { +\& if (!ENGINE_ctrl_cmd_string(e, pre_cmds[0], pre_cmds[1], 0)) { +\& fprintf(stderr, "Failed command (%s \- %s:%s)\en", engine_id, +\& pre_cmds[0], pre_cmds[1] ? pre_cmds[1] : "(NULL)"); +\& ENGINE_free(e); +\& return 0; +\& } +\& pre_cmds += 2; +\& } +\& if (!ENGINE_init(e)) { +\& fprintf(stderr, "Failed initialisation\en"); +\& ENGINE_free(e); +\& return 0; +\& } +\& /* +\& * ENGINE_init() returned a functional reference, so free the structural +\& * reference from ENGINE_by_id(). +\& */ +\& ENGINE_free(e); +\& while (post_num\-\-) { +\& if (!ENGINE_ctrl_cmd_string(e, post_cmds[0], post_cmds[1], 0)) { +\& fprintf(stderr, "Failed command (%s \- %s:%s)\en", engine_id, +\& post_cmds[0], post_cmds[1] ? post_cmds[1] : "(NULL)"); +\& ENGINE_finish(e); +\& return 0; +\& } +\& post_cmds += 2; +\& } +\& ENGINE_set_default(e, ENGINE_METHOD_ALL & ~ENGINE_METHOD_RAND); +\& /* Success */ +\& return 1; +\& } +.Ve +.PP +Note that \fBENGINE_ctrl_cmd_string()\fR accepts a boolean argument that can +relax the semantics of the function \- if set non-zero it will only return +failure if the \s-1ENGINE\s0 supported the given command name but failed while +executing it, if the \s-1ENGINE\s0 doesn't support the command name it will simply +return success without doing anything. In this case we assume the user is +only supplying commands specific to the given \s-1ENGINE\s0 so we set this to +\&\s-1FALSE.\s0 +.PP +\&\fIDiscovering supported control commands\fR +.PP +It is possible to discover at run-time the names, numerical-ids, descriptions +and input parameters of the control commands supported by an \s-1ENGINE\s0 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 +\&\s-1ENGINE,\s0 ie. the \s-1ENGINE\s0's \fBctrl()\fR handler is not used for the control command. +openssl/engine.h defines an index, \s-1ENGINE_CMD_BASE,\s0 that all control commands +implemented by ENGINEs should be numbered from. Any command value lower than +this symbol is considered a \*(L"generic\*(R" command is handled directly by the +OpenSSL core routines. +.PP +It is using these \*(L"core\*(R" control commands that one can discover the control +commands implemented by a given \s-1ENGINE,\s0 specifically the commands: +.PP +.Vb 9 +\& ENGINE_HAS_CTRL_FUNCTION +\& ENGINE_CTRL_GET_FIRST_CMD_TYPE +\& ENGINE_CTRL_GET_NEXT_CMD_TYPE +\& ENGINE_CTRL_GET_CMD_FROM_NAME +\& ENGINE_CTRL_GET_NAME_LEN_FROM_CMD +\& ENGINE_CTRL_GET_NAME_FROM_CMD +\& ENGINE_CTRL_GET_DESC_LEN_FROM_CMD +\& ENGINE_CTRL_GET_DESC_FROM_CMD +\& ENGINE_CTRL_GET_CMD_FLAGS +.Ve +.PP +Whilst these commands are automatically processed by the OpenSSL framework code, +they use various properties exposed by each \s-1ENGINE\s0 to process these +queries. An \s-1ENGINE\s0 has 3 properties it exposes that can affect how this behaves; +it can supply a \fBctrl()\fR handler, it can specify \s-1ENGINE_FLAGS_MANUAL_CMD_CTRL\s0 in +the \s-1ENGINE\s0's flags, and it can expose an array of control command descriptions. +If an \s-1ENGINE\s0 specifies the \s-1ENGINE_FLAGS_MANUAL_CMD_CTRL\s0 flag, then it will +simply pass all these \*(L"core\*(R" control commands directly to the \s-1ENGINE\s0's \fBctrl()\fR +handler (and thus, it must have supplied one), so it is up to the \s-1ENGINE\s0 to +reply to these \*(L"discovery\*(R" commands itself. If that flag is not set, then the +OpenSSL framework code will work with the following rules: +.PP +.Vb 9 +\& if no ctrl() handler supplied; +\& ENGINE_HAS_CTRL_FUNCTION returns FALSE (zero), +\& all other commands fail. +\& if a ctrl() handler was supplied but no array of control commands; +\& ENGINE_HAS_CTRL_FUNCTION returns TRUE, +\& all other commands fail. +\& if a ctrl() handler and array of control commands was supplied; +\& ENGINE_HAS_CTRL_FUNCTION returns TRUE, +\& all other commands proceed processing ... +.Ve +.PP +If the \s-1ENGINE\s0's array of control commands is empty then all other commands will +fail, otherwise; \s-1ENGINE_CTRL_GET_FIRST_CMD_TYPE\s0 returns the identifier of +the first command supported by the \s-1ENGINE, ENGINE_GET_NEXT_CMD_TYPE\s0 takes the +identifier of a command supported by the \s-1ENGINE\s0 and returns the next command +identifier or fails if there are no more, \s-1ENGINE_CMD_FROM_NAME\s0 takes a string +name for a command and returns the corresponding identifier or fails if no such +command name exists, and the remaining commands take a command identifier and +return properties of the corresponding commands. All except +\&\s-1ENGINE_CTRL_GET_FLAGS\s0 return the string length of a command name or description, +or populate a supplied character buffer with a copy of the command name or +description. \s-1ENGINE_CTRL_GET_FLAGS\s0 returns a bitwise-OR'd mask of the following +possible values: +.PP +.Vb 4 +\& ENGINE_CMD_FLAG_NUMERIC +\& ENGINE_CMD_FLAG_STRING +\& ENGINE_CMD_FLAG_NO_INPUT +\& ENGINE_CMD_FLAG_INTERNAL +.Ve +.PP +If the \s-1ENGINE_CMD_FLAG_INTERNAL\s0 flag is set, then any other flags are purely +informational to the caller \- this flag will prevent the command being usable +for any higher-level \s-1ENGINE\s0 functions such as \fBENGINE_ctrl_cmd_string()\fR. +\&\*(L"\s-1INTERNAL\*(R"\s0 commands are not intended to be exposed to text-based configuration +by applications, administrations, users, etc. These can support arbitrary +operations via \fBENGINE_ctrl()\fR, 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 \s-1ENGINE\s0 +supports certain specific commands it might want to use (eg. application \*(L"foo\*(R" +might query various ENGINEs to see if they implement \*(L"\s-1FOO_GET_VENDOR_LOGO_GIF\*(R"\s0 \- +and \s-1ENGINE\s0 could therefore decide whether or not to support this \*(L"foo\*(R"\-specific +extension). +.SH "ENVIRONMENT" +.IX Header "ENVIRONMENT" +.IP "\fB\s-1OPENSSL_ENGINES\s0\fR" 4 +.IX Item "OPENSSL_ENGINES" +The path to the engines directory. +Ignored in set-user-ID and set-group-ID programs. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBENGINE_get_first()\fR, \fBENGINE_get_last()\fR, \fBENGINE_get_next()\fR and \fBENGINE_get_prev()\fR +return a valid \fB\s-1ENGINE\s0\fR structure or \s-1NULL\s0 if an error occurred. +.PP +\&\fBENGINE_add()\fR and \fBENGINE_remove()\fR return 1 on success or 0 on error. +.PP +\&\fBENGINE_by_id()\fR returns a valid \fB\s-1ENGINE\s0\fR structure or \s-1NULL\s0 if an error occurred. +.PP +\&\fBENGINE_init()\fR and \fBENGINE_finish()\fR return 1 on success or 0 on error. +.PP +All \fBENGINE_get_default_TYPE()\fR functions, \fBENGINE_get_cipher_engine()\fR and +\&\fBENGINE_get_digest_engine()\fR return a valid \fB\s-1ENGINE\s0\fR structure on success or \s-1NULL\s0 +if an error occurred. +.PP +All \fBENGINE_set_default_TYPE()\fR functions return 1 on success or 0 on error. +.PP +\&\fBENGINE_set_default()\fR returns 1 on success or 0 on error. +.PP +\&\fBENGINE_get_table_flags()\fR returns an unsigned integer value representing the +global table flags which are used to control the registration behaviour of +\&\fB\s-1ENGINE\s0\fR implementations. +.PP +All \fBENGINE_register_TYPE()\fR functions return 1 on success or 0 on error. +.PP +\&\fBENGINE_register_complete()\fR and \fBENGINE_register_all_complete()\fR return 1 on success +or 0 on error. +.PP +\&\fBENGINE_ctrl()\fR returns a positive value on success or others on error. +.PP +\&\fBENGINE_cmd_is_executable()\fR returns 1 if \fBcmd\fR is executable or 0 otherwise. +.PP +\&\fBENGINE_ctrl_cmd()\fR and \fBENGINE_ctrl_cmd_string()\fR return 1 on success or 0 on error. +.PP +\&\fBENGINE_new()\fR returns a valid \fB\s-1ENGINE\s0\fR structure on success or \s-1NULL\s0 if an error +occurred. +.PP +\&\fBENGINE_free()\fR returns 1 on success or 0 on error. +.PP +\&\fBENGINE_up_ref()\fR returns 1 on success or 0 on error. +.PP +\&\fBENGINE_set_id()\fR and \fBENGINE_set_name()\fR return 1 on success or 0 on error. +.PP +All other \fBENGINE_set_*\fR functions return 1 on success or 0 on error. +.PP +\&\fBENGINE_get_id()\fR and \fBENGINE_get_name()\fR return a string representing the identifier +and the name of the \s-1ENGINE\s0 \fBe\fR respectively. +.PP +\&\fBENGINE_get_RSA()\fR, \fBENGINE_get_DSA()\fR, \fBENGINE_get_DH()\fR and \fBENGINE_get_RAND()\fR +return corresponding method structures for each algorithms. +.PP +\&\fBENGINE_get_destroy_function()\fR, \fBENGINE_get_init_function()\fR, +\&\fBENGINE_get_finish_function()\fR, \fBENGINE_get_ctrl_function()\fR, +\&\fBENGINE_get_load_privkey_function()\fR, \fBENGINE_get_load_pubkey_function()\fR, +\&\fBENGINE_get_ciphers()\fR and \fBENGINE_get_digests()\fR return corresponding function +pointers of the callbacks. +.PP +\&\fBENGINE_get_cipher()\fR returns a valid \fB\s-1EVP_CIPHER\s0\fR structure on success or \s-1NULL\s0 +if an error occurred. +.PP +\&\fBENGINE_get_digest()\fR returns a valid \fB\s-1EVP_MD\s0\fR structure on success or \s-1NULL\s0 if an +error occurred. +.PP +\&\fBENGINE_get_flags()\fR returns an integer representing the \s-1ENGINE\s0 flags which are +used to control various behaviours of an \s-1ENGINE.\s0 +.PP +\&\fBENGINE_get_cmd_defns()\fR returns an \fB\s-1ENGINE_CMD_DEFN\s0\fR structure or \s-1NULL\s0 if it's +not set. +.PP +\&\fBENGINE_load_private_key()\fR and \fBENGINE_load_public_key()\fR return a valid \fB\s-1EVP_PKEY\s0\fR +structure on success or \s-1NULL\s0 if an error occurred. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBOPENSSL_init_crypto\fR\|(3), \fBRSA_new_method\fR\|(3), \fBDSA_new\fR\|(3), \fBDH_new\fR\|(3), +\&\fBRAND_bytes\fR\|(3), \fBconfig\fR\|(5) +.SH "HISTORY" +.IX Header "HISTORY" +\&\fBENGINE_cleanup()\fR was deprecated in OpenSSL 1.1.0 by the automatic cleanup +done by \fBOPENSSL_cleanup()\fR +and should not be used. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2002\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ERR_GET_LIB.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ERR_GET_LIB.3 new file mode 100644 index 00000000..326a6965 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ERR_GET_LIB.3 @@ -0,0 +1,196 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "ERR_GET_LIB 3" +.TH ERR_GET_LIB 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +ERR_GET_LIB, ERR_GET_FUNC, ERR_GET_REASON, ERR_FATAL_ERROR \&\- get information from error codes +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int ERR_GET_LIB(unsigned long e); +\& +\& int ERR_GET_FUNC(unsigned long e); +\& +\& int ERR_GET_REASON(unsigned long e); +\& +\& int ERR_FATAL_ERROR(unsigned long e); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The error code returned by \fBERR_get_error()\fR consists of a library +number, function code and reason code. \s-1\fBERR_GET_LIB\s0()\fR, \s-1\fBERR_GET_FUNC\s0()\fR +and \s-1\fBERR_GET_REASON\s0()\fR can be used to extract these. +.PP +\&\s-1\fBERR_FATAL_ERROR\s0()\fR indicates whether a given error code is a fatal error. +.PP +The library number and function code describe where the error +occurred, the reason code is the information about what went wrong. +.PP +Each sub-library of OpenSSL has a unique library number; function and +reason codes are unique within each sub-library. Note that different +libraries may use the same value to signal different functions and +reasons. +.PP +\&\fB\s-1ERR_R_...\s0\fR reason codes such as \fB\s-1ERR_R_MALLOC_FAILURE\s0\fR are globally +unique. However, when checking for sub-library specific reason codes, +be sure to also compare the library number. +.PP +\&\s-1\fBERR_GET_LIB\s0()\fR, \s-1\fBERR_GET_FUNC\s0()\fR, \s-1\fBERR_GET_REASON\s0()\fR, and \s-1\fBERR_FATAL_ERROR\s0()\fR + are macros. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +The library number, function code, reason code, and whether the error +is fatal, respectively. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_get_error\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +\&\s-1\fBERR_GET_LIB\s0()\fR, \s-1\fBERR_GET_FUNC\s0()\fR and \s-1\fBERR_GET_REASON\s0()\fR are available in +all versions of OpenSSL. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ERR_clear_error.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ERR_clear_error.3 new file mode 100644 index 00000000..9e5cec6a --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ERR_clear_error.3 @@ -0,0 +1,166 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "ERR_CLEAR_ERROR 3" +.TH ERR_CLEAR_ERROR 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +ERR_clear_error \- clear the error queue +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& void ERR_clear_error(void); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBERR_clear_error()\fR empties the current thread's error queue. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBERR_clear_error()\fR has no return value. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_get_error\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ERR_error_string.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ERR_error_string.3 new file mode 100644 index 00000000..7b2b946e --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ERR_error_string.3 @@ -0,0 +1,206 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "ERR_ERROR_STRING 3" +.TH ERR_ERROR_STRING 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +ERR_error_string, ERR_error_string_n, ERR_lib_error_string, ERR_func_error_string, ERR_reason_error_string \- obtain human\-readable error message +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& char *ERR_error_string(unsigned long e, char *buf); +\& void ERR_error_string_n(unsigned long e, char *buf, size_t len); +\& +\& const char *ERR_lib_error_string(unsigned long e); +\& const char *ERR_func_error_string(unsigned long e); +\& const char *ERR_reason_error_string(unsigned long e); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBERR_error_string()\fR generates a human-readable string representing the +error code \fIe\fR, and places it at \fIbuf\fR. \fIbuf\fR must be at least 256 +bytes long. If \fIbuf\fR is \fB\s-1NULL\s0\fR, the error string is placed in a +static buffer. +Note that this function is not thread-safe and does no checks on the size +of the buffer; use \fBERR_error_string_n()\fR instead. +.PP +\&\fBERR_error_string_n()\fR is a variant of \fBERR_error_string()\fR that writes +at most \fIlen\fR characters (including the terminating 0) +and truncates the string if necessary. +For \fBERR_error_string_n()\fR, \fIbuf\fR may not be \fB\s-1NULL\s0\fR. +.PP +The string will have the following format: +.PP +.Vb 1 +\& error:[error code]:[library name]:[function name]:[reason string] +.Ve +.PP +\&\fIerror code\fR is an 8 digit hexadecimal number, \fIlibrary name\fR, +\&\fIfunction name\fR and \fIreason string\fR are \s-1ASCII\s0 text. +.PP +\&\fBERR_lib_error_string()\fR, \fBERR_func_error_string()\fR and +\&\fBERR_reason_error_string()\fR return the library name, function +name and reason string respectively. +.PP +If there is no text string registered for the given error code, +the error string will contain the numeric code. +.PP +\&\fBERR_print_errors\fR\|(3) can be used to print +all error codes currently in the queue. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBERR_error_string()\fR returns a pointer to a static buffer containing the +string if \fIbuf\fR \fB== \s-1NULL\s0\fR, \fIbuf\fR otherwise. +.PP +\&\fBERR_lib_error_string()\fR, \fBERR_func_error_string()\fR and +\&\fBERR_reason_error_string()\fR return the strings, and \fB\s-1NULL\s0\fR if +none is registered for the error code. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_get_error\fR\|(3), +\&\fBERR_print_errors\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ERR_get_error.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ERR_get_error.3 new file mode 100644 index 00000000..010fdc02 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ERR_get_error.3 @@ -0,0 +1,208 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "ERR_GET_ERROR 3" +.TH ERR_GET_ERROR 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +ERR_get_error, ERR_peek_error, ERR_peek_last_error, ERR_get_error_line, ERR_peek_error_line, ERR_peek_last_error_line, ERR_get_error_line_data, ERR_peek_error_line_data, ERR_peek_last_error_line_data \- obtain error code and data +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& unsigned long ERR_get_error(void); +\& unsigned long ERR_peek_error(void); +\& unsigned long ERR_peek_last_error(void); +\& +\& unsigned long ERR_get_error_line(const char **file, int *line); +\& unsigned long ERR_peek_error_line(const char **file, int *line); +\& unsigned long ERR_peek_last_error_line(const char **file, int *line); +\& +\& unsigned long ERR_get_error_line_data(const char **file, int *line, +\& const char **data, int *flags); +\& unsigned long ERR_peek_error_line_data(const char **file, int *line, +\& const char **data, int *flags); +\& unsigned long ERR_peek_last_error_line_data(const char **file, int *line, +\& const char **data, int *flags); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBERR_get_error()\fR returns the earliest error code from the thread's error +queue and removes the entry. This function can be called repeatedly +until there are no more error codes to return. +.PP +\&\fBERR_peek_error()\fR returns the earliest error code from the thread's +error queue without modifying it. +.PP +\&\fBERR_peek_last_error()\fR returns the latest error code from the thread's +error queue without modifying it. +.PP +See \s-1\fBERR_GET_LIB\s0\fR\|(3) for obtaining information about +location and reason of the error, and +\&\fBERR_error_string\fR\|(3) for human-readable error +messages. +.PP +\&\fBERR_get_error_line()\fR, \fBERR_peek_error_line()\fR and +\&\fBERR_peek_last_error_line()\fR are the same as the above, but they +additionally store the file name and line number where +the error occurred in *\fBfile\fR and *\fBline\fR, unless these are \fB\s-1NULL\s0\fR. +.PP +\&\fBERR_get_error_line_data()\fR, \fBERR_peek_error_line_data()\fR and +\&\fBERR_peek_last_error_line_data()\fR store additional data and flags +associated with the error code in *\fBdata\fR +and *\fBflags\fR, unless these are \fB\s-1NULL\s0\fR. *\fBdata\fR contains a string +if *\fBflags\fR&\fB\s-1ERR_TXT_STRING\s0\fR is true. +.PP +An application \fB\s-1MUST NOT\s0\fR free the *\fBdata\fR pointer (or any other pointers +returned by these functions) with \fBOPENSSL_free()\fR as freeing is handled +automatically by the error library. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +The error code, or 0 if there is no error in the queue. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_error_string\fR\|(3), +\&\s-1\fBERR_GET_LIB\s0\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ERR_load_crypto_strings.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ERR_load_crypto_strings.3 new file mode 100644 index 00000000..9dc2e3b9 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ERR_load_crypto_strings.3 @@ -0,0 +1,188 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "ERR_LOAD_CRYPTO_STRINGS 3" +.TH ERR_LOAD_CRYPTO_STRINGS 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +ERR_load_crypto_strings, SSL_load_error_strings, ERR_free_strings \- load and free error strings +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +Deprecated: +.PP +.Vb 1 +\& #include +\& +\& #if OPENSSL_API_COMPAT < 0x10100000L +\& void ERR_load_crypto_strings(void); +\& void ERR_free_strings(void); +\& #endif +\& +\& #include +\& +\& #if OPENSSL_API_COMPAT < 0x10100000L +\& void SSL_load_error_strings(void); +\& #endif +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBERR_load_crypto_strings()\fR registers the error strings for all +\&\fBlibcrypto\fR functions. \fBSSL_load_error_strings()\fR does the same, +but also registers the \fBlibssl\fR error strings. +.PP +In versions prior to OpenSSL 1.1.0, +\&\fBERR_free_strings()\fR releases any resources created by the above functions. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBERR_load_crypto_strings()\fR, \fBSSL_load_error_strings()\fR and +\&\fBERR_free_strings()\fR return no values. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_error_string\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +The \fBERR_load_crypto_strings()\fR, \fBSSL_load_error_strings()\fR, and +\&\fBERR_free_strings()\fR functions were deprecated in OpenSSL 1.1.0 by +\&\fBOPENSSL_init_crypto()\fR and \fBOPENSSL_init_ssl()\fR and should not be used. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ERR_load_strings.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ERR_load_strings.3 new file mode 100644 index 00000000..6235ee38 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ERR_load_strings.3 @@ -0,0 +1,191 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "ERR_LOAD_STRINGS 3" +.TH ERR_LOAD_STRINGS 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +ERR_load_strings, ERR_PACK, ERR_get_next_error_library \- load arbitrary error strings +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& void ERR_load_strings(int lib, ERR_STRING_DATA str[]); +\& +\& int ERR_get_next_error_library(void); +\& +\& unsigned long ERR_PACK(int lib, int func, int reason); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBERR_load_strings()\fR registers error strings for library number \fBlib\fR. +.PP +\&\fBstr\fR is an array of error string data: +.PP +.Vb 5 +\& typedef struct ERR_string_data_st +\& { +\& unsigned long error; +\& char *string; +\& } ERR_STRING_DATA; +.Ve +.PP +The error code is generated from the library number and a function and +reason code: \fBerror\fR = \s-1ERR_PACK\s0(\fBlib\fR, \fBfunc\fR, \fBreason\fR). +\&\s-1\fBERR_PACK\s0()\fR is a macro. +.PP +The last entry in the array is {0,0}. +.PP +\&\fBERR_get_next_error_library()\fR can be used to assign library numbers +to user libraries at runtime. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBERR_load_strings()\fR returns no value. \s-1\fBERR_PACK\s0()\fR return the error code. +\&\fBERR_get_next_error_library()\fR returns zero on failure, otherwise a new +library number. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_load_strings\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ERR_print_errors.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ERR_print_errors.3 new file mode 100644 index 00000000..8cc56c93 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ERR_print_errors.3 @@ -0,0 +1,191 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "ERR_PRINT_ERRORS 3" +.TH ERR_PRINT_ERRORS 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +ERR_print_errors, ERR_print_errors_fp, ERR_print_errors_cb \&\- print error messages +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& void ERR_print_errors(BIO *bp); +\& void ERR_print_errors_fp(FILE *fp); +\& void ERR_print_errors_cb(int (*cb)(const char *str, size_t len, void *u), void *u) +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBERR_print_errors()\fR is a convenience function that prints the error +strings for all errors that OpenSSL has recorded to \fBbp\fR, thus +emptying the error queue. +.PP +\&\fBERR_print_errors_fp()\fR is the same, except that the output goes to a +\&\fB\s-1FILE\s0\fR. +.PP +\&\fBERR_print_errors_cb()\fR is the same, except that the callback function, +\&\fBcb\fR, is called for each error line with the string, length, and userdata +\&\fBu\fR as the callback parameters. +.PP +The error strings will have the following format: +.PP +.Vb 1 +\& [pid]:error:[error code]:[library name]:[function name]:[reason string]:[file name]:[line]:[optional text message] +.Ve +.PP +\&\fIerror code\fR is an 8 digit hexadecimal number. \fIlibrary name\fR, +\&\fIfunction name\fR and \fIreason string\fR are \s-1ASCII\s0 text, as is \fIoptional +text message\fR if one was set for the respective error code. +.PP +If there is no text string registered for the given error code, +the error string will contain the numeric code. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBERR_print_errors()\fR and \fBERR_print_errors_fp()\fR return no values. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_error_string\fR\|(3), +\&\fBERR_get_error\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ERR_put_error.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ERR_put_error.3 new file mode 100644 index 00000000..a2973c18 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ERR_put_error.3 @@ -0,0 +1,207 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "ERR_PUT_ERROR 3" +.TH ERR_PUT_ERROR 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +ERR_put_error, ERR_add_error_data, ERR_add_error_vdata \- record an error +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& void ERR_put_error(int lib, int func, int reason, const char *file, int line); +\& +\& void ERR_add_error_data(int num, ...); +\& void ERR_add_error_vdata(int num, va_list arg); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBERR_put_error()\fR adds an error code to the thread's error queue. It +signals that the error of reason code \fBreason\fR occurred in function +\&\fBfunc\fR of library \fBlib\fR, in line number \fBline\fR of \fBfile\fR. +This function is usually called by a macro. +.PP +\&\fBERR_add_error_data()\fR associates the concatenation of its \fBnum\fR string +arguments with the error code added last. +\&\fBERR_add_error_vdata()\fR is similar except the argument is a \fBva_list\fR. +.PP +\&\fBERR_load_strings\fR\|(3) can be used to register +error strings so that the application can a generate human-readable +error messages for the error code. +.SS "Reporting errors" +.IX Subsection "Reporting errors" +Each sub-library has a specific macro \fBXXXerr()\fR that is used to report +errors. Its first argument is a function code \fB\s-1XXX_F_...\s0\fR, the second +argument is a reason code \fB\s-1XXX_R_...\s0\fR. Function codes are derived +from the function names; reason codes consist of textual error +descriptions. For example, the function \fBssl3_read_bytes()\fR reports a +\&\*(L"handshake failure\*(R" as follows: +.PP +.Vb 1 +\& SSLerr(SSL_F_SSL3_READ_BYTES, SSL_R_SSL_HANDSHAKE_FAILURE); +.Ve +.PP +Function and reason codes should consist of upper case 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 \*(L"\s-1SSL3_READ_BYTES\*(R"\s0 in the above example. +.PP +The trailing section of a reason code (after the \*(L"_R_\*(R") is translated +into lower case and underscores changed to spaces. +.PP +Although a library will normally report errors using its own specific +XXXerr macro, another library's macro can be used. This is normally +only done when a library wants to include \s-1ASN1\s0 code which must use +the \fBASN1err()\fR macro. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBERR_put_error()\fR and \fBERR_add_error_data()\fR return +no values. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_load_strings\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ERR_remove_state.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ERR_remove_state.3 new file mode 100644 index 00000000..21a7e031 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ERR_remove_state.3 @@ -0,0 +1,180 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "ERR_REMOVE_STATE 3" +.TH ERR_REMOVE_STATE 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +ERR_remove_thread_state, ERR_remove_state \- DEPRECATED +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +Deprecated: +.PP +.Vb 3 +\& #if OPENSSL_API_COMPAT < 0x10000000L +\& void ERR_remove_state(unsigned long tid); +\& #endif +\& +\& #if OPENSSL_API_COMPAT < 0x10100000L +\& void ERR_remove_thread_state(void *tid); +\& #endif +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBERR_remove_state()\fR frees the error queue associated with the specified +thread, identified by \fBtid\fR. +\&\fBERR_remove_thread_state()\fR does the same thing, except the identifier is +an opaque pointer. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBERR_remove_state()\fR and \fBERR_remove_thread_state()\fR return no value. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +L\fBOPENSSL_init_crypto\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +\&\fBERR_remove_state()\fR was deprecated in OpenSSL 1.0.0 and +\&\fBERR_remove_thread_state()\fR was deprecated in OpenSSL 1.1.0; these functions +and should not be used. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ERR_set_mark.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ERR_set_mark.3 new file mode 100644 index 00000000..65ab4cab --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/ERR_set_mark.3 @@ -0,0 +1,172 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "ERR_SET_MARK 3" +.TH ERR_SET_MARK 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +ERR_set_mark, ERR_pop_to_mark \- set marks and pop errors until mark +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int ERR_set_mark(void); +\& +\& int ERR_pop_to_mark(void); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBERR_set_mark()\fR sets a mark on the current topmost error record if there +is one. +.PP +\&\fBERR_pop_to_mark()\fR will pop the top of the error stack until a mark is found. +The mark is then removed. If there is no mark, the whole stack is removed. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBERR_set_mark()\fR returns 0 if the error stack is empty, otherwise 1. +.PP +\&\fBERR_pop_to_mark()\fR returns 0 if there was no mark in the error stack, which +implies that the stack became empty, otherwise 1. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2003\-2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_BytesToKey.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_BytesToKey.3 new file mode 100644 index 00000000..f5fefedd --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_BytesToKey.3 @@ -0,0 +1,210 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EVP_BYTESTOKEY 3" +.TH EVP_BYTESTOKEY 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EVP_BytesToKey \- password based encryption routine +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int EVP_BytesToKey(const EVP_CIPHER *type, const EVP_MD *md, +\& const unsigned char *salt, +\& const unsigned char *data, int datal, int count, +\& unsigned char *key, unsigned char *iv); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBEVP_BytesToKey()\fR derives a key and \s-1IV\s0 from various parameters. \fBtype\fR is +the cipher to derive the key and \s-1IV\s0 for. \fBmd\fR is the message digest to use. +The \fBsalt\fR parameter is used as a salt in the derivation: it should point to +an 8 byte buffer or \s-1NULL\s0 if no salt is used. \fBdata\fR is a buffer containing +\&\fBdatal\fR bytes which is used to derive the keying data. \fBcount\fR is the +iteration count to use. The derived key and \s-1IV\s0 will be written to \fBkey\fR +and \fBiv\fR respectively. +.SH "NOTES" +.IX Header "NOTES" +A typical application of this function is to derive keying material for an +encryption algorithm from a password in the \fBdata\fR parameter. +.PP +Increasing the \fBcount\fR parameter slows down the algorithm which makes it +harder for an attacker to perform a brute force attack using a large number +of candidate passwords. +.PP +If the total key and \s-1IV\s0 length is less than the digest length and +\&\fB\s-1MD5\s0\fR is used then the derivation algorithm is compatible with PKCS#5 v1.5 +otherwise a non standard extension is used to derive the extra data. +.PP +Newer applications should use a more modern algorithm such as \s-1PBKDF2\s0 as +defined in PKCS#5v2.1 and provided by \s-1PKCS5_PBKDF2_HMAC.\s0 +.SH "KEY DERIVATION ALGORITHM" +.IX Header "KEY DERIVATION ALGORITHM" +The key and \s-1IV\s0 is derived by concatenating D_1, D_2, etc until +enough data is available for the key and \s-1IV.\s0 D_i is defined as: +.PP +.Vb 1 +\& D_i = HASH^count(D_(i\-1) || data || salt) +.Ve +.PP +where || denotes concatenation, D_0 is empty, \s-1HASH\s0 is the digest +algorithm in use, HASH^1(data) is simply \s-1HASH\s0(data), HASH^2(data) +is \s-1HASH\s0(\s-1HASH\s0(data)) and so on. +.PP +The initial bytes are used for the key and the subsequent bytes for +the \s-1IV.\s0 +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +If \fBdata\fR is \s-1NULL,\s0 then \fBEVP_BytesToKey()\fR returns the number of bytes +needed to store the derived key. +Otherwise, \fBEVP_BytesToKey()\fR returns the size of the derived key in bytes, +or 0 on error. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBevp\fR\|(7), \fBRAND_bytes\fR\|(3), +\&\s-1\fBPKCS5_PBKDF2_HMAC\s0\fR\|(3), +\&\fBEVP_EncryptInit\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2001\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_CIPHER_CTX_get_cipher_data.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_CIPHER_CTX_get_cipher_data.3 new file mode 100644 index 00000000..1333ef4b --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_CIPHER_CTX_get_cipher_data.3 @@ -0,0 +1,182 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EVP_CIPHER_CTX_GET_CIPHER_DATA 3" +.TH EVP_CIPHER_CTX_GET_CIPHER_DATA 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EVP_CIPHER_CTX_get_cipher_data, EVP_CIPHER_CTX_set_cipher_data \- Routines to inspect and modify EVP_CIPHER_CTX objects +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& void *EVP_CIPHER_CTX_get_cipher_data(const EVP_CIPHER_CTX *ctx); +\& void *EVP_CIPHER_CTX_set_cipher_data(EVP_CIPHER_CTX *ctx, void *cipher_data); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fBEVP_CIPHER_CTX_get_cipher_data()\fR function returns a pointer to the cipher +data relevant to \s-1EVP_CIPHER_CTX.\s0 The contents of this data is specific to the +particular implementation of the cipher. For example this data can be used by +engines to store engine specific information. The data is automatically +allocated and freed by OpenSSL, so applications and engines should not normally +free this directly (but see below). +.PP +The \fBEVP_CIPHER_CTX_set_cipher_data()\fR function allows an application or engine to +replace the cipher data with new data. A pointer to any existing cipher data is +returned from this function. If the old data is no longer required then it +should be freed through a call to \fBOPENSSL_free()\fR. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +The \fBEVP_CIPHER_CTX_get_cipher_data()\fR function returns a pointer to the current +cipher data for the \s-1EVP_CIPHER_CTX.\s0 +.PP +The \fBEVP_CIPHER_CTX_set_cipher_data()\fR function returns a pointer to the old +cipher data for the \s-1EVP_CIPHER_CTX.\s0 +.SH "HISTORY" +.IX Header "HISTORY" +The \fBEVP_CIPHER_CTX_get_cipher_data()\fR and \fBEVP_CIPHER_CTX_set_cipher_data()\fR +functions were added in OpenSSL 1.1.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_CIPHER_meth_new.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_CIPHER_meth_new.3 new file mode 100644 index 00000000..28c75d85 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_CIPHER_meth_new.3 @@ -0,0 +1,343 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EVP_CIPHER_METH_NEW 3" +.TH EVP_CIPHER_METH_NEW 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EVP_CIPHER_meth_new, EVP_CIPHER_meth_dup, EVP_CIPHER_meth_free, EVP_CIPHER_meth_set_iv_length, EVP_CIPHER_meth_set_flags, EVP_CIPHER_meth_set_impl_ctx_size, EVP_CIPHER_meth_set_init, EVP_CIPHER_meth_set_do_cipher, EVP_CIPHER_meth_set_cleanup, EVP_CIPHER_meth_set_set_asn1_params, EVP_CIPHER_meth_set_get_asn1_params, EVP_CIPHER_meth_set_ctrl, EVP_CIPHER_meth_get_init, EVP_CIPHER_meth_get_do_cipher, EVP_CIPHER_meth_get_cleanup, EVP_CIPHER_meth_get_set_asn1_params, EVP_CIPHER_meth_get_get_asn1_params, EVP_CIPHER_meth_get_ctrl \- Routines to build up EVP_CIPHER methods +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& EVP_CIPHER *EVP_CIPHER_meth_new(int cipher_type, int block_size, int key_len); +\& EVP_CIPHER *EVP_CIPHER_meth_dup(const EVP_CIPHER *cipher); +\& void EVP_CIPHER_meth_free(EVP_CIPHER *cipher); +\& +\& int EVP_CIPHER_meth_set_iv_length(EVP_CIPHER *cipher, int iv_len); +\& int EVP_CIPHER_meth_set_flags(EVP_CIPHER *cipher, unsigned long flags); +\& int EVP_CIPHER_meth_set_impl_ctx_size(EVP_CIPHER *cipher, int ctx_size); +\& int EVP_CIPHER_meth_set_init(EVP_CIPHER *cipher, +\& int (*init)(EVP_CIPHER_CTX *ctx, +\& const unsigned char *key, +\& const unsigned char *iv, +\& int enc)); +\& int EVP_CIPHER_meth_set_do_cipher(EVP_CIPHER *cipher, +\& int (*do_cipher)(EVP_CIPHER_CTX *ctx, +\& unsigned char *out, +\& const unsigned char *in, +\& size_t inl)); +\& int EVP_CIPHER_meth_set_cleanup(EVP_CIPHER *cipher, +\& int (*cleanup)(EVP_CIPHER_CTX *)); +\& int EVP_CIPHER_meth_set_set_asn1_params(EVP_CIPHER *cipher, +\& int (*set_asn1_parameters)(EVP_CIPHER_CTX *, +\& ASN1_TYPE *)); +\& int EVP_CIPHER_meth_set_get_asn1_params(EVP_CIPHER *cipher, +\& int (*get_asn1_parameters)(EVP_CIPHER_CTX *, +\& ASN1_TYPE *)); +\& int EVP_CIPHER_meth_set_ctrl(EVP_CIPHER *cipher, +\& int (*ctrl)(EVP_CIPHER_CTX *, int type, +\& int arg, void *ptr)); +\& +\& int (*EVP_CIPHER_meth_get_init(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *ctx, +\& const unsigned char *key, +\& const unsigned char *iv, +\& int enc); +\& int (*EVP_CIPHER_meth_get_do_cipher(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *ctx, +\& unsigned char *out, +\& const unsigned char *in, +\& size_t inl); +\& int (*EVP_CIPHER_meth_get_cleanup(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *); +\& int (*EVP_CIPHER_meth_get_set_asn1_params(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *, +\& ASN1_TYPE *); +\& int (*EVP_CIPHER_meth_get_get_asn1_params(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *, +\& ASN1_TYPE *); +\& int (*EVP_CIPHER_meth_get_ctrl(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *, +\& int type, int arg, +\& void *ptr); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fB\s-1EVP_CIPHER\s0\fR type is a structure for symmetric cipher method +implementation. +.PP +\&\fBEVP_CIPHER_meth_new()\fR creates a new \fB\s-1EVP_CIPHER\s0\fR structure. +.PP +\&\fBEVP_CIPHER_meth_dup()\fR creates a copy of \fBcipher\fR. +.PP +\&\fBEVP_CIPHER_meth_free()\fR destroys a \fB\s-1EVP_CIPHER\s0\fR structure. +.PP +\&\fBEVP_CIPHER_meth_set_iv_length()\fR sets the length of the \s-1IV.\s0 +This is only needed when the implemented cipher mode requires it. +.PP +\&\fBEVP_CIPHER_meth_set_flags()\fR sets the flags to describe optional +behaviours in the particular \fBcipher\fR. +With the exception of cipher modes, of which only one may be present, +several flags can be or'd together. +The available flags are: +.IP "\s-1EVP_CIPH_STREAM_CIPHER, EVP_CIPH_ECB_MODE EVP_CIPH_CBC_MODE, EVP_CIPH_CFB_MODE, EVP_CIPH_OFB_MODE, EVP_CIPH_CTR_MODE, EVP_CIPH_GCM_MODE, EVP_CIPH_CCM_MODE, EVP_CIPH_XTS_MODE, EVP_CIPH_WRAP_MODE, EVP_CIPH_OCB_MODE\s0" 4 +.IX Item "EVP_CIPH_STREAM_CIPHER, EVP_CIPH_ECB_MODE EVP_CIPH_CBC_MODE, EVP_CIPH_CFB_MODE, EVP_CIPH_OFB_MODE, EVP_CIPH_CTR_MODE, EVP_CIPH_GCM_MODE, EVP_CIPH_CCM_MODE, EVP_CIPH_XTS_MODE, EVP_CIPH_WRAP_MODE, EVP_CIPH_OCB_MODE" +The cipher mode. +.IP "\s-1EVP_CIPH_VARIABLE_LENGTH\s0" 4 +.IX Item "EVP_CIPH_VARIABLE_LENGTH" +This cipher is of variable length. +.IP "\s-1EVP_CIPH_CUSTOM_IV\s0" 4 +.IX Item "EVP_CIPH_CUSTOM_IV" +Storing and initialising the \s-1IV\s0 is left entirely to the +implementation. +.IP "\s-1EVP_CIPH_ALWAYS_CALL_INIT\s0" 4 +.IX Item "EVP_CIPH_ALWAYS_CALL_INIT" +Set this if the implementation's \fBinit()\fR function should be called even +if \fBkey\fR is \fB\s-1NULL\s0\fR. +.IP "\s-1EVP_CIPH_CTRL_INIT\s0" 4 +.IX Item "EVP_CIPH_CTRL_INIT" +Set this to have the implementation's \fBctrl()\fR function called with +command code \fB\s-1EVP_CTRL_INIT\s0\fR early in its setup. +.IP "\s-1EVP_CIPH_CUSTOM_KEY_LENGTH\s0" 4 +.IX Item "EVP_CIPH_CUSTOM_KEY_LENGTH" +Checking and setting the key length after creating the \fB\s-1EVP_CIPHER\s0\fR +is left to the implementation. +Whenever someone uses \fBEVP_CIPHER_CTX_set_key_length()\fR on a +\&\fB\s-1EVP_CIPHER\s0\fR with this flag set, the implementation's \fBctrl()\fR function +will be called with the control code \fB\s-1EVP_CTRL_SET_KEY_LENGTH\s0\fR and +the key length in \fBarg\fR. +.IP "\s-1EVP_CIPH_NO_PADDING\s0" 4 +.IX Item "EVP_CIPH_NO_PADDING" +Don't use standard block padding. +.IP "\s-1EVP_CIPH_RAND_KEY\s0" 4 +.IX Item "EVP_CIPH_RAND_KEY" +Making a key with random content is left to the implementation. +This is done by calling the implementation's \fBctrl()\fR function with the +control code \fB\s-1EVP_CTRL_RAND_KEY\s0\fR and the pointer to the key memory +storage in \fBptr\fR. +.IP "\s-1EVP_CIPH_CUSTOM_COPY\s0" 4 +.IX Item "EVP_CIPH_CUSTOM_COPY" +Set this to have the implementation's \fBctrl()\fR function called with +command code \fB\s-1EVP_CTRL_COPY\s0\fR at the end of \fBEVP_CIPHER_CTX_copy()\fR. +The intended use is for further things to deal with after the +implementation specific data block has been copied. +The destination \fB\s-1EVP_CIPHER_CTX\s0\fR is passed to the control with the +\&\fBptr\fR parameter. +The implementation specific data block is reached with +\&\fBEVP_CIPHER_CTX_get_cipher_data()\fR. +.IP "\s-1EVP_CIPH_FLAG_DEFAULT_ASN1\s0" 4 +.IX Item "EVP_CIPH_FLAG_DEFAULT_ASN1" +Use the default \s-1EVP\s0 routines to pass \s-1IV\s0 to and from \s-1ASN.1.\s0 +.IP "\s-1EVP_CIPH_FLAG_LENGTH_BITS\s0" 4 +.IX Item "EVP_CIPH_FLAG_LENGTH_BITS" +Signals that the length of the input buffer for encryption / +decryption is to be understood as the number of bits instead of +bytes for this implementation. +This is only useful for \s-1CFB1\s0 ciphers. +.IP "\s-1EVP_CIPH_FLAG_CUSTOM_CIPHER\s0" 4 +.IX Item "EVP_CIPH_FLAG_CUSTOM_CIPHER" +This indicates that the implementation takes care of everything, +including padding, buffering and finalization. +The \s-1EVP\s0 routines will simply give them control and do nothing more. +.IP "\s-1EVP_CIPH_FLAG_AEAD_CIPHER\s0" 4 +.IX Item "EVP_CIPH_FLAG_AEAD_CIPHER" +This indicates that this is an \s-1AEAD\s0 cipher implementation. +.IP "\s-1EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK\s0" 4 +.IX Item "EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK" +Allow interleaving of crypto blocks, a particular optimization only applicable +to certain \s-1TLS\s0 ciphers. +.PP +\&\fBEVP_CIPHER_meth_set_impl_ctx_size()\fR sets the size of the \s-1EVP_CIPHER\s0's +implementation context so that it can be automatically allocated. +.PP +\&\fBEVP_CIPHER_meth_set_init()\fR sets the cipher init function for +\&\fBcipher\fR. +The cipher init function is called by \fBEVP_CipherInit()\fR, +\&\fBEVP_CipherInit_ex()\fR, \fBEVP_EncryptInit()\fR, \fBEVP_EncryptInit_ex()\fR, +\&\fBEVP_DecryptInit()\fR, \fBEVP_DecryptInit_ex()\fR. +.PP +\&\fBEVP_CIPHER_meth_set_do_cipher()\fR sets the cipher function for +\&\fBcipher\fR. +The cipher function is called by \fBEVP_CipherUpdate()\fR, +\&\fBEVP_EncryptUpdate()\fR, \fBEVP_DecryptUpdate()\fR, \fBEVP_CipherFinal()\fR, +\&\fBEVP_EncryptFinal()\fR, \fBEVP_EncryptFinal_ex()\fR, \fBEVP_DecryptFinal()\fR and +\&\fBEVP_DecryptFinal_ex()\fR. +.PP +\&\fBEVP_CIPHER_meth_set_cleanup()\fR sets the function for \fBcipher\fR to do +extra cleanup before the method's private data structure is cleaned +out and freed. +Note that the cleanup function is passed a \fB\s-1EVP_CIPHER_CTX\s0 *\fR, the +private data structure is then available with +\&\fBEVP_CIPHER_CTX_get_cipher_data()\fR. +This cleanup function is called by \fBEVP_CIPHER_CTX_reset()\fR and +\&\fBEVP_CIPHER_CTX_free()\fR. +.PP +\&\fBEVP_CIPHER_meth_set_set_asn1_params()\fR sets the function for \fBcipher\fR +to set the AlgorithmIdentifier \*(L"parameter\*(R" based on the passed cipher. +This function is called by \fBEVP_CIPHER_param_to_asn1()\fR. +\&\fBEVP_CIPHER_meth_set_get_asn1_params()\fR sets the function for \fBcipher\fR +that sets the cipher parameters based on an \s-1ASN.1\s0 AlgorithmIdentifier +\&\*(L"parameter\*(R". +Both these functions are needed when there is a need for custom data +(more or other than the cipher \s-1IV\s0). +They are called by \fBEVP_CIPHER_param_to_asn1()\fR and +\&\fBEVP_CIPHER_asn1_to_param()\fR respectively if defined. +.PP +\&\fBEVP_CIPHER_meth_set_ctrl()\fR sets the control function for \fBcipher\fR. +.PP +\&\fBEVP_CIPHER_meth_get_init()\fR, \fBEVP_CIPHER_meth_get_do_cipher()\fR, +\&\fBEVP_CIPHER_meth_get_cleanup()\fR, \fBEVP_CIPHER_meth_get_set_asn1_params()\fR, +\&\fBEVP_CIPHER_meth_get_get_asn1_params()\fR and \fBEVP_CIPHER_meth_get_ctrl()\fR +are all used to retrieve the method data given with the +EVP_CIPHER_meth_set_*() functions above. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBEVP_CIPHER_meth_new()\fR and \fBEVP_CIPHER_meth_dup()\fR return a pointer to a +newly created \fB\s-1EVP_CIPHER\s0\fR, or \s-1NULL\s0 on failure. +All EVP_CIPHER_meth_set_*() functions return 1. +All EVP_CIPHER_meth_get_*() functions return pointers to their +respective \fBcipher\fR function. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +EVP_EncryptInit +.SH "HISTORY" +.IX Header "HISTORY" +The functions described here were added in OpenSSL 1.1.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2016\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_DigestInit.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_DigestInit.3 new file mode 100644 index 00000000..d7b5c311 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_DigestInit.3 @@ -0,0 +1,497 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EVP_DIGESTINIT 3" +.TH EVP_DIGESTINIT 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EVP_MD_CTX_new, EVP_MD_CTX_reset, EVP_MD_CTX_free, EVP_MD_CTX_copy, EVP_MD_CTX_copy_ex, EVP_MD_CTX_ctrl, EVP_MD_CTX_set_flags, EVP_MD_CTX_clear_flags, EVP_MD_CTX_test_flags, EVP_Digest, EVP_DigestInit_ex, EVP_DigestInit, EVP_DigestUpdate, EVP_DigestFinal_ex, EVP_DigestFinalXOF, EVP_DigestFinal, EVP_MD_type, EVP_MD_pkey_type, EVP_MD_size, EVP_MD_block_size, EVP_MD_flags, EVP_MD_CTX_md, EVP_MD_CTX_type, EVP_MD_CTX_size, EVP_MD_CTX_block_size, EVP_MD_CTX_md_data, EVP_MD_CTX_update_fn, EVP_MD_CTX_set_update_fn, EVP_md_null, EVP_get_digestbyname, EVP_get_digestbynid, EVP_get_digestbyobj, EVP_MD_CTX_pkey_ctx, EVP_MD_CTX_set_pkey_ctx \- EVP digest routines +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& EVP_MD_CTX *EVP_MD_CTX_new(void); +\& int EVP_MD_CTX_reset(EVP_MD_CTX *ctx); +\& void EVP_MD_CTX_free(EVP_MD_CTX *ctx); +\& void EVP_MD_CTX_ctrl(EVP_MD_CTX *ctx, int cmd, int p1, void* p2); +\& void EVP_MD_CTX_set_flags(EVP_MD_CTX *ctx, int flags); +\& void EVP_MD_CTX_clear_flags(EVP_MD_CTX *ctx, int flags); +\& int EVP_MD_CTX_test_flags(const EVP_MD_CTX *ctx, int flags); +\& +\& int EVP_Digest(const void *data, size_t count, unsigned char *md, +\& unsigned int *size, const EVP_MD *type, ENGINE *impl); +\& int EVP_DigestInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type, ENGINE *impl); +\& int EVP_DigestUpdate(EVP_MD_CTX *ctx, const void *d, size_t cnt); +\& int EVP_DigestFinal_ex(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *s); +\& int EVP_DigestFinalXOF(EVP_MD_CTX *ctx, unsigned char *md, size_t len); +\& +\& int EVP_MD_CTX_copy_ex(EVP_MD_CTX *out, const EVP_MD_CTX *in); +\& +\& int EVP_DigestInit(EVP_MD_CTX *ctx, const EVP_MD *type); +\& int EVP_DigestFinal(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *s); +\& +\& int EVP_MD_CTX_copy(EVP_MD_CTX *out, EVP_MD_CTX *in); +\& +\& int EVP_MD_type(const EVP_MD *md); +\& int EVP_MD_pkey_type(const EVP_MD *md); +\& int EVP_MD_size(const EVP_MD *md); +\& int EVP_MD_block_size(const EVP_MD *md); +\& unsigned long EVP_MD_flags(const EVP_MD *md); +\& +\& const EVP_MD *EVP_MD_CTX_md(const EVP_MD_CTX *ctx); +\& int EVP_MD_CTX_size(const EVP_MD_CTX *ctx); +\& int EVP_MD_CTX_block_size(const EVP_MD_CTX *ctx); +\& int EVP_MD_CTX_type(const EVP_MD_CTX *ctx); +\& void *EVP_MD_CTX_md_data(const EVP_MD_CTX *ctx); +\& int (*EVP_MD_CTX_update_fn(EVP_MD_CTX *ctx))(EVP_MD_CTX *ctx, +\& const void *data, size_t count); +\& void EVP_MD_CTX_set_update_fn(EVP_MD_CTX *ctx, +\& int (*update)(EVP_MD_CTX *ctx, +\& const void *data, size_t count)); +\& +\& const EVP_MD *EVP_md_null(void); +\& +\& const EVP_MD *EVP_get_digestbyname(const char *name); +\& const EVP_MD *EVP_get_digestbynid(int type); +\& const EVP_MD *EVP_get_digestbyobj(const ASN1_OBJECT *o); +\& +\& EVP_PKEY_CTX *EVP_MD_CTX_pkey_ctx(const EVP_MD_CTX *ctx); +\& void EVP_MD_CTX_set_pkey_ctx(EVP_MD_CTX *ctx, EVP_PKEY_CTX *pctx); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \s-1EVP\s0 digest routines are a high level interface to message digests, +and should be used instead of the cipher-specific functions. +.IP "\fBEVP_MD_CTX_new()\fR" 4 +.IX Item "EVP_MD_CTX_new()" +Allocates and returns a digest context. +.IP "\fBEVP_MD_CTX_reset()\fR" 4 +.IX Item "EVP_MD_CTX_reset()" +Resets the digest context \fBctx\fR. This can be used to reuse an already +existing context. +.IP "\fBEVP_MD_CTX_free()\fR" 4 +.IX Item "EVP_MD_CTX_free()" +Cleans up digest context \fBctx\fR and frees up the space allocated to it. +.IP "\fBEVP_MD_CTX_ctrl()\fR" 4 +.IX Item "EVP_MD_CTX_ctrl()" +Performs digest-specific control actions on context \fBctx\fR. The control command +is indicated in \fBcmd\fR and any additional arguments in \fBp1\fR and \fBp2\fR. +\&\fBEVP_MD_CTX_ctrl()\fR must be called after \fBEVP_DigestInit_ex()\fR. Other restrictions +may apply depending on the control type and digest implementation. +See \*(L"\s-1CONTROLS\*(R"\s0 below for more information. +.IP "\fBEVP_MD_CTX_set_flags()\fR, \fBEVP_MD_CTX_clear_flags()\fR, \fBEVP_MD_CTX_test_flags()\fR" 4 +.IX Item "EVP_MD_CTX_set_flags(), EVP_MD_CTX_clear_flags(), EVP_MD_CTX_test_flags()" +Sets, clears and tests \fBctx\fR flags. See \*(L"\s-1FLAGS\*(R"\s0 below for more information. +.IP "\fBEVP_Digest()\fR" 4 +.IX Item "EVP_Digest()" +A wrapper around the Digest Init_ex, Update and Final_ex functions. +Hashes \fBcount\fR bytes of data at \fBdata\fR using a digest \fBtype\fR from \s-1ENGINE\s0 +\&\fBimpl\fR. The digest value is placed in \fBmd\fR and its length is written at \fBsize\fR +if the pointer is not \s-1NULL.\s0 At most \fB\s-1EVP_MAX_MD_SIZE\s0\fR bytes will be written. +If \fBimpl\fR is \s-1NULL\s0 the default implementation of digest \fBtype\fR is used. +.IP "\fBEVP_DigestInit_ex()\fR" 4 +.IX Item "EVP_DigestInit_ex()" +Sets up digest context \fBctx\fR to use a digest \fBtype\fR from \s-1ENGINE\s0 \fBimpl\fR. +\&\fBtype\fR will typically be supplied by a function such as \fBEVP_sha1()\fR. If +\&\fBimpl\fR is \s-1NULL\s0 then the default implementation of digest \fBtype\fR is used. +.IP "\fBEVP_DigestUpdate()\fR" 4 +.IX Item "EVP_DigestUpdate()" +Hashes \fBcnt\fR bytes of data at \fBd\fR into the digest context \fBctx\fR. This +function can be called several times on the same \fBctx\fR to hash additional +data. +.IP "\fBEVP_DigestFinal_ex()\fR" 4 +.IX Item "EVP_DigestFinal_ex()" +Retrieves the digest value from \fBctx\fR and places it in \fBmd\fR. If the \fBs\fR +parameter is not \s-1NULL\s0 then the number of bytes of data written (i.e. the +length of the digest) will be written to the integer at \fBs\fR, at most +\&\fB\s-1EVP_MAX_MD_SIZE\s0\fR bytes will be written. After calling \fBEVP_DigestFinal_ex()\fR +no additional calls to \fBEVP_DigestUpdate()\fR can be made, but +\&\fBEVP_DigestInit_ex()\fR can be called to initialize a new digest operation. +.IP "\fBEVP_DigestFinalXOF()\fR" 4 +.IX Item "EVP_DigestFinalXOF()" +Interfaces to extendable-output functions, XOFs, such as \s-1SHAKE128\s0 and \s-1SHAKE256.\s0 +It retrieves the digest value from \fBctx\fR and places it in \fBlen\fR\-sized md. +After calling this function no additional calls to \fBEVP_DigestUpdate()\fR can be +made, but \fBEVP_DigestInit_ex()\fR can be called to initialize a new operation. +.IP "\fBEVP_MD_CTX_copy_ex()\fR" 4 +.IX Item "EVP_MD_CTX_copy_ex()" +Can be used to copy the message digest state from \fBin\fR to \fBout\fR. This is +useful if large amounts of data are to be hashed which only differ in the last +few bytes. +.IP "\fBEVP_DigestInit()\fR" 4 +.IX Item "EVP_DigestInit()" +Behaves in the same way as \fBEVP_DigestInit_ex()\fR except it always uses the +default digest implementation and calls \fBEVP_MD_CTX_reset()\fR. +.IP "\fBEVP_DigestFinal()\fR" 4 +.IX Item "EVP_DigestFinal()" +Similar to \fBEVP_DigestFinal_ex()\fR except the digest context \fBctx\fR is +automatically cleaned up. +.IP "\fBEVP_MD_CTX_copy()\fR" 4 +.IX Item "EVP_MD_CTX_copy()" +Similar to \fBEVP_MD_CTX_copy_ex()\fR except the destination \fBout\fR does not have to +be initialized. +.IP "\fBEVP_MD_size()\fR, \fBEVP_MD_CTX_size()\fR" 4 +.IX Item "EVP_MD_size(), EVP_MD_CTX_size()" +Return the size of the message digest when passed an \fB\s-1EVP_MD\s0\fR or an +\&\fB\s-1EVP_MD_CTX\s0\fR structure, i.e. the size of the hash. +.IP "\fBEVP_MD_block_size()\fR, \fBEVP_MD_CTX_block_size()\fR" 4 +.IX Item "EVP_MD_block_size(), EVP_MD_CTX_block_size()" +Return the block size of the message digest when passed an \fB\s-1EVP_MD\s0\fR or an +\&\fB\s-1EVP_MD_CTX\s0\fR structure. +.IP "\fBEVP_MD_type()\fR, \fBEVP_MD_CTX_type()\fR" 4 +.IX Item "EVP_MD_type(), EVP_MD_CTX_type()" +Return the \s-1NID\s0 of the \s-1OBJECT IDENTIFIER\s0 representing the given message digest +when passed an \fB\s-1EVP_MD\s0\fR structure. For example, \f(CW\*(C`EVP_MD_type(EVP_sha1())\*(C'\fR +returns \fBNID_sha1\fR. This function is normally used when setting \s-1ASN1\s0 OIDs. +.IP "\fBEVP_MD_CTX_md_data()\fR" 4 +.IX Item "EVP_MD_CTX_md_data()" +Return the digest method private data for the passed \fB\s-1EVP_MD_CTX\s0\fR. +The space is allocated by OpenSSL and has the size originally set with +\&\fBEVP_MD_meth_set_app_datasize()\fR. +.IP "\fBEVP_MD_CTX_md()\fR" 4 +.IX Item "EVP_MD_CTX_md()" +Returns the \fB\s-1EVP_MD\s0\fR structure corresponding to the passed \fB\s-1EVP_MD_CTX\s0\fR. +.IP "\fBEVP_MD_CTX_set_update_fn()\fR" 4 +.IX Item "EVP_MD_CTX_set_update_fn()" +Sets the update function for \fBctx\fR to \fBupdate\fR. +This is the function that is called by EVP_DigestUpdate. If not set, the +update function from the \fB\s-1EVP_MD\s0\fR type specified at initialization is used. +.IP "\fBEVP_MD_CTX_update_fn()\fR" 4 +.IX Item "EVP_MD_CTX_update_fn()" +Returns the update function for \fBctx\fR. +.IP "\fBEVP_MD_flags()\fR" 4 +.IX Item "EVP_MD_flags()" +Returns the \fBmd\fR flags. Note that these are different from the \fB\s-1EVP_MD_CTX\s0\fR +ones. See \fBEVP_MD_meth_set_flags\fR\|(3) for more information. +.IP "\fBEVP_MD_pkey_type()\fR" 4 +.IX Item "EVP_MD_pkey_type()" +Returns the \s-1NID\s0 of the public key signing algorithm associated with this +digest. For example \fBEVP_sha1()\fR is associated with \s-1RSA\s0 so this will return +\&\fBNID_sha1WithRSAEncryption\fR. Since digests and signature algorithms are no +longer linked this function is only retained for compatibility reasons. +.IP "\fBEVP_md_null()\fR" 4 +.IX Item "EVP_md_null()" +A \*(L"null\*(R" message digest that does nothing: i.e. the hash it returns is of zero +length. +.IP "\fBEVP_get_digestbyname()\fR, \fBEVP_get_digestbynid()\fR, \fBEVP_get_digestbyobj()\fR" 4 +.IX Item "EVP_get_digestbyname(), EVP_get_digestbynid(), EVP_get_digestbyobj()" +Returns an \fB\s-1EVP_MD\s0\fR structure when passed a digest name, a digest \fB\s-1NID\s0\fR or an +\&\fB\s-1ASN1_OBJECT\s0\fR structure respectively. +.IP "\fBEVP_MD_CTX_pkey_ctx()\fR" 4 +.IX Item "EVP_MD_CTX_pkey_ctx()" +Returns the \fB\s-1EVP_PKEY_CTX\s0\fR assigned to \fBctx\fR. The returned pointer should not +be freed by the caller. +.IP "\fBEVP_MD_CTX_set_pkey_ctx()\fR" 4 +.IX Item "EVP_MD_CTX_set_pkey_ctx()" +Assigns an \fB\s-1EVP_PKEY_CTX\s0\fR to \fB\s-1EVP_MD_CTX\s0\fR. This is usually used to provide +a customized \fB\s-1EVP_PKEY_CTX\s0\fR to \fBEVP_DigestSignInit\fR\|(3) or +\&\fBEVP_DigestVerifyInit\fR\|(3). The \fBpctx\fR passed to this function should be freed +by the caller. A \s-1NULL\s0 \fBpctx\fR pointer is also allowed to clear the \fB\s-1EVP_PKEY_CTX\s0\fR +assigned to \fBctx\fR. In such case, freeing the cleared \fB\s-1EVP_PKEY_CTX\s0\fR or not +depends on how the \fB\s-1EVP_PKEY_CTX\s0\fR is created. +.SH "CONTROLS" +.IX Header "CONTROLS" +\&\fBEVP_MD_CTX_ctrl()\fR can be used to send the following standard controls: +.IP "\s-1EVP_MD_CTRL_MICALG\s0" 4 +.IX Item "EVP_MD_CTRL_MICALG" +Gets the digest Message Integrity Check algorithm string. This is used when +creating S/MIME multipart/signed messages, as specified in \s-1RFC 3851.\s0 +The string value is written to \fBp2\fR. +.IP "\s-1EVP_MD_CTRL_XOF_LEN\s0" 4 +.IX Item "EVP_MD_CTRL_XOF_LEN" +This control sets the digest length for extendable output functions to \fBp1\fR. +Sending this control directly should not be necessary, the use of +\&\f(CW\*(C`EVP_DigestFinalXOF()\*(C'\fR is preferred. +Currently used by \s-1SHAKE.\s0 +.SH "FLAGS" +.IX Header "FLAGS" +\&\fBEVP_MD_CTX_set_flags()\fR, \fBEVP_MD_CTX_clear_flags()\fR and \fBEVP_MD_CTX_test_flags()\fR +can be used the manipulate and test these \fB\s-1EVP_MD_CTX\s0\fR flags: +.IP "\s-1EVP_MD_CTX_FLAG_ONESHOT\s0" 4 +.IX Item "EVP_MD_CTX_FLAG_ONESHOT" +This flag instructs the digest to optimize for one update only, if possible. +.IP "\s-1EVP_MD_CTX_FLAG_NO_INIT\s0" 4 +.IX Item "EVP_MD_CTX_FLAG_NO_INIT" +This flag instructs \fBEVP_DigestInit()\fR and similar not to initialise the +implementation specific data. +.IP "\s-1EVP_MD_CTX_FLAG_FINALISE\s0" 4 +.IX Item "EVP_MD_CTX_FLAG_FINALISE" +Some functions such as EVP_DigestSign only finalise copies of internal +contexts so additional data can be included after the finalisation call. +This is inefficient if this functionality is not required, and can be +disabled with this flag. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +.IP "\fBEVP_DigestInit_ex()\fR, \fBEVP_DigestUpdate()\fR, \fBEVP_DigestFinal_ex()\fR" 4 +.IX Item "EVP_DigestInit_ex(), EVP_DigestUpdate(), EVP_DigestFinal_ex()" +Returns 1 for +success and 0 for failure. +.IP "\fBEVP_MD_CTX_ctrl()\fR" 4 +.IX Item "EVP_MD_CTX_ctrl()" +Returns 1 if successful or 0 for failure. +.IP "\fBEVP_MD_CTX_copy_ex()\fR" 4 +.IX Item "EVP_MD_CTX_copy_ex()" +Returns 1 if successful or 0 for failure. +.IP "\fBEVP_MD_type()\fR, \fBEVP_MD_pkey_type()\fR" 4 +.IX Item "EVP_MD_type(), EVP_MD_pkey_type()" +Returns the \s-1NID\s0 of the corresponding \s-1OBJECT IDENTIFIER\s0 or NID_undef if none +exists. +.IP "\fBEVP_MD_size()\fR, \fBEVP_MD_block_size()\fR, \fBEVP_MD_CTX_size()\fR, \fBEVP_MD_CTX_block_size()\fR" 4 +.IX Item "EVP_MD_size(), EVP_MD_block_size(), EVP_MD_CTX_size(), EVP_MD_CTX_block_size()" +Returns the digest or block size in bytes. +.IP "\fBEVP_md_null()\fR" 4 +.IX Item "EVP_md_null()" +Returns a pointer to the \fB\s-1EVP_MD\s0\fR structure of the \*(L"null\*(R" message digest. +.IP "\fBEVP_get_digestbyname()\fR, \fBEVP_get_digestbynid()\fR, \fBEVP_get_digestbyobj()\fR" 4 +.IX Item "EVP_get_digestbyname(), EVP_get_digestbynid(), EVP_get_digestbyobj()" +Returns either an \fB\s-1EVP_MD\s0\fR structure or \s-1NULL\s0 if an error occurs. +.IP "\fBEVP_MD_CTX_set_pkey_ctx()\fR" 4 +.IX Item "EVP_MD_CTX_set_pkey_ctx()" +This function has no return value. +.SH "NOTES" +.IX Header "NOTES" +The \fB\s-1EVP\s0\fR interface to message digests should almost always be used in +preference to the low level interfaces. This is because the code then becomes +transparent to the digest used and much more flexible. +.PP +New applications should use the \s-1SHA\-2\s0 (such as \fBEVP_sha256\fR\|(3)) or the \s-1SHA\-3\s0 +digest algorithms (such as \fBEVP_sha3_512\fR\|(3)). The other digest algorithms +are still in common use. +.PP +For most applications the \fBimpl\fR parameter to \fBEVP_DigestInit_ex()\fR will be +set to \s-1NULL\s0 to use the default digest implementation. +.PP +The functions \fBEVP_DigestInit()\fR, \fBEVP_DigestFinal()\fR and \fBEVP_MD_CTX_copy()\fR are +obsolete but are retained to maintain compatibility with existing code. New +applications should use \fBEVP_DigestInit_ex()\fR, \fBEVP_DigestFinal_ex()\fR and +\&\fBEVP_MD_CTX_copy_ex()\fR because they can efficiently reuse a digest context +instead of initializing and cleaning it up on each call and allow non default +implementations of digests to be specified. +.PP +If digest contexts are not cleaned up after use, +memory leaks will occur. +.PP +\&\fBEVP_MD_CTX_size()\fR, \fBEVP_MD_CTX_block_size()\fR, \fBEVP_MD_CTX_type()\fR, +\&\fBEVP_get_digestbynid()\fR and \fBEVP_get_digestbyobj()\fR are defined as +macros. +.PP +\&\fBEVP_MD_CTX_ctrl()\fR sends commands to message digests for additional configuration +or control. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +This example digests the data \*(L"Test Message\en\*(R" and \*(L"Hello World\en\*(R", using the +digest name passed on the command line. +.PP +.Vb 3 +\& #include +\& #include +\& #include +\& +\& int main(int argc, char *argv[]) +\& { +\& EVP_MD_CTX *mdctx; +\& const EVP_MD *md; +\& char mess1[] = "Test Message\en"; +\& char mess2[] = "Hello World\en"; +\& unsigned char md_value[EVP_MAX_MD_SIZE]; +\& unsigned int md_len, i; +\& +\& if (argv[1] == NULL) { +\& printf("Usage: mdtest digestname\en"); +\& exit(1); +\& } +\& +\& md = EVP_get_digestbyname(argv[1]); +\& if (md == NULL) { +\& printf("Unknown message digest %s\en", argv[1]); +\& exit(1); +\& } +\& +\& mdctx = EVP_MD_CTX_new(); +\& EVP_DigestInit_ex(mdctx, md, NULL); +\& EVP_DigestUpdate(mdctx, mess1, strlen(mess1)); +\& EVP_DigestUpdate(mdctx, mess2, strlen(mess2)); +\& EVP_DigestFinal_ex(mdctx, md_value, &md_len); +\& EVP_MD_CTX_free(mdctx); +\& +\& printf("Digest is: "); +\& for (i = 0; i < md_len; i++) +\& printf("%02x", md_value[i]); +\& printf("\en"); +\& +\& exit(0); +\& } +.Ve +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBEVP_MD_meth_new\fR\|(3), +\&\fBdgst\fR\|(1), +\&\fBevp\fR\|(7) +.PP +The full list of digest algorithms are provided below. +.PP +\&\fBEVP_blake2b512\fR\|(3), +\&\fBEVP_md2\fR\|(3), +\&\fBEVP_md4\fR\|(3), +\&\fBEVP_md5\fR\|(3), +\&\fBEVP_mdc2\fR\|(3), +\&\fBEVP_ripemd160\fR\|(3), +\&\fBEVP_sha1\fR\|(3), +\&\fBEVP_sha224\fR\|(3), +\&\fBEVP_sha3_224\fR\|(3), +\&\fBEVP_sm3\fR\|(3), +\&\fBEVP_whirlpool\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +The \fBEVP_MD_CTX_create()\fR and \fBEVP_MD_CTX_destroy()\fR functions were renamed to +\&\fBEVP_MD_CTX_new()\fR and \fBEVP_MD_CTX_free()\fR in OpenSSL 1.1.0, respectively. +.PP +The link between digests and signing algorithms was fixed in OpenSSL 1.0 and +later, so now \fBEVP_sha1()\fR can be used with \s-1RSA\s0 and \s-1DSA.\s0 +.PP +The \fBEVP_dss1()\fR function was removed in OpenSSL 1.1.0. +.PP +The \fBEVP_MD_CTX_set_pkey_ctx()\fR function was added in 1.1.1. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_DigestSignInit.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_DigestSignInit.3 new file mode 100644 index 00000000..55c3aab1 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_DigestSignInit.3 @@ -0,0 +1,283 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EVP_DIGESTSIGNINIT 3" +.TH EVP_DIGESTSIGNINIT 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EVP_DigestSignInit, EVP_DigestSignUpdate, EVP_DigestSignFinal, EVP_DigestSign \- EVP signing functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int EVP_DigestSignInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, +\& const EVP_MD *type, ENGINE *e, EVP_PKEY *pkey); +\& int EVP_DigestSignUpdate(EVP_MD_CTX *ctx, const void *d, size_t cnt); +\& int EVP_DigestSignFinal(EVP_MD_CTX *ctx, unsigned char *sig, size_t *siglen); +\& +\& int EVP_DigestSign(EVP_MD_CTX *ctx, unsigned char *sigret, +\& size_t *siglen, const unsigned char *tbs, +\& size_t tbslen); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \s-1EVP\s0 signature routines are a high level interface to digital signatures. +.PP +\&\fBEVP_DigestSignInit()\fR sets up signing context \fBctx\fR to use digest \fBtype\fR from +\&\s-1ENGINE\s0 \fBe\fR and private key \fBpkey\fR. \fBctx\fR must be created with +\&\fBEVP_MD_CTX_new()\fR before calling this function. If \fBpctx\fR is not \s-1NULL,\s0 the +\&\s-1EVP_PKEY_CTX\s0 of the signing operation will be written to \fB*pctx\fR: this can +be used to set alternative signing options. Note that any existing value in +\&\fB*pctx\fR is overwritten. The \s-1EVP_PKEY_CTX\s0 value returned must not be freed +directly by the application if \fBctx\fR is not assigned an \s-1EVP_PKEY_CTX\s0 value before +being passed to \fBEVP_DigestSignInit()\fR (which means the \s-1EVP_PKEY_CTX\s0 is created +inside \fBEVP_DigestSignInit()\fR and it will be freed automatically when the +\&\s-1EVP_MD_CTX\s0 is freed). +.PP +The digest \fBtype\fR may be \s-1NULL\s0 if the signing algorithm supports it. +.PP +No \fB\s-1EVP_PKEY_CTX\s0\fR will be created by \fBEVP_DigestSignInit()\fR if the passed \fBctx\fR +has already been assigned one via \fBEVP_MD_CTX_set_pkey_ctx\fR\|(3). See also \s-1\fBSM2\s0\fR\|(7). +.PP +Only \s-1EVP_PKEY\s0 types that support signing can be used with these functions. This +includes \s-1MAC\s0 algorithms where the \s-1MAC\s0 generation is considered as a form of +\&\*(L"signing\*(R". Built-in \s-1EVP_PKEY\s0 types supported by these functions are \s-1CMAC,\s0 +Poly1305, \s-1DSA, ECDSA, HMAC, RSA,\s0 SipHash, Ed25519 and Ed448. +.PP +Not all digests can be used for all key types. The following combinations apply. +.IP "\s-1DSA\s0" 4 +.IX Item "DSA" +Supports \s-1SHA1, SHA224, SHA256, SHA384\s0 and \s-1SHA512\s0 +.IP "\s-1ECDSA\s0" 4 +.IX Item "ECDSA" +Supports \s-1SHA1, SHA224, SHA256, SHA384, SHA512\s0 and \s-1SM3\s0 +.IP "\s-1RSA\s0 with no padding" 4 +.IX Item "RSA with no padding" +Supports no digests (the digest \fBtype\fR must be \s-1NULL\s0) +.IP "\s-1RSA\s0 with X931 padding" 4 +.IX Item "RSA with X931 padding" +Supports \s-1SHA1, SHA256, SHA384\s0 and \s-1SHA512\s0 +.IP "All other \s-1RSA\s0 padding types" 4 +.IX Item "All other RSA padding types" +Support \s-1SHA1, SHA224, SHA256, SHA384, SHA512, MD5, MD5_SHA1, MD2, MD4, MDC2, +SHA3\-224, SHA3\-256, SHA3\-384, SHA3\-512\s0 +.IP "Ed25519 and Ed448" 4 +.IX Item "Ed25519 and Ed448" +Support no digests (the digest \fBtype\fR must be \s-1NULL\s0) +.IP "\s-1HMAC\s0" 4 +.IX Item "HMAC" +Supports any digest +.IP "\s-1CMAC,\s0 Poly1305 and SipHash" 4 +.IX Item "CMAC, Poly1305 and SipHash" +Will ignore any digest provided. +.PP +If RSA-PSS is used and restrictions apply then the digest must match. +.PP +\&\fBEVP_DigestSignUpdate()\fR hashes \fBcnt\fR bytes of data at \fBd\fR into the +signature context \fBctx\fR. This function can be called several times on the +same \fBctx\fR to include additional data. This function is currently implemented +using a macro. +.PP +\&\fBEVP_DigestSignFinal()\fR signs the data in \fBctx\fR and places the signature in \fBsig\fR. +If \fBsig\fR is \fB\s-1NULL\s0\fR then the maximum size of the output buffer is written to +the \fBsiglen\fR parameter. If \fBsig\fR is not \fB\s-1NULL\s0\fR then before the call the +\&\fBsiglen\fR parameter should contain the length of the \fBsig\fR buffer. If the +call is successful the signature is written to \fBsig\fR and the amount of data +written to \fBsiglen\fR. +.PP +\&\fBEVP_DigestSign()\fR signs \fBtbslen\fR bytes of data at \fBtbs\fR and places the +signature in \fBsig\fR and its length in \fBsiglen\fR in a similar way to +\&\fBEVP_DigestSignFinal()\fR. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBEVP_DigestSignInit()\fR, \fBEVP_DigestSignUpdate()\fR, \fBEVP_DigestSignFinal()\fR and +\&\fBEVP_DigestSign()\fR return 1 for success and 0 for failure. +.PP +The error codes can be obtained from \fBERR_get_error\fR\|(3). +.SH "NOTES" +.IX Header "NOTES" +The \fB\s-1EVP\s0\fR interface to digital signatures should almost always be used in +preference to the low level interfaces. This is because the code then becomes +transparent to the algorithm used and much more flexible. +.PP +\&\fBEVP_DigestSign()\fR is a one shot operation which signs a single block of data +in one function. For algorithms that support streaming it is equivalent to +calling \fBEVP_DigestSignUpdate()\fR and \fBEVP_DigestSignFinal()\fR. For algorithms which +do not support streaming (e.g. PureEdDSA) it is the only way to sign data. +.PP +In previous versions of OpenSSL there was a link between message digest types +and public key algorithms. This meant that \*(L"clone\*(R" digests such as \fBEVP_dss1()\fR +needed to be used to sign using \s-1SHA1\s0 and \s-1DSA.\s0 This is no longer necessary and +the use of clone digest is now discouraged. +.PP +For some key types and parameters the random number generator must be seeded. +If the automatic seeding or reseeding of the OpenSSL \s-1CSPRNG\s0 fails due to +external circumstances (see \s-1\fBRAND\s0\fR\|(7)), the operation will fail. +.PP +The call to \fBEVP_DigestSignFinal()\fR internally finalizes a copy of the digest +context. This means that calls to \fBEVP_DigestSignUpdate()\fR and +\&\fBEVP_DigestSignFinal()\fR can be called later to digest and sign additional data. +.PP +Since only a copy of the digest context is ever finalized, the context must +be cleaned up after use by calling \fBEVP_MD_CTX_free()\fR or a memory leak +will occur. +.PP +The use of \fBEVP_PKEY_size()\fR with these functions is discouraged because some +signature operations may have a signature length which depends on the +parameters set. As a result \fBEVP_PKEY_size()\fR would have to return a value +which indicates the maximum possible signature for any set of parameters. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBEVP_DigestVerifyInit\fR\|(3), +\&\fBEVP_DigestInit\fR\|(3), +\&\fBevp\fR\|(7), \s-1\fBHMAC\s0\fR\|(3), \s-1\fBMD2\s0\fR\|(3), +\&\s-1\fBMD5\s0\fR\|(3), \s-1\fBMDC2\s0\fR\|(3), \s-1\fBRIPEMD160\s0\fR\|(3), +\&\s-1\fBSHA1\s0\fR\|(3), \fBdgst\fR\|(1), +\&\s-1\fBRAND\s0\fR\|(7) +.SH "HISTORY" +.IX Header "HISTORY" +\&\fBEVP_DigestSignInit()\fR, \fBEVP_DigestSignUpdate()\fR and \fBEVP_DigestSignFinal()\fR +were added in OpenSSL 1.0.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2006\-2020 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_DigestVerifyInit.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_DigestVerifyInit.3 new file mode 100644 index 00000000..4ba9b171 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_DigestVerifyInit.3 @@ -0,0 +1,243 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EVP_DIGESTVERIFYINIT 3" +.TH EVP_DIGESTVERIFYINIT 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EVP_DigestVerifyInit, EVP_DigestVerifyUpdate, EVP_DigestVerifyFinal, EVP_DigestVerify \- EVP signature verification functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int EVP_DigestVerifyInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, +\& const EVP_MD *type, ENGINE *e, EVP_PKEY *pkey); +\& int EVP_DigestVerifyUpdate(EVP_MD_CTX *ctx, const void *d, size_t cnt); +\& int EVP_DigestVerifyFinal(EVP_MD_CTX *ctx, const unsigned char *sig, +\& size_t siglen); +\& int EVP_DigestVerify(EVP_MD_CTX *ctx, const unsigned char *sigret, +\& size_t siglen, const unsigned char *tbs, size_t tbslen); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \s-1EVP\s0 signature routines are a high level interface to digital signatures. +.PP +\&\fBEVP_DigestVerifyInit()\fR sets up verification context \fBctx\fR to use digest +\&\fBtype\fR from \s-1ENGINE\s0 \fBe\fR and public key \fBpkey\fR. \fBctx\fR must be created +with \fBEVP_MD_CTX_new()\fR before calling this function. If \fBpctx\fR is not \s-1NULL,\s0 the +\&\s-1EVP_PKEY_CTX\s0 of the verification operation will be written to \fB*pctx\fR: this +can be used to set alternative verification options. Note that any existing +value in \fB*pctx\fR is overwritten. The \s-1EVP_PKEY_CTX\s0 value returned must not be freed +directly by the application if \fBctx\fR is not assigned an \s-1EVP_PKEY_CTX\s0 value before +being passed to \fBEVP_DigestVerifyInit()\fR (which means the \s-1EVP_PKEY_CTX\s0 is created +inside \fBEVP_DigestVerifyInit()\fR and it will be freed automatically when the +\&\s-1EVP_MD_CTX\s0 is freed). +.PP +No \fB\s-1EVP_PKEY_CTX\s0\fR will be created by \fBEVP_DigestSignInit()\fR if the passed \fBctx\fR +has already been assigned one via \fBEVP_MD_CTX_set_pkey_ctx\fR\|(3). See also \s-1\fBSM2\s0\fR\|(7). +.PP +\&\fBEVP_DigestVerifyUpdate()\fR hashes \fBcnt\fR bytes of data at \fBd\fR into the +verification context \fBctx\fR. This function can be called several times on the +same \fBctx\fR to include additional data. This function is currently implemented +using a macro. +.PP +\&\fBEVP_DigestVerifyFinal()\fR verifies the data in \fBctx\fR against the signature in +\&\fBsig\fR of length \fBsiglen\fR. +.PP +\&\fBEVP_DigestVerify()\fR verifies \fBtbslen\fR bytes at \fBtbs\fR against the signature +in \fBsig\fR of length \fBsiglen\fR. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBEVP_DigestVerifyInit()\fR and \fBEVP_DigestVerifyUpdate()\fR return 1 for success and 0 +for failure. +.PP +\&\fBEVP_DigestVerifyFinal()\fR and \fBEVP_DigestVerify()\fR return 1 for success; any other +value indicates failure. A return value of zero indicates that the signature +did not verify successfully (that is, \fBtbs\fR did not match the original data or +the signature had an invalid form), while other values indicate a more serious +error (and sometimes also indicate an invalid signature form). +.PP +The error codes can be obtained from \fBERR_get_error\fR\|(3). +.SH "NOTES" +.IX Header "NOTES" +The \fB\s-1EVP\s0\fR interface to digital signatures should almost always be used in +preference to the low level interfaces. This is because the code then becomes +transparent to the algorithm used and much more flexible. +.PP +\&\fBEVP_DigestVerify()\fR is a one shot operation which verifies a single block of +data in one function. For algorithms that support streaming it is equivalent +to calling \fBEVP_DigestVerifyUpdate()\fR and \fBEVP_DigestVerifyFinal()\fR. For +algorithms which do not support streaming (e.g. PureEdDSA) it is the only way +to verify data. +.PP +In previous versions of OpenSSL there was a link between message digest types +and public key algorithms. This meant that \*(L"clone\*(R" digests such as \fBEVP_dss1()\fR +needed to be used to sign using \s-1SHA1\s0 and \s-1DSA.\s0 This is no longer necessary and +the use of clone digest is now discouraged. +.PP +For some key types and parameters the random number generator must be seeded. +If the automatic seeding or reseeding of the OpenSSL \s-1CSPRNG\s0 fails due to +external circumstances (see \s-1\fBRAND\s0\fR\|(7)), the operation will fail. +.PP +The call to \fBEVP_DigestVerifyFinal()\fR internally finalizes a copy of the digest +context. This means that \fBEVP_VerifyUpdate()\fR and \fBEVP_VerifyFinal()\fR can +be called later to digest and verify additional data. +.PP +Since only a copy of the digest context is ever finalized, the context must +be cleaned up after use by calling \fBEVP_MD_CTX_free()\fR or a memory leak +will occur. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBEVP_DigestSignInit\fR\|(3), +\&\fBEVP_DigestInit\fR\|(3), +\&\fBevp\fR\|(7), \s-1\fBHMAC\s0\fR\|(3), \s-1\fBMD2\s0\fR\|(3), +\&\s-1\fBMD5\s0\fR\|(3), \s-1\fBMDC2\s0\fR\|(3), \s-1\fBRIPEMD160\s0\fR\|(3), +\&\s-1\fBSHA1\s0\fR\|(3), \fBdgst\fR\|(1), +\&\s-1\fBRAND\s0\fR\|(7) +.SH "HISTORY" +.IX Header "HISTORY" +\&\fBEVP_DigestVerifyInit()\fR, \fBEVP_DigestVerifyUpdate()\fR and \fBEVP_DigestVerifyFinal()\fR +were added in OpenSSL 1.0.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2006\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_EncodeInit.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_EncodeInit.3 new file mode 100644 index 00000000..e989c398 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_EncodeInit.3 @@ -0,0 +1,290 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EVP_ENCODEINIT 3" +.TH EVP_ENCODEINIT 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EVP_ENCODE_CTX_new, EVP_ENCODE_CTX_free, EVP_ENCODE_CTX_copy, EVP_ENCODE_CTX_num, EVP_EncodeInit, EVP_EncodeUpdate, EVP_EncodeFinal, EVP_EncodeBlock, EVP_DecodeInit, EVP_DecodeUpdate, EVP_DecodeFinal, EVP_DecodeBlock \- EVP base 64 encode/decode routines +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& EVP_ENCODE_CTX *EVP_ENCODE_CTX_new(void); +\& void EVP_ENCODE_CTX_free(EVP_ENCODE_CTX *ctx); +\& int EVP_ENCODE_CTX_copy(EVP_ENCODE_CTX *dctx, EVP_ENCODE_CTX *sctx); +\& int EVP_ENCODE_CTX_num(EVP_ENCODE_CTX *ctx); +\& void EVP_EncodeInit(EVP_ENCODE_CTX *ctx); +\& int EVP_EncodeUpdate(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl, +\& const unsigned char *in, int inl); +\& void EVP_EncodeFinal(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl); +\& int EVP_EncodeBlock(unsigned char *t, const unsigned char *f, int n); +\& +\& void EVP_DecodeInit(EVP_ENCODE_CTX *ctx); +\& int EVP_DecodeUpdate(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl, +\& const unsigned char *in, int inl); +\& int EVP_DecodeFinal(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl); +\& int EVP_DecodeBlock(unsigned char *t, const unsigned char *f, int n); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \s-1EVP\s0 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, \*(L"+\*(R" and \*(L"/\*(R" to represent the data. For every 3 +bytes of binary data provided 4 bytes of base 64 encoded data will be produced +plus some occasional newlines (see below). If the input data length is not a +multiple of 3 then the output data will be padded at the end using the \*(L"=\*(R" +character. +.PP +\&\fBEVP_ENCODE_CTX_new()\fR allocates, initializes and returns a context to be used for +the encode/decode functions. +.PP +\&\fBEVP_ENCODE_CTX_free()\fR cleans up an encode/decode context \fBctx\fR and frees up the +space allocated to it. +.PP +Encoding of binary data is performed in blocks of 48 input bytes (or less for +the final block). For each 48 byte input block encoded 64 bytes of base 64 data +is output plus an additional newline character (i.e. 65 bytes in total). The +final block (which may be less than 48 bytes) will output 4 bytes for every 3 +bytes of input. If the data length is not divisible by 3 then a full 4 bytes is +still output for the final 1 or 2 bytes of input. Similarly a newline character +will also be output. +.PP +\&\fBEVP_EncodeInit()\fR initialises \fBctx\fR for the start of a new encoding operation. +.PP +\&\fBEVP_EncodeUpdate()\fR encode \fBinl\fR bytes of data found in the buffer pointed to by +\&\fBin\fR. The output is stored in the buffer \fBout\fR and the number of bytes output +is stored in \fB*outl\fR. It is the caller's responsibility to ensure that the +buffer at \fBout\fR is sufficiently large to accommodate the output data. Only full +blocks of data (48 bytes) will be immediately processed and output by this +function. Any remainder is held in the \fBctx\fR object and will be processed by a +subsequent call to \fBEVP_EncodeUpdate()\fR or \fBEVP_EncodeFinal()\fR. To calculate the +required size of the output buffer add together the value of \fBinl\fR with the +amount of unprocessed data held in \fBctx\fR and divide the result by 48 (ignore +any remainder). This gives the number of blocks of data that will be processed. +Ensure the output buffer contains 65 bytes of storage for each block, plus an +additional byte for a \s-1NUL\s0 terminator. \fBEVP_EncodeUpdate()\fR may be called +repeatedly to process large amounts of input data. In the event of an error +\&\fBEVP_EncodeUpdate()\fR will set \fB*outl\fR to 0 and return 0. On success 1 will be +returned. +.PP +\&\fBEVP_EncodeFinal()\fR must be called at the end of an encoding operation. It will +process any partial block of data remaining in the \fBctx\fR object. The output +data will be stored in \fBout\fR and the length of the data written will be stored +in \fB*outl\fR. It is the caller's responsibility to ensure that \fBout\fR is +sufficiently large to accommodate the output data which will never be more than +65 bytes plus an additional \s-1NUL\s0 terminator (i.e. 66 bytes in total). +.PP +\&\fBEVP_ENCODE_CTX_copy()\fR can be used to copy a context \fBsctx\fR to a context +\&\fBdctx\fR. \fBdctx\fR must be initialized before calling this function. +.PP +\&\fBEVP_ENCODE_CTX_num()\fR will return the number of as yet unprocessed bytes still to +be encoded or decoded that are pending in the \fBctx\fR object. +.PP +\&\fBEVP_EncodeBlock()\fR encodes a full block of input data in \fBf\fR and of length +\&\fBdlen\fR and stores it in \fBt\fR. For every 3 bytes of input provided 4 bytes of +output data will be produced. If \fBdlen\fR 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 \s-1NUL\s0 terminator character will be added. For +example if 16 bytes of input data is provided then 24 bytes of encoded data is +created plus 1 byte for a \s-1NUL\s0 terminator (i.e. 25 bytes in total). The length of +the data generated \fIwithout\fR the \s-1NUL\s0 terminator is returned from the function. +.PP +\&\fBEVP_DecodeInit()\fR initialises \fBctx\fR for the start of a new decoding operation. +.PP +\&\fBEVP_DecodeUpdate()\fR decodes \fBinl\fR characters of data found in the buffer pointed +to by \fBin\fR. The output is stored in the buffer \fBout\fR and the number of bytes +output is stored in \fB*outl\fR. It is the caller's responsibility to ensure that +the buffer at \fBout\fR is sufficiently large to accommodate the output data. This +function will attempt to decode as much data as possible in 4 byte chunks. Any +whitespace, newline or carriage return characters are ignored. Any partial chunk +of unprocessed data (1, 2 or 3 bytes) that remains at the end will be held in +the \fBctx\fR object and processed by a subsequent call to \fBEVP_DecodeUpdate()\fR. If +any illegal base 64 characters are encountered or if the base 64 padding +character \*(L"=\*(R" is encountered in the middle of the data then the function returns +\&\-1 to indicate an error. A return value of 0 or 1 indicates successful +processing of the data. A return value of 0 additionally indicates that the last +input data characters processed included the base 64 padding character \*(L"=\*(R" and +therefore no more non-padding character data is expected to be processed. For +every 4 valid base 64 bytes processed (ignoring whitespace, carriage returns and +line feeds), 3 bytes of binary output data will be produced (or less at the end +of the data where the padding character \*(L"=\*(R" has been used). +.PP +\&\fBEVP_DecodeFinal()\fR must be called at the end of a decoding operation. If there +is any unprocessed data still in \fBctx\fR then the input data must not have been +a multiple of 4 and therefore an error has occurred. The function will return \-1 +in this case. Otherwise the function returns 1 on success. +.PP +\&\fBEVP_DecodeBlock()\fR will decode the block of \fBn\fR characters of base 64 data +contained in \fBf\fR and store the result in \fBt\fR. Any leading whitespace will be +trimmed as will any trailing whitespace, newlines, carriage returns or \s-1EOF\s0 +characters. After such trimming the length of the data in \fBf\fR must be divisible +by 4. For every 4 input bytes exactly 3 output bytes will be produced. The +output will be padded with 0 bits if necessary to ensure that the output is +always 3 bytes for every 4 input bytes. This function will return the length of +the data decoded or \-1 on error. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBEVP_ENCODE_CTX_new()\fR returns a pointer to the newly allocated \s-1EVP_ENCODE_CTX\s0 +object or \s-1NULL\s0 on error. +.PP +\&\fBEVP_ENCODE_CTX_num()\fR returns the number of bytes pending encoding or decoding in +\&\fBctx\fR. +.PP +\&\fBEVP_EncodeUpdate()\fR returns 0 on error or 1 on success. +.PP +\&\fBEVP_EncodeBlock()\fR returns the number of bytes encoded excluding the \s-1NUL\s0 +terminator. +.PP +\&\fBEVP_DecodeUpdate()\fR returns \-1 on error and 0 or 1 on success. If 0 is returned +then no more non-padding base 64 characters are expected. +.PP +\&\fBEVP_DecodeFinal()\fR returns \-1 on error or 1 on success. +.PP +\&\fBEVP_DecodeBlock()\fR returns the length of the data decoded or \-1 on error. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBevp\fR\|(7) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_EncryptInit.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_EncryptInit.3 new file mode 100644 index 00000000..83753d88 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_EncryptInit.3 @@ -0,0 +1,720 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EVP_ENCRYPTINIT 3" +.TH EVP_ENCRYPTINIT 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EVP_CIPHER_CTX_new, EVP_CIPHER_CTX_reset, EVP_CIPHER_CTX_free, EVP_EncryptInit_ex, EVP_EncryptUpdate, EVP_EncryptFinal_ex, EVP_DecryptInit_ex, EVP_DecryptUpdate, EVP_DecryptFinal_ex, EVP_CipherInit_ex, EVP_CipherUpdate, EVP_CipherFinal_ex, EVP_CIPHER_CTX_set_key_length, EVP_CIPHER_CTX_ctrl, EVP_EncryptInit, EVP_EncryptFinal, EVP_DecryptInit, EVP_DecryptFinal, EVP_CipherInit, EVP_CipherFinal, EVP_get_cipherbyname, EVP_get_cipherbynid, EVP_get_cipherbyobj, EVP_CIPHER_nid, EVP_CIPHER_block_size, EVP_CIPHER_key_length, EVP_CIPHER_iv_length, EVP_CIPHER_flags, EVP_CIPHER_mode, EVP_CIPHER_type, EVP_CIPHER_CTX_cipher, EVP_CIPHER_CTX_nid, EVP_CIPHER_CTX_block_size, EVP_CIPHER_CTX_key_length, EVP_CIPHER_CTX_iv_length, EVP_CIPHER_CTX_get_app_data, EVP_CIPHER_CTX_set_app_data, EVP_CIPHER_CTX_type, EVP_CIPHER_CTX_flags, EVP_CIPHER_CTX_mode, EVP_CIPHER_param_to_asn1, EVP_CIPHER_asn1_to_param, EVP_CIPHER_CTX_set_padding, EVP_enc_null \&\- EVP cipher routines +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& EVP_CIPHER_CTX *EVP_CIPHER_CTX_new(void); +\& int EVP_CIPHER_CTX_reset(EVP_CIPHER_CTX *ctx); +\& void EVP_CIPHER_CTX_free(EVP_CIPHER_CTX *ctx); +\& +\& int EVP_EncryptInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, +\& ENGINE *impl, const unsigned char *key, const unsigned char *iv); +\& int EVP_EncryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, +\& int *outl, const unsigned char *in, int inl); +\& int EVP_EncryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl); +\& +\& int EVP_DecryptInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, +\& ENGINE *impl, const unsigned char *key, const unsigned char *iv); +\& int EVP_DecryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, +\& int *outl, const unsigned char *in, int inl); +\& int EVP_DecryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl); +\& +\& int EVP_CipherInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, +\& ENGINE *impl, const unsigned char *key, const unsigned char *iv, int enc); +\& int EVP_CipherUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, +\& int *outl, const unsigned char *in, int inl); +\& int EVP_CipherFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl); +\& +\& int EVP_EncryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, +\& const unsigned char *key, const unsigned char *iv); +\& int EVP_EncryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl); +\& +\& int EVP_DecryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, +\& const unsigned char *key, const unsigned char *iv); +\& int EVP_DecryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl); +\& +\& int EVP_CipherInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, +\& const unsigned char *key, const unsigned char *iv, int enc); +\& int EVP_CipherFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl); +\& +\& int EVP_CIPHER_CTX_set_padding(EVP_CIPHER_CTX *x, int padding); +\& int EVP_CIPHER_CTX_set_key_length(EVP_CIPHER_CTX *x, int keylen); +\& int EVP_CIPHER_CTX_ctrl(EVP_CIPHER_CTX *ctx, int type, int arg, void *ptr); +\& int EVP_CIPHER_CTX_rand_key(EVP_CIPHER_CTX *ctx, unsigned char *key); +\& +\& const EVP_CIPHER *EVP_get_cipherbyname(const char *name); +\& const EVP_CIPHER *EVP_get_cipherbynid(int nid); +\& const EVP_CIPHER *EVP_get_cipherbyobj(const ASN1_OBJECT *a); +\& +\& int EVP_CIPHER_nid(const EVP_CIPHER *e); +\& int EVP_CIPHER_block_size(const EVP_CIPHER *e); +\& int EVP_CIPHER_key_length(const EVP_CIPHER *e); +\& int EVP_CIPHER_iv_length(const EVP_CIPHER *e); +\& unsigned long EVP_CIPHER_flags(const EVP_CIPHER *e); +\& unsigned long EVP_CIPHER_mode(const EVP_CIPHER *e); +\& int EVP_CIPHER_type(const EVP_CIPHER *ctx); +\& +\& const EVP_CIPHER *EVP_CIPHER_CTX_cipher(const EVP_CIPHER_CTX *ctx); +\& int EVP_CIPHER_CTX_nid(const EVP_CIPHER_CTX *ctx); +\& int EVP_CIPHER_CTX_block_size(const EVP_CIPHER_CTX *ctx); +\& int EVP_CIPHER_CTX_key_length(const EVP_CIPHER_CTX *ctx); +\& int EVP_CIPHER_CTX_iv_length(const EVP_CIPHER_CTX *ctx); +\& void *EVP_CIPHER_CTX_get_app_data(const EVP_CIPHER_CTX *ctx); +\& void EVP_CIPHER_CTX_set_app_data(const EVP_CIPHER_CTX *ctx, void *data); +\& int EVP_CIPHER_CTX_type(const EVP_CIPHER_CTX *ctx); +\& int EVP_CIPHER_CTX_mode(const EVP_CIPHER_CTX *ctx); +\& +\& int EVP_CIPHER_param_to_asn1(EVP_CIPHER_CTX *c, ASN1_TYPE *type); +\& int EVP_CIPHER_asn1_to_param(EVP_CIPHER_CTX *c, ASN1_TYPE *type); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \s-1EVP\s0 cipher routines are a high level interface to certain +symmetric ciphers. +.PP +\&\fBEVP_CIPHER_CTX_new()\fR creates a cipher context. +.PP +\&\fBEVP_CIPHER_CTX_free()\fR clears all information from a cipher context +and free up any allocated memory associate with it, including \fBctx\fR +itself. This function should be called after all operations using a +cipher are complete so sensitive information does not remain in +memory. +.PP +\&\fBEVP_EncryptInit_ex()\fR sets up cipher context \fBctx\fR for encryption +with cipher \fBtype\fR from \s-1ENGINE\s0 \fBimpl\fR. \fBctx\fR must be created +before calling this function. \fBtype\fR is normally supplied +by a function such as \fBEVP_aes_256_cbc()\fR. If \fBimpl\fR is \s-1NULL\s0 then the +default implementation is used. \fBkey\fR is the symmetric key to use +and \fBiv\fR is the \s-1IV\s0 to use (if necessary), the actual number of bytes +used for the key and \s-1IV\s0 depends on the cipher. It is possible to set +all parameters to \s-1NULL\s0 except \fBtype\fR in an initial call and supply +the remaining parameters in subsequent calls, all of which have \fBtype\fR +set to \s-1NULL.\s0 This is done when the default cipher parameters are not +appropriate. +.PP +\&\fBEVP_EncryptUpdate()\fR encrypts \fBinl\fR bytes from the buffer \fBin\fR and +writes the encrypted version to \fBout\fR. 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 \fBout\fR should contain sufficient +room. The actual number of bytes written is placed in \fBoutl\fR. It also +checks if \fBin\fR and \fBout\fR are partially overlapping, and if they are +0 is returned to indicate failure. +.PP +If padding is enabled (the default) then \fBEVP_EncryptFinal_ex()\fR encrypts +the \*(L"final\*(R" data, that is any data that remains in a partial block. +It uses standard block padding (aka \s-1PKCS\s0 padding) as described in +the \s-1NOTES\s0 section, below. The encrypted +final data is written to \fBout\fR which should have sufficient space for +one cipher block. The number of bytes written is placed in \fBoutl\fR. After +this function is called the encryption operation is finished and no further +calls to \fBEVP_EncryptUpdate()\fR should be made. +.PP +If padding is disabled then \fBEVP_EncryptFinal_ex()\fR will not encrypt any more +data and it will return an error if any data remains in a partial block: +that is if the total data length is not a multiple of the block size. +.PP +\&\fBEVP_DecryptInit_ex()\fR, \fBEVP_DecryptUpdate()\fR and \fBEVP_DecryptFinal_ex()\fR are the +corresponding decryption operations. \fBEVP_DecryptFinal()\fR will return an +error code if padding is enabled and the final block is not correctly +formatted. The parameters and restrictions are identical to the encryption +operations except that if padding is enabled the decrypted data buffer \fBout\fR +passed to \fBEVP_DecryptUpdate()\fR should have sufficient room for +(\fBinl\fR + cipher_block_size) bytes unless the cipher block size is 1 in +which case \fBinl\fR bytes is sufficient. +.PP +\&\fBEVP_CipherInit_ex()\fR, \fBEVP_CipherUpdate()\fR and \fBEVP_CipherFinal_ex()\fR are +functions that can be used for decryption or encryption. The operation +performed depends on the value of the \fBenc\fR parameter. It should be set +to 1 for encryption, 0 for decryption and \-1 to leave the value unchanged +(the actual value of 'enc' being supplied in a previous call). +.PP +\&\fBEVP_CIPHER_CTX_reset()\fR clears all information from a cipher context +and free up any allocated memory associate with it, except the \fBctx\fR +itself. This function should be called anytime \fBctx\fR is to be reused +for another \fBEVP_CipherInit()\fR / \fBEVP_CipherUpdate()\fR / \fBEVP_CipherFinal()\fR +series of calls. +.PP +\&\fBEVP_EncryptInit()\fR, \fBEVP_DecryptInit()\fR and \fBEVP_CipherInit()\fR behave in a +similar way to \fBEVP_EncryptInit_ex()\fR, \fBEVP_DecryptInit_ex()\fR and +\&\fBEVP_CipherInit_ex()\fR except they always use the default cipher implementation. +.PP +\&\fBEVP_EncryptFinal()\fR, \fBEVP_DecryptFinal()\fR and \fBEVP_CipherFinal()\fR are +identical to \fBEVP_EncryptFinal_ex()\fR, \fBEVP_DecryptFinal_ex()\fR and +\&\fBEVP_CipherFinal_ex()\fR. In previous releases they also cleaned up +the \fBctx\fR, but this is no longer done and \fBEVP_CIPHER_CTX_clean()\fR +must be called to free any context resources. +.PP +\&\fBEVP_get_cipherbyname()\fR, \fBEVP_get_cipherbynid()\fR and \fBEVP_get_cipherbyobj()\fR +return an \s-1EVP_CIPHER\s0 structure when passed a cipher name, a \s-1NID\s0 or an +\&\s-1ASN1_OBJECT\s0 structure. +.PP +\&\fBEVP_CIPHER_nid()\fR and \fBEVP_CIPHER_CTX_nid()\fR return the \s-1NID\s0 of a cipher when +passed an \fB\s-1EVP_CIPHER\s0\fR or \fB\s-1EVP_CIPHER_CTX\s0\fR structure. The actual \s-1NID\s0 +value is an internal value which may not have a corresponding \s-1OBJECT +IDENTIFIER.\s0 +.PP +\&\fBEVP_CIPHER_CTX_set_padding()\fR enables or disables padding. This +function should be called after the context is set up for encryption +or decryption with \fBEVP_EncryptInit_ex()\fR, \fBEVP_DecryptInit_ex()\fR or +\&\fBEVP_CipherInit_ex()\fR. By default encryption operations are padded using +standard block padding and the padding is checked and removed when +decrypting. If the \fBpad\fR parameter is zero then no padding is +performed, the total amount of data encrypted or decrypted must then +be a multiple of the block size or an error will occur. +.PP +\&\fBEVP_CIPHER_key_length()\fR and \fBEVP_CIPHER_CTX_key_length()\fR return the key +length of a cipher when passed an \fB\s-1EVP_CIPHER\s0\fR or \fB\s-1EVP_CIPHER_CTX\s0\fR +structure. The constant \fB\s-1EVP_MAX_KEY_LENGTH\s0\fR is the maximum key length +for all ciphers. Note: although \fBEVP_CIPHER_key_length()\fR is fixed for a +given cipher, the value of \fBEVP_CIPHER_CTX_key_length()\fR may be different +for variable key length ciphers. +.PP +\&\fBEVP_CIPHER_CTX_set_key_length()\fR sets the key length of the cipher ctx. +If the cipher is a fixed length cipher then attempting to set the key +length to any value other than the fixed value is an error. +.PP +\&\fBEVP_CIPHER_iv_length()\fR and \fBEVP_CIPHER_CTX_iv_length()\fR return the \s-1IV\s0 +length of a cipher when passed an \fB\s-1EVP_CIPHER\s0\fR or \fB\s-1EVP_CIPHER_CTX\s0\fR. +It will return zero if the cipher does not use an \s-1IV.\s0 The constant +\&\fB\s-1EVP_MAX_IV_LENGTH\s0\fR is the maximum \s-1IV\s0 length for all ciphers. +.PP +\&\fBEVP_CIPHER_block_size()\fR and \fBEVP_CIPHER_CTX_block_size()\fR return the block +size of a cipher when passed an \fB\s-1EVP_CIPHER\s0\fR or \fB\s-1EVP_CIPHER_CTX\s0\fR +structure. The constant \fB\s-1EVP_MAX_BLOCK_LENGTH\s0\fR is also the maximum block +length for all ciphers. +.PP +\&\fBEVP_CIPHER_type()\fR and \fBEVP_CIPHER_CTX_type()\fR return the type of the passed +cipher or context. This \*(L"type\*(R" is the actual \s-1NID\s0 of the cipher \s-1OBJECT +IDENTIFIER\s0 as such it ignores the cipher parameters and 40 bit \s-1RC2\s0 and +128 bit \s-1RC2\s0 have the same \s-1NID.\s0 If the cipher does not have an object +identifier or does not have \s-1ASN1\s0 support this function will return +\&\fBNID_undef\fR. +.PP +\&\fBEVP_CIPHER_CTX_cipher()\fR returns the \fB\s-1EVP_CIPHER\s0\fR structure when passed +an \fB\s-1EVP_CIPHER_CTX\s0\fR structure. +.PP +\&\fBEVP_CIPHER_mode()\fR and \fBEVP_CIPHER_CTX_mode()\fR return the block cipher mode: +\&\s-1EVP_CIPH_ECB_MODE, EVP_CIPH_CBC_MODE, EVP_CIPH_CFB_MODE, EVP_CIPH_OFB_MODE, +EVP_CIPH_CTR_MODE, EVP_CIPH_GCM_MODE, EVP_CIPH_CCM_MODE, EVP_CIPH_XTS_MODE, +EVP_CIPH_WRAP_MODE\s0 or \s-1EVP_CIPH_OCB_MODE.\s0 If the cipher is a stream cipher then +\&\s-1EVP_CIPH_STREAM_CIPHER\s0 is returned. +.PP +\&\fBEVP_CIPHER_param_to_asn1()\fR sets the AlgorithmIdentifier \*(L"parameter\*(R" based +on the passed cipher. This will typically include any parameters and an +\&\s-1IV.\s0 The cipher \s-1IV\s0 (if any) must be set when this call is made. This call +should be made before the cipher is actually \*(L"used\*(R" (before any +\&\fBEVP_EncryptUpdate()\fR, \fBEVP_DecryptUpdate()\fR calls for example). This function +may fail if the cipher does not have any \s-1ASN1\s0 support. +.PP +\&\fBEVP_CIPHER_asn1_to_param()\fR sets the cipher parameters based on an \s-1ASN1\s0 +AlgorithmIdentifier \*(L"parameter\*(R". The precise effect depends on the cipher +In the case of \s-1RC2,\s0 for example, it will set the \s-1IV\s0 and effective key length. +This function should be called after the base cipher type is set but before +the key is set. For example \fBEVP_CipherInit()\fR will be called with the \s-1IV\s0 and +key set to \s-1NULL,\s0 \fBEVP_CIPHER_asn1_to_param()\fR will be called and finally +\&\fBEVP_CipherInit()\fR again with all parameters except the key set to \s-1NULL.\s0 It is +possible for this function to fail if the cipher does not have any \s-1ASN1\s0 support +or the parameters cannot be set (for example the \s-1RC2\s0 effective key length +is not supported. +.PP +\&\fBEVP_CIPHER_CTX_ctrl()\fR allows various cipher specific parameters to be determined +and set. +.PP +\&\fBEVP_CIPHER_CTX_rand_key()\fR generates a random key of the appropriate length +based on the cipher context. The \s-1EVP_CIPHER\s0 can provide its own random key +generation routine to support keys of a specific form. \fBKey\fR must point to a +buffer at least as big as the value returned by \fBEVP_CIPHER_CTX_key_length()\fR. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBEVP_CIPHER_CTX_new()\fR returns a pointer to a newly created +\&\fB\s-1EVP_CIPHER_CTX\s0\fR for success and \fB\s-1NULL\s0\fR for failure. +.PP +\&\fBEVP_EncryptInit_ex()\fR, \fBEVP_EncryptUpdate()\fR and \fBEVP_EncryptFinal_ex()\fR +return 1 for success and 0 for failure. +.PP +\&\fBEVP_DecryptInit_ex()\fR and \fBEVP_DecryptUpdate()\fR return 1 for success and 0 for failure. +\&\fBEVP_DecryptFinal_ex()\fR returns 0 if the decrypt failed or 1 for success. +.PP +\&\fBEVP_CipherInit_ex()\fR and \fBEVP_CipherUpdate()\fR return 1 for success and 0 for failure. +\&\fBEVP_CipherFinal_ex()\fR returns 0 for a decryption failure or 1 for success. +.PP +\&\fBEVP_CIPHER_CTX_reset()\fR returns 1 for success and 0 for failure. +.PP +\&\fBEVP_get_cipherbyname()\fR, \fBEVP_get_cipherbynid()\fR and \fBEVP_get_cipherbyobj()\fR +return an \fB\s-1EVP_CIPHER\s0\fR structure or \s-1NULL\s0 on error. +.PP +\&\fBEVP_CIPHER_nid()\fR and \fBEVP_CIPHER_CTX_nid()\fR return a \s-1NID.\s0 +.PP +\&\fBEVP_CIPHER_block_size()\fR and \fBEVP_CIPHER_CTX_block_size()\fR return the block +size. +.PP +\&\fBEVP_CIPHER_key_length()\fR and \fBEVP_CIPHER_CTX_key_length()\fR return the key +length. +.PP +\&\fBEVP_CIPHER_CTX_set_padding()\fR always returns 1. +.PP +\&\fBEVP_CIPHER_iv_length()\fR and \fBEVP_CIPHER_CTX_iv_length()\fR return the \s-1IV\s0 +length or zero if the cipher does not use an \s-1IV.\s0 +.PP +\&\fBEVP_CIPHER_type()\fR and \fBEVP_CIPHER_CTX_type()\fR return the \s-1NID\s0 of the cipher's +\&\s-1OBJECT IDENTIFIER\s0 or NID_undef if it has no defined \s-1OBJECT IDENTIFIER.\s0 +.PP +\&\fBEVP_CIPHER_CTX_cipher()\fR returns an \fB\s-1EVP_CIPHER\s0\fR structure. +.PP +\&\fBEVP_CIPHER_param_to_asn1()\fR and \fBEVP_CIPHER_asn1_to_param()\fR return greater +than zero for success and zero or a negative number on failure. +.PP +\&\fBEVP_CIPHER_CTX_rand_key()\fR returns 1 for success. +.SH "CIPHER LISTING" +.IX Header "CIPHER LISTING" +All algorithms have a fixed key length unless otherwise stated. +.PP +Refer to \*(L"\s-1SEE ALSO\*(R"\s0 for the full list of ciphers available through the \s-1EVP\s0 +interface. +.IP "\fBEVP_enc_null()\fR" 4 +.IX Item "EVP_enc_null()" +Null cipher: does nothing. +.SH "AEAD Interface" +.IX Header "AEAD Interface" +The \s-1EVP\s0 interface for Authenticated Encryption with Associated Data (\s-1AEAD\s0) +modes are subtly altered and several additional \fIctrl\fR operations are supported +depending on the mode specified. +.PP +To specify additional authenticated data (\s-1AAD\s0), a call to \fBEVP_CipherUpdate()\fR, +\&\fBEVP_EncryptUpdate()\fR or \fBEVP_DecryptUpdate()\fR should be made with the output +parameter \fBout\fR set to \fB\s-1NULL\s0\fR. +.PP +When decrypting, the return value of \fBEVP_DecryptFinal()\fR or \fBEVP_CipherFinal()\fR +indicates whether the operation was successful. If it does not indicate success, +the authentication operation has failed and any output data \fB\s-1MUST NOT\s0\fR be used +as it is corrupted. +.SS "\s-1GCM\s0 and \s-1OCB\s0 Modes" +.IX Subsection "GCM and OCB Modes" +The following \fIctrl\fRs are supported in \s-1GCM\s0 and \s-1OCB\s0 modes. +.IP "EVP_CIPHER_CTX_ctrl(ctx, \s-1EVP_CTRL_AEAD_SET_IVLEN,\s0 ivlen, \s-1NULL\s0)" 4 +.IX Item "EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_IVLEN, ivlen, NULL)" +Sets the \s-1IV\s0 length. This call can only be made before specifying an \s-1IV.\s0 If +not called a default \s-1IV\s0 length is used. +.Sp +For \s-1GCM AES\s0 and \s-1OCB AES\s0 the default is 12 (i.e. 96 bits). For \s-1OCB\s0 mode the +maximum is 15. +.IP "EVP_CIPHER_CTX_ctrl(ctx, \s-1EVP_CTRL_AEAD_GET_TAG,\s0 taglen, tag)" 4 +.IX Item "EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_GET_TAG, taglen, tag)" +Writes \f(CW\*(C`taglen\*(C'\fR bytes of the tag value to the buffer indicated by \f(CW\*(C`tag\*(C'\fR. +This call can only be made when encrypting data and \fBafter\fR all data has been +processed (e.g. after an \fBEVP_EncryptFinal()\fR call). +.Sp +For \s-1OCB,\s0 \f(CW\*(C`taglen\*(C'\fR must either be 16 or the value previously set via +\&\fB\s-1EVP_CTRL_AEAD_SET_TAG\s0\fR. +.IP "EVP_CIPHER_CTX_ctrl(ctx, \s-1EVP_CTRL_AEAD_SET_TAG,\s0 taglen, tag)" 4 +.IX Item "EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_TAG, taglen, tag)" +Sets the expected tag to \f(CW\*(C`taglen\*(C'\fR bytes from \f(CW\*(C`tag\*(C'\fR. +The tag length can only be set before specifying an \s-1IV.\s0 +\&\f(CW\*(C`taglen\*(C'\fR must be between 1 and 16 inclusive. +.Sp +For \s-1GCM,\s0 this call is only valid when decrypting data. +.Sp +For \s-1OCB,\s0 this call is valid when decrypting data to set the expected tag, +and before encryption to set the desired tag length. +.Sp +In \s-1OCB\s0 mode, calling this before encryption with \f(CW\*(C`tag\*(C'\fR set to \f(CW\*(C`NULL\*(C'\fR sets the +tag length. If this is not called prior to encryption, a default tag length is +used. +.Sp +For \s-1OCB AES,\s0 the default tag length is 16 (i.e. 128 bits). It is also the +maximum tag length for \s-1OCB.\s0 +.SS "\s-1CCM\s0 Mode" +.IX Subsection "CCM Mode" +The \s-1EVP\s0 interface for \s-1CCM\s0 mode is similar to that of the \s-1GCM\s0 mode but with a +few additional requirements and different \fIctrl\fR values. +.PP +For \s-1CCM\s0 mode, the total plaintext or ciphertext length \fB\s-1MUST\s0\fR be passed to +\&\fBEVP_CipherUpdate()\fR, \fBEVP_EncryptUpdate()\fR or \fBEVP_DecryptUpdate()\fR with the output +and input parameters (\fBin\fR and \fBout\fR) set to \fB\s-1NULL\s0\fR and the length passed in +the \fBinl\fR parameter. +.PP +The following \fIctrl\fRs are supported in \s-1CCM\s0 mode. +.IP "EVP_CIPHER_CTX_ctrl(ctx, \s-1EVP_CTRL_AEAD_SET_TAG,\s0 taglen, tag)" 4 +.IX Item "EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_TAG, taglen, tag)" +This call is made to set the expected \fB\s-1CCM\s0\fR tag value when decrypting or +the length of the tag (with the \f(CW\*(C`tag\*(C'\fR parameter set to \s-1NULL\s0) when encrypting. +The tag length is often referred to as \fBM\fR. If not set a default value is +used (12 for \s-1AES\s0). When decrypting, the tag needs to be set before passing +in data to be decrypted, but as in \s-1GCM\s0 and \s-1OCB\s0 mode, it can be set after +passing additional authenticated data (see \*(L"\s-1AEAD\s0 Interface\*(R"). +.IP "EVP_CIPHER_CTX_ctrl(ctx, \s-1EVP_CTRL_CCM_SET_L,\s0 ivlen, \s-1NULL\s0)" 4 +.IX Item "EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_CCM_SET_L, ivlen, NULL)" +Sets the \s-1CCM\s0 \fBL\fR value. If not set a default is used (8 for \s-1AES\s0). +.IP "EVP_CIPHER_CTX_ctrl(ctx, \s-1EVP_CTRL_AEAD_SET_IVLEN,\s0 ivlen, \s-1NULL\s0)" 4 +.IX Item "EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_IVLEN, ivlen, NULL)" +Sets the \s-1CCM\s0 nonce (\s-1IV\s0) length. This call can only be made before specifying an +nonce value. The nonce length is given by \fB15 \- L\fR so it is 7 by default for +\&\s-1AES.\s0 +.SS "ChaCha20\-Poly1305" +.IX Subsection "ChaCha20-Poly1305" +The following \fIctrl\fRs are supported for the ChaCha20\-Poly1305 \s-1AEAD\s0 algorithm. +.IP "EVP_CIPHER_CTX_ctrl(ctx, \s-1EVP_CTRL_AEAD_SET_IVLEN,\s0 ivlen, \s-1NULL\s0)" 4 +.IX Item "EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_IVLEN, ivlen, NULL)" +Sets the nonce length. This call can only be made before specifying the nonce. +If not called a default nonce length of 12 (i.e. 96 bits) is used. The maximum +nonce length is 12 bytes (i.e. 96\-bits). If a nonce of less than 12 bytes is set +then the nonce is automatically padded with leading 0 bytes to make it 12 bytes +in length. +.IP "EVP_CIPHER_CTX_ctrl(ctx, \s-1EVP_CTRL_AEAD_GET_TAG,\s0 taglen, tag)" 4 +.IX Item "EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_GET_TAG, taglen, tag)" +Writes \f(CW\*(C`taglen\*(C'\fR bytes of the tag value to the buffer indicated by \f(CW\*(C`tag\*(C'\fR. +This call can only be made when encrypting data and \fBafter\fR all data has been +processed (e.g. after an \fBEVP_EncryptFinal()\fR call). +.Sp +\&\f(CW\*(C`taglen\*(C'\fR specified here must be 16 (\fB\s-1POLY1305_BLOCK_SIZE\s0\fR, i.e. 128\-bits) or +less. +.IP "EVP_CIPHER_CTX_ctrl(ctx, \s-1EVP_CTRL_AEAD_SET_TAG,\s0 taglen, tag)" 4 +.IX Item "EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_TAG, taglen, tag)" +Sets the expected tag to \f(CW\*(C`taglen\*(C'\fR bytes from \f(CW\*(C`tag\*(C'\fR. +The tag length can only be set before specifying an \s-1IV.\s0 +\&\f(CW\*(C`taglen\*(C'\fR must be between 1 and 16 (\fB\s-1POLY1305_BLOCK_SIZE\s0\fR) inclusive. +This call is only valid when decrypting data. +.SH "NOTES" +.IX Header "NOTES" +Where possible the \fB\s-1EVP\s0\fR interface to symmetric ciphers should be used in +preference to the low level interfaces. This is because the code then becomes +transparent to the cipher used and much more flexible. Additionally, the +\&\fB\s-1EVP\s0\fR interface will ensure the use of platform specific cryptographic +acceleration such as AES-NI (the low level interfaces do not provide the +guarantee). +.PP +\&\s-1PKCS\s0 padding works by adding \fBn\fR padding bytes of value \fBn\fR to make the total +length of the encrypted data a multiple of the block size. Padding is always +added so if the data is already a multiple of the block size \fBn\fR will equal +the block size. For example if the block size is 8 and 11 bytes are to be +encrypted then 5 padding bytes of value 5 will be added. +.PP +When decrypting the final block is checked to see if it has the correct form. +.PP +Although the decryption operation can produce an error if padding is enabled, +it is not a strong test that the input data or key is correct. A random block +has better than 1 in 256 chance of being of the correct format and problems with +the input data earlier on will not produce a final decrypt error. +.PP +If padding is disabled then the decryption operation will always succeed if +the total amount of data decrypted is a multiple of the block size. +.PP +The functions \fBEVP_EncryptInit()\fR, \fBEVP_EncryptFinal()\fR, \fBEVP_DecryptInit()\fR, +\&\fBEVP_CipherInit()\fR and \fBEVP_CipherFinal()\fR are obsolete but are retained for +compatibility with existing code. New code should use \fBEVP_EncryptInit_ex()\fR, +\&\fBEVP_EncryptFinal_ex()\fR, \fBEVP_DecryptInit_ex()\fR, \fBEVP_DecryptFinal_ex()\fR, +\&\fBEVP_CipherInit_ex()\fR and \fBEVP_CipherFinal_ex()\fR because they can reuse an +existing context without allocating and freeing it up on each call. +.PP +There are some differences between functions \fBEVP_CipherInit()\fR and +\&\fBEVP_CipherInit_ex()\fR, significant in some circumstances. \fBEVP_CipherInit()\fR fills +the passed context object with zeros. As a consequence, \fBEVP_CipherInit()\fR does +not allow step-by-step initialization of the ctx when the \fIkey\fR and \fIiv\fR are +passed in separate calls. It also means that the flags set for the \s-1CTX\s0 are +removed, and it is especially important for the +\&\fB\s-1EVP_CIPHER_CTX_FLAG_WRAP_ALLOW\s0\fR flag treated specially in +\&\fBEVP_CipherInit_ex()\fR. +.PP +\&\fBEVP_get_cipherbynid()\fR, and \fBEVP_get_cipherbyobj()\fR are implemented as macros. +.SH "BUGS" +.IX Header "BUGS" +\&\fB\s-1EVP_MAX_KEY_LENGTH\s0\fR and \fB\s-1EVP_MAX_IV_LENGTH\s0\fR only refer to the internal +ciphers with default key lengths. If custom ciphers exceed these values the +results are unpredictable. This is because it has become standard practice to +define a generic key as a fixed unsigned char array containing +\&\fB\s-1EVP_MAX_KEY_LENGTH\s0\fR bytes. +.PP +The \s-1ASN1\s0 code is incomplete (and sometimes inaccurate) it has only been tested +for certain common S/MIME ciphers (\s-1RC2, DES,\s0 triple \s-1DES\s0) in \s-1CBC\s0 mode. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +Encrypt a string using \s-1IDEA:\s0 +.PP +.Vb 10 +\& int do_crypt(char *outfile) +\& { +\& unsigned char outbuf[1024]; +\& int outlen, tmplen; +\& /* +\& * Bogus key and IV: we\*(Aqd normally set these from +\& * another source. +\& */ +\& unsigned char key[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; +\& unsigned char iv[] = {1,2,3,4,5,6,7,8}; +\& char intext[] = "Some Crypto Text"; +\& EVP_CIPHER_CTX *ctx; +\& FILE *out; +\& +\& ctx = EVP_CIPHER_CTX_new(); +\& EVP_EncryptInit_ex(ctx, EVP_idea_cbc(), NULL, key, iv); +\& +\& if (!EVP_EncryptUpdate(ctx, outbuf, &outlen, intext, strlen(intext))) { +\& /* Error */ +\& EVP_CIPHER_CTX_free(ctx); +\& return 0; +\& } +\& /* +\& * Buffer passed to EVP_EncryptFinal() must be after data just +\& * encrypted to avoid overwriting it. +\& */ +\& if (!EVP_EncryptFinal_ex(ctx, outbuf + outlen, &tmplen)) { +\& /* Error */ +\& EVP_CIPHER_CTX_free(ctx); +\& return 0; +\& } +\& outlen += tmplen; +\& EVP_CIPHER_CTX_free(ctx); +\& /* +\& * Need binary mode for fopen because encrypted data is +\& * binary data. Also cannot use strlen() on it because +\& * it won\*(Aqt be NUL terminated and may contain embedded +\& * NULs. +\& */ +\& out = fopen(outfile, "wb"); +\& if (out == NULL) { +\& /* Error */ +\& return 0; +\& } +\& fwrite(outbuf, 1, outlen, out); +\& fclose(out); +\& return 1; +\& } +.Ve +.PP +The ciphertext from the above example can be decrypted using the \fBopenssl\fR +utility with the command line (shown on two lines for clarity): +.PP +.Vb 2 +\& openssl idea \-d \e +\& \-K 000102030405060708090A0B0C0D0E0F \-iv 0102030405060708 . diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_MD_meth_new.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_MD_meth_new.3 new file mode 100644 index 00000000..baea6040 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_MD_meth_new.3 @@ -0,0 +1,301 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EVP_MD_METH_NEW 3" +.TH EVP_MD_METH_NEW 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EVP_MD_meth_dup, EVP_MD_meth_new, EVP_MD_meth_free, EVP_MD_meth_set_input_blocksize, EVP_MD_meth_set_result_size, EVP_MD_meth_set_app_datasize, EVP_MD_meth_set_flags, EVP_MD_meth_set_init, EVP_MD_meth_set_update, EVP_MD_meth_set_final, EVP_MD_meth_set_copy, EVP_MD_meth_set_cleanup, EVP_MD_meth_set_ctrl, EVP_MD_meth_get_input_blocksize, EVP_MD_meth_get_result_size, EVP_MD_meth_get_app_datasize, EVP_MD_meth_get_flags, EVP_MD_meth_get_init, EVP_MD_meth_get_update, EVP_MD_meth_get_final, EVP_MD_meth_get_copy, EVP_MD_meth_get_cleanup, EVP_MD_meth_get_ctrl \&\- Routines to build up EVP_MD methods +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& EVP_MD *EVP_MD_meth_new(int md_type, int pkey_type); +\& void EVP_MD_meth_free(EVP_MD *md); +\& EVP_MD *EVP_MD_meth_dup(const EVP_MD *md); +\& +\& int EVP_MD_meth_set_input_blocksize(EVP_MD *md, int blocksize); +\& int EVP_MD_meth_set_result_size(EVP_MD *md, int resultsize); +\& int EVP_MD_meth_set_app_datasize(EVP_MD *md, int datasize); +\& int EVP_MD_meth_set_flags(EVP_MD *md, unsigned long flags); +\& int EVP_MD_meth_set_init(EVP_MD *md, int (*init)(EVP_MD_CTX *ctx)); +\& int EVP_MD_meth_set_update(EVP_MD *md, int (*update)(EVP_MD_CTX *ctx, +\& const void *data, +\& size_t count)); +\& int EVP_MD_meth_set_final(EVP_MD *md, int (*final)(EVP_MD_CTX *ctx, +\& unsigned char *md)); +\& int EVP_MD_meth_set_copy(EVP_MD *md, int (*copy)(EVP_MD_CTX *to, +\& const EVP_MD_CTX *from)); +\& int EVP_MD_meth_set_cleanup(EVP_MD *md, int (*cleanup)(EVP_MD_CTX *ctx)); +\& int EVP_MD_meth_set_ctrl(EVP_MD *md, int (*ctrl)(EVP_MD_CTX *ctx, int cmd, +\& int p1, void *p2)); +\& +\& int EVP_MD_meth_get_input_blocksize(const EVP_MD *md); +\& int EVP_MD_meth_get_result_size(const EVP_MD *md); +\& int EVP_MD_meth_get_app_datasize(const EVP_MD *md); +\& unsigned long EVP_MD_meth_get_flags(const EVP_MD *md); +\& int (*EVP_MD_meth_get_init(const EVP_MD *md))(EVP_MD_CTX *ctx); +\& int (*EVP_MD_meth_get_update(const EVP_MD *md))(EVP_MD_CTX *ctx, +\& const void *data, +\& size_t count); +\& int (*EVP_MD_meth_get_final(const EVP_MD *md))(EVP_MD_CTX *ctx, +\& unsigned char *md); +\& int (*EVP_MD_meth_get_copy(const EVP_MD *md))(EVP_MD_CTX *to, +\& const EVP_MD_CTX *from); +\& int (*EVP_MD_meth_get_cleanup(const EVP_MD *md))(EVP_MD_CTX *ctx); +\& int (*EVP_MD_meth_get_ctrl(const EVP_MD *md))(EVP_MD_CTX *ctx, int cmd, +\& int p1, void *p2); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fB\s-1EVP_MD\s0\fR type is a structure for digest method implementation. +It can also have associated public/private key signing and verifying +routines. +.PP +\&\fBEVP_MD_meth_new()\fR creates a new \fB\s-1EVP_MD\s0\fR structure. +.PP +\&\fBEVP_MD_meth_dup()\fR creates a copy of \fBmd\fR. +.PP +\&\fBEVP_MD_meth_free()\fR destroys a \fB\s-1EVP_MD\s0\fR structure. +.PP +\&\fBEVP_MD_meth_set_input_blocksize()\fR sets the internal input block size +for the method \fBmd\fR to \fBblocksize\fR bytes. +.PP +\&\fBEVP_MD_meth_set_result_size()\fR sets the size of the result that the +digest method in \fBmd\fR is expected to produce to \fBresultsize\fR bytes. +.PP +The digest method may have its own private data, which OpenSSL will +allocate for it. \fBEVP_MD_meth_set_app_datasize()\fR should be used to +set the size for it to \fBdatasize\fR. +.PP +\&\fBEVP_MD_meth_set_flags()\fR sets the flags to describe optional +behaviours in the particular \fBmd\fR. Several flags can be or'd +together. The available flags are: +.IP "\s-1EVP_MD_FLAG_ONESHOT\s0" 4 +.IX Item "EVP_MD_FLAG_ONESHOT" +This digest method can only handle one block of input. +.IP "\s-1EVP_MD_FLAG_XOF\s0" 4 +.IX Item "EVP_MD_FLAG_XOF" +This digest method is an extensible-output function (\s-1XOF\s0) and supports +the \fB\s-1EVP_MD_CTRL_XOF_LEN\s0\fR control. +.IP "\s-1EVP_MD_FLAG_DIGALGID_NULL\s0" 4 +.IX Item "EVP_MD_FLAG_DIGALGID_NULL" +When setting up a DigestAlgorithmIdentifier, this flag will have the +parameter set to \s-1NULL\s0 by default. Use this for PKCS#1. \fINote: if +combined with \s-1EVP_MD_FLAG_DIGALGID_ABSENT,\s0 the latter will override.\fR +.IP "\s-1EVP_MD_FLAG_DIGALGID_ABSENT\s0" 4 +.IX Item "EVP_MD_FLAG_DIGALGID_ABSENT" +When setting up a DigestAlgorithmIdentifier, this flag will have the +parameter be left absent by default. \fINote: if combined with +\&\s-1EVP_MD_FLAG_DIGALGID_NULL,\s0 the latter will be overridden.\fR +.IP "\s-1EVP_MD_FLAG_DIGALGID_CUSTOM\s0" 4 +.IX Item "EVP_MD_FLAG_DIGALGID_CUSTOM" +Custom DigestAlgorithmIdentifier handling via ctrl, with +\&\fB\s-1EVP_MD_FLAG_DIGALGID_ABSENT\s0\fR as default. \fINote: if combined with +\&\s-1EVP_MD_FLAG_DIGALGID_NULL,\s0 the latter will be overridden.\fR +Currently unused. +.IP "\s-1EVP_MD_FLAG_FIPS\s0" 4 +.IX Item "EVP_MD_FLAG_FIPS" +This digest method is suitable for use in \s-1FIPS\s0 mode. +Currently unused. +.PP +\&\fBEVP_MD_meth_set_init()\fR sets the digest init function for \fBmd\fR. +The digest init function is called by \fBEVP_Digest()\fR, \fBEVP_DigestInit()\fR, +\&\fBEVP_DigestInit_ex()\fR, EVP_SignInit, \fBEVP_SignInit_ex()\fR, \fBEVP_VerifyInit()\fR +and \fBEVP_VerifyInit_ex()\fR. +.PP +\&\fBEVP_MD_meth_set_update()\fR sets the digest update function for \fBmd\fR. +The digest update function is called by \fBEVP_Digest()\fR, \fBEVP_DigestUpdate()\fR and +\&\fBEVP_SignUpdate()\fR. +.PP +\&\fBEVP_MD_meth_set_final()\fR sets the digest final function for \fBmd\fR. +The digest final function is called by \fBEVP_Digest()\fR, \fBEVP_DigestFinal()\fR, +\&\fBEVP_DigestFinal_ex()\fR, \fBEVP_SignFinal()\fR and \fBEVP_VerifyFinal()\fR. +.PP +\&\fBEVP_MD_meth_set_copy()\fR sets the function for \fBmd\fR to do extra +computations after the method's private data structure has been copied +from one \fB\s-1EVP_MD_CTX\s0\fR to another. If all that's needed is to copy +the data, there is no need for this copy function. +Note that the copy function is passed two \fB\s-1EVP_MD_CTX\s0 *\fR, the private +data structure is then available with \fBEVP_MD_CTX_md_data()\fR. +This copy function is called by \fBEVP_MD_CTX_copy()\fR and +\&\fBEVP_MD_CTX_copy_ex()\fR. +.PP +\&\fBEVP_MD_meth_set_cleanup()\fR sets the function for \fBmd\fR to do extra +cleanup before the method's private data structure is cleaned out and +freed. +Note that the cleanup function is passed a \fB\s-1EVP_MD_CTX\s0 *\fR, the +private data structure is then available with \fBEVP_MD_CTX_md_data()\fR. +This cleanup function is called by \fBEVP_MD_CTX_reset()\fR and +\&\fBEVP_MD_CTX_free()\fR. +.PP +\&\fBEVP_MD_meth_set_ctrl()\fR sets the control function for \fBmd\fR. +See \fBEVP_MD_CTX_ctrl\fR\|(3) for the available controls. +.PP +\&\fBEVP_MD_meth_get_input_blocksize()\fR, \fBEVP_MD_meth_get_result_size()\fR, +\&\fBEVP_MD_meth_get_app_datasize()\fR, \fBEVP_MD_meth_get_flags()\fR, +\&\fBEVP_MD_meth_get_init()\fR, \fBEVP_MD_meth_get_update()\fR, +\&\fBEVP_MD_meth_get_final()\fR, \fBEVP_MD_meth_get_copy()\fR, +\&\fBEVP_MD_meth_get_cleanup()\fR and \fBEVP_MD_meth_get_ctrl()\fR are all used +to retrieve the method data given with the EVP_MD_meth_set_*() +functions above. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBEVP_MD_meth_new()\fR and \fBEVP_MD_meth_dup()\fR return a pointer to a newly +created \fB\s-1EVP_MD\s0\fR, or \s-1NULL\s0 on failure. +All EVP_MD_meth_set_*() functions return 1. +\&\fBEVP_MD_get_input_blocksize()\fR, \fBEVP_MD_meth_get_result_size()\fR, +\&\fBEVP_MD_meth_get_app_datasize()\fR and \fBEVP_MD_meth_get_flags()\fR return the +indicated sizes or flags. +All other EVP_CIPHER_meth_get_*() functions return pointers to their +respective \fBmd\fR function. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBEVP_DigestInit\fR\|(3), \fBEVP_SignInit\fR\|(3), \fBEVP_VerifyInit\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +The \fB\s-1EVP_MD\s0\fR structure was openly available in OpenSSL before version +1.1. The functions described here were added in OpenSSL 1.1. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2015\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_OpenInit.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_OpenInit.3 new file mode 100644 index 00000000..4a3117aa --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_OpenInit.3 @@ -0,0 +1,200 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EVP_OPENINIT 3" +.TH EVP_OPENINIT 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EVP_OpenInit, EVP_OpenUpdate, EVP_OpenFinal \- EVP envelope decryption +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int EVP_OpenInit(EVP_CIPHER_CTX *ctx, EVP_CIPHER *type, unsigned char *ek, +\& int ekl, unsigned char *iv, EVP_PKEY *priv); +\& int EVP_OpenUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, +\& int *outl, unsigned char *in, int inl); +\& int EVP_OpenFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \s-1EVP\s0 envelope routines are a high level interface to envelope +decryption. They decrypt a public key encrypted symmetric key and +then decrypt data using it. +.PP +\&\fBEVP_OpenInit()\fR initializes a cipher context \fBctx\fR for decryption +with cipher \fBtype\fR. It decrypts the encrypted symmetric key of length +\&\fBekl\fR bytes passed in the \fBek\fR parameter using the private key \fBpriv\fR. +The \s-1IV\s0 is supplied in the \fBiv\fR parameter. +.PP +\&\fBEVP_OpenUpdate()\fR and \fBEVP_OpenFinal()\fR have exactly the same properties +as the \fBEVP_DecryptUpdate()\fR and \fBEVP_DecryptFinal()\fR routines, as +documented on the \fBEVP_EncryptInit\fR\|(3) manual +page. +.SH "NOTES" +.IX Header "NOTES" +It is possible to call \fBEVP_OpenInit()\fR twice in the same way as +\&\fBEVP_DecryptInit()\fR. The first call should have \fBpriv\fR set to \s-1NULL\s0 +and (after setting any cipher parameters) it should be called again +with \fBtype\fR set to \s-1NULL.\s0 +.PP +If the cipher passed in the \fBtype\fR parameter is a variable length +cipher then the key length will be set to the value of the recovered +key length. If the cipher is a fixed length cipher then the recovered +key length must match the fixed cipher length. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBEVP_OpenInit()\fR returns 0 on error or a non zero integer (actually the +recovered secret key size) if successful. +.PP +\&\fBEVP_OpenUpdate()\fR returns 1 for success or 0 for failure. +.PP +\&\fBEVP_OpenFinal()\fR returns 0 if the decrypt failed or 1 for success. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBevp\fR\|(7), \fBRAND_bytes\fR\|(3), +\&\fBEVP_EncryptInit\fR\|(3), +\&\fBEVP_SealInit\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_ASN1_METHOD.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_ASN1_METHOD.3 new file mode 100644 index 00000000..e5a29c54 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_ASN1_METHOD.3 @@ -0,0 +1,553 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EVP_PKEY_ASN1_METHOD 3" +.TH EVP_PKEY_ASN1_METHOD 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EVP_PKEY_ASN1_METHOD, EVP_PKEY_asn1_new, EVP_PKEY_asn1_copy, EVP_PKEY_asn1_free, EVP_PKEY_asn1_add0, EVP_PKEY_asn1_add_alias, EVP_PKEY_asn1_set_public, EVP_PKEY_asn1_set_private, EVP_PKEY_asn1_set_param, EVP_PKEY_asn1_set_free, EVP_PKEY_asn1_set_ctrl, EVP_PKEY_asn1_set_item, EVP_PKEY_asn1_set_siginf, EVP_PKEY_asn1_set_check, EVP_PKEY_asn1_set_public_check, EVP_PKEY_asn1_set_param_check, EVP_PKEY_asn1_set_security_bits, EVP_PKEY_asn1_set_set_priv_key, EVP_PKEY_asn1_set_set_pub_key, EVP_PKEY_asn1_set_get_priv_key, EVP_PKEY_asn1_set_get_pub_key, EVP_PKEY_get0_asn1 \&\- manipulating and registering EVP_PKEY_ASN1_METHOD structure +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& typedef struct evp_pkey_asn1_method_st EVP_PKEY_ASN1_METHOD; +\& +\& EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_new(int id, int flags, +\& const char *pem_str, +\& const char *info); +\& void EVP_PKEY_asn1_copy(EVP_PKEY_ASN1_METHOD *dst, +\& const EVP_PKEY_ASN1_METHOD *src); +\& void EVP_PKEY_asn1_free(EVP_PKEY_ASN1_METHOD *ameth); +\& int EVP_PKEY_asn1_add0(const EVP_PKEY_ASN1_METHOD *ameth); +\& int EVP_PKEY_asn1_add_alias(int to, int from); +\& +\& void EVP_PKEY_asn1_set_public(EVP_PKEY_ASN1_METHOD *ameth, +\& int (*pub_decode) (EVP_PKEY *pk, +\& X509_PUBKEY *pub), +\& int (*pub_encode) (X509_PUBKEY *pub, +\& const EVP_PKEY *pk), +\& int (*pub_cmp) (const EVP_PKEY *a, +\& const EVP_PKEY *b), +\& int (*pub_print) (BIO *out, +\& const EVP_PKEY *pkey, +\& int indent, ASN1_PCTX *pctx), +\& int (*pkey_size) (const EVP_PKEY *pk), +\& int (*pkey_bits) (const EVP_PKEY *pk)); +\& void EVP_PKEY_asn1_set_private(EVP_PKEY_ASN1_METHOD *ameth, +\& int (*priv_decode) (EVP_PKEY *pk, +\& const PKCS8_PRIV_KEY_INFO +\& *p8inf), +\& int (*priv_encode) (PKCS8_PRIV_KEY_INFO *p8, +\& const EVP_PKEY *pk), +\& int (*priv_print) (BIO *out, +\& const EVP_PKEY *pkey, +\& int indent, +\& ASN1_PCTX *pctx)); +\& void EVP_PKEY_asn1_set_param(EVP_PKEY_ASN1_METHOD *ameth, +\& int (*param_decode) (EVP_PKEY *pkey, +\& const unsigned char **pder, +\& int derlen), +\& int (*param_encode) (const EVP_PKEY *pkey, +\& unsigned char **pder), +\& int (*param_missing) (const EVP_PKEY *pk), +\& int (*param_copy) (EVP_PKEY *to, +\& const EVP_PKEY *from), +\& int (*param_cmp) (const EVP_PKEY *a, +\& const EVP_PKEY *b), +\& int (*param_print) (BIO *out, +\& const EVP_PKEY *pkey, +\& int indent, +\& ASN1_PCTX *pctx)); +\& +\& void EVP_PKEY_asn1_set_free(EVP_PKEY_ASN1_METHOD *ameth, +\& void (*pkey_free) (EVP_PKEY *pkey)); +\& void EVP_PKEY_asn1_set_ctrl(EVP_PKEY_ASN1_METHOD *ameth, +\& int (*pkey_ctrl) (EVP_PKEY *pkey, int op, +\& long arg1, void *arg2)); +\& void EVP_PKEY_asn1_set_item(EVP_PKEY_ASN1_METHOD *ameth, +\& int (*item_verify) (EVP_MD_CTX *ctx, +\& const ASN1_ITEM *it, +\& void *asn, +\& X509_ALGOR *a, +\& ASN1_BIT_STRING *sig, +\& EVP_PKEY *pkey), +\& int (*item_sign) (EVP_MD_CTX *ctx, +\& const ASN1_ITEM *it, +\& void *asn, +\& X509_ALGOR *alg1, +\& X509_ALGOR *alg2, +\& ASN1_BIT_STRING *sig)); +\& +\& void EVP_PKEY_asn1_set_siginf(EVP_PKEY_ASN1_METHOD *ameth, +\& int (*siginf_set) (X509_SIG_INFO *siginf, +\& const X509_ALGOR *alg, +\& const ASN1_STRING *sig)); +\& +\& void EVP_PKEY_asn1_set_check(EVP_PKEY_ASN1_METHOD *ameth, +\& int (*pkey_check) (const EVP_PKEY *pk)); +\& +\& void EVP_PKEY_asn1_set_public_check(EVP_PKEY_ASN1_METHOD *ameth, +\& int (*pkey_pub_check) (const EVP_PKEY *pk)); +\& +\& void EVP_PKEY_asn1_set_param_check(EVP_PKEY_ASN1_METHOD *ameth, +\& int (*pkey_param_check) (const EVP_PKEY *pk)); +\& +\& void EVP_PKEY_asn1_set_security_bits(EVP_PKEY_ASN1_METHOD *ameth, +\& int (*pkey_security_bits) (const EVP_PKEY +\& *pk)); +\& +\& void EVP_PKEY_asn1_set_set_priv_key(EVP_PKEY_ASN1_METHOD *ameth, +\& int (*set_priv_key) (EVP_PKEY *pk, +\& const unsigned char +\& *priv, +\& size_t len)); +\& +\& void EVP_PKEY_asn1_set_set_pub_key(EVP_PKEY_ASN1_METHOD *ameth, +\& int (*set_pub_key) (EVP_PKEY *pk, +\& const unsigned char *pub, +\& size_t len)); +\& +\& void EVP_PKEY_asn1_set_get_priv_key(EVP_PKEY_ASN1_METHOD *ameth, +\& int (*get_priv_key) (const EVP_PKEY *pk, +\& unsigned char *priv, +\& size_t *len)); +\& +\& void EVP_PKEY_asn1_set_get_pub_key(EVP_PKEY_ASN1_METHOD *ameth, +\& int (*get_pub_key) (const EVP_PKEY *pk, +\& unsigned char *pub, +\& size_t *len)); +\& +\& const EVP_PKEY_ASN1_METHOD *EVP_PKEY_get0_asn1(const EVP_PKEY *pkey); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fB\s-1EVP_PKEY_ASN1_METHOD\s0\fR is a structure which holds a set of \s-1ASN.1\s0 +conversion, printing and information methods for a specific public key +algorithm. +.PP +There are two places where the \fB\s-1EVP_PKEY_ASN1_METHOD\s0\fR objects are +stored: one is a built-in array representing the standard methods for +different algorithms, and the other one is a stack of user-defined +application-specific methods, which can be manipulated by using +\&\fBEVP_PKEY_asn1_add0\fR\|(3). +.SS "Methods" +.IX Subsection "Methods" +The methods are the underlying implementations of a particular public +key algorithm present by the \fB\s-1EVP_PKEY\s0\fR object. +.PP +.Vb 5 +\& int (*pub_decode) (EVP_PKEY *pk, X509_PUBKEY *pub); +\& int (*pub_encode) (X509_PUBKEY *pub, const EVP_PKEY *pk); +\& int (*pub_cmp) (const EVP_PKEY *a, const EVP_PKEY *b); +\& int (*pub_print) (BIO *out, const EVP_PKEY *pkey, int indent, +\& ASN1_PCTX *pctx); +.Ve +.PP +The \fBpub_decode()\fR and \fBpub_encode()\fR methods are called to decode / +encode \fBX509_PUBKEY\fR \s-1ASN.1\s0 parameters to / from \fBpk\fR. +They \s-1MUST\s0 return 0 on error, 1 on success. +They're called by \fBX509_PUBKEY_get0\fR\|(3) and \fBX509_PUBKEY_set\fR\|(3). +.PP +The \fBpub_cmp()\fR method is called when two public keys are to be +compared. +It \s-1MUST\s0 return 1 when the keys are equal, 0 otherwise. +It's called by \fBEVP_PKEY_cmp\fR\|(3). +.PP +The \fBpub_print()\fR method is called to print a public key in humanly +readable text to \fBout\fR, indented \fBindent\fR spaces. +It \s-1MUST\s0 return 0 on error, 1 on success. +It's called by \fBEVP_PKEY_print_public\fR\|(3). +.PP +.Vb 4 +\& int (*priv_decode) (EVP_PKEY *pk, const PKCS8_PRIV_KEY_INFO *p8inf); +\& int (*priv_encode) (PKCS8_PRIV_KEY_INFO *p8, const EVP_PKEY *pk); +\& int (*priv_print) (BIO *out, const EVP_PKEY *pkey, int indent, +\& ASN1_PCTX *pctx); +.Ve +.PP +The \fBpriv_decode()\fR and \fBpriv_encode()\fR methods are called to decode / +encode \fB\s-1PKCS8_PRIV_KEY_INFO\s0\fR form private key to / from \fBpk\fR. +They \s-1MUST\s0 return 0 on error, 1 on success. +They're called by \s-1\fBEVP_PKCS82PKEY\s0\fR\|(3) and \s-1\fBEVP_PKEY2PKCS8\s0\fR\|(3). +.PP +The \fBpriv_print()\fR method is called to print a private key in humanly +readable text to \fBout\fR, indented \fBindent\fR spaces. +It \s-1MUST\s0 return 0 on error, 1 on success. +It's called by \fBEVP_PKEY_print_private\fR\|(3). +.PP +.Vb 3 +\& int (*pkey_size) (const EVP_PKEY *pk); +\& int (*pkey_bits) (const EVP_PKEY *pk); +\& int (*pkey_security_bits) (const EVP_PKEY *pk); +.Ve +.PP +The \fBpkey_size()\fR method returns the key size in bytes. +It's called by \fBEVP_PKEY_size\fR\|(3). +.PP +The \fBpkey_bits()\fR method returns the key size in bits. +It's called by \fBEVP_PKEY_bits\fR\|(3). +.PP +.Vb 8 +\& int (*param_decode) (EVP_PKEY *pkey, +\& const unsigned char **pder, int derlen); +\& int (*param_encode) (const EVP_PKEY *pkey, unsigned char **pder); +\& int (*param_missing) (const EVP_PKEY *pk); +\& int (*param_copy) (EVP_PKEY *to, const EVP_PKEY *from); +\& int (*param_cmp) (const EVP_PKEY *a, const EVP_PKEY *b); +\& int (*param_print) (BIO *out, const EVP_PKEY *pkey, int indent, +\& ASN1_PCTX *pctx); +.Ve +.PP +The \fBparam_decode()\fR and \fBparam_encode()\fR methods are called to decode / +encode \s-1DER\s0 formatted parameters to / from \fBpk\fR. +They \s-1MUST\s0 return 0 on error, 1 on success. +They're called by \fBPEM_read_bio_Parameters\fR\|(3) and the \fBfile:\fR +\&\s-1\fBOSSL_STORE_LOADER\s0\fR\|(3). +.PP +The \fBparam_missing()\fR method returns 0 if a key parameter is missing, +otherwise 1. +It's called by \fBEVP_PKEY_missing_parameters\fR\|(3). +.PP +The \fBparam_copy()\fR method copies key parameters from \fBfrom\fR to \fBto\fR. +It \s-1MUST\s0 return 0 on error, 1 on success. +It's called by \fBEVP_PKEY_copy_parameters\fR\|(3). +.PP +The \fBparam_cmp()\fR method compares the parameters of keys \fBa\fR and \fBb\fR. +It \s-1MUST\s0 return 1 when the keys are equal, 0 when not equal, or a +negative number on error. +It's called by \fBEVP_PKEY_cmp_parameters\fR\|(3). +.PP +The \fBparam_print()\fR method prints the private key parameters in humanly +readable text to \fBout\fR, indented \fBindent\fR spaces. +It \s-1MUST\s0 return 0 on error, 1 on success. +It's called by \fBEVP_PKEY_print_params\fR\|(3). +.PP +.Vb 3 +\& int (*sig_print) (BIO *out, +\& const X509_ALGOR *sigalg, const ASN1_STRING *sig, +\& int indent, ASN1_PCTX *pctx); +.Ve +.PP +The \fBsig_print()\fR method prints a signature in humanly readable text to +\&\fBout\fR, indented \fBindent\fR spaces. +\&\fBsigalg\fR contains the exact signature algorithm. +If the signature in \fBsig\fR doesn't correspond to what this method +expects, \fBX509_signature_dump()\fR must be used as a last resort. +It \s-1MUST\s0 return 0 on error, 1 on success. +It's called by \fBX509_signature_print\fR\|(3). +.PP +.Vb 1 +\& void (*pkey_free) (EVP_PKEY *pkey); +.Ve +.PP +The \fBpkey_free()\fR method helps freeing the internals of \fBpkey\fR. +It's called by \fBEVP_PKEY_free\fR\|(3), \fBEVP_PKEY_set_type\fR\|(3), +\&\fBEVP_PKEY_set_type_str\fR\|(3), and \fBEVP_PKEY_assign\fR\|(3). +.PP +.Vb 1 +\& int (*pkey_ctrl) (EVP_PKEY *pkey, int op, long arg1, void *arg2); +.Ve +.PP +The \fBpkey_ctrl()\fR method adds extra algorithm specific control. +It's called by \fBEVP_PKEY_get_default_digest_nid\fR\|(3), +\&\fBEVP_PKEY_set1_tls_encodedpoint\fR\|(3), +\&\fBEVP_PKEY_get1_tls_encodedpoint\fR\|(3), \fBPKCS7_SIGNER_INFO_set\fR\|(3), +\&\fBPKCS7_RECIP_INFO_set\fR\|(3), ... +.PP +.Vb 3 +\& int (*old_priv_decode) (EVP_PKEY *pkey, +\& const unsigned char **pder, int derlen); +\& int (*old_priv_encode) (const EVP_PKEY *pkey, unsigned char **pder); +.Ve +.PP +The \fBold_priv_decode()\fR and \fBold_priv_encode()\fR methods decode / encode +they private key \fBpkey\fR from / to a \s-1DER\s0 formatted array. +These are exclusively used to help decoding / encoding older (pre +PKCS#8) \s-1PEM\s0 formatted encrypted private keys. +\&\fBold_priv_decode()\fR \s-1MUST\s0 return 0 on error, 1 on success. +\&\fBold_priv_encode()\fR \s-1MUST\s0 the return same kind of values as +\&\fBi2d_PrivateKey()\fR. +They're called by \fBd2i_PrivateKey\fR\|(3) and \fBi2d_PrivateKey\fR\|(3). +.PP +.Vb 5 +\& int (*item_verify) (EVP_MD_CTX *ctx, const ASN1_ITEM *it, void *asn, +\& X509_ALGOR *a, ASN1_BIT_STRING *sig, EVP_PKEY *pkey); +\& int (*item_sign) (EVP_MD_CTX *ctx, const ASN1_ITEM *it, void *asn, +\& X509_ALGOR *alg1, X509_ALGOR *alg2, +\& ASN1_BIT_STRING *sig); +.Ve +.PP +The \fBitem_sign()\fR and \fBitem_verify()\fR methods make it possible to have +algorithm specific signatures and verification of them. +.PP +\&\fBitem_sign()\fR \s-1MUST\s0 return one of: +.IP "<=0" 4 +.IX Item "<=0" +error +.IP "1" 4 +.IX Item "1" +\&\fBitem_sign()\fR did everything, OpenSSL internals just needs to pass the +signature length back. +.IP "2" 4 +.IX Item "2" +\&\fBitem_sign()\fR did nothing, OpenSSL internal standard routines are +expected to continue with the default signature production. +.IP "3" 4 +.IX Item "3" +\&\fBitem_sign()\fR set the algorithm identifier \fBalgor1\fR and \fBalgor2\fR, +OpenSSL internals should just sign using those algorithms. +.PP +\&\fBitem_verify()\fR \s-1MUST\s0 return one of: +.IP "<=0" 4 +.IX Item "<=0" +error +.IP "1" 4 +.IX Item "1" +\&\fBitem_sign()\fR did everything, OpenSSL internals just needs to pass the +signature length back. +.IP "2" 4 +.IX Item "2" +\&\fBitem_sign()\fR did nothing, OpenSSL internal standard routines are +expected to continue with the default signature production. +.PP +\&\fBitem_verify()\fR and \fBitem_sign()\fR are called by \fBASN1_item_verify\fR\|(3) and +\&\fBASN1_item_sign\fR\|(3), and by extension, \fBX509_verify\fR\|(3), +\&\fBX509_REQ_verify\fR\|(3), \fBX509_sign\fR\|(3), \fBX509_REQ_sign\fR\|(3), ... +.PP +.Vb 2 +\& int (*siginf_set) (X509_SIG_INFO *siginf, const X509_ALGOR *alg, +\& const ASN1_STRING *sig); +.Ve +.PP +The \fBsiginf_set()\fR method is used to set custom \fBX509_SIG_INFO\fR +parameters. +It \s-1MUST\s0 return 0 on error, or 1 on success. +It's called as part of \fBX509_check_purpose\fR\|(3), \fBX509_check_ca\fR\|(3) +and \fBX509_check_issued\fR\|(3). +.PP +.Vb 3 +\& int (*pkey_check) (const EVP_PKEY *pk); +\& int (*pkey_public_check) (const EVP_PKEY *pk); +\& int (*pkey_param_check) (const EVP_PKEY *pk); +.Ve +.PP +The \fBpkey_check()\fR, \fBpkey_public_check()\fR and \fBpkey_param_check()\fR methods are used +to check the validity of \fBpk\fR for key-pair, public component and parameters, +respectively. +They \s-1MUST\s0 return 0 for an invalid key, or 1 for a valid key. +They are called by \fBEVP_PKEY_check\fR\|(3), \fBEVP_PKEY_public_check\fR\|(3) and +\&\fBEVP_PKEY_param_check\fR\|(3) respectively. +.PP +.Vb 2 +\& int (*set_priv_key) (EVP_PKEY *pk, const unsigned char *priv, size_t len); +\& int (*set_pub_key) (EVP_PKEY *pk, const unsigned char *pub, size_t len); +.Ve +.PP +The \fBset_priv_key()\fR and \fBset_pub_key()\fR methods are used to set the raw private and +public key data for an \s-1EVP_PKEY.\s0 They \s-1MUST\s0 return 0 on error, or 1 on success. +They are called by \fBEVP_PKEY_new_raw_private_key\fR\|(3), and +\&\fBEVP_PKEY_new_raw_public_key\fR\|(3) respectively. +.SS "Functions" +.IX Subsection "Functions" +\&\fBEVP_PKEY_asn1_new()\fR creates and returns a new \fB\s-1EVP_PKEY_ASN1_METHOD\s0\fR +object, and associates the given \fBid\fR, \fBflags\fR, \fBpem_str\fR and +\&\fBinfo\fR. +\&\fBid\fR is a \s-1NID,\s0 \fBpem_str\fR is the \s-1PEM\s0 type string, \fBinfo\fR is a +descriptive string. +The following \fBflags\fR are supported: +.PP +.Vb 1 +\& ASN1_PKEY_SIGPARAM_NULL +.Ve +.PP +If \fB\s-1ASN1_PKEY_SIGPARAM_NULL\s0\fR is set, then the signature algorithm +parameters are given the type \fBV_ASN1_NULL\fR by default, otherwise +they will be given the type \fBV_ASN1_UNDEF\fR (i.e. the parameter is +omitted). +See \fBX509_ALGOR_set0\fR\|(3) for more information. +.PP +\&\fBEVP_PKEY_asn1_copy()\fR copies an \fB\s-1EVP_PKEY_ASN1_METHOD\s0\fR object from +\&\fBsrc\fR to \fBdst\fR. +This function is not thread safe, it's recommended to only use this +when initializing the application. +.PP +\&\fBEVP_PKEY_asn1_free()\fR frees an existing \fB\s-1EVP_PKEY_ASN1_METHOD\s0\fR pointed +by \fBameth\fR. +.PP +\&\fBEVP_PKEY_asn1_add0()\fR adds \fBameth\fR to the user defined stack of +methods unless another \fB\s-1EVP_PKEY_ASN1_METHOD\s0\fR with the same \s-1NID\s0 is +already there. +This function is not thread safe, it's recommended to only use this +when initializing the application. +.PP +\&\fBEVP_PKEY_asn1_add_alias()\fR creates an alias with the \s-1NID\s0 \fBto\fR for the +\&\fB\s-1EVP_PKEY_ASN1_METHOD\s0\fR with \s-1NID\s0 \fBfrom\fR unless another +\&\fB\s-1EVP_PKEY_ASN1_METHOD\s0\fR with the same \s-1NID\s0 is already added. +This function is not thread safe, it's recommended to only use this +when initializing the application. +.PP +\&\fBEVP_PKEY_asn1_set_public()\fR, \fBEVP_PKEY_asn1_set_private()\fR, +\&\fBEVP_PKEY_asn1_set_param()\fR, \fBEVP_PKEY_asn1_set_free()\fR, +\&\fBEVP_PKEY_asn1_set_ctrl()\fR, \fBEVP_PKEY_asn1_set_item()\fR, +\&\fBEVP_PKEY_asn1_set_siginf()\fR, \fBEVP_PKEY_asn1_set_check()\fR, +\&\fBEVP_PKEY_asn1_set_public_check()\fR, \fBEVP_PKEY_asn1_set_param_check()\fR, +\&\fBEVP_PKEY_asn1_set_security_bits()\fR, \fBEVP_PKEY_asn1_set_set_priv_key()\fR, +\&\fBEVP_PKEY_asn1_set_set_pub_key()\fR, \fBEVP_PKEY_asn1_set_get_priv_key()\fR and +\&\fBEVP_PKEY_asn1_set_get_pub_key()\fR set the diverse methods of the given +\&\fB\s-1EVP_PKEY_ASN1_METHOD\s0\fR object. +.PP +\&\fBEVP_PKEY_get0_asn1()\fR finds the \fB\s-1EVP_PKEY_ASN1_METHOD\s0\fR associated +with the key \fBpkey\fR. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBEVP_PKEY_asn1_new()\fR returns \s-1NULL\s0 on error, or a pointer to an +\&\fB\s-1EVP_PKEY_ASN1_METHOD\s0\fR object otherwise. +.PP +\&\fBEVP_PKEY_asn1_add0()\fR and \fBEVP_PKEY_asn1_add_alias()\fR return 0 on error, +or 1 on success. +.PP +\&\fBEVP_PKEY_get0_asn1()\fR returns \s-1NULL\s0 on error, or a pointer to a constant +\&\fB\s-1EVP_PKEY_ASN1_METHOD\s0\fR object otherwise. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_CTX_ctrl.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_CTX_ctrl.3 new file mode 100644 index 00000000..9667e7b7 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_CTX_ctrl.3 @@ -0,0 +1,538 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EVP_PKEY_CTX_CTRL 3" +.TH EVP_PKEY_CTX_CTRL 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EVP_PKEY_CTX_ctrl, EVP_PKEY_CTX_ctrl_str, EVP_PKEY_CTX_ctrl_uint64, EVP_PKEY_CTX_md, EVP_PKEY_CTX_set_signature_md, EVP_PKEY_CTX_get_signature_md, EVP_PKEY_CTX_set_mac_key, EVP_PKEY_CTX_set_rsa_padding, EVP_PKEY_CTX_get_rsa_padding, EVP_PKEY_CTX_set_rsa_pss_saltlen, EVP_PKEY_CTX_get_rsa_pss_saltlen, EVP_PKEY_CTX_set_rsa_keygen_bits, EVP_PKEY_CTX_set_rsa_keygen_pubexp, EVP_PKEY_CTX_set_rsa_keygen_primes, EVP_PKEY_CTX_set_rsa_mgf1_md, EVP_PKEY_CTX_get_rsa_mgf1_md, EVP_PKEY_CTX_set_rsa_oaep_md, EVP_PKEY_CTX_get_rsa_oaep_md, EVP_PKEY_CTX_set0_rsa_oaep_label, EVP_PKEY_CTX_get0_rsa_oaep_label, EVP_PKEY_CTX_set_dsa_paramgen_bits, EVP_PKEY_CTX_set_dsa_paramgen_q_bits, EVP_PKEY_CTX_set_dsa_paramgen_md, EVP_PKEY_CTX_set_dh_paramgen_prime_len, EVP_PKEY_CTX_set_dh_paramgen_subprime_len, EVP_PKEY_CTX_set_dh_paramgen_generator, EVP_PKEY_CTX_set_dh_paramgen_type, EVP_PKEY_CTX_set_dh_rfc5114, EVP_PKEY_CTX_set_dhx_rfc5114, EVP_PKEY_CTX_set_dh_pad, EVP_PKEY_CTX_set_dh_nid, EVP_PKEY_CTX_set_dh_kdf_type, EVP_PKEY_CTX_get_dh_kdf_type, EVP_PKEY_CTX_set0_dh_kdf_oid, EVP_PKEY_CTX_get0_dh_kdf_oid, EVP_PKEY_CTX_set_dh_kdf_md, EVP_PKEY_CTX_get_dh_kdf_md, EVP_PKEY_CTX_set_dh_kdf_outlen, EVP_PKEY_CTX_get_dh_kdf_outlen, EVP_PKEY_CTX_set0_dh_kdf_ukm, EVP_PKEY_CTX_get0_dh_kdf_ukm, EVP_PKEY_CTX_set_ec_paramgen_curve_nid, EVP_PKEY_CTX_set_ec_param_enc, EVP_PKEY_CTX_set_ecdh_cofactor_mode, EVP_PKEY_CTX_get_ecdh_cofactor_mode, EVP_PKEY_CTX_set_ecdh_kdf_type, EVP_PKEY_CTX_get_ecdh_kdf_type, EVP_PKEY_CTX_set_ecdh_kdf_md, EVP_PKEY_CTX_get_ecdh_kdf_md, EVP_PKEY_CTX_set_ecdh_kdf_outlen, EVP_PKEY_CTX_get_ecdh_kdf_outlen, EVP_PKEY_CTX_set0_ecdh_kdf_ukm, EVP_PKEY_CTX_get0_ecdh_kdf_ukm, EVP_PKEY_CTX_set1_id, EVP_PKEY_CTX_get1_id, EVP_PKEY_CTX_get1_id_len \&\- algorithm specific control operations +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int EVP_PKEY_CTX_ctrl(EVP_PKEY_CTX *ctx, int keytype, int optype, +\& int cmd, int p1, void *p2); +\& int EVP_PKEY_CTX_ctrl_uint64(EVP_PKEY_CTX *ctx, int keytype, int optype, +\& int cmd, uint64_t value); +\& int EVP_PKEY_CTX_ctrl_str(EVP_PKEY_CTX *ctx, const char *type, +\& const char *value); +\& +\& int EVP_PKEY_CTX_md(EVP_PKEY_CTX *ctx, int optype, int cmd, const char *md); +\& +\& int EVP_PKEY_CTX_set_signature_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); +\& int EVP_PKEY_CTX_get_signature_md(EVP_PKEY_CTX *ctx, const EVP_MD **pmd); +\& +\& int EVP_PKEY_CTX_set_mac_key(EVP_PKEY_CTX *ctx, unsigned char *key, int len); +\& +\& #include +\& +\& int EVP_PKEY_CTX_set_rsa_padding(EVP_PKEY_CTX *ctx, int pad); +\& int EVP_PKEY_CTX_get_rsa_padding(EVP_PKEY_CTX *ctx, int *pad); +\& int EVP_PKEY_CTX_set_rsa_pss_saltlen(EVP_PKEY_CTX *ctx, int len); +\& int EVP_PKEY_CTX_get_rsa_pss_saltlen(EVP_PKEY_CTX *ctx, int *len); +\& int EVP_PKEY_CTX_set_rsa_keygen_bits(EVP_PKEY_CTX *ctx, int mbits); +\& int EVP_PKEY_CTX_set_rsa_keygen_pubexp(EVP_PKEY_CTX *ctx, BIGNUM *pubexp); +\& int EVP_PKEY_CTX_set_rsa_keygen_primes(EVP_PKEY_CTX *ctx, int primes); +\& int EVP_PKEY_CTX_set_rsa_mgf1_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); +\& int EVP_PKEY_CTX_get_rsa_mgf1_md(EVP_PKEY_CTX *ctx, const EVP_MD **md); +\& int EVP_PKEY_CTX_set_rsa_oaep_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); +\& int EVP_PKEY_CTX_get_rsa_oaep_md(EVP_PKEY_CTX *ctx, const EVP_MD **md); +\& int EVP_PKEY_CTX_set0_rsa_oaep_label(EVP_PKEY_CTX *ctx, unsigned char *label, int len); +\& int EVP_PKEY_CTX_get0_rsa_oaep_label(EVP_PKEY_CTX *ctx, unsigned char **label); +\& +\& #include +\& +\& int EVP_PKEY_CTX_set_dsa_paramgen_bits(EVP_PKEY_CTX *ctx, int nbits); +\& int EVP_PKEY_CTX_set_dsa_paramgen_q_bits(EVP_PKEY_CTX *ctx, int qbits); +\& int EVP_PKEY_CTX_set_dsa_paramgen_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); +\& +\& #include +\& +\& int EVP_PKEY_CTX_set_dh_paramgen_prime_len(EVP_PKEY_CTX *ctx, int len); +\& int EVP_PKEY_CTX_set_dh_paramgen_subprime_len(EVP_PKEY_CTX *ctx, int len); +\& int EVP_PKEY_CTX_set_dh_paramgen_generator(EVP_PKEY_CTX *ctx, int gen); +\& int EVP_PKEY_CTX_set_dh_paramgen_type(EVP_PKEY_CTX *ctx, int type); +\& int EVP_PKEY_CTX_set_dh_pad(EVP_PKEY_CTX *ctx, int pad); +\& int EVP_PKEY_CTX_set_dh_nid(EVP_PKEY_CTX *ctx, int nid); +\& int EVP_PKEY_CTX_set_dh_rfc5114(EVP_PKEY_CTX *ctx, int rfc5114); +\& int EVP_PKEY_CTX_set_dhx_rfc5114(EVP_PKEY_CTX *ctx, int rfc5114); +\& int EVP_PKEY_CTX_set_dh_kdf_type(EVP_PKEY_CTX *ctx, int kdf); +\& int EVP_PKEY_CTX_get_dh_kdf_type(EVP_PKEY_CTX *ctx); +\& int EVP_PKEY_CTX_set0_dh_kdf_oid(EVP_PKEY_CTX *ctx, ASN1_OBJECT *oid); +\& int EVP_PKEY_CTX_get0_dh_kdf_oid(EVP_PKEY_CTX *ctx, ASN1_OBJECT **oid); +\& int EVP_PKEY_CTX_set_dh_kdf_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); +\& int EVP_PKEY_CTX_get_dh_kdf_md(EVP_PKEY_CTX *ctx, const EVP_MD **md); +\& int EVP_PKEY_CTX_set_dh_kdf_outlen(EVP_PKEY_CTX *ctx, int len); +\& int EVP_PKEY_CTX_get_dh_kdf_outlen(EVP_PKEY_CTX *ctx, int *len); +\& int EVP_PKEY_CTX_set0_dh_kdf_ukm(EVP_PKEY_CTX *ctx, unsigned char *ukm, int len); +\& int EVP_PKEY_CTX_get0_dh_kdf_ukm(EVP_PKEY_CTX *ctx, unsigned char **ukm); +\& +\& #include +\& +\& int EVP_PKEY_CTX_set_ec_paramgen_curve_nid(EVP_PKEY_CTX *ctx, int nid); +\& int EVP_PKEY_CTX_set_ec_param_enc(EVP_PKEY_CTX *ctx, int param_enc); +\& int EVP_PKEY_CTX_set_ecdh_cofactor_mode(EVP_PKEY_CTX *ctx, int cofactor_mode); +\& int EVP_PKEY_CTX_get_ecdh_cofactor_mode(EVP_PKEY_CTX *ctx); +\& int EVP_PKEY_CTX_set_ecdh_kdf_type(EVP_PKEY_CTX *ctx, int kdf); +\& int EVP_PKEY_CTX_get_ecdh_kdf_type(EVP_PKEY_CTX *ctx); +\& int EVP_PKEY_CTX_set_ecdh_kdf_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); +\& int EVP_PKEY_CTX_get_ecdh_kdf_md(EVP_PKEY_CTX *ctx, const EVP_MD **md); +\& int EVP_PKEY_CTX_set_ecdh_kdf_outlen(EVP_PKEY_CTX *ctx, int len); +\& int EVP_PKEY_CTX_get_ecdh_kdf_outlen(EVP_PKEY_CTX *ctx, int *len); +\& int EVP_PKEY_CTX_set0_ecdh_kdf_ukm(EVP_PKEY_CTX *ctx, unsigned char *ukm, int len); +\& int EVP_PKEY_CTX_get0_ecdh_kdf_ukm(EVP_PKEY_CTX *ctx, unsigned char **ukm); +\& +\& int EVP_PKEY_CTX_set1_id(EVP_PKEY_CTX *ctx, void *id, size_t id_len); +\& int EVP_PKEY_CTX_get1_id(EVP_PKEY_CTX *ctx, void *id); +\& int EVP_PKEY_CTX_get1_id_len(EVP_PKEY_CTX *ctx, size_t *id_len); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The function \fBEVP_PKEY_CTX_ctrl()\fR sends a control operation to the context +\&\fBctx\fR. The key type used must match \fBkeytype\fR if it is not \-1. The parameter +\&\fBoptype\fR is a mask indicating which operations the control can be applied to. +The control command is indicated in \fBcmd\fR and any additional arguments in +\&\fBp1\fR and \fBp2\fR. +.PP +For \fBcmd\fR = \fB\s-1EVP_PKEY_CTRL_SET_MAC_KEY\s0\fR, \fBp1\fR is the length of the \s-1MAC\s0 key, +and \fBp2\fR is \s-1MAC\s0 key. This is used by Poly1305, SipHash, \s-1HMAC\s0 and \s-1CMAC.\s0 +.PP +Applications will not normally call \fBEVP_PKEY_CTX_ctrl()\fR directly but will +instead call one of the algorithm specific macros below. +.PP +The function \fBEVP_PKEY_CTX_ctrl_uint64()\fR is a wrapper that directly passes a +uint64 value as \fBp2\fR to \fBEVP_PKEY_CTX_ctrl()\fR. +.PP +The function \fBEVP_PKEY_CTX_ctrl_str()\fR allows an application to send an algorithm +specific control operation to a context \fBctx\fR in string form. This is +intended to be used for options specified on the command line or in text +files. The commands supported are documented in the openssl utility +command line pages for the option \fB\-pkeyopt\fR which is supported by the +\&\fBpkeyutl\fR, \fBgenpkey\fR and \fBreq\fR commands. +.PP +The function \fBEVP_PKEY_CTX_md()\fR sends a message digest control operation +to the context \fBctx\fR. The message digest is specified by its name \fBmd\fR. +.PP +All the remaining \*(L"functions\*(R" are implemented as macros. +.PP +The \fBEVP_PKEY_CTX_set_signature_md()\fR macro sets the message digest type used +in a signature. It can be used in the \s-1RSA, DSA\s0 and \s-1ECDSA\s0 algorithms. +.PP +The \fBEVP_PKEY_CTX_get_signature_md()\fR macro gets the message digest type used in a +signature. It can be used in the \s-1RSA, DSA\s0 and \s-1ECDSA\s0 algorithms. +.PP +Key generation typically involves setting up parameters to be used and +generating the private and public key data. Some algorithm implementations +allow private key data to be set explicitly using the \fBEVP_PKEY_CTX_set_mac_key()\fR +macro. In this case key generation is simply the process of setting up the +parameters for the key and then setting the raw key data to the value explicitly +provided by that macro. Normally applications would call +\&\fBEVP_PKEY_new_raw_private_key\fR\|(3) or similar functions instead of this macro. +.PP +The \fBEVP_PKEY_CTX_set_mac_key()\fR macro can be used with any of the algorithms +supported by the \fBEVP_PKEY_new_raw_private_key\fR\|(3) function. +.SS "\s-1RSA\s0 parameters" +.IX Subsection "RSA parameters" +The \fBEVP_PKEY_CTX_set_rsa_padding()\fR macro sets the \s-1RSA\s0 padding mode for \fBctx\fR. +The \fBpad\fR parameter can take the value \fB\s-1RSA_PKCS1_PADDING\s0\fR for PKCS#1 +padding, \fB\s-1RSA_SSLV23_PADDING\s0\fR for SSLv23 padding, \fB\s-1RSA_NO_PADDING\s0\fR for +no padding, \fB\s-1RSA_PKCS1_OAEP_PADDING\s0\fR for \s-1OAEP\s0 padding (encrypt and +decrypt only), \fB\s-1RSA_X931_PADDING\s0\fR for X9.31 padding (signature operations +only) and \fB\s-1RSA_PKCS1_PSS_PADDING\s0\fR (sign and verify only). +.PP +Two \s-1RSA\s0 padding modes behave differently if \fBEVP_PKEY_CTX_set_signature_md()\fR +is used. If this macro is called for PKCS#1 padding the plaintext buffer is +an actual digest value and is encapsulated in a DigestInfo structure according +to PKCS#1 when signing and this structure is expected (and stripped off) when +verifying. If this control is not used with \s-1RSA\s0 and PKCS#1 padding then the +supplied data is used directly and not encapsulated. In the case of X9.31 +padding for \s-1RSA\s0 the algorithm identifier byte is added or checked and removed +if this control is called. If it is not called then the first byte of the plaintext +buffer is expected to be the algorithm identifier byte. +.PP +The \fBEVP_PKEY_CTX_get_rsa_padding()\fR macro gets the \s-1RSA\s0 padding mode for \fBctx\fR. +.PP +The \fBEVP_PKEY_CTX_set_rsa_pss_saltlen()\fR macro sets the \s-1RSA PSS\s0 salt length to +\&\fBlen\fR. As its name implies it is only supported for \s-1PSS\s0 padding. Three special +values are supported: \fB\s-1RSA_PSS_SALTLEN_DIGEST\s0\fR sets the salt length to the +digest length, \fB\s-1RSA_PSS_SALTLEN_MAX\s0\fR sets the salt length to the maximum +permissible value. When verifying \fB\s-1RSA_PSS_SALTLEN_AUTO\s0\fR causes the salt length +to be automatically determined based on the \fB\s-1PSS\s0\fR block structure. If this +macro is not called maximum salt length is used when signing and auto detection +when verifying is used by default. +.PP +The \fBEVP_PKEY_CTX_get_rsa_pss_saltlen()\fR macro gets the \s-1RSA PSS\s0 salt length +for \fBctx\fR. The padding mode must have been set to \fB\s-1RSA_PKCS1_PSS_PADDING\s0\fR. +.PP +The \fBEVP_PKEY_CTX_set_rsa_keygen_bits()\fR macro sets the \s-1RSA\s0 key length for +\&\s-1RSA\s0 key generation to \fBbits\fR. If not specified 1024 bits is used. +.PP +The \fBEVP_PKEY_CTX_set_rsa_keygen_pubexp()\fR macro sets the public exponent value +for \s-1RSA\s0 key generation to \fBpubexp\fR. Currently it should be an odd integer. The +\&\fBpubexp\fR pointer is used internally by this function so it should not be +modified or freed after the call. If not specified 65537 is used. +.PP +The \fBEVP_PKEY_CTX_set_rsa_keygen_primes()\fR macro sets the number of primes for +\&\s-1RSA\s0 key generation to \fBprimes\fR. If not specified 2 is used. +.PP +The \fBEVP_PKEY_CTX_set_rsa_mgf1_md()\fR macro sets the \s-1MGF1\s0 digest for \s-1RSA\s0 padding +schemes to \fBmd\fR. If not explicitly set the signing digest is used. The +padding mode must have been set to \fB\s-1RSA_PKCS1_OAEP_PADDING\s0\fR +or \fB\s-1RSA_PKCS1_PSS_PADDING\s0\fR. +.PP +The \fBEVP_PKEY_CTX_get_rsa_mgf1_md()\fR macro gets the \s-1MGF1\s0 digest for \fBctx\fR. +If not explicitly set the signing digest is used. The padding mode must have +been set to \fB\s-1RSA_PKCS1_OAEP_PADDING\s0\fR or \fB\s-1RSA_PKCS1_PSS_PADDING\s0\fR. +.PP +The \fBEVP_PKEY_CTX_set_rsa_oaep_md()\fR macro sets the message digest type used +in \s-1RSA OAEP\s0 to \fBmd\fR. The padding mode must have been set to +\&\fB\s-1RSA_PKCS1_OAEP_PADDING\s0\fR. +.PP +The \fBEVP_PKEY_CTX_get_rsa_oaep_md()\fR macro gets the message digest type used +in \s-1RSA OAEP\s0 to \fBmd\fR. The padding mode must have been set to +\&\fB\s-1RSA_PKCS1_OAEP_PADDING\s0\fR. +.PP +The \fBEVP_PKEY_CTX_set0_rsa_oaep_label()\fR macro sets the \s-1RSA OAEP\s0 label to +\&\fBlabel\fR and its length to \fBlen\fR. If \fBlabel\fR is \s-1NULL\s0 or \fBlen\fR is 0, +the label is cleared. The library takes ownership of the label so the +caller should not free the original memory pointed to by \fBlabel\fR. +The padding mode must have been set to \fB\s-1RSA_PKCS1_OAEP_PADDING\s0\fR. +.PP +The \fBEVP_PKEY_CTX_get0_rsa_oaep_label()\fR macro gets the \s-1RSA OAEP\s0 label to +\&\fBlabel\fR. The return value is the label length. The padding mode +must have been set to \fB\s-1RSA_PKCS1_OAEP_PADDING\s0\fR. The resulting pointer is owned +by the library and should not be freed by the caller. +.SS "\s-1DSA\s0 parameters" +.IX Subsection "DSA parameters" +The \fBEVP_PKEY_CTX_set_dsa_paramgen_bits()\fR macro sets the number of bits used +for \s-1DSA\s0 parameter generation to \fBnbits\fR. If not specified, 1024 is used. +.PP +The \fBEVP_PKEY_CTX_set_dsa_paramgen_q_bits()\fR macro sets the number of bits in the +subprime parameter \fBq\fR for \s-1DSA\s0 parameter generation to \fBqbits\fR. If not +specified, 160 is used. If a digest function is specified below, this parameter +is ignored and instead, the number of bits in \fBq\fR matches the size of the +digest. +.PP +The \fBEVP_PKEY_CTX_set_dsa_paramgen_md()\fR macro sets the digest function used for +\&\s-1DSA\s0 parameter generation to \fBmd\fR. If not specified, one of \s-1SHA\-1, SHA\-224,\s0 or +\&\s-1SHA\-256\s0 is selected to match the bit length of \fBq\fR above. +.SS "\s-1DH\s0 parameters" +.IX Subsection "DH parameters" +The \fBEVP_PKEY_CTX_set_dh_paramgen_prime_len()\fR macro sets the length of the \s-1DH\s0 +prime parameter \fBp\fR for \s-1DH\s0 parameter generation. If this macro is not called +then 1024 is used. Only accepts lengths greater than or equal to 256. +.PP +The \fBEVP_PKEY_CTX_set_dh_paramgen_subprime_len()\fR macro sets the length of the \s-1DH\s0 +optional subprime parameter \fBq\fR for \s-1DH\s0 parameter generation. The default is +256 if the prime is at least 2048 bits long or 160 otherwise. The \s-1DH\s0 +paramgen type must have been set to x9.42. +.PP +The \fBEVP_PKEY_CTX_set_dh_paramgen_generator()\fR macro sets \s-1DH\s0 generator to \fBgen\fR +for \s-1DH\s0 parameter generation. If not specified 2 is used. +.PP +The \fBEVP_PKEY_CTX_set_dh_paramgen_type()\fR macro sets the key type for \s-1DH\s0 +parameter generation. Use 0 for PKCS#3 \s-1DH\s0 and 1 for X9.42 \s-1DH.\s0 +The default is 0. +.PP +The \fBEVP_PKEY_CTX_set_dh_pad()\fR macro sets the \s-1DH\s0 padding mode. If \fBpad\fR is +1 the shared secret is padded with zeroes up to the size of the \s-1DH\s0 prime \fBp\fR. +If \fBpad\fR is zero (the default) then no padding is performed. +.PP +\&\fBEVP_PKEY_CTX_set_dh_nid()\fR sets the \s-1DH\s0 parameters to values corresponding to +\&\fBnid\fR as defined in \s-1RFC7919.\s0 The \fBnid\fR parameter must be \fBNID_ffdhe2048\fR, +\&\fBNID_ffdhe3072\fR, \fBNID_ffdhe4096\fR, \fBNID_ffdhe6144\fR, \fBNID_ffdhe8192\fR +or \fBNID_undef\fR to clear the stored value. This macro can be called during +parameter or key generation. +The nid parameter and the rfc5114 parameter are mutually exclusive. +.PP +The \fBEVP_PKEY_CTX_set_dh_rfc5114()\fR and \fBEVP_PKEY_CTX_set_dhx_rfc5114()\fR macros are +synonymous. They set the \s-1DH\s0 parameters to the values defined in \s-1RFC5114.\s0 The +\&\fBrfc5114\fR parameter must be 1, 2 or 3 corresponding to \s-1RFC5114\s0 sections +2.1, 2.2 and 2.3. or 0 to clear the stored value. This macro can be called +during parameter generation. The \fBctx\fR must have a key type of +\&\fB\s-1EVP_PKEY_DHX\s0\fR. +The rfc5114 parameter and the nid parameter are mutually exclusive. +.SS "\s-1DH\s0 key derivation function parameters" +.IX Subsection "DH key derivation function parameters" +Note that all of the following functions require that the \fBctx\fR parameter has +a private key type of \fB\s-1EVP_PKEY_DHX\s0\fR. When using key derivation, the output of +\&\fBEVP_PKEY_derive()\fR is the output of the \s-1KDF\s0 instead of the \s-1DH\s0 shared secret. +The \s-1KDF\s0 output is typically used as a Key Encryption Key (\s-1KEK\s0) that in turn +encrypts a Content Encryption Key (\s-1CEK\s0). +.PP +The \fBEVP_PKEY_CTX_set_dh_kdf_type()\fR macro sets the key derivation function type +to \fBkdf\fR for \s-1DH\s0 key derivation. Possible values are \fB\s-1EVP_PKEY_DH_KDF_NONE\s0\fR +and \fB\s-1EVP_PKEY_DH_KDF_X9_42\s0\fR which uses the key derivation specified in \s-1RFC2631\s0 +(based on the keying algorithm described in X9.42). When using key derivation, +the \fBkdf_oid\fR, \fBkdf_md\fR and \fBkdf_outlen\fR parameters must also be specified. +.PP +The \fBEVP_PKEY_CTX_get_dh_kdf_type()\fR macro gets the key derivation function type +for \fBctx\fR used for \s-1DH\s0 key derivation. Possible values are \fB\s-1EVP_PKEY_DH_KDF_NONE\s0\fR +and \fB\s-1EVP_PKEY_DH_KDF_X9_42\s0\fR. +.PP +The \fBEVP_PKEY_CTX_set0_dh_kdf_oid()\fR macro sets the key derivation function +object identifier to \fBoid\fR for \s-1DH\s0 key derivation. This \s-1OID\s0 should identify +the algorithm to be used with the Content Encryption Key. +The library takes ownership of the object identifier so the caller should not +free the original memory pointed to by \fBoid\fR. +.PP +The \fBEVP_PKEY_CTX_get0_dh_kdf_oid()\fR macro gets the key derivation function oid +for \fBctx\fR used for \s-1DH\s0 key derivation. The resulting pointer is owned by the +library and should not be freed by the caller. +.PP +The \fBEVP_PKEY_CTX_set_dh_kdf_md()\fR macro sets the key derivation function +message digest to \fBmd\fR for \s-1DH\s0 key derivation. Note that \s-1RFC2631\s0 specifies +that this digest should be \s-1SHA1\s0 but OpenSSL tolerates other digests. +.PP +The \fBEVP_PKEY_CTX_get_dh_kdf_md()\fR macro gets the key derivation function +message digest for \fBctx\fR used for \s-1DH\s0 key derivation. +.PP +The \fBEVP_PKEY_CTX_set_dh_kdf_outlen()\fR macro sets the key derivation function +output length to \fBlen\fR for \s-1DH\s0 key derivation. +.PP +The \fBEVP_PKEY_CTX_get_dh_kdf_outlen()\fR macro gets the key derivation function +output length for \fBctx\fR used for \s-1DH\s0 key derivation. +.PP +The \fBEVP_PKEY_CTX_set0_dh_kdf_ukm()\fR macro sets the user key material to +\&\fBukm\fR and its length to \fBlen\fR for \s-1DH\s0 key derivation. This parameter is optional +and corresponds to the partyAInfo field in \s-1RFC2631\s0 terms. The specification +requires that it is 512 bits long but this is not enforced by OpenSSL. +The library takes ownership of the user key material so the caller should not +free the original memory pointed to by \fBukm\fR. +.PP +The \fBEVP_PKEY_CTX_get0_dh_kdf_ukm()\fR macro gets the user key material for \fBctx\fR. +The return value is the user key material length. The resulting pointer is owned +by the library and should not be freed by the caller. +.SS "\s-1EC\s0 parameters" +.IX Subsection "EC parameters" +The \fBEVP_PKEY_CTX_set_ec_paramgen_curve_nid()\fR sets the \s-1EC\s0 curve for \s-1EC\s0 parameter +generation to \fBnid\fR. For \s-1EC\s0 parameter generation this macro must be called +or an error occurs because there is no default curve. +This function can also be called to set the curve explicitly when +generating an \s-1EC\s0 key. +.PP +The \fBEVP_PKEY_CTX_set_ec_param_enc()\fR macro sets the \s-1EC\s0 parameter encoding to +\&\fBparam_enc\fR when generating \s-1EC\s0 parameters or an \s-1EC\s0 key. The encoding can be +\&\fB\s-1OPENSSL_EC_EXPLICIT_CURVE\s0\fR for explicit parameters (the default in versions +of OpenSSL before 1.1.0) or \fB\s-1OPENSSL_EC_NAMED_CURVE\s0\fR to use named curve form. +For maximum compatibility the named curve form should be used. Note: the +\&\fB\s-1OPENSSL_EC_NAMED_CURVE\s0\fR value was added in OpenSSL 1.1.0; previous +versions should use 0 instead. +.SS "\s-1ECDH\s0 parameters" +.IX Subsection "ECDH parameters" +The \fBEVP_PKEY_CTX_set_ecdh_cofactor_mode()\fR macro sets the cofactor mode to +\&\fBcofactor_mode\fR for \s-1ECDH\s0 key derivation. Possible values are 1 to enable +cofactor key derivation, 0 to disable it and \-1 to clear the stored cofactor +mode and fallback to the private key cofactor mode. +.PP +The \fBEVP_PKEY_CTX_get_ecdh_cofactor_mode()\fR macro returns the cofactor mode for +\&\fBctx\fR used for \s-1ECDH\s0 key derivation. Possible values are 1 when cofactor key +derivation is enabled and 0 otherwise. +.SS "\s-1ECDH\s0 key derivation function parameters" +.IX Subsection "ECDH key derivation function parameters" +The \fBEVP_PKEY_CTX_set_ecdh_kdf_type()\fR macro sets the key derivation function type +to \fBkdf\fR for \s-1ECDH\s0 key derivation. Possible values are \fB\s-1EVP_PKEY_ECDH_KDF_NONE\s0\fR +and \fB\s-1EVP_PKEY_ECDH_KDF_X9_63\s0\fR which uses the key derivation specified in X9.63. +When using key derivation, the \fBkdf_md\fR and \fBkdf_outlen\fR parameters must +also be specified. +.PP +The \fBEVP_PKEY_CTX_get_ecdh_kdf_type()\fR macro returns the key derivation function +type for \fBctx\fR used for \s-1ECDH\s0 key derivation. Possible values are +\&\fB\s-1EVP_PKEY_ECDH_KDF_NONE\s0\fR and \fB\s-1EVP_PKEY_ECDH_KDF_X9_63\s0\fR. +.PP +The \fBEVP_PKEY_CTX_set_ecdh_kdf_md()\fR macro sets the key derivation function +message digest to \fBmd\fR for \s-1ECDH\s0 key derivation. Note that X9.63 specifies +that this digest should be \s-1SHA1\s0 but OpenSSL tolerates other digests. +.PP +The \fBEVP_PKEY_CTX_get_ecdh_kdf_md()\fR macro gets the key derivation function +message digest for \fBctx\fR used for \s-1ECDH\s0 key derivation. +.PP +The \fBEVP_PKEY_CTX_set_ecdh_kdf_outlen()\fR macro sets the key derivation function +output length to \fBlen\fR for \s-1ECDH\s0 key derivation. +.PP +The \fBEVP_PKEY_CTX_get_ecdh_kdf_outlen()\fR macro gets the key derivation function +output length for \fBctx\fR used for \s-1ECDH\s0 key derivation. +.PP +The \fBEVP_PKEY_CTX_set0_ecdh_kdf_ukm()\fR macro sets the user key material to \fBukm\fR +for \s-1ECDH\s0 key derivation. This parameter is optional and corresponds to the +shared info in X9.63 terms. The library takes ownership of the user key material +so the caller should not free the original memory pointed to by \fBukm\fR. +.PP +The \fBEVP_PKEY_CTX_get0_ecdh_kdf_ukm()\fR macro gets the user key material for \fBctx\fR. +The return value is the user key material length. The resulting pointer is owned +by the library and should not be freed by the caller. +.SS "Other parameters" +.IX Subsection "Other parameters" +The \fBEVP_PKEY_CTX_set1_id()\fR, \fBEVP_PKEY_CTX_get1_id()\fR and \fBEVP_PKEY_CTX_get1_id_len()\fR +macros are used to manipulate the special identifier field for specific signature +algorithms such as \s-1SM2.\s0 The \fBEVP_PKEY_CTX_set1_id()\fR sets an \s-1ID\s0 pointed by \fBid\fR with +the length \fBid_len\fR to the library. The library takes a copy of the id so that +the caller can safely free the original memory pointed to by \fBid\fR. The +\&\fBEVP_PKEY_CTX_get1_id_len()\fR macro returns the length of the \s-1ID\s0 set via a previous +call to \fBEVP_PKEY_CTX_set1_id()\fR. The length is usually used to allocate adequate +memory for further calls to \fBEVP_PKEY_CTX_get1_id()\fR. The \fBEVP_PKEY_CTX_get1_id()\fR +macro returns the previously set \s-1ID\s0 value to caller in \fBid\fR. The caller should +allocate adequate memory space for the \fBid\fR before calling \fBEVP_PKEY_CTX_get1_id()\fR. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBEVP_PKEY_CTX_ctrl()\fR and its macros return a positive value for success and 0 +or a negative value for failure. In particular a return value of \-2 +indicates the operation is not supported by the public key algorithm. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBEVP_PKEY_CTX_new\fR\|(3), +\&\fBEVP_PKEY_encrypt\fR\|(3), +\&\fBEVP_PKEY_decrypt\fR\|(3), +\&\fBEVP_PKEY_sign\fR\|(3), +\&\fBEVP_PKEY_verify\fR\|(3), +\&\fBEVP_PKEY_verify_recover\fR\|(3), +\&\fBEVP_PKEY_derive\fR\|(3), +\&\fBEVP_PKEY_keygen\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +The +\&\fBEVP_PKEY_CTX_set1_id()\fR, \fBEVP_PKEY_CTX_get1_id()\fR and \fBEVP_PKEY_CTX_get1_id_len()\fR +macros were added in 1.1.1, other functions were added in OpenSSL 1.0.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2006\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_CTX_new.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_CTX_new.3 new file mode 100644 index 00000000..7e25d761 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_CTX_new.3 @@ -0,0 +1,192 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EVP_PKEY_CTX_NEW 3" +.TH EVP_PKEY_CTX_NEW 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EVP_PKEY_CTX_new, EVP_PKEY_CTX_new_id, EVP_PKEY_CTX_dup, EVP_PKEY_CTX_free \- public key algorithm context functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& EVP_PKEY_CTX *EVP_PKEY_CTX_new(EVP_PKEY *pkey, ENGINE *e); +\& EVP_PKEY_CTX *EVP_PKEY_CTX_new_id(int id, ENGINE *e); +\& EVP_PKEY_CTX *EVP_PKEY_CTX_dup(EVP_PKEY_CTX *ctx); +\& void EVP_PKEY_CTX_free(EVP_PKEY_CTX *ctx); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fBEVP_PKEY_CTX_new()\fR function allocates public key algorithm context using +the algorithm specified in \fBpkey\fR and \s-1ENGINE\s0 \fBe\fR. +.PP +The \fBEVP_PKEY_CTX_new_id()\fR function allocates public key algorithm context +using the algorithm specified by \fBid\fR and \s-1ENGINE\s0 \fBe\fR. It is normally used +when no \fB\s-1EVP_PKEY\s0\fR structure is associated with the operations, for example +during parameter generation of key generation for some algorithms. +.PP +\&\fBEVP_PKEY_CTX_dup()\fR duplicates the context \fBctx\fR. +.PP +\&\fBEVP_PKEY_CTX_free()\fR frees up the context \fBctx\fR. +If \fBctx\fR is \s-1NULL,\s0 nothing is done. +.SH "NOTES" +.IX Header "NOTES" +The \fB\s-1EVP_PKEY_CTX\s0\fR structure is an opaque public key algorithm context used +by the OpenSSL high level public key \s-1API.\s0 Contexts \fB\s-1MUST NOT\s0\fR be shared between +threads: that is it is not permissible to use the same context simultaneously +in two threads. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBEVP_PKEY_CTX_new()\fR, \fBEVP_PKEY_CTX_new_id()\fR, \fBEVP_PKEY_CTX_dup()\fR returns either +the newly allocated \fB\s-1EVP_PKEY_CTX\s0\fR structure of \fB\s-1NULL\s0\fR if an error occurred. +.PP +\&\fBEVP_PKEY_CTX_free()\fR does not return a value. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBEVP_PKEY_new\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +These functions were added in OpenSSL 1.0.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2006\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_CTX_set1_pbe_pass.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_CTX_set1_pbe_pass.3 new file mode 100644 index 00000000..fe5cd1c7 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_CTX_set1_pbe_pass.3 @@ -0,0 +1,183 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EVP_PKEY_CTX_SET1_PBE_PASS 3" +.TH EVP_PKEY_CTX_SET1_PBE_PASS 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EVP_PKEY_CTX_set1_pbe_pass \&\- generic KDF support functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int EVP_PKEY_CTX_set1_pbe_pass(EVP_PKEY_CTX *pctx, unsigned char *pass, +\& int passlen); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +These functions are generic support functions for all \s-1KDF\s0 algorithms. +.PP +\&\fBEVP_PKEY_CTX_set1_pbe_pass()\fR sets the password to the \fBpasslen\fR first +bytes from \fBpass\fR. +.SH "STRING CTRLS" +.IX Header "STRING CTRLS" +There is also support for string based control operations via +\&\fBEVP_PKEY_CTX_ctrl_str\fR\|(3). +The \fBpassword\fR can be directly specified using the \fBtype\fR parameter +\&\*(L"pass\*(R" or given in hex encoding using the \*(L"hexpass\*(R" parameter. +.SH "NOTES" +.IX Header "NOTES" +All these functions are implemented as macros. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +All these functions return 1 for success and 0 or a negative value for failure. +In particular a return value of \-2 indicates the operation is not supported by +the public key algorithm. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBEVP_PKEY_CTX_new\fR\|(3), +\&\fBEVP_PKEY_CTX_ctrl_str\fR\|(3), +\&\fBEVP_PKEY_derive\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_CTX_set_hkdf_md.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_CTX_set_hkdf_md.3 new file mode 100644 index 00000000..6542c750 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_CTX_set_hkdf_md.3 @@ -0,0 +1,288 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EVP_PKEY_CTX_SET_HKDF_MD 3" +.TH EVP_PKEY_CTX_SET_HKDF_MD 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EVP_PKEY_CTX_set_hkdf_md, EVP_PKEY_CTX_set1_hkdf_salt, EVP_PKEY_CTX_set1_hkdf_key, EVP_PKEY_CTX_add1_hkdf_info, EVP_PKEY_CTX_hkdf_mode \- HMAC\-based Extract\-and\-Expand key derivation algorithm +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int EVP_PKEY_CTX_hkdf_mode(EVP_PKEY_CTX *pctx, int mode); +\& +\& int EVP_PKEY_CTX_set_hkdf_md(EVP_PKEY_CTX *pctx, const EVP_MD *md); +\& +\& int EVP_PKEY_CTX_set1_hkdf_salt(EVP_PKEY_CTX *pctx, unsigned char *salt, +\& int saltlen); +\& +\& int EVP_PKEY_CTX_set1_hkdf_key(EVP_PKEY_CTX *pctx, unsigned char *key, +\& int keylen); +\& +\& int EVP_PKEY_CTX_add1_hkdf_info(EVP_PKEY_CTX *pctx, unsigned char *info, +\& int infolen); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \s-1EVP_PKEY_HKDF\s0 algorithm implements the \s-1HKDF\s0 key derivation function. +\&\s-1HKDF\s0 follows the \*(L"extract-then-expand\*(R" paradigm, where the \s-1KDF\s0 logically +consists of two modules. The first stage takes the input keying material +and \*(L"extracts\*(R" from it a fixed-length pseudorandom key K. The second stage +\&\*(L"expands\*(R" the key K into several additional pseudorandom keys (the output +of the \s-1KDF\s0). +.PP +\&\fBEVP_PKEY_CTX_hkdf_mode()\fR sets the mode for the \s-1HKDF\s0 operation. There are three +modes that are currently defined: +.IP "\s-1EVP_PKEY_HKDEF_MODE_EXTRACT_AND_EXPAND\s0" 4 +.IX Item "EVP_PKEY_HKDEF_MODE_EXTRACT_AND_EXPAND" +This is the default mode. Calling \fBEVP_PKEY_derive\fR\|(3) on an \s-1EVP_PKEY_CTX\s0 set +up for \s-1HKDF\s0 will perform an extract followed by an expand operation in one go. +The derived key returned will be the result after the expand operation. The +intermediate fixed-length pseudorandom key K is not returned. +.Sp +In this mode the digest, key, salt and info values must be set before a key is +derived or an error occurs. +.IP "\s-1EVP_PKEY_HKDEF_MODE_EXTRACT_ONLY\s0" 4 +.IX Item "EVP_PKEY_HKDEF_MODE_EXTRACT_ONLY" +In this mode calling \fBEVP_PKEY_derive\fR\|(3) will just perform the extract +operation. The value returned will be the intermediate fixed-length pseudorandom +key K. +.Sp +The digest, key and salt values must be set before a key is derived or an +error occurs. +.IP "\s-1EVP_PKEY_HKDEF_MODE_EXPAND_ONLY\s0" 4 +.IX Item "EVP_PKEY_HKDEF_MODE_EXPAND_ONLY" +In this mode calling \fBEVP_PKEY_derive\fR\|(3) will just perform the expand +operation. The input key should be set to the intermediate fixed-length +pseudorandom key K returned from a previous extract operation. +.Sp +The digest, key and info values must be set before a key is derived or an +error occurs. +.PP +\&\fBEVP_PKEY_CTX_set_hkdf_md()\fR sets the message digest associated with the \s-1HKDF.\s0 +.PP +\&\fBEVP_PKEY_CTX_set1_hkdf_salt()\fR sets the salt to \fBsaltlen\fR bytes of the +buffer \fBsalt\fR. Any existing value is replaced. +.PP +\&\fBEVP_PKEY_CTX_set1_hkdf_key()\fR sets the key to \fBkeylen\fR bytes of the buffer +\&\fBkey\fR. Any existing value is replaced. +.PP +\&\fBEVP_PKEY_CTX_add1_hkdf_info()\fR sets the info value to \fBinfolen\fR bytes of the +buffer \fBinfo\fR. If a value is already set, it is appended to the existing +value. +.SH "STRING CTRLS" +.IX Header "STRING CTRLS" +\&\s-1HKDF\s0 also supports string based control operations via +\&\fBEVP_PKEY_CTX_ctrl_str\fR\|(3). +The \fBtype\fR parameter \*(L"md\*(R" uses the supplied \fBvalue\fR as the name of the digest +algorithm to use. +The \fBtype\fR parameter \*(L"mode\*(R" uses the values \*(L"\s-1EXTRACT_AND_EXPAND\*(R", +\&\*(L"EXTRACT_ONLY\*(R"\s0 and \*(L"\s-1EXPAND_ONLY\*(R"\s0 to determine the mode to use. +The \fBtype\fR parameters \*(L"salt\*(R", \*(L"key\*(R" and \*(L"info\*(R" use the supplied \fBvalue\fR +parameter as a \fBseed\fR, \fBkey\fR or \fBinfo\fR value. +The names \*(L"hexsalt\*(R", \*(L"hexkey\*(R" and \*(L"hexinfo\*(R" are similar except they take a hex +string which is converted to binary. +.SH "NOTES" +.IX Header "NOTES" +All these functions are implemented as macros. +.PP +A context for \s-1HKDF\s0 can be obtained by calling: +.PP +.Vb 1 +\& EVP_PKEY_CTX *pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_HKDF, NULL); +.Ve +.PP +The total length of the info buffer cannot exceed 1024 bytes in length: this +should be more than enough for any normal use of \s-1HKDF.\s0 +.PP +The output length of an \s-1HKDF\s0 expand operation is specified via the length +parameter to the \fBEVP_PKEY_derive\fR\|(3) function. +Since the \s-1HKDF\s0 output length is variable, passing a \fB\s-1NULL\s0\fR buffer as a means +to obtain the requisite length is not meaningful with \s-1HKDF\s0 in any mode that +performs an expand operation. Instead, the caller must allocate a buffer of the +desired length, and pass that buffer to \fBEVP_PKEY_derive\fR\|(3) along with (a +pointer initialized to) the desired length. Passing a \fB\s-1NULL\s0\fR buffer to obtain +the length is allowed when using \s-1EVP_PKEY_HKDEF_MODE_EXTRACT_ONLY.\s0 +.PP +Optimised versions of \s-1HKDF\s0 can be implemented in an \s-1ENGINE.\s0 +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +All these functions return 1 for success and 0 or a negative value for failure. +In particular a return value of \-2 indicates the operation is not supported by +the public key algorithm. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +This example derives 10 bytes using \s-1SHA\-256\s0 with the secret key \*(L"secret\*(R", +salt value \*(L"salt\*(R" and info value \*(L"label\*(R": +.PP +.Vb 4 +\& EVP_PKEY_CTX *pctx; +\& unsigned char out[10]; +\& size_t outlen = sizeof(out); +\& pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_HKDF, NULL); +\& +\& if (EVP_PKEY_derive_init(pctx) <= 0) +\& /* Error */ +\& if (EVP_PKEY_CTX_set_hkdf_md(pctx, EVP_sha256()) <= 0) +\& /* Error */ +\& if (EVP_PKEY_CTX_set1_hkdf_salt(pctx, "salt", 4) <= 0) +\& /* Error */ +\& if (EVP_PKEY_CTX_set1_hkdf_key(pctx, "secret", 6) <= 0) +\& /* Error */ +\& if (EVP_PKEY_CTX_add1_hkdf_info(pctx, "label", 5) <= 0) +\& /* Error */ +\& if (EVP_PKEY_derive(pctx, out, &outlen) <= 0) +\& /* Error */ +.Ve +.SH "CONFORMING TO" +.IX Header "CONFORMING TO" +\&\s-1RFC 5869\s0 +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBEVP_PKEY_CTX_new\fR\|(3), +\&\fBEVP_PKEY_CTX_ctrl_str\fR\|(3), +\&\fBEVP_PKEY_derive\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2016\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_CTX_set_rsa_pss_keygen_md.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_CTX_set_rsa_pss_keygen_md.3 new file mode 100644 index 00000000..19461385 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_CTX_set_rsa_pss_keygen_md.3 @@ -0,0 +1,222 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EVP_PKEY_CTX_SET_RSA_PSS_KEYGEN_MD 3" +.TH EVP_PKEY_CTX_SET_RSA_PSS_KEYGEN_MD 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EVP_PKEY_CTX_set_rsa_pss_keygen_md, EVP_PKEY_CTX_set_rsa_pss_keygen_mgf1_md, EVP_PKEY_CTX_set_rsa_pss_keygen_saltlen \&\- EVP_PKEY RSA\-PSS algorithm support functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int EVP_PKEY_CTX_set_rsa_pss_keygen_md(EVP_PKEY_CTX *pctx, +\& const EVP_MD *md); +\& int EVP_PKEY_CTX_set_rsa_pss_keygen_mgf1_md(EVP_PKEY_CTX *pctx, +\& const EVP_MD *md); +\& int EVP_PKEY_CTX_set_rsa_pss_keygen_saltlen(EVP_PKEY_CTX *pctx, +\& int saltlen); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +These are the functions that implement \s-1\fBRSA\-PSS\s0\fR\|(7). +.SS "Signing and Verification" +.IX Subsection "Signing and Verification" +The macro \fBEVP_PKEY_CTX_set_rsa_padding()\fR is supported but an error is +returned if an attempt is made to set the padding mode to anything other +than \fB\s-1PSS\s0\fR. It is otherwise similar to the \fB\s-1RSA\s0\fR version. +.PP +The \fBEVP_PKEY_CTX_set_rsa_pss_saltlen()\fR macro is used to set the salt length. +If the key has usage restrictions then an error is returned if an attempt is +made to set the salt length below the minimum value. It is otherwise similar +to the \fB\s-1RSA\s0\fR operation except detection of the salt length (using +\&\s-1RSA_PSS_SALTLEN_AUTO\s0) is not supported for verification if the key has +usage restrictions. +.PP +The \fBEVP_PKEY_CTX_set_signature_md()\fR and \fBEVP_PKEY_CTX_set_rsa_mgf1_md()\fR macros +are used to set the digest and \s-1MGF1\s0 algorithms respectively. If the key has +usage restrictions then an error is returned if an attempt is made to set the +digest to anything other than the restricted value. Otherwise these are +similar to the \fB\s-1RSA\s0\fR versions. +.SS "Key Generation" +.IX Subsection "Key Generation" +As with \s-1RSA\s0 key generation the \fBEVP_PKEY_CTX_set_rsa_keygen_bits()\fR +and \fBEVP_PKEY_CTX_set_rsa_keygen_pubexp()\fR macros are supported for RSA-PSS: +they have exactly the same meaning as for the \s-1RSA\s0 algorithm. +.PP +Optional parameter restrictions can be specified when generating a \s-1PSS\s0 key. +If any restrictions are set (using the macros described below) then \fBall\fR +parameters are restricted. For example, setting a minimum salt length also +restricts the digest and \s-1MGF1\s0 algorithms. If any restrictions are in place +then they are reflected in the corresponding parameters of the public key +when (for example) a certificate request is signed. +.PP +\&\fBEVP_PKEY_CTX_set_rsa_pss_keygen_md()\fR restricts the digest algorithm the +generated key can use to \fBmd\fR. +.PP +\&\fBEVP_PKEY_CTX_set_rsa_pss_keygen_mgf1_md()\fR restricts the \s-1MGF1\s0 algorithm the +generated key can use to \fBmd\fR. +.PP +\&\fBEVP_PKEY_CTX_set_rsa_pss_keygen_saltlen()\fR restricts the minimum salt length +to \fBsaltlen\fR. +.SH "NOTES" +.IX Header "NOTES" +A context for the \fBRSA-PSS\fR algorithm can be obtained by calling: +.PP +.Vb 1 +\& EVP_PKEY_CTX *pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_RSA_PSS, NULL); +.Ve +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +All these functions return 1 for success and 0 or a negative value for failure. +In particular a return value of \-2 indicates the operation is not supported by +the public key algorithm. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\s-1\fBRSA\-PSS\s0\fR\|(7), +\&\fBEVP_PKEY_CTX_new\fR\|(3), +\&\fBEVP_PKEY_CTX_ctrl_str\fR\|(3), +\&\fBEVP_PKEY_derive\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_CTX_set_scrypt_N.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_CTX_set_scrypt_N.3 new file mode 100644 index 00000000..60716e99 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_CTX_set_scrypt_N.3 @@ -0,0 +1,211 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EVP_PKEY_CTX_SET_SCRYPT_N 3" +.TH EVP_PKEY_CTX_SET_SCRYPT_N 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EVP_PKEY_CTX_set1_scrypt_salt, EVP_PKEY_CTX_set_scrypt_N, EVP_PKEY_CTX_set_scrypt_r, EVP_PKEY_CTX_set_scrypt_p, EVP_PKEY_CTX_set_scrypt_maxmem_bytes \&\- EVP_PKEY scrypt KDF support functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int EVP_PKEY_CTX_set1_scrypt_salt(EVP_PKEY_CTX *pctx, unsigned char *salt, +\& int saltlen); +\& +\& int EVP_PKEY_CTX_set_scrypt_N(EVP_PKEY_CTX *pctx, uint64_t N); +\& +\& int EVP_PKEY_CTX_set_scrypt_r(EVP_PKEY_CTX *pctx, uint64_t r); +\& +\& int EVP_PKEY_CTX_set_scrypt_p(EVP_PKEY_CTX *pctx, uint64_t p); +\& +\& int EVP_PKEY_CTX_set_scrypt_maxmem_bytes(EVP_PKEY_CTX *pctx, +\& uint64_t maxmem); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +These functions are used to set up the necessary data to use the +scrypt \s-1KDF.\s0 +For more information on scrypt, see \fBscrypt\fR\|(7). +.PP +\&\fBEVP_PKEY_CTX_set1_scrypt_salt()\fR sets the \fBsaltlen\fR bytes long salt +value. +.PP +\&\fBEVP_PKEY_CTX_set_scrypt_N()\fR, \fBEVP_PKEY_CTX_set_scrypt_r()\fR and +\&\fBEVP_PKEY_CTX_set_scrypt_p()\fR configure the work factors N, r and p. +.PP +\&\fBEVP_PKEY_CTX_set_scrypt_maxmem_bytes()\fR sets how much \s-1RAM\s0 key +derivation may maximally use, given in bytes. +If \s-1RAM\s0 is exceeded because the load factors are chosen too high, the +key derivation will fail. +.SH "STRING CTRLS" +.IX Header "STRING CTRLS" +scrypt also supports string based control operations via +\&\fBEVP_PKEY_CTX_ctrl_str\fR\|(3). +Similarly, the \fBsalt\fR can either be specified using the \fBtype\fR +parameter \*(L"salt\*(R" or in hex encoding by using the \*(L"hexsalt\*(R" parameter. +The work factors \fBN\fR, \fBr\fR and \fBp\fR as well as \fBmaxmem_bytes\fR can be +set by using the parameters \*(L"N\*(R", \*(L"r\*(R", \*(L"p\*(R" and \*(L"maxmem_bytes\*(R", +respectively. +.SH "NOTES" +.IX Header "NOTES" +The scrypt \s-1KDF\s0 also uses \fBEVP_PKEY_CTX_set1_pbe_pass()\fR as well as +the value from the string controls \*(L"pass\*(R" and \*(L"hexpass\*(R". +See \fBEVP_PKEY_CTX_set1_pbe_pass\fR\|(3). +.PP +All the functions described here are implemented as macros. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +All these functions return 1 for success and 0 or a negative value for +failure. +In particular a return value of \-2 indicates the operation is not +supported by the public key algorithm. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBscrypt\fR\|(7), +\&\fBEVP_PKEY_CTX_new\fR\|(3), +\&\fBEVP_PKEY_CTX_ctrl_str\fR\|(3), +\&\fBEVP_PKEY_derive\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_CTX_set_tls1_prf_md.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_CTX_set_tls1_prf_md.3 new file mode 100644 index 00000000..fab8f310 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_CTX_set_tls1_prf_md.3 @@ -0,0 +1,240 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EVP_PKEY_CTX_SET_TLS1_PRF_MD 3" +.TH EVP_PKEY_CTX_SET_TLS1_PRF_MD 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EVP_PKEY_CTX_set_tls1_prf_md, EVP_PKEY_CTX_set1_tls1_prf_secret, EVP_PKEY_CTX_add1_tls1_prf_seed \- TLS PRF key derivation algorithm +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int EVP_PKEY_CTX_set_tls1_prf_md(EVP_PKEY_CTX *pctx, const EVP_MD *md); +\& int EVP_PKEY_CTX_set1_tls1_prf_secret(EVP_PKEY_CTX *pctx, +\& unsigned char *sec, int seclen); +\& int EVP_PKEY_CTX_add1_tls1_prf_seed(EVP_PKEY_CTX *pctx, +\& unsigned char *seed, int seedlen); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fB\s-1EVP_PKEY_TLS1_PRF\s0\fR algorithm implements the \s-1PRF\s0 key derivation function for +\&\s-1TLS.\s0 It has no associated private key and only implements key derivation +using \fBEVP_PKEY_derive\fR\|(3). +.PP +\&\fBEVP_PKEY_set_tls1_prf_md()\fR sets the message digest associated with the +\&\s-1TLS PRF.\s0 \fBEVP_md5_sha1()\fR is treated as a special case which uses the \s-1PRF\s0 +algorithm using both \fB\s-1MD5\s0\fR and \fB\s-1SHA1\s0\fR as used in \s-1TLS 1.0\s0 and 1.1. +.PP +\&\fBEVP_PKEY_CTX_set_tls1_prf_secret()\fR sets the secret value of the \s-1TLS PRF\s0 +to \fBseclen\fR bytes of the buffer \fBsec\fR. Any existing secret value is replaced +and any seed is reset. +.PP +\&\fBEVP_PKEY_CTX_add1_tls1_prf_seed()\fR sets the seed to \fBseedlen\fR bytes of \fBseed\fR. +If a seed is already set it is appended to the existing value. +.SH "STRING CTRLS" +.IX Header "STRING CTRLS" +The \s-1TLS PRF\s0 also supports string based control operations using +\&\fBEVP_PKEY_CTX_ctrl_str\fR\|(3). +The \fBtype\fR parameter \*(L"md\*(R" uses the supplied \fBvalue\fR as the name of the digest +algorithm to use. +The \fBtype\fR parameters \*(L"secret\*(R" and \*(L"seed\*(R" use the supplied \fBvalue\fR parameter +as a secret or seed value. +The names \*(L"hexsecret\*(R" and \*(L"hexseed\*(R" are similar except they take a hex string +which is converted to binary. +.SH "NOTES" +.IX Header "NOTES" +All these functions are implemented as macros. +.PP +A context for the \s-1TLS PRF\s0 can be obtained by calling: +.PP +.Vb 1 +\& EVP_PKEY_CTX *pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_TLS1_PRF, NULL); +.Ve +.PP +The digest, secret value and seed must be set before a key is derived or an +error occurs. +.PP +The total length of all seeds cannot exceed 1024 bytes in length: this should +be more than enough for any normal use of the \s-1TLS PRF.\s0 +.PP +The output length of the \s-1PRF\s0 is specified by the length parameter in the +\&\fBEVP_PKEY_derive()\fR function. Since the output length is variable, setting +the buffer to \fB\s-1NULL\s0\fR is not meaningful for the \s-1TLS PRF.\s0 +.PP +Optimised versions of the \s-1TLS PRF\s0 can be implemented in an \s-1ENGINE.\s0 +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +All these functions return 1 for success and 0 or a negative value for failure. +In particular a return value of \-2 indicates the operation is not supported by +the public key algorithm. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +This example derives 10 bytes using \s-1SHA\-256\s0 with the secret key \*(L"secret\*(R" +and seed value \*(L"seed\*(R": +.PP +.Vb 3 +\& EVP_PKEY_CTX *pctx; +\& unsigned char out[10]; +\& size_t outlen = sizeof(out); +\& +\& pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_TLS1_PRF, NULL); +\& if (EVP_PKEY_derive_init(pctx) <= 0) +\& /* Error */ +\& if (EVP_PKEY_CTX_set_tls1_prf_md(pctx, EVP_sha256()) <= 0) +\& /* Error */ +\& if (EVP_PKEY_CTX_set1_tls1_prf_secret(pctx, "secret", 6) <= 0) +\& /* Error */ +\& if (EVP_PKEY_CTX_add1_tls1_prf_seed(pctx, "seed", 4) <= 0) +\& /* Error */ +\& if (EVP_PKEY_derive(pctx, out, &outlen) <= 0) +\& /* Error */ +.Ve +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBEVP_PKEY_CTX_new\fR\|(3), +\&\fBEVP_PKEY_CTX_ctrl_str\fR\|(3), +\&\fBEVP_PKEY_derive\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2016\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_asn1_get_count.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_asn1_get_count.3 new file mode 100644 index 00000000..d10444c4 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_asn1_get_count.3 @@ -0,0 +1,207 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EVP_PKEY_ASN1_GET_COUNT 3" +.TH EVP_PKEY_ASN1_GET_COUNT 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EVP_PKEY_asn1_find, EVP_PKEY_asn1_find_str, EVP_PKEY_asn1_get_count, EVP_PKEY_asn1_get0, EVP_PKEY_asn1_get0_info \&\- enumerate public key ASN.1 methods +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int EVP_PKEY_asn1_get_count(void); +\& const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_get0(int idx); +\& const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_find(ENGINE **pe, int type); +\& const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_find_str(ENGINE **pe, +\& const char *str, int len); +\& int EVP_PKEY_asn1_get0_info(int *ppkey_id, int *pkey_base_id, +\& int *ppkey_flags, const char **pinfo, +\& const char **ppem_str, +\& const EVP_PKEY_ASN1_METHOD *ameth); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBEVP_PKEY_asn1_count()\fR returns a count of the number of public key +\&\s-1ASN.1\s0 methods available: it includes standard methods and any methods +added by the application. +.PP +\&\fBEVP_PKEY_asn1_get0()\fR returns the public key \s-1ASN.1\s0 method \fBidx\fR. +The value of \fBidx\fR must be between zero and \fBEVP_PKEY_asn1_get_count()\fR +\&\- 1. +.PP +\&\fBEVP_PKEY_asn1_find()\fR looks up the \fB\s-1EVP_PKEY_ASN1_METHOD\s0\fR with \s-1NID\s0 +\&\fBtype\fR. +If \fBpe\fR isn't \fB\s-1NULL\s0\fR, then it will look up an engine implementing a +\&\fB\s-1EVP_PKEY_ASN1_METHOD\s0\fR for the \s-1NID\s0 \fBtype\fR and return that instead, +and also set \fB*pe\fR to point at the engine that implements it. +.PP +\&\fBEVP_PKEY_asn1_find_str()\fR looks up the \fB\s-1EVP_PKEY_ASN1_METHOD\s0\fR with \s-1PEM\s0 +type string \fBstr\fR. +Just like \fBEVP_PKEY_asn1_find()\fR, if \fBpe\fR isn't \fB\s-1NULL\s0\fR, then it will +look up an engine implementing a \fB\s-1EVP_PKEY_ASN1_METHOD\s0\fR for the \s-1NID\s0 +\&\fBtype\fR and return that instead, and also set \fB*pe\fR to point at the +engine that implements it. +.PP +\&\fBEVP_PKEY_asn1_get0_info()\fR returns the public key \s-1ID,\s0 base public key +\&\s-1ID\s0 (both NIDs), any flags, the method description and \s-1PEM\s0 type string +associated with the public key \s-1ASN.1\s0 method \fB*ameth\fR. +.PP +\&\fBEVP_PKEY_asn1_count()\fR, \fBEVP_PKEY_asn1_get0()\fR, \fBEVP_PKEY_asn1_find()\fR and +\&\fBEVP_PKEY_asn1_find_str()\fR are not thread safe, but as long as all +\&\fB\s-1EVP_PKEY_ASN1_METHOD\s0\fR objects are added before the application gets +threaded, using them is safe. See \fBEVP_PKEY_asn1_add0\fR\|(3). +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBEVP_PKEY_asn1_count()\fR returns the number of available public key methods. +.PP +\&\fBEVP_PKEY_asn1_get0()\fR return a public key method or \fB\s-1NULL\s0\fR if \fBidx\fR is +out of range. +.PP +\&\fBEVP_PKEY_asn1_get0_info()\fR returns 0 on failure, 1 on success. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBEVP_PKEY_asn1_new\fR\|(3), \fBEVP_PKEY_asn1_add0\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_cmp.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_cmp.3 new file mode 100644 index 00000000..05a5601c --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_cmp.3 @@ -0,0 +1,203 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EVP_PKEY_CMP 3" +.TH EVP_PKEY_CMP 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EVP_PKEY_copy_parameters, EVP_PKEY_missing_parameters, EVP_PKEY_cmp_parameters, EVP_PKEY_cmp \- public key parameter and comparison functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int EVP_PKEY_missing_parameters(const EVP_PKEY *pkey); +\& int EVP_PKEY_copy_parameters(EVP_PKEY *to, const EVP_PKEY *from); +\& +\& int EVP_PKEY_cmp_parameters(const EVP_PKEY *a, const EVP_PKEY *b); +\& int EVP_PKEY_cmp(const EVP_PKEY *a, const EVP_PKEY *b); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The function \fBEVP_PKEY_missing_parameters()\fR returns 1 if the public key +parameters of \fBpkey\fR are missing and 0 if they are present or the algorithm +doesn't use parameters. +.PP +The function \fBEVP_PKEY_copy_parameters()\fR copies the parameters from key +\&\fBfrom\fR to key \fBto\fR. An error is returned if the parameters are missing in +\&\fBfrom\fR or present in both \fBfrom\fR and \fBto\fR and mismatch. If the parameters +in \fBfrom\fR and \fBto\fR are both present and match this function has no effect. +.PP +The function \fBEVP_PKEY_cmp_parameters()\fR compares the parameters of keys +\&\fBa\fR and \fBb\fR. +.PP +The function \fBEVP_PKEY_cmp()\fR compares the public key components and parameters +(if present) of keys \fBa\fR and \fBb\fR. +.SH "NOTES" +.IX Header "NOTES" +The main purpose of the functions \fBEVP_PKEY_missing_parameters()\fR and +\&\fBEVP_PKEY_copy_parameters()\fR is to handle public keys in certificates where the +parameters are sometimes omitted from a public key if they are inherited from +the \s-1CA\s0 that signed it. +.PP +Since OpenSSL private keys contain public key components too the function +\&\fBEVP_PKEY_cmp()\fR can also be used to determine if a private key matches +a public key. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +The function \fBEVP_PKEY_missing_parameters()\fR returns 1 if the public key +parameters of \fBpkey\fR are missing and 0 if they are present or the algorithm +doesn't use parameters. +.PP +These functions \fBEVP_PKEY_copy_parameters()\fR returns 1 for success and 0 for +failure. +.PP +The function \fBEVP_PKEY_cmp_parameters()\fR and \fBEVP_PKEY_cmp()\fR return 1 if the +keys match, 0 if they don't match, \-1 if the key types are different and +\&\-2 if the operation is not supported. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBEVP_PKEY_CTX_new\fR\|(3), +\&\fBEVP_PKEY_keygen\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2006\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_decrypt.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_decrypt.3 new file mode 100644 index 00000000..4c0e322e --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_decrypt.3 @@ -0,0 +1,236 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EVP_PKEY_DECRYPT 3" +.TH EVP_PKEY_DECRYPT 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EVP_PKEY_decrypt_init, EVP_PKEY_decrypt \- decrypt using a public key algorithm +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int EVP_PKEY_decrypt_init(EVP_PKEY_CTX *ctx); +\& int EVP_PKEY_decrypt(EVP_PKEY_CTX *ctx, +\& unsigned char *out, size_t *outlen, +\& const unsigned char *in, size_t inlen); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fBEVP_PKEY_decrypt_init()\fR function initializes a public key algorithm +context using key \fBpkey\fR for a decryption operation. +.PP +The \fBEVP_PKEY_decrypt()\fR function performs a public key decryption operation +using \fBctx\fR. The data to be decrypted is specified using the \fBin\fR and +\&\fBinlen\fR parameters. If \fBout\fR is \fB\s-1NULL\s0\fR then the maximum size of the output +buffer is written to the \fBoutlen\fR parameter. If \fBout\fR is not \fB\s-1NULL\s0\fR then +before the call the \fBoutlen\fR parameter should contain the length of the +\&\fBout\fR buffer, if the call is successful the decrypted data is written to +\&\fBout\fR and the amount of data written to \fBoutlen\fR. +.SH "NOTES" +.IX Header "NOTES" +After the call to \fBEVP_PKEY_decrypt_init()\fR algorithm specific control +operations can be performed to set any appropriate parameters for the +operation. +.PP +The function \fBEVP_PKEY_decrypt()\fR can be called more than once on the same +context if several operations are performed using the same parameters. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBEVP_PKEY_decrypt_init()\fR and \fBEVP_PKEY_decrypt()\fR return 1 for success and 0 +or a negative value for failure. In particular a return value of \-2 +indicates the operation is not supported by the public key algorithm. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +Decrypt data using \s-1OAEP\s0 (for \s-1RSA\s0 keys): +.PP +.Vb 2 +\& #include +\& #include +\& +\& EVP_PKEY_CTX *ctx; +\& ENGINE *eng; +\& unsigned char *out, *in; +\& size_t outlen, inlen; +\& EVP_PKEY *key; +\& +\& /* +\& * NB: assumes key, eng, in, inlen are already set up +\& * and that key is an RSA private key +\& */ +\& ctx = EVP_PKEY_CTX_new(key, eng); +\& if (!ctx) +\& /* Error occurred */ +\& if (EVP_PKEY_decrypt_init(ctx) <= 0) +\& /* Error */ +\& if (EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_OAEP_PADDING) <= 0) +\& /* Error */ +\& +\& /* Determine buffer length */ +\& if (EVP_PKEY_decrypt(ctx, NULL, &outlen, in, inlen) <= 0) +\& /* Error */ +\& +\& out = OPENSSL_malloc(outlen); +\& +\& if (!out) +\& /* malloc failure */ +\& +\& if (EVP_PKEY_decrypt(ctx, out, &outlen, in, inlen) <= 0) +\& /* Error */ +\& +\& /* Decrypted data is outlen bytes written to buffer out */ +.Ve +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBEVP_PKEY_CTX_new\fR\|(3), +\&\fBEVP_PKEY_encrypt\fR\|(3), +\&\fBEVP_PKEY_sign\fR\|(3), +\&\fBEVP_PKEY_verify\fR\|(3), +\&\fBEVP_PKEY_verify_recover\fR\|(3), +\&\fBEVP_PKEY_derive\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +These functions were added in OpenSSL 1.0.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2006\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_derive.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_derive.3 new file mode 100644 index 00000000..334b4f5f --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_derive.3 @@ -0,0 +1,234 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EVP_PKEY_DERIVE 3" +.TH EVP_PKEY_DERIVE 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EVP_PKEY_derive_init, EVP_PKEY_derive_set_peer, EVP_PKEY_derive \- derive public key algorithm shared secret +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int EVP_PKEY_derive_init(EVP_PKEY_CTX *ctx); +\& int EVP_PKEY_derive_set_peer(EVP_PKEY_CTX *ctx, EVP_PKEY *peer); +\& int EVP_PKEY_derive(EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fBEVP_PKEY_derive_init()\fR function initializes a public key algorithm +context using key \fBpkey\fR for shared secret derivation. +.PP +The \fBEVP_PKEY_derive_set_peer()\fR function sets the peer key: this will normally +be a public key. +.PP +The \fBEVP_PKEY_derive()\fR derives a shared secret using \fBctx\fR. +If \fBkey\fR is \fB\s-1NULL\s0\fR then the maximum size of the output buffer is written to +the \fBkeylen\fR parameter. If \fBkey\fR is not \fB\s-1NULL\s0\fR then before the call the +\&\fBkeylen\fR parameter should contain the length of the \fBkey\fR buffer, if the call +is successful the shared secret is written to \fBkey\fR and the amount of data +written to \fBkeylen\fR. +.SH "NOTES" +.IX Header "NOTES" +After the call to \fBEVP_PKEY_derive_init()\fR algorithm specific control +operations can be performed to set any appropriate parameters for the +operation. +.PP +The function \fBEVP_PKEY_derive()\fR can be called more than once on the same +context if several operations are performed using the same parameters. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBEVP_PKEY_derive_init()\fR and \fBEVP_PKEY_derive()\fR return 1 for success and 0 +or a negative value for failure. In particular a return value of \-2 +indicates the operation is not supported by the public key algorithm. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +Derive shared secret (for example \s-1DH\s0 or \s-1EC\s0 keys): +.PP +.Vb 2 +\& #include +\& #include +\& +\& EVP_PKEY_CTX *ctx; +\& ENGINE *eng; +\& unsigned char *skey; +\& size_t skeylen; +\& EVP_PKEY *pkey, *peerkey; +\& /* NB: assumes pkey, eng, peerkey have been already set up */ +\& +\& ctx = EVP_PKEY_CTX_new(pkey, eng); +\& if (!ctx) +\& /* Error occurred */ +\& if (EVP_PKEY_derive_init(ctx) <= 0) +\& /* Error */ +\& if (EVP_PKEY_derive_set_peer(ctx, peerkey) <= 0) +\& /* Error */ +\& +\& /* Determine buffer length */ +\& if (EVP_PKEY_derive(ctx, NULL, &skeylen) <= 0) +\& /* Error */ +\& +\& skey = OPENSSL_malloc(skeylen); +\& +\& if (!skey) +\& /* malloc failure */ +\& +\& if (EVP_PKEY_derive(ctx, skey, &skeylen) <= 0) +\& /* Error */ +\& +\& /* Shared secret is skey bytes written to buffer skey */ +.Ve +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBEVP_PKEY_CTX_new\fR\|(3), +\&\fBEVP_PKEY_encrypt\fR\|(3), +\&\fBEVP_PKEY_decrypt\fR\|(3), +\&\fBEVP_PKEY_sign\fR\|(3), +\&\fBEVP_PKEY_verify\fR\|(3), +\&\fBEVP_PKEY_verify_recover\fR\|(3), +.SH "HISTORY" +.IX Header "HISTORY" +These functions were added in OpenSSL 1.0.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2006\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_encrypt.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_encrypt.3 new file mode 100644 index 00000000..3989dd05 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_encrypt.3 @@ -0,0 +1,241 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EVP_PKEY_ENCRYPT 3" +.TH EVP_PKEY_ENCRYPT 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EVP_PKEY_encrypt_init, EVP_PKEY_encrypt \- encrypt using a public key algorithm +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int EVP_PKEY_encrypt_init(EVP_PKEY_CTX *ctx); +\& int EVP_PKEY_encrypt(EVP_PKEY_CTX *ctx, +\& unsigned char *out, size_t *outlen, +\& const unsigned char *in, size_t inlen); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fBEVP_PKEY_encrypt_init()\fR function initializes a public key algorithm +context using key \fBpkey\fR for an encryption operation. +.PP +The \fBEVP_PKEY_encrypt()\fR function performs a public key encryption operation +using \fBctx\fR. The data to be encrypted is specified using the \fBin\fR and +\&\fBinlen\fR parameters. If \fBout\fR is \fB\s-1NULL\s0\fR then the maximum size of the output +buffer is written to the \fBoutlen\fR parameter. If \fBout\fR is not \fB\s-1NULL\s0\fR then +before the call the \fBoutlen\fR parameter should contain the length of the +\&\fBout\fR buffer, if the call is successful the encrypted data is written to +\&\fBout\fR and the amount of data written to \fBoutlen\fR. +.SH "NOTES" +.IX Header "NOTES" +After the call to \fBEVP_PKEY_encrypt_init()\fR algorithm specific control +operations can be performed to set any appropriate parameters for the +operation. +.PP +The function \fBEVP_PKEY_encrypt()\fR can be called more than once on the same +context if several operations are performed using the same parameters. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBEVP_PKEY_encrypt_init()\fR and \fBEVP_PKEY_encrypt()\fR return 1 for success and 0 +or a negative value for failure. In particular a return value of \-2 +indicates the operation is not supported by the public key algorithm. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +Encrypt data using \s-1OAEP\s0 (for \s-1RSA\s0 keys). See also \fBPEM_read_PUBKEY\fR\|(3) or +\&\fBd2i_X509\fR\|(3) for means to load a public key. You may also simply +set 'eng = \s-1NULL\s0;' to start with the default OpenSSL \s-1RSA\s0 implementation: +.PP +.Vb 3 +\& #include +\& #include +\& #include +\& +\& EVP_PKEY_CTX *ctx; +\& ENGINE *eng; +\& unsigned char *out, *in; +\& size_t outlen, inlen; +\& EVP_PKEY *key; +\& +\& /* +\& * NB: assumes eng, key, in, inlen are already set up, +\& * and that key is an RSA public key +\& */ +\& ctx = EVP_PKEY_CTX_new(key, eng); +\& if (!ctx) +\& /* Error occurred */ +\& if (EVP_PKEY_encrypt_init(ctx) <= 0) +\& /* Error */ +\& if (EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_OAEP_PADDING) <= 0) +\& /* Error */ +\& +\& /* Determine buffer length */ +\& if (EVP_PKEY_encrypt(ctx, NULL, &outlen, in, inlen) <= 0) +\& /* Error */ +\& +\& out = OPENSSL_malloc(outlen); +\& +\& if (!out) +\& /* malloc failure */ +\& +\& if (EVP_PKEY_encrypt(ctx, out, &outlen, in, inlen) <= 0) +\& /* Error */ +\& +\& /* Encrypted data is outlen bytes written to buffer out */ +.Ve +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBd2i_X509\fR\|(3), +\&\fBENGINE_by_id\fR\|(3), +\&\fBEVP_PKEY_CTX_new\fR\|(3), +\&\fBEVP_PKEY_decrypt\fR\|(3), +\&\fBEVP_PKEY_sign\fR\|(3), +\&\fBEVP_PKEY_verify\fR\|(3), +\&\fBEVP_PKEY_verify_recover\fR\|(3), +\&\fBEVP_PKEY_derive\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +These functions were added in OpenSSL 1.0.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2006\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_get_default_digest_nid.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_get_default_digest_nid.3 new file mode 100644 index 00000000..192fdfc4 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_get_default_digest_nid.3 @@ -0,0 +1,181 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EVP_PKEY_GET_DEFAULT_DIGEST_NID 3" +.TH EVP_PKEY_GET_DEFAULT_DIGEST_NID 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EVP_PKEY_get_default_digest_nid \- get default signature digest +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 2 +\& #include +\& int EVP_PKEY_get_default_digest_nid(EVP_PKEY *pkey, int *pnid); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fBEVP_PKEY_get_default_digest_nid()\fR function sets \fBpnid\fR to the default +message digest \s-1NID\s0 for the public key signature operations associated with key +\&\fBpkey\fR. Note that some signature algorithms (i.e. Ed25519 and Ed448) do not use +a digest during signing. In this case \fBpnid\fR will be set to NID_undef. +.SH "NOTES" +.IX Header "NOTES" +For all current standard OpenSSL public key algorithms \s-1SHA1\s0 is returned. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +The \fBEVP_PKEY_get_default_digest_nid()\fR function returns 1 if the message digest +is advisory (that is other digests can be used) and 2 if it is mandatory (other +digests can not be used). It returns 0 or a negative value for failure. In +particular a return value of \-2 indicates the operation is not supported by the +public key algorithm. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBEVP_PKEY_CTX_new\fR\|(3), +\&\fBEVP_PKEY_sign\fR\|(3), +\&\fBEVP_PKEY_verify\fR\|(3), +\&\fBEVP_PKEY_verify_recover\fR\|(3), +.SH "HISTORY" +.IX Header "HISTORY" +This function was added in OpenSSL 1.0.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2006\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_keygen.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_keygen.3 new file mode 100644 index 00000000..bfc30e78 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_keygen.3 @@ -0,0 +1,335 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EVP_PKEY_KEYGEN 3" +.TH EVP_PKEY_KEYGEN 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EVP_PKEY_keygen_init, EVP_PKEY_keygen, EVP_PKEY_paramgen_init, EVP_PKEY_paramgen, EVP_PKEY_CTX_set_cb, EVP_PKEY_CTX_get_cb, EVP_PKEY_CTX_get_keygen_info, EVP_PKEY_CTX_set_app_data, EVP_PKEY_CTX_get_app_data, EVP_PKEY_gen_cb, EVP_PKEY_check, EVP_PKEY_public_check, EVP_PKEY_param_check \&\- key and parameter generation and check functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int EVP_PKEY_keygen_init(EVP_PKEY_CTX *ctx); +\& int EVP_PKEY_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey); +\& int EVP_PKEY_paramgen_init(EVP_PKEY_CTX *ctx); +\& int EVP_PKEY_paramgen(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey); +\& +\& typedef int EVP_PKEY_gen_cb(EVP_PKEY_CTX *ctx); +\& +\& void EVP_PKEY_CTX_set_cb(EVP_PKEY_CTX *ctx, EVP_PKEY_gen_cb *cb); +\& EVP_PKEY_gen_cb *EVP_PKEY_CTX_get_cb(EVP_PKEY_CTX *ctx); +\& +\& int EVP_PKEY_CTX_get_keygen_info(EVP_PKEY_CTX *ctx, int idx); +\& +\& void EVP_PKEY_CTX_set_app_data(EVP_PKEY_CTX *ctx, void *data); +\& void *EVP_PKEY_CTX_get_app_data(EVP_PKEY_CTX *ctx); +\& +\& int EVP_PKEY_check(EVP_PKEY_CTX *ctx); +\& int EVP_PKEY_public_check(EVP_PKEY_CTX *ctx); +\& int EVP_PKEY_param_check(EVP_PKEY_CTX *ctx); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fBEVP_PKEY_keygen_init()\fR function initializes a public key algorithm +context using key \fBpkey\fR for a key generation operation. +.PP +The \fBEVP_PKEY_keygen()\fR function performs a key generation operation, the +generated key is written to \fBppkey\fR. +.PP +The functions \fBEVP_PKEY_paramgen_init()\fR and \fBEVP_PKEY_paramgen()\fR are similar +except parameters are generated. +.PP +The function \fBEVP_PKEY_set_cb()\fR sets the key or parameter generation callback +to \fBcb\fR. The function \fBEVP_PKEY_CTX_get_cb()\fR returns the key or parameter +generation callback. +.PP +The function \fBEVP_PKEY_CTX_get_keygen_info()\fR returns parameters associated +with the generation operation. If \fBidx\fR is \-1 the total number of +parameters available is returned. Any non negative value returns the value of +that parameter. \fBEVP_PKEY_CTX_gen_keygen_info()\fR with a non-negative value for +\&\fBidx\fR should only be called within the generation callback. +.PP +If the callback returns 0 then the key generation operation is aborted and an +error occurs. This might occur during a time consuming operation where +a user clicks on a \*(L"cancel\*(R" button. +.PP +The functions \fBEVP_PKEY_CTX_set_app_data()\fR and \fBEVP_PKEY_CTX_get_app_data()\fR set +and retrieve an opaque pointer. This can be used to set some application +defined value which can be retrieved in the callback: for example a handle +which is used to update a \*(L"progress dialog\*(R". +.PP +\&\fBEVP_PKEY_check()\fR validates the key-pair given by \fBctx\fR. This function first tries +to use customized key check method in \fB\s-1EVP_PKEY_METHOD\s0\fR if it's present; otherwise +it calls a default one defined in \fB\s-1EVP_PKEY_ASN1_METHOD\s0\fR. +.PP +\&\fBEVP_PKEY_public_check()\fR validates the public component of the key-pair given by \fBctx\fR. +This function first tries to use customized key check method in \fB\s-1EVP_PKEY_METHOD\s0\fR +if it's present; otherwise it calls a default one defined in \fB\s-1EVP_PKEY_ASN1_METHOD\s0\fR. +.PP +\&\fBEVP_PKEY_param_check()\fR validates the algorithm parameters of the key-pair given by \fBctx\fR. +This function first tries to use customized key check method in \fB\s-1EVP_PKEY_METHOD\s0\fR +if it's present; otherwise it calls a default one defined in \fB\s-1EVP_PKEY_ASN1_METHOD\s0\fR. +.SH "NOTES" +.IX Header "NOTES" +After the call to \fBEVP_PKEY_keygen_init()\fR or \fBEVP_PKEY_paramgen_init()\fR algorithm +specific control operations can be performed to set any appropriate parameters +for the operation. +.PP +The functions \fBEVP_PKEY_keygen()\fR and \fBEVP_PKEY_paramgen()\fR can be called more than +once on the same context if several operations are performed using the same +parameters. +.PP +The meaning of the parameters passed to the callback will depend on the +algorithm and the specific implementation of the algorithm. Some might not +give any useful information at all during key or parameter generation. Others +might not even call the callback. +.PP +The operation performed by key or parameter generation depends on the algorithm +used. In some cases (e.g. \s-1EC\s0 with a supplied named curve) the \*(L"generation\*(R" +option merely sets the appropriate fields in an \s-1EVP_PKEY\s0 structure. +.PP +In OpenSSL an \s-1EVP_PKEY\s0 structure containing a private key also contains the +public key components and parameters (if any). An OpenSSL private key is +equivalent to what some libraries call a \*(L"key pair\*(R". A private key can be used +in functions which require the use of a public key or parameters. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBEVP_PKEY_keygen_init()\fR, \fBEVP_PKEY_paramgen_init()\fR, \fBEVP_PKEY_keygen()\fR and +\&\fBEVP_PKEY_paramgen()\fR return 1 for success and 0 or a negative value for failure. +In particular a return value of \-2 indicates the operation is not supported by +the public key algorithm. +.PP +\&\fBEVP_PKEY_check()\fR, \fBEVP_PKEY_public_check()\fR and \fBEVP_PKEY_param_check()\fR return 1 +for success or others for failure. They return \-2 if the operation is not supported +for the specific algorithm. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +Generate a 2048 bit \s-1RSA\s0 key: +.PP +.Vb 2 +\& #include +\& #include +\& +\& EVP_PKEY_CTX *ctx; +\& EVP_PKEY *pkey = NULL; +\& +\& ctx = EVP_PKEY_CTX_new_id(EVP_PKEY_RSA, NULL); +\& if (!ctx) +\& /* Error occurred */ +\& if (EVP_PKEY_keygen_init(ctx) <= 0) +\& /* Error */ +\& if (EVP_PKEY_CTX_set_rsa_keygen_bits(ctx, 2048) <= 0) +\& /* Error */ +\& +\& /* Generate key */ +\& if (EVP_PKEY_keygen(ctx, &pkey) <= 0) +\& /* Error */ +.Ve +.PP +Generate a key from a set of parameters: +.PP +.Vb 2 +\& #include +\& #include +\& +\& EVP_PKEY_CTX *ctx; +\& ENGINE *eng; +\& EVP_PKEY *pkey = NULL, *param; +\& +\& /* Assumed param, eng are set up already */ +\& ctx = EVP_PKEY_CTX_new(param, eng); +\& if (!ctx) +\& /* Error occurred */ +\& if (EVP_PKEY_keygen_init(ctx) <= 0) +\& /* Error */ +\& +\& /* Generate key */ +\& if (EVP_PKEY_keygen(ctx, &pkey) <= 0) +\& /* Error */ +.Ve +.PP +Example of generation callback for OpenSSL public key implementations: +.PP +.Vb 1 +\& /* Application data is a BIO to output status to */ +\& +\& EVP_PKEY_CTX_set_app_data(ctx, status_bio); +\& +\& static int genpkey_cb(EVP_PKEY_CTX *ctx) +\& { +\& char c = \*(Aq*\*(Aq; +\& BIO *b = EVP_PKEY_CTX_get_app_data(ctx); +\& int p = EVP_PKEY_CTX_get_keygen_info(ctx, 0); +\& +\& if (p == 0) +\& c = \*(Aq.\*(Aq; +\& if (p == 1) +\& c = \*(Aq+\*(Aq; +\& if (p == 2) +\& c = \*(Aq*\*(Aq; +\& if (p == 3) +\& c = \*(Aq\en\*(Aq; +\& BIO_write(b, &c, 1); +\& (void)BIO_flush(b); +\& return 1; +\& } +.Ve +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBEVP_PKEY_CTX_new\fR\|(3), +\&\fBEVP_PKEY_encrypt\fR\|(3), +\&\fBEVP_PKEY_decrypt\fR\|(3), +\&\fBEVP_PKEY_sign\fR\|(3), +\&\fBEVP_PKEY_verify\fR\|(3), +\&\fBEVP_PKEY_verify_recover\fR\|(3), +\&\fBEVP_PKEY_derive\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +These functions were added in OpenSSL 1.0.0. +.PP +\&\fBEVP_PKEY_check()\fR, \fBEVP_PKEY_public_check()\fR and \fBEVP_PKEY_param_check()\fR were added +in OpenSSL 1.1.1. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2006\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_meth_get_count.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_meth_get_count.3 new file mode 100644 index 00000000..d814b2e6 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_meth_get_count.3 @@ -0,0 +1,182 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EVP_PKEY_METH_GET_COUNT 3" +.TH EVP_PKEY_METH_GET_COUNT 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EVP_PKEY_meth_get_count, EVP_PKEY_meth_get0, EVP_PKEY_meth_get0_info \- enumerate public key methods +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& size_t EVP_PKEY_meth_get_count(void); +\& const EVP_PKEY_METHOD *EVP_PKEY_meth_get0(size_t idx); +\& void EVP_PKEY_meth_get0_info(int *ppkey_id, int *pflags, +\& const EVP_PKEY_METHOD *meth); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBEVP_PKEY_meth_count()\fR returns a count of the number of public key methods +available: it includes standard methods and any methods added by the +application. +.PP +\&\fBEVP_PKEY_meth_get0()\fR returns the public key method \fBidx\fR. The value of \fBidx\fR +must be between zero and \fBEVP_PKEY_meth_get_count()\fR \- 1. +.PP +\&\fBEVP_PKEY_meth_get0_info()\fR returns the public key \s-1ID\s0 (a \s-1NID\s0) and any flags +associated with the public key method \fB*meth\fR. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBEVP_PKEY_meth_count()\fR returns the number of available public key methods. +.PP +\&\fBEVP_PKEY_meth_get0()\fR return a public key method or \fB\s-1NULL\s0\fR if \fBidx\fR is +out of range. +.PP +\&\fBEVP_PKEY_meth_get0_info()\fR does not return a value. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBEVP_PKEY_new\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2002\-2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_meth_new.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_meth_new.3 new file mode 100644 index 00000000..fd9daff1 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_meth_new.3 @@ -0,0 +1,594 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EVP_PKEY_METH_NEW 3" +.TH EVP_PKEY_METH_NEW 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EVP_PKEY_meth_new, EVP_PKEY_meth_free, EVP_PKEY_meth_copy, EVP_PKEY_meth_find, EVP_PKEY_meth_add0, EVP_PKEY_METHOD, EVP_PKEY_meth_set_init, EVP_PKEY_meth_set_copy, EVP_PKEY_meth_set_cleanup, EVP_PKEY_meth_set_paramgen, EVP_PKEY_meth_set_keygen, EVP_PKEY_meth_set_sign, EVP_PKEY_meth_set_verify, EVP_PKEY_meth_set_verify_recover, EVP_PKEY_meth_set_signctx, EVP_PKEY_meth_set_verifyctx, EVP_PKEY_meth_set_encrypt, EVP_PKEY_meth_set_decrypt, EVP_PKEY_meth_set_derive, EVP_PKEY_meth_set_ctrl, EVP_PKEY_meth_set_digestsign, EVP_PKEY_meth_set_digestverify, EVP_PKEY_meth_set_check, EVP_PKEY_meth_set_public_check, EVP_PKEY_meth_set_param_check, EVP_PKEY_meth_set_digest_custom, EVP_PKEY_meth_get_init, EVP_PKEY_meth_get_copy, EVP_PKEY_meth_get_cleanup, EVP_PKEY_meth_get_paramgen, EVP_PKEY_meth_get_keygen, EVP_PKEY_meth_get_sign, EVP_PKEY_meth_get_verify, EVP_PKEY_meth_get_verify_recover, EVP_PKEY_meth_get_signctx, EVP_PKEY_meth_get_verifyctx, EVP_PKEY_meth_get_encrypt, EVP_PKEY_meth_get_decrypt, EVP_PKEY_meth_get_derive, EVP_PKEY_meth_get_ctrl, EVP_PKEY_meth_get_digestsign, EVP_PKEY_meth_get_digestverify, EVP_PKEY_meth_get_check, EVP_PKEY_meth_get_public_check, EVP_PKEY_meth_get_param_check, EVP_PKEY_meth_get_digest_custom, EVP_PKEY_meth_remove \&\- manipulating EVP_PKEY_METHOD structure +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& typedef struct evp_pkey_method_st EVP_PKEY_METHOD; +\& +\& EVP_PKEY_METHOD *EVP_PKEY_meth_new(int id, int flags); +\& void EVP_PKEY_meth_free(EVP_PKEY_METHOD *pmeth); +\& void EVP_PKEY_meth_copy(EVP_PKEY_METHOD *dst, const EVP_PKEY_METHOD *src); +\& const EVP_PKEY_METHOD *EVP_PKEY_meth_find(int type); +\& int EVP_PKEY_meth_add0(const EVP_PKEY_METHOD *pmeth); +\& int EVP_PKEY_meth_remove(const EVP_PKEY_METHOD *pmeth); +\& +\& void EVP_PKEY_meth_set_init(EVP_PKEY_METHOD *pmeth, +\& int (*init) (EVP_PKEY_CTX *ctx)); +\& void EVP_PKEY_meth_set_copy(EVP_PKEY_METHOD *pmeth, +\& int (*copy) (EVP_PKEY_CTX *dst, +\& EVP_PKEY_CTX *src)); +\& void EVP_PKEY_meth_set_cleanup(EVP_PKEY_METHOD *pmeth, +\& void (*cleanup) (EVP_PKEY_CTX *ctx)); +\& void EVP_PKEY_meth_set_paramgen(EVP_PKEY_METHOD *pmeth, +\& int (*paramgen_init) (EVP_PKEY_CTX *ctx), +\& int (*paramgen) (EVP_PKEY_CTX *ctx, +\& EVP_PKEY *pkey)); +\& void EVP_PKEY_meth_set_keygen(EVP_PKEY_METHOD *pmeth, +\& int (*keygen_init) (EVP_PKEY_CTX *ctx), +\& int (*keygen) (EVP_PKEY_CTX *ctx, +\& EVP_PKEY *pkey)); +\& void EVP_PKEY_meth_set_sign(EVP_PKEY_METHOD *pmeth, +\& int (*sign_init) (EVP_PKEY_CTX *ctx), +\& int (*sign) (EVP_PKEY_CTX *ctx, +\& unsigned char *sig, size_t *siglen, +\& const unsigned char *tbs, +\& size_t tbslen)); +\& void EVP_PKEY_meth_set_verify(EVP_PKEY_METHOD *pmeth, +\& int (*verify_init) (EVP_PKEY_CTX *ctx), +\& int (*verify) (EVP_PKEY_CTX *ctx, +\& const unsigned char *sig, +\& size_t siglen, +\& const unsigned char *tbs, +\& size_t tbslen)); +\& void EVP_PKEY_meth_set_verify_recover(EVP_PKEY_METHOD *pmeth, +\& int (*verify_recover_init) (EVP_PKEY_CTX +\& *ctx), +\& int (*verify_recover) (EVP_PKEY_CTX +\& *ctx, +\& unsigned char +\& *sig, +\& size_t *siglen, +\& const unsigned +\& char *tbs, +\& size_t tbslen)); +\& void EVP_PKEY_meth_set_signctx(EVP_PKEY_METHOD *pmeth, +\& int (*signctx_init) (EVP_PKEY_CTX *ctx, +\& EVP_MD_CTX *mctx), +\& int (*signctx) (EVP_PKEY_CTX *ctx, +\& unsigned char *sig, +\& size_t *siglen, +\& EVP_MD_CTX *mctx)); +\& void EVP_PKEY_meth_set_verifyctx(EVP_PKEY_METHOD *pmeth, +\& int (*verifyctx_init) (EVP_PKEY_CTX *ctx, +\& EVP_MD_CTX *mctx), +\& int (*verifyctx) (EVP_PKEY_CTX *ctx, +\& const unsigned char *sig, +\& int siglen, +\& EVP_MD_CTX *mctx)); +\& void EVP_PKEY_meth_set_encrypt(EVP_PKEY_METHOD *pmeth, +\& int (*encrypt_init) (EVP_PKEY_CTX *ctx), +\& int (*encryptfn) (EVP_PKEY_CTX *ctx, +\& unsigned char *out, +\& size_t *outlen, +\& const unsigned char *in, +\& size_t inlen)); +\& void EVP_PKEY_meth_set_decrypt(EVP_PKEY_METHOD *pmeth, +\& int (*decrypt_init) (EVP_PKEY_CTX *ctx), +\& int (*decrypt) (EVP_PKEY_CTX *ctx, +\& unsigned char *out, +\& size_t *outlen, +\& const unsigned char *in, +\& size_t inlen)); +\& void EVP_PKEY_meth_set_derive(EVP_PKEY_METHOD *pmeth, +\& int (*derive_init) (EVP_PKEY_CTX *ctx), +\& int (*derive) (EVP_PKEY_CTX *ctx, +\& unsigned char *key, +\& size_t *keylen)); +\& void EVP_PKEY_meth_set_ctrl(EVP_PKEY_METHOD *pmeth, +\& int (*ctrl) (EVP_PKEY_CTX *ctx, int type, int p1, +\& void *p2), +\& int (*ctrl_str) (EVP_PKEY_CTX *ctx, +\& const char *type, +\& const char *value)); +\& void EVP_PKEY_meth_set_digestsign(EVP_PKEY_METHOD *pmeth, +\& int (*digestsign) (EVP_MD_CTX *ctx, +\& unsigned char *sig, +\& size_t *siglen, +\& const unsigned char *tbs, +\& size_t tbslen)); +\& void EVP_PKEY_meth_set_digestverify(EVP_PKEY_METHOD *pmeth, +\& int (*digestverify) (EVP_MD_CTX *ctx, +\& const unsigned char *sig, +\& size_t siglen, +\& const unsigned char *tbs, +\& size_t tbslen)); +\& void EVP_PKEY_meth_set_check(EVP_PKEY_METHOD *pmeth, +\& int (*check) (EVP_PKEY *pkey)); +\& void EVP_PKEY_meth_set_public_check(EVP_PKEY_METHOD *pmeth, +\& int (*check) (EVP_PKEY *pkey)); +\& void EVP_PKEY_meth_set_param_check(EVP_PKEY_METHOD *pmeth, +\& int (*check) (EVP_PKEY *pkey)); +\& void EVP_PKEY_meth_set_digest_custom(EVP_PKEY_METHOD *pmeth, +\& int (*digest_custom) (EVP_PKEY_CTX *ctx, +\& EVP_MD_CTX *mctx)); +\& +\& void EVP_PKEY_meth_get_init(const EVP_PKEY_METHOD *pmeth, +\& int (**pinit) (EVP_PKEY_CTX *ctx)); +\& void EVP_PKEY_meth_get_copy(const EVP_PKEY_METHOD *pmeth, +\& int (**pcopy) (EVP_PKEY_CTX *dst, +\& EVP_PKEY_CTX *src)); +\& void EVP_PKEY_meth_get_cleanup(const EVP_PKEY_METHOD *pmeth, +\& void (**pcleanup) (EVP_PKEY_CTX *ctx)); +\& void EVP_PKEY_meth_get_paramgen(const EVP_PKEY_METHOD *pmeth, +\& int (**pparamgen_init) (EVP_PKEY_CTX *ctx), +\& int (**pparamgen) (EVP_PKEY_CTX *ctx, +\& EVP_PKEY *pkey)); +\& void EVP_PKEY_meth_get_keygen(const EVP_PKEY_METHOD *pmeth, +\& int (**pkeygen_init) (EVP_PKEY_CTX *ctx), +\& int (**pkeygen) (EVP_PKEY_CTX *ctx, +\& EVP_PKEY *pkey)); +\& void EVP_PKEY_meth_get_sign(const EVP_PKEY_METHOD *pmeth, +\& int (**psign_init) (EVP_PKEY_CTX *ctx), +\& int (**psign) (EVP_PKEY_CTX *ctx, +\& unsigned char *sig, size_t *siglen, +\& const unsigned char *tbs, +\& size_t tbslen)); +\& void EVP_PKEY_meth_get_verify(const EVP_PKEY_METHOD *pmeth, +\& int (**pverify_init) (EVP_PKEY_CTX *ctx), +\& int (**pverify) (EVP_PKEY_CTX *ctx, +\& const unsigned char *sig, +\& size_t siglen, +\& const unsigned char *tbs, +\& size_t tbslen)); +\& void EVP_PKEY_meth_get_verify_recover(const EVP_PKEY_METHOD *pmeth, +\& int (**pverify_recover_init) (EVP_PKEY_CTX +\& *ctx), +\& int (**pverify_recover) (EVP_PKEY_CTX +\& *ctx, +\& unsigned char +\& *sig, +\& size_t *siglen, +\& const unsigned +\& char *tbs, +\& size_t tbslen)); +\& void EVP_PKEY_meth_get_signctx(const EVP_PKEY_METHOD *pmeth, +\& int (**psignctx_init) (EVP_PKEY_CTX *ctx, +\& EVP_MD_CTX *mctx), +\& int (**psignctx) (EVP_PKEY_CTX *ctx, +\& unsigned char *sig, +\& size_t *siglen, +\& EVP_MD_CTX *mctx)); +\& void EVP_PKEY_meth_get_verifyctx(const EVP_PKEY_METHOD *pmeth, +\& int (**pverifyctx_init) (EVP_PKEY_CTX *ctx, +\& EVP_MD_CTX *mctx), +\& int (**pverifyctx) (EVP_PKEY_CTX *ctx, +\& const unsigned char *sig, +\& int siglen, +\& EVP_MD_CTX *mctx)); +\& void EVP_PKEY_meth_get_encrypt(const EVP_PKEY_METHOD *pmeth, +\& int (**pencrypt_init) (EVP_PKEY_CTX *ctx), +\& int (**pencryptfn) (EVP_PKEY_CTX *ctx, +\& unsigned char *out, +\& size_t *outlen, +\& const unsigned char *in, +\& size_t inlen)); +\& void EVP_PKEY_meth_get_decrypt(const EVP_PKEY_METHOD *pmeth, +\& int (**pdecrypt_init) (EVP_PKEY_CTX *ctx), +\& int (**pdecrypt) (EVP_PKEY_CTX *ctx, +\& unsigned char *out, +\& size_t *outlen, +\& const unsigned char *in, +\& size_t inlen)); +\& void EVP_PKEY_meth_get_derive(const EVP_PKEY_METHOD *pmeth, +\& int (**pderive_init) (EVP_PKEY_CTX *ctx), +\& int (**pderive) (EVP_PKEY_CTX *ctx, +\& unsigned char *key, +\& size_t *keylen)); +\& void EVP_PKEY_meth_get_ctrl(const EVP_PKEY_METHOD *pmeth, +\& int (**pctrl) (EVP_PKEY_CTX *ctx, int type, int p1, +\& void *p2), +\& int (**pctrl_str) (EVP_PKEY_CTX *ctx, +\& const char *type, +\& const char *value)); +\& void EVP_PKEY_meth_get_digestsign(EVP_PKEY_METHOD *pmeth, +\& int (**digestsign) (EVP_MD_CTX *ctx, +\& unsigned char *sig, +\& size_t *siglen, +\& const unsigned char *tbs, +\& size_t tbslen)); +\& void EVP_PKEY_meth_get_digestverify(EVP_PKEY_METHOD *pmeth, +\& int (**digestverify) (EVP_MD_CTX *ctx, +\& const unsigned char *sig, +\& size_t siglen, +\& const unsigned char *tbs, +\& size_t tbslen)); +\& void EVP_PKEY_meth_get_check(const EVP_PKEY_METHOD *pmeth, +\& int (**pcheck) (EVP_PKEY *pkey)); +\& void EVP_PKEY_meth_get_public_check(const EVP_PKEY_METHOD *pmeth, +\& int (**pcheck) (EVP_PKEY *pkey)); +\& void EVP_PKEY_meth_get_param_check(const EVP_PKEY_METHOD *pmeth, +\& int (**pcheck) (EVP_PKEY *pkey)); +\& void EVP_PKEY_meth_get_digest_custom(EVP_PKEY_METHOD *pmeth, +\& int (**pdigest_custom) (EVP_PKEY_CTX *ctx, +\& EVP_MD_CTX *mctx)); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fB\s-1EVP_PKEY_METHOD\s0\fR is a structure which holds a set of methods for a +specific public key cryptographic algorithm. Those methods are usually +used to perform different jobs, such as generating a key, signing or +verifying, encrypting or decrypting, etc. +.PP +There are two places where the \fB\s-1EVP_PKEY_METHOD\s0\fR objects are stored: one +is a built-in static array representing the standard methods for different +algorithms, and the other one is a stack of user-defined application-specific +methods, which can be manipulated by using \fBEVP_PKEY_meth_add0\fR\|(3). +.PP +The \fB\s-1EVP_PKEY_METHOD\s0\fR objects are usually referenced by \fB\s-1EVP_PKEY_CTX\s0\fR +objects. +.SS "Methods" +.IX Subsection "Methods" +The methods are the underlying implementations of a particular public key +algorithm present by the \fB\s-1EVP_PKEY_CTX\s0\fR object. +.PP +.Vb 3 +\& int (*init) (EVP_PKEY_CTX *ctx); +\& int (*copy) (EVP_PKEY_CTX *dst, EVP_PKEY_CTX *src); +\& void (*cleanup) (EVP_PKEY_CTX *ctx); +.Ve +.PP +The \fBinit()\fR method is called to initialize algorithm-specific data when a new +\&\fB\s-1EVP_PKEY_CTX\s0\fR is created. As opposed to \fBinit()\fR, the \fBcleanup()\fR method is called +when an \fB\s-1EVP_PKEY_CTX\s0\fR is freed. The \fBcopy()\fR method is called when an \fB\s-1EVP_PKEY_CTX\s0\fR +is being duplicated. Refer to \fBEVP_PKEY_CTX_new\fR\|(3), \fBEVP_PKEY_CTX_new_id\fR\|(3), +\&\fBEVP_PKEY_CTX_free\fR\|(3) and \fBEVP_PKEY_CTX_dup\fR\|(3). +.PP +.Vb 2 +\& int (*paramgen_init) (EVP_PKEY_CTX *ctx); +\& int (*paramgen) (EVP_PKEY_CTX *ctx, EVP_PKEY *pkey); +.Ve +.PP +The \fBparamgen_init()\fR and \fBparamgen()\fR methods deal with key parameter generation. +They are called by \fBEVP_PKEY_paramgen_init\fR\|(3) and \fBEVP_PKEY_paramgen\fR\|(3) to +handle the parameter generation process. +.PP +.Vb 2 +\& int (*keygen_init) (EVP_PKEY_CTX *ctx); +\& int (*keygen) (EVP_PKEY_CTX *ctx, EVP_PKEY *pkey); +.Ve +.PP +The \fBkeygen_init()\fR and \fBkeygen()\fR methods are used to generate the actual key for +the specified algorithm. They are called by \fBEVP_PKEY_keygen_init\fR\|(3) and +\&\fBEVP_PKEY_keygen\fR\|(3). +.PP +.Vb 3 +\& int (*sign_init) (EVP_PKEY_CTX *ctx); +\& int (*sign) (EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen, +\& const unsigned char *tbs, size_t tbslen); +.Ve +.PP +The \fBsign_init()\fR and \fBsign()\fR methods are used to generate the signature of a +piece of data using a private key. They are called by \fBEVP_PKEY_sign_init\fR\|(3) +and \fBEVP_PKEY_sign\fR\|(3). +.PP +.Vb 4 +\& int (*verify_init) (EVP_PKEY_CTX *ctx); +\& int (*verify) (EVP_PKEY_CTX *ctx, +\& const unsigned char *sig, size_t siglen, +\& const unsigned char *tbs, size_t tbslen); +.Ve +.PP +The \fBverify_init()\fR and \fBverify()\fR methods are used to verify whether a signature is +valid. They are called by \fBEVP_PKEY_verify_init\fR\|(3) and \fBEVP_PKEY_verify\fR\|(3). +.PP +.Vb 4 +\& int (*verify_recover_init) (EVP_PKEY_CTX *ctx); +\& int (*verify_recover) (EVP_PKEY_CTX *ctx, +\& unsigned char *rout, size_t *routlen, +\& const unsigned char *sig, size_t siglen); +.Ve +.PP +The \fBverify_recover_init()\fR and \fBverify_recover()\fR methods are used to verify a +signature and then recover the digest from the signature (for instance, a +signature that was generated by \s-1RSA\s0 signing algorithm). They are called by +\&\fBEVP_PKEY_verify_recover_init\fR\|(3) and \fBEVP_PKEY_verify_recover\fR\|(3). +.PP +.Vb 3 +\& int (*signctx_init) (EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx); +\& int (*signctx) (EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen, +\& EVP_MD_CTX *mctx); +.Ve +.PP +The \fBsignctx_init()\fR and \fBsignctx()\fR methods are used to sign a digest present by +a \fB\s-1EVP_MD_CTX\s0\fR object. They are called by the EVP_DigestSign functions. See +\&\fBEVP_DigestSignInit\fR\|(3) for details. +.PP +.Vb 3 +\& int (*verifyctx_init) (EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx); +\& int (*verifyctx) (EVP_PKEY_CTX *ctx, const unsigned char *sig, int siglen, +\& EVP_MD_CTX *mctx); +.Ve +.PP +The \fBverifyctx_init()\fR and \fBverifyctx()\fR methods are used to verify a signature +against the data in a \fB\s-1EVP_MD_CTX\s0\fR object. They are called by the various +EVP_DigestVerify functions. See \fBEVP_DigestVerifyInit\fR\|(3) for details. +.PP +.Vb 3 +\& int (*encrypt_init) (EVP_PKEY_CTX *ctx); +\& int (*encrypt) (EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen, +\& const unsigned char *in, size_t inlen); +.Ve +.PP +The \fBencrypt_init()\fR and \fBencrypt()\fR methods are used to encrypt a piece of data. +They are called by \fBEVP_PKEY_encrypt_init\fR\|(3) and \fBEVP_PKEY_encrypt\fR\|(3). +.PP +.Vb 3 +\& int (*decrypt_init) (EVP_PKEY_CTX *ctx); +\& int (*decrypt) (EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen, +\& const unsigned char *in, size_t inlen); +.Ve +.PP +The \fBdecrypt_init()\fR and \fBdecrypt()\fR methods are used to decrypt a piece of data. +They are called by \fBEVP_PKEY_decrypt_init\fR\|(3) and \fBEVP_PKEY_decrypt\fR\|(3). +.PP +.Vb 2 +\& int (*derive_init) (EVP_PKEY_CTX *ctx); +\& int (*derive) (EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen); +.Ve +.PP +The \fBderive_init()\fR and \fBderive()\fR methods are used to derive the shared secret +from a public key algorithm (for instance, the \s-1DH\s0 algorithm). They are called by +\&\fBEVP_PKEY_derive_init\fR\|(3) and \fBEVP_PKEY_derive\fR\|(3). +.PP +.Vb 2 +\& int (*ctrl) (EVP_PKEY_CTX *ctx, int type, int p1, void *p2); +\& int (*ctrl_str) (EVP_PKEY_CTX *ctx, const char *type, const char *value); +.Ve +.PP +The \fBctrl()\fR and \fBctrl_str()\fR methods are used to adjust algorithm-specific +settings. See \fBEVP_PKEY_CTX_ctrl\fR\|(3) and related functions for details. +.PP +.Vb 5 +\& int (*digestsign) (EVP_MD_CTX *ctx, unsigned char *sig, size_t *siglen, +\& const unsigned char *tbs, size_t tbslen); +\& int (*digestverify) (EVP_MD_CTX *ctx, const unsigned char *sig, +\& size_t siglen, const unsigned char *tbs, +\& size_t tbslen); +.Ve +.PP +The \fBdigestsign()\fR and \fBdigestverify()\fR methods are used to generate or verify +a signature in a one-shot mode. They could be called by \fBEVP_DigestSign\fR\|(3) +and \fBEVP_DigestVerify\fR\|(3). +.PP +.Vb 3 +\& int (*check) (EVP_PKEY *pkey); +\& int (*public_check) (EVP_PKEY *pkey); +\& int (*param_check) (EVP_PKEY *pkey); +.Ve +.PP +The \fBcheck()\fR, \fBpublic_check()\fR and \fBparam_check()\fR methods are used to validate a +key-pair, the public component and parameters respectively for a given \fBpkey\fR. +They could be called by \fBEVP_PKEY_check\fR\|(3), \fBEVP_PKEY_public_check\fR\|(3) and +\&\fBEVP_PKEY_param_check\fR\|(3) respectively. +.PP +.Vb 1 +\& int (*digest_custom) (EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx); +.Ve +.PP +The \fBdigest_custom()\fR method is used to generate customized digest content before +the real message is passed to functions like \fBEVP_DigestSignUpdate\fR\|(3) or +\&\fBEVP_DigestVerifyInit\fR\|(3). This is usually required by some public key +signature algorithms like \s-1SM2\s0 which requires a hashed prefix to the message to +be signed. The \fBdigest_custom()\fR function will be called by \fBEVP_DigestSignInit\fR\|(3) +and \fBEVP_DigestVerifyInit\fR\|(3). +.SS "Functions" +.IX Subsection "Functions" +\&\fBEVP_PKEY_meth_new()\fR creates and returns a new \fB\s-1EVP_PKEY_METHOD\s0\fR object, +and associates the given \fBid\fR and \fBflags\fR. The following flags are +supported: +.PP +.Vb 2 +\& EVP_PKEY_FLAG_AUTOARGLEN +\& EVP_PKEY_FLAG_SIGCTX_CUSTOM +.Ve +.PP +If an \fB\s-1EVP_PKEY_METHOD\s0\fR is set with the \fB\s-1EVP_PKEY_FLAG_AUTOARGLEN\s0\fR flag, the +maximum size of the output buffer will be automatically calculated or checked +in corresponding \s-1EVP\s0 methods by the \s-1EVP\s0 framework. Thus the implementations of +these methods don't need to care about handling the case of returning output +buffer size by themselves. For details on the output buffer size, refer to +\&\fBEVP_PKEY_sign\fR\|(3). +.PP +The \fB\s-1EVP_PKEY_FLAG_SIGCTX_CUSTOM\s0\fR is used to indicate the \fBsignctx()\fR method +of an \fB\s-1EVP_PKEY_METHOD\s0\fR is always called by the \s-1EVP\s0 framework while doing a +digest signing operation by calling \fBEVP_DigestSignFinal\fR\|(3). +.PP +\&\fBEVP_PKEY_meth_free()\fR frees an existing \fB\s-1EVP_PKEY_METHOD\s0\fR pointed by +\&\fBpmeth\fR. +.PP +\&\fBEVP_PKEY_meth_copy()\fR copies an \fB\s-1EVP_PKEY_METHOD\s0\fR object from \fBsrc\fR +to \fBdst\fR. +.PP +\&\fBEVP_PKEY_meth_find()\fR finds an \fB\s-1EVP_PKEY_METHOD\s0\fR object with the \fBid\fR. +This function first searches through the user-defined method objects and +then the built-in objects. +.PP +\&\fBEVP_PKEY_meth_add0()\fR adds \fBpmeth\fR to the user defined stack of methods. +.PP +\&\fBEVP_PKEY_meth_remove()\fR removes an \fB\s-1EVP_PKEY_METHOD\s0\fR object added by +\&\fBEVP_PKEY_meth_add0()\fR. +.PP +The EVP_PKEY_meth_set functions set the corresponding fields of +\&\fB\s-1EVP_PKEY_METHOD\s0\fR structure with the arguments passed. +.PP +The EVP_PKEY_meth_get functions get the corresponding fields of +\&\fB\s-1EVP_PKEY_METHOD\s0\fR structure to the arguments provided. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBEVP_PKEY_meth_new()\fR returns a pointer to a new \fB\s-1EVP_PKEY_METHOD\s0\fR +object or returns \s-1NULL\s0 on error. +.PP +\&\fBEVP_PKEY_meth_free()\fR and \fBEVP_PKEY_meth_copy()\fR do not return values. +.PP +\&\fBEVP_PKEY_meth_find()\fR returns a pointer to the found \fB\s-1EVP_PKEY_METHOD\s0\fR +object or returns \s-1NULL\s0 if not found. +.PP +\&\fBEVP_PKEY_meth_add0()\fR returns 1 if method is added successfully or 0 +if an error occurred. +.PP +\&\fBEVP_PKEY_meth_remove()\fR returns 1 if method is removed successfully or +0 if an error occurred. +.PP +All EVP_PKEY_meth_set and EVP_PKEY_meth_get functions have no return +values. For the 'get' functions, function pointers are returned by +arguments. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_new.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_new.3 new file mode 100644 index 00000000..3f76152f --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_new.3 @@ -0,0 +1,260 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EVP_PKEY_NEW 3" +.TH EVP_PKEY_NEW 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EVP_PKEY_new, EVP_PKEY_up_ref, EVP_PKEY_free, EVP_PKEY_new_raw_private_key, EVP_PKEY_new_raw_public_key, EVP_PKEY_new_CMAC_key, EVP_PKEY_new_mac_key, EVP_PKEY_get_raw_private_key, EVP_PKEY_get_raw_public_key \&\- public/private key allocation and raw key handling functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& EVP_PKEY *EVP_PKEY_new(void); +\& int EVP_PKEY_up_ref(EVP_PKEY *key); +\& void EVP_PKEY_free(EVP_PKEY *key); +\& +\& EVP_PKEY *EVP_PKEY_new_raw_private_key(int type, ENGINE *e, +\& const unsigned char *key, size_t keylen); +\& EVP_PKEY *EVP_PKEY_new_raw_public_key(int type, ENGINE *e, +\& const unsigned char *key, size_t keylen); +\& EVP_PKEY *EVP_PKEY_new_CMAC_key(ENGINE *e, const unsigned char *priv, +\& size_t len, const EVP_CIPHER *cipher); +\& EVP_PKEY *EVP_PKEY_new_mac_key(int type, ENGINE *e, const unsigned char *key, +\& int keylen); +\& +\& int EVP_PKEY_get_raw_private_key(const EVP_PKEY *pkey, unsigned char *priv, +\& size_t *len); +\& int EVP_PKEY_get_raw_public_key(const EVP_PKEY *pkey, unsigned char *pub, +\& size_t *len); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fBEVP_PKEY_new()\fR function allocates an empty \fB\s-1EVP_PKEY\s0\fR structure which is +used by OpenSSL to store public and private keys. The reference count is set to +\&\fB1\fR. +.PP +\&\fBEVP_PKEY_up_ref()\fR increments the reference count of \fBkey\fR. +.PP +\&\fBEVP_PKEY_free()\fR decrements the reference count of \fBkey\fR and, if the reference +count is zero, frees it up. If \fBkey\fR is \s-1NULL,\s0 nothing is done. +.PP +\&\fBEVP_PKEY_new_raw_private_key()\fR allocates a new \fB\s-1EVP_PKEY\s0\fR. If \fBe\fR is non-NULL +then the new \fB\s-1EVP_PKEY\s0\fR structure is associated with the engine \fBe\fR. The +\&\fBtype\fR argument indicates what kind of key this is. The value should be a \s-1NID\s0 +for a public key algorithm that supports raw private keys, i.e. one of +\&\fB\s-1EVP_PKEY_HMAC\s0\fR, \fB\s-1EVP_PKEY_POLY1305\s0\fR, \fB\s-1EVP_PKEY_SIPHASH\s0\fR, \fB\s-1EVP_PKEY_X25519\s0\fR, +\&\fB\s-1EVP_PKEY_ED25519\s0\fR, \fB\s-1EVP_PKEY_X448\s0\fR or \fB\s-1EVP_PKEY_ED448\s0\fR. \fBkey\fR points to the +raw private key data for this \fB\s-1EVP_PKEY\s0\fR which should be of length \fBkeylen\fR. +The length should be appropriate for the type of the key. The public key data +will be automatically derived from the given private key data (if appropriate +for the algorithm type). +.PP +\&\fBEVP_PKEY_new_raw_public_key()\fR works in the same way as +\&\fBEVP_PKEY_new_raw_private_key()\fR except that \fBkey\fR points to the raw public key +data. The \fB\s-1EVP_PKEY\s0\fR structure will be initialised without any private key +information. Algorithm types that support raw public keys are +\&\fB\s-1EVP_PKEY_X25519\s0\fR, \fB\s-1EVP_PKEY_ED25519\s0\fR, \fB\s-1EVP_PKEY_X448\s0\fR or \fB\s-1EVP_PKEY_ED448\s0\fR. +.PP +\&\fBEVP_PKEY_new_CMAC_key()\fR works in the same way as \fBEVP_PKEY_new_raw_private_key()\fR +except it is only for the \fB\s-1EVP_PKEY_CMAC\s0\fR algorithm type. In addition to the +raw private key data, it also takes a cipher algorithm to be used during +creation of a \s-1CMAC\s0 in the \fBcipher\fR argument. +.PP +\&\fBEVP_PKEY_new_mac_key()\fR works in the same way as \fBEVP_PKEY_new_raw_private_key()\fR. +New applications should use \fBEVP_PKEY_new_raw_private_key()\fR instead. +.PP +\&\fBEVP_PKEY_get_raw_private_key()\fR fills the buffer provided by \fBpriv\fR with raw +private key data. The size of the \fBpriv\fR buffer should be in \fB*len\fR on entry +to the function, and on exit \fB*len\fR is updated with the number of bytes +actually written. If the buffer \fBpriv\fR is \s-1NULL\s0 then \fB*len\fR is populated with +the number of bytes required to hold the key. The calling application is +responsible for ensuring that the buffer is large enough to receive the private +key data. This function only works for algorithms that support raw private keys. +Currently this is: \fB\s-1EVP_PKEY_HMAC\s0\fR, \fB\s-1EVP_PKEY_POLY1305\s0\fR, \fB\s-1EVP_PKEY_SIPHASH\s0\fR, +\&\fB\s-1EVP_PKEY_X25519\s0\fR, \fB\s-1EVP_PKEY_ED25519\s0\fR, \fB\s-1EVP_PKEY_X448\s0\fR or \fB\s-1EVP_PKEY_ED448\s0\fR. +.PP +\&\fBEVP_PKEY_get_raw_public_key()\fR fills the buffer provided by \fBpub\fR with raw +public key data. The size of the \fBpub\fR buffer should be in \fB*len\fR on entry +to the function, and on exit \fB*len\fR is updated with the number of bytes +actually written. If the buffer \fBpub\fR is \s-1NULL\s0 then \fB*len\fR is populated with +the number of bytes required to hold the key. The calling application is +responsible for ensuring that the buffer is large enough to receive the public +key data. This function only works for algorithms that support raw public keys. +Currently this is: \fB\s-1EVP_PKEY_X25519\s0\fR, \fB\s-1EVP_PKEY_ED25519\s0\fR, \fB\s-1EVP_PKEY_X448\s0\fR or +\&\fB\s-1EVP_PKEY_ED448\s0\fR. +.SH "NOTES" +.IX Header "NOTES" +The \fB\s-1EVP_PKEY\s0\fR structure is used by various OpenSSL functions which require a +general private key without reference to any particular algorithm. +.PP +The structure returned by \fBEVP_PKEY_new()\fR is empty. To add a private or public +key to this empty structure use the appropriate functions described in +\&\fBEVP_PKEY_set1_RSA\fR\|(3), EVP_PKEY_set1_DSA, EVP_PKEY_set1_DH or +EVP_PKEY_set1_EC_KEY. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBEVP_PKEY_new()\fR, \fBEVP_PKEY_new_raw_private_key()\fR, \fBEVP_PKEY_new_raw_public_key()\fR, +\&\fBEVP_PKEY_new_CMAC_key()\fR and \fBEVP_PKEY_new_mac_key()\fR return either the newly +allocated \fB\s-1EVP_PKEY\s0\fR structure or \fB\s-1NULL\s0\fR if an error occurred. +.PP +\&\fBEVP_PKEY_up_ref()\fR, \fBEVP_PKEY_get_raw_private_key()\fR and +\&\fBEVP_PKEY_get_raw_public_key()\fR return 1 for success and 0 for failure. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBEVP_PKEY_set1_RSA\fR\|(3), EVP_PKEY_set1_DSA, EVP_PKEY_set1_DH or +EVP_PKEY_set1_EC_KEY +.SH "HISTORY" +.IX Header "HISTORY" +The +\&\fBEVP_PKEY_new()\fR and \fBEVP_PKEY_free()\fR functions exist in all versions of OpenSSL. +.PP +The \fBEVP_PKEY_up_ref()\fR function was added in OpenSSL 1.1.0. +.PP +The +\&\fBEVP_PKEY_new_raw_private_key()\fR, \fBEVP_PKEY_new_raw_public_key()\fR, +\&\fBEVP_PKEY_new_CMAC_key()\fR, \fBEVP_PKEY_new_raw_private_key()\fR and +\&\fBEVP_PKEY_get_raw_public_key()\fR functions were added in OpenSSL 1.1.1. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2002\-2020 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_print_private.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_print_private.3 new file mode 100644 index 00000000..a7c08745 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_print_private.3 @@ -0,0 +1,191 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EVP_PKEY_PRINT_PRIVATE 3" +.TH EVP_PKEY_PRINT_PRIVATE 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EVP_PKEY_print_public, EVP_PKEY_print_private, EVP_PKEY_print_params \- public key algorithm printing routines +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int EVP_PKEY_print_public(BIO *out, const EVP_PKEY *pkey, +\& int indent, ASN1_PCTX *pctx); +\& int EVP_PKEY_print_private(BIO *out, const EVP_PKEY *pkey, +\& int indent, ASN1_PCTX *pctx); +\& int EVP_PKEY_print_params(BIO *out, const EVP_PKEY *pkey, +\& int indent, ASN1_PCTX *pctx); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The functions \fBEVP_PKEY_print_public()\fR, \fBEVP_PKEY_print_private()\fR and +\&\fBEVP_PKEY_print_params()\fR print out the public, private or parameter components +of key \fBpkey\fR respectively. The key is sent to \s-1BIO\s0 \fBout\fR in human readable +form. The parameter \fBindent\fR indicated how far the printout should be indented. +.PP +The \fBpctx\fR parameter allows the print output to be finely tuned by using +\&\s-1ASN1\s0 printing options. If \fBpctx\fR is set to \s-1NULL\s0 then default values will +be used. +.SH "NOTES" +.IX Header "NOTES" +Currently no public key algorithms include any options in the \fBpctx\fR parameter. +.PP +If the key does not include all the components indicated by the function then +only those contained in the key will be printed. For example passing a public +key to \fBEVP_PKEY_print_private()\fR will only print the public components. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +These functions all return 1 for success and 0 or a negative value for failure. +In particular a return value of \-2 indicates the operation is not supported by +the public key algorithm. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBEVP_PKEY_CTX_new\fR\|(3), +\&\fBEVP_PKEY_keygen\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +These functions were added in OpenSSL 1.0.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2006\-2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_set1_RSA.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_set1_RSA.3 new file mode 100644 index 00000000..48e151ef --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_set1_RSA.3 @@ -0,0 +1,282 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EVP_PKEY_SET1_RSA 3" +.TH EVP_PKEY_SET1_RSA 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EVP_PKEY_set1_RSA, EVP_PKEY_set1_DSA, EVP_PKEY_set1_DH, EVP_PKEY_set1_EC_KEY, EVP_PKEY_get1_RSA, EVP_PKEY_get1_DSA, EVP_PKEY_get1_DH, EVP_PKEY_get1_EC_KEY, EVP_PKEY_get0_RSA, EVP_PKEY_get0_DSA, EVP_PKEY_get0_DH, EVP_PKEY_get0_EC_KEY, EVP_PKEY_assign_RSA, EVP_PKEY_assign_DSA, EVP_PKEY_assign_DH, EVP_PKEY_assign_EC_KEY, EVP_PKEY_assign_POLY1305, EVP_PKEY_assign_SIPHASH, EVP_PKEY_get0_hmac, EVP_PKEY_get0_poly1305, EVP_PKEY_get0_siphash, EVP_PKEY_type, EVP_PKEY_id, EVP_PKEY_base_id, EVP_PKEY_set_alias_type, EVP_PKEY_set1_engine, EVP_PKEY_get0_engine \- EVP_PKEY assignment functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int EVP_PKEY_set1_RSA(EVP_PKEY *pkey, RSA *key); +\& int EVP_PKEY_set1_DSA(EVP_PKEY *pkey, DSA *key); +\& int EVP_PKEY_set1_DH(EVP_PKEY *pkey, DH *key); +\& int EVP_PKEY_set1_EC_KEY(EVP_PKEY *pkey, EC_KEY *key); +\& +\& RSA *EVP_PKEY_get1_RSA(EVP_PKEY *pkey); +\& DSA *EVP_PKEY_get1_DSA(EVP_PKEY *pkey); +\& DH *EVP_PKEY_get1_DH(EVP_PKEY *pkey); +\& EC_KEY *EVP_PKEY_get1_EC_KEY(EVP_PKEY *pkey); +\& +\& const unsigned char *EVP_PKEY_get0_hmac(const EVP_PKEY *pkey, size_t *len); +\& const unsigned char *EVP_PKEY_get0_poly1305(const EVP_PKEY *pkey, size_t *len); +\& const unsigned char *EVP_PKEY_get0_siphash(const EVP_PKEY *pkey, size_t *len); +\& RSA *EVP_PKEY_get0_RSA(EVP_PKEY *pkey); +\& DSA *EVP_PKEY_get0_DSA(EVP_PKEY *pkey); +\& DH *EVP_PKEY_get0_DH(EVP_PKEY *pkey); +\& EC_KEY *EVP_PKEY_get0_EC_KEY(EVP_PKEY *pkey); +\& +\& int EVP_PKEY_assign_RSA(EVP_PKEY *pkey, RSA *key); +\& int EVP_PKEY_assign_DSA(EVP_PKEY *pkey, DSA *key); +\& int EVP_PKEY_assign_DH(EVP_PKEY *pkey, DH *key); +\& int EVP_PKEY_assign_EC_KEY(EVP_PKEY *pkey, EC_KEY *key); +\& int EVP_PKEY_assign_POLY1305(EVP_PKEY *pkey, ASN1_OCTET_STRING *key); +\& int EVP_PKEY_assign_SIPHASH(EVP_PKEY *pkey, ASN1_OCTET_STRING *key); +\& +\& int EVP_PKEY_id(const EVP_PKEY *pkey); +\& int EVP_PKEY_base_id(const EVP_PKEY *pkey); +\& int EVP_PKEY_type(int type); +\& int EVP_PKEY_set_alias_type(EVP_PKEY *pkey, int type); +\& +\& ENGINE *EVP_PKEY_get0_engine(const EVP_PKEY *pkey); +\& int EVP_PKEY_set1_engine(EVP_PKEY *pkey, ENGINE *engine); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBEVP_PKEY_set1_RSA()\fR, \fBEVP_PKEY_set1_DSA()\fR, \fBEVP_PKEY_set1_DH()\fR and +\&\fBEVP_PKEY_set1_EC_KEY()\fR set the key referenced by \fBpkey\fR to \fBkey\fR. +.PP +\&\fBEVP_PKEY_get1_RSA()\fR, \fBEVP_PKEY_get1_DSA()\fR, \fBEVP_PKEY_get1_DH()\fR and +\&\fBEVP_PKEY_get1_EC_KEY()\fR return the referenced key in \fBpkey\fR or +\&\fB\s-1NULL\s0\fR if the key is not of the correct type. +.PP +\&\fBEVP_PKEY_get0_hmac()\fR, \fBEVP_PKEY_get0_poly1305()\fR, \fBEVP_PKEY_get0_siphash()\fR, +\&\fBEVP_PKEY_get0_RSA()\fR, \fBEVP_PKEY_get0_DSA()\fR, \fBEVP_PKEY_get0_DH()\fR +and \fBEVP_PKEY_get0_EC_KEY()\fR also return the referenced key in \fBpkey\fR or \fB\s-1NULL\s0\fR +if the key is not of the correct type but the reference count of the +returned key is \fBnot\fR incremented and so must not be freed up after use. +.PP +\&\fBEVP_PKEY_assign_RSA()\fR, \fBEVP_PKEY_assign_DSA()\fR, \fBEVP_PKEY_assign_DH()\fR, +\&\fBEVP_PKEY_assign_EC_KEY()\fR, \fBEVP_PKEY_assign_POLY1305()\fR and +\&\fBEVP_PKEY_assign_SIPHASH()\fR also set the referenced key to \fBkey\fR +however these use the supplied \fBkey\fR internally and so \fBkey\fR +will be freed when the parent \fBpkey\fR is freed. +.PP +\&\fBEVP_PKEY_base_id()\fR returns the type of \fBpkey\fR. For example +an \s-1RSA\s0 key will return \fB\s-1EVP_PKEY_RSA\s0\fR. +.PP +\&\fBEVP_PKEY_id()\fR returns the actual \s-1OID\s0 associated with \fBpkey\fR. Historically keys +using the same algorithm could use different OIDs. For example an \s-1RSA\s0 key could +use the OIDs corresponding to the NIDs \fBNID_rsaEncryption\fR (equivalent to +\&\fB\s-1EVP_PKEY_RSA\s0\fR) or \fBNID_rsa\fR (equivalent to \fB\s-1EVP_PKEY_RSA2\s0\fR). The use of +alternative non-standard OIDs is now rare so \fB\s-1EVP_PKEY_RSA2\s0\fR et al are not +often seen in practice. +.PP +\&\fBEVP_PKEY_type()\fR returns the underlying type of the \s-1NID\s0 \fBtype\fR. For example +EVP_PKEY_type(\s-1EVP_PKEY_RSA2\s0) will return \fB\s-1EVP_PKEY_RSA\s0\fR. +.PP +\&\fBEVP_PKEY_get0_engine()\fR returns a reference to the \s-1ENGINE\s0 handling \fBpkey\fR. +.PP +\&\fBEVP_PKEY_set1_engine()\fR sets the \s-1ENGINE\s0 handling \fBpkey\fR to \fBengine\fR. It +must be called after the key algorithm and components are set up. +If \fBengine\fR does not include an \fB\s-1EVP_PKEY_METHOD\s0\fR for \fBpkey\fR an +error occurs. +.PP +\&\fBEVP_PKEY_set_alias_type()\fR allows modifying a \s-1EVP_PKEY\s0 to use a +different set of algorithms than the default. This is currently used +to support \s-1SM2\s0 keys, which use an identical encoding to \s-1ECDSA.\s0 +.SH "NOTES" +.IX Header "NOTES" +In accordance with the OpenSSL naming convention the key obtained +from or assigned to the \fBpkey\fR using the \fB1\fR functions must be +freed as well as \fBpkey\fR. +.PP +\&\fBEVP_PKEY_assign_RSA()\fR, \fBEVP_PKEY_assign_DSA()\fR, \fBEVP_PKEY_assign_DH()\fR, +\&\fBEVP_PKEY_assign_EC_KEY()\fR, \fBEVP_PKEY_assign_POLY1305()\fR +and \fBEVP_PKEY_assign_SIPHASH()\fR are implemented as macros. +.PP +Most applications wishing to know a key type will simply call +\&\fBEVP_PKEY_base_id()\fR and will not care about the actual type: +which will be identical in almost all cases. +.PP +Previous versions of this document suggested using EVP_PKEY_type(pkey\->type) +to determine the type of a key. Since \fB\s-1EVP_PKEY\s0\fR is now opaque this +is no longer possible: the equivalent is EVP_PKEY_base_id(pkey). +.PP +\&\fBEVP_PKEY_set1_engine()\fR is typically used by an \s-1ENGINE\s0 returning an \s-1HSM\s0 +key as part of its routine to load a private key. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBEVP_PKEY_set1_RSA()\fR, \fBEVP_PKEY_set1_DSA()\fR, \fBEVP_PKEY_set1_DH()\fR and +\&\fBEVP_PKEY_set1_EC_KEY()\fR return 1 for success or 0 for failure. +.PP +\&\fBEVP_PKEY_get1_RSA()\fR, \fBEVP_PKEY_get1_DSA()\fR, \fBEVP_PKEY_get1_DH()\fR and +\&\fBEVP_PKEY_get1_EC_KEY()\fR return the referenced key or \fB\s-1NULL\s0\fR if +an error occurred. +.PP +\&\fBEVP_PKEY_assign_RSA()\fR, \fBEVP_PKEY_assign_DSA()\fR, \fBEVP_PKEY_assign_DH()\fR, +\&\fBEVP_PKEY_assign_EC_KEY()\fR, \fBEVP_PKEY_assign_POLY1305()\fR +and \fBEVP_PKEY_assign_SIPHASH()\fR return 1 for success and 0 for failure. +.PP +\&\fBEVP_PKEY_base_id()\fR, \fBEVP_PKEY_id()\fR and \fBEVP_PKEY_type()\fR return a key +type or \fBNID_undef\fR (equivalently \fB\s-1EVP_PKEY_NONE\s0\fR) on error. +.PP +\&\fBEVP_PKEY_set1_engine()\fR returns 1 for success and 0 for failure. +.PP +\&\fBEVP_PKEY_set_alias_type()\fR returns 1 for success and 0 for error. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +After loading an \s-1ECC\s0 key, it is possible to convert it to using \s-1SM2\s0 +algorithms with EVP_PKEY_set_alias_type: +.PP +.Vb 1 +\& EVP_PKEY_set_alias_type(pkey, EVP_PKEY_SM2); +.Ve +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBEVP_PKEY_new\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2002\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_sign.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_sign.3 new file mode 100644 index 00000000..3b2733c9 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_sign.3 @@ -0,0 +1,245 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EVP_PKEY_SIGN 3" +.TH EVP_PKEY_SIGN 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EVP_PKEY_sign_init, EVP_PKEY_sign \- sign using a public key algorithm +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int EVP_PKEY_sign_init(EVP_PKEY_CTX *ctx); +\& int EVP_PKEY_sign(EVP_PKEY_CTX *ctx, +\& unsigned char *sig, size_t *siglen, +\& const unsigned char *tbs, size_t tbslen); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fBEVP_PKEY_sign_init()\fR function initializes a public key algorithm +context using key \fBpkey\fR for a signing operation. +.PP +The \fBEVP_PKEY_sign()\fR function performs a public key signing operation +using \fBctx\fR. The data to be signed is specified using the \fBtbs\fR and +\&\fBtbslen\fR parameters. If \fBsig\fR is \fB\s-1NULL\s0\fR then the maximum size of the output +buffer is written to the \fBsiglen\fR parameter. If \fBsig\fR is not \fB\s-1NULL\s0\fR then +before the call the \fBsiglen\fR parameter should contain the length of the +\&\fBsig\fR buffer, if the call is successful the signature is written to +\&\fBsig\fR and the amount of data written to \fBsiglen\fR. +.SH "NOTES" +.IX Header "NOTES" +\&\fBEVP_PKEY_sign()\fR does not hash the data to be signed, and therefore is +normally used to sign digests. For signing arbitrary messages, see the +\&\fBEVP_DigestSignInit\fR\|(3) and +\&\fBEVP_SignInit\fR\|(3) signing interfaces instead. +.PP +After the call to \fBEVP_PKEY_sign_init()\fR algorithm specific control +operations can be performed to set any appropriate parameters for the +operation (see \fBEVP_PKEY_CTX_ctrl\fR\|(3)). +.PP +The function \fBEVP_PKEY_sign()\fR can be called more than once on the same +context if several operations are performed using the same parameters. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBEVP_PKEY_sign_init()\fR and \fBEVP_PKEY_sign()\fR return 1 for success and 0 +or a negative value for failure. In particular a return value of \-2 +indicates the operation is not supported by the public key algorithm. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +Sign data using \s-1RSA\s0 with PKCS#1 padding and \s-1SHA256\s0 digest: +.PP +.Vb 2 +\& #include +\& #include +\& +\& EVP_PKEY_CTX *ctx; +\& /* md is a SHA\-256 digest in this example. */ +\& unsigned char *md, *sig; +\& size_t mdlen = 32, siglen; +\& EVP_PKEY *signing_key; +\& +\& /* +\& * NB: assumes signing_key and md are set up before the next +\& * step. signing_key must be an RSA private key and md must +\& * point to the SHA\-256 digest to be signed. +\& */ +\& ctx = EVP_PKEY_CTX_new(signing_key, NULL /* no engine */); +\& if (!ctx) +\& /* Error occurred */ +\& if (EVP_PKEY_sign_init(ctx) <= 0) +\& /* Error */ +\& if (EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_PKCS1_PADDING) <= 0) +\& /* Error */ +\& if (EVP_PKEY_CTX_set_signature_md(ctx, EVP_sha256()) <= 0) +\& /* Error */ +\& +\& /* Determine buffer length */ +\& if (EVP_PKEY_sign(ctx, NULL, &siglen, md, mdlen) <= 0) +\& /* Error */ +\& +\& sig = OPENSSL_malloc(siglen); +\& +\& if (!sig) +\& /* malloc failure */ +\& +\& if (EVP_PKEY_sign(ctx, sig, &siglen, md, mdlen) <= 0) +\& /* Error */ +\& +\& /* Signature is siglen bytes written to buffer sig */ +.Ve +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBEVP_PKEY_CTX_new\fR\|(3), +\&\fBEVP_PKEY_CTX_ctrl\fR\|(3), +\&\fBEVP_PKEY_encrypt\fR\|(3), +\&\fBEVP_PKEY_decrypt\fR\|(3), +\&\fBEVP_PKEY_verify\fR\|(3), +\&\fBEVP_PKEY_verify_recover\fR\|(3), +\&\fBEVP_PKEY_derive\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +These functions were added in OpenSSL 1.0.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2006\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_size.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_size.3 new file mode 100644 index 00000000..06a8243f --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_size.3 @@ -0,0 +1,210 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EVP_PKEY_SIZE 3" +.TH EVP_PKEY_SIZE 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EVP_PKEY_size, EVP_PKEY_bits, EVP_PKEY_security_bits \&\- EVP_PKEY information functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int EVP_PKEY_size(const EVP_PKEY *pkey); +\& int EVP_PKEY_bits(const EVP_PKEY *pkey); +\& int EVP_PKEY_security_bits(const EVP_PKEY *pkey); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBEVP_PKEY_size()\fR returns the maximum suitable size for the output +buffers for almost all operations that can be done with \fIpkey\fR. +The primary documented use is with \fBEVP_SignFinal\fR\|(3) and +\&\fBEVP_SealInit\fR\|(3), but it isn't limited there. The returned size is +also large enough for the output buffer of \fBEVP_PKEY_sign\fR\|(3), +\&\fBEVP_PKEY_encrypt\fR\|(3), \fBEVP_PKEY_decrypt\fR\|(3), \fBEVP_PKEY_derive\fR\|(3). +.PP +It must be stressed that, unless the documentation for the operation +that's being performed says otherwise, the size returned by +\&\fBEVP_PKEY_size()\fR is only preliminary and not exact, so the final +contents of the target buffer may be smaller. It is therefore crucial +to take note of the size given back by the function that performs the +operation, such as \fBEVP_PKEY_sign\fR\|(3) (the \fIsiglen\fR argument will +receive that length), to avoid bugs. +.PP +\&\fBEVP_PKEY_bits()\fR returns the cryptographic length of the cryptosystem +to which the key in \fIpkey\fR belongs, in bits. Note that the definition +of cryptographic length is specific to the key cryptosystem. +.PP +\&\fBEVP_PKEY_security_bits()\fR returns the number of security bits of the given +\&\fIpkey\fR, bits of security is defined in \s-1NIST SP800\-57.\s0 +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBEVP_PKEY_size()\fR, \fBEVP_PKEY_bits()\fR and \fBEVP_PKEY_security_bits()\fR return a +positive number, or 0 if this size isn't available. +.SH "NOTES" +.IX Header "NOTES" +Most functions that have an output buffer and are mentioned with +\&\fBEVP_PKEY_size()\fR have a functionality where you can pass \s-1NULL\s0 for the +buffer and still pass a pointer to an integer and get the exact size +that this function call delivers in the context that it's called in. +This allows those functions to be called twice, once to find out the +exact buffer size, then allocate the buffer in between, and call that +function again actually output the data. For those functions, it +isn't strictly necessary to call \fBEVP_PKEY_size()\fR to find out the +buffer size, but may be useful in cases where it's desirable to know +the upper limit in advance. +.PP +It should also be especially noted that \fBEVP_PKEY_size()\fR shouldn't be +used to get the output size for \fBEVP_DigestSignFinal()\fR, according to +\&\*(L"\s-1NOTES\*(R"\s0 in \fBEVP_DigestSignFinal\fR\|(3). +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBEVP_SignFinal\fR\|(3), +\&\fBEVP_SealInit\fR\|(3), +\&\fBEVP_PKEY_sign\fR\|(3), +\&\fBEVP_PKEY_encrypt\fR\|(3), +\&\fBEVP_PKEY_decrypt\fR\|(3), +\&\fBEVP_PKEY_derive\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2020 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the Apache License 2.0 (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_verify.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_verify.3 new file mode 100644 index 00000000..ecbb5fc2 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_verify.3 @@ -0,0 +1,234 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EVP_PKEY_VERIFY 3" +.TH EVP_PKEY_VERIFY 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EVP_PKEY_verify_init, EVP_PKEY_verify \- signature verification using a public key algorithm +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int EVP_PKEY_verify_init(EVP_PKEY_CTX *ctx); +\& int EVP_PKEY_verify(EVP_PKEY_CTX *ctx, +\& const unsigned char *sig, size_t siglen, +\& const unsigned char *tbs, size_t tbslen); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fBEVP_PKEY_verify_init()\fR function initializes a public key algorithm +context using key \fBpkey\fR for a signature verification operation. +.PP +The \fBEVP_PKEY_verify()\fR function performs a public key verification operation +using \fBctx\fR. The signature is specified using the \fBsig\fR and +\&\fBsiglen\fR parameters. The verified data (i.e. the data believed originally +signed) is specified using the \fBtbs\fR and \fBtbslen\fR parameters. +.SH "NOTES" +.IX Header "NOTES" +After the call to \fBEVP_PKEY_verify_init()\fR algorithm specific control +operations can be performed to set any appropriate parameters for the +operation. +.PP +The function \fBEVP_PKEY_verify()\fR can be called more than once on the same +context if several operations are performed using the same parameters. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBEVP_PKEY_verify_init()\fR and \fBEVP_PKEY_verify()\fR return 1 if the verification was +successful and 0 if it failed. Unlike other functions the return value 0 from +\&\fBEVP_PKEY_verify()\fR only indicates that the signature did not verify +successfully (that is tbs did not match the original data or the signature was +of invalid form) it is not an indication of a more serious error. +.PP +A negative value indicates an error other that signature verification failure. +In particular a return value of \-2 indicates the operation is not supported by +the public key algorithm. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +Verify signature using PKCS#1 and \s-1SHA256\s0 digest: +.PP +.Vb 2 +\& #include +\& #include +\& +\& EVP_PKEY_CTX *ctx; +\& unsigned char *md, *sig; +\& size_t mdlen, siglen; +\& EVP_PKEY *verify_key; +\& +\& /* +\& * NB: assumes verify_key, sig, siglen md and mdlen are already set up +\& * and that verify_key is an RSA public key +\& */ +\& ctx = EVP_PKEY_CTX_new(verify_key, NULL /* no engine */); +\& if (!ctx) +\& /* Error occurred */ +\& if (EVP_PKEY_verify_init(ctx) <= 0) +\& /* Error */ +\& if (EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_PKCS1_PADDING) <= 0) +\& /* Error */ +\& if (EVP_PKEY_CTX_set_signature_md(ctx, EVP_sha256()) <= 0) +\& /* Error */ +\& +\& /* Perform operation */ +\& ret = EVP_PKEY_verify(ctx, sig, siglen, md, mdlen); +\& +\& /* +\& * ret == 1 indicates success, 0 verify failure and < 0 for some +\& * other error. +\& */ +.Ve +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBEVP_PKEY_CTX_new\fR\|(3), +\&\fBEVP_PKEY_encrypt\fR\|(3), +\&\fBEVP_PKEY_decrypt\fR\|(3), +\&\fBEVP_PKEY_sign\fR\|(3), +\&\fBEVP_PKEY_verify_recover\fR\|(3), +\&\fBEVP_PKEY_derive\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +These functions were added in OpenSSL 1.0.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2006\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_verify_recover.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_verify_recover.3 new file mode 100644 index 00000000..44d05a5b --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_PKEY_verify_recover.3 @@ -0,0 +1,245 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EVP_PKEY_VERIFY_RECOVER 3" +.TH EVP_PKEY_VERIFY_RECOVER 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EVP_PKEY_verify_recover_init, EVP_PKEY_verify_recover \- recover signature using a public key algorithm +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int EVP_PKEY_verify_recover_init(EVP_PKEY_CTX *ctx); +\& int EVP_PKEY_verify_recover(EVP_PKEY_CTX *ctx, +\& unsigned char *rout, size_t *routlen, +\& const unsigned char *sig, size_t siglen); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fBEVP_PKEY_verify_recover_init()\fR function initializes a public key algorithm +context using key \fBpkey\fR for a verify recover operation. +.PP +The \fBEVP_PKEY_verify_recover()\fR function recovers signed data +using \fBctx\fR. The signature is specified using the \fBsig\fR and +\&\fBsiglen\fR parameters. If \fBrout\fR is \fB\s-1NULL\s0\fR then the maximum size of the output +buffer is written to the \fBroutlen\fR parameter. If \fBrout\fR is not \fB\s-1NULL\s0\fR then +before the call the \fBroutlen\fR parameter should contain the length of the +\&\fBrout\fR buffer, if the call is successful recovered data is written to +\&\fBrout\fR and the amount of data written to \fBroutlen\fR. +.SH "NOTES" +.IX Header "NOTES" +Normally an application is only interested in whether a signature verification +operation is successful in those cases the \fBEVP_verify()\fR function should be +used. +.PP +Sometimes however it is useful to obtain the data originally signed using a +signing operation. Only certain public key algorithms can recover a signature +in this way (for example \s-1RSA\s0 in \s-1PKCS\s0 padding mode). +.PP +After the call to \fBEVP_PKEY_verify_recover_init()\fR algorithm specific control +operations can be performed to set any appropriate parameters for the +operation. +.PP +The function \fBEVP_PKEY_verify_recover()\fR can be called more than once on the same +context if several operations are performed using the same parameters. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBEVP_PKEY_verify_recover_init()\fR and \fBEVP_PKEY_verify_recover()\fR return 1 for success +and 0 or a negative value for failure. In particular a return value of \-2 +indicates the operation is not supported by the public key algorithm. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +Recover digest originally signed using PKCS#1 and \s-1SHA256\s0 digest: +.PP +.Vb 2 +\& #include +\& #include +\& +\& EVP_PKEY_CTX *ctx; +\& unsigned char *rout, *sig; +\& size_t routlen, siglen; +\& EVP_PKEY *verify_key; +\& +\& /* +\& * NB: assumes verify_key, sig and siglen are already set up +\& * and that verify_key is an RSA public key +\& */ +\& ctx = EVP_PKEY_CTX_new(verify_key, NULL /* no engine */); +\& if (!ctx) +\& /* Error occurred */ +\& if (EVP_PKEY_verify_recover_init(ctx) <= 0) +\& /* Error */ +\& if (EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_PKCS1_PADDING) <= 0) +\& /* Error */ +\& if (EVP_PKEY_CTX_set_signature_md(ctx, EVP_sha256()) <= 0) +\& /* Error */ +\& +\& /* Determine buffer length */ +\& if (EVP_PKEY_verify_recover(ctx, NULL, &routlen, sig, siglen) <= 0) +\& /* Error */ +\& +\& rout = OPENSSL_malloc(routlen); +\& +\& if (!rout) +\& /* malloc failure */ +\& +\& if (EVP_PKEY_verify_recover(ctx, rout, &routlen, sig, siglen) <= 0) +\& /* Error */ +\& +\& /* Recovered data is routlen bytes written to buffer rout */ +.Ve +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBEVP_PKEY_CTX_new\fR\|(3), +\&\fBEVP_PKEY_encrypt\fR\|(3), +\&\fBEVP_PKEY_decrypt\fR\|(3), +\&\fBEVP_PKEY_sign\fR\|(3), +\&\fBEVP_PKEY_verify\fR\|(3), +\&\fBEVP_PKEY_derive\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +These functions were added in OpenSSL 1.0.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2013\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_SealInit.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_SealInit.3 new file mode 100644 index 00000000..cb48d5e3 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_SealInit.3 @@ -0,0 +1,223 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EVP_SEALINIT 3" +.TH EVP_SEALINIT 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EVP_SealInit, EVP_SealUpdate, EVP_SealFinal \- EVP envelope encryption +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int EVP_SealInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, +\& unsigned char **ek, int *ekl, unsigned char *iv, +\& EVP_PKEY **pubk, int npubk); +\& int EVP_SealUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, +\& int *outl, unsigned char *in, int inl); +\& int EVP_SealFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \s-1EVP\s0 envelope routines are a high level interface to envelope +encryption. They generate a random key and \s-1IV\s0 (if required) then +\&\*(L"envelope\*(R" it by using public key encryption. Data can then be +encrypted using this key. +.PP +\&\fBEVP_SealInit()\fR initializes a cipher context \fBctx\fR for encryption +with cipher \fBtype\fR using a random secret key and \s-1IV.\s0 \fBtype\fR is normally +supplied by a function such as \fBEVP_aes_256_cbc()\fR. The secret key is encrypted +using one or more public keys, this allows the same encrypted data to be +decrypted using any of the corresponding private keys. \fBek\fR is an array of +buffers where the public key encrypted secret key will be written, each buffer +must contain enough room for the corresponding encrypted key: that is +\&\fBek[i]\fR must have room for \fBEVP_PKEY_size(pubk[i])\fR bytes. The actual +size of each encrypted secret key is written to the array \fBekl\fR. \fBpubk\fR is +an array of \fBnpubk\fR public keys. +.PP +The \fBiv\fR parameter is a buffer where the generated \s-1IV\s0 is written to. It must +contain enough room for the corresponding cipher's \s-1IV,\s0 as determined by (for +example) EVP_CIPHER_iv_length(type). +.PP +If the cipher does not require an \s-1IV\s0 then the \fBiv\fR parameter is ignored +and can be \fB\s-1NULL\s0\fR. +.PP +\&\fBEVP_SealUpdate()\fR and \fBEVP_SealFinal()\fR have exactly the same properties +as the \fBEVP_EncryptUpdate()\fR and \fBEVP_EncryptFinal()\fR routines, as +documented on the \fBEVP_EncryptInit\fR\|(3) manual +page. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBEVP_SealInit()\fR returns 0 on error or \fBnpubk\fR if successful. +.PP +\&\fBEVP_SealUpdate()\fR and \fBEVP_SealFinal()\fR return 1 for success and 0 for +failure. +.SH "NOTES" +.IX Header "NOTES" +Because a random secret key is generated the random number generator +must be seeded when \fBEVP_SealInit()\fR is called. +If the automatic seeding or reseeding of the OpenSSL \s-1CSPRNG\s0 fails due to +external circumstances (see \s-1\fBRAND\s0\fR\|(7)), the operation will fail. +.PP +The public key must be \s-1RSA\s0 because it is the only OpenSSL public key +algorithm that supports key transport. +.PP +Envelope encryption is the usual method of using public key encryption +on large amounts of data, this is because public key encryption is slow +but symmetric encryption is fast. So symmetric encryption is used for +bulk encryption and the small random symmetric key used is transferred +using public key encryption. +.PP +It is possible to call \fBEVP_SealInit()\fR twice in the same way as +\&\fBEVP_EncryptInit()\fR. The first call should have \fBnpubk\fR set to 0 +and (after setting any cipher parameters) it should be called again +with \fBtype\fR set to \s-1NULL.\s0 +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBevp\fR\|(7), \fBRAND_bytes\fR\|(3), +\&\fBEVP_EncryptInit\fR\|(3), +\&\fBEVP_OpenInit\fR\|(3), +\&\s-1\fBRAND\s0\fR\|(7) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_SignInit.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_SignInit.3 new file mode 100644 index 00000000..5ec46b7f --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_SignInit.3 @@ -0,0 +1,228 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EVP_SIGNINIT 3" +.TH EVP_SIGNINIT 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EVP_SignInit, EVP_SignInit_ex, EVP_SignUpdate, EVP_SignFinal \&\- EVP signing functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int EVP_SignInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type, ENGINE *impl); +\& int EVP_SignUpdate(EVP_MD_CTX *ctx, const void *d, unsigned int cnt); +\& int EVP_SignFinal(EVP_MD_CTX *ctx, unsigned char *sig, unsigned int *s, EVP_PKEY *pkey); +\& +\& void EVP_SignInit(EVP_MD_CTX *ctx, const EVP_MD *type); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \s-1EVP\s0 signature routines are a high level interface to digital +signatures. +.PP +\&\fBEVP_SignInit_ex()\fR sets up signing context \fIctx\fR to use digest +\&\fItype\fR from \fB\s-1ENGINE\s0\fR \fIimpl\fR. \fIctx\fR must be created with +\&\fBEVP_MD_CTX_new()\fR before calling this function. +.PP +\&\fBEVP_SignUpdate()\fR hashes \fIcnt\fR bytes of data at \fId\fR into the +signature context \fIctx\fR. This function can be called several times on the +same \fIctx\fR to include additional data. +.PP +\&\fBEVP_SignFinal()\fR signs the data in \fIctx\fR using the private key \fIpkey\fR and +places the signature in \fIsig\fR. \fIsig\fR must be at least \f(CW\*(C`EVP_PKEY_size(pkey)\*(C'\fR +bytes in size. \fIs\fR is an \s-1OUT\s0 parameter, and not used as an \s-1IN\s0 parameter. +The number of bytes of data written (i.e. the length of the signature) +will be written to the integer at \fIs\fR, at most \f(CW\*(C`EVP_PKEY_size(pkey)\*(C'\fR bytes +will be written. +.PP +\&\fBEVP_SignInit()\fR initializes a signing context \fIctx\fR to use the default +implementation of digest \fItype\fR. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBEVP_SignInit_ex()\fR, \fBEVP_SignUpdate()\fR and \fBEVP_SignFinal()\fR return 1 +for success and 0 for failure. +.PP +The error codes can be obtained by \fBERR_get_error\fR\|(3). +.SH "NOTES" +.IX Header "NOTES" +The \fB\s-1EVP\s0\fR interface to digital signatures should almost always be used in +preference to the low level interfaces. This is because the code then becomes +transparent to the algorithm used and much more flexible. +.PP +When signing with \s-1DSA\s0 private keys the random number generator must be seeded. +If the automatic seeding or reseeding of the OpenSSL \s-1CSPRNG\s0 fails due to +external circumstances (see \s-1\fBRAND\s0\fR\|(7)), the operation will fail. +This requirement does not hold for \s-1RSA\s0 signatures. +.PP +The call to \fBEVP_SignFinal()\fR internally finalizes a copy of the digest context. +This means that calls to \fBEVP_SignUpdate()\fR and \fBEVP_SignFinal()\fR can be called +later to digest and sign additional data. +.PP +Since only a copy of the digest context is ever finalized the context must +be cleaned up after use by calling \fBEVP_MD_CTX_free()\fR or a memory leak +will occur. +.SH "BUGS" +.IX Header "BUGS" +Older versions of this documentation wrongly stated that calls to +\&\fBEVP_SignUpdate()\fR could not be made after calling \fBEVP_SignFinal()\fR. +.PP +Since the private key is passed in the call to \fBEVP_SignFinal()\fR any error +relating to the private key (for example an unsuitable key and digest +combination) will not be indicated until after potentially large amounts of +data have been passed through \fBEVP_SignUpdate()\fR. +.PP +It is not possible to change the signing parameters using these function. +.PP +The previous two bugs are fixed in the newer EVP_SignDigest*() function. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBEVP_PKEY_size\fR\|(3), \fBEVP_PKEY_bits\fR\|(3), \fBEVP_PKEY_security_bits\fR\|(3), +\&\fBEVP_VerifyInit\fR\|(3), +\&\fBEVP_DigestInit\fR\|(3), +\&\fBevp\fR\|(7), \s-1\fBHMAC\s0\fR\|(3), \s-1\fBMD2\s0\fR\|(3), +\&\s-1\fBMD5\s0\fR\|(3), \s-1\fBMDC2\s0\fR\|(3), \s-1\fBRIPEMD160\s0\fR\|(3), +\&\s-1\fBSHA1\s0\fR\|(3), \fBdgst\fR\|(1) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2020 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_VerifyInit.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_VerifyInit.3 new file mode 100644 index 00000000..e270d75b --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_VerifyInit.3 @@ -0,0 +1,223 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EVP_VERIFYINIT 3" +.TH EVP_VERIFYINIT 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EVP_VerifyInit_ex, EVP_VerifyInit, EVP_VerifyUpdate, EVP_VerifyFinal \&\- EVP signature verification functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int EVP_VerifyInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type, ENGINE *impl); +\& int EVP_VerifyUpdate(EVP_MD_CTX *ctx, const void *d, unsigned int cnt); +\& int EVP_VerifyFinal(EVP_MD_CTX *ctx, unsigned char *sigbuf, unsigned int siglen, +\& EVP_PKEY *pkey); +\& +\& int EVP_VerifyInit(EVP_MD_CTX *ctx, const EVP_MD *type); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \s-1EVP\s0 signature verification routines are a high level interface to digital +signatures. +.PP +\&\fBEVP_VerifyInit_ex()\fR sets up verification context \fBctx\fR to use digest +\&\fBtype\fR from \s-1ENGINE\s0 \fBimpl\fR. \fBctx\fR must be created by calling +\&\fBEVP_MD_CTX_new()\fR before calling this function. +.PP +\&\fBEVP_VerifyUpdate()\fR hashes \fBcnt\fR bytes of data at \fBd\fR into the +verification context \fBctx\fR. This function can be called several times on the +same \fBctx\fR to include additional data. +.PP +\&\fBEVP_VerifyFinal()\fR verifies the data in \fBctx\fR using the public key \fBpkey\fR +and against the \fBsiglen\fR bytes at \fBsigbuf\fR. +.PP +\&\fBEVP_VerifyInit()\fR initializes verification context \fBctx\fR to use the default +implementation of digest \fBtype\fR. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBEVP_VerifyInit_ex()\fR and \fBEVP_VerifyUpdate()\fR return 1 for success and 0 for +failure. +.PP +\&\fBEVP_VerifyFinal()\fR returns 1 for a correct signature, 0 for failure and \-1 if some +other error occurred. +.PP +The error codes can be obtained by \fBERR_get_error\fR\|(3). +.SH "NOTES" +.IX Header "NOTES" +The \fB\s-1EVP\s0\fR interface to digital signatures should almost always be used in +preference to the low level interfaces. This is because the code then becomes +transparent to the algorithm used and much more flexible. +.PP +The call to \fBEVP_VerifyFinal()\fR internally finalizes a copy of the digest context. +This means that calls to \fBEVP_VerifyUpdate()\fR and \fBEVP_VerifyFinal()\fR can be called +later to digest and verify additional data. +.PP +Since only a copy of the digest context is ever finalized the context must +be cleaned up after use by calling \fBEVP_MD_CTX_free()\fR or a memory leak +will occur. +.SH "BUGS" +.IX Header "BUGS" +Older versions of this documentation wrongly stated that calls to +\&\fBEVP_VerifyUpdate()\fR could not be made after calling \fBEVP_VerifyFinal()\fR. +.PP +Since the public key is passed in the call to \fBEVP_SignFinal()\fR any error +relating to the private key (for example an unsuitable key and digest +combination) will not be indicated until after potentially large amounts of +data have been passed through \fBEVP_SignUpdate()\fR. +.PP +It is not possible to change the signing parameters using these function. +.PP +The previous two bugs are fixed in the newer EVP_DigestVerify*() function. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBevp\fR\|(7), +\&\fBEVP_SignInit\fR\|(3), +\&\fBEVP_DigestInit\fR\|(3), +\&\fBevp\fR\|(7), \s-1\fBHMAC\s0\fR\|(3), \s-1\fBMD2\s0\fR\|(3), +\&\s-1\fBMD5\s0\fR\|(3), \s-1\fBMDC2\s0\fR\|(3), \s-1\fBRIPEMD160\s0\fR\|(3), +\&\s-1\fBSHA1\s0\fR\|(3), \fBdgst\fR\|(1) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_aes.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_aes.3 new file mode 100644 index 00000000..ca024fcd --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_aes.3 @@ -0,0 +1,223 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EVP_AES 3" +.TH EVP_AES 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EVP_aes_128_cbc, EVP_aes_192_cbc, EVP_aes_256_cbc, EVP_aes_128_cfb, EVP_aes_192_cfb, EVP_aes_256_cfb, EVP_aes_128_cfb1, EVP_aes_192_cfb1, EVP_aes_256_cfb1, EVP_aes_128_cfb8, EVP_aes_192_cfb8, EVP_aes_256_cfb8, EVP_aes_128_cfb128, EVP_aes_192_cfb128, EVP_aes_256_cfb128, EVP_aes_128_ctr, EVP_aes_192_ctr, EVP_aes_256_ctr, EVP_aes_128_ecb, EVP_aes_192_ecb, EVP_aes_256_ecb, EVP_aes_128_ofb, EVP_aes_192_ofb, EVP_aes_256_ofb, EVP_aes_128_cbc_hmac_sha1, EVP_aes_256_cbc_hmac_sha1, EVP_aes_128_cbc_hmac_sha256, EVP_aes_256_cbc_hmac_sha256, EVP_aes_128_ccm, EVP_aes_192_ccm, EVP_aes_256_ccm, EVP_aes_128_gcm, EVP_aes_192_gcm, EVP_aes_256_gcm, EVP_aes_128_ocb, EVP_aes_192_ocb, EVP_aes_256_ocb, EVP_aes_128_wrap, EVP_aes_192_wrap, EVP_aes_256_wrap, EVP_aes_128_wrap_pad, EVP_aes_192_wrap_pad, EVP_aes_256_wrap_pad, EVP_aes_128_xts, EVP_aes_256_xts \&\- EVP AES cipher +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& const EVP_CIPHER *EVP_ciphername(void) +.Ve +.PP +\&\fIEVP_ciphername\fR is used a placeholder for any of the described cipher +functions, such as \fIEVP_aes_128_cbc\fR. +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \s-1AES\s0 encryption algorithm for \s-1EVP.\s0 +.IP "\fBEVP_aes_128_cbc()\fR, \fBEVP_aes_192_cbc()\fR, \fBEVP_aes_256_cbc()\fR, \fBEVP_aes_128_cfb()\fR, \fBEVP_aes_192_cfb()\fR, \fBEVP_aes_256_cfb()\fR, \fBEVP_aes_128_cfb1()\fR, \fBEVP_aes_192_cfb1()\fR, \fBEVP_aes_256_cfb1()\fR, \fBEVP_aes_128_cfb8()\fR, \fBEVP_aes_192_cfb8()\fR, \fBEVP_aes_256_cfb8()\fR, \fBEVP_aes_128_cfb128()\fR, \fBEVP_aes_192_cfb128()\fR, \fBEVP_aes_256_cfb128()\fR, \fBEVP_aes_128_ctr()\fR, \fBEVP_aes_192_ctr()\fR, \fBEVP_aes_256_ctr()\fR, \fBEVP_aes_128_ecb()\fR, \fBEVP_aes_192_ecb()\fR, \fBEVP_aes_256_ecb()\fR, \fBEVP_aes_128_ofb()\fR, \fBEVP_aes_192_ofb()\fR, \fBEVP_aes_256_ofb()\fR" 4 +.IX Item "EVP_aes_128_cbc(), EVP_aes_192_cbc(), EVP_aes_256_cbc(), EVP_aes_128_cfb(), EVP_aes_192_cfb(), EVP_aes_256_cfb(), EVP_aes_128_cfb1(), EVP_aes_192_cfb1(), EVP_aes_256_cfb1(), EVP_aes_128_cfb8(), EVP_aes_192_cfb8(), EVP_aes_256_cfb8(), EVP_aes_128_cfb128(), EVP_aes_192_cfb128(), EVP_aes_256_cfb128(), EVP_aes_128_ctr(), EVP_aes_192_ctr(), EVP_aes_256_ctr(), EVP_aes_128_ecb(), EVP_aes_192_ecb(), EVP_aes_256_ecb(), EVP_aes_128_ofb(), EVP_aes_192_ofb(), EVP_aes_256_ofb()" +\&\s-1AES\s0 for 128, 192 and 256 bit keys in the following modes: \s-1CBC, CFB\s0 with 128\-bit +shift, \s-1CFB\s0 with 1\-bit shift, \s-1CFB\s0 with 8\-bit shift, \s-1CTR, ECB,\s0 and \s-1OFB.\s0 +.IP "\fBEVP_aes_128_cbc_hmac_sha1()\fR, \fBEVP_aes_256_cbc_hmac_sha1()\fR" 4 +.IX Item "EVP_aes_128_cbc_hmac_sha1(), EVP_aes_256_cbc_hmac_sha1()" +Authenticated encryption with \s-1AES\s0 in \s-1CBC\s0 mode using \s-1SHA\-1\s0 as \s-1HMAC,\s0 with keys of +128 and 256 bits length respectively. The authentication tag is 160 bits long. +.Sp +\&\s-1WARNING:\s0 this is not intended for usage outside of \s-1TLS\s0 and requires calling of +some undocumented ctrl functions. These ciphers do not conform to the \s-1EVP AEAD\s0 +interface. +.IP "\fBEVP_aes_128_cbc_hmac_sha256()\fR, \fBEVP_aes_256_cbc_hmac_sha256()\fR" 4 +.IX Item "EVP_aes_128_cbc_hmac_sha256(), EVP_aes_256_cbc_hmac_sha256()" +Authenticated encryption with \s-1AES\s0 in \s-1CBC\s0 mode using \s-1SHA256\s0 (\s-1SHA\-2,\s0 256\-bits) as +\&\s-1HMAC,\s0 with keys of 128 and 256 bits length respectively. The authentication tag +is 256 bits long. +.Sp +\&\s-1WARNING:\s0 this is not intended for usage outside of \s-1TLS\s0 and requires calling of +some undocumented ctrl functions. These ciphers do not conform to the \s-1EVP AEAD\s0 +interface. +.IP "\fBEVP_aes_128_ccm()\fR, \fBEVP_aes_192_ccm()\fR, \fBEVP_aes_256_ccm()\fR, \fBEVP_aes_128_gcm()\fR, \fBEVP_aes_192_gcm()\fR, \fBEVP_aes_256_gcm()\fR, \fBEVP_aes_128_ocb()\fR, \fBEVP_aes_192_ocb()\fR, \fBEVP_aes_256_ocb()\fR" 4 +.IX Item "EVP_aes_128_ccm(), EVP_aes_192_ccm(), EVP_aes_256_ccm(), EVP_aes_128_gcm(), EVP_aes_192_gcm(), EVP_aes_256_gcm(), EVP_aes_128_ocb(), EVP_aes_192_ocb(), EVP_aes_256_ocb()" +\&\s-1AES\s0 for 128, 192 and 256 bit keys in CBC-MAC Mode (\s-1CCM\s0), Galois Counter Mode +(\s-1GCM\s0) and \s-1OCB\s0 Mode respectively. These ciphers require additional control +operations to function correctly, see the \*(L"\s-1AEAD\s0 Interface\*(R" in \fBEVP_EncryptInit\fR\|(3) +section for details. +.IP "\fBEVP_aes_128_wrap()\fR, \fBEVP_aes_192_wrap()\fR, \fBEVP_aes_256_wrap()\fR, \fBEVP_aes_128_wrap_pad()\fR, \fBEVP_aes_128_wrap()\fR, \fBEVP_aes_192_wrap()\fR, \fBEVP_aes_256_wrap()\fR, \fBEVP_aes_192_wrap_pad()\fR, \fBEVP_aes_128_wrap()\fR, \fBEVP_aes_192_wrap()\fR, \fBEVP_aes_256_wrap()\fR, \fBEVP_aes_256_wrap_pad()\fR" 4 +.IX Item "EVP_aes_128_wrap(), EVP_aes_192_wrap(), EVP_aes_256_wrap(), EVP_aes_128_wrap_pad(), EVP_aes_128_wrap(), EVP_aes_192_wrap(), EVP_aes_256_wrap(), EVP_aes_192_wrap_pad(), EVP_aes_128_wrap(), EVP_aes_192_wrap(), EVP_aes_256_wrap(), EVP_aes_256_wrap_pad()" +\&\s-1AES\s0 key wrap with 128, 192 and 256 bit keys, as according to \s-1RFC 3394\s0 section +2.2.1 (\*(L"wrap\*(R") and \s-1RFC 5649\s0 section 4.1 (\*(L"wrap with padding\*(R") respectively. +.IP "\fBEVP_aes_128_xts()\fR, \fBEVP_aes_256_xts()\fR" 4 +.IX Item "EVP_aes_128_xts(), EVP_aes_256_xts()" +\&\s-1AES XTS\s0 mode (XTS-AES) is standardized in \s-1IEEE\s0 Std. 1619\-2007 and described in \s-1NIST +SP 800\-38E.\s0 The \s-1XTS\s0 (XEX-based tweaked-codebook mode with ciphertext stealing) +mode was designed by Prof. Phillip Rogaway of University of California, Davis, +intended for encrypting data on a storage device. +.Sp +XTS-AES provides confidentiality but not authentication of data. It also +requires a key of double-length for protection of a certain key size. +In particular, \s-1XTS\-AES\-128\s0 (\fBEVP_aes_128_xts\fR) takes input of a 256\-bit key to +achieve \s-1AES\s0 128\-bit security, and \s-1XTS\-AES\-256\s0 (\fBEVP_aes_256_xts\fR) takes input +of a 512\-bit key to achieve \s-1AES\s0 256\-bit security. +.Sp +The \s-1XTS\s0 implementation in OpenSSL does not support streaming. That is there must +only be one \fBEVP_EncryptUpdate\fR\|(3) call per \fBEVP_EncryptInit_ex\fR\|(3) call (and +similarly with the \*(L"Decrypt\*(R" functions). +.Sp +The \fIiv\fR parameter to \fBEVP_EncryptInit_ex\fR\|(3) or \fBEVP_DecryptInit_ex\fR\|(3) is +the \s-1XTS\s0 \*(L"tweak\*(R" value. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +These functions return an \fB\s-1EVP_CIPHER\s0\fR structure that contains the +implementation of the symmetric cipher. See \fBEVP_CIPHER_meth_new\fR\|(3) for +details of the \fB\s-1EVP_CIPHER\s0\fR structure. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBevp\fR\|(7), +\&\fBEVP_EncryptInit\fR\|(3), +\&\fBEVP_CIPHER_meth_new\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017\-2020 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_aria.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_aria.3 new file mode 100644 index 00000000..a75afbcf --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_aria.3 @@ -0,0 +1,182 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EVP_ARIA 3" +.TH EVP_ARIA 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EVP_aria_128_cbc, EVP_aria_192_cbc, EVP_aria_256_cbc, EVP_aria_128_cfb, EVP_aria_192_cfb, EVP_aria_256_cfb, EVP_aria_128_cfb1, EVP_aria_192_cfb1, EVP_aria_256_cfb1, EVP_aria_128_cfb8, EVP_aria_192_cfb8, EVP_aria_256_cfb8, EVP_aria_128_cfb128, EVP_aria_192_cfb128, EVP_aria_256_cfb128, EVP_aria_128_ctr, EVP_aria_192_ctr, EVP_aria_256_ctr, EVP_aria_128_ecb, EVP_aria_192_ecb, EVP_aria_256_ecb, EVP_aria_128_ofb, EVP_aria_192_ofb, EVP_aria_256_ofb, EVP_aria_128_ccm, EVP_aria_192_ccm, EVP_aria_256_ccm, EVP_aria_128_gcm, EVP_aria_192_gcm, EVP_aria_256_gcm, \&\- EVP ARIA cipher +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& const EVP_CIPHER *EVP_ciphername(void) +.Ve +.PP +\&\fIEVP_ciphername\fR is used a placeholder for any of the described cipher +functions, such as \fIEVP_aria_128_cbc\fR. +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \s-1ARIA\s0 encryption algorithm for \s-1EVP.\s0 +.IP "\fBEVP_aria_128_cbc()\fR, \fBEVP_aria_192_cbc()\fR, \fBEVP_aria_256_cbc()\fR, \fBEVP_aria_128_cfb()\fR, \fBEVP_aria_192_cfb()\fR, \fBEVP_aria_256_cfb()\fR, \fBEVP_aria_128_cfb1()\fR, \fBEVP_aria_192_cfb1()\fR, \fBEVP_aria_256_cfb1()\fR, \fBEVP_aria_128_cfb8()\fR, \fBEVP_aria_192_cfb8()\fR, \fBEVP_aria_256_cfb8()\fR, \fBEVP_aria_128_cfb128()\fR, \fBEVP_aria_192_cfb128()\fR, \fBEVP_aria_256_cfb128()\fR, \fBEVP_aria_128_ctr()\fR, \fBEVP_aria_192_ctr()\fR, \fBEVP_aria_256_ctr()\fR, \fBEVP_aria_128_ecb()\fR, \fBEVP_aria_192_ecb()\fR, \fBEVP_aria_256_ecb()\fR, \fBEVP_aria_128_ofb()\fR, \fBEVP_aria_192_ofb()\fR, \fBEVP_aria_256_ofb()\fR" 4 +.IX Item "EVP_aria_128_cbc(), EVP_aria_192_cbc(), EVP_aria_256_cbc(), EVP_aria_128_cfb(), EVP_aria_192_cfb(), EVP_aria_256_cfb(), EVP_aria_128_cfb1(), EVP_aria_192_cfb1(), EVP_aria_256_cfb1(), EVP_aria_128_cfb8(), EVP_aria_192_cfb8(), EVP_aria_256_cfb8(), EVP_aria_128_cfb128(), EVP_aria_192_cfb128(), EVP_aria_256_cfb128(), EVP_aria_128_ctr(), EVP_aria_192_ctr(), EVP_aria_256_ctr(), EVP_aria_128_ecb(), EVP_aria_192_ecb(), EVP_aria_256_ecb(), EVP_aria_128_ofb(), EVP_aria_192_ofb(), EVP_aria_256_ofb()" +\&\s-1ARIA\s0 for 128, 192 and 256 bit keys in the following modes: \s-1CBC, CFB\s0 with +128\-bit shift, \s-1CFB\s0 with 1\-bit shift, \s-1CFB\s0 with 8\-bit shift, \s-1CTR, ECB\s0 and \s-1OFB.\s0 +.IP "\fBEVP_aria_128_ccm()\fR, \fBEVP_aria_192_ccm()\fR, \fBEVP_aria_256_ccm()\fR, \fBEVP_aria_128_gcm()\fR, \fBEVP_aria_192_gcm()\fR, \fBEVP_aria_256_gcm()\fR," 4 +.IX Item "EVP_aria_128_ccm(), EVP_aria_192_ccm(), EVP_aria_256_ccm(), EVP_aria_128_gcm(), EVP_aria_192_gcm(), EVP_aria_256_gcm()," +\&\s-1ARIA\s0 for 128, 192 and 256 bit keys in CBC-MAC Mode (\s-1CCM\s0) and Galois Counter +Mode (\s-1GCM\s0). These ciphers require additional control operations to function +correctly, see the \*(L"\s-1AEAD\s0 Interface\*(R" in \fBEVP_EncryptInit\fR\|(3) section for details. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +These functions return an \fB\s-1EVP_CIPHER\s0\fR structure that contains the +implementation of the symmetric cipher. See \fBEVP_CIPHER_meth_new\fR\|(3) for +details of the \fB\s-1EVP_CIPHER\s0\fR structure. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBevp\fR\|(7), +\&\fBEVP_EncryptInit\fR\|(3), +\&\fBEVP_CIPHER_meth_new\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_bf_cbc.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_bf_cbc.3 new file mode 100644 index 00000000..40c2ae1f --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_bf_cbc.3 @@ -0,0 +1,179 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EVP_BF_CBC 3" +.TH EVP_BF_CBC 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EVP_bf_cbc, EVP_bf_cfb, EVP_bf_cfb64, EVP_bf_ecb, EVP_bf_ofb \&\- EVP Blowfish cipher +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& const EVP_CIPHER *EVP_bf_cbc(void) +\& const EVP_CIPHER *EVP_bf_cfb(void) +\& const EVP_CIPHER *EVP_bf_cfb64(void) +\& const EVP_CIPHER *EVP_bf_ecb(void) +\& const EVP_CIPHER *EVP_bf_ofb(void) +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The Blowfish encryption algorithm for \s-1EVP.\s0 +.PP +This is a variable key length cipher. +.IP "\fBEVP_bf_cbc()\fR, \fBEVP_bf_cfb()\fR, \fBEVP_bf_cfb64()\fR, \fBEVP_bf_ecb()\fR, \fBEVP_bf_ofb()\fR" 4 +.IX Item "EVP_bf_cbc(), EVP_bf_cfb(), EVP_bf_cfb64(), EVP_bf_ecb(), EVP_bf_ofb()" +Blowfish encryption algorithm in \s-1CBC, CFB, ECB\s0 and \s-1OFB\s0 modes respectively. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +These functions return an \fB\s-1EVP_CIPHER\s0\fR structure that contains the +implementation of the symmetric cipher. See \fBEVP_CIPHER_meth_new\fR\|(3) for +details of the \fB\s-1EVP_CIPHER\s0\fR structure. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBevp\fR\|(7), +\&\fBEVP_EncryptInit\fR\|(3), +\&\fBEVP_CIPHER_meth_new\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_blake2b512.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_blake2b512.3 new file mode 100644 index 00000000..a46b8902 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_blake2b512.3 @@ -0,0 +1,186 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EVP_BLAKE2B512 3" +.TH EVP_BLAKE2B512 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EVP_blake2b512, EVP_blake2s256 \&\- BLAKE2 For EVP +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& const EVP_MD *EVP_blake2b512(void); +\& const EVP_MD *EVP_blake2s256(void); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\s-1BLAKE2\s0 is an improved version of \s-1BLAKE,\s0 which was submitted to the \s-1NIST SHA\-3\s0 +algorithm competition. The BLAKE2s and BLAKE2b algorithms are described in +\&\s-1RFC 7693.\s0 +.IP "\fBEVP_blake2s256()\fR" 4 +.IX Item "EVP_blake2s256()" +The BLAKE2s algorithm that produces a 256\-bit output from a given input. +.IP "\fBEVP_blake2b512()\fR" 4 +.IX Item "EVP_blake2b512()" +The BLAKE2b algorithm that produces a 512\-bit output from a given input. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +These functions return a \fB\s-1EVP_MD\s0\fR structure that contains the +implementation of the symmetric cipher. See \fBEVP_MD_meth_new\fR\|(3) for +details of the \fB\s-1EVP_MD\s0\fR structure. +.SH "CONFORMING TO" +.IX Header "CONFORMING TO" +\&\s-1RFC 7693.\s0 +.SH "NOTES" +.IX Header "NOTES" +While the BLAKE2b and BLAKE2s algorithms supports a variable length digest, +this implementation outputs a digest of a fixed length (the maximum length +supported), which is 512\-bits for BLAKE2b and 256\-bits for BLAKE2s. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBevp\fR\|(7), +\&\fBEVP_DigestInit\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_camellia.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_camellia.3 new file mode 100644 index 00000000..4eefb923 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_camellia.3 @@ -0,0 +1,177 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EVP_CAMELLIA 3" +.TH EVP_CAMELLIA 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EVP_camellia_128_cbc, EVP_camellia_192_cbc, EVP_camellia_256_cbc, EVP_camellia_128_cfb, EVP_camellia_192_cfb, EVP_camellia_256_cfb, EVP_camellia_128_cfb1, EVP_camellia_192_cfb1, EVP_camellia_256_cfb1, EVP_camellia_128_cfb8, EVP_camellia_192_cfb8, EVP_camellia_256_cfb8, EVP_camellia_128_cfb128, EVP_camellia_192_cfb128, EVP_camellia_256_cfb128, EVP_camellia_128_ctr, EVP_camellia_192_ctr, EVP_camellia_256_ctr, EVP_camellia_128_ecb, EVP_camellia_192_ecb, EVP_camellia_256_ecb, EVP_camellia_128_ofb, EVP_camellia_192_ofb, EVP_camellia_256_ofb \&\- EVP Camellia cipher +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& const EVP_CIPHER *EVP_ciphername(void) +.Ve +.PP +\&\fIEVP_ciphername\fR is used a placeholder for any of the described cipher +functions, such as \fIEVP_camellia_128_cbc\fR. +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The Camellia encryption algorithm for \s-1EVP.\s0 +.IP "\fBEVP_camellia_128_cbc()\fR, \fBEVP_camellia_192_cbc()\fR, \fBEVP_camellia_256_cbc()\fR, \fBEVP_camellia_128_cfb()\fR, \fBEVP_camellia_192_cfb()\fR, \fBEVP_camellia_256_cfb()\fR, \fBEVP_camellia_128_cfb1()\fR, \fBEVP_camellia_192_cfb1()\fR, \fBEVP_camellia_256_cfb1()\fR, \fBEVP_camellia_128_cfb8()\fR, \fBEVP_camellia_192_cfb8()\fR, \fBEVP_camellia_256_cfb8()\fR, \fBEVP_camellia_128_cfb128()\fR, \fBEVP_camellia_192_cfb128()\fR, \fBEVP_camellia_256_cfb128()\fR, \fBEVP_camellia_128_ctr()\fR, \fBEVP_camellia_192_ctr()\fR, \fBEVP_camellia_256_ctr()\fR, \fBEVP_camellia_128_ecb()\fR, \fBEVP_camellia_192_ecb()\fR, \fBEVP_camellia_256_ecb()\fR, \fBEVP_camellia_128_ofb()\fR, \fBEVP_camellia_192_ofb()\fR, \fBEVP_camellia_256_ofb()\fR" 4 +.IX Item "EVP_camellia_128_cbc(), EVP_camellia_192_cbc(), EVP_camellia_256_cbc(), EVP_camellia_128_cfb(), EVP_camellia_192_cfb(), EVP_camellia_256_cfb(), EVP_camellia_128_cfb1(), EVP_camellia_192_cfb1(), EVP_camellia_256_cfb1(), EVP_camellia_128_cfb8(), EVP_camellia_192_cfb8(), EVP_camellia_256_cfb8(), EVP_camellia_128_cfb128(), EVP_camellia_192_cfb128(), EVP_camellia_256_cfb128(), EVP_camellia_128_ctr(), EVP_camellia_192_ctr(), EVP_camellia_256_ctr(), EVP_camellia_128_ecb(), EVP_camellia_192_ecb(), EVP_camellia_256_ecb(), EVP_camellia_128_ofb(), EVP_camellia_192_ofb(), EVP_camellia_256_ofb()" +Camellia for 128, 192 and 256 bit keys in the following modes: \s-1CBC, CFB\s0 with +128\-bit shift, \s-1CFB\s0 with 1\-bit shift, \s-1CFB\s0 with 8\-bit shift, \s-1CTR, ECB\s0 and \s-1OFB.\s0 +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +These functions return an \fB\s-1EVP_CIPHER\s0\fR structure that contains the +implementation of the symmetric cipher. See \fBEVP_CIPHER_meth_new\fR\|(3) for +details of the \fB\s-1EVP_CIPHER\s0\fR structure. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBevp\fR\|(7), +\&\fBEVP_EncryptInit\fR\|(3), +\&\fBEVP_CIPHER_meth_new\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_cast5_cbc.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_cast5_cbc.3 new file mode 100644 index 00000000..05e420aa --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_cast5_cbc.3 @@ -0,0 +1,179 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EVP_CAST5_CBC 3" +.TH EVP_CAST5_CBC 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EVP_cast5_cbc, EVP_cast5_cfb, EVP_cast5_cfb64, EVP_cast5_ecb, EVP_cast5_ofb \&\- EVP CAST cipher +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& const EVP_CIPHER *EVP_cast5_cbc(void) +\& const EVP_CIPHER *EVP_cast5_cfb(void) +\& const EVP_CIPHER *EVP_cast5_cfb64(void) +\& const EVP_CIPHER *EVP_cast5_ecb(void) +\& const EVP_CIPHER *EVP_cast5_ofb(void) +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \s-1CAST\s0 encryption algorithm for \s-1EVP.\s0 +.PP +This is a variable key length cipher. +.IP "\fBEVP_cast5_cbc()\fR, \fBEVP_cast5_ecb()\fR, \fBEVP_cast5_cfb()\fR, \fBEVP_cast5_cfb64()\fR, \fBEVP_cast5_ofb()\fR" 4 +.IX Item "EVP_cast5_cbc(), EVP_cast5_ecb(), EVP_cast5_cfb(), EVP_cast5_cfb64(), EVP_cast5_ofb()" +\&\s-1CAST\s0 encryption algorithm in \s-1CBC, ECB, CFB\s0 and \s-1OFB\s0 modes respectively. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +These functions return an \fB\s-1EVP_CIPHER\s0\fR structure that contains the +implementation of the symmetric cipher. See \fBEVP_CIPHER_meth_new\fR\|(3) for +details of the \fB\s-1EVP_CIPHER\s0\fR structure. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBevp\fR\|(7), +\&\fBEVP_EncryptInit\fR\|(3), +\&\fBEVP_CIPHER_meth_new\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_chacha20.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_chacha20.3 new file mode 100644 index 00000000..305cd63d --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_chacha20.3 @@ -0,0 +1,188 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EVP_CHACHA20 3" +.TH EVP_CHACHA20 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EVP_chacha20, EVP_chacha20_poly1305 \&\- EVP ChaCha20 stream cipher +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& const EVP_CIPHER *EVP_chacha20(void) +\& const EVP_CIPHER *EVP_chacha20_poly1305(void) +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The ChaCha20 stream cipher for \s-1EVP.\s0 +.IP "\fBEVP_chacha20()\fR" 4 +.IX Item "EVP_chacha20()" +The ChaCha20 stream cipher. The key length is 256 bits, the \s-1IV\s0 is 128 bits long. +The first 32 bits consists of a counter in little-endian order followed by a 96 +bit nonce. For example a nonce of: +.Sp +000000000000000000000002 +.Sp +With an initial counter of 42 (2a in hex) would be expressed as: +.Sp +2a000000000000000000000000000002 +.IP "\fBEVP_chacha20_poly1305()\fR" 4 +.IX Item "EVP_chacha20_poly1305()" +Authenticated encryption with ChaCha20\-Poly1305. Like \fBEVP_chacha20()\fR, the key +is 256 bits and the \s-1IV\s0 is 96 bits. This supports additional authenticated data +(\s-1AAD\s0) and produces a 128\-bit authentication tag. See the +\&\*(L"\s-1AEAD\s0 Interface\*(R" in \fBEVP_EncryptInit\fR\|(3) section for more information. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +These functions return an \fB\s-1EVP_CIPHER\s0\fR structure that contains the +implementation of the symmetric cipher. See \fBEVP_CIPHER_meth_new\fR\|(3) for +details of the \fB\s-1EVP_CIPHER\s0\fR structure. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBevp\fR\|(7), +\&\fBEVP_EncryptInit\fR\|(3), +\&\fBEVP_CIPHER_meth_new\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_des.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_des.3 new file mode 100644 index 00000000..ece46dd0 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_des.3 @@ -0,0 +1,187 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EVP_DES 3" +.TH EVP_DES 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EVP_des_cbc, EVP_des_cfb, EVP_des_cfb1, EVP_des_cfb8, EVP_des_cfb64, EVP_des_ecb, EVP_des_ofb, EVP_des_ede, EVP_des_ede_cbc, EVP_des_ede_cfb, EVP_des_ede_cfb64, EVP_des_ede_ecb, EVP_des_ede_ofb, EVP_des_ede3, EVP_des_ede3_cbc, EVP_des_ede3_cfb, EVP_des_ede3_cfb1, EVP_des_ede3_cfb8, EVP_des_ede3_cfb64, EVP_des_ede3_ecb, EVP_des_ede3_ofb, EVP_des_ede3_wrap \&\- EVP DES cipher +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& const EVP_CIPHER *EVP_ciphername(void) +.Ve +.PP +\&\fIEVP_ciphername\fR is used a placeholder for any of the described cipher +functions, such as \fIEVP_des_cbc\fR. +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \s-1DES\s0 encryption algorithm for \s-1EVP.\s0 +.IP "\fBEVP_des_cbc()\fR, \fBEVP_des_ecb()\fR, \fBEVP_des_cfb()\fR, \fBEVP_des_cfb1()\fR, \fBEVP_des_cfb8()\fR, \fBEVP_des_cfb64()\fR, \fBEVP_des_ofb()\fR" 4 +.IX Item "EVP_des_cbc(), EVP_des_ecb(), EVP_des_cfb(), EVP_des_cfb1(), EVP_des_cfb8(), EVP_des_cfb64(), EVP_des_ofb()" +\&\s-1DES\s0 in \s-1CBC, ECB, CFB\s0 with 64\-bit shift, \s-1CFB\s0 with 1\-bit shift, \s-1CFB\s0 with 8\-bit +shift and \s-1OFB\s0 modes. +.IP "\fBEVP_des_ede()\fR, \fBEVP_des_ede_cbc()\fR, \fBEVP_des_ede_cfb()\fR, \fBEVP_des_ede_cfb64()\fR, \fBEVP_des_ede_ecb()\fR, \fBEVP_des_ede_ofb()\fR" 4 +.IX Item "EVP_des_ede(), EVP_des_ede_cbc(), EVP_des_ede_cfb(), EVP_des_ede_cfb64(), EVP_des_ede_ecb(), EVP_des_ede_ofb()" +Two key triple \s-1DES\s0 in \s-1ECB, CBC, CFB\s0 with 64\-bit shift and \s-1OFB\s0 modes. +.IP "\fBEVP_des_ede3()\fR, \fBEVP_des_ede3_cbc()\fR, \fBEVP_des_ede3_cfb()\fR, \fBEVP_des_ede3_cfb1()\fR, \fBEVP_des_ede3_cfb8()\fR, \fBEVP_des_ede3_cfb64()\fR, \fBEVP_des_ede3_ecb()\fR, \fBEVP_des_ede3_ofb()\fR" 4 +.IX Item "EVP_des_ede3(), EVP_des_ede3_cbc(), EVP_des_ede3_cfb(), EVP_des_ede3_cfb1(), EVP_des_ede3_cfb8(), EVP_des_ede3_cfb64(), EVP_des_ede3_ecb(), EVP_des_ede3_ofb()" +Three-key triple \s-1DES\s0 in \s-1ECB, CBC, CFB\s0 with 64\-bit shift, \s-1CFB\s0 with 1\-bit shift, +\&\s-1CFB\s0 with 8\-bit shift and \s-1OFB\s0 modes. +.IP "\fBEVP_des_ede3_wrap()\fR" 4 +.IX Item "EVP_des_ede3_wrap()" +Triple-DES key wrap according to \s-1RFC 3217\s0 Section 3. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +These functions return an \fB\s-1EVP_CIPHER\s0\fR structure that contains the +implementation of the symmetric cipher. See \fBEVP_CIPHER_meth_new\fR\|(3) for +details of the \fB\s-1EVP_CIPHER\s0\fR structure. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBevp\fR\|(7), +\&\fBEVP_EncryptInit\fR\|(3), +\&\fBEVP_CIPHER_meth_new\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_desx_cbc.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_desx_cbc.3 new file mode 100644 index 00000000..1b14f62f --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_desx_cbc.3 @@ -0,0 +1,175 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EVP_DESX_CBC 3" +.TH EVP_DESX_CBC 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EVP_desx_cbc \&\- EVP DES\-X cipher +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& const EVP_CIPHER *EVP_desx_cbc(void) +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The DES-X encryption algorithm for \s-1EVP.\s0 +.PP +All modes below use a key length of 128 bits and acts on blocks of 128\-bits. +.IP "\fBEVP_desx_cbc()\fR" 4 +.IX Item "EVP_desx_cbc()" +The DES-X algorithm in \s-1CBC\s0 mode. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +These functions return an \fB\s-1EVP_CIPHER\s0\fR structure that contains the +implementation of the symmetric cipher. See \fBEVP_CIPHER_meth_new\fR\|(3) for +details of the \fB\s-1EVP_CIPHER\s0\fR structure. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBevp\fR\|(7), +\&\fBEVP_EncryptInit\fR\|(3), +\&\fBEVP_CIPHER_meth_new\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_idea_cbc.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_idea_cbc.3 new file mode 100644 index 00000000..570fe2cf --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_idea_cbc.3 @@ -0,0 +1,177 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EVP_IDEA_CBC 3" +.TH EVP_IDEA_CBC 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EVP_idea_cbc, EVP_idea_cfb, EVP_idea_cfb64, EVP_idea_ecb, EVP_idea_ofb \&\- EVP IDEA cipher +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& const EVP_CIPHER *EVP_idea_cbc(void) +\& const EVP_CIPHER *EVP_idea_cfb(void) +\& const EVP_CIPHER *EVP_idea_cfb64(void) +\& const EVP_CIPHER *EVP_idea_ecb(void) +\& const EVP_CIPHER *EVP_idea_ofb(void) +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \s-1IDEA\s0 encryption algorithm for \s-1EVP.\s0 +.IP "\fBEVP_idea_cbc()\fR, \fBEVP_idea_cfb()\fR, \fBEVP_idea_cfb64()\fR, \fBEVP_idea_ecb()\fR, \fBEVP_idea_ofb()\fR" 4 +.IX Item "EVP_idea_cbc(), EVP_idea_cfb(), EVP_idea_cfb64(), EVP_idea_ecb(), EVP_idea_ofb()" +The \s-1IDEA\s0 encryption algorithm in \s-1CBC, CFB, ECB\s0 and \s-1OFB\s0 modes respectively. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +These functions return an \fB\s-1EVP_CIPHER\s0\fR structure that contains the +implementation of the symmetric cipher. See \fBEVP_CIPHER_meth_new\fR\|(3) for +details of the \fB\s-1EVP_CIPHER\s0\fR structure. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBevp\fR\|(7), +\&\fBEVP_EncryptInit\fR\|(3), +\&\fBEVP_CIPHER_meth_new\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_md2.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_md2.3 new file mode 100644 index 00000000..549fd02c --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_md2.3 @@ -0,0 +1,176 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EVP_MD2 3" +.TH EVP_MD2 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EVP_md2 \&\- MD2 For EVP +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& const EVP_MD *EVP_md2(void); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\s-1MD2\s0 is a cryptographic hash function standardized in \s-1RFC 1319\s0 and designed by +Ronald Rivest. +.IP "\fBEVP_md2()\fR" 4 +.IX Item "EVP_md2()" +The \s-1MD2\s0 algorithm which produces a 128\-bit output from a given input. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +These functions return a \fB\s-1EVP_MD\s0\fR structure that contains the +implementation of the symmetric cipher. See \fBEVP_MD_meth_new\fR\|(3) for +details of the \fB\s-1EVP_MD\s0\fR structure. +.SH "CONFORMING TO" +.IX Header "CONFORMING TO" +\&\s-1IETF RFC 1319.\s0 +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBevp\fR\|(7), +\&\fBEVP_DigestInit\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_md4.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_md4.3 new file mode 100644 index 00000000..1456dbc6 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_md4.3 @@ -0,0 +1,176 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EVP_MD4 3" +.TH EVP_MD4 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EVP_md4 \&\- MD4 For EVP +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& const EVP_MD *EVP_md4(void); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\s-1MD4\s0 is a cryptographic hash function standardized in \s-1RFC 1320\s0 and designed by +Ronald Rivest, first published in 1990. +.IP "\fBEVP_md4()\fR" 4 +.IX Item "EVP_md4()" +The \s-1MD4\s0 algorithm which produces a 128\-bit output from a given input. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +These functions return a \fB\s-1EVP_MD\s0\fR structure that contains the +implementation of the symmetric cipher. See \fBEVP_MD_meth_new\fR\|(3) for +details of the \fB\s-1EVP_MD\s0\fR structure. +.SH "CONFORMING TO" +.IX Header "CONFORMING TO" +\&\s-1IETF RFC 1320.\s0 +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBevp\fR\|(7), +\&\fBEVP_DigestInit\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_md5.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_md5.3 new file mode 100644 index 00000000..81a54988 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_md5.3 @@ -0,0 +1,186 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EVP_MD5 3" +.TH EVP_MD5 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EVP_md5, EVP_md5_sha1 \&\- MD5 For EVP +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& const EVP_MD *EVP_md5(void); +\& const EVP_MD *EVP_md5_sha1(void); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\s-1MD5\s0 is a cryptographic hash function standardized in \s-1RFC 1321\s0 and designed by +Ronald Rivest. +.PP +The \s-1CMU\s0 Software Engineering Institute considers \s-1MD5\s0 unsuitable for further +use since its security has been severely compromised. +.IP "\fBEVP_md5()\fR" 4 +.IX Item "EVP_md5()" +The \s-1MD5\s0 algorithm which produces a 128\-bit output from a given input. +.IP "\fBEVP_md5_sha1()\fR" 4 +.IX Item "EVP_md5_sha1()" +A hash algorithm of \s-1SSL\s0 v3 that combines \s-1MD5\s0 with \s-1SHA\-1\s0 as described in \s-1RFC +6101.\s0 +.Sp +\&\s-1WARNING:\s0 this algorithm is not intended for non-SSL usage. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +These functions return a \fB\s-1EVP_MD\s0\fR structure that contains the +implementation of the symmetric cipher. See \fBEVP_MD_meth_new\fR\|(3) for +details of the \fB\s-1EVP_MD\s0\fR structure. +.SH "CONFORMING TO" +.IX Header "CONFORMING TO" +\&\s-1IETF RFC 1321.\s0 +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBevp\fR\|(7), +\&\fBEVP_DigestInit\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_mdc2.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_mdc2.3 new file mode 100644 index 00000000..c6152723 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_mdc2.3 @@ -0,0 +1,177 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EVP_MDC2 3" +.TH EVP_MDC2 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EVP_mdc2 \&\- MDC\-2 For EVP +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& const EVP_MD *EVP_mdc2(void); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\s-1MDC\-2\s0 (Modification Detection Code 2 or Meyer-Schilling) is a cryptographic +hash function based on a block cipher. +.IP "\fBEVP_mdc2()\fR" 4 +.IX Item "EVP_mdc2()" +The \s-1MDC\-2DES\s0 algorithm of using \s-1MDC\-2\s0 with the \s-1DES\s0 block cipher. It produces a +128\-bit output from a given input. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +These functions return a \fB\s-1EVP_MD\s0\fR structure that contains the +implementation of the symmetric cipher. See \fBEVP_MD_meth_new\fR\|(3) for +details of the \fB\s-1EVP_MD\s0\fR structure. +.SH "CONFORMING TO" +.IX Header "CONFORMING TO" +\&\s-1ISO/IEC 10118\-2:2000\s0 Hash-Function 2, with \s-1DES\s0 as the underlying block cipher. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBevp\fR\|(7), +\&\fBEVP_DigestInit\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_rc2_cbc.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_rc2_cbc.3 new file mode 100644 index 00000000..1a355df8 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_rc2_cbc.3 @@ -0,0 +1,189 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EVP_RC2_CBC 3" +.TH EVP_RC2_CBC 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EVP_rc2_cbc, EVP_rc2_cfb, EVP_rc2_cfb64, EVP_rc2_ecb, EVP_rc2_ofb, EVP_rc2_40_cbc, EVP_rc2_64_cbc \&\- EVP RC2 cipher +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& const EVP_CIPHER *EVP_rc2_cbc(void) +\& const EVP_CIPHER *EVP_rc2_cfb(void) +\& const EVP_CIPHER *EVP_rc2_cfb64(void) +\& const EVP_CIPHER *EVP_rc2_ecb(void) +\& const EVP_CIPHER *EVP_rc2_ofb(void) +\& const EVP_CIPHER *EVP_rc2_40_cbc(void) +\& const EVP_CIPHER *EVP_rc2_64_cbc(void) +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \s-1RC2\s0 encryption algorithm for \s-1EVP.\s0 +.IP "\fBEVP_rc2_cbc()\fR, \fBEVP_rc2_cfb()\fR, \fBEVP_rc2_cfb64()\fR, \fBEVP_rc2_ecb()\fR, \fBEVP_rc2_ofb()\fR" 4 +.IX Item "EVP_rc2_cbc(), EVP_rc2_cfb(), EVP_rc2_cfb64(), EVP_rc2_ecb(), EVP_rc2_ofb()" +\&\s-1RC2\s0 encryption algorithm in \s-1CBC, CFB, ECB\s0 and \s-1OFB\s0 modes respectively. This is a +variable key length cipher with an additional parameter called \*(L"effective key +bits\*(R" or \*(L"effective key length\*(R". By default both are set to 128 bits. +.IP "\fBEVP_rc2_40_cbc()\fR, \fBEVP_rc2_64_cbc()\fR" 4 +.IX Item "EVP_rc2_40_cbc(), EVP_rc2_64_cbc()" +\&\s-1RC2\s0 algorithm in \s-1CBC\s0 mode with a default key length and effective key length of +40 and 64 bits. +.Sp +\&\s-1WARNING:\s0 these functions are obsolete. Their usage should be replaced with the +\&\fBEVP_rc2_cbc()\fR, \fBEVP_CIPHER_CTX_set_key_length()\fR and \fBEVP_CIPHER_CTX_ctrl()\fR +functions to set the key length and effective key length. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +These functions return an \fB\s-1EVP_CIPHER\s0\fR structure that contains the +implementation of the symmetric cipher. See \fBEVP_CIPHER_meth_new\fR\|(3) for +details of the \fB\s-1EVP_CIPHER\s0\fR structure. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBevp\fR\|(7), +\&\fBEVP_EncryptInit\fR\|(3), +\&\fBEVP_CIPHER_meth_new\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_rc4.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_rc4.3 new file mode 100644 index 00000000..5cb98510 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_rc4.3 @@ -0,0 +1,189 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EVP_RC4 3" +.TH EVP_RC4 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EVP_rc4, EVP_rc4_40, EVP_rc4_hmac_md5 \&\- EVP RC4 stream cipher +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& const EVP_CIPHER *EVP_rc4(void) +\& const EVP_CIPHER *EVP_rc4_40(void) +\& const EVP_CIPHER *EVP_rc4_hmac_md5(void) +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \s-1RC4\s0 stream cipher for \s-1EVP.\s0 +.IP "\fBEVP_rc4()\fR" 4 +.IX Item "EVP_rc4()" +\&\s-1RC4\s0 stream cipher. This is a variable key length cipher with a default key +length of 128 bits. +.IP "\fBEVP_rc4_40()\fR" 4 +.IX Item "EVP_rc4_40()" +\&\s-1RC4\s0 stream cipher with 40 bit key length. +.Sp +\&\s-1WARNING:\s0 this function is obsolete. Its usage should be replaced with the +\&\fBEVP_rc4()\fR and the \fBEVP_CIPHER_CTX_set_key_length()\fR functions. +.IP "\fBEVP_rc4_hmac_md5()\fR" 4 +.IX Item "EVP_rc4_hmac_md5()" +Authenticated encryption with the \s-1RC4\s0 stream cipher with \s-1MD5\s0 as \s-1HMAC.\s0 +.Sp +\&\s-1WARNING:\s0 this is not intended for usage outside of \s-1TLS\s0 and requires calling of +some undocumented ctrl functions. These ciphers do not conform to the \s-1EVP AEAD\s0 +interface. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +These functions return an \fB\s-1EVP_CIPHER\s0\fR structure that contains the +implementation of the symmetric cipher. See \fBEVP_CIPHER_meth_new\fR\|(3) for +details of the \fB\s-1EVP_CIPHER\s0\fR structure. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBevp\fR\|(7), +\&\fBEVP_EncryptInit\fR\|(3), +\&\fBEVP_CIPHER_meth_new\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_rc5_32_12_16_cbc.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_rc5_32_12_16_cbc.3 new file mode 100644 index 00000000..45cc8af1 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_rc5_32_12_16_cbc.3 @@ -0,0 +1,196 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EVP_RC5_32_12_16_CBC 3" +.TH EVP_RC5_32_12_16_CBC 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EVP_rc5_32_12_16_cbc, EVP_rc5_32_12_16_cfb, EVP_rc5_32_12_16_cfb64, EVP_rc5_32_12_16_ecb, EVP_rc5_32_12_16_ofb \&\- EVP RC5 cipher +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& const EVP_CIPHER *EVP_rc5_32_12_16_cbc(void) +\& const EVP_CIPHER *EVP_rc5_32_12_16_cfb(void) +\& const EVP_CIPHER *EVP_rc5_32_12_16_cfb64(void) +\& const EVP_CIPHER *EVP_rc5_32_12_16_ecb(void) +\& const EVP_CIPHER *EVP_rc5_32_12_16_ofb(void) +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \s-1RC5\s0 encryption algorithm for \s-1EVP.\s0 +.IP "\fBEVP_rc5_32_12_16_cbc()\fR, \fBEVP_rc5_32_12_16_cfb()\fR, \fBEVP_rc5_32_12_16_cfb64()\fR, \fBEVP_rc5_32_12_16_ecb()\fR, \fBEVP_rc5_32_12_16_ofb()\fR" 4 +.IX Item "EVP_rc5_32_12_16_cbc(), EVP_rc5_32_12_16_cfb(), EVP_rc5_32_12_16_cfb64(), EVP_rc5_32_12_16_ecb(), EVP_rc5_32_12_16_ofb()" +\&\s-1RC5\s0 encryption algorithm in \s-1CBC, CFB, ECB\s0 and \s-1OFB\s0 modes respectively. This is a +variable key length cipher with an additional \*(L"number of rounds\*(R" parameter. By +default the key length is set to 128 bits and 12 rounds. Alternative key lengths +can be set using \fBEVP_CIPHER_CTX_set_key_length\fR\|(3). The maximum key length is +2040 bits. +.Sp +The following rc5 specific \fIctrl\fRs are supported (see +\&\fBEVP_CIPHER_CTX_ctrl\fR\|(3)). +.RS 4 +.IP "EVP_CIPHER_CTX_ctrl(ctx, \s-1EVP_CTRL_SET_RC5_ROUNDS,\s0 rounds, \s-1NULL\s0)" 4 +.IX Item "EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_SET_RC5_ROUNDS, rounds, NULL)" +Sets the number of rounds to \fBrounds\fR. This must be one of \s-1RC5_8_ROUNDS, +RC5_12_ROUNDS\s0 or \s-1RC5_16_ROUNDS.\s0 +.IP "EVP_CIPHER_CTX_ctrl(ctx, \s-1EVP_CTRL_GET_RC5_ROUNDS, 0,\s0 &rounds)" 4 +.IX Item "EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GET_RC5_ROUNDS, 0, &rounds)" +Stores the number of rounds currently configured in \fB*rounds\fR where \fB*rounds\fR +is an int. +.RE +.RS 4 +.RE +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +These functions return an \fB\s-1EVP_CIPHER\s0\fR structure that contains the +implementation of the symmetric cipher. See \fBEVP_CIPHER_meth_new\fR\|(3) for +details of the \fB\s-1EVP_CIPHER\s0\fR structure. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBevp\fR\|(7), +\&\fBEVP_EncryptInit\fR\|(3), +\&\fBEVP_CIPHER_meth_new\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_ripemd160.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_ripemd160.3 new file mode 100644 index 00000000..4582df97 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_ripemd160.3 @@ -0,0 +1,176 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EVP_RIPEMD160 3" +.TH EVP_RIPEMD160 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EVP_ripemd160 \&\- RIPEMD160 For EVP +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& const EVP_MD *EVP_ripemd160(void); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\s-1RIPEMD\-160\s0 is a cryptographic hash function first published in 1996 belonging +to the \s-1RIPEMD\s0 family (\s-1RACE\s0 Integrity Primitives Evaluation Message Digest). +.IP "\fBEVP_ripemd160()\fR" 4 +.IX Item "EVP_ripemd160()" +The \s-1RIPEMD\-160\s0 algorithm which produces a 160\-bit output from a given input. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +These functions return a \fB\s-1EVP_MD\s0\fR structure that contains the +implementation of the symmetric cipher. See \fBEVP_MD_meth_new\fR\|(3) for +details of the \fB\s-1EVP_MD\s0\fR structure. +.SH "CONFORMING TO" +.IX Header "CONFORMING TO" +\&\s-1ISO/IEC 10118\-3:2016\s0 Dedicated Hash-Function 1 (\s-1RIPEMD\-160\s0). +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBevp\fR\|(7), +\&\fBEVP_DigestInit\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_seed_cbc.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_seed_cbc.3 new file mode 100644 index 00000000..5f70a6dc --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_seed_cbc.3 @@ -0,0 +1,179 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EVP_SEED_CBC 3" +.TH EVP_SEED_CBC 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EVP_seed_cbc, EVP_seed_cfb, EVP_seed_cfb128, EVP_seed_ecb, EVP_seed_ofb \&\- EVP SEED cipher +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& const EVP_CIPHER *EVP_seed_cbc(void) +\& const EVP_CIPHER *EVP_seed_cfb(void) +\& const EVP_CIPHER *EVP_seed_cfb128(void) +\& const EVP_CIPHER *EVP_seed_ecb(void) +\& const EVP_CIPHER *EVP_seed_ofb(void) +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \s-1SEED\s0 encryption algorithm for \s-1EVP.\s0 +.PP +All modes below use a key length of 128 bits and acts on blocks of 128\-bits. +.IP "\fBEVP_seed_cbc()\fR, \fBEVP_seed_cfb()\fR, \fBEVP_seed_cfb128()\fR, \fBEVP_seed_ecb()\fR, \fBEVP_seed_ofb()\fR" 4 +.IX Item "EVP_seed_cbc(), EVP_seed_cfb(), EVP_seed_cfb128(), EVP_seed_ecb(), EVP_seed_ofb()" +The \s-1SEED\s0 encryption algorithm in \s-1CBC, CFB, ECB\s0 and \s-1OFB\s0 modes respectively. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +These functions return an \fB\s-1EVP_CIPHER\s0\fR structure that contains the +implementation of the symmetric cipher. See \fBEVP_CIPHER_meth_new\fR\|(3) for +details of the \fB\s-1EVP_CIPHER\s0\fR structure. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBevp\fR\|(7), +\&\fBEVP_EncryptInit\fR\|(3), +\&\fBEVP_CIPHER_meth_new\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_sha1.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_sha1.3 new file mode 100644 index 00000000..56f3a047 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_sha1.3 @@ -0,0 +1,177 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EVP_SHA1 3" +.TH EVP_SHA1 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EVP_sha1 \&\- SHA\-1 For EVP +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& const EVP_MD *EVP_sha1(void); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\s-1SHA\-1\s0 (Secure Hash Algorithm 1) is a cryptographic hash function standardized +in \s-1NIST FIPS 180\-4.\s0 The algorithm was designed by the United States National +Security Agency and initially published in 1995. +.IP "\fBEVP_sha1()\fR" 4 +.IX Item "EVP_sha1()" +The \s-1SHA\-1\s0 algorithm which produces a 160\-bit output from a given input. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +These functions return a \fB\s-1EVP_MD\s0\fR structure that contains the +implementation of the symmetric cipher. See \fBEVP_MD_meth_new\fR\|(3) for +details of the \fB\s-1EVP_MD\s0\fR structure. +.SH "CONFORMING TO" +.IX Header "CONFORMING TO" +\&\s-1NIST FIPS 180\-4.\s0 +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBevp\fR\|(7), +\&\fBEVP_DigestInit\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_sha224.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_sha224.3 new file mode 100644 index 00000000..dc53e606 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_sha224.3 @@ -0,0 +1,187 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EVP_SHA224 3" +.TH EVP_SHA224 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EVP_sha224, EVP_sha256, EVP_sha512_224, EVP_sha512_256, EVP_sha384, EVP_sha512 \&\- SHA\-2 For EVP +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& const EVP_MD *EVP_sha224(void); +\& const EVP_MD *EVP_sha256(void); +\& const EVP_MD *EVP_sha512_224(void); +\& const EVP_MD *EVP_sha512_256(void); +\& const EVP_MD *EVP_sha384(void); +\& const EVP_MD *EVP_sha512(void); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\s-1SHA\-2\s0 (Secure Hash Algorithm 2) is a family of cryptographic hash functions +standardized in \s-1NIST FIPS 180\-4,\s0 first published in 2001. +.IP "\fBEVP_sha224()\fR, \fBEVP_sha256()\fR, EVP_sha512_224, EVP_sha512_256, \fBEVP_sha384()\fR, \fBEVP_sha512()\fR" 4 +.IX Item "EVP_sha224(), EVP_sha256(), EVP_sha512_224, EVP_sha512_256, EVP_sha384(), EVP_sha512()" +The \s-1SHA\-2 SHA\-224, SHA\-256, SHA\-512/224, SHA512/256, SHA\-384\s0 and \s-1SHA\-512\s0 +algorithms, which generate 224, 256, 224, 256, 384 and 512 bits +respectively of output from a given input. +.Sp +The two algorithms: \s-1SHA\-512/224\s0 and \s-1SHA512/256\s0 are truncated forms of the +\&\s-1SHA\-512\s0 algorithm. They are distinct from \s-1SHA\-224\s0 and \s-1SHA\-256\s0 even though +their outputs are of the same size. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +These functions return a \fB\s-1EVP_MD\s0\fR structure that contains the +implementation of the symmetric cipher. See \fBEVP_MD_meth_new\fR\|(3) for +details of the \fB\s-1EVP_MD\s0\fR structure. +.SH "CONFORMING TO" +.IX Header "CONFORMING TO" +\&\s-1NIST FIPS 180\-4.\s0 +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBevp\fR\|(7), +\&\fBEVP_DigestInit\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_sha3_224.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_sha3_224.3 new file mode 100644 index 00000000..8e89e334 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_sha3_224.3 @@ -0,0 +1,192 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EVP_SHA3_224 3" +.TH EVP_SHA3_224 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EVP_sha3_224, EVP_sha3_256, EVP_sha3_384, EVP_sha3_512, EVP_shake128, EVP_shake256 \&\- SHA\-3 For EVP +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& const EVP_MD *EVP_sha3_224(void); +\& const EVP_MD *EVP_sha3_256(void); +\& const EVP_MD *EVP_sha3_384(void); +\& const EVP_MD *EVP_sha3_512(void); +\& +\& const EVP_MD *EVP_shake128(void); +\& const EVP_MD *EVP_shake256(void); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\s-1SHA\-3\s0 (Secure Hash Algorithm 3) is a family of cryptographic hash functions +standardized in \s-1NIST FIPS 202,\s0 first published in 2015. It is based on the +Keccak algorithm. +.IP "\fBEVP_sha3_224()\fR, \fBEVP_sha3_256()\fR, \fBEVP_sha3_384()\fR, \fBEVP_sha3_512()\fR" 4 +.IX Item "EVP_sha3_224(), EVP_sha3_256(), EVP_sha3_384(), EVP_sha3_512()" +The \s-1SHA\-3 SHA\-3\-224, SHA\-3\-256, SHA\-3\-384,\s0 and \s-1SHA\-3\-512\s0 algorithms +respectively. They produce 224, 256, 384 and 512 bits of output from a given +input. +.IP "\fBEVP_shake128()\fR, \fBEVP_shake256()\fR" 4 +.IX Item "EVP_shake128(), EVP_shake256()" +The \s-1SHAKE\-128\s0 and \s-1SHAKE\-256\s0 Extendable Output Functions (\s-1XOF\s0) that can generate +a variable hash length. +.Sp +Specifically, \fBEVP_shake128\fR provides an overall security of 128 bits, while +\&\fBEVP_shake256\fR provides that of 256 bits. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +These functions return a \fB\s-1EVP_MD\s0\fR structure that contains the +implementation of the symmetric cipher. See \fBEVP_MD_meth_new\fR\|(3) for +details of the \fB\s-1EVP_MD\s0\fR structure. +.SH "CONFORMING TO" +.IX Header "CONFORMING TO" +\&\s-1NIST FIPS 202.\s0 +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBevp\fR\|(7), +\&\fBEVP_DigestInit\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_sm3.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_sm3.3 new file mode 100644 index 00000000..697478e4 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_sm3.3 @@ -0,0 +1,177 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EVP_SM3 3" +.TH EVP_SM3 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EVP_sm3 \&\- SM3 for EVP +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& const EVP_MD *EVP_sm3(void); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\s-1SM3\s0 is a cryptographic hash function with a 256\-bit output, defined in \s-1GB/T +32905\-2016.\s0 +.IP "\fBEVP_sm3()\fR" 4 +.IX Item "EVP_sm3()" +The \s-1SM3\s0 hash function. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +These functions return a \fB\s-1EVP_MD\s0\fR structure that contains the +implementation of the symmetric cipher. See \fBEVP_MD_meth_new\fR\|(3) for +details of the \fB\s-1EVP_MD\s0\fR structure. +.SH "CONFORMING TO" +.IX Header "CONFORMING TO" +\&\s-1GB/T 32905\-2016\s0 and \s-1GM/T 0004\-2012.\s0 +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBevp\fR\|(7), +\&\fBEVP_DigestInit\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017\-2018 The OpenSSL Project Authors. All Rights Reserved. +Copyright 2017 Ribose Inc. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_sm4_cbc.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_sm4_cbc.3 new file mode 100644 index 00000000..2fd1645f --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_sm4_cbc.3 @@ -0,0 +1,182 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EVP_SM4_CBC 3" +.TH EVP_SM4_CBC 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EVP_sm4_cbc, EVP_sm4_ecb, EVP_sm4_cfb, EVP_sm4_cfb128, EVP_sm4_ofb, EVP_sm4_ctr \&\- EVP SM4 cipher +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& const EVP_CIPHER *EVP_sm4_cbc(void); +\& const EVP_CIPHER *EVP_sm4_ecb(void); +\& const EVP_CIPHER *EVP_sm4_cfb(void); +\& const EVP_CIPHER *EVP_sm4_cfb128(void); +\& const EVP_CIPHER *EVP_sm4_ofb(void); +\& const EVP_CIPHER *EVP_sm4_ctr(void); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \s-1SM4\s0 blockcipher (\s-1GB/T 32907\-2016\s0) for \s-1EVP.\s0 +.PP +All modes below use a key length of 128 bits and acts on blocks of 128 bits. +.IP "\fBEVP_sm4_cbc()\fR, \fBEVP_sm4_ecb()\fR, \fBEVP_sm4_cfb()\fR, \fBEVP_sm4_cfb128()\fR, \fBEVP_sm4_ofb()\fR, \fBEVP_sm4_ctr()\fR" 4 +.IX Item "EVP_sm4_cbc(), EVP_sm4_ecb(), EVP_sm4_cfb(), EVP_sm4_cfb128(), EVP_sm4_ofb(), EVP_sm4_ctr()" +The \s-1SM4\s0 blockcipher with a 128\-bit key in \s-1CBC, ECB, CFB, OFB\s0 and \s-1CTR\s0 modes +respectively. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +These functions return a \fB\s-1EVP_CIPHER\s0\fR structure that contains the +implementation of the symmetric cipher. See \fBEVP_CIPHER_meth_new\fR\|(3) for +details of the \fB\s-1EVP_CIPHER\s0\fR structure. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBevp\fR\|(7), +\&\fBEVP_EncryptInit\fR\|(3), +\&\fBEVP_CIPHER_meth_new\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017\-2018 The OpenSSL Project Authors. All Rights Reserved. +Copyright 2017 Ribose Inc. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_whirlpool.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_whirlpool.3 new file mode 100644 index 00000000..219f91a4 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/EVP_whirlpool.3 @@ -0,0 +1,177 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EVP_WHIRLPOOL 3" +.TH EVP_WHIRLPOOL 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +EVP_whirlpool \&\- WHIRLPOOL For EVP +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& const EVP_MD *EVP_whirlpool(void); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\s-1WHIRLPOOL\s0 is a cryptographic hash function standardized in \s-1ISO/IEC 10118\-3:2004\s0 +designed by Vincent Rijmen and Paulo S. L. M. Barreto. +.IP "\fBEVP_whirlpool()\fR" 4 +.IX Item "EVP_whirlpool()" +The \s-1WHIRLPOOL\s0 algorithm that produces a message digest of 512\-bits from a given +input. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +These functions return a \fB\s-1EVP_MD\s0\fR structure that contains the +implementation of the symmetric cipher. See \fBEVP_MD_meth_new\fR\|(3) for +details of the \fB\s-1EVP_MD\s0\fR structure. +.SH "CONFORMING TO" +.IX Header "CONFORMING TO" +\&\s-1ISO/IEC 10118\-3:2004.\s0 +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBevp\fR\|(7), +\&\fBEVP_DigestInit\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/HMAC.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/HMAC.3 new file mode 100644 index 00000000..06596730 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/HMAC.3 @@ -0,0 +1,279 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "HMAC 3" +.TH HMAC 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +HMAC, HMAC_CTX_new, HMAC_CTX_reset, HMAC_CTX_free, HMAC_Init, HMAC_Init_ex, HMAC_Update, HMAC_Final, HMAC_CTX_copy, HMAC_CTX_set_flags, HMAC_CTX_get_md, HMAC_size \&\- HMAC message authentication code +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& unsigned char *HMAC(const EVP_MD *evp_md, const void *key, +\& int key_len, const unsigned char *d, int n, +\& unsigned char *md, unsigned int *md_len); +\& +\& HMAC_CTX *HMAC_CTX_new(void); +\& int HMAC_CTX_reset(HMAC_CTX *ctx); +\& +\& 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_Final(HMAC_CTX *ctx, unsigned char *md, unsigned int *len); +\& +\& void HMAC_CTX_free(HMAC_CTX *ctx); +\& +\& int HMAC_CTX_copy(HMAC_CTX *dctx, HMAC_CTX *sctx); +\& void HMAC_CTX_set_flags(HMAC_CTX *ctx, unsigned long flags); +\& const EVP_MD *HMAC_CTX_get_md(const HMAC_CTX *ctx); +\& +\& size_t HMAC_size(const HMAC_CTX *e); +.Ve +.PP +Deprecated: +.PP +.Vb 4 +\& #if OPENSSL_API_COMPAT < 0x10100000L +\& int HMAC_Init(HMAC_CTX *ctx, const void *key, int key_len, +\& const EVP_MD *md); +\& #endif +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\s-1HMAC\s0 is a \s-1MAC\s0 (message authentication code), i.e. a keyed hash +function used for message authentication, which is based on a hash +function. +.PP +\&\s-1\fBHMAC\s0()\fR computes the message authentication code of the \fBn\fR bytes at +\&\fBd\fR using the hash function \fBevp_md\fR and the key \fBkey\fR which is +\&\fBkey_len\fR bytes long. +.PP +It places the result in \fBmd\fR (which must have space for the output of +the hash function, which is no more than \fB\s-1EVP_MAX_MD_SIZE\s0\fR bytes). +If \fBmd\fR is \s-1NULL,\s0 the digest is placed in a static array. The size of +the output is placed in \fBmd_len\fR, unless it is \fB\s-1NULL\s0\fR. Note: passing a \s-1NULL\s0 +value for \fBmd\fR to use the static array is not thread safe. +.PP +\&\fBevp_md\fR is a message digest such as \fBEVP_sha1()\fR, \fBEVP_ripemd160()\fR etc. \s-1HMAC\s0 does +not support variable output length digests such as \fBEVP_shake128()\fR and +\&\fBEVP_shake256()\fR. +.PP +\&\fBHMAC_CTX_new()\fR creates a new \s-1HMAC_CTX\s0 in heap memory. +.PP +\&\fBHMAC_CTX_reset()\fR zeroes an existing \fB\s-1HMAC_CTX\s0\fR and associated +resources, making it suitable for new computations as if it was newly +created with \fBHMAC_CTX_new()\fR. +.PP +\&\fBHMAC_CTX_free()\fR erases the key and other data from the \fB\s-1HMAC_CTX\s0\fR, +releases any associated resources and finally frees the \fB\s-1HMAC_CTX\s0\fR +itself. +.PP +The following functions may be used if the message is not completely +stored in memory: +.PP +\&\fBHMAC_Init_ex()\fR initializes or reuses a \fB\s-1HMAC_CTX\s0\fR structure to use the hash +function \fBevp_md\fR and key \fBkey\fR. If both are \s-1NULL,\s0 or if \fBkey\fR is \s-1NULL\s0 +and \fBevp_md\fR is the same as the previous call, then the +existing key is +reused. \fBctx\fR must have been created with \fBHMAC_CTX_new()\fR before the first use +of an \fB\s-1HMAC_CTX\s0\fR in this function. +.PP +If \fBHMAC_Init_ex()\fR is called with \fBkey\fR \s-1NULL\s0 and \fBevp_md\fR is not the +same as the previous digest used by \fBctx\fR then an error is returned +because reuse of an existing key with a different digest is not supported. +.PP +\&\fBHMAC_Init()\fR initializes a \fB\s-1HMAC_CTX\s0\fR structure to use the hash +function \fBevp_md\fR and the key \fBkey\fR which is \fBkey_len\fR bytes +long. +.PP +\&\fBHMAC_Update()\fR can be called repeatedly with chunks of the message to +be authenticated (\fBlen\fR bytes at \fBdata\fR). +.PP +\&\fBHMAC_Final()\fR places the message authentication code in \fBmd\fR, which +must have space for the hash function output. +.PP +\&\fBHMAC_CTX_copy()\fR copies all of the internal state from \fBsctx\fR into \fBdctx\fR. +.PP +\&\fBHMAC_CTX_set_flags()\fR applies the specified flags to the internal EVP_MD_CTXs. +These flags have the same meaning as for \fBEVP_MD_CTX_set_flags\fR\|(3). +.PP +\&\fBHMAC_CTX_get_md()\fR returns the \s-1EVP_MD\s0 that has previously been set for the +supplied \s-1HMAC_CTX.\s0 +.PP +\&\fBHMAC_size()\fR returns the length in bytes of the underlying hash function output. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\s-1\fBHMAC\s0()\fR returns a pointer to the message authentication code or \s-1NULL\s0 if +an error occurred. +.PP +\&\fBHMAC_CTX_new()\fR returns a pointer to a new \fB\s-1HMAC_CTX\s0\fR on success or +\&\fB\s-1NULL\s0\fR if an error occurred. +.PP +\&\fBHMAC_CTX_reset()\fR, \fBHMAC_Init_ex()\fR, \fBHMAC_Update()\fR, \fBHMAC_Final()\fR and +\&\fBHMAC_CTX_copy()\fR return 1 for success or 0 if an error occurred. +.PP +\&\fBHMAC_CTX_get_md()\fR return the \s-1EVP_MD\s0 previously set for the supplied \s-1HMAC_CTX\s0 or +\&\s-1NULL\s0 if no \s-1EVP_MD\s0 has been set. +.PP +\&\fBHMAC_size()\fR returns the length in bytes of the underlying hash function output +or zero on error. +.SH "CONFORMING TO" +.IX Header "CONFORMING TO" +\&\s-1RFC 2104\s0 +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\s-1\fBSHA1\s0\fR\|(3), \fBevp\fR\|(7) +.SH "HISTORY" +.IX Header "HISTORY" +\&\fBHMAC_CTX_init()\fR was replaced with \fBHMAC_CTX_reset()\fR in OpenSSL 1.1.0. +.PP +\&\fBHMAC_CTX_cleanup()\fR existed in OpenSSL before version 1.1.0. +.PP +\&\fBHMAC_CTX_new()\fR, \fBHMAC_CTX_free()\fR and \fBHMAC_CTX_get_md()\fR are new in OpenSSL 1.1.0. +.PP +\&\fBHMAC_Init_ex()\fR, \fBHMAC_Update()\fR and \fBHMAC_Final()\fR did not return values in +OpenSSL before version 1.0.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/MD5.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/MD5.3 new file mode 100644 index 00000000..e6768f8f --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/MD5.3 @@ -0,0 +1,224 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "MD5 3" +.TH MD5 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +MD2, MD4, MD5, MD2_Init, MD2_Update, MD2_Final, MD4_Init, MD4_Update, MD4_Final, MD5_Init, MD5_Update, MD5_Final \- MD2, MD4, and MD5 hash functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& unsigned char *MD2(const unsigned char *d, unsigned long n, unsigned char *md); +\& +\& int MD2_Init(MD2_CTX *c); +\& int MD2_Update(MD2_CTX *c, const unsigned char *data, unsigned long len); +\& int MD2_Final(unsigned char *md, MD2_CTX *c); +\& +\& +\& #include +\& +\& unsigned char *MD4(const unsigned char *d, unsigned long n, unsigned char *md); +\& +\& int MD4_Init(MD4_CTX *c); +\& int MD4_Update(MD4_CTX *c, const void *data, unsigned long len); +\& int MD4_Final(unsigned char *md, MD4_CTX *c); +\& +\& +\& #include +\& +\& unsigned char *MD5(const unsigned char *d, unsigned long n, unsigned char *md); +\& +\& int MD5_Init(MD5_CTX *c); +\& int MD5_Update(MD5_CTX *c, const void *data, unsigned long len); +\& int MD5_Final(unsigned char *md, MD5_CTX *c); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\s-1MD2, MD4,\s0 and \s-1MD5\s0 are cryptographic hash functions with a 128 bit output. +.PP +\&\s-1\fBMD2\s0()\fR, \s-1\fBMD4\s0()\fR, and \s-1\fBMD5\s0()\fR compute the \s-1MD2, MD4,\s0 and \s-1MD5\s0 message digest +of the \fBn\fR bytes at \fBd\fR and place it in \fBmd\fR (which must have space +for \s-1MD2_DIGEST_LENGTH\s0 == \s-1MD4_DIGEST_LENGTH\s0 == \s-1MD5_DIGEST_LENGTH\s0 == 16 +bytes of output). If \fBmd\fR is \s-1NULL,\s0 the digest is placed in a static +array. +.PP +The following functions may be used if the message is not completely +stored in memory: +.PP +\&\fBMD2_Init()\fR initializes a \fB\s-1MD2_CTX\s0\fR structure. +.PP +\&\fBMD2_Update()\fR can be called repeatedly with chunks of the message to +be hashed (\fBlen\fR bytes at \fBdata\fR). +.PP +\&\fBMD2_Final()\fR places the message digest in \fBmd\fR, which must have space +for \s-1MD2_DIGEST_LENGTH\s0 == 16 bytes of output, and erases the \fB\s-1MD2_CTX\s0\fR. +.PP +\&\fBMD4_Init()\fR, \fBMD4_Update()\fR, \fBMD4_Final()\fR, \fBMD5_Init()\fR, \fBMD5_Update()\fR, and +\&\fBMD5_Final()\fR are analogous using an \fB\s-1MD4_CTX\s0\fR and \fB\s-1MD5_CTX\s0\fR structure. +.PP +Applications should use the higher level functions +\&\fBEVP_DigestInit\fR\|(3) +etc. instead of calling the hash functions directly. +.SH "NOTE" +.IX Header "NOTE" +\&\s-1MD2, MD4,\s0 and \s-1MD5\s0 are recommended only for compatibility with existing +applications. In new applications, \s-1SHA\-1\s0 or \s-1RIPEMD\-160\s0 should be +preferred. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\s-1\fBMD2\s0()\fR, \s-1\fBMD4\s0()\fR, and \s-1\fBMD5\s0()\fR return pointers to the hash value. +.PP +\&\fBMD2_Init()\fR, \fBMD2_Update()\fR, \fBMD2_Final()\fR, \fBMD4_Init()\fR, \fBMD4_Update()\fR, +\&\fBMD4_Final()\fR, \fBMD5_Init()\fR, \fBMD5_Update()\fR, and \fBMD5_Final()\fR return 1 for +success, 0 otherwise. +.SH "CONFORMING TO" +.IX Header "CONFORMING TO" +\&\s-1RFC 1319, RFC 1320, RFC 1321\s0 +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBEVP_DigestInit\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/MDC2_Init.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/MDC2_Init.3 new file mode 100644 index 00000000..3cb010f0 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/MDC2_Init.3 @@ -0,0 +1,199 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "MDC2_INIT 3" +.TH MDC2_INIT 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +MDC2, MDC2_Init, MDC2_Update, MDC2_Final \- MDC2 hash function +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& unsigned char *MDC2(const unsigned char *d, unsigned long n, +\& unsigned char *md); +\& +\& int MDC2_Init(MDC2_CTX *c); +\& int MDC2_Update(MDC2_CTX *c, const unsigned char *data, +\& unsigned long len); +\& int MDC2_Final(unsigned char *md, MDC2_CTX *c); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\s-1MDC2\s0 is a method to construct hash functions with 128 bit output from +block ciphers. These functions are an implementation of \s-1MDC2\s0 with +\&\s-1DES.\s0 +.PP +\&\s-1\fBMDC2\s0()\fR computes the \s-1MDC2\s0 message digest of the \fBn\fR +bytes at \fBd\fR and places it in \fBmd\fR (which must have space for +\&\s-1MDC2_DIGEST_LENGTH\s0 == 16 bytes of output). If \fBmd\fR is \s-1NULL,\s0 the digest +is placed in a static array. +.PP +The following functions may be used if the message is not completely +stored in memory: +.PP +\&\fBMDC2_Init()\fR initializes a \fB\s-1MDC2_CTX\s0\fR structure. +.PP +\&\fBMDC2_Update()\fR can be called repeatedly with chunks of the message to +be hashed (\fBlen\fR bytes at \fBdata\fR). +.PP +\&\fBMDC2_Final()\fR places the message digest in \fBmd\fR, which must have space +for \s-1MDC2_DIGEST_LENGTH\s0 == 16 bytes of output, and erases the \fB\s-1MDC2_CTX\s0\fR. +.PP +Applications should use the higher level functions +\&\fBEVP_DigestInit\fR\|(3) etc. instead of calling the +hash functions directly. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\s-1\fBMDC2\s0()\fR returns a pointer to the hash value. +.PP +\&\fBMDC2_Init()\fR, \fBMDC2_Update()\fR and \fBMDC2_Final()\fR return 1 for success, 0 otherwise. +.SH "CONFORMING TO" +.IX Header "CONFORMING TO" +\&\s-1ISO/IEC 10118\-2:2000\s0 Hash-Function 2, with \s-1DES\s0 as the underlying block cipher. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBEVP_DigestInit\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OBJ_nid2obj.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OBJ_nid2obj.3 new file mode 100644 index 00000000..82749e85 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OBJ_nid2obj.3 @@ -0,0 +1,327 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "OBJ_NID2OBJ 3" +.TH OBJ_NID2OBJ 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +i2t_ASN1_OBJECT, OBJ_length, OBJ_get0_data, OBJ_nid2obj, OBJ_nid2ln, OBJ_nid2sn, OBJ_obj2nid, OBJ_txt2nid, OBJ_ln2nid, OBJ_sn2nid, OBJ_cmp, OBJ_dup, OBJ_txt2obj, OBJ_obj2txt, OBJ_create, OBJ_cleanup \&\- ASN1 object utility functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& ASN1_OBJECT *OBJ_nid2obj(int n); +\& const char *OBJ_nid2ln(int n); +\& const char *OBJ_nid2sn(int n); +\& +\& int OBJ_obj2nid(const ASN1_OBJECT *o); +\& int OBJ_ln2nid(const char *ln); +\& int OBJ_sn2nid(const char *sn); +\& +\& int OBJ_txt2nid(const char *s); +\& +\& ASN1_OBJECT *OBJ_txt2obj(const char *s, int no_name); +\& int OBJ_obj2txt(char *buf, int buf_len, const ASN1_OBJECT *a, int no_name); +\& +\& int i2t_ASN1_OBJECT(char *buf, int buf_len, const ASN1_OBJECT *a); +\& +\& int OBJ_cmp(const ASN1_OBJECT *a, const ASN1_OBJECT *b); +\& ASN1_OBJECT *OBJ_dup(const ASN1_OBJECT *o); +\& +\& int OBJ_create(const char *oid, const char *sn, const char *ln); +\& +\& size_t OBJ_length(const ASN1_OBJECT *obj); +\& const unsigned char *OBJ_get0_data(const ASN1_OBJECT *obj); +.Ve +.PP +Deprecated: +.PP +.Vb 3 +\& #if OPENSSL_API_COMPAT < 0x10100000L +\& void OBJ_cleanup(void) +\& #endif +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \s-1ASN1\s0 object utility functions process \s-1ASN1_OBJECT\s0 structures which are +a representation of the \s-1ASN1 OBJECT IDENTIFIER\s0 (\s-1OID\s0) type. +For convenience, OIDs are usually represented in source code as numeric +identifiers, or \fB\s-1NID\s0\fRs. OpenSSL has an internal table of OIDs that +are generated when the library is built, and their corresponding NIDs +are available as defined constants. For the functions below, application +code should treat all returned values \*(-- OIDs, NIDs, or names \*(-- as +constants. +.PP +\&\fBOBJ_nid2obj()\fR, \fBOBJ_nid2ln()\fR and \fBOBJ_nid2sn()\fR convert the \s-1NID\s0 \fBn\fR to +an \s-1ASN1_OBJECT\s0 structure, its long name and its short name respectively, +or \fB\s-1NULL\s0\fR if an error occurred. +.PP +\&\fBOBJ_obj2nid()\fR, \fBOBJ_ln2nid()\fR, \fBOBJ_sn2nid()\fR return the corresponding \s-1NID\s0 +for the object \fBo\fR, the long name or the short name respectively +or NID_undef if an error occurred. +.PP +\&\fBOBJ_txt2nid()\fR returns \s-1NID\s0 corresponding to text string . \fBs\fR can be +a long name, a short name or the numerical representation of an object. +.PP +\&\fBOBJ_txt2obj()\fR converts the text string \fBs\fR into an \s-1ASN1_OBJECT\s0 structure. +If \fBno_name\fR is 0 then long names and short names will be interpreted +as well as numerical forms. If \fBno_name\fR is 1 only the numerical form +is acceptable. +.PP +\&\fBOBJ_obj2txt()\fR converts the \fB\s-1ASN1_OBJECT\s0\fR \fBa\fR into a textual representation. +The representation is written as a null terminated string to \fBbuf\fR +at most \fBbuf_len\fR bytes are written, truncating the result if necessary. +The total amount of space required is returned. If \fBno_name\fR is 0 then +if the object has a long or short name then that will be used, otherwise +the numerical form will be used. If \fBno_name\fR is 1 then the numerical +form will always be used. +.PP +\&\fBi2t_ASN1_OBJECT()\fR is the same as \fBOBJ_obj2txt()\fR with the \fBno_name\fR set to zero. +.PP +\&\fBOBJ_cmp()\fR compares \fBa\fR to \fBb\fR. If the two are identical 0 is returned. +.PP +\&\fBOBJ_dup()\fR returns a copy of \fBo\fR. +.PP +\&\fBOBJ_create()\fR adds a new object to the internal table. \fBoid\fR is the +numerical form of the object, \fBsn\fR the short name and \fBln\fR the +long name. A new \s-1NID\s0 is returned for the created object in case of +success and NID_undef in case of failure. +.PP +\&\fBOBJ_length()\fR returns the size of the content octets of \fBobj\fR. +.PP +\&\fBOBJ_get0_data()\fR returns a pointer to the content octets of \fBobj\fR. +The returned pointer is an internal pointer which \fBmust not\fR be freed. +.PP +\&\fBOBJ_cleanup()\fR releases any resources allocated by creating new objects. +.SH "NOTES" +.IX Header "NOTES" +Objects in OpenSSL can have a short name, a long name and a numerical +identifier (\s-1NID\s0) associated with them. A standard set of objects is +represented in an internal table. The appropriate values are defined +in the header file \fBobjects.h\fR. +.PP +For example the \s-1OID\s0 for commonName has the following definitions: +.PP +.Vb 3 +\& #define SN_commonName "CN" +\& #define LN_commonName "commonName" +\& #define NID_commonName 13 +.Ve +.PP +New objects can be added by calling \fBOBJ_create()\fR. +.PP +Table objects have certain advantages over other objects: for example +their NIDs can be used in a C language switch statement. They are +also static constant structures which are shared: that is there +is only a single constant structure for each table object. +.PP +Objects which are not in the table have the \s-1NID\s0 value NID_undef. +.PP +Objects do not need to be in the internal tables to be processed, +the functions \fBOBJ_txt2obj()\fR and \fBOBJ_obj2txt()\fR can process the numerical +form of an \s-1OID.\s0 +.PP +Some objects are used to represent algorithms which do not have a +corresponding \s-1ASN.1 OBJECT IDENTIFIER\s0 encoding (for example no \s-1OID\s0 currently +exists for a particular algorithm). As a result they \fBcannot\fR be encoded or +decoded as part of \s-1ASN.1\s0 structures. Applications can determine if there +is a corresponding \s-1OBJECT IDENTIFIER\s0 by checking \fBOBJ_length()\fR is not zero. +.PP +These functions cannot return \fBconst\fR because an \fB\s-1ASN1_OBJECT\s0\fR can +represent both an internal, constant, \s-1OID\s0 and a dynamically-created one. +The latter cannot be constant because it needs to be freed after use. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBOBJ_nid2obj()\fR returns an \fB\s-1ASN1_OBJECT\s0\fR structure or \fB\s-1NULL\s0\fR is an +error occurred. +.PP +\&\fBOBJ_nid2ln()\fR and \fBOBJ_nid2sn()\fR returns a valid string or \fB\s-1NULL\s0\fR +on error. +.PP +\&\fBOBJ_obj2nid()\fR, \fBOBJ_ln2nid()\fR, \fBOBJ_sn2nid()\fR and \fBOBJ_txt2nid()\fR return +a \s-1NID\s0 or \fBNID_undef\fR on error. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +Create an object for \fBcommonName\fR: +.PP +.Vb 1 +\& ASN1_OBJECT *o = OBJ_nid2obj(NID_commonName); +.Ve +.PP +Check if an object is \fBcommonName\fR +.PP +.Vb 2 +\& if (OBJ_obj2nid(obj) == NID_commonName) +\& /* Do something */ +.Ve +.PP +Create a new \s-1NID\s0 and initialize an object from it: +.PP +.Vb 2 +\& int new_nid = OBJ_create("1.2.3.4", "NewOID", "New Object Identifier"); +\& ASN1_OBJECT *obj = OBJ_nid2obj(new_nid); +.Ve +.PP +Create a new object directly: +.PP +.Vb 1 +\& obj = OBJ_txt2obj("1.2.3.4", 1); +.Ve +.SH "BUGS" +.IX Header "BUGS" +\&\fBOBJ_obj2txt()\fR is awkward and messy to use: it doesn't follow the +convention of other OpenSSL functions where the buffer can be set +to \fB\s-1NULL\s0\fR to determine the amount of data that should be written. +Instead \fBbuf\fR must point to a valid buffer and \fBbuf_len\fR should +be set to a positive value. A buffer length of 80 should be more +than enough to handle any \s-1OID\s0 encountered in practice. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_get_error\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +\&\fBOBJ_cleanup()\fR was deprecated in OpenSSL 1.1.0 by \fBOPENSSL_init_crypto\fR\|(3) +and should not be used. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2002\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OCSP_REQUEST_new.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OCSP_REQUEST_new.3 new file mode 100644 index 00000000..bc543976 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OCSP_REQUEST_new.3 @@ -0,0 +1,248 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "OCSP_REQUEST_NEW 3" +.TH OCSP_REQUEST_NEW 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +OCSP_REQUEST_new, OCSP_REQUEST_free, OCSP_request_add0_id, OCSP_request_sign, OCSP_request_add1_cert, OCSP_request_onereq_count, OCSP_request_onereq_get0 \- OCSP request functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& OCSP_REQUEST *OCSP_REQUEST_new(void); +\& void OCSP_REQUEST_free(OCSP_REQUEST *req); +\& +\& OCSP_ONEREQ *OCSP_request_add0_id(OCSP_REQUEST *req, OCSP_CERTID *cid); +\& +\& int OCSP_request_sign(OCSP_REQUEST *req, +\& X509 *signer, EVP_PKEY *key, const EVP_MD *dgst, +\& STACK_OF(X509) *certs, unsigned long flags); +\& +\& int OCSP_request_add1_cert(OCSP_REQUEST *req, X509 *cert); +\& +\& int OCSP_request_onereq_count(OCSP_REQUEST *req); +\& OCSP_ONEREQ *OCSP_request_onereq_get0(OCSP_REQUEST *req, int i); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBOCSP_REQUEST_new()\fR allocates and returns an empty \fB\s-1OCSP_REQUEST\s0\fR structure. +.PP +\&\fBOCSP_REQUEST_free()\fR frees up the request structure \fBreq\fR. +.PP +\&\fBOCSP_request_add0_id()\fR adds certificate \s-1ID\s0 \fBcid\fR to \fBreq\fR. It returns +the \fB\s-1OCSP_ONEREQ\s0\fR structure added so an application can add additional +extensions to the request. The \fBid\fR parameter \fB\s-1MUST NOT\s0\fR be freed up after +the operation. +.PP +\&\fBOCSP_request_sign()\fR signs \s-1OCSP\s0 request \fBreq\fR using certificate +\&\fBsigner\fR, private key \fBkey\fR, digest \fBdgst\fR and additional certificates +\&\fBcerts\fR. If the \fBflags\fR option \fB\s-1OCSP_NOCERTS\s0\fR is set then no certificates +will be included in the request. +.PP +\&\fBOCSP_request_add1_cert()\fR adds certificate \fBcert\fR to request \fBreq\fR. The +application is responsible for freeing up \fBcert\fR after use. +.PP +\&\fBOCSP_request_onereq_count()\fR returns the total number of \fB\s-1OCSP_ONEREQ\s0\fR +structures in \fBreq\fR. +.PP +\&\fBOCSP_request_onereq_get0()\fR returns an internal pointer to the \fB\s-1OCSP_ONEREQ\s0\fR +contained in \fBreq\fR of index \fBi\fR. The index value \fBi\fR runs from 0 to +OCSP_request_onereq_count(req) \- 1. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBOCSP_REQUEST_new()\fR returns an empty \fB\s-1OCSP_REQUEST\s0\fR structure or \fB\s-1NULL\s0\fR if +an error occurred. +.PP +\&\fBOCSP_request_add0_id()\fR returns the \fB\s-1OCSP_ONEREQ\s0\fR structure containing \fBcid\fR +or \fB\s-1NULL\s0\fR if an error occurred. +.PP +\&\fBOCSP_request_sign()\fR and \fBOCSP_request_add1_cert()\fR return 1 for success and 0 +for failure. +.PP +\&\fBOCSP_request_onereq_count()\fR returns the total number of \fB\s-1OCSP_ONEREQ\s0\fR +structures in \fBreq\fR. +.PP +\&\fBOCSP_request_onereq_get0()\fR returns a pointer to an \fB\s-1OCSP_ONEREQ\s0\fR structure +or \fB\s-1NULL\s0\fR if the index value is out or range. +.SH "NOTES" +.IX Header "NOTES" +An \s-1OCSP\s0 request structure contains one or more \fB\s-1OCSP_ONEREQ\s0\fR structures +corresponding to each certificate. +.PP +\&\fBOCSP_request_onereq_count()\fR and \fBOCSP_request_onereq_get0()\fR are mainly used by +\&\s-1OCSP\s0 responders. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +Create an \fB\s-1OCSP_REQUEST\s0\fR structure for certificate \fBcert\fR with issuer +\&\fBissuer\fR: +.PP +.Vb 2 +\& OCSP_REQUEST *req; +\& OCSP_ID *cid; +\& +\& req = OCSP_REQUEST_new(); +\& if (req == NULL) +\& /* error */ +\& cid = OCSP_cert_to_id(EVP_sha1(), cert, issuer); +\& if (cid == NULL) +\& /* error */ +\& +\& if (OCSP_REQUEST_add0_id(req, cid) == NULL) +\& /* error */ +\& +\& /* Do something with req, e.g. query responder */ +\& +\& OCSP_REQUEST_free(req); +.Ve +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBcrypto\fR\|(7), +\&\fBOCSP_cert_to_id\fR\|(3), +\&\fBOCSP_request_add1_nonce\fR\|(3), +\&\fBOCSP_resp_find_status\fR\|(3), +\&\fBOCSP_response_status\fR\|(3), +\&\fBOCSP_sendreq_new\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2015\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OCSP_cert_to_id.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OCSP_cert_to_id.3 new file mode 100644 index 00000000..589f14eb --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OCSP_cert_to_id.3 @@ -0,0 +1,218 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "OCSP_CERT_TO_ID 3" +.TH OCSP_CERT_TO_ID 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +OCSP_cert_to_id, OCSP_cert_id_new, OCSP_CERTID_free, OCSP_id_issuer_cmp, OCSP_id_cmp, OCSP_id_get0_info \- OCSP certificate ID utility functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& OCSP_CERTID *OCSP_cert_to_id(const EVP_MD *dgst, +\& X509 *subject, X509 *issuer); +\& +\& OCSP_CERTID *OCSP_cert_id_new(const EVP_MD *dgst, +\& X509_NAME *issuerName, +\& ASN1_BIT_STRING *issuerKey, +\& ASN1_INTEGER *serialNumber); +\& +\& void OCSP_CERTID_free(OCSP_CERTID *id); +\& +\& int OCSP_id_issuer_cmp(const OCSP_CERTID *a, const OCSP_CERTID *b); +\& int OCSP_id_cmp(const OCSP_CERTID *a, const OCSP_CERTID *b); +\& +\& int OCSP_id_get0_info(ASN1_OCTET_STRING **piNameHash, ASN1_OBJECT **pmd, +\& ASN1_OCTET_STRING **pikeyHash, +\& ASN1_INTEGER **pserial, OCSP_CERTID *cid); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBOCSP_cert_to_id()\fR creates and returns a new \fB\s-1OCSP_CERTID\s0\fR structure using +message digest \fBdgst\fR for certificate \fBsubject\fR with issuer \fBissuer\fR. If +\&\fBdgst\fR is \fB\s-1NULL\s0\fR then \s-1SHA1\s0 is used. +.PP +\&\fBOCSP_cert_id_new()\fR creates and returns a new \fB\s-1OCSP_CERTID\s0\fR using \fBdgst\fR and +issuer name \fBissuerName\fR, issuer key hash \fBissuerKey\fR and serial number +\&\fBserialNumber\fR. +.PP +\&\fBOCSP_CERTID_free()\fR frees up \fBid\fR. +.PP +\&\fBOCSP_id_cmp()\fR compares \fB\s-1OCSP_CERTID\s0\fR \fBa\fR and \fBb\fR. +.PP +\&\fBOCSP_id_issuer_cmp()\fR compares only the issuer name of \fB\s-1OCSP_CERTID\s0\fR \fBa\fR and \fBb\fR. +.PP +\&\fBOCSP_id_get0_info()\fR returns the issuer name hash, hash \s-1OID,\s0 issuer key hash and +serial number contained in \fBcid\fR. If any of the values are not required the +corresponding parameter can be set to \fB\s-1NULL\s0\fR. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBOCSP_cert_to_id()\fR and \fBOCSP_cert_id_new()\fR return either a pointer to a valid +\&\fB\s-1OCSP_CERTID\s0\fR structure or \fB\s-1NULL\s0\fR if an error occurred. +.PP +\&\fBOCSP_id_cmp()\fR and \fBOCSP_id_issuer_cmp()\fR returns zero for a match and non-zero +otherwise. +.PP +\&\fBOCSP_CERTID_free()\fR does not return a value. +.PP +\&\fBOCSP_id_get0_info()\fR returns 1 for success and 0 for failure. +.SH "NOTES" +.IX Header "NOTES" +\&\s-1OCSP\s0 clients will typically only use \fBOCSP_cert_to_id()\fR or \fBOCSP_cert_id_new()\fR: +the other functions are used by responder applications. +.PP +The values returned by \fBOCSP_id_get0_info()\fR are internal pointers and \fB\s-1MUST +NOT\s0\fR be freed up by an application: they will be freed when the corresponding +\&\fB\s-1OCSP_CERTID\s0\fR structure is freed. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBcrypto\fR\|(7), +\&\fBOCSP_request_add1_nonce\fR\|(3), +\&\fBOCSP_REQUEST_new\fR\|(3), +\&\fBOCSP_resp_find_status\fR\|(3), +\&\fBOCSP_response_status\fR\|(3), +\&\fBOCSP_sendreq_new\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2015\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OCSP_request_add1_nonce.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OCSP_request_add1_nonce.3 new file mode 100644 index 00000000..274d9338 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OCSP_request_add1_nonce.3 @@ -0,0 +1,215 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "OCSP_REQUEST_ADD1_NONCE 3" +.TH OCSP_REQUEST_ADD1_NONCE 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +OCSP_request_add1_nonce, OCSP_basic_add1_nonce, OCSP_check_nonce, OCSP_copy_nonce \- OCSP nonce functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int OCSP_request_add1_nonce(OCSP_REQUEST *req, unsigned char *val, int len); +\& int OCSP_basic_add1_nonce(OCSP_BASICRESP *resp, unsigned char *val, int len); +\& int OCSP_copy_nonce(OCSP_BASICRESP *resp, OCSP_REQUEST *req); +\& int OCSP_check_nonce(OCSP_REQUEST *req, OCSP_BASICRESP *resp); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBOCSP_request_add1_nonce()\fR adds a nonce of value \fBval\fR and length \fBlen\fR to +\&\s-1OCSP\s0 request \fBreq\fR. If \fBval\fR is \fB\s-1NULL\s0\fR a random nonce is used. If \fBlen\fR +is zero or negative a default length will be used (currently 16 bytes). +.PP +\&\fBOCSP_basic_add1_nonce()\fR is identical to \fBOCSP_request_add1_nonce()\fR except +it adds a nonce to \s-1OCSP\s0 basic response \fBresp\fR. +.PP +\&\fBOCSP_check_nonce()\fR compares the nonce value in \fBreq\fR and \fBresp\fR. +.PP +\&\fBOCSP_copy_nonce()\fR copies any nonce value present in \fBreq\fR to \fBresp\fR. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBOCSP_request_add1_nonce()\fR and \fBOCSP_basic_add1_nonce()\fR return 1 for success +and 0 for failure. +.PP +\&\fBOCSP_copy_nonce()\fR returns 1 if a nonce was successfully copied, 2 if no nonce +was present in \fBreq\fR and 0 if an error occurred. +.PP +\&\fBOCSP_check_nonce()\fR returns the result of the nonce comparison between \fBreq\fR +and \fBresp\fR. The return value indicates the result of the comparison. If +nonces are present and equal 1 is returned. If the nonces are absent 2 is +returned. If a nonce is present in the response only 3 is returned. If nonces +are present and unequal 0 is returned. If the nonce is present in the request +only then \-1 is returned. +.SH "NOTES" +.IX Header "NOTES" +For most purposes the nonce value in a request is set to a random value so +the \fBval\fR parameter in \fBOCSP_request_add1_nonce()\fR is usually \s-1NULL.\s0 +.PP +An \s-1OCSP\s0 nonce is typically added to an \s-1OCSP\s0 request to thwart replay attacks +by checking the same nonce value appears in the response. +.PP +Some responders may include a nonce in all responses even if one is not +supplied. +.PP +Some responders cache \s-1OCSP\s0 responses and do not sign each response for +performance reasons. As a result they do not support nonces. +.PP +The return values of \fBOCSP_check_nonce()\fR 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 +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 +condition. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBcrypto\fR\|(7), +\&\fBOCSP_cert_to_id\fR\|(3), +\&\fBOCSP_REQUEST_new\fR\|(3), +\&\fBOCSP_resp_find_status\fR\|(3), +\&\fBOCSP_response_status\fR\|(3), +\&\fBOCSP_sendreq_new\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2015\-2020 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OCSP_resp_find_status.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OCSP_resp_find_status.3 new file mode 100644 index 00000000..9e19d1f0 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OCSP_resp_find_status.3 @@ -0,0 +1,319 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "OCSP_RESP_FIND_STATUS 3" +.TH OCSP_RESP_FIND_STATUS 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +OCSP_resp_get0_certs, OCSP_resp_get0_signer, OCSP_resp_get0_id, OCSP_resp_get1_id, OCSP_resp_get0_produced_at, OCSP_resp_get0_signature, OCSP_resp_get0_tbs_sigalg, OCSP_resp_get0_respdata, OCSP_resp_find_status, OCSP_resp_count, OCSP_resp_get0, OCSP_resp_find, OCSP_single_get0_status, OCSP_check_validity, OCSP_basic_verify \&\- OCSP response utility functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int OCSP_resp_find_status(OCSP_BASICRESP *bs, OCSP_CERTID *id, int *status, +\& int *reason, +\& ASN1_GENERALIZEDTIME **revtime, +\& ASN1_GENERALIZEDTIME **thisupd, +\& ASN1_GENERALIZEDTIME **nextupd); +\& +\& int OCSP_resp_count(OCSP_BASICRESP *bs); +\& OCSP_SINGLERESP *OCSP_resp_get0(OCSP_BASICRESP *bs, int idx); +\& int OCSP_resp_find(OCSP_BASICRESP *bs, OCSP_CERTID *id, int last); +\& int OCSP_single_get0_status(OCSP_SINGLERESP *single, int *reason, +\& ASN1_GENERALIZEDTIME **revtime, +\& ASN1_GENERALIZEDTIME **thisupd, +\& ASN1_GENERALIZEDTIME **nextupd); +\& +\& const ASN1_GENERALIZEDTIME *OCSP_resp_get0_produced_at( +\& const OCSP_BASICRESP* single); +\& +\& const ASN1_OCTET_STRING *OCSP_resp_get0_signature(const OCSP_BASICRESP *bs); +\& const X509_ALGOR *OCSP_resp_get0_tbs_sigalg(const OCSP_BASICRESP *bs); +\& const OCSP_RESPDATA *OCSP_resp_get0_respdata(const OCSP_BASICRESP *bs); +\& const STACK_OF(X509) *OCSP_resp_get0_certs(const OCSP_BASICRESP *bs); +\& +\& int OCSP_resp_get0_signer(OCSP_BASICRESP *bs, X509 **signer, +\& STACK_OF(X509) *extra_certs); +\& +\& int OCSP_resp_get0_id(const OCSP_BASICRESP *bs, +\& const ASN1_OCTET_STRING **pid, +\& const X509_NAME **pname); +\& int OCSP_resp_get1_id(const OCSP_BASICRESP *bs, +\& ASN1_OCTET_STRING **pid, +\& X509_NAME **pname); +\& +\& int OCSP_check_validity(ASN1_GENERALIZEDTIME *thisupd, +\& ASN1_GENERALIZEDTIME *nextupd, +\& long sec, long maxsec); +\& +\& int OCSP_basic_verify(OCSP_BASICRESP *bs, STACK_OF(X509) *certs, +\& X509_STORE *st, unsigned long flags); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBOCSP_resp_find_status()\fR searches \fBbs\fR for an \s-1OCSP\s0 response for \fBid\fR. If it is +successful the fields of the response are returned in \fB*status\fR, \fB*reason\fR, +\&\fB*revtime\fR, \fB*thisupd\fR and \fB*nextupd\fR. The \fB*status\fR value will be one of +\&\fBV_OCSP_CERTSTATUS_GOOD\fR, \fBV_OCSP_CERTSTATUS_REVOKED\fR or +\&\fBV_OCSP_CERTSTATUS_UNKNOWN\fR. The \fB*reason\fR and \fB*revtime\fR fields are only +set if the status is \fBV_OCSP_CERTSTATUS_REVOKED\fR. If set the \fB*reason\fR field +will be set to the revocation reason which will be one of +\&\fB\s-1OCSP_REVOKED_STATUS_NOSTATUS\s0\fR, \fB\s-1OCSP_REVOKED_STATUS_UNSPECIFIED\s0\fR, +\&\fB\s-1OCSP_REVOKED_STATUS_KEYCOMPROMISE\s0\fR, \fB\s-1OCSP_REVOKED_STATUS_CACOMPROMISE\s0\fR, +\&\fB\s-1OCSP_REVOKED_STATUS_AFFILIATIONCHANGED\s0\fR, \fB\s-1OCSP_REVOKED_STATUS_SUPERSEDED\s0\fR, +\&\fB\s-1OCSP_REVOKED_STATUS_CESSATIONOFOPERATION\s0\fR, +\&\fB\s-1OCSP_REVOKED_STATUS_CERTIFICATEHOLD\s0\fR or \fB\s-1OCSP_REVOKED_STATUS_REMOVEFROMCRL\s0\fR. +.PP +\&\fBOCSP_resp_count()\fR returns the number of \fB\s-1OCSP_SINGLERESP\s0\fR structures in \fBbs\fR. +.PP +\&\fBOCSP_resp_get0()\fR returns the \fB\s-1OCSP_SINGLERESP\s0\fR structure in \fBbs\fR +corresponding to index \fBidx\fR. Where \fBidx\fR runs from 0 to +OCSP_resp_count(bs) \- 1. +.PP +\&\fBOCSP_resp_find()\fR searches \fBbs\fR for \fBid\fR and returns the index of the first +matching entry after \fBlast\fR or starting from the beginning if \fBlast\fR is \-1. +.PP +\&\fBOCSP_single_get0_status()\fR extracts the fields of \fBsingle\fR in \fB*reason\fR, +\&\fB*revtime\fR, \fB*thisupd\fR and \fB*nextupd\fR. +.PP +\&\fBOCSP_resp_get0_produced_at()\fR extracts the \fBproducedAt\fR field from the +single response \fBbs\fR. +.PP +\&\fBOCSP_resp_get0_signature()\fR returns the signature from \fBbs\fR. +.PP +\&\fBOCSP_resp_get0_tbs_sigalg()\fR returns the \fBsignatureAlgorithm\fR from \fBbs\fR. +.PP +\&\fBOCSP_resp_get0_respdata()\fR returns the \fBtbsResponseData\fR from \fBbs\fR. +.PP +\&\fBOCSP_resp_get0_certs()\fR returns any certificates included in \fBbs\fR. +.PP +\&\fBOCSP_resp_get0_signer()\fR attempts to retrieve the certificate that directly +signed \fBbs\fR. The \s-1OCSP\s0 protocol does not require that this certificate +is included in the \fBcerts\fR field of the response, so additional certificates +can be supplied in \fBextra_certs\fR if the certificates that may have +signed the response are known via some out-of-band mechanism. +.PP +\&\fBOCSP_resp_get0_id()\fR gets the responder id of \fBbs\fR. If the responder \s-1ID\s0 is +a name then <*pname> is set to the name and \fB*pid\fR is set to \s-1NULL.\s0 If the +responder \s-1ID\s0 is by key \s-1ID\s0 then \fB*pid\fR is set to the key \s-1ID\s0 and \fB*pname\fR +is set to \s-1NULL.\s0 \fBOCSP_resp_get1_id()\fR leaves ownership of \fB*pid\fR and \fB*pname\fR +with the caller, who is responsible for freeing them. Both functions return 1 +in case of success and 0 in case of failure. If \fBOCSP_resp_get1_id()\fR returns 0, +no freeing of the results is necessary. +.PP +\&\fBOCSP_check_validity()\fR checks the validity of \fBthisupd\fR and \fBnextupd\fR values +which will be typically obtained from \fBOCSP_resp_find_status()\fR or +\&\fBOCSP_single_get0_status()\fR. If \fBsec\fR is non-zero it indicates how many seconds +leeway should be allowed in the check. If \fBmaxsec\fR is positive it indicates +the maximum age of \fBthisupd\fR in seconds. +.PP +\&\fBOCSP_basic_verify()\fR checks that the basic response message \fBbs\fR is correctly +signed and that the signer certificate can be validated. It takes \fBst\fR as +the trusted store and \fBcerts\fR as a set of untrusted intermediate certificates. +The function first tries to find the signer certificate of the response +in . It also searches the certificates the responder may have included +in \fBbs\fR unless the \fBflags\fR contain \fB\s-1OCSP_NOINTERN\s0\fR. +It fails if the signer certificate cannot be found. +Next, the function checks the signature of \fBbs\fR and fails on error +unless the \fBflags\fR contain \fB\s-1OCSP_NOSIGS\s0\fR. Then the function already returns +success if the \fBflags\fR contain \fB\s-1OCSP_NOVERIFY\s0\fR or if the signer certificate +was found in \fBcerts\fR and the \fBflags\fR contain \fB\s-1OCSP_TRUSTOTHER\s0\fR. +Otherwise the function continues by validating the signer certificate. +To this end, all certificates in \fBcert\fR and in \fBbs\fR are considered as +untrusted certificates for the construction of the validation path for the +signer certificate unless the \fB\s-1OCSP_NOCHAIN\s0\fR flag is set. After successful path +validation the function returns success if the \fB\s-1OCSP_NOCHECKS\s0\fR flag is set. +Otherwise it verifies that the signer certificate meets the \s-1OCSP\s0 issuer +criteria including potential delegation. If this does not succeed and the +\&\fBflags\fR do not contain \fB\s-1OCSP_NOEXPLICIT\s0\fR the function checks for explicit +trust for \s-1OCSP\s0 signing in the root \s-1CA\s0 certificate. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBOCSP_resp_find_status()\fR returns 1 if \fBid\fR is found in \fBbs\fR and 0 otherwise. +.PP +\&\fBOCSP_resp_count()\fR returns the total number of \fB\s-1OCSP_SINGLERESP\s0\fR fields in +\&\fBbs\fR. +.PP +\&\fBOCSP_resp_get0()\fR returns a pointer to an \fB\s-1OCSP_SINGLERESP\s0\fR structure or +\&\fB\s-1NULL\s0\fR if \fBidx\fR is out of range. +.PP +\&\fBOCSP_resp_find()\fR returns the index of \fBid\fR in \fBbs\fR (which may be 0) or \-1 if +\&\fBid\fR was not found. +.PP +\&\fBOCSP_single_get0_status()\fR returns the status of \fBsingle\fR or \-1 if an error +occurred. +.PP +\&\fBOCSP_resp_get0_signer()\fR returns 1 if the signing certificate was located, +or 0 on error. +.PP +\&\fBOCSP_basic_verify()\fR returns 1 on success, 0 on error, or \-1 on fatal error such +as malloc failure. +.SH "NOTES" +.IX Header "NOTES" +Applications will typically call \fBOCSP_resp_find_status()\fR using the certificate +\&\s-1ID\s0 of interest and then check its validity using \fBOCSP_check_validity()\fR. They +can then take appropriate action based on the status of the certificate. +.PP +An \s-1OCSP\s0 response for a certificate contains \fBthisUpdate\fR and \fBnextUpdate\fR +fields. Normally the current time should be between these two values. To +account for clock skew the \fBmaxsec\fR field can be set to non-zero in +\&\fBOCSP_check_validity()\fR. Some responders do not set the \fBnextUpdate\fR field, this +would otherwise mean an ancient response would be considered valid: the +\&\fBmaxsec\fR parameter to \fBOCSP_check_validity()\fR can be used to limit the permitted +age of responses. +.PP +The values written to \fB*revtime\fR, \fB*thisupd\fR and \fB*nextupd\fR by +\&\fBOCSP_resp_find_status()\fR and \fBOCSP_single_get0_status()\fR are internal pointers +which \fB\s-1MUST NOT\s0\fR be freed up by the calling application. Any or all of these +parameters can be set to \s-1NULL\s0 if their value is not required. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBcrypto\fR\|(7), +\&\fBOCSP_cert_to_id\fR\|(3), +\&\fBOCSP_request_add1_nonce\fR\|(3), +\&\fBOCSP_REQUEST_new\fR\|(3), +\&\fBOCSP_response_status\fR\|(3), +\&\fBOCSP_sendreq_new\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2015\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OCSP_response_status.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OCSP_response_status.3 new file mode 100644 index 00000000..63908154 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OCSP_response_status.3 @@ -0,0 +1,244 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "OCSP_RESPONSE_STATUS 3" +.TH OCSP_RESPONSE_STATUS 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +OCSP_response_status, OCSP_response_get1_basic, OCSP_response_create, OCSP_RESPONSE_free, OCSP_RESPID_set_by_name, OCSP_RESPID_set_by_key, OCSP_RESPID_match, OCSP_basic_sign, OCSP_basic_sign_ctx \- OCSP response functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int OCSP_response_status(OCSP_RESPONSE *resp); +\& OCSP_BASICRESP *OCSP_response_get1_basic(OCSP_RESPONSE *resp); +\& OCSP_RESPONSE *OCSP_response_create(int status, OCSP_BASICRESP *bs); +\& void OCSP_RESPONSE_free(OCSP_RESPONSE *resp); +\& +\& int OCSP_RESPID_set_by_name(OCSP_RESPID *respid, X509 *cert); +\& int OCSP_RESPID_set_by_key(OCSP_RESPID *respid, X509 *cert); +\& int OCSP_RESPID_match(OCSP_RESPID *respid, X509 *cert); +\& +\& int OCSP_basic_sign(OCSP_BASICRESP *brsp, X509 *signer, EVP_PKEY *key, +\& const EVP_MD *dgst, STACK_OF(X509) *certs, +\& unsigned long flags); +\& int OCSP_basic_sign_ctx(OCSP_BASICRESP *brsp, X509 *signer, EVP_MD_CTX *ctx, +\& STACK_OF(X509) *certs, unsigned long flags); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBOCSP_response_status()\fR returns the \s-1OCSP\s0 response status of \fBresp\fR. It returns +one of the values: \fB\s-1OCSP_RESPONSE_STATUS_SUCCESSFUL\s0\fR, +\&\fB\s-1OCSP_RESPONSE_STATUS_MALFORMEDREQUEST\s0\fR, +\&\fB\s-1OCSP_RESPONSE_STATUS_INTERNALERROR\s0\fR, \fB\s-1OCSP_RESPONSE_STATUS_TRYLATER\s0\fR +\&\fB\s-1OCSP_RESPONSE_STATUS_SIGREQUIRED\s0\fR, or \fB\s-1OCSP_RESPONSE_STATUS_UNAUTHORIZED\s0\fR. +.PP +\&\fBOCSP_response_get1_basic()\fR decodes and returns the \fB\s-1OCSP_BASICRESP\s0\fR structure +contained in \fBresp\fR. +.PP +\&\fBOCSP_response_create()\fR creates and returns an \fB\s-1OCSP_RESPONSE\s0\fR structure for +\&\fBstatus\fR and optionally including basic response \fBbs\fR. +.PP +\&\fBOCSP_RESPONSE_free()\fR frees up \s-1OCSP\s0 response \fBresp\fR. +.PP +\&\fBOCSP_RESPID_set_by_name()\fR sets the name of the \s-1OCSP_RESPID\s0 to be the same as the +subject name in the supplied X509 certificate \fBcert\fR for the \s-1OCSP\s0 responder. +.PP +\&\fBOCSP_RESPID_set_by_key()\fR sets the key of the \s-1OCSP_RESPID\s0 to be the same as the +key in the supplied X509 certificate \fBcert\fR for the \s-1OCSP\s0 responder. The key is +stored as a \s-1SHA1\s0 hash. +.PP +Note that an \s-1OCSP_RESPID\s0 can only have one of the name, or the key set. Calling +\&\fBOCSP_RESPID_set_by_name()\fR or \fBOCSP_RESPID_set_by_key()\fR will clear any existing +setting. +.PP +\&\fBOCSP_RESPID_match()\fR tests whether the \s-1OCSP_RESPID\s0 given in \fBrespid\fR matches +with the X509 certificate \fBcert\fR. +.PP +\&\fBOCSP_basic_sign()\fR signs \s-1OCSP\s0 response \fBbrsp\fR using certificate \fBsigner\fR, private key +\&\fBkey\fR, digest \fBdgst\fR and additional certificates \fBcerts\fR. If the \fBflags\fR option +\&\fB\s-1OCSP_NOCERTS\s0\fR is set then no certificates will be included in the response. If the +\&\fBflags\fR option \fB\s-1OCSP_RESPID_KEY\s0\fR is set then the responder is identified by key \s-1ID\s0 +rather than by name. \fBOCSP_basic_sign_ctx()\fR also signs \s-1OCSP\s0 response \fBbrsp\fR but +uses the parameters contained in digest context \fBctx\fR. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBOCSP_RESPONSE_status()\fR returns a status value. +.PP +\&\fBOCSP_response_get1_basic()\fR returns an \fB\s-1OCSP_BASICRESP\s0\fR structure pointer or +\&\fB\s-1NULL\s0\fR if an error occurred. +.PP +\&\fBOCSP_response_create()\fR returns an \fB\s-1OCSP_RESPONSE\s0\fR structure pointer or \fB\s-1NULL\s0\fR +if an error occurred. +.PP +\&\fBOCSP_RESPONSE_free()\fR does not return a value. +.PP +\&\fBOCSP_RESPID_set_by_name()\fR, \fBOCSP_RESPID_set_by_key()\fR, \fBOCSP_basic_sign()\fR, and +\&\fBOCSP_basic_sign_ctx()\fR return 1 on success or 0 +on failure. +.PP +\&\fBOCSP_RESPID_match()\fR returns 1 if the \s-1OCSP_RESPID\s0 and the X509 certificate match +or 0 otherwise. +.SH "NOTES" +.IX Header "NOTES" +\&\fBOCSP_response_get1_basic()\fR is only called if the status of a response is +\&\fB\s-1OCSP_RESPONSE_STATUS_SUCCESSFUL\s0\fR. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBcrypto\fR\|(7) +\&\fBOCSP_cert_to_id\fR\|(3) +\&\fBOCSP_request_add1_nonce\fR\|(3) +\&\fBOCSP_REQUEST_new\fR\|(3) +\&\fBOCSP_resp_find_status\fR\|(3) +\&\fBOCSP_sendreq_new\fR\|(3) +\&\fBOCSP_RESPID_new\fR\|(3) +\&\fBOCSP_RESPID_free\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +The \fBOCSP_RESPID_set_by_name()\fR, \fBOCSP_RESPID_set_by_key()\fR and \fBOCSP_RESPID_match()\fR +functions were added in OpenSSL 1.1.0a. +.PP +The \fBOCSP_basic_sign_ctx()\fR function was added in OpenSSL 1.1.1. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2015\-2020 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OCSP_sendreq_new.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OCSP_sendreq_new.3 new file mode 100644 index 00000000..0ea775a5 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OCSP_sendreq_new.3 @@ -0,0 +1,252 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "OCSP_SENDREQ_NEW 3" +.TH OCSP_SENDREQ_NEW 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +OCSP_sendreq_new, OCSP_sendreq_nbio, OCSP_REQ_CTX_free, OCSP_set_max_response_length, OCSP_REQ_CTX_add1_header, OCSP_REQ_CTX_set1_req, OCSP_sendreq_bio \- OCSP responder query functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& OCSP_REQ_CTX *OCSP_sendreq_new(BIO *io, const char *path, OCSP_REQUEST *req, +\& int maxline); +\& +\& int OCSP_sendreq_nbio(OCSP_RESPONSE **presp, OCSP_REQ_CTX *rctx); +\& +\& void OCSP_REQ_CTX_free(OCSP_REQ_CTX *rctx); +\& +\& void OCSP_set_max_response_length(OCSP_REQ_CTX *rctx, unsigned long len); +\& +\& int OCSP_REQ_CTX_add1_header(OCSP_REQ_CTX *rctx, +\& const char *name, const char *value); +\& +\& int OCSP_REQ_CTX_set1_req(OCSP_REQ_CTX *rctx, OCSP_REQUEST *req); +\& +\& OCSP_RESPONSE *OCSP_sendreq_bio(BIO *io, const char *path, OCSP_REQUEST *req); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The function \fBOCSP_sendreq_new()\fR returns an \fB\s-1OCSP_CTX\s0\fR structure using the +responder \fBio\fR, the \s-1URL\s0 path \fBpath\fR, the \s-1OCSP\s0 request \fBreq\fR and with a +response header maximum line length of \fBmaxline\fR. If \fBmaxline\fR is zero a +default value of 4k is used. The \s-1OCSP\s0 request \fBreq\fR may be set to \fB\s-1NULL\s0\fR +and provided later if required. +.PP +\&\fBOCSP_sendreq_nbio()\fR performs non-blocking I/O on the \s-1OCSP\s0 request context +\&\fBrctx\fR. When the operation is complete it returns the response in \fB*presp\fR. +.PP +\&\fBOCSP_REQ_CTX_free()\fR frees up the \s-1OCSP\s0 context \fBrctx\fR. +.PP +\&\fBOCSP_set_max_response_length()\fR sets the maximum response length for \fBrctx\fR +to \fBlen\fR. If the response exceeds this length an error occurs. If not +set a default value of 100k is used. +.PP +\&\fBOCSP_REQ_CTX_add1_header()\fR adds header \fBname\fR with value \fBvalue\fR to the +context \fBrctx\fR. It can be called more than once to add multiple headers. +It \fB\s-1MUST\s0\fR be called before any calls to \fBOCSP_sendreq_nbio()\fR. The \fBreq\fR +parameter in the initial to \fBOCSP_sendreq_new()\fR call \s-1MUST\s0 be set to \fB\s-1NULL\s0\fR if +additional headers are set. +.PP +\&\fBOCSP_REQ_CTX_set1_req()\fR sets the \s-1OCSP\s0 request in \fBrctx\fR to \fBreq\fR. This +function should be called after any calls to \fBOCSP_REQ_CTX_add1_header()\fR. +.PP +\&\fBOCSP_sendreq_bio()\fR performs an \s-1OCSP\s0 request using the responder \fBio\fR, the \s-1URL\s0 +path \fBpath\fR, and the \s-1OCSP\s0 request \fBreq\fR with a response header maximum line +length 4k. It waits indefinitely on a response. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBOCSP_sendreq_new()\fR returns a valid \fB\s-1OCSP_REQ_CTX\s0\fR structure or \fB\s-1NULL\s0\fR if +an error occurred. +.PP +\&\fBOCSP_sendreq_nbio()\fR returns \fB1\fR if the operation was completed successfully, +\&\fB\-1\fR if the operation should be retried and \fB0\fR if an error occurred. +.PP +\&\fBOCSP_REQ_CTX_add1_header()\fR and \fBOCSP_REQ_CTX_set1_req()\fR return \fB1\fR for success +and \fB0\fR for failure. +.PP +\&\fBOCSP_sendreq_bio()\fR returns the \fB\s-1OCSP_RESPONSE\s0\fR structure sent by the +responder or \fB\s-1NULL\s0\fR if an error occurred. +.PP +\&\fBOCSP_REQ_CTX_free()\fR and \fBOCSP_set_max_response_length()\fR do not return values. +.SH "NOTES" +.IX Header "NOTES" +These functions only perform a minimal \s-1HTTP\s0 query to a responder. If an +application wishes to support more advanced features it should use an +alternative more complete \s-1HTTP\s0 library. +.PP +Currently only \s-1HTTP POST\s0 queries to responders are supported. +.PP +The arguments to \fBOCSP_sendreq_new()\fR correspond to the components of the \s-1URL.\s0 +For example if the responder \s-1URL\s0 is \fBhttp://ocsp.com/ocspreq\fR the \s-1BIO\s0 +\&\fBio\fR should be connected to host \fBocsp.com\fR on port 80 and \fBpath\fR +should be set to \fB\*(L"/ocspreq\*(R"\fR +.PP +The headers added with \fBOCSP_REQ_CTX_add1_header()\fR are of the form +"\fBname\fR: \fBvalue\fR\*(L" or just \*(R"\fBname\fR" if \fBvalue\fR is \fB\s-1NULL\s0\fR. So to add +a Host header for \fBocsp.com\fR you would call: +.PP +.Vb 1 +\& OCSP_REQ_CTX_add1_header(ctx, "Host", "ocsp.com"); +.Ve +.PP +If \fBOCSP_sendreq_nbio()\fR indicates an operation should be retried the +corresponding \s-1BIO\s0 can be examined to determine which operation (read or +write) should be retried and appropriate action taken (for example a \fBselect()\fR +call on the underlying socket). +.PP +\&\fBOCSP_sendreq_bio()\fR does not support retries and so cannot handle non-blocking +I/O efficiently. It is retained for compatibility and its use in new +applications is not recommended. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBcrypto\fR\|(7), +\&\fBOCSP_cert_to_id\fR\|(3), +\&\fBOCSP_request_add1_nonce\fR\|(3), +\&\fBOCSP_REQUEST_new\fR\|(3), +\&\fBOCSP_resp_find_status\fR\|(3), +\&\fBOCSP_response_status\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2015\-2020 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OPENSSL_Applink.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OPENSSL_Applink.3 new file mode 100644 index 00000000..a9d6378d --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OPENSSL_Applink.3 @@ -0,0 +1,168 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "OPENSSL_APPLINK 3" +.TH OPENSSL_APPLINK 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +OPENSSL_Applink \- glue between OpenSSL BIO and Win32 compiler run\-time +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& _\|_declspec(dllexport) void **OPENSSL_Applink(); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +OPENSSL_Applink is application-side interface which provides a glue +between OpenSSL \s-1BIO\s0 layer and Win32 compiler run-time environment. +Even though it appears at application side, it's essentially OpenSSL +private interface. For this reason application developers are not +expected to implement it, but to compile provided module with +compiler of their choice and link it into the target application. +The referred module is available as \fIapplink.c\fR, located alongside +the public header files (only on the platforms where applicable). +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +Not available. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2004\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OPENSSL_LH_COMPFUNC.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OPENSSL_LH_COMPFUNC.3 new file mode 100644 index 00000000..048ece95 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OPENSSL_LH_COMPFUNC.3 @@ -0,0 +1,369 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "OPENSSL_LH_COMPFUNC 3" +.TH OPENSSL_LH_COMPFUNC 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +LHASH, DECLARE_LHASH_OF, OPENSSL_LH_COMPFUNC, OPENSSL_LH_HASHFUNC, OPENSSL_LH_DOALL_FUNC, LHASH_DOALL_ARG_FN_TYPE, IMPLEMENT_LHASH_HASH_FN, IMPLEMENT_LHASH_COMP_FN, lh_TYPE_new, lh_TYPE_free, lh_TYPE_insert, lh_TYPE_delete, lh_TYPE_retrieve, lh_TYPE_doall, lh_TYPE_doall_arg, lh_TYPE_error \- dynamic hash table +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& DECLARE_LHASH_OF(TYPE); +\& +\& LHASH *lh_TYPE_new(OPENSSL_LH_HASHFUNC hash, OPENSSL_LH_COMPFUNC compare); +\& void lh_TYPE_free(LHASH_OF(TYPE) *table); +\& +\& TYPE *lh_TYPE_insert(LHASH_OF(TYPE) *table, TYPE *data); +\& TYPE *lh_TYPE_delete(LHASH_OF(TYPE) *table, TYPE *data); +\& TYPE *lh_retrieve(LHASH_OF(TYPE) *table, TYPE *data); +\& +\& void lh_TYPE_doall(LHASH_OF(TYPE) *table, OPENSSL_LH_DOALL_FUNC func); +\& void lh_TYPE_doall_arg(LHASH_OF(TYPE) *table, OPENSSL_LH_DOALL_FUNCARG func, +\& TYPE *arg); +\& +\& int lh_TYPE_error(LHASH_OF(TYPE) *table); +\& +\& typedef int (*OPENSSL_LH_COMPFUNC)(const void *, const void *); +\& typedef unsigned long (*OPENSSL_LH_HASHFUNC)(const void *); +\& typedef void (*OPENSSL_LH_DOALL_FUNC)(const void *); +\& typedef void (*LHASH_DOALL_ARG_FN_TYPE)(const void *, const void *); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +This library implements type-checked dynamic hash tables. The hash +table entries can be arbitrary structures. Usually they consist of key +and value fields. In the description here, \fI\s-1TYPE\s0\fR is used a placeholder +for any of the OpenSSL datatypes, such as \fI\s-1SSL_SESSION\s0\fR. +.PP +\&\fBlh_TYPE_new()\fR creates a new \fB\s-1LHASH_OF\s0(\s-1TYPE\s0)\fR structure to store +arbitrary data entries, and specifies the 'hash' and 'compare' +callbacks to be used in organising the table's entries. The \fBhash\fR +callback takes a pointer to a table entry as its argument and returns +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 \fBcompare\fR callback +takes two arguments (pointers to two hash table entries), and returns +0 if their keys are equal, non-zero otherwise. +.PP +If your hash table +will contain items of some particular type and the \fBhash\fR and +\&\fBcompare\fR callbacks hash/compare these types, then the +\&\fB\s-1IMPLEMENT_LHASH_HASH_FN\s0\fR and \fB\s-1IMPLEMENT_LHASH_COMP_FN\s0\fR macros can be +used to create callback wrappers of the prototypes required by +\&\fBlh_TYPE_new()\fR as shown in this example: +.PP +.Vb 11 +\& /* +\& * Implement the hash and compare functions; "stuff" can be any word. +\& */ +\& static unsigned long stuff_hash(const TYPE *a) +\& { +\& ... +\& } +\& static int stuff_cmp(const TYPE *a, const TYPE *b) +\& { +\& ... +\& } +\& +\& /* +\& * Implement the wrapper functions. +\& */ +\& static IMPLEMENT_LHASH_HASH_FN(stuff, TYPE) +\& static IMPLEMENT_LHASH_COMP_FN(stuff, TYPE) +.Ve +.PP +If the type is going to be used in several places, the following macros +can be used in a common header file to declare the function wrappers: +.PP +.Vb 2 +\& DECLARE_LHASH_HASH_FN(stuff, TYPE) +\& DECLARE_LHASH_COMP_FN(stuff, TYPE) +.Ve +.PP +Then a hash table of \s-1TYPE\s0 objects can be created using this: +.PP +.Vb 1 +\& LHASH_OF(TYPE) *htable; +\& +\& htable = lh_TYPE_new(LHASH_HASH_FN(stuff), LHASH_COMP_FN(stuff)); +.Ve +.PP +\&\fBlh_TYPE_free()\fR frees the \fB\s-1LHASH_OF\s0(\s-1TYPE\s0)\fR structure +\&\fBtable\fR. Allocated hash table entries will not be freed; consider +using \fBlh_TYPE_doall()\fR to deallocate any remaining entries in the +hash table (see below). +.PP +\&\fBlh_TYPE_insert()\fR inserts the structure pointed to by \fBdata\fR into +\&\fBtable\fR. If there already is an entry with the same key, the old +value is replaced. Note that \fBlh_TYPE_insert()\fR stores pointers, the +data are not copied. +.PP +\&\fBlh_TYPE_delete()\fR deletes an entry from \fBtable\fR. +.PP +\&\fBlh_TYPE_retrieve()\fR looks up an entry in \fBtable\fR. Normally, \fBdata\fR +is a structure with the key field(s) set; the function will return a +pointer to a fully populated structure. +.PP +\&\fBlh_TYPE_doall()\fR will, for every entry in the hash table, call +\&\fBfunc\fR with the data item as its parameter. +For example: +.PP +.Vb 2 +\& /* Cleans up resources belonging to \*(Aqa\*(Aq (this is implemented elsewhere) */ +\& void TYPE_cleanup_doall(TYPE *a); +\& +\& /* Implement a prototype\-compatible wrapper for "TYPE_cleanup" */ +\& IMPLEMENT_LHASH_DOALL_FN(TYPE_cleanup, TYPE) +\& +\& /* Call "TYPE_cleanup" against all items in a hash table. */ +\& lh_TYPE_doall(hashtable, LHASH_DOALL_FN(TYPE_cleanup)); +\& +\& /* Then the hash table itself can be deallocated */ +\& lh_TYPE_free(hashtable); +.Ve +.PP +When doing this, be careful if you delete entries from the hash table +in your callbacks: the table may decrease in size, moving the item +that you are currently on down lower in the hash table \- this could +cause some entries to be skipped during the iteration. The second +best solution to this problem is to set hash\->down_load=0 before +you start (which will stop the hash table ever decreasing in size). +The best solution is probably to avoid deleting items from the hash +table inside a \*(L"doall\*(R" callback! +.PP +\&\fBlh_TYPE_doall_arg()\fR is the same as \fBlh_TYPE_doall()\fR except that +\&\fBfunc\fR will be called with \fBarg\fR as the second argument and \fBfunc\fR +should be of type \fB\s-1LHASH_DOALL_ARG_FN_TYPE\s0\fR (a callback prototype +that is passed both the table entry and an extra argument). As with +\&\fBlh_doall()\fR, you can instead choose to declare your callback with a +prototype matching the types you are dealing with and use the +declare/implement macros to create compatible wrappers that cast +variables before calling your type-specific callbacks. An example of +this is demonstrated here (printing all hash table entries to a \s-1BIO\s0 +that is provided by the caller): +.PP +.Vb 2 +\& /* Prints item \*(Aqa\*(Aq to \*(Aqoutput_bio\*(Aq (this is implemented elsewhere) */ +\& void TYPE_print_doall_arg(const TYPE *a, BIO *output_bio); +\& +\& /* Implement a prototype\-compatible wrapper for "TYPE_print" */ +\& static IMPLEMENT_LHASH_DOALL_ARG_FN(TYPE, const TYPE, BIO) +\& +\& /* Print out the entire hashtable to a particular BIO */ +\& lh_TYPE_doall_arg(hashtable, LHASH_DOALL_ARG_FN(TYPE_print), BIO, +\& logging_bio); +.Ve +.PP +\&\fBlh_TYPE_error()\fR can be used to determine if an error occurred in the last +operation. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBlh_TYPE_new()\fR returns \fB\s-1NULL\s0\fR on error, otherwise a pointer to the new +\&\fB\s-1LHASH\s0\fR structure. +.PP +When a hash table entry is replaced, \fBlh_TYPE_insert()\fR returns the value +being replaced. \fB\s-1NULL\s0\fR is returned on normal operation and on error. +.PP +\&\fBlh_TYPE_delete()\fR returns the entry being deleted. \fB\s-1NULL\s0\fR is returned if +there is no such value in the hash table. +.PP +\&\fBlh_TYPE_retrieve()\fR returns the hash table entry if it has been found, +\&\fB\s-1NULL\s0\fR otherwise. +.PP +\&\fBlh_TYPE_error()\fR returns 1 if an error occurred in the last operation, 0 +otherwise. It's meaningful only after non-retrieve operations. +.PP +\&\fBlh_TYPE_free()\fR, \fBlh_TYPE_doall()\fR and \fBlh_TYPE_doall_arg()\fR return no values. +.SH "NOTE" +.IX Header "NOTE" +The \s-1LHASH\s0 code is not thread safe. All updating operations, as well as +lh_TYPE_error call must be performed under a write lock. All retrieve +operations should be performed under a read lock, \fIunless\fR accurate +usage statistics are desired. In which case, a write lock should be used +for retrieve operations as well. For output of the usage statistics, +using the functions from \fBOPENSSL_LH_stats\fR\|(3), a read lock suffices. +.PP +The \s-1LHASH\s0 code regards table entries as constant data. As such, it +internally represents \fBlh_insert()\fR'd items with a \*(L"const void *\*(R" +pointer type. This is why callbacks such as those used by \fBlh_doall()\fR +and \fBlh_doall_arg()\fR declare their prototypes with \*(L"const\*(R", even for the +parameters that pass back the table items' data pointers \- for +consistency, user-provided data is \*(L"const\*(R" at all times as far as the +\&\s-1LHASH\s0 code is concerned. However, as callers are themselves providing +these pointers, they can choose whether they too should be treating +all such parameters as constant. +.PP +As an example, a hash table may be maintained by code that, for +reasons of encapsulation, has only \*(L"const\*(R" access to the data being +indexed in the hash table (ie. it is returned as \*(L"const\*(R" from +elsewhere in their code) \- in this case the \s-1LHASH\s0 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 +modifications to table item passed back in the \fBlh_doall()\fR or +\&\fBlh_doall_arg()\fR callbacks (see the \*(L"TYPE_cleanup\*(R" example above). If +so, the caller can either cast the \*(L"const\*(R" away (if they're providing +the raw callbacks themselves) or use the macros to declare/implement +the wrapper functions without \*(L"const\*(R" types. +.PP +Callers that only have \*(L"const\*(R" access to data they're indexing in a +table, yet declare callbacks without constant types (or cast the +\&\*(L"const\*(R" away themselves), are therefore creating their own risks/bugs +without being encouraged to do so by the \s-1API.\s0 On a related note, +those auditing code should pay special attention to any instances of +DECLARE/IMPLEMENT_LHASH_DOALL_[\s-1ARG_\s0]_FN macros that provide types +without any \*(L"const\*(R" qualifiers. +.SH "BUGS" +.IX Header "BUGS" +\&\fBlh_TYPE_insert()\fR returns \fB\s-1NULL\s0\fR both for success and error. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBOPENSSL_LH_stats\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +In OpenSSL 1.0.0, the lhash interface was revamped for better +type checking. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OPENSSL_LH_stats.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OPENSSL_LH_stats.3 new file mode 100644 index 00000000..8d54597b --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OPENSSL_LH_stats.3 @@ -0,0 +1,197 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "OPENSSL_LH_STATS 3" +.TH OPENSSL_LH_STATS 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +OPENSSL_LH_stats, OPENSSL_LH_node_stats, OPENSSL_LH_node_usage_stats, OPENSSL_LH_stats_bio, OPENSSL_LH_node_stats_bio, OPENSSL_LH_node_usage_stats_bio \- LHASH statistics +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& void OPENSSL_LH_stats(LHASH *table, FILE *out); +\& void OPENSSL_LH_node_stats(LHASH *table, FILE *out); +\& void OPENSSL_LH_node_usage_stats(LHASH *table, FILE *out); +\& +\& void OPENSSL_LH_stats_bio(LHASH *table, BIO *out); +\& void OPENSSL_LH_node_stats_bio(LHASH *table, BIO *out); +\& void OPENSSL_LH_node_usage_stats_bio(LHASH *table, BIO *out); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fB\s-1LHASH\s0\fR structure records statistics about most aspects of +accessing the hash table. +.PP +\&\fBOPENSSL_LH_stats()\fR prints out statistics on the size of the hash table, how +many entries are in it, and the number and result of calls to the +routines in this library. +.PP +\&\fBOPENSSL_LH_node_stats()\fR prints the number of entries for each 'bucket' in the +hash table. +.PP +\&\fBOPENSSL_LH_node_usage_stats()\fR prints out a short summary of the state of the +hash table. It prints the 'load' and the 'actual load'. The load is +the average number of data items per 'bucket' in the hash table. The +\&'actual load' is the average number of items per 'bucket', but only +for buckets which contain entries. So the 'actual load' is the +average number of searches that will need to find an item in the hash +table, while the 'load' is the average number that will be done to +record a miss. +.PP +\&\fBOPENSSL_LH_stats_bio()\fR, \fBOPENSSL_LH_node_stats_bio()\fR and \fBOPENSSL_LH_node_usage_stats_bio()\fR +are the same as the above, except that the output goes to a \fB\s-1BIO\s0\fR. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +These functions do not return values. +.SH "NOTE" +.IX Header "NOTE" +These calls should be made under a read lock. Refer to +\&\*(L"\s-1NOTE\*(R"\s0 in \s-1\fBOPENSSL_LH_COMPFUNC\s0\fR\|(3) for more details about the locks required +when using the \s-1LHASH\s0 data structure. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBbio\fR\|(7), \s-1\fBOPENSSL_LH_COMPFUNC\s0\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OPENSSL_VERSION_NUMBER.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OPENSSL_VERSION_NUMBER.3 new file mode 100644 index 00000000..c94c2459 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OPENSSL_VERSION_NUMBER.3 @@ -0,0 +1,242 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "OPENSSL_VERSION_NUMBER 3" +.TH OPENSSL_VERSION_NUMBER 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +OPENSSL_VERSION_NUMBER, OPENSSL_VERSION_TEXT, OpenSSL_version, OpenSSL_version_num \- get OpenSSL version number +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 3 +\& #include +\& #define OPENSSL_VERSION_NUMBER 0xnnnnnnnnnL +\& #define OPENSSL_VERSION_TEXT "OpenSSL x.y.z xx XXX xxxx" +\& +\& #include +\& +\& unsigned long OpenSSL_version_num(); +\& const char *OpenSSL_version(int t); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\s-1OPENSSL_VERSION_NUMBER\s0 is a numeric release version identifier: +.PP +.Vb 1 +\& MNNFFPPS: major minor fix patch status +.Ve +.PP +The status nibble has one of the values 0 for development, 1 to e for betas +1 to 14, and f for release. +.PP +for example +.PP +.Vb 3 +\& 0x000906000 == 0.9.6 dev +\& 0x000906023 == 0.9.6b beta 3 +\& 0x00090605f == 0.9.6e release +.Ve +.PP +Versions prior to 0.9.3 have identifiers < 0x0930. +Versions between 0.9.3 and 0.9.5 had a version identifier with this +interpretation: +.PP +.Vb 1 +\& MMNNFFRBB major minor fix final beta/patch +.Ve +.PP +for example +.PP +.Vb 2 +\& 0x000904100 == 0.9.4 release +\& 0x000905000 == 0.9.5 dev +.Ve +.PP +Version 0.9.5a had an interim interpretation that is like the current one, +except the patch level got the highest bit set, to keep continuity. The +number was therefore 0x0090581f. +.PP +\&\s-1OPENSSL_VERSION_TEXT\s0 is the text variant of the version number and the +release date. For example, +\&\*(L"OpenSSL 1.0.1a 15 Oct 2015\*(R". +.PP +\&\fBOpenSSL_version_num()\fR returns the version number. +.PP +\&\fBOpenSSL_version()\fR returns different strings depending on \fBt\fR: +.IP "\s-1OPENSSL_VERSION\s0" 4 +.IX Item "OPENSSL_VERSION" +The text variant of the version number and the release date. For example, +\&\*(L"OpenSSL 1.0.1a 15 Oct 2015\*(R". +.IP "\s-1OPENSSL_CFLAGS\s0" 4 +.IX Item "OPENSSL_CFLAGS" +The compiler flags set for the compilation process in the form +\&\*(L"compiler: ...\*(R" if available or \*(L"compiler: information not available\*(R" +otherwise. +.IP "\s-1OPENSSL_BUILT_ON\s0" 4 +.IX Item "OPENSSL_BUILT_ON" +The date of the build process in the form \*(L"built on: ...\*(R" if available +or \*(L"built on: date not available\*(R" otherwise. +.IP "\s-1OPENSSL_PLATFORM\s0" 4 +.IX Item "OPENSSL_PLATFORM" +The \*(L"Configure\*(R" target of the library build in the form \*(L"platform: ...\*(R" +if available or \*(L"platform: information not available\*(R" otherwise. +.IP "\s-1OPENSSL_DIR\s0" 4 +.IX Item "OPENSSL_DIR" +The \*(L"\s-1OPENSSLDIR\*(R"\s0 setting of the library build in the form \*(L"\s-1OPENSSLDIR: \*(R"..."\*(L"\s0 +if available or \*(R"\s-1OPENSSLDIR: N/A"\s0 otherwise. +.IP "\s-1OPENSSL_ENGINES_DIR\s0" 4 +.IX Item "OPENSSL_ENGINES_DIR" +The \*(L"\s-1ENGINESDIR\*(R"\s0 setting of the library build in the form \*(L"\s-1ENGINESDIR: \*(R"..."\*(L"\s0 +if available or \*(R"\s-1ENGINESDIR: N/A"\s0 otherwise. +.PP +For an unknown \fBt\fR, the text \*(L"not available\*(R" is returned. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBOpenSSL_version_num()\fR returns the version number. +.PP +\&\fBOpenSSL_version()\fR returns requested version strings. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBcrypto\fR\|(7) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OPENSSL_config.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OPENSSL_config.3 new file mode 100644 index 00000000..8ffee227 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OPENSSL_config.3 @@ -0,0 +1,210 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "OPENSSL_CONFIG 3" +.TH OPENSSL_CONFIG 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +OPENSSL_config, OPENSSL_no_config \- simple OpenSSL configuration functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& #if OPENSSL_API_COMPAT < 0x10100000L +\& void OPENSSL_config(const char *appname); +\& void OPENSSL_no_config(void); +\& #endif +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBOPENSSL_config()\fR configures OpenSSL using the standard \fBopenssl.cnf\fR and +reads from the application section \fBappname\fR. If \fBappname\fR is \s-1NULL\s0 then +the default section, \fBopenssl_conf\fR, will be used. +Errors are silently ignored. +Multiple calls have no effect. +.PP +\&\fBOPENSSL_no_config()\fR disables configuration. If called before \fBOPENSSL_config()\fR +no configuration takes place. +.PP +If the application is built with \fB\s-1OPENSSL_LOAD_CONF\s0\fR defined, then a +call to \fBOpenSSL_add_all_algorithms()\fR will implicitly call \fBOPENSSL_config()\fR +first. +.SH "NOTES" +.IX Header "NOTES" +The \fBOPENSSL_config()\fR function is designed to be a very simple \*(L"call it and +forget it\*(R" function. +It is however \fBmuch\fR better than nothing. Applications which need finer +control over their configuration functionality should use the configuration +functions such as \fBCONF_modules_load()\fR directly. This function is deprecated +and its use should be avoided. +Applications should instead call \fBCONF_modules_load()\fR during +initialization (that is before starting any threads). +.PP +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 +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 \fBOPENSSL_config()\fR it doesn't need to know or care about +\&\s-1ENGINE\s0 control operations because they can be performed by editing a +configuration file. +.SH "ENVIRONMENT" +.IX Header "ENVIRONMENT" +.IP "\fB\s-1OPENSSL_CONF\s0\fR" 4 +.IX Item "OPENSSL_CONF" +The path to the config file. +Ignored in set-user-ID and set-group-ID programs. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +Neither \fBOPENSSL_config()\fR nor \fBOPENSSL_no_config()\fR return a value. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBconfig\fR\|(5), +\&\fBCONF_modules_load_file\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +The \fBOPENSSL_no_config()\fR and \fBOPENSSL_config()\fR functions were +deprecated in OpenSSL 1.1.0 by \fBOPENSSL_init_crypto()\fR. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2004\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OPENSSL_fork_prepare.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OPENSSL_fork_prepare.3 new file mode 100644 index 00000000..d5d3e7a6 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OPENSSL_fork_prepare.3 @@ -0,0 +1,191 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "OPENSSL_FORK_PREPARE 3" +.TH OPENSSL_FORK_PREPARE 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +OPENSSL_fork_prepare, OPENSSL_fork_parent, OPENSSL_fork_child \&\- OpenSSL fork handlers +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& void OPENSSL_fork_prepare(void); +\& void OPENSSL_fork_parent(void); +\& void OPENSSL_fork_child(void); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +OpenSSL has state that should be reset when a process forks. For example, +the entropy pool used to generate random numbers (and therefore encryption +keys) should not be shared across multiple programs. +The \fBOPENSSL_fork_prepare()\fR, \fBOPENSSL_fork_parent()\fR, and \fBOPENSSL_fork_child()\fR +functions are used to reset this internal state. +.PP +Platforms without \fBfork\fR\|(2) will probably not need to use these functions. +Platforms with \fBfork\fR\|(2) but without \fBpthread_atfork\fR\|(3) will probably need +to call them manually, as described in the following paragraph. Platforms +such as Linux that have both functions will normally not need to call these +functions as the OpenSSL library will do so automatically. +.PP +\&\fBOPENSSL_init_crypto\fR\|(3) will register these functions with the appropriate +handler, when the \fB\s-1OPENSSL_INIT_ATFORK\s0\fR flag is used. For other +applications, these functions can be called directly. They should be used +according to the calling sequence described by the \fBpthread_atfork\fR\|(3) +documentation, which is summarized here. \fBOPENSSL_fork_prepare()\fR should +be called before a \fBfork()\fR is done. After the \fBfork()\fR returns, the parent +process should call \fBOPENSSL_fork_parent()\fR and the child process should +call \fBOPENSSL_fork_child()\fR. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBOPENSSL_fork_prepare()\fR, \fBOPENSSL_fork_parent()\fR and \fBOPENSSL_fork_child()\fR do not +return values. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBOPENSSL_init_crypto\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +These functions were added in OpenSSL 1.1.1. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OPENSSL_ia32cap.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OPENSSL_ia32cap.3 new file mode 100644 index 00000000..663eee7f --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OPENSSL_ia32cap.3 @@ -0,0 +1,295 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "OPENSSL_IA32CAP 3" +.TH OPENSSL_IA32CAP 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +OPENSSL_ia32cap \- the x86[_64] processor capabilities vector +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& env OPENSSL_ia32cap=... +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +OpenSSL supports a range of x86[_64] instruction set extensions. These +extensions are denoted by individual bits in capability vector returned +by processor in \s-1EDX:ECX\s0 register pair after executing \s-1CPUID\s0 instruction +with EAX=1 input value (see Intel Application Note #241618). This vector +is copied to memory upon toolkit initialization and used to choose +between different code paths to provide optimal performance across wide +range of processors. For the moment of this writing following bits are +significant: +.IP "bit #4 denoting presence of Time-Stamp Counter." 4 +.IX Item "bit #4 denoting presence of Time-Stamp Counter." +.PD 0 +.IP "bit #19 denoting availability of \s-1CLFLUSH\s0 instruction;" 4 +.IX Item "bit #19 denoting availability of CLFLUSH instruction;" +.IP "bit #20, reserved by Intel, is used to choose among \s-1RC4\s0 code paths;" 4 +.IX Item "bit #20, reserved by Intel, is used to choose among RC4 code paths;" +.IP "bit #23 denoting \s-1MMX\s0 support;" 4 +.IX Item "bit #23 denoting MMX support;" +.IP "bit #24, \s-1FXSR\s0 bit, denoting availability of \s-1XMM\s0 registers;" 4 +.IX Item "bit #24, FXSR bit, denoting availability of XMM registers;" +.IP "bit #25 denoting \s-1SSE\s0 support;" 4 +.IX Item "bit #25 denoting SSE support;" +.IP "bit #26 denoting \s-1SSE2\s0 support;" 4 +.IX Item "bit #26 denoting SSE2 support;" +.IP "bit #28 denoting Hyperthreading, which is used to distinguish cores with shared cache;" 4 +.IX Item "bit #28 denoting Hyperthreading, which is used to distinguish cores with shared cache;" +.IP "bit #30, reserved by Intel, denotes specifically Intel CPUs;" 4 +.IX Item "bit #30, reserved by Intel, denotes specifically Intel CPUs;" +.IP "bit #33 denoting availability of \s-1PCLMULQDQ\s0 instruction;" 4 +.IX Item "bit #33 denoting availability of PCLMULQDQ instruction;" +.IP "bit #41 denoting \s-1SSSE3,\s0 Supplemental \s-1SSE3,\s0 support;" 4 +.IX Item "bit #41 denoting SSSE3, Supplemental SSE3, support;" +.IP "bit #43 denoting \s-1AMD XOP\s0 support (forced to zero on non-AMD CPUs);" 4 +.IX Item "bit #43 denoting AMD XOP support (forced to zero on non-AMD CPUs);" +.IP "bit #54 denoting availability of \s-1MOVBE\s0 instruction;" 4 +.IX Item "bit #54 denoting availability of MOVBE instruction;" +.IP "bit #57 denoting AES-NI instruction set extension;" 4 +.IX Item "bit #57 denoting AES-NI instruction set extension;" +.IP "bit #58, \s-1XSAVE\s0 bit, lack of which in combination with \s-1MOVBE\s0 is used to identify Atom Silvermont core;" 4 +.IX Item "bit #58, XSAVE bit, lack of which in combination with MOVBE is used to identify Atom Silvermont core;" +.IP "bit #59, \s-1OSXSAVE\s0 bit, denoting availability of \s-1YMM\s0 registers;" 4 +.IX Item "bit #59, OSXSAVE bit, denoting availability of YMM registers;" +.IP "bit #60 denoting \s-1AVX\s0 extension;" 4 +.IX Item "bit #60 denoting AVX extension;" +.IP "bit #62 denoting availability of \s-1RDRAND\s0 instruction;" 4 +.IX Item "bit #62 denoting availability of RDRAND instruction;" +.PD +.PP +For example, in 32\-bit application context clearing bit #26 at run-time +disables high-performance \s-1SSE2\s0 code present in the crypto library, while +clearing bit #24 disables \s-1SSE2\s0 code operating on 128\-bit \s-1XMM\s0 register +bank. You might have to do the latter if target OpenSSL application is +executed on \s-1SSE2\s0 capable \s-1CPU,\s0 but under control of \s-1OS\s0 that does not +enable \s-1XMM\s0 registers. Historically address of the capability vector copy +was exposed to application through \fBOPENSSL_ia32cap_loc()\fR, but not +anymore. Now the only way to affect the capability detection is to set +OPENSSL_ia32cap environment variable prior target application start. To +give a specific example, on Intel P4 processor 'env +OPENSSL_ia32cap=0x16980010 apps/openssl', or better yet 'env +OPENSSL_ia32cap=~0x1000000 apps/openssl' would achieve the desired +effect. Alternatively you can reconfigure the toolkit with no\-sse2 +option and recompile. +.PP +Less intuitive is clearing bit #28, or ~0x10000000 in the \*(L"environment +variable\*(R" terms. The truth is that it's not copied from \s-1CPUID\s0 output +verbatim, but is adjusted to reflect whether or not the data cache is +actually shared between logical cores. This in turn affects the decision +on whether or not expensive countermeasures against cache-timing attacks +are applied, most notably in \s-1AES\s0 assembler module. +.PP +The capability vector is further extended with \s-1EBX\s0 value returned by +\&\s-1CPUID\s0 with EAX=7 and ECX=0 as input. Following bits are significant: +.IP "bit #64+3 denoting availability of \s-1BMI1\s0 instructions, e.g. \s-1ANDN\s0;" 4 +.IX Item "bit #64+3 denoting availability of BMI1 instructions, e.g. ANDN;" +.PD 0 +.IP "bit #64+5 denoting availability of \s-1AVX2\s0 instructions;" 4 +.IX Item "bit #64+5 denoting availability of AVX2 instructions;" +.IP "bit #64+8 denoting availability of \s-1BMI2\s0 instructions, e.g. \s-1MULX\s0 and \s-1RORX\s0;" 4 +.IX Item "bit #64+8 denoting availability of BMI2 instructions, e.g. MULX and RORX;" +.IP "bit #64+16 denoting availability of \s-1AVX512F\s0 extension;" 4 +.IX Item "bit #64+16 denoting availability of AVX512F extension;" +.IP "bit #64+18 denoting availability of \s-1RDSEED\s0 instruction;" 4 +.IX Item "bit #64+18 denoting availability of RDSEED instruction;" +.IP "bit #64+19 denoting availability of \s-1ADCX\s0 and \s-1ADOX\s0 instructions;" 4 +.IX Item "bit #64+19 denoting availability of ADCX and ADOX instructions;" +.IP "bit #64+21 denoting availability of VPMADD52[\s-1LH\s0]UQ instructions, a.k.a. \s-1AVX512IFMA\s0 extension;" 4 +.IX Item "bit #64+21 denoting availability of VPMADD52[LH]UQ instructions, a.k.a. AVX512IFMA extension;" +.IP "bit #64+29 denoting availability of \s-1SHA\s0 extension;" 4 +.IX Item "bit #64+29 denoting availability of SHA extension;" +.IP "bit #64+30 denoting availability of \s-1AVX512BW\s0 extension;" 4 +.IX Item "bit #64+30 denoting availability of AVX512BW extension;" +.IP "bit #64+31 denoting availability of \s-1AVX512VL\s0 extension;" 4 +.IX Item "bit #64+31 denoting availability of AVX512VL extension;" +.IP "bit #64+41 denoting availability of \s-1VAES\s0 extension;" 4 +.IX Item "bit #64+41 denoting availability of VAES extension;" +.IP "bit #64+42 denoting availability of \s-1VPCLMULQDQ\s0 extension;" 4 +.IX Item "bit #64+42 denoting availability of VPCLMULQDQ extension;" +.PD +.PP +To control this extended capability word use ':' as delimiter when +setting up OPENSSL_ia32cap environment variable. For example assigning +\&':~0x20' would disable \s-1AVX2\s0 code paths, and ':0' \- all post-AVX +extensions. +.PP +It should be noted that whether or not some of the most \*(L"fancy\*(R" +extension code paths are actually assembled depends on current assembler +version. Base minimum of \s-1AES\-NI/PCLMULQDQ, SSSE3\s0 and \s-1SHA\s0 extension code +paths are always assembled. Apart from that, minimum assembler version +requirements are summarized in below table: +.PP +.Vb 8 +\& Extension | GNU as | nasm | llvm +\& \-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\- +\& AVX | 2.19 | 2.09 | 3.0 +\& AVX2 | 2.22 | 2.10 | 3.1 +\& ADCX/ADOX | 2.23 | 2.10 | 3.3 +\& AVX512 | 2.25 | 2.11.8 | see NOTES +\& AVX512IFMA | 2.26 | 2.11.8 | see NOTES +\& VAES | 2.30 | 2.13.3 | +.Ve +.SH "NOTES" +.IX Header "NOTES" +Even though \s-1AVX512\s0 support was implemented in llvm 3.6, compilation of +assembly modules apparently requires explicit \-march flag. But then +compiler generates processor-specific code, which in turn contradicts +the mere idea of run-time switch execution facilitated by the variable +in question. Till the limitation is lifted, it's possible to work around +the problem by making build procedure use following script: +.PP +.Vb 2 +\& #!/bin/sh +\& exec clang \-no\-integrated\-as "$@" +.Ve +.PP +instead of real clang. In which case it doesn't matter which clang +version is used, as it is \s-1GNU\s0 assembler version that will be checked. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +Not available. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2004\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OPENSSL_init_crypto.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OPENSSL_init_crypto.3 new file mode 100644 index 00000000..534d12ad --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OPENSSL_init_crypto.3 @@ -0,0 +1,379 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "OPENSSL_INIT_CRYPTO 3" +.TH OPENSSL_INIT_CRYPTO 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +OPENSSL_INIT_new, OPENSSL_INIT_set_config_filename, OPENSSL_INIT_set_config_appname, OPENSSL_INIT_set_config_file_flags, OPENSSL_INIT_free, OPENSSL_init_crypto, OPENSSL_cleanup, OPENSSL_atexit, OPENSSL_thread_stop \- OpenSSL initialisation and deinitialisation functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& void OPENSSL_cleanup(void); +\& int OPENSSL_init_crypto(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings); +\& int OPENSSL_atexit(void (*handler)(void)); +\& void OPENSSL_thread_stop(void); +\& +\& OPENSSL_INIT_SETTINGS *OPENSSL_INIT_new(void); +\& int OPENSSL_INIT_set_config_filename(OPENSSL_INIT_SETTINGS *init, +\& const char* filename); +\& int OPENSSL_INIT_set_config_file_flags(OPENSSL_INIT_SETTINGS *init, +\& unsigned long flags); +\& int OPENSSL_INIT_set_config_appname(OPENSSL_INIT_SETTINGS *init, +\& const char* name); +\& void OPENSSL_INIT_free(OPENSSL_INIT_SETTINGS *init); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +During normal operation OpenSSL (libcrypto) will allocate various resources at +start up that must, subsequently, be freed on close down of the library. +Additionally some resources are allocated on a per thread basis (if the +application is multi-threaded), and these resources must be freed prior to the +thread closing. +.PP +As of version 1.1.0 OpenSSL will automatically allocate all resources that it +needs so no explicit initialisation is required. Similarly it will also +automatically deinitialise as required. +.PP +However, there may be situations when explicit initialisation is desirable or +needed, for example when some non-default initialisation is required. The +function \fBOPENSSL_init_crypto()\fR can be used for this purpose for +libcrypto (see also \fBOPENSSL_init_ssl\fR\|(3) for the libssl +equivalent). +.PP +Numerous internal OpenSSL functions call \fBOPENSSL_init_crypto()\fR. +Therefore, in order to perform non-default initialisation, +\&\fBOPENSSL_init_crypto()\fR \s-1MUST\s0 be called by application code prior to +any other OpenSSL function calls. +.PP +The \fBopts\fR parameter specifies which aspects of libcrypto should be +initialised. Valid options are: +.IP "\s-1OPENSSL_INIT_NO_LOAD_CRYPTO_STRINGS\s0" 4 +.IX Item "OPENSSL_INIT_NO_LOAD_CRYPTO_STRINGS" +Suppress automatic loading of the libcrypto error strings. This option is +not a default option. Once selected subsequent calls to +\&\fBOPENSSL_init_crypto()\fR with the option +\&\fB\s-1OPENSSL_INIT_LOAD_CRYPTO_STRINGS\s0\fR will be ignored. +.IP "\s-1OPENSSL_INIT_LOAD_CRYPTO_STRINGS\s0" 4 +.IX Item "OPENSSL_INIT_LOAD_CRYPTO_STRINGS" +Automatic loading of the libcrypto error strings. With this option the +library will automatically load the libcrypto error strings. +This option is a default option. Once selected subsequent calls to +\&\fBOPENSSL_init_crypto()\fR with the option +\&\fB\s-1OPENSSL_INIT_NO_LOAD_CRYPTO_STRINGS\s0\fR will be ignored. +.IP "\s-1OPENSSL_INIT_ADD_ALL_CIPHERS\s0" 4 +.IX Item "OPENSSL_INIT_ADD_ALL_CIPHERS" +With this option the library will automatically load and make available all +libcrypto ciphers. This option is a default option. Once selected subsequent +calls to \fBOPENSSL_init_crypto()\fR with the option +\&\fB\s-1OPENSSL_INIT_NO_ADD_ALL_CIPHERS\s0\fR will be ignored. +.IP "\s-1OPENSSL_INIT_ADD_ALL_DIGESTS\s0" 4 +.IX Item "OPENSSL_INIT_ADD_ALL_DIGESTS" +With this option the library will automatically load and make available all +libcrypto digests. This option is a default option. Once selected subsequent +calls to \fBOPENSSL_init_crypto()\fR with the option +\&\fB\s-1OPENSSL_INIT_NO_ADD_ALL_CIPHERS\s0\fR will be ignored. +.IP "\s-1OPENSSL_INIT_NO_ADD_ALL_CIPHERS\s0" 4 +.IX Item "OPENSSL_INIT_NO_ADD_ALL_CIPHERS" +With this option the library will suppress automatic loading of libcrypto +ciphers. This option is not a default option. Once selected subsequent +calls to \fBOPENSSL_init_crypto()\fR with the option +\&\fB\s-1OPENSSL_INIT_ADD_ALL_CIPHERS\s0\fR will be ignored. +.IP "\s-1OPENSSL_INIT_NO_ADD_ALL_DIGESTS\s0" 4 +.IX Item "OPENSSL_INIT_NO_ADD_ALL_DIGESTS" +With this option the library will suppress automatic loading of libcrypto +digests. This option is not a default option. Once selected subsequent +calls to \fBOPENSSL_init_crypto()\fR with the option +\&\fB\s-1OPENSSL_INIT_ADD_ALL_DIGESTS\s0\fR will be ignored. +.IP "\s-1OPENSSL_INIT_LOAD_CONFIG\s0" 4 +.IX Item "OPENSSL_INIT_LOAD_CONFIG" +With this option an OpenSSL configuration file will be automatically loaded and +used by calling \fBOPENSSL_config()\fR. This is not a default option for libcrypto. +As of OpenSSL 1.1.1 this is a default option for libssl (see +\&\fBOPENSSL_init_ssl\fR\|(3) for further details about libssl initialisation). See the +description of \fBOPENSSL_INIT_new()\fR, below. +.IP "\s-1OPENSSL_INIT_NO_LOAD_CONFIG\s0" 4 +.IX Item "OPENSSL_INIT_NO_LOAD_CONFIG" +With this option the loading of OpenSSL configuration files will be suppressed. +It is the equivalent of calling \fBOPENSSL_no_config()\fR. This is not a default +option. +.IP "\s-1OPENSSL_INIT_ASYNC\s0" 4 +.IX Item "OPENSSL_INIT_ASYNC" +With this option the library with automatically initialise the libcrypto async +sub-library (see \fBASYNC_start_job\fR\|(3)). This is a default option. +.IP "\s-1OPENSSL_INIT_ENGINE_RDRAND\s0" 4 +.IX Item "OPENSSL_INIT_ENGINE_RDRAND" +With this option the library will automatically load and initialise the +\&\s-1RDRAND\s0 engine (if available). This not a default option. +.IP "\s-1OPENSSL_INIT_ENGINE_DYNAMIC\s0" 4 +.IX Item "OPENSSL_INIT_ENGINE_DYNAMIC" +With this option the library will automatically load and initialise the +dynamic engine. This not a default option. +.IP "\s-1OPENSSL_INIT_ENGINE_OPENSSL\s0" 4 +.IX Item "OPENSSL_INIT_ENGINE_OPENSSL" +With this option the library will automatically load and initialise the +openssl engine. This not a default option. +.IP "\s-1OPENSSL_INIT_ENGINE_CRYPTODEV\s0" 4 +.IX Item "OPENSSL_INIT_ENGINE_CRYPTODEV" +With this option the library will automatically load and initialise the +cryptodev engine (if available). This not a default option. +.IP "\s-1OPENSSL_INIT_ENGINE_CAPI\s0" 4 +.IX Item "OPENSSL_INIT_ENGINE_CAPI" +With this option the library will automatically load and initialise the +\&\s-1CAPI\s0 engine (if available). This not a default option. +.IP "\s-1OPENSSL_INIT_ENGINE_PADLOCK\s0" 4 +.IX Item "OPENSSL_INIT_ENGINE_PADLOCK" +With this option the library will automatically load and initialise the +padlock engine (if available). This not a default option. +.IP "\s-1OPENSSL_INIT_ENGINE_AFALG\s0" 4 +.IX Item "OPENSSL_INIT_ENGINE_AFALG" +With this option the library will automatically load and initialise the +\&\s-1AFALG\s0 engine. This not a default option. +.IP "\s-1OPENSSL_INIT_ENGINE_ALL_BUILTIN\s0" 4 +.IX Item "OPENSSL_INIT_ENGINE_ALL_BUILTIN" +With this option the library will automatically load and initialise all the +built in engines listed above with the exception of the openssl and afalg +engines. This not a default option. +.IP "\s-1OPENSSL_INIT_ATFORK\s0" 4 +.IX Item "OPENSSL_INIT_ATFORK" +With this option the library will register its fork handlers. +See \fBOPENSSL_fork_prepare\fR\|(3) for details. +.IP "\s-1OPENSSL_INIT_NO_ATEXIT\s0" 4 +.IX Item "OPENSSL_INIT_NO_ATEXIT" +By default OpenSSL will attempt to clean itself up when the process exits via an +\&\*(L"atexit\*(R" handler. Using this option suppresses that behaviour. This means that +the application will have to clean up OpenSSL explicitly using +\&\fBOPENSSL_cleanup()\fR. +.PP +Multiple options may be combined together in a single call to +\&\fBOPENSSL_init_crypto()\fR. For example: +.PP +.Vb 2 +\& OPENSSL_init_crypto(OPENSSL_INIT_NO_ADD_ALL_CIPHERS +\& | OPENSSL_INIT_NO_ADD_ALL_DIGESTS, NULL); +.Ve +.PP +The \fBOPENSSL_cleanup()\fR function deinitialises OpenSSL (both libcrypto +and libssl). All resources allocated by OpenSSL are freed. Typically there +should be no need to call this function directly as it is initiated +automatically on application exit. This is done via the standard C library +\&\fBatexit()\fR function. In the event that the application will close in a manner +that will not call the registered \fBatexit()\fR handlers then the application should +call \fBOPENSSL_cleanup()\fR directly. Developers of libraries using OpenSSL +are discouraged from calling this function and should instead, typically, rely +on auto-deinitialisation. This is to avoid error conditions where both an +application and a library it depends on both use OpenSSL, and the library +deinitialises it before the application has finished using it. +.PP +Once \fBOPENSSL_cleanup()\fR has been called the library cannot be reinitialised. +Attempts to call \fBOPENSSL_init_crypto()\fR will fail and an \s-1ERR_R_INIT_FAIL\s0 error +will be added to the error stack. Note that because initialisation has failed +OpenSSL error strings will not be available, only an error code. This code can +be put through the openssl errstr command line application to produce a human +readable error (see \fBerrstr\fR\|(1)). +.PP +The \fBOPENSSL_atexit()\fR function enables the registration of a +function to be called during \fBOPENSSL_cleanup()\fR. Stop handlers are +called after deinitialisation of resources local to a thread, but before other +process wide resources are freed. In the event that multiple stop handlers are +registered, no guarantees are made about the order of execution. +.PP +The \fBOPENSSL_thread_stop()\fR function deallocates resources associated +with the current thread. Typically this function will be called automatically by +the library when the thread exits. This should only be called directly if +resources should be freed at an earlier time, or under the circumstances +described in the \s-1NOTES\s0 section below. +.PP +The \fB\s-1OPENSSL_INIT_LOAD_CONFIG\s0\fR flag will load a configuration file, as with +\&\fBCONF_modules_load_file\fR\|(3) with \s-1NULL\s0 filename and application name and the +\&\fB\s-1CONF_MFLAGS_IGNORE_MISSING_FILE\s0\fR, \fB\s-1CONF_MFLAGS_IGNORE_RETURN_CODES\s0\fR and +\&\fB\s-1CONF_MFLAGS_DEFAULT_SECTION\s0\fR flags. +The filename, application name, and flags can be customized by providing a +non-null \fB\s-1OPENSSL_INIT_SETTINGS\s0\fR object. +The object can be allocated via \fB\fBOPENSSL_init_new()\fB\fR. +The \fB\fBOPENSSL_INIT_set_config_filename()\fB\fR function can be used to specify a +non-default filename, which is copied and need not refer to persistent storage. +Similarly, \fBOPENSSL_INIT_set_config_appname()\fR can be used to specify a +non-default application name. +Finally, OPENSSL_INIT_set_file_flags can be used to specify non-default flags. +If the \fB\s-1CONF_MFLAGS_IGNORE_RETURN_CODES\s0\fR flag is not included, any errors in +the configuration file will cause an error return from \fBOPENSSL_init_crypto\fR +or indirectly \fBOPENSSL_init_ssl\fR\|(3). +The object can be released with \fBOPENSSL_INIT_free()\fR when done. +.SH "NOTES" +.IX Header "NOTES" +Resources local to a thread are deallocated automatically when the thread exits +(e.g. in a pthreads environment, when \fBpthread_exit()\fR is called). On Windows +platforms this is done in response to a \s-1DLL_THREAD_DETACH\s0 message being sent to +the libcrypto32.dll entry point. Some windows functions may cause threads to exit +without sending this message (for example \fBExitProcess()\fR). If the application +uses such functions, then the application must free up OpenSSL resources +directly via a call to \fBOPENSSL_thread_stop()\fR on each thread. Similarly this +message will also not be sent if OpenSSL is linked statically, and therefore +applications using static linking should also call \fBOPENSSL_thread_stop()\fR on each +thread. Additionally if OpenSSL is loaded dynamically via \fBLoadLibrary()\fR and the +threads are not destroyed until after \fBFreeLibrary()\fR is called then each thread +should call \fBOPENSSL_thread_stop()\fR prior to the \fBFreeLibrary()\fR call. +.PP +On Linux/Unix where OpenSSL has been loaded via \fBdlopen()\fR and the application is +multi-threaded and if \fBdlclose()\fR is subsequently called prior to the threads +being destroyed then OpenSSL will not be able to deallocate resources associated +with those threads. The application should either call \fBOPENSSL_thread_stop()\fR on +each thread prior to the \fBdlclose()\fR call, or alternatively the original \fBdlopen()\fR +call should use the \s-1RTLD_NODELETE\s0 flag (where available on the platform). +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +The functions OPENSSL_init_crypto, \fBOPENSSL_atexit()\fR and +\&\fBOPENSSL_INIT_set_config_appname()\fR return 1 on success or 0 on error. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBOPENSSL_init_ssl\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +The \fBOPENSSL_init_crypto()\fR, \fBOPENSSL_cleanup()\fR, \fBOPENSSL_atexit()\fR, +\&\fBOPENSSL_thread_stop()\fR, \fBOPENSSL_INIT_new()\fR, \fBOPENSSL_INIT_set_config_appname()\fR +and \fBOPENSSL_INIT_free()\fR functions were added in OpenSSL 1.1.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2016\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OPENSSL_init_ssl.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OPENSSL_init_ssl.3 new file mode 100644 index 00000000..8933c157 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OPENSSL_init_ssl.3 @@ -0,0 +1,209 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "OPENSSL_INIT_SSL 3" +.TH OPENSSL_INIT_SSL 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +OPENSSL_init_ssl \- OpenSSL (libssl and libcrypto) initialisation +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int OPENSSL_init_ssl(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +During normal operation OpenSSL (libssl and libcrypto) will allocate various +resources at start up that must, subsequently, be freed on close down of the +library. Additionally some resources are allocated on a per thread basis (if the +application is multi-threaded), and these resources must be freed prior to the +thread closing. +.PP +As of version 1.1.0 OpenSSL will automatically allocate all resources that it +needs so no explicit initialisation is required. Similarly it will also +automatically deinitialise as required. +.PP +However, there may be situations when explicit initialisation is desirable or +needed, for example when some non-default initialisation is required. The +function \fBOPENSSL_init_ssl()\fR can be used for this purpose. Calling +this function will explicitly initialise \s-1BOTH\s0 libcrypto and libssl. To +explicitly initialise \s-1ONLY\s0 libcrypto see the +\&\fBOPENSSL_init_crypto\fR\|(3) function. +.PP +Numerous internal OpenSSL functions call \fBOPENSSL_init_ssl()\fR. +Therefore, in order to perform non-default initialisation, +\&\fBOPENSSL_init_ssl()\fR \s-1MUST\s0 be called by application code prior to +any other OpenSSL function calls. +.PP +The \fBopts\fR parameter specifies which aspects of libssl and libcrypto should be +initialised. Valid options for libcrypto are described on the +\&\fBOPENSSL_init_crypto\fR\|(3) page. In addition to any libcrypto +specific option the following libssl options can also be used: +.IP "\s-1OPENSSL_INIT_NO_LOAD_SSL_STRINGS\s0" 4 +.IX Item "OPENSSL_INIT_NO_LOAD_SSL_STRINGS" +Suppress automatic loading of the libssl error strings. This option is +not a default option. Once selected subsequent calls to +\&\fBOPENSSL_init_ssl()\fR with the option +\&\fB\s-1OPENSSL_INIT_LOAD_SSL_STRINGS\s0\fR will be ignored. +.IP "\s-1OPENSSL_INIT_LOAD_SSL_STRINGS\s0" 4 +.IX Item "OPENSSL_INIT_LOAD_SSL_STRINGS" +Automatic loading of the libssl error strings. This option is a +default option. Once selected subsequent calls to +\&\fBOPENSSL_init_ssl()\fR with the option +\&\fB\s-1OPENSSL_INIT_LOAD_SSL_STRINGS\s0\fR will be ignored. +.PP +\&\fBOPENSSL_init_ssl()\fR takes a \fBsettings\fR parameter which can be used to +set parameter values. See \fBOPENSSL_init_crypto\fR\|(3) for details. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +The function \fBOPENSSL_init_ssl()\fR returns 1 on success or 0 on error. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBOPENSSL_init_crypto\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +The \fBOPENSSL_init_ssl()\fR function was added in OpenSSL 1.1.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OPENSSL_instrument_bus.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OPENSSL_instrument_bus.3 new file mode 100644 index 00000000..482178f2 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OPENSSL_instrument_bus.3 @@ -0,0 +1,186 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "OPENSSL_INSTRUMENT_BUS 3" +.TH OPENSSL_INSTRUMENT_BUS 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +OPENSSL_instrument_bus, OPENSSL_instrument_bus2 \- instrument references to memory bus +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 4 +\& #ifdef OPENSSL_CPUID_OBJ +\& size_t OPENSSL_instrument_bus(int *vector, size_t num); +\& size_t OPENSSL_instrument_bus2(int *vector, size_t num, size_t max); +\& #endif +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +It was empirically found that timings of references to primary memory +are subject to irregular, apparently non-deterministic variations. The +subroutines in question instrument these references for purposes of +gathering randomness for random number generator. In order to make it +bus-bound a 'flush cache line' instruction is used between probes. In +addition probes are added to \fBvector\fR elements in atomic or +interlocked manner, which should contribute additional noise on +multi-processor systems. This also means that \fBvector[num]\fR should be +zeroed upon invocation (if you want to retrieve actual probe values). +.PP +\&\fBOPENSSL_instrument_bus()\fR performs \fBnum\fR probes and records the number of +oscillator cycles every probe took. +.PP +\&\fBOPENSSL_instrument_bus2()\fR on the other hand \fBaccumulates\fR consecutive +probes with the same value, i.e. in a way it records duration of +periods when probe values appeared deterministic. The subroutine +performs at most \fBmax\fR probes in attempt to fill the \fBvector[num]\fR, +with \fBmax\fR value of 0 meaning \*(L"as many as it takes.\*(R" +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +Return value of 0 indicates that \s-1CPU\s0 is not capable of performing the +benchmark, either because oscillator counter or 'flush cache line' is +not available on current platform. For reference, on x86 'flush cache +line' was introduced with the \s-1SSE2\s0 extensions. +.PP +Otherwise number of recorded values is returned. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2011\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OPENSSL_load_builtin_modules.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OPENSSL_load_builtin_modules.3 new file mode 100644 index 00000000..4ee9b4ff --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OPENSSL_load_builtin_modules.3 @@ -0,0 +1,187 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "OPENSSL_LOAD_BUILTIN_MODULES 3" +.TH OPENSSL_LOAD_BUILTIN_MODULES 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +OPENSSL_load_builtin_modules, ASN1_add_oid_module, ENGINE_add_conf_module \- add standard configuration modules +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& void OPENSSL_load_builtin_modules(void); +\& void ASN1_add_oid_module(void); +\& void ENGINE_add_conf_module(void); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The function \fBOPENSSL_load_builtin_modules()\fR adds all the standard OpenSSL +configuration modules to the internal list. They can then be used by the +OpenSSL configuration code. +.PP +\&\fBASN1_add_oid_module()\fR adds just the \s-1ASN1 OBJECT\s0 module. +.PP +\&\fBENGINE_add_conf_module()\fR adds just the \s-1ENGINE\s0 configuration module. +.SH "NOTES" +.IX Header "NOTES" +If the simple configuration function \fBOPENSSL_config()\fR is called then +\&\fBOPENSSL_load_builtin_modules()\fR is called automatically. +.PP +Applications which use the configuration functions directly will need to +call \fBOPENSSL_load_builtin_modules()\fR themselves \fIbefore\fR any other +configuration code. +.PP +Applications should call \fBOPENSSL_load_builtin_modules()\fR to load all +configuration modules instead of adding modules selectively: otherwise +functionality may be missing from the application if an when new +modules are added. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +None of the functions return a value. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBconfig\fR\|(5), \fBOPENSSL_config\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2004\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OPENSSL_malloc.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OPENSSL_malloc.3 new file mode 100644 index 00000000..aad0a031 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OPENSSL_malloc.3 @@ -0,0 +1,371 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "OPENSSL_MALLOC 3" +.TH OPENSSL_MALLOC 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +OPENSSL_malloc_init, OPENSSL_malloc, OPENSSL_zalloc, OPENSSL_realloc, OPENSSL_free, OPENSSL_clear_realloc, OPENSSL_clear_free, OPENSSL_cleanse, CRYPTO_malloc, CRYPTO_zalloc, CRYPTO_realloc, CRYPTO_free, OPENSSL_strdup, OPENSSL_strndup, OPENSSL_memdup, OPENSSL_strlcpy, OPENSSL_strlcat, OPENSSL_hexstr2buf, OPENSSL_buf2hexstr, OPENSSL_hexchar2int, CRYPTO_strdup, CRYPTO_strndup, OPENSSL_mem_debug_push, OPENSSL_mem_debug_pop, CRYPTO_mem_debug_push, CRYPTO_mem_debug_pop, CRYPTO_clear_realloc, CRYPTO_clear_free, CRYPTO_get_mem_functions, CRYPTO_set_mem_functions, CRYPTO_get_alloc_counts, CRYPTO_set_mem_debug, CRYPTO_mem_ctrl, CRYPTO_mem_leaks, CRYPTO_mem_leaks_fp, CRYPTO_mem_leaks_cb, OPENSSL_MALLOC_FAILURES, OPENSSL_MALLOC_FD \&\- Memory allocation functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int OPENSSL_malloc_init(void) +\& +\& void *OPENSSL_malloc(size_t num) +\& void *OPENSSL_zalloc(size_t num) +\& void *OPENSSL_realloc(void *addr, size_t num) +\& void OPENSSL_free(void *addr) +\& char *OPENSSL_strdup(const char *str) +\& char *OPENSSL_strndup(const char *str, size_t s) +\& size_t OPENSSL_strlcat(char *dst, const char *src, size_t size); +\& size_t OPENSSL_strlcpy(char *dst, const char *src, size_t size); +\& void *OPENSSL_memdup(void *data, size_t s) +\& void *OPENSSL_clear_realloc(void *p, size_t old_len, size_t num) +\& void OPENSSL_clear_free(void *str, size_t num) +\& void OPENSSL_cleanse(void *ptr, size_t len); +\& +\& unsigned char *OPENSSL_hexstr2buf(const char *str, long *len); +\& char *OPENSSL_buf2hexstr(const unsigned char *buffer, long len); +\& int OPENSSL_hexchar2int(unsigned char c); +\& +\& void *CRYPTO_malloc(size_t num, const char *file, int line) +\& void *CRYPTO_zalloc(size_t num, const char *file, int line) +\& void *CRYPTO_realloc(void *p, size_t num, const char *file, int line) +\& void CRYPTO_free(void *str, const char *, int) +\& char *CRYPTO_strdup(const char *p, const char *file, int line) +\& char *CRYPTO_strndup(const char *p, size_t num, const char *file, int line) +\& void *CRYPTO_clear_realloc(void *p, size_t old_len, size_t num, +\& const char *file, int line) +\& void CRYPTO_clear_free(void *str, size_t num, const char *, int) +\& +\& void CRYPTO_get_mem_functions( +\& void *(**m)(size_t, const char *, int), +\& void *(**r)(void *, size_t, const char *, int), +\& void (**f)(void *, const char *, int)) +\& int CRYPTO_set_mem_functions( +\& void *(*m)(size_t, const char *, int), +\& void *(*r)(void *, size_t, const char *, int), +\& void (*f)(void *, const char *, int)) +\& +\& void CRYPTO_get_alloc_counts(int *m, int *r, int *f) +\& +\& int CRYPTO_set_mem_debug(int onoff) +\& +\& env OPENSSL_MALLOC_FAILURES=... +\& env OPENSSL_MALLOC_FD=... +\& +\& int CRYPTO_mem_ctrl(int mode); +\& +\& int OPENSSL_mem_debug_push(const char *info) +\& int OPENSSL_mem_debug_pop(void); +\& +\& int CRYPTO_mem_debug_push(const char *info, const char *file, int line); +\& int CRYPTO_mem_debug_pop(void); +\& +\& int CRYPTO_mem_leaks(BIO *b); +\& int CRYPTO_mem_leaks_fp(FILE *fp); +\& int CRYPTO_mem_leaks_cb(int (*cb)(const char *str, size_t len, void *u), +\& void *u); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +OpenSSL memory allocation is handled by the \fBOPENSSL_xxx\fR \s-1API.\s0 These are +generally macro's that add the standard C \fB_\|_FILE_\|_\fR and \fB_\|_LINE_\|_\fR +parameters and call a lower-level \fBCRYPTO_xxx\fR \s-1API.\s0 +Some functions do not add those parameters, but exist for consistency. +.PP +\&\fBOPENSSL_malloc_init()\fR does nothing and does not need to be called. It is +included for compatibility with older versions of OpenSSL. +.PP +\&\fBOPENSSL_malloc()\fR, \fBOPENSSL_realloc()\fR, and \fBOPENSSL_free()\fR are like the +C \fBmalloc()\fR, \fBrealloc()\fR, and \fBfree()\fR functions. +\&\fBOPENSSL_zalloc()\fR calls \fBmemset()\fR to zero the memory before returning. +.PP +\&\fBOPENSSL_clear_realloc()\fR and \fBOPENSSL_clear_free()\fR should be used +when the buffer at \fBaddr\fR holds sensitive information. +The old buffer is filled with zero's by calling \fBOPENSSL_cleanse()\fR +before ultimately calling \fBOPENSSL_free()\fR. +.PP +\&\fBOPENSSL_cleanse()\fR fills \fBptr\fR of size \fBlen\fR with a string of 0's. +Use \fBOPENSSL_cleanse()\fR with care if the memory is a mapping of a file. +If the storage controller uses write compression, then its possible +that sensitive tail bytes will survive zeroization because the block of +zeros will be compressed. If the storage controller uses wear leveling, +then the old sensitive data will not be overwritten; rather, a block of +0's will be written at a new physical location. +.PP +\&\fBOPENSSL_strdup()\fR, \fBOPENSSL_strndup()\fR and \fBOPENSSL_memdup()\fR are like the +equivalent C functions, except that memory is allocated by calling the +\&\fBOPENSSL_malloc()\fR and should be released by calling \fBOPENSSL_free()\fR. +.PP +\&\fBOPENSSL_strlcpy()\fR, +\&\fBOPENSSL_strlcat()\fR and \fBOPENSSL_strnlen()\fR are equivalents of the common C +library functions and are provided for portability. +.PP +\&\fBOPENSSL_hexstr2buf()\fR parses \fBstr\fR as a hex string and returns a +pointer to the parsed value. The memory is allocated by calling +\&\fBOPENSSL_malloc()\fR and should be released by calling \fBOPENSSL_free()\fR. +If \fBlen\fR is not \s-1NULL,\s0 it is filled in with the output length. +Colons between two-character hex \*(L"bytes\*(R" are ignored. +An odd number of hex digits is an error. +.PP +\&\fBOPENSSL_buf2hexstr()\fR takes the specified buffer and length, and returns +a hex string for value, or \s-1NULL\s0 on error. +\&\fBBuffer\fR cannot be \s-1NULL\s0; if \fBlen\fR is 0 an empty string is returned. +.PP +\&\fBOPENSSL_hexchar2int()\fR converts a character to the hexadecimal equivalent, +or returns \-1 on error. +.PP +If no allocations have been done, it is possible to \*(L"swap out\*(R" the default +implementations for \fBOPENSSL_malloc()\fR, OPENSSL_realloc and \fBOPENSSL_free()\fR +and replace them with alternate versions (hooks). +\&\fBCRYPTO_get_mem_functions()\fR function fills in the given arguments with the +function pointers for the current implementations. +With \fBCRYPTO_set_mem_functions()\fR, you can specify a different set of functions. +If any of \fBm\fR, \fBr\fR, or \fBf\fR are \s-1NULL,\s0 then the function is not changed. +.PP +The default implementation can include some debugging capability (if enabled +at build-time). +This adds some overhead by keeping a list of all memory allocations, and +removes items from the list when they are free'd. +This is most useful for identifying memory leaks. +\&\fBCRYPTO_set_mem_debug()\fR turns this tracking on and off. In order to have +any effect, is must be called before any of the allocation functions +(e.g., \fBCRYPTO_malloc()\fR) are called, and is therefore normally one of the +first lines of \fBmain()\fR in an application. +\&\fBCRYPTO_mem_ctrl()\fR provides fine-grained control of memory leak tracking. +To enable tracking call \fBCRYPTO_mem_ctrl()\fR with a \fBmode\fR argument of +the \fB\s-1CRYPTO_MEM_CHECK_ON\s0\fR. +To disable tracking call \fBCRYPTO_mem_ctrl()\fR with a \fBmode\fR argument of +the \fB\s-1CRYPTO_MEM_CHECK_OFF\s0\fR. +.PP +While checking memory, it can be useful to store additional context +about what is being done. +For example, identifying the field names when parsing a complicated +data structure. +\&\fBOPENSSL_mem_debug_push()\fR (which calls \fBCRYPTO_mem_debug_push()\fR) +attaches an identifying string to the allocation stack. +This must be a global or other static string; it is not copied. +\&\fBOPENSSL_mem_debug_pop()\fR removes identifying state from the stack. +.PP +At the end of the program, calling \fBCRYPTO_mem_leaks()\fR or +\&\fBCRYPTO_mem_leaks_fp()\fR will report all \*(L"leaked\*(R" memory, writing it +to the specified \s-1BIO\s0 \fBb\fR or \s-1FILE\s0 \fBfp\fR. These functions return 1 if +there are no leaks, 0 if there are leaks and \-1 if an error occurred. +.PP +\&\fBCRYPTO_mem_leaks_cb()\fR does the same as \fBCRYPTO_mem_leaks()\fR, but instead +of writing to a given \s-1BIO,\s0 the callback function is called for each +output string with the string, length, and userdata \fBu\fR as the callback +parameters. +.PP +If the library is built with the \f(CW\*(C`crypto\-mdebug\*(C'\fR option, then one +function, \fBCRYPTO_get_alloc_counts()\fR, and two additional environment +variables, \fB\s-1OPENSSL_MALLOC_FAILURES\s0\fR and \fB\s-1OPENSSL_MALLOC_FD\s0\fR, +are available. +.PP +The function \fBCRYPTO_get_alloc_counts()\fR fills in the number of times +each of \fBCRYPTO_malloc()\fR, \fBCRYPTO_realloc()\fR, and \fBCRYPTO_free()\fR have been +called, into the values pointed to by \fBmcount\fR, \fBrcount\fR, and \fBfcount\fR, +respectively. If a pointer is \s-1NULL,\s0 then the corresponding count is not stored. +.PP +The variable +\&\fB\s-1OPENSSL_MALLOC_FAILURES\s0\fR controls how often allocations should fail. +It is a set of fields separated by semicolons, which each field is a count +(defaulting to zero) and an optional atsign and percentage (defaulting +to 100). If the count is zero, then it lasts forever. For example, +\&\f(CW\*(C`100;@25\*(C'\fR or \f(CW\*(C`100@0;0@25\*(C'\fR means the first 100 allocations pass, then all +other allocations (until the program exits or crashes) have a 25% chance of +failing. +.PP +If the variable \fB\s-1OPENSSL_MALLOC_FD\s0\fR is parsed as a positive integer, then +it is taken as an open file descriptor, and a record of all allocations is +written to that descriptor. If an allocation will fail, and the platform +supports it, then a backtrace will be written to the descriptor. This can +be useful because a malloc may fail but not be checked, and problems will +only occur later. The following example in classic shell syntax shows how +to use this (will not work on all platforms): +.PP +.Vb 5 +\& OPENSSL_MALLOC_FAILURES=\*(Aq200;@10\*(Aq +\& export OPENSSL_MALLOC_FAILURES +\& OPENSSL_MALLOC_FD=3 +\& export OPENSSL_MALLOC_FD +\& ...app invocation... 3>/tmp/log$$ +.Ve +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBOPENSSL_malloc_init()\fR, \fBOPENSSL_free()\fR, \fBOPENSSL_clear_free()\fR +\&\fBCRYPTO_free()\fR, \fBCRYPTO_clear_free()\fR and \fBCRYPTO_get_mem_functions()\fR +return no value. +.PP +\&\fBCRYPTO_mem_leaks()\fR, \fBCRYPTO_mem_leaks_fp()\fR and \fBCRYPTO_mem_leaks_cb()\fR return 1 if +there are no leaks, 0 if there are leaks and \-1 if an error occurred. +.PP +\&\fBOPENSSL_malloc()\fR, \fBOPENSSL_zalloc()\fR, \fBOPENSSL_realloc()\fR, +\&\fBOPENSSL_clear_realloc()\fR, +\&\fBCRYPTO_malloc()\fR, \fBCRYPTO_zalloc()\fR, \fBCRYPTO_realloc()\fR, +\&\fBCRYPTO_clear_realloc()\fR, +\&\fBOPENSSL_buf2hexstr()\fR, \fBOPENSSL_hexstr2buf()\fR, +\&\fBOPENSSL_strdup()\fR, and \fBOPENSSL_strndup()\fR +return a pointer to allocated memory or \s-1NULL\s0 on error. +.PP +\&\fBCRYPTO_set_mem_functions()\fR and \fBCRYPTO_set_mem_debug()\fR +return 1 on success or 0 on failure (almost +always because allocations have already happened). +.PP +\&\fBCRYPTO_mem_ctrl()\fR returns \-1 if an error occurred, otherwise the +previous value of the mode. +.PP +\&\fBOPENSSL_mem_debug_push()\fR and \fBOPENSSL_mem_debug_pop()\fR +return 1 on success or 0 on failure. +.SH "NOTES" +.IX Header "NOTES" +While it's permitted to swap out only a few and not all the functions +with \fBCRYPTO_set_mem_functions()\fR, it's recommended to swap them all out +at once. \fIThis applies specially if OpenSSL was built with the +configuration option\fR \f(CW\*(C`crypto\-mdebug\*(C'\fR \fIenabled. In case, swapping out +only, say, the \f(BImalloc()\fI implementation is outright dangerous.\fR +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2016\-2020 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OPENSSL_secure_malloc.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OPENSSL_secure_malloc.3 new file mode 100644 index 00000000..cc1ecb47 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OPENSSL_secure_malloc.3 @@ -0,0 +1,263 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "OPENSSL_SECURE_MALLOC 3" +.TH OPENSSL_SECURE_MALLOC 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +CRYPTO_secure_malloc_init, CRYPTO_secure_malloc_initialized, CRYPTO_secure_malloc_done, OPENSSL_secure_malloc, CRYPTO_secure_malloc, OPENSSL_secure_zalloc, CRYPTO_secure_zalloc, OPENSSL_secure_free, CRYPTO_secure_free, OPENSSL_secure_clear_free, CRYPTO_secure_clear_free, OPENSSL_secure_actual_size, CRYPTO_secure_allocated, CRYPTO_secure_used \- secure heap storage +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int CRYPTO_secure_malloc_init(size_t size, int minsize); +\& +\& int CRYPTO_secure_malloc_initialized(); +\& +\& int CRYPTO_secure_malloc_done(); +\& +\& void *OPENSSL_secure_malloc(size_t num); +\& void *CRYPTO_secure_malloc(size_t num, const char *file, int line); +\& +\& void *OPENSSL_secure_zalloc(size_t num); +\& void *CRYPTO_secure_zalloc(size_t num, const char *file, int line); +\& +\& void OPENSSL_secure_free(void* ptr); +\& void CRYPTO_secure_free(void *ptr, const char *, int); +\& +\& void OPENSSL_secure_clear_free(void* ptr, size_t num); +\& void CRYPTO_secure_clear_free(void *ptr, size_t num, const char *, int); +\& +\& size_t OPENSSL_secure_actual_size(const void *ptr); +\& +\& int CRYPTO_secure_allocated(const void *ptr); +\& size_t CRYPTO_secure_used(); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +In order to help protect applications (particularly long-running servers) +from pointer overruns or underruns that could return arbitrary data from +the program's dynamic memory area, where keys and other sensitive +information might be stored, OpenSSL supports the concept of a \*(L"secure heap.\*(R" +The level and type of security guarantees depend on the operating system. +It is a good idea to review the code and see if it addresses your +threat model and concerns. +.PP +If a secure heap is used, then private key \fB\s-1BIGNUM\s0\fR values are stored there. +This protects long-term storage of private keys, but will not necessarily +put all intermediate values and computations there. +.PP +\&\fBCRYPTO_secure_malloc_init()\fR creates the secure heap, with the specified +\&\f(CW\*(C`size\*(C'\fR in bytes. The \f(CW\*(C`minsize\*(C'\fR parameter is the minimum size to +allocate from the heap. Both \f(CW\*(C`size\*(C'\fR and \f(CW\*(C`minsize\*(C'\fR must be a power +of two. +.PP +\&\fBCRYPTO_secure_malloc_initialized()\fR indicates whether or not the secure +heap as been initialized and is available. +.PP +\&\fBCRYPTO_secure_malloc_done()\fR releases the heap and makes the memory unavailable +to the process if all secure memory has been freed. +It can take noticeably long to complete. +.PP +\&\fBOPENSSL_secure_malloc()\fR allocates \f(CW\*(C`num\*(C'\fR bytes from the heap. +If \fBCRYPTO_secure_malloc_init()\fR is not called, this is equivalent to +calling \fBOPENSSL_malloc()\fR. +It is a macro that expands to +\&\fBCRYPTO_secure_malloc()\fR and adds the \f(CW\*(C`_\|_FILE_\|_\*(C'\fR and \f(CW\*(C`_\|_LINE_\|_\*(C'\fR parameters. +.PP +\&\fBOPENSSL_secure_zalloc()\fR and \fBCRYPTO_secure_zalloc()\fR are like +\&\fBOPENSSL_secure_malloc()\fR and \fBCRYPTO_secure_malloc()\fR, respectively, +except that they call \fBmemset()\fR to zero the memory before returning. +.PP +\&\fBOPENSSL_secure_free()\fR releases the memory at \f(CW\*(C`ptr\*(C'\fR back to the heap. +It must be called with a value previously obtained from +\&\fBOPENSSL_secure_malloc()\fR. +If \fBCRYPTO_secure_malloc_init()\fR is not called, this is equivalent to +calling \fBOPENSSL_free()\fR. +It exists for consistency with \fBOPENSSL_secure_malloc()\fR , and +is a macro that expands to \fBCRYPTO_secure_free()\fR and adds the \f(CW\*(C`_\|_FILE_\|_\*(C'\fR +and \f(CW\*(C`_\|_LINE_\|_\*(C'\fR parameters.. +.PP +\&\fBOPENSSL_secure_clear_free()\fR is similar to \fBOPENSSL_secure_free()\fR except +that it has an additional \f(CW\*(C`num\*(C'\fR parameter which is used to clear +the memory if it was not allocated from the secure heap. +If \fBCRYPTO_secure_malloc_init()\fR is not called, this is equivalent to +calling \fBOPENSSL_clear_free()\fR. +.PP +\&\fBOPENSSL_secure_actual_size()\fR tells the actual size allocated to the +pointer; implementations may allocate more space than initially +requested, in order to \*(L"round up\*(R" and reduce secure heap fragmentation. +.PP +\&\fBOPENSSL_secure_allocated()\fR tells if a pointer is allocated in the secure heap. +.PP +\&\fBCRYPTO_secure_used()\fR returns the number of bytes allocated in the +secure heap. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBCRYPTO_secure_malloc_init()\fR returns 0 on failure, 1 if successful, +and 2 if successful but the heap could not be protected by memory +mapping. +.PP +\&\fBCRYPTO_secure_malloc_initialized()\fR returns 1 if the secure heap is +available (that is, if \fBCRYPTO_secure_malloc_init()\fR has been called, +but \fBCRYPTO_secure_malloc_done()\fR has not been called or failed) or 0 if not. +.PP +\&\fBOPENSSL_secure_malloc()\fR and \fBOPENSSL_secure_zalloc()\fR return a pointer into +the secure heap of the requested size, or \f(CW\*(C`NULL\*(C'\fR if memory could not be +allocated. +.PP +\&\fBCRYPTO_secure_allocated()\fR returns 1 if the pointer is in the secure heap, or 0 if not. +.PP +\&\fBCRYPTO_secure_malloc_done()\fR returns 1 if the secure memory area is released, or 0 if not. +.PP +\&\fBOPENSSL_secure_free()\fR and \fBOPENSSL_secure_clear_free()\fR return no values. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBOPENSSL_malloc\fR\|(3), +\&\fBBN_new\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +The \fBOPENSSL_secure_clear_free()\fR function was added in OpenSSL 1.1.0g. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2015\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OSSL_STORE_INFO.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OSSL_STORE_INFO.3 new file mode 100644 index 00000000..e196b728 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OSSL_STORE_INFO.3 @@ -0,0 +1,314 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "OSSL_STORE_INFO 3" +.TH OSSL_STORE_INFO 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +OSSL_STORE_INFO, OSSL_STORE_INFO_get_type, OSSL_STORE_INFO_get0_NAME, OSSL_STORE_INFO_get0_NAME_description, OSSL_STORE_INFO_get0_PARAMS, OSSL_STORE_INFO_get0_PKEY, OSSL_STORE_INFO_get0_CERT, OSSL_STORE_INFO_get0_CRL, OSSL_STORE_INFO_get1_NAME, OSSL_STORE_INFO_get1_NAME_description, OSSL_STORE_INFO_get1_PARAMS, OSSL_STORE_INFO_get1_PKEY, OSSL_STORE_INFO_get1_CERT, OSSL_STORE_INFO_get1_CRL, OSSL_STORE_INFO_type_string, OSSL_STORE_INFO_free, OSSL_STORE_INFO_new_NAME, OSSL_STORE_INFO_set0_NAME_description, OSSL_STORE_INFO_new_PARAMS, OSSL_STORE_INFO_new_PKEY, OSSL_STORE_INFO_new_CERT, OSSL_STORE_INFO_new_CRL \- Functions to manipulate OSSL_STORE_INFO objects +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& typedef struct ossl_store_info_st OSSL_STORE_INFO; +\& +\& int OSSL_STORE_INFO_get_type(const OSSL_STORE_INFO *store_info); +\& const char *OSSL_STORE_INFO_get0_NAME(const OSSL_STORE_INFO *store_info); +\& char *OSSL_STORE_INFO_get1_NAME(const OSSL_STORE_INFO *store_info); +\& const char *OSSL_STORE_INFO_get0_NAME_description(const OSSL_STORE_INFO +\& *store_info); +\& char *OSSL_STORE_INFO_get1_NAME_description(const OSSL_STORE_INFO *store_info); +\& EVP_PKEY *OSSL_STORE_INFO_get0_PARAMS(const OSSL_STORE_INFO *store_info); +\& EVP_PKEY *OSSL_STORE_INFO_get1_PARAMS(const OSSL_STORE_INFO *store_info); +\& EVP_PKEY *OSSL_STORE_INFO_get0_PKEY(const OSSL_STORE_INFO *store_info); +\& EVP_PKEY *OSSL_STORE_INFO_get1_PKEY(const OSSL_STORE_INFO *store_info); +\& X509 *OSSL_STORE_INFO_get0_CERT(const OSSL_STORE_INFO *store_info); +\& X509 *OSSL_STORE_INFO_get1_CERT(const OSSL_STORE_INFO *store_info); +\& X509_CRL *OSSL_STORE_INFO_get0_CRL(const OSSL_STORE_INFO *store_info); +\& X509_CRL *OSSL_STORE_INFO_get1_CRL(const OSSL_STORE_INFO *store_info); +\& +\& const char *OSSL_STORE_INFO_type_string(int type); +\& +\& void OSSL_STORE_INFO_free(OSSL_STORE_INFO *store_info); +\& +\& OSSL_STORE_INFO *OSSL_STORE_INFO_new_NAME(char *name); +\& int OSSL_STORE_INFO_set0_NAME_description(OSSL_STORE_INFO *info, char *desc); +\& OSSL_STORE_INFO *OSSL_STORE_INFO_new_PARAMS(DSA *dsa_params); +\& OSSL_STORE_INFO *OSSL_STORE_INFO_new_PKEY(EVP_PKEY *pkey); +\& OSSL_STORE_INFO *OSSL_STORE_INFO_new_CERT(X509 *x509); +\& OSSL_STORE_INFO *OSSL_STORE_INFO_new_CRL(X509_CRL *crl); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +These functions are primarily useful for applications to retrieve +supported objects from \fB\s-1OSSL_STORE_INFO\s0\fR objects and for scheme specific +loaders to create \fB\s-1OSSL_STORE_INFO\s0\fR holders. +.SS "Types" +.IX Subsection "Types" +\&\fB\s-1OSSL_STORE_INFO\s0\fR is an opaque type that's just an intermediary holder for +the objects that have been retrieved by \fBOSSL_STORE_load()\fR and similar +functions. +Supported OpenSSL type object can be extracted using one of +\&\fBSTORE_INFO_get0_TYPE()\fR. +The life time of this extracted object is as long as the life time of +the \fB\s-1OSSL_STORE_INFO\s0\fR it was extracted from, so care should be taken not +to free the latter too early. +As an alternative, \fBSTORE_INFO_get1_TYPE()\fR extracts a duplicate (or the +same object with its reference count increased), which can be used +after the containing \fB\s-1OSSL_STORE_INFO\s0\fR has been freed. +The object returned by \fBSTORE_INFO_get1_TYPE()\fR must be freed separately +by the caller. +See \*(L"\s-1SUPPORTED OBJECTS\*(R"\s0 for more information on the types that are +supported. +.SS "Functions" +.IX Subsection "Functions" +\&\fBOSSL_STORE_INFO_get_type()\fR takes a \fB\s-1OSSL_STORE_INFO\s0\fR and returns the \s-1STORE\s0 +type number for the object inside. +\&\fBSTORE_INFO_get_type_string()\fR takes a \s-1STORE\s0 type number and returns a +short string describing it. +.PP +\&\fBOSSL_STORE_INFO_get0_NAME()\fR, \fBOSSL_STORE_INFO_get0_NAME_description()\fR, +\&\fBOSSL_STORE_INFO_get0_PARAMS()\fR, \fBOSSL_STORE_INFO_get0_PKEY()\fR, +\&\fBOSSL_STORE_INFO_get0_CERT()\fR and \fBOSSL_STORE_INFO_get0_CRL()\fR all take a +\&\fB\s-1OSSL_STORE_INFO\s0\fR and return the held object of the appropriate OpenSSL +type provided that's what's held. +.PP +\&\fBOSSL_STORE_INFO_get1_NAME()\fR, \fBOSSL_STORE_INFO_get1_NAME_description()\fR, +\&\fBOSSL_STORE_INFO_get1_PARAMS()\fR, \fBOSSL_STORE_INFO_get1_PKEY()\fR, +\&\fBOSSL_STORE_INFO_get1_CERT()\fR and \fBOSSL_STORE_INFO_get1_CRL()\fR all take a +\&\fB\s-1OSSL_STORE_INFO\s0\fR and return a duplicate of the held object of the +appropriate OpenSSL type provided that's what's held. +.PP +\&\fBOSSL_STORE_INFO_free()\fR frees a \fB\s-1OSSL_STORE_INFO\s0\fR and its contained type. +.PP +\&\fBOSSL_STORE_INFO_new_NAME()\fR , \fBOSSL_STORE_INFO_new_PARAMS()\fR, +\&\fBOSSL_STORE_INFO_new_PKEY()\fR, \fBOSSL_STORE_INFO_new_CERT()\fR and +\&\fBOSSL_STORE_INFO_new_CRL()\fR create a \fB\s-1OSSL_STORE_INFO\s0\fR +object to hold the given input object. +Additionally, for \fB\s-1OSSL_STORE_INFO_NAME\s0\fR` objects, +\&\fBOSSL_STORE_INFO_set0_NAME_description()\fR can be used to add an extra +description. +This description is meant to be human readable and should be used for +information printout. +.SH "SUPPORTED OBJECTS" +.IX Header "SUPPORTED OBJECTS" +Currently supported object types are: +.IP "\s-1OSSL_STORE_INFO_NAME\s0" 4 +.IX Item "OSSL_STORE_INFO_NAME" +A name is exactly that, a name. +It's like a name in a directory, but formatted as a complete \s-1URI.\s0 +For example, the path in \s-1URI\s0 \f(CW\*(C`file:/foo/bar/\*(C'\fR could include a file +named \f(CW\*(C`cookie.pem\*(C'\fR, and in that case, the returned \fB\s-1OSSL_STORE_INFO_NAME\s0\fR +object would have the \s-1URI\s0 \f(CW\*(C`file:/foo/bar/cookie.pem\*(C'\fR, which can be +used by the application to get the objects in that file. +This can be applied to all schemes that can somehow support a listing +of object URIs. +.Sp +For \f(CW\*(C`file:\*(C'\fR URIs that are used without the explicit scheme, the +returned name will be the path of each object, so if \f(CW\*(C`/foo/bar\*(C'\fR was +given and that path has the file \f(CW\*(C`cookie.pem\*(C'\fR, the name +\&\f(CW\*(C`/foo/bar/cookie.pem\*(C'\fR will be returned. +.Sp +The returned \s-1URI\s0 is considered canonical and must be unique and permanent +for the storage where the object (or collection of objects) resides. +Each loader is responsible for ensuring that it only returns canonical +URIs. +However, it's possible that certain schemes allow an object (or collection +thereof) to be reached with alternative URIs; just because one \s-1URI\s0 is +canonical doesn't mean that other variants can't be used. +.Sp +At the discretion of the loader that was used to get these names, an +extra description may be attached as well. +.IP "\s-1OSSL_STORE_INFO_PARAMS\s0" 4 +.IX Item "OSSL_STORE_INFO_PARAMS" +Key parameters. +.IP "\s-1OSSL_STORE_INFO_PKEY\s0" 4 +.IX Item "OSSL_STORE_INFO_PKEY" +A private/public key of some sort. +.IP "\s-1OSSL_STORE_INFO_CERT\s0" 4 +.IX Item "OSSL_STORE_INFO_CERT" +An X.509 certificate. +.IP "\s-1OSSL_STORE_INFO_CRL\s0" 4 +.IX Item "OSSL_STORE_INFO_CRL" +A X.509 certificate revocation list. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBOSSL_STORE_INFO_get_type()\fR returns the \s-1STORE\s0 type number of the given +\&\fB\s-1OSSL_STORE_INFO\s0\fR. +There is no error value. +.PP +\&\fBOSSL_STORE_INFO_get0_NAME()\fR, \fBOSSL_STORE_INFO_get0_NAME_description()\fR, +\&\fBOSSL_STORE_INFO_get0_PARAMS()\fR, \fBOSSL_STORE_INFO_get0_PKEY()\fR, +\&\fBOSSL_STORE_INFO_get0_CERT()\fR and \fBOSSL_STORE_INFO_get0_CRL()\fR all return +a pointer to the OpenSSL object on success, \s-1NULL\s0 otherwise. +.PP +\&\fBOSSL_STORE_INFO_get0_NAME()\fR, \fBOSSL_STORE_INFO_get0_NAME_description()\fR, +\&\fBOSSL_STORE_INFO_get0_PARAMS()\fR, \fBOSSL_STORE_INFO_get0_PKEY()\fR, +\&\fBOSSL_STORE_INFO_get0_CERT()\fR and \fBOSSL_STORE_INFO_get0_CRL()\fR all return +a pointer to a duplicate of the OpenSSL object on success, \s-1NULL\s0 otherwise. +.PP +\&\fBOSSL_STORE_INFO_type_string()\fR returns a string on success, or \fB\s-1NULL\s0\fR on +failure. +.PP +\&\fBOSSL_STORE_INFO_new_NAME()\fR, \fBOSSL_STORE_INFO_new_PARAMS()\fR, +\&\fBOSSL_STORE_INFO_new_PKEY()\fR, \fBOSSL_STORE_INFO_new_CERT()\fR and +\&\fBOSSL_STORE_INFO_new_CRL()\fR return a \fB\s-1OSSL_STORE_INFO\s0\fR +pointer on success, or \fB\s-1NULL\s0\fR on failure. +.PP +\&\fBOSSL_STORE_INFO_set0_NAME_description()\fR returns 1 on success, or 0 on +failure. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBossl_store\fR\|(7), \fBOSSL_STORE_open\fR\|(3), \fBOSSL_STORE_register_loader\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +\&\s-1\fBOSSL_STORE_INFO\s0()\fR, \fBOSSL_STORE_INFO_get_type()\fR, \fBOSSL_STORE_INFO_get0_NAME()\fR, +\&\fBOSSL_STORE_INFO_get0_PARAMS()\fR, \fBOSSL_STORE_INFO_get0_PKEY()\fR, +\&\fBOSSL_STORE_INFO_get0_CERT()\fR, \fBOSSL_STORE_INFO_get0_CRL()\fR, +\&\fBOSSL_STORE_INFO_type_string()\fR, \fBOSSL_STORE_INFO_free()\fR, \fBOSSL_STORE_INFO_new_NAME()\fR, +\&\fBOSSL_STORE_INFO_new_PARAMS()\fR, \fBOSSL_STORE_INFO_new_PKEY()\fR, +\&\fBOSSL_STORE_INFO_new_CERT()\fR and \fBOSSL_STORE_INFO_new_CRL()\fR +were added in OpenSSL 1.1.1. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2016\-2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OSSL_STORE_LOADER.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OSSL_STORE_LOADER.3 new file mode 100644 index 00000000..41f7d6e2 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OSSL_STORE_LOADER.3 @@ -0,0 +1,362 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "OSSL_STORE_LOADER 3" +.TH OSSL_STORE_LOADER 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +OSSL_STORE_LOADER, OSSL_STORE_LOADER_CTX, OSSL_STORE_LOADER_new, OSSL_STORE_LOADER_get0_engine, OSSL_STORE_LOADER_get0_scheme, OSSL_STORE_LOADER_set_open, OSSL_STORE_LOADER_set_ctrl, OSSL_STORE_LOADER_set_expect, OSSL_STORE_LOADER_set_find, OSSL_STORE_LOADER_set_load, OSSL_STORE_LOADER_set_eof, OSSL_STORE_LOADER_set_error, OSSL_STORE_LOADER_set_close, OSSL_STORE_LOADER_free, OSSL_STORE_register_loader, OSSL_STORE_unregister_loader, OSSL_STORE_open_fn, OSSL_STORE_ctrl_fn, OSSL_STORE_expect_fn, OSSL_STORE_find_fn, OSSL_STORE_load_fn, OSSL_STORE_eof_fn, OSSL_STORE_error_fn, OSSL_STORE_close_fn \- Types and functions to manipulate, register and unregister STORE loaders for different URI schemes +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& typedef struct ossl_store_loader_st OSSL_STORE_LOADER; +\& +\& OSSL_STORE_LOADER *OSSL_STORE_LOADER_new(ENGINE *e, const char *scheme); +\& const ENGINE *OSSL_STORE_LOADER_get0_engine(const OSSL_STORE_LOADER +\& *store_loader); +\& const char *OSSL_STORE_LOADER_get0_scheme(const OSSL_STORE_LOADER +\& *store_loader); +\& +\& /* struct ossl_store_loader_ctx_st is defined differently by each loader */ +\& typedef struct ossl_store_loader_ctx_st OSSL_STORE_LOADER_CTX; +\& +\& typedef OSSL_STORE_LOADER_CTX *(*OSSL_STORE_open_fn)(const char *uri, +\& const UI_METHOD *ui_method, +\& void *ui_data); +\& int OSSL_STORE_LOADER_set_open(OSSL_STORE_LOADER *store_loader, +\& OSSL_STORE_open_fn store_open_function); +\& typedef int (*OSSL_STORE_ctrl_fn)(OSSL_STORE_LOADER_CTX *ctx, int cmd, +\& va_list args); +\& int OSSL_STORE_LOADER_set_ctrl(OSSL_STORE_LOADER *store_loader, +\& OSSL_STORE_ctrl_fn store_ctrl_function); +\& typedef int (*OSSL_STORE_expect_fn)(OSSL_STORE_LOADER_CTX *ctx, int expected); +\& int OSSL_STORE_LOADER_set_expect(OSSL_STORE_LOADER *loader, +\& OSSL_STORE_expect_fn expect_function); +\& typedef int (*OSSL_STORE_find_fn)(OSSL_STORE_LOADER_CTX *ctx, +\& OSSL_STORE_SEARCH *criteria); +\& int OSSL_STORE_LOADER_set_find(OSSL_STORE_LOADER *loader, +\& OSSL_STORE_find_fn find_function); +\& typedef OSSL_STORE_INFO *(*OSSL_STORE_load_fn)(OSSL_STORE_LOADER_CTX *ctx, +\& UI_METHOD *ui_method, +\& void *ui_data); +\& int OSSL_STORE_LOADER_set_load(OSSL_STORE_LOADER *store_loader, +\& OSSL_STORE_load_fn store_load_function); +\& typedef int (*OSSL_STORE_eof_fn)(OSSL_STORE_LOADER_CTX *ctx); +\& int OSSL_STORE_LOADER_set_eof(OSSL_STORE_LOADER *store_loader, +\& OSSL_STORE_eof_fn store_eof_function); +\& typedef int (*OSSL_STORE_error_fn)(OSSL_STORE_LOADER_CTX *ctx); +\& int OSSL_STORE_LOADER_set_error(OSSL_STORE_LOADER *store_loader, +\& OSSL_STORE_error_fn store_error_function); +\& typedef int (*OSSL_STORE_close_fn)(OSSL_STORE_LOADER_CTX *ctx); +\& int OSSL_STORE_LOADER_set_close(OSSL_STORE_LOADER *store_loader, +\& OSSL_STORE_close_fn store_close_function); +\& void OSSL_STORE_LOADER_free(OSSL_STORE_LOADER *store_loader); +\& +\& int OSSL_STORE_register_loader(OSSL_STORE_LOADER *loader); +\& OSSL_STORE_LOADER *OSSL_STORE_unregister_loader(const char *scheme); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +These functions help applications and engines to create loaders for +schemes they support. +.SS "Types" +.IX Subsection "Types" +\&\fB\s-1OSSL_STORE_LOADER\s0\fR is the type to hold a loader. +It contains a scheme and the functions needed to implement +\&\fBOSSL_STORE_open()\fR, \fBOSSL_STORE_load()\fR, \fBOSSL_STORE_eof()\fR, \fBOSSL_STORE_error()\fR and +\&\fBOSSL_STORE_close()\fR for this scheme. +.PP +\&\fB\s-1OSSL_STORE_LOADER_CTX\s0\fR is a type template, to be defined by each loader +using \fBstruct ossl_store_loader_ctx_st { ... }\fR. +.PP +\&\fBOSSL_STORE_open_fn\fR, \fBOSSL_STORE_ctrl_fn\fR, \fBOSSL_STORE_expect_fn\fR, +\&\fBOSSL_STORE_find_fn\fR, \fBOSSL_STORE_load_fn\fR, \fBOSSL_STORE_eof_fn\fR, +and \fBOSSL_STORE_close_fn\fR +are the function pointer types used within a \s-1STORE\s0 loader. +The functions pointed at define the functionality of the given loader. +.IP "\fBOSSL_STORE_open_fn\fR" 4 +.IX Item "OSSL_STORE_open_fn" +This function takes a \s-1URI\s0 and is expected to interpret it in the best +manner possible according to the scheme the loader implements, it also +takes a \fB\s-1UI_METHOD\s0\fR and associated data, to be used any time +something needs to be prompted for. +Furthermore, this function is expected to initialize what needs to be +initialized, to create a private data store (\fB\s-1OSSL_STORE_LOADER_CTX\s0\fR, see +above), and to return it. +If something goes wrong, this function is expected to return \s-1NULL.\s0 +.IP "\fBOSSL_STORE_ctrl_fn\fR" 4 +.IX Item "OSSL_STORE_ctrl_fn" +This function takes a \fB\s-1OSSL_STORE_LOADER_CTX\s0\fR pointer, a command number +\&\fBcmd\fR and a \fBva_list\fR \fBargs\fR and is used to manipulate loader +specific parameters. +.Sp +Loader specific command numbers must begin at \fB\s-1OSSL_STORE_C_CUSTOM_START\s0\fR. +Any number below that is reserved for future globally known command +numbers. +.Sp +This function is expected to return 1 on success, 0 on error. +.IP "\fBOSSL_STORE_expect_fn\fR" 4 +.IX Item "OSSL_STORE_expect_fn" +This function takes a \fB\s-1OSSL_STORE_LOADER_CTX\s0\fR pointer and a \fB\s-1OSSL_STORE_INFO\s0\fR +identity \fBexpected\fR, and is used to tell the loader what object type is +expected. +\&\fBexpected\fR may be zero to signify that no specific object type is expected. +.Sp +This function is expected to return 1 on success, 0 on error. +.IP "\fBOSSL_STORE_find_fn\fR" 4 +.IX Item "OSSL_STORE_find_fn" +This function takes a \fB\s-1OSSL_STORE_LOADER_CTX\s0\fR pointer and a +\&\fB\s-1OSSL_STORE_SEARCH\s0\fR search criterion, and is used to tell the loader what +to search for. +.Sp +When called with the loader context being \fB\s-1NULL\s0\fR, this function is expected +to return 1 if the loader supports the criterion, otherwise 0. +.Sp +When called with the loader context being something other than \fB\s-1NULL\s0\fR, this +function is expected to return 1 on success, 0 on error. +.IP "\fBOSSL_STORE_load_fn\fR" 4 +.IX Item "OSSL_STORE_load_fn" +This function takes a \fB\s-1OSSL_STORE_LOADER_CTX\s0\fR pointer and a \fB\s-1UI_METHOD\s0\fR +with associated data. +It's expected to load the next available data, mold it into a data +structure that can be wrapped in a \fB\s-1OSSL_STORE_INFO\s0\fR using one of the +\&\s-1\fBOSSL_STORE_INFO\s0\fR\|(3) functions. +If no more data is available or an error occurs, this function is +expected to return \s-1NULL.\s0 +The \fBOSSL_STORE_eof_fn\fR and \fBOSSL_STORE_error_fn\fR functions must indicate if +it was in fact the end of data or if an error occurred. +.Sp +Note that this function retrieves \fIone\fR data item only. +.IP "\fBOSSL_STORE_eof_fn\fR" 4 +.IX Item "OSSL_STORE_eof_fn" +This function takes a \fB\s-1OSSL_STORE_LOADER_CTX\s0\fR pointer and is expected to +return 1 to indicate that the end of available data has been reached. +It is otherwise expected to return 0. +.IP "\fBOSSL_STORE_error_fn\fR" 4 +.IX Item "OSSL_STORE_error_fn" +This function takes a \fB\s-1OSSL_STORE_LOADER_CTX\s0\fR pointer and is expected to +return 1 to indicate that an error occurred in a previous call to the +\&\fBOSSL_STORE_load_fn\fR function. +It is otherwise expected to return 0. +.IP "\fBOSSL_STORE_close_fn\fR" 4 +.IX Item "OSSL_STORE_close_fn" +This function takes a \fB\s-1OSSL_STORE_LOADER_CTX\s0\fR pointer and is expected to +close or shut down what needs to be closed, and finally free the +contents of the \fB\s-1OSSL_STORE_LOADER_CTX\s0\fR pointer. +It returns 1 on success and 0 on error. +.SS "Functions" +.IX Subsection "Functions" +\&\fBOSSL_STORE_LOADER_new()\fR creates a new \fB\s-1OSSL_STORE_LOADER\s0\fR. +It takes an \fB\s-1ENGINE\s0\fR \fBe\fR and a string \fBscheme\fR. +\&\fBscheme\fR must \fIalways\fR be set. +Both \fBe\fR and \fBscheme\fR are used as is and must therefore be alive as +long as the created loader is. +.PP +\&\fBOSSL_STORE_LOADER_get0_engine()\fR returns the engine of the \fBstore_loader\fR. +\&\fBOSSL_STORE_LOADER_get0_scheme()\fR returns the scheme of the \fBstore_loader\fR. +.PP +\&\fBOSSL_STORE_LOADER_set_open()\fR sets the opener function for the +\&\fBstore_loader\fR. +.PP +\&\fBOSSL_STORE_LOADER_set_ctrl()\fR sets the control function for the +\&\fBstore_loader\fR. +.PP +\&\fBOSSL_STORE_LOADER_set_expect()\fR sets the expect function for the +\&\fBstore_loader\fR. +.PP +\&\fBOSSL_STORE_LOADER_set_load()\fR sets the loader function for the +\&\fBstore_loader\fR. +.PP +\&\fBOSSL_STORE_LOADER_set_eof()\fR sets the end of file checker function for the +\&\fBstore_loader\fR. +.PP +\&\fBOSSL_STORE_LOADER_set_close()\fR sets the closing function for the +\&\fBstore_loader\fR. +.PP +\&\fBOSSL_STORE_LOADER_free()\fR frees the given \fBstore_loader\fR. +.PP +\&\fBOSSL_STORE_register_loader()\fR register the given \fBstore_loader\fR and thereby +makes it available for use with \fBOSSL_STORE_open()\fR, \fBOSSL_STORE_load()\fR, +\&\fBOSSL_STORE_eof()\fR and \fBOSSL_STORE_close()\fR. +.PP +\&\fBOSSL_STORE_unregister_loader()\fR unregister the store loader for the given +\&\fBscheme\fR. +.SH "NOTES" +.IX Header "NOTES" +The \fBfile:\fR scheme has built in support. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +The functions with the types \fBOSSL_STORE_open_fn\fR, \fBOSSL_STORE_ctrl_fn\fR, +\&\fBOSSL_STORE_expect_fn\fR, +\&\fBOSSL_STORE_load_fn\fR, \fBOSSL_STORE_eof_fn\fR and \fBOSSL_STORE_close_fn\fR have the +same return values as \fBOSSL_STORE_open()\fR, \fBOSSL_STORE_ctrl()\fR, \fBOSSL_STORE_expect()\fR, +\&\fBOSSL_STORE_load()\fR, \fBOSSL_STORE_eof()\fR and \fBOSSL_STORE_close()\fR, respectively. +.PP +\&\fBOSSL_STORE_LOADER_new()\fR returns a pointer to a \fB\s-1OSSL_STORE_LOADER\s0\fR on success, +or \fB\s-1NULL\s0\fR on failure. +.PP +\&\fBOSSL_STORE_LOADER_set_open()\fR, \fBOSSL_STORE_LOADER_set_ctrl()\fR, +\&\fBOSSL_STORE_LOADER_set_load()\fR, \fBOSSL_STORE_LOADER_set_eof()\fR and +\&\fBOSSL_STORE_LOADER_set_close()\fR return 1 on success, or 0 on failure. +.PP +\&\fBOSSL_STORE_register_loader()\fR returns 1 on success, or 0 on failure. +.PP +\&\fBOSSL_STORE_unregister_loader()\fR returns the unregistered loader on success, +or \fB\s-1NULL\s0\fR on failure. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBossl_store\fR\|(7), \fBOSSL_STORE_open\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +\&\s-1\fBOSSL_STORE_LOADER\s0()\fR, \s-1\fBOSSL_STORE_LOADER_CTX\s0()\fR, \fBOSSL_STORE_LOADER_new()\fR, +\&\fBOSSL_STORE_LOADER_set0_scheme()\fR, \fBOSSL_STORE_LOADER_set_open()\fR, +\&\fBOSSL_STORE_LOADER_set_ctrl()\fR, \fBOSSL_STORE_LOADER_set_load()\fR, +\&\fBOSSL_STORE_LOADER_set_eof()\fR, \fBOSSL_STORE_LOADER_set_close()\fR, +\&\fBOSSL_STORE_LOADER_free()\fR, \fBOSSL_STORE_register_loader()\fR, +\&\fBOSSL_STORE_unregister_loader()\fR, \fBOSSL_STORE_open_fn()\fR, \fBOSSL_STORE_ctrl_fn()\fR, +\&\fBOSSL_STORE_load_fn()\fR, \fBOSSL_STORE_eof_fn()\fR and \fBOSSL_STORE_close_fn()\fR +were added in OpenSSL 1.1.1. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2016\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OSSL_STORE_SEARCH.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OSSL_STORE_SEARCH.3 new file mode 100644 index 00000000..6fe50199 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OSSL_STORE_SEARCH.3 @@ -0,0 +1,300 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "OSSL_STORE_SEARCH 3" +.TH OSSL_STORE_SEARCH 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +OSSL_STORE_SEARCH, OSSL_STORE_SEARCH_by_name, OSSL_STORE_SEARCH_by_issuer_serial, OSSL_STORE_SEARCH_by_key_fingerprint, OSSL_STORE_SEARCH_by_alias, OSSL_STORE_SEARCH_free, OSSL_STORE_SEARCH_get_type, OSSL_STORE_SEARCH_get0_name, OSSL_STORE_SEARCH_get0_serial, OSSL_STORE_SEARCH_get0_bytes, OSSL_STORE_SEARCH_get0_string, OSSL_STORE_SEARCH_get0_digest \&\- Type and functions to create OSSL_STORE search criteria +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& typedef struct ossl_store_search_st OSSL_STORE_SEARCH; +\& +\& OSSL_STORE_SEARCH *OSSL_STORE_SEARCH_by_name(X509_NAME *name); +\& OSSL_STORE_SEARCH *OSSL_STORE_SEARCH_by_issuer_serial(X509_NAME *name, +\& const ASN1_INTEGER +\& *serial); +\& OSSL_STORE_SEARCH *OSSL_STORE_SEARCH_by_key_fingerprint(const EVP_MD *digest, +\& const unsigned char +\& *bytes, int len); +\& OSSL_STORE_SEARCH *OSSL_STORE_SEARCH_by_alias(const char *alias); +\& +\& void OSSL_STORE_SEARCH_free(OSSL_STORE_SEARCH *search); +\& +\& int OSSL_STORE_SEARCH_get_type(const OSSL_STORE_SEARCH *criterion); +\& X509_NAME *OSSL_STORE_SEARCH_get0_name(OSSL_STORE_SEARCH *criterion); +\& const ASN1_INTEGER *OSSL_STORE_SEARCH_get0_serial(const OSSL_STORE_SEARCH +\& *criterion); +\& const unsigned char *OSSL_STORE_SEARCH_get0_bytes(const OSSL_STORE_SEARCH +\& *criterion, size_t *length); +\& const char *OSSL_STORE_SEARCH_get0_string(const OSSL_STORE_SEARCH *criterion); +\& const EVP_MD *OSSL_STORE_SEARCH_get0_digest(const OSSL_STORE_SEARCH +\& *criterion); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +These functions are used to specify search criteria to help search for specific +objects through other names than just the \s-1URI\s0 that's given to \fBOSSL_STORE_open()\fR. +For example, this can be useful for an application that has received a \s-1URI\s0 +and then wants to add on search criteria in a uniform and supported manner. +.SS "Types" +.IX Subsection "Types" +\&\fB\s-1OSSL_STORE_SEARCH\s0\fR is an opaque type that holds the constructed search +criterion, and that can be given to an \s-1OSSL_STORE\s0 context with +\&\fBOSSL_STORE_find()\fR. +.PP +The calling application owns the allocation of an \fB\s-1OSSL_STORE_SEARCH\s0\fR at all +times, and should therefore be careful not to deallocate it before +\&\fBOSSL_STORE_close()\fR has been called for the \s-1OSSL_STORE\s0 context it was given +to. +.SS "Application Functions" +.IX Subsection "Application Functions" +\&\fBOSSL_STORE_SEARCH_by_name()\fR, +\&\fBOSSL_STORE_SEARCH_by_issuer_serial()\fR, +\&\fBOSSL_STORE_SEARCH_by_key_fingerprint()\fR, +and \fBOSSL_STORE_SEARCH_by_alias()\fR +are used to create an \fB\s-1OSSL_STORE_SEARCH\s0\fR from a subject name, an issuer name +and serial number pair, a key fingerprint, and an alias (for example a friendly +name). +The parameters that are provided are not copied, only referred to in a +criterion, so they must have at least the same life time as the created +\&\fB\s-1OSSL_STORE_SEARCH\s0\fR. +.PP +\&\fBOSSL_STORE_SEARCH_free()\fR is used to free the \fB\s-1OSSL_STORE_SEARCH\s0\fR. +.SS "Loader Functions" +.IX Subsection "Loader Functions" +\&\fBOSSL_STORE_SEARCH_get_type()\fR returns the criterion type for the given +\&\fB\s-1OSSL_STORE_SEARCH\s0\fR. +.PP +\&\fBOSSL_STORE_SEARCH_get0_name()\fR, \fBOSSL_STORE_SEARCH_get0_serial()\fR, +\&\fBOSSL_STORE_SEARCH_get0_bytes()\fR, \fBOSSL_STORE_SEARCH_get0_string()\fR, +and \fBOSSL_STORE_SEARCH_get0_digest()\fR +are used to retrieve different data from a \fB\s-1OSSL_STORE_SEARCH\s0\fR, as +available for each type. +For more information, see \*(L"\s-1SUPPORTED CRITERION TYPES\*(R"\s0 below. +.SH "SUPPORTED CRITERION TYPES" +.IX Header "SUPPORTED CRITERION TYPES" +Currently supported criterion types are: +.IP "\s-1OSSL_STORE_SEARCH_BY_NAME\s0" 4 +.IX Item "OSSL_STORE_SEARCH_BY_NAME" +This criterion supports a search by exact match of subject name. +The subject name itself is a \fBX509_NAME\fR pointer. +A criterion of this type is created with \fBOSSL_STORE_SEARCH_by_name()\fR, +and the actual subject name is retrieved with \fBOSSL_STORE_SEARCH_get0_name()\fR. +.IP "\s-1OSSL_STORE_SEARCH_BY_ISSUER_SERIAL\s0" 4 +.IX Item "OSSL_STORE_SEARCH_BY_ISSUER_SERIAL" +This criterion supports a search by exact match of both issuer name and serial +number. +The issuer name itself is a \fBX509_NAME\fR pointer, and the serial number is +a \fB\s-1ASN1_INTEGER\s0\fR pointer. +A criterion of this type is created with \fBOSSL_STORE_SEARCH_by_issuer_serial()\fR +and the actual issuer name and serial number are retrieved with +\&\fBOSSL_STORE_SEARCH_get0_name()\fR and \fBOSSL_STORE_SEARCH_get0_serial()\fR. +.IP "\s-1OSSL_STORE_SEARCH_BY_KEY_FINGERPRINT\s0" 4 +.IX Item "OSSL_STORE_SEARCH_BY_KEY_FINGERPRINT" +This criterion supports a search by exact match of key fingerprint. +The key fingerprint in itself is a string of bytes and its length, as +well as the algorithm that was used to compute the fingerprint. +The digest may be left unspecified (\s-1NULL\s0), and in that case, the +loader has to decide on a default digest and compare fingerprints +accordingly. +A criterion of this type is created with \fBOSSL_STORE_SEARCH_by_key_fingerprint()\fR +and the actual fingerprint and its length can be retrieved with +\&\fBOSSL_STORE_SEARCH_get0_bytes()\fR. +The digest can be retrieved with \fBOSSL_STORE_SEARCH_get0_digest()\fR. +.IP "\s-1OSSL_STORE_SEARCH_BY_ALIAS\s0" 4 +.IX Item "OSSL_STORE_SEARCH_BY_ALIAS" +This criterion supports a search by match of an alias of some kind. +The alias in itself is a simple C string. +A criterion of this type is created with \fBOSSL_STORE_SEARCH_by_alias()\fR +and the actual alias is retrieved with \fBOSSL_STORE_SEARCH_get0_string()\fR. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBOSSL_STORE_SEARCH_by_name()\fR, +\&\fBOSSL_STORE_SEARCH_by_issuer_serial()\fR, +\&\fBOSSL_STORE_SEARCH_by_key_fingerprint()\fR, +and \fBOSSL_STORE_SEARCH_by_alias()\fR +return a \fB\s-1OSSL_STORE_SEARCH\s0\fR pointer on success, or \fB\s-1NULL\s0\fR on failure. +.PP +\&\fBOSSL_STORE_SEARCH_get_type()\fR returns the criterion type of the given +\&\fB\s-1OSSL_STORE_SEARCH\s0\fR. +There is no error value. +.PP +\&\fBOSSL_STORE_SEARCH_get0_name()\fR returns a \fBX509_NAME\fR pointer on success, +or \fB\s-1NULL\s0\fR when the given \fB\s-1OSSL_STORE_SEARCH\s0\fR was of a different type. +.PP +\&\fBOSSL_STORE_SEARCH_get0_serial()\fR returns a \fB\s-1ASN1_INTEGER\s0\fR pointer on success, +or \fB\s-1NULL\s0\fR when the given \fB\s-1OSSL_STORE_SEARCH\s0\fR was of a different type. +.PP +\&\fBOSSL_STORE_SEARCH_get0_bytes()\fR returns a \fBconst unsigned char\fR pointer and +sets \fB*length\fR to the strings length on success, or \fB\s-1NULL\s0\fR when the given +\&\fB\s-1OSSL_STORE_SEARCH\s0\fR was of a different type. +.PP +\&\fBOSSL_STORE_SEARCH_get0_string()\fR returns a \fBconst char\fR pointer on success, +or \fB\s-1NULL\s0\fR when the given \fB\s-1OSSL_STORE_SEARCH\s0\fR was of a different type. +.PP +\&\fBOSSL_STORE_SEARCH_get0_digest()\fR returns a \fBconst \s-1EVP_MD\s0\fR pointer. +\&\fB\s-1NULL\s0\fR is a valid value and means that the store loader default will +be used when applicable. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBossl_store\fR\|(7), \fBOSSL_STORE_supports_search\fR\|(3), \fBOSSL_STORE_find\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +\&\fB\s-1OSSL_STORE_SEARCH\s0\fR, +\&\fBOSSL_STORE_SEARCH_by_name()\fR, +\&\fBOSSL_STORE_SEARCH_by_issuer_serial()\fR, +\&\fBOSSL_STORE_SEARCH_by_key_fingerprint()\fR, +\&\fBOSSL_STORE_SEARCH_by_alias()\fR, +\&\fBOSSL_STORE_SEARCH_free()\fR, +\&\fBOSSL_STORE_SEARCH_get_type()\fR, +\&\fBOSSL_STORE_SEARCH_get0_name()\fR, +\&\fBOSSL_STORE_SEARCH_get0_serial()\fR, +\&\fBOSSL_STORE_SEARCH_get0_bytes()\fR, +and \fBOSSL_STORE_SEARCH_get0_string()\fR +were added in OpenSSL 1.1.1. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OSSL_STORE_expect.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OSSL_STORE_expect.3 new file mode 100644 index 00000000..730d152e --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OSSL_STORE_expect.3 @@ -0,0 +1,206 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "OSSL_STORE_EXPECT 3" +.TH OSSL_STORE_EXPECT 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +OSSL_STORE_expect, OSSL_STORE_supports_search, OSSL_STORE_find \&\- Specify what object type is expected +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int OSSL_STORE_expect(OSSL_STORE_CTX *ctx, int expected_type); +\& +\& int OSSL_STORE_supports_search(OSSL_STORE_CTX *ctx, int criterion_type); +\& +\& int OSSL_STORE_find(OSSL_STORE_CTX *ctx, OSSL_STORE_SEARCH *search); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBOSSL_STORE_expect()\fR helps applications filter what \fBOSSL_STORE_load()\fR returns +by specifying a \fB\s-1OSSL_STORE_INFO\s0\fR type. +For example, if \f(CW\*(C`file:/foo/bar/store.pem\*(C'\fR contains several different objects +and only the certificates are interesting, the application can simply say +that it expects the type \fB\s-1OSSL_STORE_INFO_CERT\s0\fR. +All known object types (see \*(L"\s-1SUPPORTED OBJECTS\*(R"\s0 in \s-1\fBOSSL_STORE_INFO\s0\fR\|(3)) +except for \fB\s-1OSSL_STORE_INFO_NAME\s0\fR are supported. +.PP +\&\fBOSSL_STORE_find()\fR helps applications specify a criterion for a more fine +grained search of objects. +.PP +\&\fBOSSL_STORE_supports_search()\fR checks if the loader of the given \s-1OSSL_STORE\s0 +context supports the given search type. +See \*(L"\s-1SUPPORTED CRITERION TYPES\*(R"\s0 in \s-1OSSL_STORE_SEARCH\s0 for information on the +supported search criterion types. +.PP +\&\fBOSSL_STORE_expect()\fR and OSSL_STORE_find \fImust\fR be called before the first +\&\fBOSSL_STORE_load()\fR of a given session, or they will fail. +.SH "NOTES" +.IX Header "NOTES" +If a more elaborate filter is required by the application, a better choice +would be to use a post-processing function. +See \fBOSSL_STORE_open\fR\|(3) for more information. +.PP +However, some loaders may take advantage of the knowledge of an expected type +to make object retrieval more efficient, so if a single type is expected, this +method is usually preferable. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBOSSL_STORE_expect()\fR returns 1 on success, or 0 on failure. +.PP +\&\fBOSSL_STORE_supports_search()\fR returns 1 if the criterion is supported, or 0 +otherwise. +.PP +\&\fBOSSL_STORE_find()\fR returns 1 on success, or 0 on failure. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBossl_store\fR\|(7), \s-1\fBOSSL_STORE_INFO\s0\fR\|(3), \s-1\fBOSSL_STORE_SEARCH\s0\fR\|(3), +\&\fBOSSL_STORE_load\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +\&\fBOSSL_STORE_expect()\fR, \fBOSSL_STORE_supports_search()\fR and \fBOSSL_STORE_find()\fR +were added in OpenSSL 1.1.1. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2018\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OSSL_STORE_open.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OSSL_STORE_open.3 new file mode 100644 index 00000000..121ba5dc --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OSSL_STORE_open.3 @@ -0,0 +1,281 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "OSSL_STORE_OPEN 3" +.TH OSSL_STORE_OPEN 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +OSSL_STORE_CTX, OSSL_STORE_post_process_info_fn, OSSL_STORE_open, OSSL_STORE_ctrl, OSSL_STORE_load, OSSL_STORE_eof, OSSL_STORE_error, OSSL_STORE_close \- Types and functions to read objects from a URI +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& typedef struct ossl_store_ctx_st OSSL_STORE_CTX; +\& +\& typedef OSSL_STORE_INFO *(*OSSL_STORE_post_process_info_fn)(OSSL_STORE_INFO *, +\& void *); +\& +\& OSSL_STORE_CTX *OSSL_STORE_open(const char *uri, const UI_METHOD *ui_method, +\& void *ui_data, +\& OSSL_STORE_post_process_info_fn post_process, +\& void *post_process_data); +\& int OSSL_STORE_ctrl(OSSL_STORE_CTX *ctx, int cmd, ... /* args */); +\& OSSL_STORE_INFO *OSSL_STORE_load(OSSL_STORE_CTX *ctx); +\& int OSSL_STORE_eof(OSSL_STORE_CTX *ctx); +\& int OSSL_STORE_error(OSSL_STORE_CTX *ctx); +\& int OSSL_STORE_close(OSSL_STORE_CTX *ctx); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +These functions help the application to fetch supported objects (see +\&\*(L"\s-1SUPPORTED OBJECTS\*(R"\s0 in \s-1\fBOSSL_STORE_INFO\s0\fR\|(3) for information on which those are) +from a given \s-1URI\s0 (see \*(L"\s-1SUPPORTED SCHEMES\*(R"\s0 for more information on +the supported \s-1URI\s0 schemes). +The general method to do so is to \*(L"open\*(R" the \s-1URI\s0 using \fBOSSL_STORE_open()\fR, +read each available and supported object using \fBOSSL_STORE_load()\fR as long as +\&\fBOSSL_STORE_eof()\fR hasn't been reached, and finish it off with \fBOSSL_STORE_close()\fR. +.PP +The retrieved information is stored in a \fB\s-1OSSL_STORE_INFO\s0\fR, which is further +described in \s-1\fBOSSL_STORE_INFO\s0\fR\|(3). +.SS "Types" +.IX Subsection "Types" +\&\fB\s-1OSSL_STORE_CTX\s0\fR is a context variable that holds all the internal +information for \fBOSSL_STORE_open()\fR, \fBOSSL_STORE_load()\fR, \fBOSSL_STORE_eof()\fR and +\&\fBOSSL_STORE_close()\fR to work together. +.SS "Functions" +.IX Subsection "Functions" +\&\fBOSSL_STORE_open()\fR takes a uri or path \fBuri\fR, password \s-1UI\s0 method +\&\fBui_method\fR with associated data \fBui_data\fR, and post processing +callback \fBpost_process\fR with associated data \fBpost_process_data\fR, +opens a channel to the data located at that \s-1URI\s0 and returns a +\&\fB\s-1OSSL_STORE_CTX\s0\fR with all necessary internal information. +The given \fBui_method\fR and \fBui_data_data\fR will be reused by all +functions that use \fB\s-1OSSL_STORE_CTX\s0\fR when interaction is needed. +The given \fBpost_process\fR and \fBpost_process_data\fR will be reused by +\&\fBOSSL_STORE_load()\fR to manipulate or drop the value to be returned. +The \fBpost_process\fR function drops values by returning \fB\s-1NULL\s0\fR, which +will cause \fBOSSL_STORE_load()\fR to start its process over with loading +the next object, until \fBpost_process\fR returns something other than +\&\fB\s-1NULL\s0\fR, or the end of data is reached as indicated by \fBOSSL_STORE_eof()\fR. +.PP +\&\fBOSSL_STORE_ctrl()\fR takes a \fB\s-1OSSL_STORE_CTX\s0\fR, and command number \fBcmd\fR 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 +that loader. +.PP +There are also global controls available: +.IP "\fB\s-1OSSL_STORE_C_USE_SECMEM\s0\fR" 4 +.IX Item "OSSL_STORE_C_USE_SECMEM" +Controls if the loader should attempt to use secure memory for any +allocated \fB\s-1OSSL_STORE_INFO\s0\fR and its contents. +This control expects one argument, a pointer to an \fBint\fR that is expected to +have the value 1 (yes) or 0 (no). +Any other value is an error. +.PP +\&\fBOSSL_STORE_load()\fR takes a \fB\s-1OSSL_STORE_CTX\s0\fR, tries to load the next available +object and return it wrapped with \fB\s-1OSSL_STORE_INFO\s0\fR. +.PP +\&\fBOSSL_STORE_eof()\fR takes a \fB\s-1OSSL_STORE_CTX\s0\fR and checks if we've reached the end +of data. +.PP +\&\fBOSSL_STORE_error()\fR takes a \fB\s-1OSSL_STORE_CTX\s0\fR and checks if an error occurred in +the last \fBOSSL_STORE_load()\fR call. +Note that it may still be meaningful to try and load more objects, unless +\&\fBOSSL_STORE_eof()\fR shows that the end of data has been reached. +.PP +\&\fBOSSL_STORE_close()\fR takes a \fB\s-1OSSL_STORE_CTX\s0\fR, closes the channel that was opened +by \fBOSSL_STORE_open()\fR and frees all other information that was stored in the +\&\fB\s-1OSSL_STORE_CTX\s0\fR, as well as the \fB\s-1OSSL_STORE_CTX\s0\fR itself. +.SH "SUPPORTED SCHEMES" +.IX Header "SUPPORTED SCHEMES" +The basic supported scheme is \fBfile:\fR. +Any other scheme can be added dynamically, using +\&\fBOSSL_STORE_register_loader()\fR. +.SH "NOTES" +.IX Header "NOTES" +A string without a scheme prefix (that is, a non-URI string) is +implicitly interpreted as using the \fIfile:\fR scheme. +.PP +There are some tools that can be used together with +\&\fBOSSL_STORE_open()\fR to determine if any failure is caused by an unparsable +\&\s-1URI,\s0 or if it's a different error (such as memory allocation +failures); if the \s-1URI\s0 was parsable but the scheme unregistered, the +top error will have the reason \f(CW\*(C`OSSL_STORE_R_UNREGISTERED_SCHEME\*(C'\fR. +.PP +These functions make no direct assumption regarding the pass phrase received +from the password callback. +The loaders may make assumptions, however. +For example, the \fBfile:\fR scheme loader inherits the assumptions made by +OpenSSL functionality that handles the different file types; this is mostly +relevant for PKCS#12 objects. +See \fBpassphrase\-encoding\fR\|(7) for further information. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBOSSL_STORE_open()\fR returns a pointer to a \fB\s-1OSSL_STORE_CTX\s0\fR on success, or +\&\fB\s-1NULL\s0\fR on failure. +.PP +\&\fBOSSL_STORE_load()\fR returns a pointer to a \fB\s-1OSSL_STORE_INFO\s0\fR on success, or +\&\fB\s-1NULL\s0\fR on error or when end of data is reached. +Use \fBOSSL_STORE_error()\fR and \fBOSSL_STORE_eof()\fR to determine the meaning of a +returned \fB\s-1NULL\s0\fR. +.PP +\&\fBOSSL_STORE_eof()\fR returns 1 if the end of data has been reached, otherwise +0. +.PP +\&\fBOSSL_STORE_error()\fR returns 1 if an error occurred in an \fBOSSL_STORE_load()\fR call, +otherwise 0. +.PP +\&\fBOSSL_STORE_ctrl()\fR and \fBOSSL_STORE_close()\fR returns 1 on success, or 0 on failure. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBossl_store\fR\|(7), \s-1\fBOSSL_STORE_INFO\s0\fR\|(3), \fBOSSL_STORE_register_loader\fR\|(3), +\&\fBpassphrase\-encoding\fR\|(7) +.SH "HISTORY" +.IX Header "HISTORY" +\&\s-1\fBOSSL_STORE_CTX\s0()\fR, \fBOSSL_STORE_post_process_info_fn()\fR, \fBOSSL_STORE_open()\fR, +\&\fBOSSL_STORE_ctrl()\fR, \fBOSSL_STORE_load()\fR, \fBOSSL_STORE_eof()\fR and \fBOSSL_STORE_close()\fR +were added in OpenSSL 1.1.1. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2016\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OpenSSL_add_all_algorithms.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OpenSSL_add_all_algorithms.3 new file mode 100644 index 00000000..e8c7a65b --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/OpenSSL_add_all_algorithms.3 @@ -0,0 +1,195 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "OPENSSL_ADD_ALL_ALGORITHMS 3" +.TH OPENSSL_ADD_ALL_ALGORITHMS 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +OpenSSL_add_all_algorithms, OpenSSL_add_all_ciphers, OpenSSL_add_all_digests, EVP_cleanup \- add algorithms to internal table +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +.Ve +.PP +Deprecated: +.PP +.Vb 4 +\& # if OPENSSL_API_COMPAT < 0x10100000L +\& void OpenSSL_add_all_algorithms(void); +\& void OpenSSL_add_all_ciphers(void); +\& void OpenSSL_add_all_digests(void); +\& +\& void EVP_cleanup(void) +\&# endif +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +OpenSSL keeps an internal table of digest algorithms and ciphers. It uses +this table to lookup ciphers via functions such as \fBEVP_get_cipher_byname()\fR. +.PP +\&\fBOpenSSL_add_all_digests()\fR adds all digest algorithms to the table. +.PP +\&\fBOpenSSL_add_all_algorithms()\fR adds all algorithms to the table (digests and +ciphers). +.PP +\&\fBOpenSSL_add_all_ciphers()\fR adds all encryption algorithms to the table including +password based encryption algorithms. +.PP +In versions prior to 1.1.0 \fBEVP_cleanup()\fR removed all ciphers and digests from +the table. It no longer has any effect in OpenSSL 1.1.0. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +None of the functions return a value. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBevp\fR\|(7), \fBEVP_DigestInit\fR\|(3), +\&\fBEVP_EncryptInit\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +The \fBOpenSSL_add_all_algorithms()\fR, \fBOpenSSL_add_all_ciphers()\fR, +\&\fBOpenSSL_add_all_digests()\fR, and \fBEVP_cleanup()\fR, functions +were deprecated in OpenSSL 1.1.0 by \fBOPENSSL_init_crypto()\fR and should +not be used. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/PEM_bytes_read_bio.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/PEM_bytes_read_bio.3 new file mode 100644 index 00000000..593c2c80 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/PEM_bytes_read_bio.3 @@ -0,0 +1,216 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "PEM_BYTES_READ_BIO 3" +.TH PEM_BYTES_READ_BIO 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +PEM_bytes_read_bio, PEM_bytes_read_bio_secmem \- read a PEM\-encoded data structure from a BIO +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int PEM_bytes_read_bio(unsigned char **pdata, long *plen, char **pnm, +\& const char *name, BIO *bp, pem_password_cb *cb, +\& void *u); +\& int PEM_bytes_read_bio_secmem(unsigned char **pdata, long *plen, char **pnm, +\& const char *name, BIO *bp, pem_password_cb *cb, +\& void *u); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBPEM_bytes_read_bio()\fR reads PEM-formatted (\s-1IETF RFC 1421\s0 and \s-1IETF RFC 7468\s0) +data from the \s-1BIO\s0 +\&\fIbp\fR for the data type given in \fIname\fR (\s-1RSA PRIVATE KEY, CERTIFICATE,\s0 +etc.). If multiple PEM-encoded data structures are present in the same +stream, \fBPEM_bytes_read_bio()\fR will skip non-matching data types and +continue reading. Non-PEM data present in the stream may cause an +error. +.PP +The \s-1PEM\s0 header may indicate that the following data is encrypted; if so, +the data will be decrypted, waiting on user input to supply a passphrase +if needed. The password callback \fIcb\fR and rock \fIu\fR are used to obtain +the decryption passphrase, if applicable. +.PP +Some data types have compatibility aliases, such as a file containing +X509 \s-1CERTIFICATE\s0 matching a request for the deprecated type \s-1CERTIFICATE.\s0 +The actual type indicated by the file is returned in \fI*pnm\fR if \fIpnm\fR is +non-NULL. The caller must free the storage pointed to by \fI*pnm\fR. +.PP +The returned data is the DER-encoded form of the requested type, in +\&\fI*pdata\fR with length \fI*plen\fR. The caller must free the storage pointed +to by \fI*pdata\fR. +.PP +\&\fBPEM_bytes_read_bio_secmem()\fR is similar to \fBPEM_bytes_read_bio()\fR, but uses +memory from the secure heap for its temporary buffers and the storage +returned in \fI*pdata\fR and \fI*pnm\fR. Accordingly, the caller must use +\&\fBOPENSSL_secure_free()\fR to free that storage. +.SH "NOTES" +.IX Header "NOTES" +\&\fBPEM_bytes_read_bio_secmem()\fR only enforces that the secure heap is used for +storage allocated within the \s-1PEM\s0 processing stack. The \s-1BIO\s0 stack from +which input is read may also use temporary buffers, which are not necessarily +allocated from the secure heap. In cases where it is desirable to ensure +that the contents of the \s-1PEM\s0 file only appears in memory from the secure heap, +care is needed in generating the \s-1BIO\s0 passed as \fIbp\fR. In particular, the +use of \fBBIO_s_file()\fR indicates the use of the operating system stdio +functionality, which includes buffering as a feature; \fBBIO_s_fd()\fR is likely +to be more appropriate in such cases. +.PP +These functions make no assumption regarding the pass phrase received from the +password callback. +It will simply be treated as a byte sequence. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBPEM_bytes_read_bio()\fR and \fBPEM_bytes_read_bio_secmem()\fR return 1 for success or +0 for failure. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBPEM_read_bio_ex\fR\|(3), +\&\fBpassphrase\-encoding\fR\|(7) +.SH "HISTORY" +.IX Header "HISTORY" +\&\fBPEM_bytes_read_bio_secmem()\fR was introduced in OpenSSL 1.1.1 +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/PEM_read.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/PEM_read.3 new file mode 100644 index 00000000..864f6f9a --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/PEM_read.3 @@ -0,0 +1,263 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "PEM_READ 3" +.TH PEM_READ 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +PEM_write, PEM_write_bio, PEM_read, PEM_read_bio, PEM_do_header, PEM_get_EVP_CIPHER_INFO \&\- PEM encoding routines +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int PEM_write(FILE *fp, const char *name, const char *header, +\& const unsigned char *data, long len) +\& int PEM_write_bio(BIO *bp, const char *name, const char *header, +\& const unsigned char *data, long len) +\& +\& int PEM_read(FILE *fp, char **name, char **header, +\& unsigned char **data, long *len); +\& int PEM_read_bio(BIO *bp, char **name, char **header, +\& unsigned char **data, long *len); +\& +\& int PEM_get_EVP_CIPHER_INFO(char *header, EVP_CIPHER_INFO *cinfo); +\& int PEM_do_header(EVP_CIPHER_INFO *cinfo, unsigned char *data, long *len, +\& pem_password_cb *cb, void *u); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +These functions read and write PEM-encoded objects, using the \s-1PEM\s0 +type \fBname\fR, any additional \fBheader\fR information, and the raw +\&\fBdata\fR of length \fBlen\fR. +.PP +\&\s-1PEM\s0 is the term used for binary content encoding first defined in \s-1IETF +RFC 1421.\s0 The content is a series of base64\-encoded lines, surrounded +by begin/end markers each on their own line. For example: +.PP +.Vb 4 +\& \-\-\-\-\-BEGIN PRIVATE KEY\-\-\-\-\- +\& MIICdg.... +\& ... bhTQ== +\& \-\-\-\-\-END PRIVATE KEY\-\-\-\-\- +.Ve +.PP +Optional header line(s) may appear after the begin line, and their +existence depends on the type of object being written or read. +.PP +\&\fBPEM_write()\fR writes to the file \fBfp\fR, while \fBPEM_write_bio()\fR writes to +the \s-1BIO\s0 \fBbp\fR. The \fBname\fR is the name to use in the marker, the +\&\fBheader\fR is the header value or \s-1NULL,\s0 and \fBdata\fR and \fBlen\fR specify +the data and its length. +.PP +The final \fBdata\fR buffer is typically an \s-1ASN.1\s0 object which can be decoded with +the \fBd2i\fR function appropriate to the type \fBname\fR; see \fBd2i_X509\fR\|(3) +for examples. +.PP +\&\fBPEM_read()\fR reads from the file \fBfp\fR, while \fBPEM_read_bio()\fR reads +from the \s-1BIO\s0 \fBbp\fR. +Both skip any non-PEM data that precedes the start of the next \s-1PEM\s0 object. +When an object is successfully retrieved, the type name from the \*(L"\-\-\-\-BEGIN +\-\-\-\-\-\*(R" is returned via the \fBname\fR argument, any encapsulation headers +are returned in \fBheader\fR and the base64\-decoded content and its length are +returned via \fBdata\fR and \fBlen\fR respectively. +The \fBname\fR, \fBheader\fR and \fBdata\fR pointers are allocated via \fBOPENSSL_malloc()\fR +and should be freed by the caller via \fBOPENSSL_free()\fR when no longer needed. +.PP +\&\fBPEM_get_EVP_CIPHER_INFO()\fR can be used to determine the \fBdata\fR returned by +\&\fBPEM_read()\fR or \fBPEM_read_bio()\fR is encrypted and to retrieve the associated cipher +and \s-1IV.\s0 +The caller passes a pointer to structure of type \fB\s-1EVP_CIPHER_INFO\s0\fR via the +\&\fBcinfo\fR argument and the \fBheader\fR returned via \fBPEM_read()\fR or \fBPEM_read_bio()\fR. +If the call is successful 1 is returned and the cipher and \s-1IV\s0 are stored at the +address pointed to by \fBcinfo\fR. +When the header is malformed, or not supported or when the cipher is unknown +or some internal error happens 0 is returned. +This function is deprecated, see \fB\s-1NOTES\s0\fR below. +.PP +\&\fBPEM_do_header()\fR can then be used to decrypt the data if the header +indicates encryption. +The \fBcinfo\fR argument is a pointer to the structure initialized by the previous +call to \fBPEM_get_EVP_CIPHER_INFO()\fR. +The \fBdata\fR and \fBlen\fR arguments are those returned by the previous call to +\&\fBPEM_read()\fR or \fBPEM_read_bio()\fR. +The \fBcb\fR and \fBu\fR arguments make it possible to override the default password +prompt function as described in \fBPEM_read_PrivateKey\fR\|(3). +On successful completion the \fBdata\fR is decrypted in place, and \fBlen\fR is +updated to indicate the plaintext length. +This function is deprecated, see \fB\s-1NOTES\s0\fR below. +.PP +If the data is a priori known to not be encrypted, then neither \fBPEM_do_header()\fR +nor \fBPEM_get_EVP_CIPHER_INFO()\fR need be called. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBPEM_read()\fR and \fBPEM_read_bio()\fR return 1 on success and 0 on failure, the latter +includes the case when no more \s-1PEM\s0 objects remain in the input file. +To distinguish end of file from more serious errors the caller must peek at the +error stack and check for \fB\s-1PEM_R_NO_START_LINE\s0\fR, which indicates that no more +\&\s-1PEM\s0 objects were found. See \fBERR_peek_last_error\fR\|(3), \s-1\fBERR_GET_REASON\s0\fR\|(3). +.PP +\&\fBPEM_get_EVP_CIPHER_INFO()\fR and \fBPEM_do_header()\fR return 1 on success, and 0 on +failure. +The \fBdata\fR is likely meaningless if these functions fail. +.SH "NOTES" +.IX Header "NOTES" +The \fBPEM_get_EVP_CIPHER_INFO()\fR and \fBPEM_do_header()\fR functions are deprecated. +This is because the underlying \s-1PEM\s0 encryption format is obsolete, and should +be avoided. +It uses an encryption format with an OpenSSL-specific key-derivation function, +which employs \s-1MD5\s0 with an iteration count of 1! +Instead, private keys should be stored in PKCS#8 form, with a strong PKCS#5 +v2.0 \s-1PBE.\s0 +See \fBPEM_write_PrivateKey\fR\|(3) and \fBd2i_PKCS8PrivateKey_bio\fR\|(3). +.PP +\&\fBPEM_do_header()\fR makes no assumption regarding the pass phrase received from the +password callback. +It will simply be treated as a byte sequence. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_peek_last_error\fR\|(3), \s-1\fBERR_GET_LIB\s0\fR\|(3), +\&\fBd2i_PKCS8PrivateKey_bio\fR\|(3), +\&\fBpassphrase\-encoding\fR\|(7) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 1998\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/PEM_read_CMS.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/PEM_read_CMS.3 new file mode 100644 index 00000000..1bfc8c2e --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/PEM_read_CMS.3 @@ -0,0 +1,199 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "PEM_READ_CMS 3" +.TH PEM_READ_CMS 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +DECLARE_PEM_rw, PEM_read_CMS, PEM_read_bio_CMS, PEM_write_CMS, PEM_write_bio_CMS, PEM_write_DHxparams, PEM_write_bio_DHxparams, PEM_read_ECPKParameters, PEM_read_bio_ECPKParameters, PEM_write_ECPKParameters, PEM_write_bio_ECPKParameters, PEM_read_ECPrivateKey, PEM_write_ECPrivateKey, PEM_write_bio_ECPrivateKey, PEM_read_EC_PUBKEY, PEM_read_bio_EC_PUBKEY, PEM_write_EC_PUBKEY, PEM_write_bio_EC_PUBKEY, PEM_read_NETSCAPE_CERT_SEQUENCE, PEM_read_bio_NETSCAPE_CERT_SEQUENCE, PEM_write_NETSCAPE_CERT_SEQUENCE, PEM_write_bio_NETSCAPE_CERT_SEQUENCE, PEM_read_PKCS8, PEM_read_bio_PKCS8, PEM_write_PKCS8, PEM_write_bio_PKCS8, PEM_write_PKCS8_PRIV_KEY_INFO, PEM_read_bio_PKCS8_PRIV_KEY_INFO, PEM_read_PKCS8_PRIV_KEY_INFO, PEM_write_bio_PKCS8_PRIV_KEY_INFO, PEM_read_SSL_SESSION, PEM_read_bio_SSL_SESSION, PEM_write_SSL_SESSION, PEM_write_bio_SSL_SESSION \&\- PEM object encoding routines +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& DECLARE_PEM_rw(name, TYPE) +\& +\& TYPE *PEM_read_TYPE(FILE *fp, TYPE **a, pem_password_cb *cb, void *u); +\& TYPE *PEM_read_bio_TYPE(BIO *bp, TYPE **a, pem_password_cb *cb, void *u); +\& int PEM_write_TYPE(FILE *fp, const TYPE *a); +\& int PEM_write_bio_TYPE(BIO *bp, const TYPE *a); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +In the description below, \fI\s-1TYPE\s0\fR is used +as a placeholder for any of the OpenSSL datatypes, such as \fIX509\fR. +The macro \fBDECLARE_PEM_rw\fR expands to the set of declarations shown in +the next four lines of the synopsis. +.PP +These routines convert between local instances of \s-1ASN1\s0 datatypes and +the \s-1PEM\s0 encoding. For more information on the templates, see +\&\s-1\fBASN1_ITEM\s0\fR\|(3). For more information on the lower-level routines used +by the functions here, see \fBPEM_read\fR\|(3). +.PP +\&\fBPEM_read_TYPE()\fR reads a PEM-encoded object of \fI\s-1TYPE\s0\fR from the file \fBfp\fR +and returns it. The \fBcb\fR and \fBu\fR parameters are as described in +\&\fBpem_password_cb\fR\|(3). +.PP +\&\fBPEM_read_bio_TYPE()\fR is similar to \fBPEM_read_TYPE()\fR but reads from the \s-1BIO\s0 \fBbp\fR. +.PP +\&\fBPEM_write_TYPE()\fR writes the \s-1PEM\s0 encoding of the object \fBa\fR to the file \fBfp\fR. +.PP +\&\fBPEM_write_bio_TYPE()\fR similarly writes to the \s-1BIO\s0 \fBbp\fR. +.SH "NOTES" +.IX Header "NOTES" +These functions make no assumption regarding the pass phrase received from the +password callback. +It will simply be treated as a byte sequence. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBPEM_read_TYPE()\fR and \fBPEM_read_bio_TYPE()\fR return a pointer to an allocated +object, which should be released by calling \fBTYPE_free()\fR, or \s-1NULL\s0 on error. +.PP +\&\fBPEM_write_TYPE()\fR and \fBPEM_write_bio_TYPE()\fR return the number of bytes written +or zero on error. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBPEM_read\fR\|(3), +\&\fBpassphrase\-encoding\fR\|(7) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 1998\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/PEM_read_bio_PrivateKey.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/PEM_read_bio_PrivateKey.3 new file mode 100644 index 00000000..8917f4be --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/PEM_read_bio_PrivateKey.3 @@ -0,0 +1,622 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "PEM_READ_BIO_PRIVATEKEY 3" +.TH PEM_READ_BIO_PRIVATEKEY 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +pem_password_cb, PEM_read_bio_PrivateKey, PEM_read_PrivateKey, PEM_write_bio_PrivateKey, PEM_write_bio_PrivateKey_traditional, PEM_write_PrivateKey, PEM_write_bio_PKCS8PrivateKey, PEM_write_PKCS8PrivateKey, PEM_write_bio_PKCS8PrivateKey_nid, PEM_write_PKCS8PrivateKey_nid, PEM_read_bio_PUBKEY, PEM_read_PUBKEY, PEM_write_bio_PUBKEY, PEM_write_PUBKEY, PEM_read_bio_RSAPrivateKey, PEM_read_RSAPrivateKey, PEM_write_bio_RSAPrivateKey, PEM_write_RSAPrivateKey, PEM_read_bio_RSAPublicKey, PEM_read_RSAPublicKey, PEM_write_bio_RSAPublicKey, PEM_write_RSAPublicKey, PEM_read_bio_RSA_PUBKEY, PEM_read_RSA_PUBKEY, PEM_write_bio_RSA_PUBKEY, PEM_write_RSA_PUBKEY, PEM_read_bio_DSAPrivateKey, PEM_read_DSAPrivateKey, PEM_write_bio_DSAPrivateKey, PEM_write_DSAPrivateKey, PEM_read_bio_DSA_PUBKEY, PEM_read_DSA_PUBKEY, PEM_write_bio_DSA_PUBKEY, PEM_write_DSA_PUBKEY, PEM_read_bio_Parameters, PEM_write_bio_Parameters, PEM_read_bio_DSAparams, PEM_read_DSAparams, PEM_write_bio_DSAparams, PEM_write_DSAparams, PEM_read_bio_DHparams, PEM_read_DHparams, PEM_write_bio_DHparams, PEM_write_DHparams, PEM_read_bio_X509, PEM_read_X509, PEM_write_bio_X509, PEM_write_X509, PEM_read_bio_X509_AUX, PEM_read_X509_AUX, PEM_write_bio_X509_AUX, PEM_write_X509_AUX, PEM_read_bio_X509_REQ, PEM_read_X509_REQ, PEM_write_bio_X509_REQ, PEM_write_X509_REQ, PEM_write_bio_X509_REQ_NEW, PEM_write_X509_REQ_NEW, PEM_read_bio_X509_CRL, PEM_read_X509_CRL, PEM_write_bio_X509_CRL, PEM_write_X509_CRL, PEM_read_bio_PKCS7, PEM_read_PKCS7, PEM_write_bio_PKCS7, PEM_write_PKCS7 \- PEM routines +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& typedef int pem_password_cb(char *buf, int size, int rwflag, void *u); +\& +\& EVP_PKEY *PEM_read_bio_PrivateKey(BIO *bp, EVP_PKEY **x, +\& pem_password_cb *cb, void *u); +\& EVP_PKEY *PEM_read_PrivateKey(FILE *fp, EVP_PKEY **x, +\& pem_password_cb *cb, void *u); +\& int PEM_write_bio_PrivateKey(BIO *bp, EVP_PKEY *x, const EVP_CIPHER *enc, +\& unsigned char *kstr, int klen, +\& pem_password_cb *cb, void *u); +\& int PEM_write_bio_PrivateKey_traditional(BIO *bp, EVP_PKEY *x, +\& const EVP_CIPHER *enc, +\& unsigned char *kstr, int klen, +\& pem_password_cb *cb, void *u); +\& int PEM_write_PrivateKey(FILE *fp, EVP_PKEY *x, const EVP_CIPHER *enc, +\& unsigned char *kstr, int klen, +\& pem_password_cb *cb, void *u); +\& +\& int PEM_write_bio_PKCS8PrivateKey(BIO *bp, EVP_PKEY *x, const EVP_CIPHER *enc, +\& char *kstr, int klen, +\& pem_password_cb *cb, void *u); +\& int PEM_write_PKCS8PrivateKey(FILE *fp, EVP_PKEY *x, const EVP_CIPHER *enc, +\& char *kstr, int klen, +\& pem_password_cb *cb, void *u); +\& int PEM_write_bio_PKCS8PrivateKey_nid(BIO *bp, EVP_PKEY *x, int nid, +\& char *kstr, int klen, +\& pem_password_cb *cb, void *u); +\& int PEM_write_PKCS8PrivateKey_nid(FILE *fp, EVP_PKEY *x, int nid, +\& char *kstr, int klen, +\& pem_password_cb *cb, void *u); +\& +\& EVP_PKEY *PEM_read_bio_PUBKEY(BIO *bp, EVP_PKEY **x, +\& pem_password_cb *cb, void *u); +\& EVP_PKEY *PEM_read_PUBKEY(FILE *fp, EVP_PKEY **x, +\& pem_password_cb *cb, void *u); +\& int PEM_write_bio_PUBKEY(BIO *bp, EVP_PKEY *x); +\& int PEM_write_PUBKEY(FILE *fp, EVP_PKEY *x); +\& +\& RSA *PEM_read_bio_RSAPrivateKey(BIO *bp, RSA **x, +\& pem_password_cb *cb, void *u); +\& RSA *PEM_read_RSAPrivateKey(FILE *fp, RSA **x, +\& pem_password_cb *cb, void *u); +\& int PEM_write_bio_RSAPrivateKey(BIO *bp, RSA *x, const EVP_CIPHER *enc, +\& unsigned char *kstr, int klen, +\& pem_password_cb *cb, void *u); +\& int PEM_write_RSAPrivateKey(FILE *fp, RSA *x, const EVP_CIPHER *enc, +\& unsigned char *kstr, int klen, +\& pem_password_cb *cb, void *u); +\& +\& RSA *PEM_read_bio_RSAPublicKey(BIO *bp, RSA **x, +\& pem_password_cb *cb, void *u); +\& RSA *PEM_read_RSAPublicKey(FILE *fp, RSA **x, +\& pem_password_cb *cb, void *u); +\& int PEM_write_bio_RSAPublicKey(BIO *bp, RSA *x); +\& int PEM_write_RSAPublicKey(FILE *fp, RSA *x); +\& +\& RSA *PEM_read_bio_RSA_PUBKEY(BIO *bp, RSA **x, +\& pem_password_cb *cb, void *u); +\& RSA *PEM_read_RSA_PUBKEY(FILE *fp, RSA **x, +\& pem_password_cb *cb, void *u); +\& int PEM_write_bio_RSA_PUBKEY(BIO *bp, RSA *x); +\& int PEM_write_RSA_PUBKEY(FILE *fp, RSA *x); +\& +\& DSA *PEM_read_bio_DSAPrivateKey(BIO *bp, DSA **x, +\& pem_password_cb *cb, void *u); +\& DSA *PEM_read_DSAPrivateKey(FILE *fp, DSA **x, +\& pem_password_cb *cb, void *u); +\& int PEM_write_bio_DSAPrivateKey(BIO *bp, DSA *x, const EVP_CIPHER *enc, +\& unsigned char *kstr, int klen, +\& pem_password_cb *cb, void *u); +\& int PEM_write_DSAPrivateKey(FILE *fp, DSA *x, const EVP_CIPHER *enc, +\& unsigned char *kstr, int klen, +\& pem_password_cb *cb, void *u); +\& +\& DSA *PEM_read_bio_DSA_PUBKEY(BIO *bp, DSA **x, +\& pem_password_cb *cb, void *u); +\& DSA *PEM_read_DSA_PUBKEY(FILE *fp, DSA **x, +\& pem_password_cb *cb, void *u); +\& int PEM_write_bio_DSA_PUBKEY(BIO *bp, DSA *x); +\& int PEM_write_DSA_PUBKEY(FILE *fp, DSA *x); +\& +\& EVP_PKEY *PEM_read_bio_Parameters(BIO *bp, EVP_PKEY **x); +\& int PEM_write_bio_Parameters(BIO *bp, const EVP_PKEY *x); +\& +\& DSA *PEM_read_bio_DSAparams(BIO *bp, DSA **x, pem_password_cb *cb, void *u); +\& DSA *PEM_read_DSAparams(FILE *fp, DSA **x, pem_password_cb *cb, void *u); +\& int PEM_write_bio_DSAparams(BIO *bp, DSA *x); +\& int PEM_write_DSAparams(FILE *fp, DSA *x); +\& +\& DH *PEM_read_bio_DHparams(BIO *bp, DH **x, pem_password_cb *cb, void *u); +\& DH *PEM_read_DHparams(FILE *fp, DH **x, pem_password_cb *cb, void *u); +\& int PEM_write_bio_DHparams(BIO *bp, DH *x); +\& int PEM_write_DHparams(FILE *fp, DH *x); +\& +\& X509 *PEM_read_bio_X509(BIO *bp, X509 **x, pem_password_cb *cb, void *u); +\& X509 *PEM_read_X509(FILE *fp, X509 **x, pem_password_cb *cb, void *u); +\& int PEM_write_bio_X509(BIO *bp, X509 *x); +\& int PEM_write_X509(FILE *fp, X509 *x); +\& +\& X509 *PEM_read_bio_X509_AUX(BIO *bp, X509 **x, pem_password_cb *cb, void *u); +\& X509 *PEM_read_X509_AUX(FILE *fp, X509 **x, pem_password_cb *cb, void *u); +\& int PEM_write_bio_X509_AUX(BIO *bp, X509 *x); +\& int PEM_write_X509_AUX(FILE *fp, X509 *x); +\& +\& X509_REQ *PEM_read_bio_X509_REQ(BIO *bp, X509_REQ **x, +\& pem_password_cb *cb, void *u); +\& X509_REQ *PEM_read_X509_REQ(FILE *fp, X509_REQ **x, +\& pem_password_cb *cb, void *u); +\& int PEM_write_bio_X509_REQ(BIO *bp, X509_REQ *x); +\& int PEM_write_X509_REQ(FILE *fp, X509_REQ *x); +\& int PEM_write_bio_X509_REQ_NEW(BIO *bp, X509_REQ *x); +\& int PEM_write_X509_REQ_NEW(FILE *fp, X509_REQ *x); +\& +\& X509_CRL *PEM_read_bio_X509_CRL(BIO *bp, X509_CRL **x, +\& pem_password_cb *cb, void *u); +\& X509_CRL *PEM_read_X509_CRL(FILE *fp, X509_CRL **x, +\& pem_password_cb *cb, void *u); +\& int PEM_write_bio_X509_CRL(BIO *bp, X509_CRL *x); +\& int PEM_write_X509_CRL(FILE *fp, X509_CRL *x); +\& +\& PKCS7 *PEM_read_bio_PKCS7(BIO *bp, PKCS7 **x, pem_password_cb *cb, void *u); +\& PKCS7 *PEM_read_PKCS7(FILE *fp, PKCS7 **x, pem_password_cb *cb, void *u); +\& int PEM_write_bio_PKCS7(BIO *bp, PKCS7 *x); +\& int PEM_write_PKCS7(FILE *fp, PKCS7 *x); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \s-1PEM\s0 functions read or write structures in \s-1PEM\s0 format. In +this sense \s-1PEM\s0 format is simply base64 encoded data surrounded +by header lines. +.PP +For more details about the meaning of arguments see the +\&\fB\s-1PEM FUNCTION ARGUMENTS\s0\fR section. +.PP +Each operation has four functions associated with it. For +brevity the term "\fB\s-1TYPE\s0\fR functions" will be used below to collectively +refer to the \fBPEM_read_bio_TYPE()\fR, \fBPEM_read_TYPE()\fR, +\&\fBPEM_write_bio_TYPE()\fR, and \fBPEM_write_TYPE()\fR functions. +.PP +The \fBPrivateKey\fR functions read or write a private key in \s-1PEM\s0 format using an +\&\s-1EVP_PKEY\s0 structure. The write routines use PKCS#8 private key format and are +equivalent to \fBPEM_write_bio_PKCS8PrivateKey()\fR.The read functions transparently +handle traditional and PKCS#8 format encrypted and unencrypted keys. +.PP +\&\fBPEM_write_bio_PrivateKey_traditional()\fR writes out a private key in the +\&\*(L"traditional\*(R" format with a simple private key marker and should only +be used for compatibility with legacy programs. +.PP +\&\fBPEM_write_bio_PKCS8PrivateKey()\fR and \fBPEM_write_PKCS8PrivateKey()\fR write a private +key in an \s-1EVP_PKEY\s0 structure in PKCS#8 EncryptedPrivateKeyInfo format using +PKCS#5 v2.0 password based encryption algorithms. The \fBcipher\fR argument +specifies the encryption algorithm to use: unlike some other \s-1PEM\s0 routines the +encryption is applied at the PKCS#8 level and not in the \s-1PEM\s0 headers. If +\&\fBcipher\fR is \s-1NULL\s0 then no encryption is used and a PKCS#8 PrivateKeyInfo +structure is used instead. +.PP +\&\fBPEM_write_bio_PKCS8PrivateKey_nid()\fR and \fBPEM_write_PKCS8PrivateKey_nid()\fR +also write out a private key as a PKCS#8 EncryptedPrivateKeyInfo however +it uses PKCS#5 v1.5 or PKCS#12 encryption algorithms instead. The algorithm +to use is specified in the \fBnid\fR parameter and should be the \s-1NID\s0 of the +corresponding \s-1OBJECT IDENTIFIER\s0 (see \s-1NOTES\s0 section). +.PP +The \fB\s-1PUBKEY\s0\fR functions process a public key using an \s-1EVP_PKEY\s0 +structure. The public key is encoded as a SubjectPublicKeyInfo +structure. +.PP +The \fBRSAPrivateKey\fR functions process an \s-1RSA\s0 private key using an +\&\s-1RSA\s0 structure. The write routines uses traditional format. The read +routines handles the same formats as the \fBPrivateKey\fR +functions but an error occurs if the private key is not \s-1RSA.\s0 +.PP +The \fBRSAPublicKey\fR functions process an \s-1RSA\s0 public key using an +\&\s-1RSA\s0 structure. The public key is encoded using a PKCS#1 RSAPublicKey +structure. +.PP +The \fB\s-1RSA_PUBKEY\s0\fR functions also process an \s-1RSA\s0 public key using +an \s-1RSA\s0 structure. However the public key is encoded using a +SubjectPublicKeyInfo structure and an error occurs if the public +key is not \s-1RSA.\s0 +.PP +The \fBDSAPrivateKey\fR functions process a \s-1DSA\s0 private key using a +\&\s-1DSA\s0 structure. The write routines uses traditional format. The read +routines handles the same formats as the \fBPrivateKey\fR +functions but an error occurs if the private key is not \s-1DSA.\s0 +.PP +The \fB\s-1DSA_PUBKEY\s0\fR functions process a \s-1DSA\s0 public key using +a \s-1DSA\s0 structure. The public key is encoded using a +SubjectPublicKeyInfo structure and an error occurs if the public +key is not \s-1DSA.\s0 +.PP +The \fBParameters\fR functions read or write key parameters in \s-1PEM\s0 format using +an \s-1EVP_PKEY\s0 structure. The encoding depends on the type of key; for \s-1DSA\s0 key +parameters, it will be a Dss-Parms structure as defined in \s-1RFC2459,\s0 and for \s-1DH\s0 +key parameters, it will be a PKCS#3 DHparameter structure. \fIThese functions +only exist for the \f(BI\s-1BIO\s0\fI type\fR. +.PP +The \fBDSAparams\fR functions process \s-1DSA\s0 parameters using a \s-1DSA\s0 +structure. The parameters are encoded using a Dss-Parms structure +as defined in \s-1RFC2459.\s0 +.PP +The \fBDHparams\fR functions process \s-1DH\s0 parameters using a \s-1DH\s0 +structure. The parameters are encoded using a PKCS#3 DHparameter +structure. +.PP +The \fBX509\fR functions process an X509 certificate using an X509 +structure. They will also process a trusted X509 certificate but +any trust settings are discarded. +.PP +The \fBX509_AUX\fR functions process a trusted X509 certificate using +an X509 structure. +.PP +The \fBX509_REQ\fR and \fBX509_REQ_NEW\fR functions process a PKCS#10 +certificate request using an X509_REQ structure. The \fBX509_REQ\fR +write functions use \fB\s-1CERTIFICATE REQUEST\s0\fR in the header whereas +the \fBX509_REQ_NEW\fR functions use \fB\s-1NEW CERTIFICATE REQUEST\s0\fR +(as required by some CAs). The \fBX509_REQ\fR read functions will +handle either form so there are no \fBX509_REQ_NEW\fR read functions. +.PP +The \fBX509_CRL\fR functions process an X509 \s-1CRL\s0 using an X509_CRL +structure. +.PP +The \fB\s-1PKCS7\s0\fR functions process a PKCS#7 ContentInfo using a \s-1PKCS7\s0 +structure. +.SH "PEM FUNCTION ARGUMENTS" +.IX Header "PEM FUNCTION ARGUMENTS" +The \s-1PEM\s0 functions have many common arguments. +.PP +The \fBbp\fR \s-1BIO\s0 parameter (if present) specifies the \s-1BIO\s0 to read from +or write to. +.PP +The \fBfp\fR \s-1FILE\s0 parameter (if present) specifies the \s-1FILE\s0 pointer to +read from or write to. +.PP +The \s-1PEM\s0 read functions all take an argument \fB\s-1TYPE\s0 **x\fR and return +a \fB\s-1TYPE\s0 *\fR pointer. Where \fB\s-1TYPE\s0\fR is whatever structure the function +uses. If \fBx\fR is \s-1NULL\s0 then the parameter is ignored. If \fBx\fR is not +\&\s-1NULL\s0 but \fB*x\fR is \s-1NULL\s0 then the structure returned will be written +to \fB*x\fR. If neither \fBx\fR nor \fB*x\fR is \s-1NULL\s0 then an attempt is made +to reuse the structure at \fB*x\fR (but see \s-1BUGS\s0 and \s-1EXAMPLES\s0 sections). +Irrespective of the value of \fBx\fR a pointer to the structure is always +returned (or \s-1NULL\s0 if an error occurred). +.PP +The \s-1PEM\s0 functions which write private keys take an \fBenc\fR parameter +which specifies the encryption algorithm to use, encryption is done +at the \s-1PEM\s0 level. If this parameter is set to \s-1NULL\s0 then the private +key is written in unencrypted form. +.PP +The \fBcb\fR argument is the callback to use when querying for the pass +phrase used for encrypted \s-1PEM\s0 structures (normally only private keys). +.PP +For the \s-1PEM\s0 write routines if the \fBkstr\fR parameter is not \s-1NULL\s0 then +\&\fBklen\fR bytes at \fBkstr\fR are used as the passphrase and \fBcb\fR is +ignored. +.PP +If the \fBcb\fR parameters is set to \s-1NULL\s0 and the \fBu\fR parameter is not +\&\s-1NULL\s0 then the \fBu\fR parameter is interpreted as a null terminated string +to use as the passphrase. If both \fBcb\fR and \fBu\fR are \s-1NULL\s0 then the +default callback routine is used which will typically prompt for the +passphrase on the current terminal with echoing turned off. +.PP +The default passphrase callback is sometimes inappropriate (for example +in a \s-1GUI\s0 application) so an alternative can be supplied. The callback +routine has the following form: +.PP +.Vb 1 +\& int cb(char *buf, int size, int rwflag, void *u); +.Ve +.PP +\&\fBbuf\fR is the buffer to write the passphrase to. \fBsize\fR is the maximum +length of the passphrase (i.e. the size of buf). \fBrwflag\fR is a flag +which is set to 0 when reading and 1 when writing. A typical routine +will ask the user to verify the passphrase (for example by prompting +for it twice) if \fBrwflag\fR is 1. The \fBu\fR parameter has the same +value as the \fBu\fR parameter passed to the \s-1PEM\s0 routine. It allows +arbitrary data to be passed to the callback by the application +(for example a window handle in a \s-1GUI\s0 application). The callback +\&\fBmust\fR return the number of characters in the passphrase or \-1 if +an error occurred. +.SH "NOTES" +.IX Header "NOTES" +The old \fBPrivateKey\fR write routines are retained for compatibility. +New applications should write private keys using the +\&\fBPEM_write_bio_PKCS8PrivateKey()\fR or \fBPEM_write_PKCS8PrivateKey()\fR routines +because they are more secure (they use an iteration count of 2048 whereas +the traditional routines use a count of 1) unless compatibility with older +versions of OpenSSL is important. +.PP +The \fBPrivateKey\fR read routines can be used in all applications because +they handle all formats transparently. +.PP +A frequent cause of problems is attempting to use the \s-1PEM\s0 routines like +this: +.PP +.Vb 1 +\& X509 *x; +\& +\& PEM_read_bio_X509(bp, &x, 0, NULL); +.Ve +.PP +this is a bug because an attempt will be made to reuse the data at \fBx\fR +which is an uninitialised pointer. +.PP +These functions make no assumption regarding the pass phrase received from the +password callback. +It will simply be treated as a byte sequence. +.SH "PEM ENCRYPTION FORMAT" +.IX Header "PEM ENCRYPTION FORMAT" +These old \fBPrivateKey\fR routines use a non standard technique for encryption. +.PP +The private key (or other data) takes the following form: +.PP +.Vb 3 +\& \-\-\-\-\-BEGIN RSA PRIVATE KEY\-\-\-\-\- +\& Proc\-Type: 4,ENCRYPTED +\& DEK\-Info: DES\-EDE3\-CBC,3F17F5316E2BAC89 +\& +\& ...base64 encoded data... +\& \-\-\-\-\-END RSA PRIVATE KEY\-\-\-\-\- +.Ve +.PP +The line beginning with \fIProc-Type\fR contains the version and the +protection on the encapsulated data. The line beginning \fIDEK-Info\fR +contains two comma separated values: the encryption algorithm name as +used by \fBEVP_get_cipherbyname()\fR and an initialization vector used by the +cipher encoded as a set of hexadecimal digits. After those two lines is +the base64\-encoded encrypted data. +.PP +The encryption key is derived using \fBEVP_BytesToKey()\fR. The cipher's +initialization vector is passed to \fBEVP_BytesToKey()\fR as the \fBsalt\fR +parameter. Internally, \fB\s-1PKCS5_SALT_LEN\s0\fR bytes of the salt are used +(regardless of the size of the initialization vector). The user's +password is passed to \fBEVP_BytesToKey()\fR using the \fBdata\fR and \fBdatal\fR +parameters. Finally, the library uses an iteration count of 1 for +\&\fBEVP_BytesToKey()\fR. +.PP +The \fBkey\fR derived by \fBEVP_BytesToKey()\fR along with the original initialization +vector is then used to decrypt the encrypted data. The \fBiv\fR produced by +\&\fBEVP_BytesToKey()\fR is not utilized or needed, and \s-1NULL\s0 should be passed to +the function. +.PP +The pseudo code to derive the key would look similar to: +.PP +.Vb 2 +\& EVP_CIPHER* cipher = EVP_des_ede3_cbc(); +\& EVP_MD* md = EVP_md5(); +\& +\& unsigned int nkey = EVP_CIPHER_key_length(cipher); +\& unsigned int niv = EVP_CIPHER_iv_length(cipher); +\& unsigned char key[nkey]; +\& unsigned char iv[niv]; +\& +\& memcpy(iv, HexToBin("3F17F5316E2BAC89"), niv); +\& rc = EVP_BytesToKey(cipher, md, iv /*salt*/, pword, plen, 1, key, NULL /*iv*/); +\& if (rc != nkey) +\& /* Error */ +\& +\& /* On success, use key and iv to initialize the cipher */ +.Ve +.SH "BUGS" +.IX Header "BUGS" +The \s-1PEM\s0 read routines in some versions of OpenSSL will not correctly reuse +an existing structure. Therefore the following: +.PP +.Vb 1 +\& PEM_read_bio_X509(bp, &x, 0, NULL); +.Ve +.PP +where \fBx\fR already contains a valid certificate, may not work, whereas: +.PP +.Vb 2 +\& X509_free(x); +\& x = PEM_read_bio_X509(bp, NULL, 0, NULL); +.Ve +.PP +is guaranteed to work. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +The read routines return either a pointer to the structure read or \s-1NULL\s0 +if an error occurred. +.PP +The write routines return 1 for success or 0 for failure. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +Although the \s-1PEM\s0 routines take several arguments in almost all applications +most of them are set to 0 or \s-1NULL.\s0 +.PP +Read a certificate in \s-1PEM\s0 format from a \s-1BIO:\s0 +.PP +.Vb 1 +\& X509 *x; +\& +\& x = PEM_read_bio_X509(bp, NULL, 0, NULL); +\& if (x == NULL) +\& /* Error */ +.Ve +.PP +Alternative method: +.PP +.Vb 1 +\& X509 *x = NULL; +\& +\& if (!PEM_read_bio_X509(bp, &x, 0, NULL)) +\& /* Error */ +.Ve +.PP +Write a certificate to a \s-1BIO:\s0 +.PP +.Vb 2 +\& if (!PEM_write_bio_X509(bp, x)) +\& /* Error */ +.Ve +.PP +Write a private key (using traditional format) to a \s-1BIO\s0 using +triple \s-1DES\s0 encryption, the pass phrase is prompted for: +.PP +.Vb 2 +\& if (!PEM_write_bio_PrivateKey(bp, key, EVP_des_ede3_cbc(), NULL, 0, 0, NULL)) +\& /* Error */ +.Ve +.PP +Write a private key (using PKCS#8 format) to a \s-1BIO\s0 using triple +\&\s-1DES\s0 encryption, using the pass phrase \*(L"hello\*(R": +.PP +.Vb 3 +\& if (!PEM_write_bio_PKCS8PrivateKey(bp, key, EVP_des_ede3_cbc(), +\& NULL, 0, 0, "hello")) +\& /* Error */ +.Ve +.PP +Read a private key from a \s-1BIO\s0 using a pass phrase callback: +.PP +.Vb 3 +\& key = PEM_read_bio_PrivateKey(bp, NULL, pass_cb, "My Private Key"); +\& if (key == NULL) +\& /* Error */ +.Ve +.PP +Skeleton pass phrase callback: +.PP +.Vb 2 +\& int pass_cb(char *buf, int size, int rwflag, void *u) +\& { +\& +\& /* We\*(Aqd probably do something else if \*(Aqrwflag\*(Aq is 1 */ +\& printf("Enter pass phrase for \e"%s\e"\en", (char *)u); +\& +\& /* get pass phrase, length \*(Aqlen\*(Aq into \*(Aqtmp\*(Aq */ +\& char *tmp = "hello"; +\& if (tmp == NULL) /* An error occurred */ +\& return \-1; +\& +\& size_t len = strlen(tmp); +\& +\& if (len > size) +\& len = size; +\& memcpy(buf, tmp, len); +\& return len; +\& } +.Ve +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBEVP_EncryptInit\fR\|(3), \fBEVP_BytesToKey\fR\|(3), +\&\fBpassphrase\-encoding\fR\|(7) +.SH "HISTORY" +.IX Header "HISTORY" +The old Netscape certificate sequences were no longer documented +in OpenSSL 1.1.0; applications should use the \s-1PKCS7\s0 standard instead +as they will be formally deprecated in a future releases. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2001\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/PEM_read_bio_ex.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/PEM_read_bio_ex.3 new file mode 100644 index 00000000..759bf7d7 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/PEM_read_bio_ex.3 @@ -0,0 +1,199 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "PEM_READ_BIO_EX 3" +.TH PEM_READ_BIO_EX 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +PEM_read_bio_ex, PEM_FLAG_SECURE, PEM_FLAG_EAY_COMPATIBLE, PEM_FLAG_ONLY_B64 \- read PEM format files with custom processing +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& #define PEM_FLAG_SECURE 0x1 +\& #define PEM_FLAG_EAY_COMPATIBLE 0x2 +\& #define PEM_FLAG_ONLY_B64 0x4 +\& int PEM_read_bio_ex(BIO *in, char **name, char **header, +\& unsigned char **data, long *len, unsigned int flags); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBPEM_read_bio_ex()\fR reads in \s-1PEM\s0 formatted data from an input \s-1BIO,\s0 outputting +the name of the type of contained data, the header information regarding +the possibly encrypted data, and the binary data payload (after base64 decoding). +It should generally only be used to implement PEM_read_bio_\-family functions +for specific data types or other usage, but is exposed to allow greater flexibility +over how processing is performed, if needed. +.PP +If \s-1PEM_FLAG_SECURE\s0 is set, the intermediate buffers used to read in lines of +input are allocated from the secure heap. +.PP +If \s-1PEM_FLAG_EAY_COMPATIBLE\s0 is set, a simple algorithm is used to remove whitespace +and control characters from the end of each line, so as to be compatible with +the historical behavior of \fBPEM_read_bio()\fR. +.PP +If \s-1PEM_FLAG_ONLY_B64\s0 is set, all characters are required to be valid base64 +characters (or newlines); non\-base64 characters are treated as end of input. +.PP +If neither \s-1PEM_FLAG_EAY_COMPATIBLE\s0 or \s-1PEM_FLAG_ONLY_B64\s0 is set, control characters +are ignored. +.PP +If both \s-1PEM_FLAG_EAY_COMPATIBLE\s0 and \s-1PEM_FLAG_ONLY_B64\s0 are set, an error is returned; +these options are not compatible with each other. +.SH "NOTES" +.IX Header "NOTES" +The caller must release the storage allocated for *name, *header, and *data. +If \s-1PEM_FLAG_SECURE\s0 was set, use \fBOPENSSL_secure_free()\fR; otherwise, +\&\fBOPENSSL_free()\fR is used. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBPEM_read_bio_ex()\fR returns 1 for success or 0 for failure. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBPEM_bytes_read_bio\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +The \fBPEM_read_bio_ex()\fR function was added in OpenSSL 1.1.1. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/PEM_write_bio_CMS_stream.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/PEM_write_bio_CMS_stream.3 new file mode 100644 index 00000000..43f9bb24 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/PEM_write_bio_CMS_stream.3 @@ -0,0 +1,180 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "PEM_WRITE_BIO_CMS_STREAM 3" +.TH PEM_WRITE_BIO_CMS_STREAM 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +PEM_write_bio_CMS_stream \- output CMS_ContentInfo structure in PEM format +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int PEM_write_bio_CMS_stream(BIO *out, CMS_ContentInfo *cms, BIO *data, int flags); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBPEM_write_bio_CMS_stream()\fR outputs a CMS_ContentInfo structure in \s-1PEM\s0 format. +.PP +It is otherwise identical to the function \fBSMIME_write_CMS()\fR. +.SH "NOTES" +.IX Header "NOTES" +This function is effectively a version of the \fBPEM_write_bio_CMS()\fR supporting +streaming. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBPEM_write_bio_CMS_stream()\fR returns 1 for success or 0 for failure. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_get_error\fR\|(3), \fBCMS_sign\fR\|(3), +\&\fBCMS_verify\fR\|(3), \fBCMS_encrypt\fR\|(3) +\&\fBCMS_decrypt\fR\|(3), +\&\fBPEM_write\fR\|(3), +\&\fBSMIME_write_CMS\fR\|(3), +\&\fBi2d_CMS_bio_stream\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +The \fBPEM_write_bio_CMS_stream()\fR function was added in OpenSSL 1.0.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2008\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/PEM_write_bio_PKCS7_stream.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/PEM_write_bio_PKCS7_stream.3 new file mode 100644 index 00000000..d09ac382 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/PEM_write_bio_PKCS7_stream.3 @@ -0,0 +1,179 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "PEM_WRITE_BIO_PKCS7_STREAM 3" +.TH PEM_WRITE_BIO_PKCS7_STREAM 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +PEM_write_bio_PKCS7_stream \- output PKCS7 structure in PEM format +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int PEM_write_bio_PKCS7_stream(BIO *out, PKCS7 *p7, BIO *data, int flags); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBPEM_write_bio_PKCS7_stream()\fR outputs a \s-1PKCS7\s0 structure in \s-1PEM\s0 format. +.PP +It is otherwise identical to the function \fBSMIME_write_PKCS7()\fR. +.SH "NOTES" +.IX Header "NOTES" +This function is effectively a version of the \fBPEM_write_bio_PKCS7()\fR supporting +streaming. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBPEM_write_bio_PKCS7_stream()\fR returns 1 for success or 0 for failure. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_get_error\fR\|(3), \fBPKCS7_sign\fR\|(3), +\&\fBPKCS7_verify\fR\|(3), \fBPKCS7_encrypt\fR\|(3) +\&\fBPKCS7_decrypt\fR\|(3), +\&\fBSMIME_write_PKCS7\fR\|(3), +\&\fBi2d_PKCS7_bio_stream\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +The \fBPEM_write_bio_PKCS7_stream()\fR function was added in OpenSSL 1.0.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2007\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/PKCS12_create.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/PKCS12_create.3 new file mode 100644 index 00000000..0c1d700b --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/PKCS12_create.3 @@ -0,0 +1,217 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "PKCS12_CREATE 3" +.TH PKCS12_CREATE 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +PKCS12_create \- create a PKCS#12 structure +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& PKCS12 *PKCS12_create(const char *pass, const char *name, EVP_PKEY *pkey, +\& X509 *cert, STACK_OF(X509) *ca, +\& int nid_key, int nid_cert, int iter, int mac_iter, int keytype); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBPKCS12_create()\fR creates a PKCS#12 structure. +.PP +\&\fBpass\fR is the passphrase to use. \fBname\fR is the \fBfriendlyName\fR to use for +the supplied certificate and key. \fBpkey\fR is the private key to include in +the structure and \fBcert\fR its corresponding certificates. \fBca\fR, if not \fB\s-1NULL\s0\fR +is an optional set of certificates to also include in the structure. +.PP +\&\fBnid_key\fR and \fBnid_cert\fR are the encryption algorithms that should be used +for the key and certificate respectively. The modes +\&\s-1GCM, CCM, XTS,\s0 and \s-1OCB\s0 are unsupported. \fBiter\fR is the encryption algorithm +iteration count to use and \fBmac_iter\fR is the \s-1MAC\s0 iteration count to use. +\&\fBkeytype\fR is the type of key. +.SH "NOTES" +.IX Header "NOTES" +The parameters \fBnid_key\fR, \fBnid_cert\fR, \fBiter\fR, \fBmac_iter\fR and \fBkeytype\fR +can all be set to zero and sensible defaults will be used. +.PP +These defaults are: 40 bit \s-1RC2\s0 encryption for certificates, triple \s-1DES\s0 +encryption for private keys, a key iteration count of \s-1PKCS12_DEFAULT_ITER\s0 +(currently 2048) and a \s-1MAC\s0 iteration count of 1. +.PP +The default \s-1MAC\s0 iteration count is 1 in order to retain compatibility with +old software which did not interpret \s-1MAC\s0 iteration counts. If such compatibility +is not required then \fBmac_iter\fR should be set to \s-1PKCS12_DEFAULT_ITER.\s0 +.PP +\&\fBkeytype\fR adds a flag to the store private key. This is a non standard extension +that is only currently interpreted by \s-1MSIE.\s0 If set to zero the flag is omitted, +if set to \fB\s-1KEY_SIG\s0\fR the key can be used for signing only, if set to \fB\s-1KEY_EX\s0\fR +it can be used for signing and encryption. This option was useful for old +export grade software which could use signing only keys of arbitrary size but +had restrictions on the permissible sizes of keys which could be used for +encryption. +.PP +If a certificate contains an \fBalias\fR or \fBkeyid\fR then this will be +used for the corresponding \fBfriendlyName\fR or \fBlocalKeyID\fR in the +\&\s-1PKCS12\s0 structure. +.PP +Either \fBpkey\fR, \fBcert\fR or both can be \fB\s-1NULL\s0\fR to indicate that no key or +certificate is required. In previous versions both had to be present or +a fatal error is returned. +.PP +\&\fBnid_key\fR or \fBnid_cert\fR can be set to \-1 indicating that no encryption +should be used. +.PP +\&\fBmac_iter\fR can be set to \-1 and the \s-1MAC\s0 will then be omitted entirely. +.PP +\&\fBPKCS12_create()\fR makes assumptions regarding the encoding of the given pass +phrase. +See \fBpassphrase\-encoding\fR\|(7) for more information. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBPKCS12_create()\fR returns a valid \fB\s-1PKCS12\s0\fR structure or \s-1NULL\s0 if an error occurred. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBd2i_PKCS12\fR\|(3), +\&\fBpassphrase\-encoding\fR\|(7) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2002\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/PKCS12_newpass.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/PKCS12_newpass.3 new file mode 100644 index 00000000..2206b422 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/PKCS12_newpass.3 @@ -0,0 +1,246 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "PKCS12_NEWPASS 3" +.TH PKCS12_NEWPASS 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +PKCS12_newpass \- change the password of a PKCS12 structure +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int PKCS12_newpass(PKCS12 *p12, const char *oldpass, const char *newpass); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBPKCS12_newpass()\fR changes the password of a \s-1PKCS12\s0 structure. +.PP +\&\fBp12\fR is a pointer to a \s-1PKCS12\s0 structure. \fBoldpass\fR is the existing password +and \fBnewpass\fR is the new password. +.SH "NOTES" +.IX Header "NOTES" +Each of \fBoldpass\fR and \fBnewpass\fR is independently interpreted as a string in +the \s-1UTF\-8\s0 encoding. If it is not valid \s-1UTF\-8,\s0 it is assumed to be \s-1ISO8859\-1\s0 +instead. +.PP +In particular, this means that passwords in the locale character set +(or code page on Windows) must potentially be converted to \s-1UTF\-8\s0 before +use. This may include passwords from local text files, or input from +the terminal or command line. Refer to the documentation of +\&\fBUI_OpenSSL\fR\|(3), for example. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBPKCS12_newpass()\fR returns 1 on success or 0 on failure. Applications can +retrieve the most recent error from \fBPKCS12_newpass()\fR with \fBERR_get_error()\fR. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +This example loads a PKCS#12 file, changes its password and writes out +the result to a new file. +.PP +.Vb 5 +\& #include +\& #include +\& #include +\& #include +\& #include +\& +\& int main(int argc, char **argv) +\& { +\& FILE *fp; +\& PKCS12 *p12; +\& +\& if (argc != 5) { +\& fprintf(stderr, "Usage: pkread p12file password newpass opfile\en"); +\& return 1; +\& } +\& if ((fp = fopen(argv[1], "rb")) == NULL) { +\& fprintf(stderr, "Error opening file %s\en", argv[1]); +\& return 1; +\& } +\& p12 = d2i_PKCS12_fp(fp, NULL); +\& fclose(fp); +\& if (p12 == NULL) { +\& fprintf(stderr, "Error reading PKCS#12 file\en"); +\& ERR_print_errors_fp(stderr); +\& return 1; +\& } +\& if (PKCS12_newpass(p12, argv[2], argv[3]) == 0) { +\& fprintf(stderr, "Error changing password\en"); +\& ERR_print_errors_fp(stderr); +\& PKCS12_free(p12); +\& return 1; +\& } +\& if ((fp = fopen(argv[4], "wb")) == NULL) { +\& fprintf(stderr, "Error opening file %s\en", argv[4]); +\& PKCS12_free(p12); +\& return 1; +\& } +\& i2d_PKCS12_fp(fp, p12); +\& PKCS12_free(p12); +\& fclose(fp); +\& return 0; +\& } +.Ve +.SH "NOTES" +.IX Header "NOTES" +If the PKCS#12 structure does not have a password, then you must use the empty +string "" for \fBoldpass\fR. Using \s-1NULL\s0 for \fBoldpass\fR will result in a +\&\fBPKCS12_newpass()\fR failure. +.PP +If the wrong password is used for \fBoldpass\fR then the function will fail, +with a \s-1MAC\s0 verification error. In rare cases the \s-1PKCS12\s0 structure does not +contain a \s-1MAC:\s0 in this case it will usually fail with a decryption padding +error. +.SH "BUGS" +.IX Header "BUGS" +The password format is a \s-1NULL\s0 terminated \s-1ASCII\s0 string which is converted to +Unicode form internally. As a result some passwords cannot be supplied to +this function. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBPKCS12_create\fR\|(3), \fBERR_get_error\fR\|(3), +\&\fBpassphrase\-encoding\fR\|(7) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2016\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/PKCS12_parse.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/PKCS12_parse.3 new file mode 100644 index 00000000..2d8e8ae8 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/PKCS12_parse.3 @@ -0,0 +1,203 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "PKCS12_PARSE 3" +.TH PKCS12_PARSE 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +PKCS12_parse \- parse a PKCS#12 structure +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int PKCS12_parse(PKCS12 *p12, const char *pass, EVP_PKEY **pkey, X509 **cert, +\& STACK_OF(X509) **ca); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBPKCS12_parse()\fR parses a \s-1PKCS12\s0 structure. +.PP +\&\fBp12\fR is the \fB\s-1PKCS12\s0\fR structure to parse. \fBpass\fR is the passphrase to use. +If successful the private key will be written to \fB*pkey\fR, the corresponding +certificate to \fB*cert\fR and any additional certificates to \fB*ca\fR. +.SH "NOTES" +.IX Header "NOTES" +The parameters \fBpkey\fR and \fBcert\fR cannot be \fB\s-1NULL\s0\fR. \fBca\fR can be <\s-1NULL\s0> in +which case additional certificates will be discarded. \fB*ca\fR can also be a +valid \s-1STACK\s0 in which case additional certificates are appended to \fB*ca\fR. If +\&\fB*ca\fR is \fB\s-1NULL\s0\fR a new \s-1STACK\s0 will be allocated. +.PP +The \fBfriendlyName\fR and \fBlocalKeyID\fR attributes (if present) on each +certificate will be stored in the \fBalias\fR and \fBkeyid\fR attributes of the +\&\fBX509\fR structure. +.PP +The parameter \fBpass\fR is interpreted as a string in the \s-1UTF\-8\s0 encoding. If it +is not valid \s-1UTF\-8,\s0 then it is assumed to be \s-1ISO8859\-1\s0 instead. +.PP +In particular, this means that passwords in the locale character set +(or code page on Windows) must potentially be converted to \s-1UTF\-8\s0 before +use. This may include passwords from local text files, or input from +the terminal or command line. Refer to the documentation of +\&\fBUI_OpenSSL\fR\|(3), for example. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBPKCS12_parse()\fR returns 1 for success and zero if an error occurred. +.PP +The error can be obtained from \fBERR_get_error\fR\|(3) +.SH "BUGS" +.IX Header "BUGS" +Only a single private key and corresponding certificate is returned by this +function. More complex PKCS#12 files with multiple private keys will only +return the first match. +.PP +Only \fBfriendlyName\fR and \fBlocalKeyID\fR attributes are currently stored in +certificates. Other attributes are discarded. +.PP +Attributes currently cannot be stored in the private key \fB\s-1EVP_PKEY\s0\fR structure. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBd2i_PKCS12\fR\|(3), +\&\fBpassphrase\-encoding\fR\|(7) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2002\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/PKCS5_PBKDF2_HMAC.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/PKCS5_PBKDF2_HMAC.3 new file mode 100644 index 00000000..5c80f624 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/PKCS5_PBKDF2_HMAC.3 @@ -0,0 +1,208 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "PKCS5_PBKDF2_HMAC 3" +.TH PKCS5_PBKDF2_HMAC 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +PKCS5_PBKDF2_HMAC, PKCS5_PBKDF2_HMAC_SHA1 \- password based derivation routines with salt and iteration count +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int PKCS5_PBKDF2_HMAC(const char *pass, int passlen, +\& const unsigned char *salt, int saltlen, int iter, +\& const EVP_MD *digest, +\& int keylen, unsigned char *out); +\& +\& int PKCS5_PBKDF2_HMAC_SHA1(const char *pass, int passlen, +\& const unsigned char *salt, int saltlen, int iter, +\& int keylen, unsigned char *out); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\s-1\fBPKCS5_PBKDF2_HMAC\s0()\fR derives a key from a password using a salt and iteration count +as specified in \s-1RFC 2898.\s0 +.PP +\&\fBpass\fR is the password used in the derivation of length \fBpasslen\fR. \fBpass\fR +is an optional parameter and can be \s-1NULL.\s0 If \fBpasslen\fR is \-1, then the +function will calculate the length of \fBpass\fR using \fBstrlen()\fR. +.PP +\&\fBsalt\fR is the salt used in the derivation of length \fBsaltlen\fR. If the +\&\fBsalt\fR is \s-1NULL,\s0 then \fBsaltlen\fR must be 0. The function will not +attempt to calculate the length of the \fBsalt\fR because it is not assumed to +be \s-1NULL\s0 terminated. +.PP +\&\fBiter\fR is the iteration count and its value should be greater than or +equal to 1. \s-1RFC 2898\s0 suggests an iteration count of at least 1000. Any +\&\fBiter\fR less than 1 is treated as a single iteration. +.PP +\&\fBdigest\fR is the message digest function used in the derivation. Values include +any of the EVP_* message digests. \s-1\fBPKCS5_PBKDF2_HMAC_SHA1\s0()\fR calls +\&\s-1\fBPKCS5_PBKDF2_HMAC\s0()\fR with \fBEVP_sha1()\fR. +.PP +The derived key will be written to \fBout\fR. The size of the \fBout\fR buffer +is specified via \fBkeylen\fR. +.SH "NOTES" +.IX Header "NOTES" +A typical application of this function is to derive keying material for an +encryption algorithm from a password in the \fBpass\fR, a salt in \fBsalt\fR, +and an iteration count. +.PP +Increasing the \fBiter\fR parameter slows down the algorithm which makes it +harder for an attacker to perform a brute force attack using a large number +of candidate passwords. +.PP +These functions make no assumption regarding the given password. +It will simply be treated as a byte sequence. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\s-1\fBPKCS5_PBKDF2_HMAC\s0()\fR and \s-1\fBPBKCS5_PBKDF2_HMAC_SHA1\s0()\fR return 1 on success or 0 on error. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBevp\fR\|(7), \fBRAND_bytes\fR\|(3), +\&\fBEVP_BytesToKey\fR\|(3), +\&\fBpassphrase\-encoding\fR\|(7) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2014\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/PKCS7_decrypt.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/PKCS7_decrypt.3 new file mode 100644 index 00000000..365a0a62 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/PKCS7_decrypt.3 @@ -0,0 +1,187 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "PKCS7_DECRYPT 3" +.TH PKCS7_DECRYPT 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +PKCS7_decrypt \- decrypt content from a PKCS#7 envelopedData structure +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int PKCS7_decrypt(PKCS7 *p7, EVP_PKEY *pkey, X509 *cert, BIO *data, int flags); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBPKCS7_decrypt()\fR extracts and decrypts the content from a PKCS#7 envelopedData +structure. \fBpkey\fR is the private key of the recipient, \fBcert\fR is the +recipients certificate, \fBdata\fR is a \s-1BIO\s0 to write the content to and +\&\fBflags\fR is an optional set of flags. +.SH "NOTES" +.IX Header "NOTES" +Although the recipients certificate is not needed to decrypt the data it is needed +to locate the appropriate (of possible several) recipients in the PKCS#7 structure. +.PP +The following flags can be passed in the \fBflags\fR parameter. +.PP +If the \fB\s-1PKCS7_TEXT\s0\fR flag is set \s-1MIME\s0 headers for type \fBtext/plain\fR are deleted +from the content. If the content is not of type \fBtext/plain\fR then an error is +returned. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBPKCS7_decrypt()\fR returns either 1 for success or 0 for failure. +The error can be obtained from \fBERR_get_error\fR\|(3) +.SH "BUGS" +.IX Header "BUGS" +\&\fBPKCS7_decrypt()\fR must be passed the correct recipient key and certificate. It would +be better if it could look up the correct key and certificate from a database. +.PP +The lack of single pass processing and need to hold all data in memory as +mentioned in \fBPKCS7_sign()\fR also applies to \fBPKCS7_verify()\fR. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_get_error\fR\|(3), \fBPKCS7_encrypt\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2002\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/PKCS7_encrypt.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/PKCS7_encrypt.3 new file mode 100644 index 00000000..dadf4b2c --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/PKCS7_encrypt.3 @@ -0,0 +1,218 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "PKCS7_ENCRYPT 3" +.TH PKCS7_ENCRYPT 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +PKCS7_encrypt \- create a PKCS#7 envelopedData structure +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& PKCS7 *PKCS7_encrypt(STACK_OF(X509) *certs, BIO *in, const EVP_CIPHER *cipher, +\& int flags); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBPKCS7_encrypt()\fR creates and returns a PKCS#7 envelopedData structure. \fBcerts\fR +is a list of recipient certificates. \fBin\fR is the content to be encrypted. +\&\fBcipher\fR is the symmetric cipher to use. \fBflags\fR is an optional set of flags. +.SH "NOTES" +.IX Header "NOTES" +Only \s-1RSA\s0 keys are supported in PKCS#7 and envelopedData so the recipient +certificates supplied to this function must all contain \s-1RSA\s0 public keys, though +they do not have to be signed using the \s-1RSA\s0 algorithm. +.PP +\&\fBEVP_des_ede3_cbc()\fR (triple \s-1DES\s0) is the algorithm of choice for S/MIME use +because most clients will support it. +.PP +Some old \*(L"export grade\*(R" clients may only support weak encryption using 40 or 64 +bit \s-1RC2.\s0 These can be used by passing \fBEVP_rc2_40_cbc()\fR and \fBEVP_rc2_64_cbc()\fR +respectively. +.PP +The algorithm passed in the \fBcipher\fR parameter must support \s-1ASN1\s0 encoding of +its parameters. +.PP +Many browsers implement a \*(L"sign and encrypt\*(R" option which is simply an S/MIME +envelopedData containing an S/MIME signed message. This can be readily produced +by storing the S/MIME signed message in a memory \s-1BIO\s0 and passing it to +\&\fBPKCS7_encrypt()\fR. +.PP +The following flags can be passed in the \fBflags\fR parameter. +.PP +If the \fB\s-1PKCS7_TEXT\s0\fR flag is set \s-1MIME\s0 headers for type \fBtext/plain\fR are +prepended to the data. +.PP +Normally the supplied content is translated into \s-1MIME\s0 canonical format (as +required by the S/MIME specifications) if \fB\s-1PKCS7_BINARY\s0\fR is set no translation +occurs. This option should be used if the supplied data is in binary format +otherwise the translation will corrupt it. If \fB\s-1PKCS7_BINARY\s0\fR is set then +\&\fB\s-1PKCS7_TEXT\s0\fR is ignored. +.PP +If the \fB\s-1PKCS7_STREAM\s0\fR flag is set a partial \fB\s-1PKCS7\s0\fR structure is output +suitable for streaming I/O: no data is read from the \s-1BIO\s0 \fBin\fR. +.SH "NOTES" +.IX Header "NOTES" +If the flag \fB\s-1PKCS7_STREAM\s0\fR is set the returned \fB\s-1PKCS7\s0\fR structure is \fBnot\fR +complete and outputting its contents via a function that does not +properly finalize the \fB\s-1PKCS7\s0\fR structure will give unpredictable +results. +.PP +Several functions including \fBSMIME_write_PKCS7()\fR, \fBi2d_PKCS7_bio_stream()\fR, +\&\fBPEM_write_bio_PKCS7_stream()\fR finalize the structure. Alternatively finalization +can be performed by obtaining the streaming \s-1ASN1\s0 \fB\s-1BIO\s0\fR directly using +\&\fBBIO_new_PKCS7()\fR. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBPKCS7_encrypt()\fR returns either a \s-1PKCS7\s0 structure or \s-1NULL\s0 if an error occurred. +The error can be obtained from \fBERR_get_error\fR\|(3). +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_get_error\fR\|(3), \fBPKCS7_decrypt\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +The \fB\s-1PKCS7_STREAM\s0\fR flag was added in OpenSSL 1.0.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2002\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/PKCS7_sign.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/PKCS7_sign.3 new file mode 100644 index 00000000..a94d19b3 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/PKCS7_sign.3 @@ -0,0 +1,252 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "PKCS7_SIGN 3" +.TH PKCS7_SIGN 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +PKCS7_sign \- create a PKCS#7 signedData structure +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& PKCS7 *PKCS7_sign(X509 *signcert, EVP_PKEY *pkey, STACK_OF(X509) *certs, +\& BIO *data, int flags); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBPKCS7_sign()\fR creates and returns a PKCS#7 signedData structure. \fBsigncert\fR is +the certificate to sign with, \fBpkey\fR is the corresponding private key. +\&\fBcerts\fR is an optional additional set of certificates to include in the PKCS#7 +structure (for example any intermediate CAs in the chain). +.PP +The data to be signed is read from \s-1BIO\s0 \fBdata\fR. +.PP +\&\fBflags\fR is an optional set of flags. +.SH "NOTES" +.IX Header "NOTES" +Any of the following flags (ored together) can be passed in the \fBflags\fR +parameter. +.PP +Many S/MIME clients expect the signed content to include valid \s-1MIME\s0 headers. If +the \fB\s-1PKCS7_TEXT\s0\fR flag is set \s-1MIME\s0 headers for type \fBtext/plain\fR are prepended +to the data. +.PP +If \fB\s-1PKCS7_NOCERTS\s0\fR is set the signer's certificate will not be included in the +\&\s-1PKCS7\s0 structure, the signer's certificate must still be supplied in the +\&\fBsigncert\fR parameter though. This can reduce the size of the signature if the +signers certificate can be obtained by other means: for example a previously +signed message. +.PP +The data being signed is included in the \s-1PKCS7\s0 structure, unless +\&\fB\s-1PKCS7_DETACHED\s0\fR is set in which case it is omitted. This is used for \s-1PKCS7\s0 +detached signatures which are used in S/MIME plaintext signed messages for +example. +.PP +Normally the supplied content is translated into \s-1MIME\s0 canonical format (as +required by the S/MIME specifications) if \fB\s-1PKCS7_BINARY\s0\fR is set no translation +occurs. This option should be used if the supplied data is in binary format +otherwise the translation will corrupt it. +.PP +The signedData structure includes several PKCS#7 authenticatedAttributes +including the signing time, the PKCS#7 content type and the supported list of +ciphers in an SMIMECapabilities attribute. If \fB\s-1PKCS7_NOATTR\s0\fR is set then no +authenticatedAttributes will be used. If \fB\s-1PKCS7_NOSMIMECAP\s0\fR is set then just +the SMIMECapabilities are omitted. +.PP +If present the SMIMECapabilities attribute indicates support for the following +algorithms: triple \s-1DES, 128\s0 bit \s-1RC2, 64\s0 bit \s-1RC2, DES\s0 and 40 bit \s-1RC2.\s0 If any of +these algorithms is disabled then it will not be included. +.PP +If the flags \fB\s-1PKCS7_STREAM\s0\fR is set then the returned \fB\s-1PKCS7\s0\fR structure is +just initialized ready to perform the signing operation. The signing is however +\&\fBnot\fR performed and the data to be signed is not read from the \fBdata\fR +parameter. Signing is deferred until after the data has been written. In this +way data can be signed in a single pass. +.PP +If the \fB\s-1PKCS7_PARTIAL\s0\fR flag is set a partial \fB\s-1PKCS7\s0\fR structure is output to +which additional signers and capabilities can be added before finalization. +.SH "NOTES" +.IX Header "NOTES" +If the flag \fB\s-1PKCS7_STREAM\s0\fR is set the returned \fB\s-1PKCS7\s0\fR structure is \fBnot\fR +complete and outputting its contents via a function that does not properly +finalize the \fB\s-1PKCS7\s0\fR structure will give unpredictable results. +.PP +Several functions including \fBSMIME_write_PKCS7()\fR, \fBi2d_PKCS7_bio_stream()\fR, +\&\fBPEM_write_bio_PKCS7_stream()\fR finalize the structure. Alternatively finalization +can be performed by obtaining the streaming \s-1ASN1\s0 \fB\s-1BIO\s0\fR directly using +\&\fBBIO_new_PKCS7()\fR. +.PP +If a signer is specified it will use the default digest for the signing +algorithm. This is \fB\s-1SHA1\s0\fR for both \s-1RSA\s0 and \s-1DSA\s0 keys. +.PP +The \fBcerts\fR, \fBsigncert\fR and \fBpkey\fR parameters can all be +\&\fB\s-1NULL\s0\fR if the \fB\s-1PKCS7_PARTIAL\s0\fR flag is set. One or more signers can be added +using the function \fBPKCS7_sign_add_signer()\fR. \fBPKCS7_final()\fR must also be +called to finalize the structure if streaming is not enabled. Alternative +signing digests can also be specified using this method. +.PP +If \fBsigncert\fR and \fBpkey\fR are \s-1NULL\s0 then a certificates only +PKCS#7 structure is output. +.PP +In versions of OpenSSL before 1.0.0 the \fBsigncert\fR and \fBpkey\fR parameters must +\&\fB\s-1NOT\s0\fR be \s-1NULL.\s0 +.SH "BUGS" +.IX Header "BUGS" +Some advanced attributes such as counter signatures are not supported. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBPKCS7_sign()\fR returns either a valid \s-1PKCS7\s0 structure or \s-1NULL\s0 if an error +occurred. The error can be obtained from \fBERR_get_error\fR\|(3). +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_get_error\fR\|(3), \fBPKCS7_verify\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +The \fB\s-1PKCS7_PARTIAL\s0\fR flag, and the ability for \fBcerts\fR, \fBsigncert\fR, +and \fBpkey\fR parameters to be \fB\s-1NULL\s0\fR were added in OpenSSL 1.0.0. +.PP +The \fB\s-1PKCS7_STREAM\s0\fR flag was added in OpenSSL 1.0.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2002\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/PKCS7_sign_add_signer.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/PKCS7_sign_add_signer.3 new file mode 100644 index 00000000..ce45fd52 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/PKCS7_sign_add_signer.3 @@ -0,0 +1,224 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "PKCS7_SIGN_ADD_SIGNER 3" +.TH PKCS7_SIGN_ADD_SIGNER 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +PKCS7_sign_add_signer \- add a signer PKCS7 signed data structure +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& PKCS7_SIGNER_INFO *PKCS7_sign_add_signer(PKCS7 *p7, X509 *signcert, +\& EVP_PKEY *pkey, const EVP_MD *md, int flags); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBPKCS7_sign_add_signer()\fR adds a signer with certificate \fBsigncert\fR and private +key \fBpkey\fR using message digest \fBmd\fR to a \s-1PKCS7\s0 signed data structure +\&\fBp7\fR. +.PP +The \s-1PKCS7\s0 structure should be obtained from an initial call to \fBPKCS7_sign()\fR +with the flag \fB\s-1PKCS7_PARTIAL\s0\fR set or in the case or re-signing a valid \s-1PKCS7\s0 +signed data structure. +.PP +If the \fBmd\fR parameter is \fB\s-1NULL\s0\fR then the default digest for the public +key algorithm will be used. +.PP +Unless the \fB\s-1PKCS7_REUSE_DIGEST\s0\fR flag is set the returned \s-1PKCS7\s0 structure +is not complete and must be finalized either by streaming (if applicable) or +a call to \fBPKCS7_final()\fR. +.SH "NOTES" +.IX Header "NOTES" +The main purpose of this function is to provide finer control over a PKCS#7 +signed data structure where the simpler \fBPKCS7_sign()\fR function defaults are +not appropriate. For example if multiple signers or non default digest +algorithms are needed. +.PP +Any of the following flags (ored together) can be passed in the \fBflags\fR +parameter. +.PP +If \fB\s-1PKCS7_REUSE_DIGEST\s0\fR is set then an attempt is made to copy the content +digest value from the \s-1PKCS7\s0 structure: to add a signer to an existing structure. +An error occurs if a matching digest value cannot be found to copy. The +returned \s-1PKCS7\s0 structure will be valid and finalized when this flag is set. +.PP +If \fB\s-1PKCS7_PARTIAL\s0\fR is set in addition to \fB\s-1PKCS7_REUSE_DIGEST\s0\fR then the +\&\fB\s-1PKCS7_SIGNER_INO\s0\fR structure will not be finalized so additional attributes +can be added. In this case an explicit call to \fBPKCS7_SIGNER_INFO_sign()\fR is +needed to finalize it. +.PP +If \fB\s-1PKCS7_NOCERTS\s0\fR is set the signer's certificate will not be included in the +\&\s-1PKCS7\s0 structure, the signer's certificate must still be supplied in the +\&\fBsigncert\fR parameter though. This can reduce the size of the signature if the +signers certificate can be obtained by other means: for example a previously +signed message. +.PP +The signedData structure includes several PKCS#7 authenticatedAttributes +including the signing time, the PKCS#7 content type and the supported list of +ciphers in an SMIMECapabilities attribute. If \fB\s-1PKCS7_NOATTR\s0\fR is set then no +authenticatedAttributes will be used. If \fB\s-1PKCS7_NOSMIMECAP\s0\fR is set then just +the SMIMECapabilities are omitted. +.PP +If present the SMIMECapabilities attribute indicates support for the following +algorithms: triple \s-1DES, 128\s0 bit \s-1RC2, 64\s0 bit \s-1RC2, DES\s0 and 40 bit \s-1RC2.\s0 If any of +these algorithms is disabled then it will not be included. +.PP +\&\fBPKCS7_sign_add_signers()\fR returns an internal pointer to the \s-1PKCS7_SIGNER_INFO\s0 +structure just added, this can be used to set additional attributes +before it is finalized. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBPKCS7_sign_add_signers()\fR returns an internal pointer to the \s-1PKCS7_SIGNER_INFO\s0 +structure just added or \s-1NULL\s0 if an error occurs. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_get_error\fR\|(3), \fBPKCS7_sign\fR\|(3), +\&\fBPKCS7_final\fR\|(3), +.SH "HISTORY" +.IX Header "HISTORY" +The \fBPPKCS7_sign_add_signer()\fR function was added in OpenSSL 1.0.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2007\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/PKCS7_verify.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/PKCS7_verify.3 new file mode 100644 index 00000000..dc01ebc6 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/PKCS7_verify.3 @@ -0,0 +1,258 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "PKCS7_VERIFY 3" +.TH PKCS7_VERIFY 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +PKCS7_verify, PKCS7_get0_signers \- verify a PKCS#7 signedData structure +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int PKCS7_verify(PKCS7 *p7, STACK_OF(X509) *certs, X509_STORE *store, +\& BIO *indata, BIO *out, int flags); +\& +\& STACK_OF(X509) *PKCS7_get0_signers(PKCS7 *p7, STACK_OF(X509) *certs, int flags); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBPKCS7_verify()\fR verifies a PKCS#7 signedData structure. \fBp7\fR is the \s-1PKCS7\s0 +structure to verify. \fBcerts\fR is a set of certificates in which to search for +the signer's certificate. \fBstore\fR is a trusted certificate store (used for +chain verification). \fBindata\fR is the signed data if the content is not +present in \fBp7\fR (that is it is detached). The content is written to \fBout\fR +if it is not \s-1NULL.\s0 +.PP +\&\fBflags\fR is an optional set of flags, which can be used to modify the verify +operation. +.PP +\&\fBPKCS7_get0_signers()\fR retrieves the signer's certificates from \fBp7\fR, it does +\&\fBnot\fR check their validity or whether any signatures are valid. The \fBcerts\fR +and \fBflags\fR parameters have the same meanings as in \fBPKCS7_verify()\fR. +.SH "VERIFY PROCESS" +.IX Header "VERIFY PROCESS" +Normally the verify process proceeds as follows. +.PP +Initially some sanity checks are performed on \fBp7\fR. The type of \fBp7\fR must +be signedData. There must be at least one signature on the data and if +the content is detached \fBindata\fR cannot be \fB\s-1NULL\s0\fR. If the content is +not detached and \fBindata\fR is not \fB\s-1NULL\s0\fR, then the structure has both +embedded and external content. To treat this as an error, use the flag +\&\fB\s-1PKCS7_NO_DUAL_CONTENT\s0\fR. +The default behavior allows this, for compatibility with older +versions of OpenSSL. +.PP +An attempt is made to locate all the signer's certificates, first looking in +the \fBcerts\fR parameter (if it is not \fB\s-1NULL\s0\fR) and then looking in any certificates +contained in the \fBp7\fR structure itself. If any signer's certificates cannot be +located the operation fails. +.PP +Each signer's certificate is chain verified using the \fBsmimesign\fR purpose and +the supplied trusted certificate store. Any internal certificates in the message +are used as untrusted CAs. If any chain verify fails an error code is returned. +.PP +Finally the signed content is read (and written to \fBout\fR is it is not \s-1NULL\s0) and +the signature's checked. +.PP +If all signature's verify correctly then the function is successful. +.PP +Any of the following flags (ored together) can be passed in the \fBflags\fR parameter +to change the default verify behaviour. Only the flag \fB\s-1PKCS7_NOINTERN\s0\fR is +meaningful to \fBPKCS7_get0_signers()\fR. +.PP +If \fB\s-1PKCS7_NOINTERN\s0\fR is set the certificates in the message itself are not +searched when locating the signer's certificate. This means that all the signers +certificates must be in the \fBcerts\fR parameter. +.PP +If the \fB\s-1PKCS7_TEXT\s0\fR flag is set \s-1MIME\s0 headers for type \fBtext/plain\fR are deleted +from the content. If the content is not of type \fBtext/plain\fR then an error is +returned. +.PP +If \fB\s-1PKCS7_NOVERIFY\s0\fR is set the signer's certificates are not chain verified. +.PP +If \fB\s-1PKCS7_NOCHAIN\s0\fR is set then the certificates contained in the message are +not used as untrusted CAs. This means that the whole verify chain (apart from +the signer's certificate) must be contained in the trusted store. +.PP +If \fB\s-1PKCS7_NOSIGS\s0\fR is set then the signatures on the data are not checked. +.SH "NOTES" +.IX Header "NOTES" +One application of \fB\s-1PKCS7_NOINTERN\s0\fR is to only accept messages signed by +a small number of certificates. The acceptable certificates would be passed +in the \fBcerts\fR parameter. In this case if the signer is not one of the +certificates supplied in \fBcerts\fR then the verify will fail because the +signer cannot be found. +.PP +Care should be taken when modifying the default verify behaviour, for example +setting \fBPKCS7_NOVERIFY|PKCS7_NOSIGS\fR will totally disable all verification +and any signed message will be considered valid. This combination is however +useful if one merely wishes to write the content to \fBout\fR and its validity +is not considered important. +.PP +Chain verification should arguably be performed using the signing time rather +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). +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBPKCS7_verify()\fR returns one for a successful verification and zero +if an error occurs. +.PP +\&\fBPKCS7_get0_signers()\fR returns all signers or \fB\s-1NULL\s0\fR if an error occurred. +.PP +The error can be obtained from \fBERR_get_error\fR\|(3) +.SH "BUGS" +.IX Header "BUGS" +The trusted certificate store is not searched for the signers certificate, +this is primarily due to the inadequacies of the current \fBX509_STORE\fR +functionality. +.PP +The lack of single pass processing and need to hold all data in memory as +mentioned in \fBPKCS7_sign()\fR also applies to \fBPKCS7_verify()\fR. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_get_error\fR\|(3), \fBPKCS7_sign\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2002\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RAND_DRBG_generate.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RAND_DRBG_generate.3 new file mode 100644 index 00000000..504d206b --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RAND_DRBG_generate.3 @@ -0,0 +1,214 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "RAND_DRBG_GENERATE 3" +.TH RAND_DRBG_GENERATE 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +RAND_DRBG_generate, RAND_DRBG_bytes \&\- generate random bytes using the given drbg instance +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int RAND_DRBG_generate(RAND_DRBG *drbg, +\& unsigned char *out, size_t outlen, +\& int prediction_resistance, +\& const unsigned char *adin, size_t adinlen); +\& +\& int RAND_DRBG_bytes(RAND_DRBG *drbg, +\& unsigned char *out, size_t outlen); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBRAND_DRBG_generate()\fR generates \fBoutlen\fR random bytes using the given +\&\s-1DRBG\s0 instance \fBdrbg\fR and stores them in the buffer at \fBout\fR. +.PP +Before generating the output, the \s-1DRBG\s0 instance checks whether the maximum +number of generate requests (\fIreseed interval\fR) or the maximum timespan +(\fIreseed time interval\fR) since its last seeding have been reached. +If this is the case, the \s-1DRBG\s0 reseeds automatically. +Additionally, an immediate reseeding can be requested by setting the +\&\fBprediction_resistance\fR flag to 1. See \s-1NOTES\s0 section for more details. +.PP +The caller can optionally provide additional data to be used for reseeding +by passing a pointer \fBadin\fR to a buffer of length \fBadinlen\fR. +This additional data is mixed into the internal state of the random +generator but does not contribute to the entropy count. +The additional data can be omitted by setting \fBadin\fR to \s-1NULL\s0 and +\&\fBadinlen\fR to 0; +.PP +\&\fBRAND_DRBG_bytes()\fR generates \fBoutlen\fR random bytes using the given +\&\s-1DRBG\s0 instance \fBdrbg\fR and stores them in the buffer at \fBout\fR. +This function is a wrapper around the \fBRAND_DRBG_generate()\fR call, +which collects some additional data from low entropy sources +(e.g., a high resolution timer) and calls +RAND_DRBG_generate(drbg, out, outlen, 0, adin, adinlen). +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBRAND_DRBG_generate()\fR and \fBRAND_DRBG_bytes()\fR return 1 on success, +and 0 on failure. +.SH "NOTES" +.IX Header "NOTES" +The \fIreseed interval\fR and \fIreseed time interval\fR of the \fBdrbg\fR are set to +reasonable default values, which in general do not have to be adjusted. +If necessary, they can be changed using \fBRAND_DRBG_set_reseed_interval\fR\|(3) +and \fBRAND_DRBG_set_reseed_time_interval\fR\|(3), respectively. +.PP +A request for prediction resistance can only be satisfied by pulling fresh +entropy from one of the approved entropy sources listed in section 5.5.2 of +[\s-1NIST SP 800\-90C\s0]. +Since the default \s-1DRBG\s0 implementation does not have access to such an approved +entropy source, a request for prediction resistance will always fail. +In other words, prediction resistance is currently not supported yet by the \s-1DRBG.\s0 +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBRAND_bytes\fR\|(3), +\&\fBRAND_DRBG_set_reseed_interval\fR\|(3), +\&\fBRAND_DRBG_set_reseed_time_interval\fR\|(3), +\&\s-1\fBRAND_DRBG\s0\fR\|(7) +.SH "HISTORY" +.IX Header "HISTORY" +The \s-1RAND_DRBG\s0 functions were added in OpenSSL 1.1.1. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RAND_DRBG_get0_master.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RAND_DRBG_get0_master.3 new file mode 100644 index 00000000..516e4ec1 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RAND_DRBG_get0_master.3 @@ -0,0 +1,204 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "RAND_DRBG_GET0_MASTER 3" +.TH RAND_DRBG_GET0_MASTER 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +RAND_DRBG_get0_master, RAND_DRBG_get0_public, RAND_DRBG_get0_private \&\- get access to the global RAND_DRBG instances +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& RAND_DRBG *RAND_DRBG_get0_master(void); +\& RAND_DRBG *RAND_DRBG_get0_public(void); +\& RAND_DRBG *RAND_DRBG_get0_private(void); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The default \s-1RAND API\s0 implementation (\fBRAND_OpenSSL()\fR) utilizes three +shared \s-1DRBG\s0 instances which are accessed via the \s-1RAND API:\s0 +.PP +The and \s-1DRBG\s0 are thread-local instances, which are used +by \fBRAND_bytes()\fR and \fBRAND_priv_bytes()\fR, respectively. +The \s-1DRBG\s0 is a global instance, which is not intended to be used +directly, but is used internally to reseed the other two instances. +.PP +These functions here provide access to the shared \s-1DRBG\s0 instances. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBRAND_DRBG_get0_master()\fR returns a pointer to the \s-1DRBG\s0 instance. +.PP +\&\fBRAND_DRBG_get0_public()\fR returns a pointer to the \s-1DRBG\s0 instance. +.PP +\&\fBRAND_DRBG_get0_private()\fR returns a pointer to the \s-1DRBG\s0 instance. +.SH "NOTES" +.IX Header "NOTES" +It is not thread-safe to access the \s-1DRBG\s0 instance. +The and \s-1DRBG\s0 instance can be accessed safely, because +they are thread-local. Note however, that changes to these two instances +apply only to the current thread. +.PP +For that reason it is recommended not to change the settings of these +three instances directly. +Instead, an application should change the default settings for new \s-1DRBG\s0 instances +at initialization time, before creating additional threads. +.PP +During initialization, it is possible to change the reseed interval +and reseed time interval. +It is also possible to exchange the reseeding callbacks entirely. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBRAND_DRBG_set_callbacks\fR\|(3), +\&\fBRAND_DRBG_set_reseed_defaults\fR\|(3), +\&\fBRAND_DRBG_set_reseed_interval\fR\|(3), +\&\fBRAND_DRBG_set_reseed_time_interval\fR\|(3), +\&\fBRAND_DRBG_set_callbacks\fR\|(3), +\&\fBRAND_DRBG_generate\fR\|(3), +\&\s-1\fBRAND_DRBG\s0\fR\|(7) +.SH "HISTORY" +.IX Header "HISTORY" +The \s-1RAND_DRBG\s0 functions were added in OpenSSL 1.1.1. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RAND_DRBG_new.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RAND_DRBG_new.3 new file mode 100644 index 00000000..7f06df32 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RAND_DRBG_new.3 @@ -0,0 +1,247 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "RAND_DRBG_NEW 3" +.TH RAND_DRBG_NEW 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +RAND_DRBG_new, RAND_DRBG_secure_new, RAND_DRBG_set, RAND_DRBG_set_defaults, RAND_DRBG_instantiate, RAND_DRBG_uninstantiate, RAND_DRBG_free \&\- initialize and cleanup a RAND_DRBG instance +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& +\& RAND_DRBG *RAND_DRBG_new(int type, +\& unsigned int flags, +\& RAND_DRBG *parent); +\& +\& RAND_DRBG *RAND_DRBG_secure_new(int type, +\& unsigned int flags, +\& RAND_DRBG *parent); +\& +\& int RAND_DRBG_set(RAND_DRBG *drbg, +\& int type, unsigned int flags); +\& +\& int RAND_DRBG_set_defaults(int type, unsigned int flags); +\& +\& int RAND_DRBG_instantiate(RAND_DRBG *drbg, +\& const unsigned char *pers, size_t perslen); +\& +\& int RAND_DRBG_uninstantiate(RAND_DRBG *drbg); +\& +\& void RAND_DRBG_free(RAND_DRBG *drbg); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBRAND_DRBG_new()\fR and \fBRAND_DRBG_secure_new()\fR +create a new \s-1DRBG\s0 instance of the given \fBtype\fR, allocated from the heap resp. +the secure heap +(using \fBOPENSSL_zalloc()\fR resp. \fBOPENSSL_secure_zalloc()\fR). +.PP +\&\fBRAND_DRBG_set()\fR initializes the \fBdrbg\fR with the given \fBtype\fR and \fBflags\fR. +.PP +\&\fBRAND_DRBG_set_defaults()\fR sets the default \fBtype\fR and \fBflags\fR for new \s-1DRBG\s0 +instances. +.PP +Currently, all \s-1DRBG\s0 types are based on AES-CTR, so \fBtype\fR can be one of the +following values: NID_aes_128_ctr, NID_aes_192_ctr, NID_aes_256_ctr. +Before the \s-1DRBG\s0 can be used to generate random bits, it is necessary to set +its type and to instantiate it. +.PP +The optional \fBflags\fR argument specifies a set of bit flags which can be +joined using the | operator. Currently, the only flag is +\&\s-1RAND_DRBG_FLAG_CTR_NO_DF,\s0 which disables the use of a the derivation function +ctr_df. For an explanation, see [\s-1NIST SP 800\-90A\s0 Rev. 1]. +.PP +If a \fBparent\fR instance is specified then this will be used instead of +the default entropy source for reseeding the \fBdrbg\fR. It is said that the +\&\fBdrbg\fR is \fIchained\fR to its \fBparent\fR. +For more information, see the \s-1NOTES\s0 section. +.PP +\&\fBRAND_DRBG_instantiate()\fR +seeds the \fBdrbg\fR instance using random input from trusted entropy sources. +Optionally, a personalization string \fBpers\fR of length \fBperslen\fR can be +specified. +To omit the personalization string, set \fBpers\fR=NULL and \fBperslen\fR=0; +.PP +\&\fBRAND_DRBG_uninstantiate()\fR +clears the internal state of the \fBdrbg\fR and puts it back in the +uninstantiated state. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBRAND_DRBG_new()\fR and \fBRAND_DRBG_secure_new()\fR return a pointer to a \s-1DRBG\s0 +instance allocated on the heap, resp. secure heap. +.PP +\&\fBRAND_DRBG_set()\fR, +\&\fBRAND_DRBG_instantiate()\fR, and +\&\fBRAND_DRBG_uninstantiate()\fR +return 1 on success, and 0 on failure. +.PP +\&\fBRAND_DRBG_free()\fR does not return a value. +.SH "NOTES" +.IX Header "NOTES" +The \s-1DRBG\s0 design supports \fIchaining\fR, which means that a \s-1DRBG\s0 instance can +use another \fBparent\fR \s-1DRBG\s0 instance instead of the default entropy source +to obtain fresh random input for reseeding, provided that \fBparent\fR \s-1DRBG\s0 +instance was properly instantiated, either from a trusted entropy source, +or from yet another parent \s-1DRBG\s0 instance. +For a detailed description of the reseeding process, see \s-1\fBRAND_DRBG\s0\fR\|(7). +.PP +The default \s-1DRBG\s0 type and flags are applied only during creation of a \s-1DRBG\s0 +instance. +To ensure that they are applied to the global and thread-local \s-1DRBG\s0 instances +(, resp. and ), it is necessary to call +\&\fBRAND_DRBG_set_defaults()\fR before creating any thread and before calling any +cryptographic routines that obtain random data directly or indirectly. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBOPENSSL_zalloc\fR\|(3), +\&\fBOPENSSL_secure_zalloc\fR\|(3), +\&\fBRAND_DRBG_generate\fR\|(3), +\&\s-1\fBRAND_DRBG\s0\fR\|(7) +.SH "HISTORY" +.IX Header "HISTORY" +The \s-1RAND_DRBG\s0 functions were added in OpenSSL 1.1.1. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RAND_DRBG_reseed.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RAND_DRBG_reseed.3 new file mode 100644 index 00000000..1c2fab7f --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RAND_DRBG_reseed.3 @@ -0,0 +1,239 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "RAND_DRBG_RESEED 3" +.TH RAND_DRBG_RESEED 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +RAND_DRBG_reseed, RAND_DRBG_set_reseed_interval, RAND_DRBG_set_reseed_time_interval, RAND_DRBG_set_reseed_defaults \&\- reseed a RAND_DRBG instance +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int RAND_DRBG_reseed(RAND_DRBG *drbg, +\& const unsigned char *adin, size_t adinlen, +\& int prediction_resistance); +\& +\& int RAND_DRBG_set_reseed_interval(RAND_DRBG *drbg, +\& unsigned int interval); +\& +\& int RAND_DRBG_set_reseed_time_interval(RAND_DRBG *drbg, +\& time_t interval); +\& +\& int RAND_DRBG_set_reseed_defaults( +\& unsigned int master_reseed_interval, +\& unsigned int slave_reseed_interval, +\& time_t master_reseed_time_interval, +\& time_t slave_reseed_time_interval +\& ); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBRAND_DRBG_reseed()\fR +reseeds the given \fBdrbg\fR, obtaining entropy input from its entropy source +and mixing in the specified additional data provided in the buffer \fBadin\fR +of length \fBadinlen\fR. +The additional data can be omitted by setting \fBadin\fR to \s-1NULL\s0 and \fBadinlen\fR +to 0. +An immediate reseeding from a live entropy source can be requested by setting +the \fBprediction_resistance\fR flag to 1. +This feature is not implemented yet, so reseeding with prediction resistance +requested will always fail. +.PP +\&\fBRAND_DRBG_set_reseed_interval()\fR +sets the reseed interval of the \fBdrbg\fR, which is the maximum allowed number +of generate requests between consecutive reseedings. +If \fBinterval\fR > 0, then the \fBdrbg\fR will reseed automatically whenever the +number of generate requests since its last seeding exceeds the given reseed +interval. +If \fBinterval\fR == 0, then this feature is disabled. +.PP +\&\fBRAND_DRBG_set_reseed_time_interval()\fR +sets the reseed time interval of the \fBdrbg\fR, which is the maximum allowed +number of seconds between consecutive reseedings. +If \fBinterval\fR > 0, then the \fBdrbg\fR will reseed automatically whenever the +elapsed time since its last reseeding exceeds the given reseed time interval. +If \fBinterval\fR == 0, then this feature is disabled. +.PP +\&\fBRAND_DRBG_set_reseed_defaults()\fR sets the default values for the reseed interval +(\fBmaster_reseed_interval\fR and \fBslave_reseed_interval\fR) +and the reseed time interval +(\fBmaster_reseed_time_interval\fR and \fBslave_reseed_tme_interval\fR) +of \s-1DRBG\s0 instances. +The default values are set independently for master \s-1DRBG\s0 instances (which don't +have a parent) and slave \s-1DRBG\s0 instances (which are chained to a parent \s-1DRBG\s0). +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBRAND_DRBG_reseed()\fR, +\&\fBRAND_DRBG_set_reseed_interval()\fR, and +\&\fBRAND_DRBG_set_reseed_time_interval()\fR, +return 1 on success, 0 on failure. +.SH "NOTES" +.IX Header "NOTES" +The default OpenSSL random generator is already set up for automatic reseeding, +so in general it is not necessary to reseed it explicitly, or to modify +its reseeding thresholds. +.PP +Normally, the entropy input for seeding a \s-1DRBG\s0 is either obtained from a +trusted os entropy source or from a parent \s-1DRBG\s0 instance, which was seeded +(directly or indirectly) from a trusted os entropy source. +In exceptional cases it is possible to replace the reseeding mechanism entirely +by providing application defined callbacks using \fBRAND_DRBG_set_callbacks()\fR. +.PP +The reseeding default values are applied only during creation of a \s-1DRBG\s0 instance. +To ensure that they are applied to the global and thread-local \s-1DRBG\s0 instances +(, resp. and ), it is necessary to call +\&\fBRAND_DRBG_set_reseed_defaults()\fR before creating any thread and before calling any + cryptographic routines that obtain random data directly or indirectly. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBRAND_DRBG_generate\fR\|(3), +\&\fBRAND_DRBG_bytes\fR\|(3), +\&\fBRAND_DRBG_set_callbacks\fR\|(3). +\&\s-1\fBRAND_DRBG\s0\fR\|(7) +.SH "HISTORY" +.IX Header "HISTORY" +The \s-1RAND_DRBG\s0 functions were added in OpenSSL 1.1.1. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RAND_DRBG_set_callbacks.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RAND_DRBG_set_callbacks.3 new file mode 100644 index 00000000..ade4a681 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RAND_DRBG_set_callbacks.3 @@ -0,0 +1,268 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "RAND_DRBG_SET_CALLBACKS 3" +.TH RAND_DRBG_SET_CALLBACKS 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +RAND_DRBG_set_callbacks, RAND_DRBG_get_entropy_fn, RAND_DRBG_cleanup_entropy_fn, RAND_DRBG_get_nonce_fn, RAND_DRBG_cleanup_nonce_fn \&\- set callbacks for reseeding +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& +\& int RAND_DRBG_set_callbacks(RAND_DRBG *drbg, +\& RAND_DRBG_get_entropy_fn get_entropy, +\& RAND_DRBG_cleanup_entropy_fn cleanup_entropy, +\& RAND_DRBG_get_nonce_fn get_nonce, +\& RAND_DRBG_cleanup_nonce_fn cleanup_nonce); +.Ve +.SS "Callback Functions" +.IX Subsection "Callback Functions" +.Vb 6 +\& typedef size_t (*RAND_DRBG_get_entropy_fn)( +\& RAND_DRBG *drbg, +\& unsigned char **pout, +\& int entropy, +\& size_t min_len, size_t max_len, +\& int prediction_resistance); +\& +\& typedef void (*RAND_DRBG_cleanup_entropy_fn)( +\& RAND_DRBG *drbg, +\& unsigned char *out, size_t outlen); +\& +\& typedef size_t (*RAND_DRBG_get_nonce_fn)( +\& RAND_DRBG *drbg, +\& unsigned char **pout, +\& int entropy, +\& size_t min_len, size_t max_len); +\& +\& typedef void (*RAND_DRBG_cleanup_nonce_fn)( +\& RAND_DRBG *drbg, +\& unsigned char *out, size_t outlen); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBRAND_DRBG_set_callbacks()\fR sets the callbacks for obtaining fresh entropy and +the nonce when reseeding the given \fBdrbg\fR. +The callback functions are implemented and provided by the caller. +Their parameter lists need to match the function prototypes above. +.PP +Setting the callbacks is allowed only if the \s-1DRBG\s0 has not been initialized yet. +Otherwise, the operation will fail. +To change the settings for one of the three shared DRBGs it is necessary to call +\&\fBRAND_DRBG_uninstantiate()\fR first. +.PP +The \fBget_entropy\fR() callback is called by the \fBdrbg\fR when it requests fresh +random input. +It is expected that the callback allocates and fills a random buffer of size +\&\fBmin_len\fR <= size <= \fBmax_len\fR (in bytes) which contains at least \fBentropy\fR +bits of randomness. +The \fBprediction_resistance\fR flag indicates whether the reseeding was +triggered by a prediction resistance request. +.PP +The buffer's address is to be returned in *\fBpout\fR and the number of collected +randomness bytes as return value. +.PP +If the callback fails to acquire at least \fBentropy\fR bits of randomness, +it must indicate an error by returning a buffer length of 0. +.PP +If \fBprediction_resistance\fR was requested and the random source of the \s-1DRBG\s0 +does not satisfy the conditions requested by [\s-1NIST SP 800\-90C\s0], then +it must also indicate an error by returning a buffer length of 0. +See \s-1NOTES\s0 section for more details. +.PP +The \fBcleanup_entropy\fR() callback is called from the \fBdrbg\fR to to clear and +free the buffer allocated previously by \fBget_entropy()\fR. +The values \fBout\fR and \fBoutlen\fR are the random buffer's address and length, +as returned by the \fBget_entropy()\fR callback. +.PP +The \fBget_nonce\fR() and \fBcleanup_nonce\fR() callbacks are used to obtain a nonce +and free it again. A nonce is only required for instantiation (not for reseeding) +and only in the case where the \s-1DRBG\s0 uses a derivation function. +The callbacks are analogous to \fBget_entropy()\fR and \fBcleanup_entropy()\fR, +except for the missing prediction_resistance flag. +.PP +If the derivation function is disabled, then no nonce is used for instantiation, +and the \fBget_nonce\fR() and \fBcleanup_nonce\fR() callbacks can be omitted by +setting them to \s-1NULL.\s0 +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBRAND_DRBG_set_callbacks()\fR return 1 on success, and 0 on failure +.SH "NOTES" +.IX Header "NOTES" +It is important that \fBcleanup_entropy\fR() and \fBcleanup_nonce\fR() clear the buffer +contents safely before freeing it, in order not to leave sensitive information +about the \s-1DRBG\s0's state in memory. +.PP +A request for prediction resistance can only be satisfied by pulling fresh +entropy from one of the approved entropy sources listed in section 5.5.2 of +[\s-1NIST SP 800\-90C\s0]. +Since the default implementation of the get_entropy callback does not have access +to such an approved entropy source, a request for prediction resistance will +always fail. +In other words, prediction resistance is currently not supported yet by the \s-1DRBG.\s0 +.PP +The derivation function is disabled during initialization by calling the +\&\fBRAND_DRBG_set()\fR function with the \s-1RAND_DRBG_FLAG_CTR_NO_DF\s0 flag. +For more information on the derivation function and when it can be omitted, +see [\s-1NIST SP 800\-90A\s0 Rev. 1]. Roughly speaking it can be omitted if the random +source has \*(L"full entropy\*(R", i.e., contains 8 bits of entropy per byte. +.PP +Even if a nonce is required, the \fBget_nonce\fR() and \fBcleanup_nonce\fR() +callbacks can be omitted by setting them to \s-1NULL.\s0 +In this case the \s-1DRBG\s0 will automatically request an extra amount of entropy +(using the \fBget_entropy\fR() and \fBcleanup_entropy\fR() callbacks) which it will +utilize for the nonce, following the recommendations of [\s-1NIST SP 800\-90A\s0 Rev. 1], +section 8.6.7. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBRAND_DRBG_new\fR\|(3), +\&\fBRAND_DRBG_reseed\fR\|(3), +\&\s-1\fBRAND_DRBG\s0\fR\|(7) +.SH "HISTORY" +.IX Header "HISTORY" +The \s-1RAND_DRBG\s0 functions were added in OpenSSL 1.1.1. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RAND_DRBG_set_ex_data.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RAND_DRBG_set_ex_data.3 new file mode 100644 index 00000000..5349bda3 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RAND_DRBG_set_ex_data.3 @@ -0,0 +1,193 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "RAND_DRBG_SET_EX_DATA 3" +.TH RAND_DRBG_SET_EX_DATA 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +RAND_DRBG_set_ex_data, RAND_DRBG_get_ex_data, RAND_DRBG_get_ex_new_index \&\- store and retrieve extra data from the DRBG instance +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int RAND_DRBG_set_ex_data(RAND_DRBG *drbg, int idx, void *data); +\& +\& void *RAND_DRBG_get_ex_data(const RAND_DRBG *drbg, int idx); +\& +\& int RAND_DRBG_get_ex_new_index(long argl, void *argp, +\& CRYPTO_EX_new *new_func, +\& CRYPTO_EX_dup *dup_func, +\& CRYPTO_EX_free *free_func); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBRAND_DRBG_set_ex_data()\fR enables an application to store arbitrary application +specific data \fBdata\fR in a \s-1RAND_DRBG\s0 instance \fBdrbg\fR. The index \fBidx\fR should +be a value previously returned from a call to \fBRAND_DRBG_get_ex_new_index()\fR. +.PP +\&\fBRAND_DRBG_get_ex_data()\fR retrieves application specific data previously stored +in an \s-1RAND_DRBG\s0 instance \fBdrbg\fR. The \fBidx\fR value should be the same as that +used when originally storing the data. +.PP +For more detailed information see \fBCRYPTO_get_ex_data\fR\|(3) and +\&\fBCRYPTO_set_ex_data\fR\|(3) which implement these functions and +\&\fBCRYPTO_get_ex_new_index\fR\|(3) for generating a unique index. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBRAND_DRBG_set_ex_data()\fR returns 1 for success or 0 for failure. +.PP +\&\fBRAND_DRBG_get_ex_data()\fR returns the previously stored value or \s-1NULL\s0 on +failure. \s-1NULL\s0 may also be a valid value. +.SH "NOTES" +.IX Header "NOTES" +RAND_DRBG_get_ex_new_index(...) is implemented as a macro and equivalent to +CRYPTO_get_ex_new_index(\s-1CRYPTO_EX_INDEX_DRBG,...\s0). +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBCRYPTO_get_ex_data\fR\|(3), +\&\fBCRYPTO_set_ex_data\fR\|(3), +\&\fBCRYPTO_get_ex_new_index\fR\|(3), +\&\s-1\fBRAND_DRBG\s0\fR\|(7) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RAND_add.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RAND_add.3 new file mode 100644 index 00000000..9aa0d697 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RAND_add.3 @@ -0,0 +1,235 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "RAND_ADD 3" +.TH RAND_ADD 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +RAND_add, RAND_poll, RAND_seed, RAND_status, RAND_event, RAND_screen, RAND_keep_random_devices_open \&\- add randomness to the PRNG or get its status +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int RAND_status(void); +\& int RAND_poll(); +\& +\& void RAND_add(const void *buf, int num, double randomness); +\& void RAND_seed(const void *buf, int num); +\& +\& void RAND_keep_random_devices_open(int keep); +.Ve +.PP +Deprecated: +.PP +.Vb 4 +\& #if OPENSSL_API_COMPAT < 0x10100000L +\& int RAND_event(UINT iMsg, WPARAM wParam, LPARAM lParam); +\& void RAND_screen(void); +\& #endif +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +These functions can be used to seed the random generator and to check its +seeded state. +In general, manual (re\-)seeding of the default OpenSSL random generator +(\fBRAND_OpenSSL\fR\|(3)) is not necessary (but allowed), since it does (re\-)seed +itself automatically using trusted system entropy sources. +This holds unless the default \s-1RAND_METHOD\s0 has been replaced or OpenSSL was +built with automatic reseeding disabled, see \s-1\fBRAND\s0\fR\|(7) for more details. +.PP +\&\fBRAND_status()\fR indicates whether or not the random generator has been sufficiently +seeded. If not, functions such as \fBRAND_bytes\fR\|(3) will fail. +.PP +\&\fBRAND_poll()\fR uses the system's capabilities to seed the random generator using +random input obtained from polling various trusted entropy sources. +The default choice of the entropy source can be modified at build time, +see \s-1\fBRAND\s0\fR\|(7) for more details. +.PP +\&\fBRAND_add()\fR mixes the \fBnum\fR bytes at \fBbuf\fR into the internal state +of the random generator. +This function will not normally be needed, as mentioned above. +The \fBrandomness\fR argument is an estimate of how much randomness is +contained in +\&\fBbuf\fR, in bytes, and should be a number between zero and \fBnum\fR. +Details about sources of randomness and how to estimate their randomness +can be found in the literature; for example [\s-1NIST SP 800\-90B\s0]. +The content of \fBbuf\fR cannot be recovered from subsequent random generator output. +Applications that intend to save and restore random state in an external file +should consider using \fBRAND_load_file\fR\|(3) instead. +.PP +\&\fBRAND_seed()\fR is equivalent to \fBRAND_add()\fR with \fBrandomness\fR set to \fBnum\fR. +.PP +\&\fBRAND_keep_random_devices_open()\fR is used to control file descriptor +usage by the random seed sources. Some seed sources maintain open file +descriptors by default, which allows such sources to operate in a +\&\fBchroot\fR\|(2) jail without the associated device nodes being available. When +the \fBkeep\fR argument is zero, this call disables the retention of file +descriptors. Conversely, a non-zero argument enables the retention of +file descriptors. This function is usually called during initialization +and it takes effect immediately. +.PP +\&\fBRAND_event()\fR and \fBRAND_screen()\fR are equivalent to \fBRAND_poll()\fR and exist +for compatibility reasons only. See \s-1HISTORY\s0 section below. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBRAND_status()\fR returns 1 if the random generator has been seeded +with enough data, 0 otherwise. +.PP +\&\fBRAND_poll()\fR returns 1 if it generated seed data, 0 otherwise. +.PP +\&\fBRAND_event()\fR returns \fBRAND_status()\fR. +.PP +The other functions do not return values. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBRAND_bytes\fR\|(3), +\&\fBRAND_egd\fR\|(3), +\&\fBRAND_load_file\fR\|(3), +\&\s-1\fBRAND\s0\fR\|(7) +.SH "HISTORY" +.IX Header "HISTORY" +\&\fBRAND_event()\fR and \fBRAND_screen()\fR were deprecated in OpenSSL 1.1.0 and should +not be used. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RAND_bytes.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RAND_bytes.3 new file mode 100644 index 00000000..78210930 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RAND_bytes.3 @@ -0,0 +1,215 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "RAND_BYTES 3" +.TH RAND_BYTES 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +RAND_bytes, RAND_priv_bytes, RAND_pseudo_bytes \- generate random data +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int RAND_bytes(unsigned char *buf, int num); +\& int RAND_priv_bytes(unsigned char *buf, int num); +.Ve +.PP +Deprecated: +.PP +.Vb 3 +\& #if OPENSSL_API_COMPAT < 0x10100000L +\& int RAND_pseudo_bytes(unsigned char *buf, int num); +\& #endif +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBRAND_bytes()\fR generates \fBnum\fR random bytes using a cryptographically +secure pseudo random generator (\s-1CSPRNG\s0) and stores them in \fBbuf\fR. +.PP +\&\fBRAND_priv_bytes()\fR has the same semantics as \fBRAND_bytes()\fR. It is intended to +be used for generating values that should remain private. If using the +default \s-1RAND_METHOD,\s0 this function uses a separate \*(L"private\*(R" \s-1PRNG\s0 +instance so that a compromise of the \*(L"public\*(R" \s-1PRNG\s0 instance will not +affect the secrecy of these private values, as described in \s-1\fBRAND\s0\fR\|(7) +and \s-1\fBRAND_DRBG\s0\fR\|(7). +.SH "NOTES" +.IX Header "NOTES" +By default, the OpenSSL \s-1CSPRNG\s0 supports a security level of 256 bits, provided it +was able to seed itself from a trusted entropy source. +On all major platforms supported by OpenSSL (including the Unix-like platforms +and Windows), OpenSSL is configured to automatically seed the \s-1CSPRNG\s0 on first use +using the operating systems's random generator. +.PP +If the entropy source fails or is not available, the \s-1CSPRNG\s0 will enter an +error state and refuse to generate random bytes. For that reason, it is important +to always check the error return value of \fBRAND_bytes()\fR and \fBRAND_priv_bytes()\fR and +not take randomness for granted. +.PP +On other platforms, there might not be a trusted entropy source available +or OpenSSL might have been explicitly configured to use different entropy sources. +If you are in doubt about the quality of the entropy source, don't hesitate to ask +your operating system vendor or post a question on GitHub or the openssl-users +mailing list. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBRAND_bytes()\fR and \fBRAND_priv_bytes()\fR +return 1 on success, \-1 if not supported by the current +\&\s-1RAND\s0 method, or 0 on other failure. The error code can be +obtained by \fBERR_get_error\fR\|(3). +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBRAND_add\fR\|(3), +\&\fBRAND_bytes\fR\|(3), +\&\fBRAND_priv_bytes\fR\|(3), +\&\fBERR_get_error\fR\|(3), +\&\s-1\fBRAND\s0\fR\|(7), +\&\s-1\fBRAND_DRBG\s0\fR\|(7) +.SH "HISTORY" +.IX Header "HISTORY" +.IP "\(bu" 2 +\&\fBRAND_pseudo_bytes()\fR was deprecated in OpenSSL 1.1.0; use \fBRAND_bytes()\fR instead. +.IP "\(bu" 2 +The \fBRAND_priv_bytes()\fR function was added in OpenSSL 1.1.1. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2020 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RAND_cleanup.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RAND_cleanup.3 new file mode 100644 index 00000000..d0a8370f --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RAND_cleanup.3 @@ -0,0 +1,175 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "RAND_CLEANUP 3" +.TH RAND_CLEANUP 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +RAND_cleanup \- erase the PRNG state +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& #if OPENSSL_API_COMPAT < 0x10100000L +\& void RAND_cleanup(void) +\& #endif +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +Prior to OpenSSL 1.1.0, \fBRAND_cleanup()\fR released all resources used by +the \s-1PRNG.\s0 As of version 1.1.0, it does nothing and should not be called, +since no explicit initialisation or de-initialisation is necessary. See +\&\fBOPENSSL_init_crypto\fR\|(3). +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBRAND_cleanup()\fR returns no value. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\s-1\fBRAND\s0\fR\|(7) +.SH "HISTORY" +.IX Header "HISTORY" +\&\fBRAND_cleanup()\fR was deprecated in OpenSSL 1.1.0; do not use it. +See \fBOPENSSL_init_crypto\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RAND_egd.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RAND_egd.3 new file mode 100644 index 00000000..61b4ca48 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RAND_egd.3 @@ -0,0 +1,193 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "RAND_EGD 3" +.TH RAND_EGD 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +RAND_egd, RAND_egd_bytes, RAND_query_egd_bytes \- query entropy gathering daemon +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int RAND_egd_bytes(const char *path, int num); +\& int RAND_egd(const char *path); +\& +\& int RAND_query_egd_bytes(const char *path, unsigned char *buf, int num); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +On older platforms without a good source of randomness such as \f(CW\*(C`/dev/urandom\*(C'\fR, +it is possible to query an Entropy Gathering Daemon (\s-1EGD\s0) over a local +socket to obtain randomness and seed the OpenSSL \s-1RNG.\s0 +The protocol used is defined by the EGDs available at + or . +.PP +\&\fBRAND_egd_bytes()\fR requests \fBnum\fR bytes of randomness from an \s-1EGD\s0 at the +specified socket \fBpath\fR, and passes the data it receives into \fBRAND_add()\fR. +\&\fBRAND_egd()\fR is equivalent to \fBRAND_egd_bytes()\fR with \fBnum\fR set to 255. +.PP +\&\fBRAND_query_egd_bytes()\fR requests \fBnum\fR bytes of randomness from an \s-1EGD\s0 at +the specified socket \fBpath\fR, where \fBnum\fR must be less than 256. +If \fBbuf\fR is \fB\s-1NULL\s0\fR, it is equivalent to \fBRAND_egd_bytes()\fR. +If \fBbuf\fR is not \fB\s-1NULL\s0\fR, then the data is copied to the buffer and +\&\fBRAND_add()\fR is not called. +.PP +OpenSSL can be configured at build time to try to use the \s-1EGD\s0 for seeding +automatically. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBRAND_egd()\fR and \fBRAND_egd_bytes()\fR return the number of bytes read from the +daemon on success, or \-1 if the connection failed or the daemon did not +return enough data to fully seed the \s-1PRNG.\s0 +.PP +\&\fBRAND_query_egd_bytes()\fR returns the number of bytes read from the daemon on +success, or \-1 if the connection failed. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBRAND_add\fR\|(3), +\&\fBRAND_bytes\fR\|(3), +\&\s-1\fBRAND\s0\fR\|(7) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RAND_load_file.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RAND_load_file.3 new file mode 100644 index 00000000..14fc5450 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RAND_load_file.3 @@ -0,0 +1,218 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "RAND_LOAD_FILE 3" +.TH RAND_LOAD_FILE 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +RAND_load_file, RAND_write_file, RAND_file_name \- PRNG seed file +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int RAND_load_file(const char *filename, long max_bytes); +\& +\& int RAND_write_file(const char *filename); +\& +\& const char *RAND_file_name(char *buf, size_t num); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBRAND_load_file()\fR reads a number of bytes from file \fBfilename\fR and +adds them to the \s-1PRNG.\s0 If \fBmax_bytes\fR is non-negative, +up to \fBmax_bytes\fR are read; +if \fBmax_bytes\fR is \-1, the complete file is read. +Do not load the same file multiple times unless its contents have +been updated by \fBRAND_write_file()\fR between reads. +Also, note that \fBfilename\fR should be adequately protected so that an +attacker cannot replace or examine the contents. +If \fBfilename\fR is not a regular file, then user is considered to be +responsible for any side effects, e.g. non-anticipated blocking or +capture of controlling terminal. +.PP +\&\fBRAND_write_file()\fR writes a number of random bytes (currently 128) to +file \fBfilename\fR which can be used to initialize the \s-1PRNG\s0 by calling +\&\fBRAND_load_file()\fR in a later session. +.PP +\&\fBRAND_file_name()\fR generates a default path for the random seed +file. \fBbuf\fR points to a buffer of size \fBnum\fR in which to store the +filename. +.PP +On all systems, if the environment variable \fB\s-1RANDFILE\s0\fR is set, its +value will be used as the seed file name. +Otherwise, the file is called \f(CW\*(C`.rnd\*(C'\fR, found in platform dependent locations: +.IP "On Windows (in order of preference)" 4 +.IX Item "On Windows (in order of preference)" +.Vb 1 +\& %HOME%, %USERPROFILE%, %SYSTEMROOT%, C:\e +.Ve +.IP "On \s-1VMS\s0" 4 +.IX Item "On VMS" +.Vb 1 +\& SYS$LOGIN: +.Ve +.IP "On all other systems" 4 +.IX Item "On all other systems" +.Vb 1 +\& $HOME +.Ve +.PP +If \f(CW$HOME\fR (on non-Windows and non-VMS system) is not set either, or +\&\fBnum\fR is too small for the path name, an error occurs. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBRAND_load_file()\fR returns the number of bytes read or \-1 on error. +.PP +\&\fBRAND_write_file()\fR returns the number of bytes written, or \-1 if the +bytes written were generated without appropriate seeding. +.PP +\&\fBRAND_file_name()\fR returns a pointer to \fBbuf\fR on success, and \s-1NULL\s0 on +error. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBRAND_add\fR\|(3), +\&\fBRAND_bytes\fR\|(3), +\&\s-1\fBRAND\s0\fR\|(7) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RAND_set_rand_method.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RAND_set_rand_method.3 new file mode 100644 index 00000000..a3aed58d --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RAND_set_rand_method.3 @@ -0,0 +1,203 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "RAND_SET_RAND_METHOD 3" +.TH RAND_SET_RAND_METHOD 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +RAND_set_rand_method, RAND_get_rand_method, RAND_OpenSSL \- select RAND method +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& RAND_METHOD *RAND_OpenSSL(void); +\& +\& int RAND_set_rand_method(const RAND_METHOD *meth); +\& +\& const RAND_METHOD *RAND_get_rand_method(void); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +A \fB\s-1RAND_METHOD\s0\fR specifies the functions that OpenSSL uses for random number +generation. +.PP +\&\fBRAND_OpenSSL()\fR returns the default \fB\s-1RAND_METHOD\s0\fR implementation by OpenSSL. +This implementation ensures that the \s-1PRNG\s0 state is unique for each thread. +.PP +If an \fB\s-1ENGINE\s0\fR is loaded that provides the \s-1RAND API,\s0 however, it will +be used instead of the method returned by \fBRAND_OpenSSL()\fR. +.PP +\&\fBRAND_set_rand_method()\fR makes \fBmeth\fR the method for \s-1PRNG\s0 use. If an +\&\s-1ENGINE\s0 was providing the method, it will be released first. +.PP +\&\fBRAND_get_rand_method()\fR returns a pointer to the current \fB\s-1RAND_METHOD\s0\fR. +.SH "THE RAND_METHOD STRUCTURE" +.IX Header "THE RAND_METHOD STRUCTURE" +.Vb 8 +\& typedef struct rand_meth_st { +\& int (*seed)(const void *buf, int num); +\& int (*bytes)(unsigned char *buf, int num); +\& void (*cleanup)(void); +\& int (*add)(const void *buf, int num, double entropy); +\& int (*pseudorand)(unsigned char *buf, int num); +\& int (*status)(void); +\& } RAND_METHOD; +.Ve +.PP +The fields point to functions that are used by, in order, +\&\fBRAND_seed()\fR, \fBRAND_bytes()\fR, internal \s-1RAND\s0 cleanup, \fBRAND_add()\fR, \fBRAND_pseudo_rand()\fR +and \fBRAND_status()\fR. +Each pointer may be \s-1NULL\s0 if the function is not implemented. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBRAND_set_rand_method()\fR returns 1 on success and 0 on failure. +\&\fBRAND_get_rand_method()\fR and \fBRAND_OpenSSL()\fR return pointers to the respective +methods. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBRAND_bytes\fR\|(3), +\&\fBENGINE_by_id\fR\|(3), +\&\s-1\fBRAND\s0\fR\|(7) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2020 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RC4_set_key.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RC4_set_key.3 new file mode 100644 index 00000000..8a4c262c --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RC4_set_key.3 @@ -0,0 +1,197 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "RC4_SET_KEY 3" +.TH RC4_SET_KEY 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +RC4_set_key, RC4 \- RC4 encryption +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& void RC4_set_key(RC4_KEY *key, int len, const unsigned char *data); +\& +\& void RC4(RC4_KEY *key, unsigned long len, const unsigned char *indata, +\& unsigned char *outdata); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +This library implements the Alleged \s-1RC4\s0 cipher, which is described for +example in \fIApplied Cryptography\fR. It is believed to be compatible +with RC4[\s-1TM\s0], a proprietary cipher of \s-1RSA\s0 Security Inc. +.PP +\&\s-1RC4\s0 is a stream cipher with variable key length. Typically, 128 bit +(16 byte) keys are used for strong encryption, but shorter insecure +key sizes have been widely used due to export restrictions. +.PP +\&\s-1RC4\s0 consists of a key setup phase and the actual encryption or +decryption phase. +.PP +\&\fBRC4_set_key()\fR sets up the \fB\s-1RC4_KEY\s0\fR \fBkey\fR using the \fBlen\fR bytes long +key at \fBdata\fR. +.PP +\&\s-1\fBRC4\s0()\fR encrypts or decrypts the \fBlen\fR bytes of data at \fBindata\fR using +\&\fBkey\fR and places the result at \fBoutdata\fR. Repeated \s-1\fBRC4\s0()\fR calls with +the same \fBkey\fR yield a continuous key stream. +.PP +Since \s-1RC4\s0 is a stream cipher (the input is XORed with a pseudo-random +key stream to produce the output), decryption uses the same function +calls as encryption. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBRC4_set_key()\fR and \s-1\fBRC4\s0()\fR do not return values. +.SH "NOTE" +.IX Header "NOTE" +Applications should use the higher level functions +\&\fBEVP_EncryptInit\fR\|(3) etc. instead of calling these +functions directly. +.PP +It is difficult to securely use stream ciphers. For example, do not perform +multiple encryptions using the same key stream. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBEVP_EncryptInit\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RIPEMD160_Init.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RIPEMD160_Init.3 new file mode 100644 index 00000000..8805a6c1 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RIPEMD160_Init.3 @@ -0,0 +1,200 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "RIPEMD160_INIT 3" +.TH RIPEMD160_INIT 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +RIPEMD160, RIPEMD160_Init, RIPEMD160_Update, RIPEMD160_Final \- RIPEMD\-160 hash function +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& unsigned char *RIPEMD160(const unsigned char *d, unsigned long n, +\& unsigned char *md); +\& +\& int RIPEMD160_Init(RIPEMD160_CTX *c); +\& int RIPEMD160_Update(RIPEMD160_CTX *c, const void *data, unsigned long len); +\& int RIPEMD160_Final(unsigned char *md, RIPEMD160_CTX *c); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\s-1RIPEMD\-160\s0 is a cryptographic hash function with a +160 bit output. +.PP +\&\s-1\fBRIPEMD160\s0()\fR computes the \s-1RIPEMD\-160\s0 message digest of the \fBn\fR +bytes at \fBd\fR and places it in \fBmd\fR (which must have space for +\&\s-1RIPEMD160_DIGEST_LENGTH\s0 == 20 bytes of output). If \fBmd\fR is \s-1NULL,\s0 the digest +is placed in a static array. +.PP +The following functions may be used if the message is not completely +stored in memory: +.PP +\&\fBRIPEMD160_Init()\fR initializes a \fB\s-1RIPEMD160_CTX\s0\fR structure. +.PP +\&\fBRIPEMD160_Update()\fR can be called repeatedly with chunks of the message to +be hashed (\fBlen\fR bytes at \fBdata\fR). +.PP +\&\fBRIPEMD160_Final()\fR places the message digest in \fBmd\fR, which must have +space for \s-1RIPEMD160_DIGEST_LENGTH\s0 == 20 bytes of output, and erases +the \fB\s-1RIPEMD160_CTX\s0\fR. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\s-1\fBRIPEMD160\s0()\fR returns a pointer to the hash value. +.PP +\&\fBRIPEMD160_Init()\fR, \fBRIPEMD160_Update()\fR and \fBRIPEMD160_Final()\fR return 1 for +success, 0 otherwise. +.SH "NOTE" +.IX Header "NOTE" +Applications should use the higher level functions +\&\fBEVP_DigestInit\fR\|(3) etc. instead of calling these +functions directly. +.SH "CONFORMING TO" +.IX Header "CONFORMING TO" +\&\s-1ISO/IEC 10118\-3:2016\s0 Dedicated Hash-Function 1 (\s-1RIPEMD\-160\s0). +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBEVP_DigestInit\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RSA_blinding_on.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RSA_blinding_on.3 new file mode 100644 index 00000000..1f9633a1 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RSA_blinding_on.3 @@ -0,0 +1,176 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "RSA_BLINDING_ON 3" +.TH RSA_BLINDING_ON 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +RSA_blinding_on, RSA_blinding_off \- protect the RSA operation from timing attacks +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int RSA_blinding_on(RSA *rsa, BN_CTX *ctx); +\& +\& void RSA_blinding_off(RSA *rsa); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\s-1RSA\s0 is vulnerable to timing attacks. In a setup where attackers can +measure the time of \s-1RSA\s0 decryption or signature operations, blinding +must be used to protect the \s-1RSA\s0 operation from that attack. +.PP +\&\fBRSA_blinding_on()\fR turns blinding on for key \fBrsa\fR and generates a +random blinding factor. \fBctx\fR is \fB\s-1NULL\s0\fR or a pre-allocated and +initialized \fB\s-1BN_CTX\s0\fR. +.PP +\&\fBRSA_blinding_off()\fR turns blinding off and frees the memory used for +the blinding factor. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBRSA_blinding_on()\fR returns 1 on success, and 0 if an error occurred. +.PP +\&\fBRSA_blinding_off()\fR returns no value. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RSA_check_key.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RSA_check_key.3 new file mode 100644 index 00000000..9a48b418 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RSA_check_key.3 @@ -0,0 +1,213 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "RSA_CHECK_KEY 3" +.TH RSA_CHECK_KEY 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +RSA_check_key_ex, RSA_check_key \- validate private RSA keys +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int RSA_check_key_ex(RSA *rsa, BN_GENCB *cb); +\& +\& int RSA_check_key(RSA *rsa); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBRSA_check_key_ex()\fR function validates \s-1RSA\s0 keys. +It checks that \fBp\fR and \fBq\fR are +in fact prime, and that \fBn = p*q\fR. +.PP +It does not work on \s-1RSA\s0 public keys that have only the modulus +and public exponent elements populated. +It also checks that \fBd*e = 1 mod (p\-1*q\-1)\fR, +and that \fBdmp1\fR, \fBdmq1\fR and \fBiqmp\fR are set correctly or are \fB\s-1NULL\s0\fR. +It performs integrity checks on all +the \s-1RSA\s0 key material, so the \s-1RSA\s0 key structure must contain all the private +key data too. +Therefore, it cannot be used with any arbitrary \s-1RSA\s0 key object, +even if it is otherwise fit for regular \s-1RSA\s0 operation. +.PP +The \fBcb\fR parameter is a callback that will be invoked in the same +manner as \fBBN_is_prime_ex\fR\|(3). +.PP +\&\fBRSA_check_key()\fR is equivalent to \fBRSA_check_key_ex()\fR with a \s-1NULL\s0 \fBcb\fR. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBRSA_check_key_ex()\fR and \fBRSA_check_key()\fR +return 1 if \fBrsa\fR is a valid \s-1RSA\s0 key, and 0 otherwise. +They return \-1 if an error occurs while checking the key. +.PP +If the key is invalid or an error occurred, the reason code can be +obtained using \fBERR_get_error\fR\|(3). +.SH "NOTES" +.IX Header "NOTES" +Unlike most other \s-1RSA\s0 functions, this function does \fBnot\fR work +transparently with any underlying \s-1ENGINE\s0 implementation because it uses the +key data in the \s-1RSA\s0 structure directly. An \s-1ENGINE\s0 implementation can +override the way key data is stored and handled, and can even provide +support for \s-1HSM\s0 keys \- in which case the \s-1RSA\s0 structure may contain \fBno\fR +key data at all! If the \s-1ENGINE\s0 in question is only being used for +acceleration or analysis purposes, then in all likelihood the \s-1RSA\s0 key data +is complete and untouched, but this can't be assumed in the general case. +.SH "BUGS" +.IX Header "BUGS" +A method of verifying the \s-1RSA\s0 key using opaque \s-1RSA API\s0 functions might need +to be considered. Right now \fBRSA_check_key()\fR simply uses the \s-1RSA\s0 structure +elements directly, bypassing the \s-1RSA_METHOD\s0 table altogether (and +completely violating encapsulation and object-orientation in the process). +The best fix will probably be to introduce a \*(L"\fBcheck_key()\fR\*(R" handler to the +\&\s-1RSA_METHOD\s0 function table so that alternative implementations can also +provide their own verifiers. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBBN_is_prime_ex\fR\|(3), +\&\fBERR_get_error\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +\&\fBRSA_check_key_ex()\fR appeared after OpenSSL 1.0.2. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RSA_generate_key.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RSA_generate_key.3 new file mode 100644 index 00000000..49d633c3 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RSA_generate_key.3 @@ -0,0 +1,233 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "RSA_GENERATE_KEY 3" +.TH RSA_GENERATE_KEY 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +RSA_generate_key_ex, RSA_generate_key, RSA_generate_multi_prime_key \- generate RSA key pair +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int RSA_generate_key_ex(RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb); +\& int RSA_generate_multi_prime_key(RSA *rsa, int bits, int primes, BIGNUM *e, BN_GENCB *cb); +.Ve +.PP +Deprecated: +.PP +.Vb 4 +\& #if OPENSSL_API_COMPAT < 0x00908000L +\& RSA *RSA_generate_key(int bits, unsigned long e, +\& void (*callback)(int, int, void *), void *cb_arg); +\& #endif +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBRSA_generate_key_ex()\fR generates a 2\-prime \s-1RSA\s0 key pair and stores it in the +\&\fB\s-1RSA\s0\fR structure provided in \fBrsa\fR. The pseudo-random number generator must +be seeded prior to calling \fBRSA_generate_key_ex()\fR. +.PP +\&\fBRSA_generate_multi_prime_key()\fR generates a multi-prime \s-1RSA\s0 key pair and stores +it in the \fB\s-1RSA\s0\fR structure provided in \fBrsa\fR. The number of primes is given by +the \fBprimes\fR parameter. The random number generator must be seeded when +calling \fBRSA_generate_multi_prime_key()\fR. +If the automatic seeding or reseeding of the OpenSSL \s-1CSPRNG\s0 fails due to +external circumstances (see \s-1\fBRAND\s0\fR\|(7)), the operation will fail. +.PP +The modulus size will be of length \fBbits\fR, the number of primes to form the +modulus will be \fBprimes\fR, and the public exponent will be \fBe\fR. Key sizes +with \fBnum\fR < 1024 should be considered insecure. The exponent is an odd +number, typically 3, 17 or 65537. +.PP +In order to maintain adequate security level, the maximum number of permitted +\&\fBprimes\fR depends on modulus bit length: +.PP +.Vb 3 +\& <1024 | >=1024 | >=4096 | >=8192 +\& \-\-\-\-\-\-+\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\- +\& 2 | 3 | 4 | 5 +.Ve +.PP +A callback function may be used to provide feedback about the +progress of the key generation. If \fBcb\fR is not \fB\s-1NULL\s0\fR, it +will be called as follows using the \fBBN_GENCB_call()\fR function +described on the \fBBN_generate_prime\fR\|(3) page. +.PP +\&\fBRSA_generate_key()\fR is similar to \fBRSA_generate_key_ex()\fR but +expects an old-style callback function; see +\&\fBBN_generate_prime\fR\|(3) for information on the old-style callback. +.IP "\(bu" 2 +While a random prime number is generated, it is called as +described in \fBBN_generate_prime\fR\|(3). +.IP "\(bu" 2 +When the n\-th randomly generated prime is rejected as not +suitable for the key, \fBBN_GENCB_call(cb, 2, n)\fR is called. +.IP "\(bu" 2 +When a random p has been found with p\-1 relatively prime to \fBe\fR, +it is called as \fBBN_GENCB_call(cb, 3, 0)\fR. +.PP +The process is then repeated for prime q and other primes (if any) +with \fBBN_GENCB_call(cb, 3, i)\fR where \fBi\fR indicates the i\-th prime. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBRSA_generate_multi_prime_key()\fR returns 1 on success or 0 on error. +\&\fBRSA_generate_key_ex()\fR returns 1 on success or 0 on error. +The error codes can be obtained by \fBERR_get_error\fR\|(3). +.PP +\&\fBRSA_generate_key()\fR returns a pointer to the \s-1RSA\s0 structure or +\&\fB\s-1NULL\s0\fR if the key generation fails. +.SH "BUGS" +.IX Header "BUGS" +\&\fBBN_GENCB_call(cb, 2, x)\fR is used with two different meanings. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_get_error\fR\|(3), \fBRAND_bytes\fR\|(3), \fBBN_generate_prime\fR\|(3), +\&\s-1\fBRAND\s0\fR\|(7) +.SH "HISTORY" +.IX Header "HISTORY" +\&\fBRSA_generate_key()\fR was deprecated in OpenSSL 0.9.8; use +\&\fBRSA_generate_key_ex()\fR instead. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RSA_get0_key.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RSA_get0_key.3 new file mode 100644 index 00000000..b4a7c49c --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RSA_get0_key.3 @@ -0,0 +1,303 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "RSA_GET0_KEY 3" +.TH RSA_GET0_KEY 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +RSA_set0_key, RSA_set0_factors, RSA_set0_crt_params, RSA_get0_key, RSA_get0_factors, RSA_get0_crt_params, RSA_get0_n, RSA_get0_e, RSA_get0_d, RSA_get0_p, RSA_get0_q, RSA_get0_dmp1, RSA_get0_dmq1, RSA_get0_iqmp, RSA_get0_pss_params, RSA_clear_flags, RSA_test_flags, RSA_set_flags, RSA_get0_engine, RSA_get_multi_prime_extra_count, RSA_get0_multi_prime_factors, RSA_get0_multi_prime_crt_params, RSA_set0_multi_prime_params, RSA_get_version \&\- Routines for getting and setting data in an RSA object +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int RSA_set0_key(RSA *r, BIGNUM *n, BIGNUM *e, BIGNUM *d); +\& int RSA_set0_factors(RSA *r, BIGNUM *p, BIGNUM *q); +\& int RSA_set0_crt_params(RSA *r, BIGNUM *dmp1, BIGNUM *dmq1, BIGNUM *iqmp); +\& void RSA_get0_key(const RSA *r, +\& const BIGNUM **n, const BIGNUM **e, const BIGNUM **d); +\& void RSA_get0_factors(const RSA *r, const BIGNUM **p, const BIGNUM **q); +\& void RSA_get0_crt_params(const RSA *r, +\& const BIGNUM **dmp1, const BIGNUM **dmq1, +\& const BIGNUM **iqmp); +\& const BIGNUM *RSA_get0_n(const RSA *d); +\& const BIGNUM *RSA_get0_e(const RSA *d); +\& const BIGNUM *RSA_get0_d(const RSA *d); +\& const BIGNUM *RSA_get0_p(const RSA *d); +\& const BIGNUM *RSA_get0_q(const RSA *d); +\& const BIGNUM *RSA_get0_dmp1(const RSA *r); +\& const BIGNUM *RSA_get0_dmq1(const RSA *r); +\& const BIGNUM *RSA_get0_iqmp(const RSA *r); +\& const RSA_PSS_PARAMS *RSA_get0_pss_params(const RSA *r); +\& void RSA_clear_flags(RSA *r, int flags); +\& int RSA_test_flags(const RSA *r, int flags); +\& void RSA_set_flags(RSA *r, int flags); +\& ENGINE *RSA_get0_engine(RSA *r); +\& int RSA_get_multi_prime_extra_count(const RSA *r); +\& int RSA_get0_multi_prime_factors(const RSA *r, const BIGNUM *primes[]); +\& int RSA_get0_multi_prime_crt_params(const RSA *r, const BIGNUM *exps[], +\& const BIGNUM *coeffs[]); +\& int RSA_set0_multi_prime_params(RSA *r, BIGNUM *primes[], BIGNUM *exps[], +\& BIGNUM *coeffs[], int pnum); +\& int RSA_get_version(RSA *r); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +An \s-1RSA\s0 object contains the components for the public and private key, +\&\fBn\fR, \fBe\fR, \fBd\fR, \fBp\fR, \fBq\fR, \fBdmp1\fR, \fBdmq1\fR and \fBiqmp\fR. \fBn\fR is +the modulus common to both public and private key, \fBe\fR is the public +exponent and \fBd\fR is the private exponent. \fBp\fR, \fBq\fR, \fBdmp1\fR, +\&\fBdmq1\fR and \fBiqmp\fR are the factors for the second representation of a +private key (see PKCS#1 section 3 Key Types), where \fBp\fR and \fBq\fR are +the first and second factor of \fBn\fR and \fBdmp1\fR, \fBdmq1\fR and \fBiqmp\fR +are the exponents and coefficient for \s-1CRT\s0 calculations. +.PP +For multi-prime \s-1RSA\s0 (defined in \s-1RFC 8017\s0), there are also one or more +\&'triplet' in an \s-1RSA\s0 object. A triplet contains three members, \fBr\fR, \fBd\fR +and \fBt\fR. \fBr\fR is the additional prime besides \fBp\fR and \fBq\fR. \fBd\fR and +\&\fBt\fR are the exponent and coefficient for \s-1CRT\s0 calculations. +.PP +The \fBn\fR, \fBe\fR and \fBd\fR parameters can be obtained by calling +\&\fBRSA_get0_key()\fR. If they have not been set yet, then \fB*n\fR, \fB*e\fR and +\&\fB*d\fR will be set to \s-1NULL.\s0 Otherwise, they are set to pointers to +their respective values. These point directly to the internal +representations of the values and therefore should not be freed +by the caller. +.PP +The \fBn\fR, \fBe\fR and \fBd\fR parameter values can be set by calling +\&\fBRSA_set0_key()\fR and passing the new values for \fBn\fR, \fBe\fR and \fBd\fR as +parameters to the function. The values \fBn\fR and \fBe\fR must be non-NULL +the first time this function is called on a given \s-1RSA\s0 object. The +value \fBd\fR may be \s-1NULL.\s0 On subsequent calls any of these values may be +\&\s-1NULL\s0 which means the corresponding \s-1RSA\s0 field is left untouched. +Calling this function transfers the memory management of the values to +the \s-1RSA\s0 object, and therefore the values that have been passed in +should not be freed by the caller after this function has been called. +.PP +In a similar fashion, the \fBp\fR and \fBq\fR parameters can be obtained and +set with \fBRSA_get0_factors()\fR and \fBRSA_set0_factors()\fR, and the \fBdmp1\fR, +\&\fBdmq1\fR and \fBiqmp\fR parameters can be obtained and set with +\&\fBRSA_get0_crt_params()\fR and \fBRSA_set0_crt_params()\fR. +.PP +For \fBRSA_get0_key()\fR, \fBRSA_get0_factors()\fR, and \fBRSA_get0_crt_params()\fR, +\&\s-1NULL\s0 value \s-1BIGNUM\s0 ** output parameters are permitted. The functions +ignore \s-1NULL\s0 parameters but return values for other, non-NULL, parameters. +.PP +For multi-prime \s-1RSA,\s0 \fBRSA_get0_multi_prime_factors()\fR and \fBRSA_get0_multi_prime_params()\fR +can be used to obtain other primes and related \s-1CRT\s0 parameters. The +return values are stored in an array of \fB\s-1BIGNUM\s0 *\fR. \fBRSA_set0_multi_prime_params()\fR +sets a collect of multi-prime 'triplet' members (prime, exponent and coefficient) +into an \s-1RSA\s0 object. +.PP +Any of the values \fBn\fR, \fBe\fR, \fBd\fR, \fBp\fR, \fBq\fR, \fBdmp1\fR, \fBdmq1\fR, and \fBiqmp\fR can also be +retrieved separately by the corresponding function +\&\fBRSA_get0_n()\fR, \fBRSA_get0_e()\fR, \fBRSA_get0_d()\fR, \fBRSA_get0_p()\fR, \fBRSA_get0_q()\fR, +\&\fBRSA_get0_dmp1()\fR, \fBRSA_get0_dmq1()\fR, and \fBRSA_get0_iqmp()\fR, respectively. +.PP +\&\fBRSA_get0_pss_params()\fR is used to retrieve the RSA-PSS parameters. +.PP +\&\fBRSA_set_flags()\fR sets the flags in the \fBflags\fR parameter on the \s-1RSA\s0 +object. Multiple flags can be passed in one go (bitwise ORed together). +Any flags that are already set are left set. \fBRSA_test_flags()\fR tests to +see whether the flags passed in the \fBflags\fR parameter are currently +set in the \s-1RSA\s0 object. Multiple flags can be tested in one go. All +flags that are currently set are returned, or zero if none of the +flags are set. \fBRSA_clear_flags()\fR clears the specified flags within the +\&\s-1RSA\s0 object. +.PP +\&\fBRSA_get0_engine()\fR returns a handle to the \s-1ENGINE\s0 that has been set for +this \s-1RSA\s0 object, or \s-1NULL\s0 if no such \s-1ENGINE\s0 has been set. +.PP +\&\fBRSA_get_version()\fR returns the version of an \s-1RSA\s0 object \fBr\fR. +.SH "NOTES" +.IX Header "NOTES" +Values retrieved with \fBRSA_get0_key()\fR are owned by the \s-1RSA\s0 object used +in the call and may therefore \fInot\fR be passed to \fBRSA_set0_key()\fR. If +needed, duplicate the received value using \fBBN_dup()\fR and pass the +duplicate. The same applies to \fBRSA_get0_factors()\fR and \fBRSA_set0_factors()\fR +as well as \fBRSA_get0_crt_params()\fR and \fBRSA_set0_crt_params()\fR. +.PP +The caller should obtain the size by calling \fBRSA_get_multi_prime_extra_count()\fR +in advance and allocate sufficient buffer to store the return values before +calling \fBRSA_get0_multi_prime_factors()\fR and \fBRSA_get0_multi_prime_params()\fR. +.PP +\&\fBRSA_set0_multi_prime_params()\fR always clears the original multi-prime +triplets in \s-1RSA\s0 object \fBr\fR and assign the new set of triplets into it. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBRSA_set0_key()\fR, \fBRSA_set0_factors()\fR, \fBRSA_set0_crt_params()\fR and +\&\fBRSA_set0_multi_prime_params()\fR return 1 on success or 0 on failure. +.PP +\&\fBRSA_get0_n()\fR, \fBRSA_get0_e()\fR, \fBRSA_get0_d()\fR, \fBRSA_get0_p()\fR, \fBRSA_get0_q()\fR, +\&\fBRSA_get0_dmp1()\fR, \fBRSA_get0_dmq1()\fR, and \fBRSA_get0_iqmp()\fR +return the respective value. +.PP +\&\fBRSA_get0_multi_prime_factors()\fR and \fBRSA_get0_multi_prime_crt_params()\fR return +1 on success or 0 on failure. +.PP +\&\fBRSA_get_multi_prime_extra_count()\fR returns two less than the number of primes +in use, which is 0 for traditional \s-1RSA\s0 and the number of extra primes for +multi-prime \s-1RSA.\s0 +.PP +\&\fBRSA_get_version()\fR returns \fB\s-1RSA_ASN1_VERSION_MULTI\s0\fR for multi-prime \s-1RSA\s0 and +\&\fB\s-1RSA_ASN1_VERSION_DEFAULT\s0\fR for normal two-prime \s-1RSA,\s0 as defined in \s-1RFC 8017.\s0 +.PP +\&\fBRSA_test_flags()\fR returns the current state of the flags in the \s-1RSA\s0 object. +.PP +\&\fBRSA_get0_engine()\fR returns the \s-1ENGINE\s0 set for the \s-1RSA\s0 object or \s-1NULL\s0 if no +\&\s-1ENGINE\s0 has been set. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBRSA_new\fR\|(3), \fBRSA_size\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +The \fBRSA_get0_pss_params()\fR function was added in OpenSSL 1.1.1e. +.PP +The +\&\fBRSA_get_multi_prime_extra_count()\fR, \fBRSA_get0_multi_prime_factors()\fR, +\&\fBRSA_get0_multi_prime_crt_params()\fR, \fBRSA_set0_multi_prime_params()\fR, +and \fBRSA_get_version()\fR functions were added in OpenSSL 1.1.1. +.PP +Other functions described here were added in OpenSSL 1.1.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2016\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RSA_meth_new.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RSA_meth_new.3 new file mode 100644 index 00000000..d851f675 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RSA_meth_new.3 @@ -0,0 +1,382 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "RSA_METH_NEW 3" +.TH RSA_METH_NEW 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +RSA_meth_get0_app_data, RSA_meth_set0_app_data, RSA_meth_new, RSA_meth_free, RSA_meth_dup, RSA_meth_get0_name, RSA_meth_set1_name, RSA_meth_get_flags, RSA_meth_set_flags, RSA_meth_get_pub_enc, RSA_meth_set_pub_enc, RSA_meth_get_pub_dec, RSA_meth_set_pub_dec, RSA_meth_get_priv_enc, RSA_meth_set_priv_enc, RSA_meth_get_priv_dec, RSA_meth_set_priv_dec, RSA_meth_get_mod_exp, RSA_meth_set_mod_exp, RSA_meth_get_bn_mod_exp, RSA_meth_set_bn_mod_exp, RSA_meth_get_init, RSA_meth_set_init, RSA_meth_get_finish, RSA_meth_set_finish, RSA_meth_get_sign, RSA_meth_set_sign, RSA_meth_get_verify, RSA_meth_set_verify, RSA_meth_get_keygen, RSA_meth_set_keygen, RSA_meth_get_multi_prime_keygen, RSA_meth_set_multi_prime_keygen \&\- Routines to build up RSA methods +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& RSA_METHOD *RSA_meth_new(const char *name, int flags); +\& void RSA_meth_free(RSA_METHOD *meth); +\& +\& RSA_METHOD *RSA_meth_dup(const RSA_METHOD *meth); +\& +\& const char *RSA_meth_get0_name(const RSA_METHOD *meth); +\& int RSA_meth_set1_name(RSA_METHOD *meth, const char *name); +\& +\& int RSA_meth_get_flags(const RSA_METHOD *meth); +\& int RSA_meth_set_flags(RSA_METHOD *meth, int flags); +\& +\& void *RSA_meth_get0_app_data(const RSA_METHOD *meth); +\& int RSA_meth_set0_app_data(RSA_METHOD *meth, void *app_data); +\& +\& int (*RSA_meth_get_pub_enc(const RSA_METHOD *meth))(int flen, const unsigned char *from, +\& unsigned char *to, RSA *rsa, int padding); +\& int RSA_meth_set_pub_enc(RSA_METHOD *rsa, +\& int (*pub_enc)(int flen, const unsigned char *from, +\& unsigned char *to, RSA *rsa, +\& int padding)); +\& +\& int (*RSA_meth_get_pub_dec(const RSA_METHOD *meth)) +\& (int flen, const unsigned char *from, +\& unsigned char *to, RSA *rsa, int padding); +\& int RSA_meth_set_pub_dec(RSA_METHOD *rsa, +\& int (*pub_dec)(int flen, const unsigned char *from, +\& unsigned char *to, RSA *rsa, +\& int padding)); +\& +\& int (*RSA_meth_get_priv_enc(const RSA_METHOD *meth))(int flen, const unsigned char *from, +\& unsigned char *to, RSA *rsa, +\& int padding); +\& int RSA_meth_set_priv_enc(RSA_METHOD *rsa, +\& int (*priv_enc)(int flen, const unsigned char *from, +\& unsigned char *to, RSA *rsa, int padding)); +\& +\& int (*RSA_meth_get_priv_dec(const RSA_METHOD *meth))(int flen, const unsigned char *from, +\& unsigned char *to, RSA *rsa, +\& int padding); +\& int RSA_meth_set_priv_dec(RSA_METHOD *rsa, +\& int (*priv_dec)(int flen, const unsigned char *from, +\& unsigned char *to, RSA *rsa, int padding)); +\& +\& /* Can be null */ +\& int (*RSA_meth_get_mod_exp(const RSA_METHOD *meth))(BIGNUM *r0, const BIGNUM *i, +\& RSA *rsa, BN_CTX *ctx); +\& int RSA_meth_set_mod_exp(RSA_METHOD *rsa, +\& int (*mod_exp)(BIGNUM *r0, const BIGNUM *i, RSA *rsa, +\& BN_CTX *ctx)); +\& +\& /* Can be null */ +\& int (*RSA_meth_get_bn_mod_exp(const RSA_METHOD *meth))(BIGNUM *r, const BIGNUM *a, +\& const BIGNUM *p, const BIGNUM *m, +\& BN_CTX *ctx, BN_MONT_CTX *m_ctx); +\& int RSA_meth_set_bn_mod_exp(RSA_METHOD *rsa, +\& int (*bn_mod_exp)(BIGNUM *r, const BIGNUM *a, +\& const BIGNUM *p, const BIGNUM *m, +\& BN_CTX *ctx, BN_MONT_CTX *m_ctx)); +\& +\& /* called at new */ +\& int (*RSA_meth_get_init(const RSA_METHOD *meth) (RSA *rsa); +\& int RSA_meth_set_init(RSA_METHOD *rsa, int (*init (RSA *rsa)); +\& +\& /* called at free */ +\& int (*RSA_meth_get_finish(const RSA_METHOD *meth))(RSA *rsa); +\& int RSA_meth_set_finish(RSA_METHOD *rsa, int (*finish)(RSA *rsa)); +\& +\& int (*RSA_meth_get_sign(const RSA_METHOD *meth))(int type, const unsigned char *m, +\& unsigned int m_length, +\& unsigned char *sigret, +\& unsigned int *siglen, const RSA *rsa); +\& int RSA_meth_set_sign(RSA_METHOD *rsa, +\& int (*sign)(int type, const unsigned char *m, +\& unsigned int m_length, unsigned char *sigret, +\& unsigned int *siglen, const RSA *rsa)); +\& +\& int (*RSA_meth_get_verify(const RSA_METHOD *meth))(int dtype, const unsigned char *m, +\& unsigned int m_length, +\& const unsigned char *sigbuf, +\& unsigned int siglen, const RSA *rsa); +\& int RSA_meth_set_verify(RSA_METHOD *rsa, +\& int (*verify)(int dtype, const unsigned char *m, +\& unsigned int m_length, +\& const unsigned char *sigbuf, +\& unsigned int siglen, const RSA *rsa)); +\& +\& int (*RSA_meth_get_keygen(const RSA_METHOD *meth))(RSA *rsa, int bits, BIGNUM *e, +\& BN_GENCB *cb); +\& int RSA_meth_set_keygen(RSA_METHOD *rsa, +\& int (*keygen)(RSA *rsa, int bits, BIGNUM *e, +\& BN_GENCB *cb)); +\& +\& int (*RSA_meth_get_multi_prime_keygen(const RSA_METHOD *meth))(RSA *rsa, int bits, +\& int primes, BIGNUM *e, +\& BN_GENCB *cb); +\& +\& int RSA_meth_set_multi_prime_keygen(RSA_METHOD *meth, +\& int (*keygen) (RSA *rsa, int bits, +\& int primes, BIGNUM *e, +\& BN_GENCB *cb)); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fB\s-1RSA_METHOD\s0\fR type is a structure used for the provision of custom +\&\s-1RSA\s0 implementations. It provides a set of functions used by OpenSSL +for the implementation of the various \s-1RSA\s0 capabilities. See the rsa +page for more information. +.PP +\&\fBRSA_meth_new()\fR creates a new \fB\s-1RSA_METHOD\s0\fR structure. It should be +given a unique \fBname\fR and a set of \fBflags\fR. The \fBname\fR should be a +\&\s-1NULL\s0 terminated string, which will be duplicated and stored in the +\&\fB\s-1RSA_METHOD\s0\fR object. It is the callers responsibility to free the +original string. The flags will be used during the construction of a +new \fB\s-1RSA\s0\fR object based on this \fB\s-1RSA_METHOD\s0\fR. Any new \fB\s-1RSA\s0\fR object +will have those flags set by default. +.PP +\&\fBRSA_meth_dup()\fR creates a duplicate copy of the \fB\s-1RSA_METHOD\s0\fR object +passed as a parameter. This might be useful for creating a new +\&\fB\s-1RSA_METHOD\s0\fR based on an existing one, but with some differences. +.PP +\&\fBRSA_meth_free()\fR destroys an \fB\s-1RSA_METHOD\s0\fR structure and frees up any +memory associated with it. +.PP +\&\fBRSA_meth_get0_name()\fR will return a pointer to the name of this +\&\s-1RSA_METHOD.\s0 This is a pointer to the internal name string and so +should not be freed by the caller. \fBRSA_meth_set1_name()\fR sets the name +of the \s-1RSA_METHOD\s0 to \fBname\fR. The string is duplicated and the copy is +stored in the \s-1RSA_METHOD\s0 structure, so the caller remains responsible +for freeing the memory associated with the name. +.PP +\&\fBRSA_meth_get_flags()\fR returns the current value of the flags associated +with this \s-1RSA_METHOD.\s0 \fBRSA_meth_set_flags()\fR provides the ability to set +these flags. +.PP +The functions \fBRSA_meth_get0_app_data()\fR and \fBRSA_meth_set0_app_data()\fR +provide the ability to associate implementation specific data with the +\&\s-1RSA_METHOD.\s0 It is the application's responsibility to free this data +before the \s-1RSA_METHOD\s0 is freed via a call to \fBRSA_meth_free()\fR. +.PP +\&\fBRSA_meth_get_sign()\fR and \fBRSA_meth_set_sign()\fR get and set the function +used for creating an \s-1RSA\s0 signature respectively. This function will be +called in response to the application calling \fBRSA_sign()\fR. The +parameters for the function have the same meaning as for \fBRSA_sign()\fR. +.PP +\&\fBRSA_meth_get_verify()\fR and \fBRSA_meth_set_verify()\fR get and set the +function used for verifying an \s-1RSA\s0 signature respectively. This +function will be called in response to the application calling +\&\fBRSA_verify()\fR. The parameters for the function have the same meaning as +for \fBRSA_verify()\fR. +.PP +\&\fBRSA_meth_get_mod_exp()\fR and \fBRSA_meth_set_mod_exp()\fR get and set the +function used for \s-1CRT\s0 computations. +.PP +\&\fBRSA_meth_get_bn_mod_exp()\fR and \fBRSA_meth_set_bn_mod_exp()\fR get and set +the function used for \s-1CRT\s0 computations, specifically the following +value: +.PP +.Vb 1 +\& r = a ^ p mod m +.Ve +.PP +Both the \fBmod_exp()\fR and \fBbn_mod_exp()\fR functions are called by the +default OpenSSL method during encryption, decryption, signing and +verification. +.PP +\&\fBRSA_meth_get_init()\fR and \fBRSA_meth_set_init()\fR get and set the function +used for creating a new \s-1RSA\s0 instance respectively. This function will +be called in response to the application calling \fBRSA_new()\fR (if the +current default \s-1RSA_METHOD\s0 is this one) or \fBRSA_new_method()\fR. The +\&\fBRSA_new()\fR and \fBRSA_new_method()\fR functions will allocate the memory for +the new \s-1RSA\s0 object, and a pointer to this newly allocated structure +will be passed as a parameter to the function. This function may be +\&\s-1NULL.\s0 +.PP +\&\fBRSA_meth_get_finish()\fR and \fBRSA_meth_set_finish()\fR get and set the +function used for destroying an instance of an \s-1RSA\s0 object respectively. +This function will be called in response to the application calling +\&\fBRSA_free()\fR. A pointer to the \s-1RSA\s0 to be destroyed is passed as a +parameter. The destroy function should be used for \s-1RSA\s0 implementation +specific clean up. The memory for the \s-1RSA\s0 itself should not be freed +by this function. This function may be \s-1NULL.\s0 +.PP +\&\fBRSA_meth_get_keygen()\fR and \fBRSA_meth_set_keygen()\fR get and set the +function used for generating a new \s-1RSA\s0 key pair respectively. This +function will be called in response to the application calling +\&\fBRSA_generate_key_ex()\fR. The parameter for the function has the same +meaning as for \fBRSA_generate_key_ex()\fR. +.PP +\&\fBRSA_meth_get_multi_prime_keygen()\fR and \fBRSA_meth_set_multi_prime_keygen()\fR get +and set the function used for generating a new multi-prime \s-1RSA\s0 key pair +respectively. This function will be called in response to the application calling +\&\fBRSA_generate_multi_prime_key()\fR. The parameter for the function has the same +meaning as for \fBRSA_generate_multi_prime_key()\fR. +.PP +\&\fBRSA_meth_get_pub_enc()\fR, \fBRSA_meth_set_pub_enc()\fR, +\&\fBRSA_meth_get_pub_dec()\fR, \fBRSA_meth_set_pub_dec()\fR, +\&\fBRSA_meth_get_priv_enc()\fR, \fBRSA_meth_set_priv_enc()\fR, +\&\fBRSA_meth_get_priv_dec()\fR, \fBRSA_meth_set_priv_dec()\fR get and set the +functions used for public and private key encryption and decryption. +These functions will be called in response to the application calling +\&\fBRSA_public_encrypt()\fR, \fBRSA_private_decrypt()\fR, \fBRSA_private_encrypt()\fR and +\&\fBRSA_public_decrypt()\fR and take the same parameters as those. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBRSA_meth_new()\fR and \fBRSA_meth_dup()\fR return the newly allocated +\&\s-1RSA_METHOD\s0 object or \s-1NULL\s0 on failure. +.PP +\&\fBRSA_meth_get0_name()\fR and \fBRSA_meth_get_flags()\fR return the name and +flags associated with the \s-1RSA_METHOD\s0 respectively. +.PP +All other RSA_meth_get_*() functions return the appropriate function +pointer that has been set in the \s-1RSA_METHOD,\s0 or \s-1NULL\s0 if no such +pointer has yet been set. +.PP +RSA_meth_set1_name and all RSA_meth_set_*() functions return 1 on +success or 0 on failure. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBRSA_new\fR\|(3), \fBRSA_generate_key_ex\fR\|(3), \fBRSA_sign\fR\|(3), +\&\fBRSA_set_method\fR\|(3), \fBRSA_size\fR\|(3), \fBRSA_get0_key\fR\|(3), +\&\fBRSA_generate_multi_prime_key\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +\&\fBRSA_meth_get_multi_prime_keygen()\fR and \fBRSA_meth_set_multi_prime_keygen()\fR were +added in OpenSSL 1.1.1. +.PP +Other functions described here were added in OpenSSL 1.1.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2016\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RSA_new.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RSA_new.3 new file mode 100644 index 00000000..f39ddfe7 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RSA_new.3 @@ -0,0 +1,179 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "RSA_NEW 3" +.TH RSA_NEW 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +RSA_new, RSA_free \- allocate and free RSA objects +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& RSA *RSA_new(void); +\& +\& void RSA_free(RSA *rsa); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBRSA_new()\fR allocates and initializes an \fB\s-1RSA\s0\fR structure. It is equivalent to +calling RSA_new_method(\s-1NULL\s0). +.PP +\&\fBRSA_free()\fR frees the \fB\s-1RSA\s0\fR structure and its components. The key is +erased before the memory is returned to the system. +If \fBrsa\fR is \s-1NULL\s0 nothing is done. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +If the allocation fails, \fBRSA_new()\fR returns \fB\s-1NULL\s0\fR and sets an error +code that can be obtained by \fBERR_get_error\fR\|(3). Otherwise it returns +a pointer to the newly allocated structure. +.PP +\&\fBRSA_free()\fR returns no value. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_get_error\fR\|(3), +\&\fBRSA_generate_key\fR\|(3), +\&\fBRSA_new_method\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RSA_padding_add_PKCS1_type_1.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RSA_padding_add_PKCS1_type_1.3 new file mode 100644 index 00000000..c1c10b61 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RSA_padding_add_PKCS1_type_1.3 @@ -0,0 +1,276 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "RSA_PADDING_ADD_PKCS1_TYPE_1 3" +.TH RSA_PADDING_ADD_PKCS1_TYPE_1 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +RSA_padding_add_PKCS1_type_1, RSA_padding_check_PKCS1_type_1, RSA_padding_add_PKCS1_type_2, RSA_padding_check_PKCS1_type_2, RSA_padding_add_PKCS1_OAEP, RSA_padding_check_PKCS1_OAEP, RSA_padding_add_PKCS1_OAEP_mgf1, RSA_padding_check_PKCS1_OAEP_mgf1, RSA_padding_add_SSLv23, RSA_padding_check_SSLv23, RSA_padding_add_none, RSA_padding_check_none \- asymmetric encryption padding +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int RSA_padding_add_PKCS1_type_1(unsigned char *to, int tlen, +\& const unsigned char *f, int fl); +\& +\& int RSA_padding_check_PKCS1_type_1(unsigned char *to, int tlen, +\& const unsigned char *f, int fl, int rsa_len); +\& +\& int RSA_padding_add_PKCS1_type_2(unsigned char *to, int tlen, +\& const unsigned char *f, int fl); +\& +\& int RSA_padding_check_PKCS1_type_2(unsigned char *to, int tlen, +\& const unsigned char *f, int fl, int rsa_len); +\& +\& int RSA_padding_add_PKCS1_OAEP(unsigned char *to, int tlen, +\& const unsigned char *f, int fl, +\& const unsigned char *p, int pl); +\& +\& int RSA_padding_check_PKCS1_OAEP(unsigned char *to, int tlen, +\& const unsigned char *f, int fl, int rsa_len, +\& const unsigned char *p, int pl); +\& +\& int RSA_padding_add_PKCS1_OAEP_mgf1(unsigned char *to, int tlen, +\& const unsigned char *f, int fl, +\& const unsigned char *p, int pl, +\& const EVP_MD *md, const EVP_MD *mgf1md); +\& +\& int RSA_padding_check_PKCS1_OAEP_mgf1(unsigned char *to, int tlen, +\& const unsigned char *f, int fl, int rsa_len, +\& const unsigned char *p, int pl, +\& const EVP_MD *md, const EVP_MD *mgf1md); +\& +\& int RSA_padding_add_SSLv23(unsigned char *to, int tlen, +\& const unsigned char *f, int fl); +\& +\& int RSA_padding_check_SSLv23(unsigned char *to, int tlen, +\& const unsigned char *f, int fl, int rsa_len); +\& +\& int RSA_padding_add_none(unsigned char *to, int tlen, +\& const unsigned char *f, int fl); +\& +\& int RSA_padding_check_none(unsigned char *to, int tlen, +\& const unsigned char *f, int fl, int rsa_len); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fBRSA_padding_xxx_xxx()\fR functions are called from the \s-1RSA\s0 encrypt, +decrypt, sign and verify functions. Normally they should not be called +from application programs. +.PP +However, they can also be called directly to implement padding for other +asymmetric ciphers. \fBRSA_padding_add_PKCS1_OAEP()\fR and +\&\fBRSA_padding_check_PKCS1_OAEP()\fR may be used in an application combined +with \fB\s-1RSA_NO_PADDING\s0\fR in order to implement \s-1OAEP\s0 with an encoding +parameter. +.PP +\&\fBRSA_padding_add_xxx()\fR encodes \fBfl\fR bytes from \fBf\fR so as to fit into +\&\fBtlen\fR bytes and stores the result at \fBto\fR. An error occurs if \fBfl\fR +does not meet the size requirements of the encoding method. +.PP +The following encoding methods are implemented: +.IP "PKCS1_type_1" 4 +.IX Item "PKCS1_type_1" +\&\s-1PKCS\s0 #1 v2.0 EMSA\-PKCS1\-v1_5 (\s-1PKCS\s0 #1 v1.5 block type 1); used for signatures +.IP "PKCS1_type_2" 4 +.IX Item "PKCS1_type_2" +\&\s-1PKCS\s0 #1 v2.0 EME\-PKCS1\-v1_5 (\s-1PKCS\s0 #1 v1.5 block type 2) +.IP "\s-1PKCS1_OAEP\s0" 4 +.IX Item "PKCS1_OAEP" +\&\s-1PKCS\s0 #1 v2.0 EME-OAEP +.IP "SSLv23" 4 +.IX Item "SSLv23" +\&\s-1PKCS\s0 #1 EME\-PKCS1\-v1_5 with SSL-specific modification +.IP "none" 4 +.IX Item "none" +simply copy the data +.PP +The random number generator must be seeded prior to calling +\&\fBRSA_padding_add_xxx()\fR. +If the automatic seeding or reseeding of the OpenSSL \s-1CSPRNG\s0 fails due to +external circumstances (see \s-1\fBRAND\s0\fR\|(7)), the operation will fail. +.PP +\&\fBRSA_padding_check_xxx()\fR verifies that the \fBfl\fR bytes at \fBf\fR contain +a valid encoding for a \fBrsa_len\fR byte \s-1RSA\s0 key in the respective +encoding method and stores the recovered data of at most \fBtlen\fR bytes +(for \fB\s-1RSA_NO_PADDING\s0\fR: of size \fBtlen\fR) +at \fBto\fR. +.PP +For \fBRSA_padding_xxx_OAEP()\fR, \fBp\fR points to the encoding parameter +of length \fBpl\fR. \fBp\fR may be \fB\s-1NULL\s0\fR if \fBpl\fR is 0. +.PP +For \fBRSA_padding_xxx_OAEP_mgf1()\fR, \fBmd\fR points to the md hash, +if \fBmd\fR is \fB\s-1NULL\s0\fR that means md=sha1, and \fBmgf1md\fR points to +the mgf1 hash, if \fBmgf1md\fR is \fB\s-1NULL\s0\fR that means mgf1md=md. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +The \fBRSA_padding_add_xxx()\fR functions return 1 on success, 0 on error. +The \fBRSA_padding_check_xxx()\fR functions return the length of the +recovered data, \-1 on error. Error codes can be obtained by calling +\&\fBERR_get_error\fR\|(3). +.SH "WARNINGS" +.IX Header "WARNINGS" +The result of \fBRSA_padding_check_PKCS1_type_2()\fR is a very sensitive +information which can potentially be used to mount a Bleichenbacher +padding oracle attack. This is an inherent weakness in the \s-1PKCS\s0 #1 +v1.5 padding design. Prefer \s-1PKCS1_OAEP\s0 padding. If that is not +possible, the result of \fBRSA_padding_check_PKCS1_type_2()\fR should be +checked in constant time if it matches the expected length of the +plaintext and additionally some application specific consistency +checks on the plaintext need to be performed in constant time. +If the plaintext is rejected it must be kept secret which of the +checks caused the application to reject the message. +Do not remove the zero-padding from the decrypted raw \s-1RSA\s0 data +which was computed by \fBRSA_private_decrypt()\fR with \fB\s-1RSA_NO_PADDING\s0\fR, +as this would create a small timing side channel which could be +used to mount a Bleichenbacher attack against any padding mode +including \s-1PKCS1_OAEP.\s0 +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBRSA_public_encrypt\fR\|(3), +\&\fBRSA_private_decrypt\fR\|(3), +\&\fBRSA_sign\fR\|(3), \fBRSA_verify\fR\|(3), +\&\s-1\fBRAND\s0\fR\|(7) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RSA_print.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RSA_print.3 new file mode 100644 index 00000000..895ebe65 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RSA_print.3 @@ -0,0 +1,182 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "RSA_PRINT 3" +.TH RSA_PRINT 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +RSA_print, RSA_print_fp, DSAparams_print, DSAparams_print_fp, DSA_print, DSA_print_fp, DHparams_print, DHparams_print_fp \- print cryptographic parameters +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int RSA_print(BIO *bp, RSA *x, int offset); +\& int RSA_print_fp(FILE *fp, RSA *x, int offset); +\& +\& #include +\& +\& int DSAparams_print(BIO *bp, DSA *x); +\& int DSAparams_print_fp(FILE *fp, DSA *x); +\& int DSA_print(BIO *bp, DSA *x, int offset); +\& int DSA_print_fp(FILE *fp, DSA *x, int offset); +\& +\& #include +\& +\& int DHparams_print(BIO *bp, DH *x); +\& int DHparams_print_fp(FILE *fp, DH *x); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +A human-readable hexadecimal output of the components of the \s-1RSA\s0 +key, \s-1DSA\s0 parameters or key or \s-1DH\s0 parameters is printed to \fBbp\fR or \fBfp\fR. +.PP +The output lines are indented by \fBoffset\fR spaces. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +These functions return 1 on success, 0 on error. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBBN_bn2bin\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RSA_private_encrypt.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RSA_private_encrypt.3 new file mode 100644 index 00000000..2b1121c0 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RSA_private_encrypt.3 @@ -0,0 +1,200 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "RSA_PRIVATE_ENCRYPT 3" +.TH RSA_PRIVATE_ENCRYPT 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +RSA_private_encrypt, RSA_public_decrypt \- low level signature operations +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int RSA_private_encrypt(int flen, unsigned char *from, +\& unsigned char *to, RSA *rsa, int padding); +\& +\& int RSA_public_decrypt(int flen, unsigned char *from, +\& unsigned char *to, RSA *rsa, int padding); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +These functions handle \s-1RSA\s0 signatures at a low level. +.PP +\&\fBRSA_private_encrypt()\fR signs the \fBflen\fR bytes at \fBfrom\fR (usually a +message digest with an algorithm identifier) using the private key +\&\fBrsa\fR and stores the signature in \fBto\fR. \fBto\fR must point to +\&\fBRSA_size(rsa)\fR bytes of memory. +.PP +\&\fBpadding\fR denotes one of the following modes: +.IP "\s-1RSA_PKCS1_PADDING\s0" 4 +.IX Item "RSA_PKCS1_PADDING" +\&\s-1PKCS\s0 #1 v1.5 padding. This function does not handle the +\&\fBalgorithmIdentifier\fR specified in \s-1PKCS\s0 #1. When generating or +verifying \s-1PKCS\s0 #1 signatures, \fBRSA_sign\fR\|(3) and \fBRSA_verify\fR\|(3) should be +used. +.IP "\s-1RSA_NO_PADDING\s0" 4 +.IX Item "RSA_NO_PADDING" +Raw \s-1RSA\s0 signature. This mode should \fIonly\fR be used to implement +cryptographically sound padding modes in the application code. +Signing user data directly with \s-1RSA\s0 is insecure. +.PP +\&\fBRSA_public_decrypt()\fR recovers the message digest from the \fBflen\fR +bytes long signature at \fBfrom\fR using the signer's public key +\&\fBrsa\fR. \fBto\fR must point to a memory section large enough to hold the +message digest (which is smaller than \fBRSA_size(rsa) \- +11\fR). \fBpadding\fR is the padding mode that was used to sign the data. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBRSA_private_encrypt()\fR returns the size of the signature (i.e., +RSA_size(rsa)). \fBRSA_public_decrypt()\fR returns the size of the +recovered message digest. +.PP +On error, \-1 is returned; the error codes can be +obtained by \fBERR_get_error\fR\|(3). +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_get_error\fR\|(3), +\&\fBRSA_sign\fR\|(3), \fBRSA_verify\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RSA_public_encrypt.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RSA_public_encrypt.3 new file mode 100644 index 00000000..23adf064 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RSA_public_encrypt.3 @@ -0,0 +1,231 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "RSA_PUBLIC_ENCRYPT 3" +.TH RSA_PUBLIC_ENCRYPT 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +RSA_public_encrypt, RSA_private_decrypt \- RSA public key cryptography +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int RSA_public_encrypt(int flen, const unsigned char *from, +\& unsigned char *to, RSA *rsa, int padding); +\& +\& int RSA_private_decrypt(int flen, const unsigned char *from, +\& unsigned char *to, RSA *rsa, int padding); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBRSA_public_encrypt()\fR encrypts the \fBflen\fR bytes at \fBfrom\fR (usually a +session key) using the public key \fBrsa\fR and stores the ciphertext in +\&\fBto\fR. \fBto\fR must point to RSA_size(\fBrsa\fR) bytes of memory. +.PP +\&\fBpadding\fR denotes one of the following modes: +.IP "\s-1RSA_PKCS1_PADDING\s0" 4 +.IX Item "RSA_PKCS1_PADDING" +\&\s-1PKCS\s0 #1 v1.5 padding. This currently is the most widely used mode. +However, it is highly recommended to use \s-1RSA_PKCS1_OAEP_PADDING\s0 in +new applications. \s-1SEE WARNING BELOW.\s0 +.IP "\s-1RSA_PKCS1_OAEP_PADDING\s0" 4 +.IX Item "RSA_PKCS1_OAEP_PADDING" +EME-OAEP as defined in \s-1PKCS\s0 #1 v2.0 with \s-1SHA\-1, MGF1\s0 and an empty +encoding parameter. This mode is recommended for all new applications. +.IP "\s-1RSA_SSLV23_PADDING\s0" 4 +.IX Item "RSA_SSLV23_PADDING" +\&\s-1PKCS\s0 #1 v1.5 padding with an SSL-specific modification that denotes +that the server is \s-1SSL3\s0 capable. +.IP "\s-1RSA_NO_PADDING\s0" 4 +.IX Item "RSA_NO_PADDING" +Raw \s-1RSA\s0 encryption. This mode should \fIonly\fR be used to implement +cryptographically sound padding modes in the application code. +Encrypting user data directly with \s-1RSA\s0 is insecure. +.PP +\&\fBflen\fR must not be more than RSA_size(\fBrsa\fR) \- 11 for the \s-1PKCS\s0 #1 v1.5 +based padding modes, not more than RSA_size(\fBrsa\fR) \- 42 for +\&\s-1RSA_PKCS1_OAEP_PADDING\s0 and exactly RSA_size(\fBrsa\fR) for \s-1RSA_NO_PADDING.\s0 +When a padding mode other than \s-1RSA_NO_PADDING\s0 is in use, then +\&\fBRSA_public_encrypt()\fR will include some random bytes into the ciphertext +and therefore the ciphertext will be different each time, even if the +plaintext and the public key are exactly identical. +The returned ciphertext in \fBto\fR will always be zero padded to exactly +RSA_size(\fBrsa\fR) bytes. +\&\fBto\fR and \fBfrom\fR may overlap. +.PP +\&\fBRSA_private_decrypt()\fR decrypts the \fBflen\fR bytes at \fBfrom\fR using the +private key \fBrsa\fR and stores the plaintext in \fBto\fR. \fBflen\fR should +be equal to RSA_size(\fBrsa\fR) but may be smaller, when leading zero +bytes are in the ciphertext. Those are not important and may be removed, +but \fBRSA_public_encrypt()\fR does not do that. \fBto\fR must point +to a memory section large enough to hold the maximal possible decrypted +data (which is equal to RSA_size(\fBrsa\fR) for \s-1RSA_NO_PADDING,\s0 +RSA_size(\fBrsa\fR) \- 11 for the \s-1PKCS\s0 #1 v1.5 based padding modes and +RSA_size(\fBrsa\fR) \- 42 for \s-1RSA_PKCS1_OAEP_PADDING\s0). +\&\fBpadding\fR is the padding mode that was used to encrypt the data. +\&\fBto\fR and \fBfrom\fR may overlap. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBRSA_public_encrypt()\fR returns the size of the encrypted data (i.e., +RSA_size(\fBrsa\fR)). \fBRSA_private_decrypt()\fR returns the size of the +recovered plaintext. A return value of 0 is not an error and +means only that the plaintext was empty. +.PP +On error, \-1 is returned; the error codes can be +obtained by \fBERR_get_error\fR\|(3). +.SH "WARNINGS" +.IX Header "WARNINGS" +Decryption failures in the \s-1RSA_PKCS1_PADDING\s0 mode leak information +which can potentially be used to mount a Bleichenbacher padding oracle +attack. This is an inherent weakness in the \s-1PKCS\s0 #1 v1.5 padding +design. Prefer \s-1RSA_PKCS1_OAEP_PADDING.\s0 +.SH "CONFORMING TO" +.IX Header "CONFORMING TO" +\&\s-1SSL, PKCS\s0 #1 v2.0 +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_get_error\fR\|(3), \fBRAND_bytes\fR\|(3), +\&\fBRSA_size\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RSA_set_method.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RSA_set_method.3 new file mode 100644 index 00000000..f38fd8d9 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RSA_set_method.3 @@ -0,0 +1,315 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "RSA_SET_METHOD 3" +.TH RSA_SET_METHOD 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +RSA_set_default_method, RSA_get_default_method, RSA_set_method, RSA_get_method, RSA_PKCS1_OpenSSL, RSA_flags, RSA_new_method \- select RSA method +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& void RSA_set_default_method(const RSA_METHOD *meth); +\& +\& RSA_METHOD *RSA_get_default_method(void); +\& +\& int RSA_set_method(RSA *rsa, const RSA_METHOD *meth); +\& +\& RSA_METHOD *RSA_get_method(const RSA *rsa); +\& +\& RSA_METHOD *RSA_PKCS1_OpenSSL(void); +\& +\& int RSA_flags(const RSA *rsa); +\& +\& RSA *RSA_new_method(ENGINE *engine); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +An \fB\s-1RSA_METHOD\s0\fR specifies the functions that OpenSSL uses for \s-1RSA\s0 +operations. By modifying the method, alternative implementations such as +hardware accelerators may be used. \s-1IMPORTANT:\s0 See the \s-1NOTES\s0 section for +important information about how these \s-1RSA API\s0 functions are affected by the +use of \fB\s-1ENGINE\s0\fR \s-1API\s0 calls. +.PP +Initially, the default \s-1RSA_METHOD\s0 is the OpenSSL internal implementation, +as returned by \fBRSA_PKCS1_OpenSSL()\fR. +.PP +\&\fBRSA_set_default_method()\fR makes \fBmeth\fR the default method for all \s-1RSA\s0 +structures created later. +\&\fB\s-1NB\s0\fR: This is true only whilst no \s-1ENGINE\s0 has +been set as a default for \s-1RSA,\s0 so this function is no longer recommended. +This function is not thread-safe and should not be called at the same time +as other OpenSSL functions. +.PP +\&\fBRSA_get_default_method()\fR returns a pointer to the current default +\&\s-1RSA_METHOD.\s0 However, the meaningfulness of this result is dependent on +whether the \s-1ENGINE API\s0 is being used, so this function is no longer +recommended. +.PP +\&\fBRSA_set_method()\fR selects \fBmeth\fR to perform all operations using the key +\&\fBrsa\fR. This will replace the \s-1RSA_METHOD\s0 used by the \s-1RSA\s0 key and if the +previous method was supplied by an \s-1ENGINE,\s0 the handle to that \s-1ENGINE\s0 will +be released during the change. It is possible to have \s-1RSA\s0 keys that only +work with certain \s-1RSA_METHOD\s0 implementations (eg. from an \s-1ENGINE\s0 module +that supports embedded hardware-protected keys), and in such cases +attempting to change the \s-1RSA_METHOD\s0 for the key can have unexpected +results. +.PP +\&\fBRSA_get_method()\fR returns a pointer to the \s-1RSA_METHOD\s0 being used by \fBrsa\fR. +This method may or may not be supplied by an \s-1ENGINE\s0 implementation, but if +it is, the return value can only be guaranteed to be valid as long as the +\&\s-1RSA\s0 key itself is valid and does not have its implementation changed by +\&\fBRSA_set_method()\fR. +.PP +\&\fBRSA_flags()\fR returns the \fBflags\fR that are set for \fBrsa\fR's current +\&\s-1RSA_METHOD.\s0 See the \s-1BUGS\s0 section. +.PP +\&\fBRSA_new_method()\fR allocates and initializes an \s-1RSA\s0 structure so that +\&\fBengine\fR will be used for the \s-1RSA\s0 operations. If \fBengine\fR is \s-1NULL,\s0 the +default \s-1ENGINE\s0 for \s-1RSA\s0 operations is used, and if no default \s-1ENGINE\s0 is set, +the \s-1RSA_METHOD\s0 controlled by \fBRSA_set_default_method()\fR is used. +.PP +\&\fBRSA_flags()\fR returns the \fBflags\fR that are set for \fBrsa\fR's current method. +.PP +\&\fBRSA_new_method()\fR allocates and initializes an \fB\s-1RSA\s0\fR structure so that +\&\fBmethod\fR will be used for the \s-1RSA\s0 operations. If \fBmethod\fR is \fB\s-1NULL\s0\fR, +the default method is used. +.SH "THE RSA_METHOD STRUCTURE" +.IX Header "THE RSA_METHOD STRUCTURE" +.Vb 4 +\& typedef struct rsa_meth_st +\& { +\& /* name of the implementation */ +\& const char *name; +\& +\& /* encrypt */ +\& int (*rsa_pub_enc)(int flen, unsigned char *from, +\& unsigned char *to, RSA *rsa, int padding); +\& +\& /* verify arbitrary data */ +\& int (*rsa_pub_dec)(int flen, unsigned char *from, +\& unsigned char *to, RSA *rsa, int padding); +\& +\& /* sign arbitrary data */ +\& int (*rsa_priv_enc)(int flen, unsigned char *from, +\& unsigned char *to, RSA *rsa, int padding); +\& +\& /* decrypt */ +\& int (*rsa_priv_dec)(int flen, unsigned char *from, +\& unsigned char *to, RSA *rsa, int padding); +\& +\& /* compute r0 = r0 ^ I mod rsa\->n (May be NULL for some implementations) */ +\& int (*rsa_mod_exp)(BIGNUM *r0, BIGNUM *I, RSA *rsa); +\& +\& /* compute r = a ^ p mod m (May be NULL for some implementations) */ +\& int (*bn_mod_exp)(BIGNUM *r, BIGNUM *a, const BIGNUM *p, +\& const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx); +\& +\& /* called at RSA_new */ +\& int (*init)(RSA *rsa); +\& +\& /* called at RSA_free */ +\& int (*finish)(RSA *rsa); +\& +\& /* +\& * RSA_FLAG_EXT_PKEY \- rsa_mod_exp is called for private key +\& * operations, even if p,q,dmp1,dmq1,iqmp +\& * are NULL +\& * RSA_METHOD_FLAG_NO_CHECK \- don\*(Aqt check pub/private match +\& */ +\& int flags; +\& +\& char *app_data; /* ?? */ +\& +\& int (*rsa_sign)(int type, +\& const unsigned char *m, unsigned int m_length, +\& unsigned char *sigret, unsigned int *siglen, const RSA *rsa); +\& int (*rsa_verify)(int dtype, +\& const unsigned char *m, unsigned int m_length, +\& const unsigned char *sigbuf, unsigned int siglen, +\& const RSA *rsa); +\& /* keygen. If NULL builtin RSA key generation will be used */ +\& int (*rsa_keygen)(RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb); +\& +\& } RSA_METHOD; +.Ve +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBRSA_PKCS1_OpenSSL()\fR, \fBRSA_PKCS1_null_method()\fR, \fBRSA_get_default_method()\fR +and \fBRSA_get_method()\fR return pointers to the respective RSA_METHODs. +.PP +\&\fBRSA_set_default_method()\fR returns no value. +.PP +\&\fBRSA_set_method()\fR returns a pointer to the old \s-1RSA_METHOD\s0 implementation +that was replaced. However, this return value should probably be ignored +because if it was supplied by an \s-1ENGINE,\s0 the pointer could be invalidated +at any time if the \s-1ENGINE\s0 is unloaded (in fact it could be unloaded as a +result of the \fBRSA_set_method()\fR function releasing its handle to the +\&\s-1ENGINE\s0). For this reason, the return type may be replaced with a \fBvoid\fR +declaration in a future release. +.PP +\&\fBRSA_new_method()\fR returns \s-1NULL\s0 and sets an error code that can be obtained +by \fBERR_get_error\fR\|(3) if the allocation fails. Otherwise +it returns a pointer to the newly allocated structure. +.SH "BUGS" +.IX Header "BUGS" +The behaviour of \fBRSA_flags()\fR is a mis-feature that is left as-is for now +to avoid creating compatibility problems. \s-1RSA\s0 functionality, such as the +encryption functions, are controlled by the \fBflags\fR value in the \s-1RSA\s0 key +itself, not by the \fBflags\fR value in the \s-1RSA_METHOD\s0 attached to the \s-1RSA\s0 key +(which is what this function returns). If the flags element of an \s-1RSA\s0 key +is changed, the changes will be honoured by \s-1RSA\s0 functionality but will not +be reflected in the return value of the \fBRSA_flags()\fR function \- in effect +\&\fBRSA_flags()\fR behaves more like an \fBRSA_default_flags()\fR function (which does +not currently exist). +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBRSA_new\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +The \fBRSA_null_method()\fR, which was a partial attempt to avoid patent issues, +was replaced to always return \s-1NULL\s0 in OpenSSL 1.1.1. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RSA_sign.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RSA_sign.3 new file mode 100644 index 00000000..5132f493 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RSA_sign.3 @@ -0,0 +1,196 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "RSA_SIGN 3" +.TH RSA_SIGN 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +RSA_sign, RSA_verify \- RSA signatures +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int RSA_sign(int type, const unsigned char *m, unsigned int m_len, +\& unsigned char *sigret, unsigned int *siglen, RSA *rsa); +\& +\& int RSA_verify(int type, const unsigned char *m, unsigned int m_len, +\& unsigned char *sigbuf, unsigned int siglen, RSA *rsa); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBRSA_sign()\fR signs the message digest \fBm\fR of size \fBm_len\fR using the +private key \fBrsa\fR using RSASSA\-PKCS1\-v1_5 as specified in \s-1RFC 3447.\s0 It +stores the signature in \fBsigret\fR and the signature size in \fBsiglen\fR. +\&\fBsigret\fR must point to RSA_size(\fBrsa\fR) bytes of memory. +Note that \s-1PKCS\s0 #1 adds meta-data, placing limits on the size of the +key that can be used. +See \fBRSA_private_encrypt\fR\|(3) for lower-level +operations. +.PP +\&\fBtype\fR denotes the message digest algorithm that was used to generate +\&\fBm\fR. +If \fBtype\fR is \fBNID_md5_sha1\fR, +an \s-1SSL\s0 signature (\s-1MD5\s0 and \s-1SHA1\s0 message digests with \s-1PKCS\s0 #1 padding +and no algorithm identifier) is created. +.PP +\&\fBRSA_verify()\fR verifies that the signature \fBsigbuf\fR of size \fBsiglen\fR +matches a given message digest \fBm\fR of size \fBm_len\fR. \fBtype\fR denotes +the message digest algorithm that was used to generate the signature. +\&\fBrsa\fR is the signer's public key. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBRSA_sign()\fR returns 1 on success. +\&\fBRSA_verify()\fR returns 1 on successful verification. +.PP +The error codes can be obtained by \fBERR_get_error\fR\|(3). +.SH "CONFORMING TO" +.IX Header "CONFORMING TO" +\&\s-1SSL, PKCS\s0 #1 v2.0 +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_get_error\fR\|(3), +\&\fBRSA_private_encrypt\fR\|(3), +\&\fBRSA_public_decrypt\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RSA_sign_ASN1_OCTET_STRING.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RSA_sign_ASN1_OCTET_STRING.3 new file mode 100644 index 00000000..1637d9bf --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RSA_sign_ASN1_OCTET_STRING.3 @@ -0,0 +1,198 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "RSA_SIGN_ASN1_OCTET_STRING 3" +.TH RSA_SIGN_ASN1_OCTET_STRING 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +RSA_sign_ASN1_OCTET_STRING, RSA_verify_ASN1_OCTET_STRING \- RSA signatures +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int RSA_sign_ASN1_OCTET_STRING(int dummy, unsigned char *m, +\& unsigned int m_len, unsigned char *sigret, +\& unsigned int *siglen, RSA *rsa); +\& +\& int RSA_verify_ASN1_OCTET_STRING(int dummy, unsigned char *m, +\& unsigned int m_len, unsigned char *sigbuf, +\& unsigned int siglen, RSA *rsa); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBRSA_sign_ASN1_OCTET_STRING()\fR signs the octet string \fBm\fR of size +\&\fBm_len\fR using the private key \fBrsa\fR represented in \s-1DER\s0 using \s-1PKCS\s0 #1 +padding. It stores the signature in \fBsigret\fR and the signature size +in \fBsiglen\fR. \fBsigret\fR must point to \fBRSA_size(rsa)\fR bytes of +memory. +.PP +\&\fBdummy\fR is ignored. +.PP +The random number generator must be seeded when calling +\&\fBRSA_sign_ASN1_OCTET_STRING()\fR. +If the automatic seeding or reseeding of the OpenSSL \s-1CSPRNG\s0 fails due to +external circumstances (see \s-1\fBRAND\s0\fR\|(7)), the operation will fail. +.PP +\&\fBRSA_verify_ASN1_OCTET_STRING()\fR verifies that the signature \fBsigbuf\fR +of size \fBsiglen\fR is the \s-1DER\s0 representation of a given octet string +\&\fBm\fR of size \fBm_len\fR. \fBdummy\fR is ignored. \fBrsa\fR is the signer's +public key. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBRSA_sign_ASN1_OCTET_STRING()\fR returns 1 on success, 0 otherwise. +\&\fBRSA_verify_ASN1_OCTET_STRING()\fR returns 1 on successful verification, 0 +otherwise. +.PP +The error codes can be obtained by \fBERR_get_error\fR\|(3). +.SH "BUGS" +.IX Header "BUGS" +These functions serve no recognizable purpose. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_get_error\fR\|(3), +\&\fBRAND_bytes\fR\|(3), \fBRSA_sign\fR\|(3), +\&\fBRSA_verify\fR\|(3), +\&\s-1\fBRAND\s0\fR\|(7) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RSA_size.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RSA_size.3 new file mode 100644 index 00000000..681b3a15 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/RSA_size.3 @@ -0,0 +1,186 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "RSA_SIZE 3" +.TH RSA_SIZE 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +RSA_size, RSA_bits, RSA_security_bits \- get RSA modulus size or security bits +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int RSA_size(const RSA *rsa); +\& +\& int RSA_bits(const RSA *rsa); +\& +\& int RSA_security_bits(const RSA *rsa) +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBRSA_size()\fR returns the \s-1RSA\s0 modulus size in bytes. It can be used to +determine how much memory must be allocated for an \s-1RSA\s0 encrypted +value. +.PP +\&\fBRSA_bits()\fR returns the number of significant bits. +.PP +\&\fBrsa\fR and \fBrsa\->n\fR must not be \fB\s-1NULL\s0\fR. +.PP +\&\fBRSA_security_bits()\fR returns the number of security bits of the given \fBrsa\fR +key. See \fBBN_security_bits\fR\|(3). +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBRSA_size()\fR returns the size of modulus in bytes. +.PP +\&\fBDSA_bits()\fR returns the number of bits in the key. +.PP +\&\fBRSA_security_bits()\fR returns the number of security bits. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBBN_num_bits\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +The \fBRSA_bits()\fR function was added in OpenSSL 1.1.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SCT_new.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SCT_new.3 new file mode 100644 index 00000000..afbfcf04 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SCT_new.3 @@ -0,0 +1,306 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SCT_NEW 3" +.TH SCT_NEW 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SCT_new, SCT_new_from_base64, SCT_free, SCT_LIST_free, SCT_get_version, SCT_set_version, SCT_get_log_entry_type, SCT_set_log_entry_type, SCT_get0_log_id, SCT_set0_log_id, SCT_set1_log_id, SCT_get_timestamp, SCT_set_timestamp, SCT_get_signature_nid, SCT_set_signature_nid, SCT_get0_signature, SCT_set0_signature, SCT_set1_signature, SCT_get0_extensions, SCT_set0_extensions, SCT_set1_extensions, SCT_get_source, SCT_set_source \&\- A Certificate Transparency Signed Certificate Timestamp +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& typedef enum { +\& CT_LOG_ENTRY_TYPE_NOT_SET = \-1, +\& CT_LOG_ENTRY_TYPE_X509 = 0, +\& CT_LOG_ENTRY_TYPE_PRECERT = 1 +\& } ct_log_entry_type_t; +\& +\& typedef enum { +\& SCT_VERSION_NOT_SET = \-1, +\& SCT_VERSION_V1 = 0 +\& } sct_version_t; +\& +\& typedef enum { +\& SCT_SOURCE_UNKNOWN, +\& SCT_SOURCE_TLS_EXTENSION, +\& SCT_SOURCE_X509V3_EXTENSION, +\& SCT_SOURCE_OCSP_STAPLED_RESPONSE +\& } sct_source_t; +\& +\& SCT *SCT_new(void); +\& SCT *SCT_new_from_base64(unsigned char version, +\& const char *logid_base64, +\& ct_log_entry_type_t entry_type, +\& uint64_t timestamp, +\& const char *extensions_base64, +\& const char *signature_base64); +\& +\& void SCT_free(SCT *sct); +\& void SCT_LIST_free(STACK_OF(SCT) *a); +\& +\& sct_version_t SCT_get_version(const SCT *sct); +\& int SCT_set_version(SCT *sct, sct_version_t version); +\& +\& ct_log_entry_type_t SCT_get_log_entry_type(const SCT *sct); +\& int SCT_set_log_entry_type(SCT *sct, ct_log_entry_type_t entry_type); +\& +\& size_t SCT_get0_log_id(const SCT *sct, unsigned char **log_id); +\& int SCT_set0_log_id(SCT *sct, unsigned char *log_id, size_t log_id_len); +\& int SCT_set1_log_id(SCT *sct, const unsigned char *log_id, size_t log_id_len); +\& +\& uint64_t SCT_get_timestamp(const SCT *sct); +\& void SCT_set_timestamp(SCT *sct, uint64_t timestamp); +\& +\& int SCT_get_signature_nid(const SCT *sct); +\& int SCT_set_signature_nid(SCT *sct, int nid); +\& +\& size_t SCT_get0_signature(const SCT *sct, unsigned char **sig); +\& void SCT_set0_signature(SCT *sct, unsigned char *sig, size_t sig_len); +\& int SCT_set1_signature(SCT *sct, const unsigned char *sig, size_t sig_len); +\& +\& size_t SCT_get0_extensions(const SCT *sct, unsigned char **ext); +\& void SCT_set0_extensions(SCT *sct, unsigned char *ext, size_t ext_len); +\& int SCT_set1_extensions(SCT *sct, const unsigned char *ext, size_t ext_len); +\& +\& sct_source_t SCT_get_source(const SCT *sct); +\& int SCT_set_source(SCT *sct, sct_source_t source); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +Signed Certificate Timestamps (SCTs) are defined by \s-1RFC 6962,\s0 Section 3.2. +They constitute a promise by a Certificate Transparency (\s-1CT\s0) log to publicly +record a certificate. By cryptographically verifying that a log did indeed issue +an \s-1SCT,\s0 some confidence can be gained that the certificate is publicly known. +.PP +An internal representation of an \s-1SCT\s0 can be created in one of two ways. +The first option is to create a blank \s-1SCT,\s0 using \fBSCT_new()\fR, and then populate +it using: +.IP "\(bu" 2 +\&\fBSCT_set_version()\fR to set the \s-1SCT\s0 version. +.Sp +Only \s-1SCT_VERSION_V1\s0 is currently supported. +.IP "\(bu" 2 +\&\fBSCT_set_log_entry_type()\fR to set the type of certificate the \s-1SCT\s0 was issued for: +.Sp +\&\fB\s-1CT_LOG_ENTRY_TYPE_X509\s0\fR for a normal certificate. +\&\fB\s-1CT_LOG_ENTRY_TYPE_PRECERT\s0\fR for a pre-certificate. +.IP "\(bu" 2 +\&\fBSCT_set0_log_id()\fR or \fBSCT_set1_log_id()\fR to set the LogID of the \s-1CT\s0 log that the \s-1SCT\s0 came from. +.Sp +The former takes ownership, whereas the latter makes a copy. +See \s-1RFC 6962,\s0 Section 3.2 for the definition of LogID. +.IP "\(bu" 2 +\&\fBSCT_set_timestamp()\fR to set the time the \s-1SCT\s0 was issued (epoch time in milliseconds). +.IP "\(bu" 2 +\&\fBSCT_set_signature_nid()\fR to set the \s-1NID\s0 of the signature. +.IP "\(bu" 2 +\&\fBSCT_set0_signature()\fR or \fBSCT_set1_signature()\fR to set the raw signature value. +.Sp +The former takes ownership, whereas the latter makes a copy. +.IP "\(bu" 2 +\&\fBSCT_set0_extensions()\fR or \fBSCT_set1_extensions\fR to provide \s-1SCT\s0 extensions. +.Sp +The former takes ownership, whereas the latter makes a copy. +.PP +Alternatively, the \s-1SCT\s0 can be pre-populated from the following data using +\&\fBSCT_new_from_base64()\fR: +.IP "\(bu" 2 +The \s-1SCT\s0 version (only \s-1SCT_VERSION_V1\s0 is currently supported). +.IP "\(bu" 2 +The LogID (see \s-1RFC 6962,\s0 Section 3.2), base64 encoded. +.IP "\(bu" 2 +The type of certificate the \s-1SCT\s0 was issued for: +\&\fB\s-1CT_LOG_ENTRY_TYPE_X509\s0\fR for a normal certificate. +\&\fB\s-1CT_LOG_ENTRY_TYPE_PRECERT\s0\fR for a pre-certificate. +.IP "\(bu" 2 +The time that the \s-1SCT\s0 was issued (epoch time in milliseconds). +.IP "\(bu" 2 +The \s-1SCT\s0 extensions, base64 encoded. +.IP "\(bu" 2 +The \s-1SCT\s0 signature, base64 encoded. +.PP +\&\fBSCT_set_source()\fR can be used to record where the \s-1SCT\s0 was found +(\s-1TLS\s0 extension, X.509 certificate extension or \s-1OCSP\s0 response). This is not +required for verifying the \s-1SCT.\s0 +.SH "NOTES" +.IX Header "NOTES" +Some of the setters return int, instead of void. These will all return 1 on +success, 0 on failure. They will not make changes on failure. +.PP +All of the setters will reset the validation status of the \s-1SCT\s0 to +\&\s-1SCT_VALIDATION_STATUS_NOT_SET\s0 (see \fBSCT_validate\fR\|(3)). +.PP +\&\fBSCT_set_source()\fR will call \fBSCT_set_log_entry_type()\fR if the type of +certificate the \s-1SCT\s0 was issued for can be inferred from where the \s-1SCT\s0 was found. +For example, an \s-1SCT\s0 found in an X.509 extension must have been issued for a pre\- +certificate. +.PP +\&\fBSCT_set_source()\fR will not refuse unknown values. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSCT_set_version()\fR returns 1 if the specified version is supported, 0 otherwise. +.PP +\&\fBSCT_set_log_entry_type()\fR returns 1 if the specified log entry type is supported, 0 otherwise. +.PP +\&\fBSCT_set0_log_id()\fR and \fBSCT_set1_log_id\fR return 1 if the specified LogID is a +valid \s-1SHA\-256\s0 hash, 0 otherwise. Additionally, \fBSCT_set1_log_id\fR returns 0 if +malloc fails. +.PP +\&\fBSCT_set_signature_nid\fR returns 1 if the specified \s-1NID\s0 is supported, 0 otherwise. +.PP +\&\fBSCT_set1_extensions\fR and \fBSCT_set1_signature\fR return 1 if the supplied buffer +is copied successfully, 0 otherwise (i.e. if malloc fails). +.PP +\&\fBSCT_set_source\fR returns 1 on success, 0 otherwise. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBct\fR\|(7), +\&\fBSCT_validate\fR\|(3), +\&\fBOBJ_nid2obj\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +These functions were added in OpenSSL 1.1.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2016\-2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SCT_print.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SCT_print.3 new file mode 100644 index 00000000..5bae3be3 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SCT_print.3 @@ -0,0 +1,187 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SCT_PRINT 3" +.TH SCT_PRINT 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SCT_print, SCT_LIST_print, SCT_validation_status_string \- Prints Signed Certificate Timestamps in a human\-readable way +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& void SCT_print(const SCT *sct, BIO *out, int indent, const CTLOG_STORE *logs); +\& void SCT_LIST_print(const STACK_OF(SCT) *sct_list, BIO *out, int indent, +\& const char *separator, const CTLOG_STORE *logs); +\& const char *SCT_validation_status_string(const SCT *sct); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSCT_print()\fR prints a single Signed Certificate Timestamp (\s-1SCT\s0) to a bio in +a human-readable format. \fBSCT_LIST_print()\fR prints an entire list of SCTs in a +similar way. A separator can be specified to delimit each \s-1SCT\s0 in the output. +.PP +The output can be indented by a specified number of spaces. If a \fB\s-1CTLOG_STORE\s0\fR +is provided, it will be used to print the description of the \s-1CT\s0 log that issued +each \s-1SCT\s0 (if that log is in the \s-1CTLOG_STORE\s0). Alternatively, \s-1NULL\s0 can be passed +as the \s-1CTLOG_STORE\s0 parameter to disable this feature. +.PP +\&\fBSCT_validation_status_string()\fR will return the validation status of an \s-1SCT\s0 as +a human-readable string. Call \fBSCT_validate()\fR or \fBSCT_LIST_validate()\fR +beforehand in order to set the validation status of an \s-1SCT\s0 first. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSCT_validation_status_string()\fR returns a null-terminated string representing +the validation status of an \fB\s-1SCT\s0\fR object. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBct\fR\|(7), +\&\fBbio\fR\|(7), +\&\fBCTLOG_STORE_new\fR\|(3), +\&\fBSCT_validate\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +These functions were added in OpenSSL 1.1.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2016\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SCT_validate.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SCT_validate.3 new file mode 100644 index 00000000..444eee6b --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SCT_validate.3 @@ -0,0 +1,223 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SCT_VALIDATE 3" +.TH SCT_VALIDATE 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SCT_validate, SCT_LIST_validate, SCT_get_validation_status \- checks Signed Certificate Timestamps (SCTs) are valid +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& typedef enum { +\& SCT_VALIDATION_STATUS_NOT_SET, +\& SCT_VALIDATION_STATUS_UNKNOWN_LOG, +\& SCT_VALIDATION_STATUS_VALID, +\& SCT_VALIDATION_STATUS_INVALID, +\& SCT_VALIDATION_STATUS_UNVERIFIED, +\& SCT_VALIDATION_STATUS_UNKNOWN_VERSION +\& } sct_validation_status_t; +\& +\& int SCT_validate(SCT *sct, const CT_POLICY_EVAL_CTX *ctx); +\& int SCT_LIST_validate(const STACK_OF(SCT) *scts, CT_POLICY_EVAL_CTX *ctx); +\& sct_validation_status_t SCT_get_validation_status(const SCT *sct); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSCT_validate()\fR will check that an \s-1SCT\s0 is valid and verify its signature. +\&\fBSCT_LIST_validate()\fR performs the same checks on an entire stack of SCTs. +The result of the validation checks can be obtained by passing the \s-1SCT\s0 to +\&\fBSCT_get_validation_status()\fR. +.PP +A \s-1CT_POLICY_EVAL_CTX\s0 must be provided that specifies: +.IP "\(bu" 2 +The certificate the \s-1SCT\s0 was issued for. +.Sp +Failure to provide the certificate will result in the validation status being +\&\s-1SCT_VALIDATION_STATUS_UNVERIFIED.\s0 +.IP "\(bu" 2 +The issuer of that certificate. +.Sp +This is only required if the \s-1SCT\s0 was issued for a pre-certificate +(see \s-1RFC 6962\s0). If it is required but not provided, the validation status will +be \s-1SCT_VALIDATION_STATUS_UNVERIFIED.\s0 +.IP "\(bu" 2 +A \s-1CTLOG_STORE\s0 that contains the \s-1CT\s0 log that issued this \s-1SCT.\s0 +.Sp +If the \s-1SCT\s0 was issued by a log that is not in this \s-1CTLOG_STORE,\s0 the validation +status will be \s-1SCT_VALIDATION_STATUS_UNKNOWN_LOG.\s0 +.PP +If the \s-1SCT\s0 is of an unsupported version (only v1 is currently supported), the +validation status will be \s-1SCT_VALIDATION_STATUS_UNKNOWN_VERSION.\s0 +.PP +If the \s-1SCT\s0's signature is incorrect, its timestamp is in the future (relative to +the time in \s-1CT_POLICY_EVAL_CTX\s0), or if it is otherwise invalid, the validation +status will be \s-1SCT_VALIDATION_STATUS_INVALID.\s0 +.PP +If all checks pass, the validation status will be \s-1SCT_VALIDATION_STATUS_VALID.\s0 +.SH "NOTES" +.IX Header "NOTES" +A return value of 0 from \fBSCT_LIST_validate()\fR should not be interpreted as a +failure. At a minimum, only one valid \s-1SCT\s0 may provide sufficient confidence +that a certificate has been publicly logged. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSCT_validate()\fR returns a negative integer if an internal error occurs, 0 if the +\&\s-1SCT\s0 fails validation, or 1 if the \s-1SCT\s0 passes validation. +.PP +\&\fBSCT_LIST_validate()\fR returns a negative integer if an internal error occurs, 0 +if any of SCTs fails validation, or 1 if they all pass validation. +.PP +\&\fBSCT_get_validation_status()\fR returns the validation status of the \s-1SCT.\s0 +If \fBSCT_validate()\fR or \fBSCT_LIST_validate()\fR have not been passed that \s-1SCT,\s0 the +returned value will be \s-1SCT_VALIDATION_STATUS_NOT_SET.\s0 +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBct\fR\|(7) +.SH "HISTORY" +.IX Header "HISTORY" +These functions were added in OpenSSL 1.1.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SHA256_Init.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SHA256_Init.3 new file mode 100644 index 00000000..7be13128 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SHA256_Init.3 @@ -0,0 +1,236 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SHA256_INIT 3" +.TH SHA256_INIT 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SHA1, SHA1_Init, SHA1_Update, SHA1_Final, SHA224, SHA224_Init, SHA224_Update, SHA224_Final, SHA256, SHA256_Init, SHA256_Update, SHA256_Final, SHA384, SHA384_Init, SHA384_Update, SHA384_Final, SHA512, SHA512_Init, SHA512_Update, SHA512_Final \- Secure Hash Algorithm +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int SHA1_Init(SHA_CTX *c); +\& int SHA1_Update(SHA_CTX *c, const void *data, size_t len); +\& int SHA1_Final(unsigned char *md, SHA_CTX *c); +\& unsigned char *SHA1(const unsigned char *d, size_t n, +\& unsigned char *md); +\& +\& int SHA224_Init(SHA256_CTX *c); +\& int SHA224_Update(SHA256_CTX *c, const void *data, size_t len); +\& int SHA224_Final(unsigned char *md, SHA256_CTX *c); +\& unsigned char *SHA224(const unsigned char *d, size_t n, +\& unsigned char *md); +\& +\& int SHA256_Init(SHA256_CTX *c); +\& int SHA256_Update(SHA256_CTX *c, const void *data, size_t len); +\& int SHA256_Final(unsigned char *md, SHA256_CTX *c); +\& unsigned char *SHA256(const unsigned char *d, size_t n, +\& unsigned char *md); +\& +\& int SHA384_Init(SHA512_CTX *c); +\& int SHA384_Update(SHA512_CTX *c, const void *data, size_t len); +\& int SHA384_Final(unsigned char *md, SHA512_CTX *c); +\& unsigned char *SHA384(const unsigned char *d, size_t n, +\& unsigned char *md); +\& +\& int SHA512_Init(SHA512_CTX *c); +\& int SHA512_Update(SHA512_CTX *c, const void *data, size_t len); +\& int SHA512_Final(unsigned char *md, SHA512_CTX *c); +\& unsigned char *SHA512(const unsigned char *d, size_t n, +\& unsigned char *md); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +Applications should use the higher level functions +\&\fBEVP_DigestInit\fR\|(3) etc. instead of calling the hash +functions directly. +.PP +\&\s-1SHA\-1\s0 (Secure Hash Algorithm) is a cryptographic hash function with a +160 bit output. +.PP +\&\s-1\fBSHA1\s0()\fR computes the \s-1SHA\-1\s0 message digest of the \fBn\fR +bytes at \fBd\fR and places it in \fBmd\fR (which must have space for +\&\s-1SHA_DIGEST_LENGTH\s0 == 20 bytes of output). If \fBmd\fR is \s-1NULL,\s0 the digest +is placed in a static array. Note: setting \fBmd\fR to \s-1NULL\s0 is \fBnot thread safe\fR. +.PP +The following functions may be used if the message is not completely +stored in memory: +.PP +\&\fBSHA1_Init()\fR initializes a \fB\s-1SHA_CTX\s0\fR structure. +.PP +\&\fBSHA1_Update()\fR can be called repeatedly with chunks of the message to +be hashed (\fBlen\fR bytes at \fBdata\fR). +.PP +\&\fBSHA1_Final()\fR places the message digest in \fBmd\fR, which must have space +for \s-1SHA_DIGEST_LENGTH\s0 == 20 bytes of output, and erases the \fB\s-1SHA_CTX\s0\fR. +.PP +The \s-1SHA224, SHA256, SHA384\s0 and \s-1SHA512\s0 families of functions operate in the +same way as for the \s-1SHA1\s0 functions. Note that \s-1SHA224\s0 and \s-1SHA256\s0 use a +\&\fB\s-1SHA256_CTX\s0\fR object instead of \fB\s-1SHA_CTX\s0\fR. \s-1SHA384\s0 and \s-1SHA512\s0 use \fB\s-1SHA512_CTX\s0\fR. +The buffer \fBmd\fR must have space for the output from the \s-1SHA\s0 variant being used +(defined by \s-1SHA224_DIGEST_LENGTH, SHA256_DIGEST_LENGTH, SHA384_DIGEST_LENGTH\s0 and +\&\s-1SHA512_DIGEST_LENGTH\s0). Also note that, as for the \s-1\fBSHA1\s0()\fR function above, the +\&\s-1\fBSHA224\s0()\fR, \s-1\fBSHA256\s0()\fR, \s-1\fBSHA384\s0()\fR and \s-1\fBSHA512\s0()\fR functions are not thread safe if +\&\fBmd\fR is \s-1NULL.\s0 +.PP +The predecessor of \s-1SHA\-1, SHA,\s0 is also implemented, but it should be +used only when backward compatibility is required. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\s-1\fBSHA1\s0()\fR, \s-1\fBSHA224\s0()\fR, \s-1\fBSHA256\s0()\fR, \s-1\fBSHA384\s0()\fR and \s-1\fBSHA512\s0()\fR return a pointer to the hash +value. +.PP +\&\fBSHA1_Init()\fR, \fBSHA1_Update()\fR and \fBSHA1_Final()\fR and equivalent \s-1SHA224, SHA256, +SHA384\s0 and \s-1SHA512\s0 functions return 1 for success, 0 otherwise. +.SH "CONFORMING TO" +.IX Header "CONFORMING TO" +\&\s-1US\s0 Federal Information Processing Standard \s-1FIPS PUB 180\-4\s0 (Secure Hash +Standard), +\&\s-1ANSI X9.30\s0 +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBEVP_DigestInit\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SMIME_read_CMS.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SMIME_read_CMS.3 new file mode 100644 index 00000000..da2c3b2e --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SMIME_read_CMS.3 @@ -0,0 +1,207 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SMIME_READ_CMS 3" +.TH SMIME_READ_CMS 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SMIME_read_CMS \- parse S/MIME message +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& CMS_ContentInfo *SMIME_read_CMS(BIO *in, BIO **bcont); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSMIME_read_CMS()\fR parses a message in S/MIME format. +.PP +\&\fBin\fR is a \s-1BIO\s0 to read the message from. +.PP +If cleartext signing is used then the content is saved in a memory bio which is +written to \fB*bcont\fR, otherwise \fB*bcont\fR is set to \s-1NULL.\s0 +.PP +The parsed CMS_ContentInfo structure is returned or \s-1NULL\s0 if an +error occurred. +.SH "NOTES" +.IX Header "NOTES" +If \fB*bcont\fR is not \s-1NULL\s0 then the message is clear text signed. \fB*bcont\fR can +then be passed to \fBCMS_verify()\fR with the \fB\s-1CMS_DETACHED\s0\fR flag set. +.PP +Otherwise the type of the returned structure can be determined +using \fBCMS_get0_type()\fR. +.PP +To support future functionality if \fBbcont\fR is not \s-1NULL\s0 \fB*bcont\fR should be +initialized to \s-1NULL.\s0 For example: +.PP +.Vb 2 +\& BIO *cont = NULL; +\& CMS_ContentInfo *cms; +\& +\& cms = SMIME_read_CMS(in, &cont); +.Ve +.SH "BUGS" +.IX Header "BUGS" +The \s-1MIME\s0 parser used by \fBSMIME_read_CMS()\fR is somewhat primitive. While it will +handle most S/MIME messages more complex compound formats may not work. +.PP +The parser assumes that the CMS_ContentInfo structure is always base64 encoded +and will not handle the case where it is in binary format or uses quoted +printable format. +.PP +The use of a memory \s-1BIO\s0 to hold the signed content limits the size of message +which can be processed due to memory restraints: a streaming single pass option +should be available. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSMIME_read_CMS()\fR returns a valid \fBCMS_ContentInfo\fR structure or \fB\s-1NULL\s0\fR +if an error occurred. The error can be obtained from \fBERR_get_error\fR\|(3). +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_get_error\fR\|(3), \fBCMS_type\fR\|(3), +\&\fBSMIME_read_CMS\fR\|(3), \fBCMS_sign\fR\|(3), +\&\fBCMS_verify\fR\|(3), \fBCMS_encrypt\fR\|(3), +\&\fBCMS_decrypt\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2008\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SMIME_read_PKCS7.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SMIME_read_PKCS7.3 new file mode 100644 index 00000000..bc94d0a4 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SMIME_read_PKCS7.3 @@ -0,0 +1,210 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SMIME_READ_PKCS7 3" +.TH SMIME_READ_PKCS7 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SMIME_read_PKCS7 \- parse S/MIME message +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& PKCS7 *SMIME_read_PKCS7(BIO *in, BIO **bcont); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSMIME_read_PKCS7()\fR parses a message in S/MIME format. +.PP +\&\fBin\fR is a \s-1BIO\s0 to read the message from. +.PP +If cleartext signing is used then the content is saved in +a memory bio which is written to \fB*bcont\fR, otherwise +\&\fB*bcont\fR is set to \fB\s-1NULL\s0\fR. +.PP +The parsed PKCS#7 structure is returned or \fB\s-1NULL\s0\fR if an +error occurred. +.SH "NOTES" +.IX Header "NOTES" +If \fB*bcont\fR is not \fB\s-1NULL\s0\fR then the message is clear text +signed. \fB*bcont\fR can then be passed to \fBPKCS7_verify()\fR with +the \fB\s-1PKCS7_DETACHED\s0\fR flag set. +.PP +Otherwise the type of the returned structure can be determined +using \fBPKCS7_type_is_enveloped()\fR, etc. +.PP +To support future functionality if \fBbcont\fR is not \fB\s-1NULL\s0\fR +\&\fB*bcont\fR should be initialized to \fB\s-1NULL\s0\fR. For example: +.PP +.Vb 2 +\& BIO *cont = NULL; +\& PKCS7 *p7; +\& +\& p7 = SMIME_read_PKCS7(in, &cont); +.Ve +.SH "BUGS" +.IX Header "BUGS" +The \s-1MIME\s0 parser used by \fBSMIME_read_PKCS7()\fR is somewhat primitive. +While it will handle most S/MIME messages more complex compound +formats may not work. +.PP +The parser assumes that the \s-1PKCS7\s0 structure is always base64 +encoded and will not handle the case where it is in binary format +or uses quoted printable format. +.PP +The use of a memory \s-1BIO\s0 to hold the signed content limits the size +of message which can be processed due to memory restraints: a +streaming single pass option should be available. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSMIME_read_PKCS7()\fR returns a valid \fB\s-1PKCS7\s0\fR structure or \fB\s-1NULL\s0\fR +if an error occurred. The error can be obtained from \fBERR_get_error\fR\|(3). +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_get_error\fR\|(3), +\&\fBSMIME_read_PKCS7\fR\|(3), \fBPKCS7_sign\fR\|(3), +\&\fBPKCS7_verify\fR\|(3), \fBPKCS7_encrypt\fR\|(3) +\&\fBPKCS7_decrypt\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2002\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SMIME_write_CMS.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SMIME_write_CMS.3 new file mode 100644 index 00000000..47ff5ac1 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SMIME_write_CMS.3 @@ -0,0 +1,199 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SMIME_WRITE_CMS 3" +.TH SMIME_WRITE_CMS 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SMIME_write_CMS \- convert CMS structure to S/MIME format +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int SMIME_write_CMS(BIO *out, CMS_ContentInfo *cms, BIO *data, int flags); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSMIME_write_CMS()\fR adds the appropriate \s-1MIME\s0 headers to a \s-1CMS\s0 +structure to produce an S/MIME message. +.PP +\&\fBout\fR is the \s-1BIO\s0 to write the data to. \fBcms\fR is the appropriate +\&\fBCMS_ContentInfo\fR structure. If streaming is enabled then the content must be +supplied in the \fBdata\fR argument. \fBflags\fR is an optional set of flags. +.SH "NOTES" +.IX Header "NOTES" +The following flags can be passed in the \fBflags\fR parameter. +.PP +If \fB\s-1CMS_DETACHED\s0\fR is set then cleartext signing will be used, this option only +makes sense for SignedData where \fB\s-1CMS_DETACHED\s0\fR is also set when \fBCMS_sign()\fR is +called. +.PP +If the \fB\s-1CMS_TEXT\s0\fR flag is set \s-1MIME\s0 headers for type \fBtext/plain\fR are added to +the content, this only makes sense if \fB\s-1CMS_DETACHED\s0\fR is also set. +.PP +If the \fB\s-1CMS_STREAM\s0\fR flag is set streaming is performed. This flag should only +be set if \fB\s-1CMS_STREAM\s0\fR was also set in the previous call to a CMS_ContentInfo +creation function. +.PP +If cleartext signing is being used and \fB\s-1CMS_STREAM\s0\fR not set then the data must +be read twice: once to compute the signature in \fBCMS_sign()\fR and once to output +the S/MIME message. +.PP +If streaming is performed the content is output in \s-1BER\s0 format using indefinite +length constructed encoding except in the case of signed data with detached +content where the content is absent and \s-1DER\s0 format is used. +.SH "BUGS" +.IX Header "BUGS" +\&\fBSMIME_write_CMS()\fR always base64 encodes \s-1CMS\s0 structures, there should be an +option to disable this. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSMIME_write_CMS()\fR returns 1 for success or 0 for failure. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_get_error\fR\|(3), \fBCMS_sign\fR\|(3), +\&\fBCMS_verify\fR\|(3), \fBCMS_encrypt\fR\|(3) +\&\fBCMS_decrypt\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2008\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SMIME_write_PKCS7.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SMIME_write_PKCS7.3 new file mode 100644 index 00000000..fece0d90 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SMIME_write_PKCS7.3 @@ -0,0 +1,200 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SMIME_WRITE_PKCS7 3" +.TH SMIME_WRITE_PKCS7 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SMIME_write_PKCS7 \- convert PKCS#7 structure to S/MIME format +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int SMIME_write_PKCS7(BIO *out, PKCS7 *p7, BIO *data, int flags); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSMIME_write_PKCS7()\fR adds the appropriate \s-1MIME\s0 headers to a PKCS#7 +structure to produce an S/MIME message. +.PP +\&\fBout\fR is the \s-1BIO\s0 to write the data to. \fBp7\fR is the appropriate \fB\s-1PKCS7\s0\fR +structure. If streaming is enabled then the content must be supplied in the +\&\fBdata\fR argument. \fBflags\fR is an optional set of flags. +.SH "NOTES" +.IX Header "NOTES" +The following flags can be passed in the \fBflags\fR parameter. +.PP +If \fB\s-1PKCS7_DETACHED\s0\fR is set then cleartext signing will be used, +this option only makes sense for signedData where \fB\s-1PKCS7_DETACHED\s0\fR +is also set when \fBPKCS7_sign()\fR is also called. +.PP +If the \fB\s-1PKCS7_TEXT\s0\fR flag is set \s-1MIME\s0 headers for type \fBtext/plain\fR +are added to the content, this only makes sense if \fB\s-1PKCS7_DETACHED\s0\fR +is also set. +.PP +If the \fB\s-1PKCS7_STREAM\s0\fR flag is set streaming is performed. This flag should +only be set if \fB\s-1PKCS7_STREAM\s0\fR was also set in the previous call to +\&\fBPKCS7_sign()\fR or \fBPKCS7_encrypt()\fR. +.PP +If cleartext signing is being used and \fB\s-1PKCS7_STREAM\s0\fR not set then +the data must be read twice: once to compute the signature in \fBPKCS7_sign()\fR +and once to output the S/MIME message. +.PP +If streaming is performed the content is output in \s-1BER\s0 format using indefinite +length constructed encoding except in the case of signed data with detached +content where the content is absent and \s-1DER\s0 format is used. +.SH "BUGS" +.IX Header "BUGS" +\&\fBSMIME_write_PKCS7()\fR always base64 encodes PKCS#7 structures, there +should be an option to disable this. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSMIME_write_PKCS7()\fR returns 1 for success or 0 for failure. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_get_error\fR\|(3), \fBPKCS7_sign\fR\|(3), +\&\fBPKCS7_verify\fR\|(3), \fBPKCS7_encrypt\fR\|(3) +\&\fBPKCS7_decrypt\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2002\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CIPHER_get_name.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CIPHER_get_name.3 new file mode 100644 index 00000000..e97ed590 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CIPHER_get_name.3 @@ -0,0 +1,325 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CIPHER_GET_NAME 3" +.TH SSL_CIPHER_GET_NAME 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_CIPHER_get_name, SSL_CIPHER_standard_name, OPENSSL_cipher_name, SSL_CIPHER_get_bits, SSL_CIPHER_get_version, SSL_CIPHER_description, SSL_CIPHER_get_cipher_nid, SSL_CIPHER_get_digest_nid, SSL_CIPHER_get_handshake_digest, SSL_CIPHER_get_kx_nid, SSL_CIPHER_get_auth_nid, SSL_CIPHER_is_aead, SSL_CIPHER_find, SSL_CIPHER_get_id, SSL_CIPHER_get_protocol_id \&\- get SSL_CIPHER properties +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& const char *SSL_CIPHER_get_name(const SSL_CIPHER *cipher); +\& const char *SSL_CIPHER_standard_name(const SSL_CIPHER *cipher); +\& const char *OPENSSL_cipher_name(const char *stdname); +\& int SSL_CIPHER_get_bits(const SSL_CIPHER *cipher, int *alg_bits); +\& char *SSL_CIPHER_get_version(const SSL_CIPHER *cipher); +\& char *SSL_CIPHER_description(const SSL_CIPHER *cipher, char *buf, int size); +\& int SSL_CIPHER_get_cipher_nid(const SSL_CIPHER *c); +\& int SSL_CIPHER_get_digest_nid(const SSL_CIPHER *c); +\& const EVP_MD *SSL_CIPHER_get_handshake_digest(const SSL_CIPHER *c); +\& int SSL_CIPHER_get_kx_nid(const SSL_CIPHER *c); +\& int SSL_CIPHER_get_auth_nid(const SSL_CIPHER *c); +\& int SSL_CIPHER_is_aead(const SSL_CIPHER *c); +\& const SSL_CIPHER *SSL_CIPHER_find(SSL *ssl, const unsigned char *ptr); +\& uint32_t SSL_CIPHER_get_id(const SSL_CIPHER *c); +\& uint32_t SSL_CIPHER_get_protocol_id(const SSL_CIPHER *c); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_CIPHER_get_name()\fR returns a pointer to the name of \fBcipher\fR. If the +\&\fBcipher\fR is \s-1NULL,\s0 it returns \*(L"(\s-1NONE\s0)\*(R". +.PP +\&\fBSSL_CIPHER_standard_name()\fR returns a pointer to the standard \s-1RFC\s0 name of +\&\fBcipher\fR. If the \fBcipher\fR is \s-1NULL,\s0 it returns \*(L"(\s-1NONE\s0)\*(R". If the \fBcipher\fR +has no standard name, it returns \fB\s-1NULL\s0\fR. If \fBcipher\fR was defined in both +SSLv3 and \s-1TLS,\s0 it returns the \s-1TLS\s0 name. +.PP +\&\fBOPENSSL_cipher_name()\fR returns a pointer to the OpenSSL name of \fBstdname\fR. +If the \fBstdname\fR is \s-1NULL,\s0 or \fBstdname\fR has no corresponding OpenSSL name, +it returns \*(L"(\s-1NONE\s0)\*(R". Where both exist, \fBstdname\fR should be the \s-1TLS\s0 name rather +than the SSLv3 name. +.PP +\&\fBSSL_CIPHER_get_bits()\fR returns the number of secret bits used for \fBcipher\fR. +If \fBcipher\fR is \s-1NULL, 0\s0 is returned. +.PP +\&\fBSSL_CIPHER_get_version()\fR returns string which indicates the \s-1SSL/TLS\s0 protocol +version that first defined the cipher. It returns \*(L"(\s-1NONE\s0)\*(R" if \fBcipher\fR is \s-1NULL.\s0 +.PP +\&\fBSSL_CIPHER_get_cipher_nid()\fR returns the cipher \s-1NID\s0 corresponding to \fBc\fR. +If there is no cipher (e.g. for cipher suites with no encryption) then +\&\fBNID_undef\fR is returned. +.PP +\&\fBSSL_CIPHER_get_digest_nid()\fR returns the digest \s-1NID\s0 corresponding to the \s-1MAC\s0 +used by \fBc\fR during record encryption/decryption. If there is no digest (e.g. +for \s-1AEAD\s0 cipher suites) then \fBNID_undef\fR is returned. +.PP +\&\fBSSL_CIPHER_get_handshake_digest()\fR returns an \s-1EVP_MD\s0 for the digest used during +the \s-1SSL/TLS\s0 handshake when using the \s-1SSL_CIPHER\s0 \fBc\fR. Note that this may be +different to the digest used to calculate the \s-1MAC\s0 for encrypted records. +.PP +\&\fBSSL_CIPHER_get_kx_nid()\fR returns the key exchange \s-1NID\s0 corresponding to the method +used by \fBc\fR. If there is no key exchange, then \fBNID_undef\fR is returned. +If any appropriate key exchange algorithm can be used (as in the case of \s-1TLS 1.3\s0 +cipher suites) \fBNID_kx_any\fR is returned. Examples (not comprehensive): +.PP +.Vb 4 +\& NID_kx_rsa +\& NID_kx_ecdhe +\& NID_kx_dhe +\& NID_kx_psk +.Ve +.PP +\&\fBSSL_CIPHER_get_auth_nid()\fR returns the authentication \s-1NID\s0 corresponding to the method +used by \fBc\fR. If there is no authentication, then \fBNID_undef\fR is returned. +If any appropriate authentication algorithm can be used (as in the case of +\&\s-1TLS 1.3\s0 cipher suites) \fBNID_auth_any\fR is returned. Examples (not comprehensive): +.PP +.Vb 3 +\& NID_auth_rsa +\& NID_auth_ecdsa +\& NID_auth_psk +.Ve +.PP +\&\fBSSL_CIPHER_is_aead()\fR returns 1 if the cipher \fBc\fR is \s-1AEAD\s0 (e.g. \s-1GCM\s0 or +ChaCha20/Poly1305), and 0 if it is not \s-1AEAD.\s0 +.PP +\&\fBSSL_CIPHER_find()\fR returns a \fB\s-1SSL_CIPHER\s0\fR structure which has the cipher \s-1ID\s0 stored +in \fBptr\fR. The \fBptr\fR parameter is a two element array of \fBchar\fR, which stores the +two-byte \s-1TLS\s0 cipher \s-1ID\s0 (as allocated by \s-1IANA\s0) in network byte order. This parameter +is usually retrieved from a \s-1TLS\s0 packet by using functions like +\&\fBSSL_client_hello_get0_ciphers\fR\|(3). \fBSSL_CIPHER_find()\fR returns \s-1NULL\s0 if an +error occurs or the indicated cipher is not found. +.PP +\&\fBSSL_CIPHER_get_id()\fR returns the OpenSSL-specific \s-1ID\s0 of the given cipher \fBc\fR. That \s-1ID\s0 is +not the same as the IANA-specific \s-1ID.\s0 +.PP +\&\fBSSL_CIPHER_get_protocol_id()\fR returns the two-byte \s-1ID\s0 used in the \s-1TLS\s0 protocol of the given +cipher \fBc\fR. +.PP +\&\fBSSL_CIPHER_description()\fR returns a textual description of the cipher used +into the buffer \fBbuf\fR of length \fBlen\fR provided. If \fBbuf\fR is provided, it +must be at least 128 bytes, otherwise a buffer will be allocated using +\&\fBOPENSSL_malloc()\fR. If the provided buffer is too small, or the allocation fails, +\&\fB\s-1NULL\s0\fR is returned. +.PP +The string returned by \fBSSL_CIPHER_description()\fR consists of several fields +separated by whitespace: +.IP "" 4 +.IX Item "" +Textual representation of the cipher name. +.IP "" 4 +.IX Item "" +The minimum protocol version that the ciphersuite supports, such as \fBTLSv1.2\fR. +Note that this is not always the same as the protocol version in which the +ciphersuite was first defined because some ciphersuites are backwards compatible +with earlier protocol versions. +.IP "Kx=" 4 +.IX Item "Kx=" +Key exchange method such as \fB\s-1RSA\s0\fR, \fB\s-1ECDHE\s0\fR, etc. +.IP "Au=" 4 +.IX Item "Au=" +Authentication method such as \fB\s-1RSA\s0\fR, \fBNone\fR, etc.. None is the +representation of anonymous ciphers. +.IP "Enc=" 4 +.IX Item "Enc=" +Encryption method, with number of secret bits, such as \fB\s-1AESGCM\s0(128)\fR. +.IP "Mac=" 4 +.IX Item "Mac=" +Message digest, such as \fB\s-1SHA256\s0\fR. +.PP +Some examples for the output of \fBSSL_CIPHER_description()\fR: +.PP +.Vb 2 +\& ECDHE\-RSA\-AES256\-GCM\-SHA256 TLSv1.2 Kx=ECDH Au=RSA Enc=AESGCM(256) Mac=AEAD +\& RSA\-PSK\-AES256\-CBC\-SHA384 TLSv1.0 Kx=RSAPSK Au=RSA Enc=AES(256) Mac=SHA384 +.Ve +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_CIPHER_get_name()\fR, \fBSSL_CIPHER_standard_name()\fR, \fBOPENSSL_cipher_name()\fR, +\&\fBSSL_CIPHER_get_version()\fR and \fBSSL_CIPHER_description()\fR return the corresponding +value in a null-terminated string for a specific cipher or \*(L"(\s-1NONE\s0)\*(R" +if the cipher is not found. +.PP +\&\fBSSL_CIPHER_get_bits()\fR returns a positive integer representing the number of +secret bits or 0 if an error occurred. +.PP +\&\fBSSL_CIPHER_get_cipher_nid()\fR, \fBSSL_CIPHER_get_digest_nid()\fR, +\&\fBSSL_CIPHER_get_kx_nid()\fR and \fBSSL_CIPHER_get_auth_nid()\fR return the \s-1NID\s0 value or +\&\fBNID_undef\fR if an error occurred. +.PP +\&\fBSSL_CIPHER_get_handshake_digest()\fR returns a valid \fB\s-1EVP_MD\s0\fR structure or \s-1NULL\s0 +if an error occurred. +.PP +\&\fBSSL_CIPHER_is_aead()\fR returns 1 if the cipher is \s-1AEAD\s0 or 0 otherwise. +.PP +\&\fBSSL_CIPHER_find()\fR returns a valid \fB\s-1SSL_CIPHER\s0\fR structure or \s-1NULL\s0 if an error +occurred. +.PP +\&\fBSSL_CIPHER_get_id()\fR returns a 4\-byte integer representing the OpenSSL-specific \s-1ID.\s0 +.PP +\&\fBSSL_CIPHER_get_protocol_id()\fR returns a 2\-byte integer representing the \s-1TLS\s0 +protocol-specific \s-1ID.\s0 +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), \fBSSL_get_current_cipher\fR\|(3), +\&\fBSSL_get_ciphers\fR\|(3), \fBciphers\fR\|(1) +.SH "HISTORY" +.IX Header "HISTORY" +The \fBSSL_CIPHER_get_version()\fR function was updated to always return the +correct protocol string in OpenSSL 1.1.0. +.PP +The \fBSSL_CIPHER_description()\fR function was changed to return \fB\s-1NULL\s0\fR on error, +rather than a fixed string, in OpenSSL 1.1.0. +.PP +The \fBSSL_CIPHER_get_handshake_digest()\fR function was added in OpenSSL 1.1.1. +.PP +The \fBSSL_CIPHER_standard_name()\fR function was globally available in OpenSSL 1.1.1. + Before OpenSSL 1.1.1, tracing (\fBenable-ssl-trace\fR argument to Configure) was +required to enable this function. +.PP +The \fBOPENSSL_cipher_name()\fR function was added in OpenSSL 1.1.1. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_COMP_add_compression_method.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_COMP_add_compression_method.3 new file mode 100644 index 00000000..c7eb49f9 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_COMP_add_compression_method.3 @@ -0,0 +1,229 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_COMP_ADD_COMPRESSION_METHOD 3" +.TH SSL_COMP_ADD_COMPRESSION_METHOD 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_COMP_add_compression_method, SSL_COMP_get_compression_methods, SSL_COMP_get0_name, SSL_COMP_get_id, SSL_COMP_free_compression_methods \&\- handle SSL/TLS integrated compression methods +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int SSL_COMP_add_compression_method(int id, COMP_METHOD *cm); +\& STACK_OF(SSL_COMP) *SSL_COMP_get_compression_methods(void); +\& const char *SSL_COMP_get0_name(const SSL_COMP *comp); +\& int SSL_COMP_get_id(const SSL_COMP *comp); +.Ve +.PP +Deprecated: +.PP +.Vb 3 +\& #if OPENSSL_API_COMPAT < 0x10100000L +\& void SSL_COMP_free_compression_methods(void) +\& #endif +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_COMP_add_compression_method()\fR adds the compression method \fBcm\fR with +the identifier \fBid\fR to the list of available compression methods. This +list is globally maintained for all \s-1SSL\s0 operations within this application. +It cannot be set for specific \s-1SSL_CTX\s0 or \s-1SSL\s0 objects. +.PP +\&\fBSSL_COMP_get_compression_methods()\fR returns a stack of all of the available +compression methods or \s-1NULL\s0 on error. +.PP +\&\fBSSL_COMP_get0_name()\fR returns the name of the compression method \fBcomp\fR. +.PP +\&\fBSSL_COMP_get_id()\fR returns the id of the compression method \fBcomp\fR. +.PP +\&\fBSSL_COMP_free_compression_methods()\fR releases any resources acquired to +maintain the internal table of compression methods. +.SH "NOTES" +.IX Header "NOTES" +The \s-1TLS\s0 standard (or SSLv3) allows the integration of compression methods +into the communication. The \s-1TLS RFC\s0 does however not specify compression +methods or their corresponding identifiers, so there is currently no compatible +way to integrate compression with unknown peers. It is therefore currently not +recommended to integrate compression into applications. Applications for +non-public use may agree on certain compression methods. Using different +compression methods with the same identifier will lead to connection failure. +.PP +An OpenSSL client speaking a protocol that allows compression (SSLv3, TLSv1) +will unconditionally send the list of all compression methods enabled with +\&\fBSSL_COMP_add_compression_method()\fR to the server during the handshake. +Unlike the mechanisms to set a cipher list, there is no method available to +restrict the list of compression method on a per connection basis. +.PP +An OpenSSL server will match the identifiers listed by a client against +its own compression methods and will unconditionally activate compression +when a matching identifier is found. There is no way to restrict the list +of compression methods supported on a per connection basis. +.PP +If enabled during compilation, the OpenSSL library will have the +\&\fBCOMP_zlib()\fR compression method available. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_COMP_add_compression_method()\fR may return the following values: +.IP "0" 4 +The operation succeeded. +.IP "1" 4 +.IX Item "1" +The operation failed. Check the error queue to find out the reason. +.PP +\&\fBSSL_COMP_get_compression_methods()\fR returns the stack of compressions methods or +\&\s-1NULL\s0 on error. +.PP +\&\fBSSL_COMP_get0_name()\fR returns the name of the compression method or \s-1NULL\s0 on error. +.PP +\&\fBSSL_COMP_get_id()\fR returns the name of the compression method or \-1 on error. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7) +.SH "HISTORY" +.IX Header "HISTORY" +The \fBSSL_COMP_free_compression_methods()\fR function was deprecated in OpenSSL 1.1.0. +The \fBSSL_COMP_get0_name()\fR and \fBSSL_comp_get_id()\fR functions were added in OpenSSL 1.1.0d. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2001\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CONF_CTX_new.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CONF_CTX_new.3 new file mode 100644 index 00000000..28a9ddf5 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CONF_CTX_new.3 @@ -0,0 +1,181 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CONF_CTX_NEW 3" +.TH SSL_CONF_CTX_NEW 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_CONF_CTX_new, SSL_CONF_CTX_free \- SSL configuration allocation functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& SSL_CONF_CTX *SSL_CONF_CTX_new(void); +\& void SSL_CONF_CTX_free(SSL_CONF_CTX *cctx); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The function \fBSSL_CONF_CTX_new()\fR allocates and initialises an \fB\s-1SSL_CONF_CTX\s0\fR +structure for use with the \s-1SSL_CONF\s0 functions. +.PP +The function \fBSSL_CONF_CTX_free()\fR frees up the context \fBcctx\fR. +If \fBcctx\fR is \s-1NULL\s0 nothing is done. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_CONF_CTX_new()\fR returns either the newly allocated \fB\s-1SSL_CONF_CTX\s0\fR structure +or \fB\s-1NULL\s0\fR if an error occurs. +.PP +\&\fBSSL_CONF_CTX_free()\fR does not return a value. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBSSL_CONF_CTX_set_flags\fR\|(3), +\&\fBSSL_CONF_CTX_set_ssl_ctx\fR\|(3), +\&\fBSSL_CONF_CTX_set1_prefix\fR\|(3), +\&\fBSSL_CONF_cmd\fR\|(3), +\&\fBSSL_CONF_cmd_argv\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +These functions were added in OpenSSL 1.0.2. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2012\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CONF_CTX_set1_prefix.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CONF_CTX_set1_prefix.3 new file mode 100644 index 00000000..350e5c0c --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CONF_CTX_set1_prefix.3 @@ -0,0 +1,188 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CONF_CTX_SET1_PREFIX 3" +.TH SSL_CONF_CTX_SET1_PREFIX 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_CONF_CTX_set1_prefix \- Set configuration context command prefix +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& unsigned int SSL_CONF_CTX_set1_prefix(SSL_CONF_CTX *cctx, const char *prefix); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The function \fBSSL_CONF_CTX_set1_prefix()\fR sets the command prefix of \fBcctx\fR +to \fBprefix\fR. If \fBprefix\fR is \fB\s-1NULL\s0\fR it is restored to the default value. +.SH "NOTES" +.IX Header "NOTES" +Command prefixes alter the commands recognised by subsequent \fBSSL_CONF_cmd()\fR +calls. For example for files, if the prefix \*(L"\s-1SSL\*(R"\s0 is set then command names +such as \*(L"SSLProtocol\*(R", \*(L"SSLOptions\*(R" etc. are recognised instead of \*(L"Protocol\*(R" +and \*(L"Options\*(R". Similarly for command lines if the prefix is \*(L"\-\-ssl\-\*(R" then +\&\*(L"\-\-ssl\-no_tls1_2\*(R" is recognised instead of \*(L"\-no_tls1_2\*(R". +.PP +If the \fB\s-1SSL_CONF_FLAG_CMDLINE\s0\fR flag is set then prefix checks are case +sensitive and \*(L"\-\*(R" is the default. In the unlikely even an application +explicitly wants to set no prefix it must be explicitly set to "". +.PP +If the \fB\s-1SSL_CONF_FLAG_FILE\s0\fR flag is set then prefix checks are case +insensitive and no prefix is the default. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_CONF_CTX_set1_prefix()\fR returns 1 for success and 0 for failure. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBSSL_CONF_CTX_new\fR\|(3), +\&\fBSSL_CONF_CTX_set_flags\fR\|(3), +\&\fBSSL_CONF_CTX_set_ssl_ctx\fR\|(3), +\&\fBSSL_CONF_cmd\fR\|(3), +\&\fBSSL_CONF_cmd_argv\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +These functions were added in OpenSSL 1.0.2. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2012\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CONF_CTX_set_flags.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CONF_CTX_set_flags.3 new file mode 100644 index 00000000..16d1b24a --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CONF_CTX_set_flags.3 @@ -0,0 +1,205 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CONF_CTX_SET_FLAGS 3" +.TH SSL_CONF_CTX_SET_FLAGS 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_CONF_CTX_set_flags, SSL_CONF_CTX_clear_flags \- Set or clear SSL configuration context flags +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& unsigned int SSL_CONF_CTX_set_flags(SSL_CONF_CTX *cctx, unsigned int flags); +\& unsigned int SSL_CONF_CTX_clear_flags(SSL_CONF_CTX *cctx, unsigned int flags); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The function \fBSSL_CONF_CTX_set_flags()\fR sets \fBflags\fR in the context \fBcctx\fR. +.PP +The function \fBSSL_CONF_CTX_clear_flags()\fR clears \fBflags\fR in the context \fBcctx\fR. +.SH "NOTES" +.IX Header "NOTES" +The flags set affect how subsequent calls to \fBSSL_CONF_cmd()\fR or +\&\fBSSL_CONF_argv()\fR behave. +.PP +Currently the following \fBflags\fR values are recognised: +.IP "\s-1SSL_CONF_FLAG_CMDLINE, SSL_CONF_FLAG_FILE\s0" 4 +.IX Item "SSL_CONF_FLAG_CMDLINE, SSL_CONF_FLAG_FILE" +recognise options intended for command line or configuration file use. At +least one of these flags must be set. +.IP "\s-1SSL_CONF_FLAG_CLIENT, SSL_CONF_FLAG_SERVER\s0" 4 +.IX Item "SSL_CONF_FLAG_CLIENT, SSL_CONF_FLAG_SERVER" +recognise options intended for use in \s-1SSL/TLS\s0 clients or servers. One or +both of these flags must be set. +.IP "\s-1SSL_CONF_FLAG_CERTIFICATE\s0" 4 +.IX Item "SSL_CONF_FLAG_CERTIFICATE" +recognise certificate and private key options. +.IP "\s-1SSL_CONF_FLAG_REQUIRE_PRIVATE\s0" 4 +.IX Item "SSL_CONF_FLAG_REQUIRE_PRIVATE" +If this option is set then if a private key is not specified for a certificate +it will attempt to load a private key from the certificate file when +\&\fBSSL_CONF_CTX_finish()\fR is called. If a key cannot be loaded from the certificate +file an error occurs. +.IP "\s-1SSL_CONF_FLAG_SHOW_ERRORS\s0" 4 +.IX Item "SSL_CONF_FLAG_SHOW_ERRORS" +indicate errors relating to unrecognised options or missing arguments in +the error queue. If this option isn't set such errors are only reflected +in the return values of \fBSSL_CONF_set_cmd()\fR or \fBSSL_CONF_set_argv()\fR +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_CONF_CTX_set_flags()\fR and \fBSSL_CONF_CTX_clear_flags()\fR returns the new flags +value after setting or clearing flags. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBSSL_CONF_CTX_new\fR\|(3), +\&\fBSSL_CONF_CTX_set_ssl_ctx\fR\|(3), +\&\fBSSL_CONF_CTX_set1_prefix\fR\|(3), +\&\fBSSL_CONF_cmd\fR\|(3), +\&\fBSSL_CONF_cmd_argv\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +These functions were added in OpenSSL 1.0.2. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2012\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CONF_CTX_set_ssl_ctx.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CONF_CTX_set_ssl_ctx.3 new file mode 100644 index 00000000..5b8be317 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CONF_CTX_set_ssl_ctx.3 @@ -0,0 +1,186 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CONF_CTX_SET_SSL_CTX 3" +.TH SSL_CONF_CTX_SET_SSL_CTX 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_CONF_CTX_set_ssl_ctx, SSL_CONF_CTX_set_ssl \- set context to configure +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& void SSL_CONF_CTX_set_ssl_ctx(SSL_CONF_CTX *cctx, SSL_CTX *ctx); +\& void SSL_CONF_CTX_set_ssl(SSL_CONF_CTX *cctx, SSL *ssl); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_CONF_CTX_set_ssl_ctx()\fR sets the context associated with \fBcctx\fR to the +\&\fB\s-1SSL_CTX\s0\fR structure \fBctx\fR. Any previous \fB\s-1SSL\s0\fR or \fB\s-1SSL_CTX\s0\fR associated with +\&\fBcctx\fR is cleared. Subsequent calls to \fBSSL_CONF_cmd()\fR will be sent to +\&\fBctx\fR. +.PP +\&\fBSSL_CONF_CTX_set_ssl()\fR sets the context associated with \fBcctx\fR to the +\&\fB\s-1SSL\s0\fR structure \fBssl\fR. Any previous \fB\s-1SSL\s0\fR or \fB\s-1SSL_CTX\s0\fR associated with +\&\fBcctx\fR is cleared. Subsequent calls to \fBSSL_CONF_cmd()\fR will be sent to +\&\fBssl\fR. +.SH "NOTES" +.IX Header "NOTES" +The context need not be set or it can be set to \fB\s-1NULL\s0\fR in which case only +syntax checking of commands is performed, where possible. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_CONF_CTX_set_ssl_ctx()\fR and \fBSSL_CTX_set_ssl()\fR do not return a value. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBSSL_CONF_CTX_new\fR\|(3), +\&\fBSSL_CONF_CTX_set_flags\fR\|(3), +\&\fBSSL_CONF_CTX_set1_prefix\fR\|(3), +\&\fBSSL_CONF_cmd\fR\|(3), +\&\fBSSL_CONF_cmd_argv\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +These functions were added in OpenSSL 1.0.2. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2012\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CONF_cmd.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CONF_cmd.3 new file mode 100644 index 00000000..c19beba3 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CONF_cmd.3 @@ -0,0 +1,777 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CONF_CMD 3" +.TH SSL_CONF_CMD 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_CONF_cmd_value_type, SSL_CONF_cmd \- send configuration command +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int SSL_CONF_cmd(SSL_CONF_CTX *cctx, const char *cmd, const char *value); +\& int SSL_CONF_cmd_value_type(SSL_CONF_CTX *cctx, const char *cmd); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The function \fBSSL_CONF_cmd()\fR performs configuration operation \fBcmd\fR with +optional parameter \fBvalue\fR on \fBctx\fR. Its purpose is to simplify application +configuration of \fB\s-1SSL_CTX\s0\fR or \fB\s-1SSL\s0\fR structures by providing a common +framework for command line options or configuration files. +.PP +\&\fBSSL_CONF_cmd_value_type()\fR returns the type of value that \fBcmd\fR refers to. +.SH "SUPPORTED COMMAND LINE COMMANDS" +.IX Header "SUPPORTED COMMAND LINE COMMANDS" +Currently supported \fBcmd\fR names for command lines (i.e. when the +flag \fB\s-1SSL_CONF_CMDLINE\s0\fR is set) are listed below. Note: all \fBcmd\fR names +are case sensitive. Unless otherwise stated commands can be used by +both clients and servers and the \fBvalue\fR parameter is not used. The default +prefix for command line commands is \fB\-\fR and that is reflected below. +.IP "\fB\-sigalgs\fR" 4 +.IX Item "-sigalgs" +This sets the supported signature algorithms for TLSv1.2 and TLSv1.3. +For clients this +value is used directly for the supported signature algorithms extension. For +servers it is used to determine which signature algorithms to support. +.Sp +The \fBvalue\fR argument should be a colon separated list of signature algorithms +in order of decreasing preference of the form \fBalgorithm+hash\fR or +\&\fBsignature_scheme\fR. \fBalgorithm\fR +is one of \fB\s-1RSA\s0\fR, \fB\s-1DSA\s0\fR or \fB\s-1ECDSA\s0\fR and \fBhash\fR is a supported algorithm +\&\s-1OID\s0 short name such as \fB\s-1SHA1\s0\fR, \fB\s-1SHA224\s0\fR, \fB\s-1SHA256\s0\fR, \fB\s-1SHA384\s0\fR of \fB\s-1SHA512\s0\fR. +Note: algorithm and hash names are case sensitive. +\&\fBsignature_scheme\fR is one of the signature schemes defined in TLSv1.3, +specified using the \s-1IETF\s0 name, e.g., \fBecdsa_secp256r1_sha256\fR, \fBed25519\fR, +or \fBrsa_pss_pss_sha256\fR. +.Sp +If this option is not set then all signature algorithms supported by the +OpenSSL library are permissible. +.Sp +Note: algorithms which specify a PKCS#1 v1.5 signature scheme (either by +using \fB\s-1RSA\s0\fR as the \fBalgorithm\fR or by using one of the \fBrsa_pkcs1_*\fR +identifiers) are ignored in TLSv1.3 and will not be negotiated. +.IP "\fB\-client_sigalgs\fR" 4 +.IX Item "-client_sigalgs" +This sets the supported signature algorithms associated with client +authentication for TLSv1.2 and TLSv1.3. +For servers the value is used in the +\&\fBsignature_algorithms\fR field of a \fBCertificateRequest\fR message. +For clients it is +used to determine which signature algorithm to use with the client certificate. +If a server does not request a certificate this option has no effect. +.Sp +The syntax of \fBvalue\fR is identical to \fB\-sigalgs\fR. If not set then +the value set for \fB\-sigalgs\fR will be used instead. +.IP "\fB\-groups\fR" 4 +.IX Item "-groups" +This sets the supported groups. For clients, the groups are +sent using the supported groups extension. For servers, it is used +to determine which group to use. This setting affects groups used for +signatures (in TLSv1.2 and earlier) and key exchange. The first group listed +will also be used for the \fBkey_share\fR sent by a client in a TLSv1.3 +\&\fBClientHello\fR. +.Sp +The \fBvalue\fR argument is a colon separated list of groups. The group can be +either the \fB\s-1NIST\s0\fR name (e.g. \fBP\-256\fR), some other commonly used name where +applicable (e.g. \fBX25519\fR) or an OpenSSL \s-1OID\s0 name (e.g \fBprime256v1\fR). Group +names are case sensitive. The list should be in order of preference with the +most preferred group first. +.IP "\fB\-curves\fR" 4 +.IX Item "-curves" +This is a synonym for the \*(L"\-groups\*(R" command. +.IP "\fB\-named_curve\fR" 4 +.IX Item "-named_curve" +This sets the temporary curve used for ephemeral \s-1ECDH\s0 modes. Only used by +servers +.Sp +The \fBvalue\fR argument is a curve name or the special value \fBauto\fR which +picks an appropriate curve based on client and server preferences. The curve +can be either the \fB\s-1NIST\s0\fR name (e.g. \fBP\-256\fR) or an OpenSSL \s-1OID\s0 name +(e.g \fBprime256v1\fR). Curve names are case sensitive. +.IP "\fB\-cipher\fR" 4 +.IX Item "-cipher" +Sets the TLSv1.2 and below ciphersuite list to \fBvalue\fR. This list will be +combined with any configured TLSv1.3 ciphersuites. Note: syntax checking +of \fBvalue\fR is currently not performed unless a \fB\s-1SSL\s0\fR or \fB\s-1SSL_CTX\s0\fR structure is +associated with \fBcctx\fR. +.IP "\fB\-ciphersuites\fR" 4 +.IX Item "-ciphersuites" +Sets the available ciphersuites for TLSv1.3 to value. This is a simple colon +(\*(L":\*(R") separated list of TLSv1.3 ciphersuite names in order of preference. This +list will be combined any configured TLSv1.2 and below ciphersuites. +See \fBciphers\fR\|(1) for more information. +.IP "\fB\-cert\fR" 4 +.IX Item "-cert" +Attempts to use the file \fBvalue\fR as the certificate for the appropriate +context. It currently uses \fBSSL_CTX_use_certificate_chain_file()\fR if an \fB\s-1SSL_CTX\s0\fR +structure is set or \fBSSL_use_certificate_file()\fR with filetype \s-1PEM\s0 if an \fB\s-1SSL\s0\fR +structure is set. This option is only supported if certificate operations +are permitted. +.IP "\fB\-key\fR" 4 +.IX Item "-key" +Attempts to use the file \fBvalue\fR as the private key for the appropriate +context. This option is only supported if certificate operations +are permitted. Note: if no \fB\-key\fR option is set then a private key is +not loaded unless the flag \fB\s-1SSL_CONF_FLAG_REQUIRE_PRIVATE\s0\fR is set. +.IP "\fB\-dhparam\fR" 4 +.IX Item "-dhparam" +Attempts to use the file \fBvalue\fR as the set of temporary \s-1DH\s0 parameters for +the appropriate context. This option is only supported if certificate +operations are permitted. +.IP "\fB\-record_padding\fR" 4 +.IX Item "-record_padding" +Attempts to pad TLSv1.3 records so that they are a multiple of \fBvalue\fR in +length on send. A \fBvalue\fR of 0 or 1 turns off padding. Otherwise, the +\&\fBvalue\fR must be >1 or <=16384. +.IP "\fB\-no_renegotiation\fR" 4 +.IX Item "-no_renegotiation" +Disables all attempts at renegotiation in TLSv1.2 and earlier, same as setting +\&\fB\s-1SSL_OP_NO_RENEGOTIATION\s0\fR. +.IP "\fB\-min_protocol\fR, \fB\-max_protocol\fR" 4 +.IX Item "-min_protocol, -max_protocol" +Sets the minimum and maximum supported protocol. +Currently supported protocol values are \fBSSLv3\fR, \fBTLSv1\fR, +\&\fBTLSv1.1\fR, \fBTLSv1.2\fR, \fBTLSv1.3\fR for \s-1TLS\s0 and \fBDTLSv1\fR, \fBDTLSv1.2\fR for \s-1DTLS,\s0 +and \fBNone\fR 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. +.IP "\fB\-no_ssl3\fR, \fB\-no_tls1\fR, \fB\-no_tls1_1\fR, \fB\-no_tls1_2\fR, \fB\-no_tls1_3\fR" 4 +.IX Item "-no_ssl3, -no_tls1, -no_tls1_1, -no_tls1_2, -no_tls1_3" +Disables protocol support for SSLv3, TLSv1.0, TLSv1.1, TLSv1.2 or TLSv1.3 by +setting the corresponding options \fBSSL_OP_NO_SSLv3\fR, \fBSSL_OP_NO_TLSv1\fR, +\&\fBSSL_OP_NO_TLSv1_1\fR, \fBSSL_OP_NO_TLSv1_2\fR and \fBSSL_OP_NO_TLSv1_3\fR +respectively. These options are deprecated, instead use \fB\-min_protocol\fR and +\&\fB\-max_protocol\fR. +.IP "\fB\-bugs\fR" 4 +.IX Item "-bugs" +Various bug workarounds are set, same as setting \fB\s-1SSL_OP_ALL\s0\fR. +.IP "\fB\-comp\fR" 4 +.IX Item "-comp" +Enables support for \s-1SSL/TLS\s0 compression, same as clearing +\&\fB\s-1SSL_OP_NO_COMPRESSION\s0\fR. +This command was introduced in OpenSSL 1.1.0. +As of OpenSSL 1.1.0, compression is off by default. +.IP "\fB\-no_comp\fR" 4 +.IX Item "-no_comp" +Disables support for \s-1SSL/TLS\s0 compression, same as setting +\&\fB\s-1SSL_OP_NO_COMPRESSION\s0\fR. +As of OpenSSL 1.1.0, compression is off by default. +.IP "\fB\-no_ticket\fR" 4 +.IX Item "-no_ticket" +Disables support for session tickets, same as setting \fB\s-1SSL_OP_NO_TICKET\s0\fR. +.IP "\fB\-serverpref\fR" 4 +.IX Item "-serverpref" +Use server and not client preference order when determining which cipher suite, +signature algorithm or elliptic curve to use for an incoming connection. +Equivalent to \fB\s-1SSL_OP_CIPHER_SERVER_PREFERENCE\s0\fR. Only used by servers. +.IP "\fB\-prioritize_chacha\fR" 4 +.IX Item "-prioritize_chacha" +Prioritize ChaCha ciphers when the client has a ChaCha20 cipher at the top of +its preference list. This usually indicates a client without \s-1AES\s0 hardware +acceleration (e.g. mobile) is in use. Equivalent to \fB\s-1SSL_OP_PRIORITIZE_CHACHA\s0\fR. +Only used by servers. Requires \fB\-serverpref\fR. +.IP "\fB\-no_resumption_on_reneg\fR" 4 +.IX Item "-no_resumption_on_reneg" +set \s-1SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION\s0 flag. Only used by servers. +.IP "\fB\-legacyrenegotiation\fR" 4 +.IX Item "-legacyrenegotiation" +permits the use of unsafe legacy renegotiation. Equivalent to setting +\&\fB\s-1SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION\s0\fR. +.IP "\fB\-legacy_server_connect\fR, \fB\-no_legacy_server_connect\fR" 4 +.IX Item "-legacy_server_connect, -no_legacy_server_connect" +permits or prohibits the use of unsafe legacy renegotiation for OpenSSL +clients only. Equivalent to setting or clearing \fB\s-1SSL_OP_LEGACY_SERVER_CONNECT\s0\fR. +Set by default. +.IP "\fB\-allow_no_dhe_kex\fR" 4 +.IX Item "-allow_no_dhe_kex" +In TLSv1.3 allow a non\-(ec)dhe based key exchange mode on resumption. This means +that there will be no forward secrecy for the resumed session. +.IP "\fB\-strict\fR" 4 +.IX Item "-strict" +enables strict mode protocol handling. Equivalent to setting +\&\fB\s-1SSL_CERT_FLAG_TLS_STRICT\s0\fR. +.IP "\fB\-anti_replay\fR, \fB\-no_anti_replay\fR" 4 +.IX Item "-anti_replay, -no_anti_replay" +Switches replay protection, on or off respectively. With replay protection on, +OpenSSL will automatically detect if a session ticket has been used more than +once, TLSv1.3 has been negotiated, and early data is enabled on the server. A +full handshake is forced if a session ticket is used a second or subsequent +time. Anti-Replay is on by default unless overridden by a configuration file and +is only used by servers. Anti-replay measures are required for compliance with +the TLSv1.3 specification. Some applications may be able to mitigate the replay +risks in other ways and in such cases the built-in OpenSSL functionality is not +required. Switching off anti-replay is equivalent to \fB\s-1SSL_OP_NO_ANTI_REPLAY\s0\fR. +.SH "SUPPORTED CONFIGURATION FILE COMMANDS" +.IX Header "SUPPORTED CONFIGURATION FILE COMMANDS" +Currently supported \fBcmd\fR names for configuration files (i.e. when the +flag \fB\s-1SSL_CONF_FLAG_FILE\s0\fR is set) are listed below. All configuration file +\&\fBcmd\fR names are case insensitive so \fBsignaturealgorithms\fR is recognised +as well as \fBSignatureAlgorithms\fR. Unless otherwise stated the \fBvalue\fR names +are also case insensitive. +.PP +Note: the command prefix (if set) alters the recognised \fBcmd\fR values. +.IP "\fBCipherString\fR" 4 +.IX Item "CipherString" +Sets the ciphersuite list for TLSv1.2 and below to \fBvalue\fR. This list will be +combined with any configured TLSv1.3 ciphersuites. Note: syntax +checking of \fBvalue\fR is currently not performed unless an \fB\s-1SSL\s0\fR or \fB\s-1SSL_CTX\s0\fR +structure is associated with \fBcctx\fR. +.IP "\fBCiphersuites\fR" 4 +.IX Item "Ciphersuites" +Sets the available ciphersuites for TLSv1.3 to \fBvalue\fR. This is a simple colon +(\*(L":\*(R") separated list of TLSv1.3 ciphersuite names in order of preference. This +list will be combined any configured TLSv1.2 and below ciphersuites. +See \fBciphers\fR\|(1) for more information. +.IP "\fBCertificate\fR" 4 +.IX Item "Certificate" +Attempts to use the file \fBvalue\fR as the certificate for the appropriate +context. It currently uses \fBSSL_CTX_use_certificate_chain_file()\fR if an \fB\s-1SSL_CTX\s0\fR +structure is set or \fBSSL_use_certificate_file()\fR with filetype \s-1PEM\s0 if an \fB\s-1SSL\s0\fR +structure is set. This option is only supported if certificate operations +are permitted. +.IP "\fBPrivateKey\fR" 4 +.IX Item "PrivateKey" +Attempts to use the file \fBvalue\fR as the private key for the appropriate +context. This option is only supported if certificate operations +are permitted. Note: if no \fBPrivateKey\fR option is set then a private key is +not loaded unless the \fB\s-1SSL_CONF_FLAG_REQUIRE_PRIVATE\s0\fR is set. +.IP "\fBChainCAFile\fR, \fBChainCAPath\fR, \fBVerifyCAFile\fR, \fBVerifyCAPath\fR" 4 +.IX Item "ChainCAFile, ChainCAPath, VerifyCAFile, VerifyCAPath" +These options indicate a file or directory used for building certificate +chains or verifying certificate chains. These options are only supported +if certificate operations are permitted. +.IP "\fBRequestCAFile\fR" 4 +.IX Item "RequestCAFile" +This option indicates a file containing a set of certificates in \s-1PEM\s0 form. +The subject names of the certificates are sent to the peer in the +\&\fBcertificate_authorities\fR extension for \s-1TLS 1.3\s0 (in ClientHello or +CertificateRequest) or in a certificate request for previous versions or +\&\s-1TLS.\s0 +.IP "\fBServerInfoFile\fR" 4 +.IX Item "ServerInfoFile" +Attempts to use the file \fBvalue\fR in the \*(L"serverinfo\*(R" extension using the +function SSL_CTX_use_serverinfo_file. +.IP "\fBDHParameters\fR" 4 +.IX Item "DHParameters" +Attempts to use the file \fBvalue\fR as the set of temporary \s-1DH\s0 parameters for +the appropriate context. This option is only supported if certificate +operations are permitted. +.IP "\fBRecordPadding\fR" 4 +.IX Item "RecordPadding" +Attempts to pad TLSv1.3 records so that they are a multiple of \fBvalue\fR in +length on send. A \fBvalue\fR of 0 or 1 turns off padding. Otherwise, the +\&\fBvalue\fR must be >1 or <=16384. +.IP "\fBSignatureAlgorithms\fR" 4 +.IX Item "SignatureAlgorithms" +This sets the supported signature algorithms for TLSv1.2 and TLSv1.3. +For clients this +value is used directly for the supported signature algorithms extension. For +servers it is used to determine which signature algorithms to support. +.Sp +The \fBvalue\fR argument should be a colon separated list of signature algorithms +in order of decreasing preference of the form \fBalgorithm+hash\fR or +\&\fBsignature_scheme\fR. \fBalgorithm\fR +is one of \fB\s-1RSA\s0\fR, \fB\s-1DSA\s0\fR or \fB\s-1ECDSA\s0\fR and \fBhash\fR is a supported algorithm +\&\s-1OID\s0 short name such as \fB\s-1SHA1\s0\fR, \fB\s-1SHA224\s0\fR, \fB\s-1SHA256\s0\fR, \fB\s-1SHA384\s0\fR of \fB\s-1SHA512\s0\fR. +Note: algorithm and hash names are case sensitive. +\&\fBsignature_scheme\fR is one of the signature schemes defined in TLSv1.3, +specified using the \s-1IETF\s0 name, e.g., \fBecdsa_secp256r1_sha256\fR, \fBed25519\fR, +or \fBrsa_pss_pss_sha256\fR. +.Sp +If this option is not set then all signature algorithms supported by the +OpenSSL library are permissible. +.Sp +Note: algorithms which specify a PKCS#1 v1.5 signature scheme (either by +using \fB\s-1RSA\s0\fR as the \fBalgorithm\fR or by using one of the \fBrsa_pkcs1_*\fR +identifiers) are ignored in TLSv1.3 and will not be negotiated. +.IP "\fBClientSignatureAlgorithms\fR" 4 +.IX Item "ClientSignatureAlgorithms" +This sets the supported signature algorithms associated with client +authentication for TLSv1.2 and TLSv1.3. +For servers the value is used in the +\&\fBsignature_algorithms\fR field of a \fBCertificateRequest\fR message. +For clients it is +used to determine which signature algorithm to use with the client certificate. +If a server does not request a certificate this option has no effect. +.Sp +The syntax of \fBvalue\fR is identical to \fBSignatureAlgorithms\fR. If not set then +the value set for \fBSignatureAlgorithms\fR will be used instead. +.IP "\fBGroups\fR" 4 +.IX Item "Groups" +This sets the supported groups. For clients, the groups are +sent using the supported groups extension. For servers, it is used +to determine which group to use. This setting affects groups used for +signatures (in TLSv1.2 and earlier) and key exchange. The first group listed +will also be used for the \fBkey_share\fR sent by a client in a TLSv1.3 +\&\fBClientHello\fR. +.Sp +The \fBvalue\fR argument is a colon separated list of groups. The group can be +either the \fB\s-1NIST\s0\fR name (e.g. \fBP\-256\fR), some other commonly used name where +applicable (e.g. \fBX25519\fR) or an OpenSSL \s-1OID\s0 name (e.g \fBprime256v1\fR). Group +names are case sensitive. The list should be in order of preference with the +most preferred group first. +.IP "\fBCurves\fR" 4 +.IX Item "Curves" +This is a synonym for the \*(L"Groups\*(R" command. +.IP "\fBMinProtocol\fR" 4 +.IX Item "MinProtocol" +This sets the minimum supported \s-1SSL, TLS\s0 or \s-1DTLS\s0 version. +.Sp +Currently supported protocol values are \fBSSLv3\fR, \fBTLSv1\fR, \fBTLSv1.1\fR, +\&\fBTLSv1.2\fR, \fBTLSv1.3\fR, \fBDTLSv1\fR and \fBDTLSv1.2\fR. +The value \fBNone\fR will disable the limit. +.IP "\fBMaxProtocol\fR" 4 +.IX Item "MaxProtocol" +This sets the maximum supported \s-1SSL, TLS\s0 or \s-1DTLS\s0 version. +.Sp +Currently supported protocol values are \fBSSLv3\fR, \fBTLSv1\fR, \fBTLSv1.1\fR, +\&\fBTLSv1.2\fR, \fBTLSv1.3\fR, \fBDTLSv1\fR and \fBDTLSv1.2\fR. +The value \fBNone\fR will disable the limit. +.IP "\fBProtocol\fR" 4 +.IX Item "Protocol" +This can be used to enable or disable certain versions of the \s-1SSL, +TLS\s0 or \s-1DTLS\s0 protocol. +.Sp +The \fBvalue\fR argument is a comma separated list of supported protocols +to enable or disable. +If a protocol is preceded by \fB\-\fR that version is disabled. +.Sp +All protocol versions are enabled by default. +You need to disable at least one protocol version for this setting have any +effect. +Only enabling some protocol versions does not disable the other protocol +versions. +.Sp +Currently supported protocol values are \fBSSLv3\fR, \fBTLSv1\fR, \fBTLSv1.1\fR, +\&\fBTLSv1.2\fR, \fBTLSv1.3\fR, \fBDTLSv1\fR and \fBDTLSv1.2\fR. +The special value \fB\s-1ALL\s0\fR refers to all supported versions. +.Sp +This can't enable protocols that are disabled using \fBMinProtocol\fR +or \fBMaxProtocol\fR, but can disable protocols that are still allowed +by them. +.Sp +The \fBProtocol\fR command is fragile and deprecated; do not use it. +Use \fBMinProtocol\fR and \fBMaxProtocol\fR instead. +If you do use \fBProtocol\fR, make sure that the resulting range of enabled +protocols has no \*(L"holes\*(R", e.g. if \s-1TLS 1.0\s0 and \s-1TLS 1.2\s0 are both enabled, make +sure to also leave \s-1TLS 1.1\s0 enabled. +.IP "\fBOptions\fR" 4 +.IX Item "Options" +The \fBvalue\fR argument is a comma separated list of various flags to set. +If a flag string is preceded \fB\-\fR it is disabled. +See the \fBSSL_CTX_set_options\fR\|(3) function for more details of +individual options. +.Sp +Each option is listed below. Where an operation is enabled by default +the \fB\-flag\fR syntax is needed to disable it. +.Sp +\&\fBSessionTicket\fR: session ticket support, enabled by default. Inverse of +\&\fB\s-1SSL_OP_NO_TICKET\s0\fR: that is \fB\-SessionTicket\fR is the same as setting +\&\fB\s-1SSL_OP_NO_TICKET\s0\fR. +.Sp +\&\fBCompression\fR: \s-1SSL/TLS\s0 compression support, enabled by default. Inverse +of \fB\s-1SSL_OP_NO_COMPRESSION\s0\fR. +.Sp +\&\fBEmptyFragments\fR: use empty fragments as a countermeasure against a +\&\s-1SSL 3.0/TLS 1.0\s0 protocol vulnerability affecting \s-1CBC\s0 ciphers. It +is set by default. Inverse of \fB\s-1SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS\s0\fR. +.Sp +\&\fBBugs\fR: enable various bug workarounds. Same as \fB\s-1SSL_OP_ALL\s0\fR. +.Sp +\&\fBDHSingle\fR: enable single use \s-1DH\s0 keys, set by default. Inverse of +\&\fB\s-1SSL_OP_DH_SINGLE\s0\fR. Only used by servers. +.Sp +\&\fBECDHSingle\fR: enable single use \s-1ECDH\s0 keys, set by default. Inverse of +\&\fB\s-1SSL_OP_ECDH_SINGLE\s0\fR. Only used by servers. +.Sp +\&\fBServerPreference\fR: use server and not client preference order when +determining which cipher suite, signature algorithm or elliptic curve +to use for an incoming connection. Equivalent to +\&\fB\s-1SSL_OP_CIPHER_SERVER_PREFERENCE\s0\fR. Only used by servers. +.Sp +\&\fBPrioritizeChaCha\fR: prioritizes ChaCha ciphers when the client has a +ChaCha20 cipher at the top of its preference list. This usually indicates +a mobile client is in use. Equivalent to \fB\s-1SSL_OP_PRIORITIZE_CHACHA\s0\fR. +Only used by servers. +.Sp +\&\fBNoResumptionOnRenegotiation\fR: set +\&\fB\s-1SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION\s0\fR flag. Only used by servers. +.Sp +\&\fBNoRenegotiation\fR: disables all attempts at renegotiation in TLSv1.2 and +earlier, same as setting \fB\s-1SSL_OP_NO_RENEGOTIATION\s0\fR. +.Sp +\&\fBUnsafeLegacyRenegotiation\fR: permits the use of unsafe legacy renegotiation. +Equivalent to \fB\s-1SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION\s0\fR. +.Sp +\&\fBUnsafeLegacyServerConnect\fR: permits the use of unsafe legacy renegotiation +for OpenSSL clients only. Equivalent to \fB\s-1SSL_OP_LEGACY_SERVER_CONNECT\s0\fR. +Set by default. +.Sp +\&\fBEncryptThenMac\fR: use encrypt-then-mac extension, enabled by +default. Inverse of \fB\s-1SSL_OP_NO_ENCRYPT_THEN_MAC\s0\fR: that is, +\&\fB\-EncryptThenMac\fR is the same as setting \fB\s-1SSL_OP_NO_ENCRYPT_THEN_MAC\s0\fR. +.Sp +\&\fBAllowNoDHEKEX\fR: In TLSv1.3 allow a non\-(ec)dhe based key exchange mode on +resumption. This means that there will be no forward secrecy for the resumed +session. Equivalent to \fB\s-1SSL_OP_ALLOW_NO_DHE_KEX\s0\fR. +.Sp +\&\fBMiddleboxCompat\fR: If set then dummy Change Cipher Spec (\s-1CCS\s0) messages are sent +in TLSv1.3. This has the effect of making TLSv1.3 look more like TLSv1.2 so that +middleboxes that do not understand TLSv1.3 will not drop the connection. This +option is set by default. A future version of OpenSSL may not set this by +default. Equivalent to \fB\s-1SSL_OP_ENABLE_MIDDLEBOX_COMPAT\s0\fR. +.Sp +\&\fBAntiReplay\fR: If set then OpenSSL will automatically detect if a session ticket +has been used more than once, TLSv1.3 has been negotiated, and early data is +enabled on the server. A full handshake is forced if a session ticket is used a +second or subsequent time. This option is set by default and is only used by +servers. Anti-replay measures are required to comply with the TLSv1.3 +specification. Some applications may be able to mitigate the replay risks in +other ways and in such cases the built-in OpenSSL functionality is not required. +Disabling anti-replay is equivalent to setting \fB\s-1SSL_OP_NO_ANTI_REPLAY\s0\fR. +.IP "\fBVerifyMode\fR" 4 +.IX Item "VerifyMode" +The \fBvalue\fR argument is a comma separated list of flags to set. +.Sp +\&\fBPeer\fR enables peer verification: for clients only. +.Sp +\&\fBRequest\fR requests but does not require a certificate from the client. +Servers only. +.Sp +\&\fBRequire\fR requests and requires a certificate from the client: an error +occurs if the client does not present a certificate. Servers only. +.Sp +\&\fBOnce\fR requests a certificate from a client only on the initial connection: +not when renegotiating. Servers only. +.Sp +\&\fBRequestPostHandshake\fR configures the connection to support requests but does +not require a certificate from the client post-handshake. A certificate will +not be requested during the initial handshake. The server application must +provide a mechanism to request a certificate post-handshake. Servers only. +TLSv1.3 only. +.Sp +\&\fBRequiresPostHandshake\fR configures the connection to support requests and +requires a certificate from the client post-handshake: an error occurs if the +client does not present a certificate. A certificate will not be requested +during the initial handshake. The server application must provide a mechanism +to request a certificate post-handshake. Servers only. TLSv1.3 only. +.IP "\fBClientCAFile\fR, \fBClientCAPath\fR" 4 +.IX Item "ClientCAFile, ClientCAPath" +A file or directory of certificates in \s-1PEM\s0 format whose names are used as the +set of acceptable names for client CAs. Servers only. This option is only +supported if certificate operations are permitted. +.SH "SUPPORTED COMMAND TYPES" +.IX Header "SUPPORTED COMMAND TYPES" +The function \fBSSL_CONF_cmd_value_type()\fR currently returns one of the following +types: +.IP "\fB\s-1SSL_CONF_TYPE_UNKNOWN\s0\fR" 4 +.IX Item "SSL_CONF_TYPE_UNKNOWN" +The \fBcmd\fR string is unrecognised, this return value can be use to flag +syntax errors. +.IP "\fB\s-1SSL_CONF_TYPE_STRING\s0\fR" 4 +.IX Item "SSL_CONF_TYPE_STRING" +The value is a string without any specific structure. +.IP "\fB\s-1SSL_CONF_TYPE_FILE\s0\fR" 4 +.IX Item "SSL_CONF_TYPE_FILE" +The value is a file name. +.IP "\fB\s-1SSL_CONF_TYPE_DIR\s0\fR" 4 +.IX Item "SSL_CONF_TYPE_DIR" +The value is a directory name. +.IP "\fB\s-1SSL_CONF_TYPE_NONE\s0\fR" 4 +.IX Item "SSL_CONF_TYPE_NONE" +The value string is not used e.g. a command line option which doesn't take an +argument. +.SH "NOTES" +.IX Header "NOTES" +The order of operations is significant. This can be used to set either defaults +or values which cannot be overridden. For example if an application calls: +.PP +.Vb 2 +\& SSL_CONF_cmd(ctx, "Protocol", "\-SSLv3"); +\& SSL_CONF_cmd(ctx, userparam, uservalue); +.Ve +.PP +it will disable SSLv3 support by default but the user can override it. If +however the call sequence is: +.PP +.Vb 2 +\& SSL_CONF_cmd(ctx, userparam, uservalue); +\& SSL_CONF_cmd(ctx, "Protocol", "\-SSLv3"); +.Ve +.PP +SSLv3 is \fBalways\fR disabled and attempt to override this by the user are +ignored. +.PP +By checking the return code of \fBSSL_CONF_cmd()\fR it is possible to query if a +given \fBcmd\fR is recognised, this is useful if \fBSSL_CONF_cmd()\fR values are +mixed with additional application specific operations. +.PP +For example an application might call \fBSSL_CONF_cmd()\fR and if it returns +\&\-2 (unrecognised command) continue with processing of application specific +commands. +.PP +Applications can also use \fBSSL_CONF_cmd()\fR to process command lines though the +utility function \fBSSL_CONF_cmd_argv()\fR is normally used instead. One way +to do this is to set the prefix to an appropriate value using +\&\fBSSL_CONF_CTX_set1_prefix()\fR, pass the current argument to \fBcmd\fR and the +following argument to \fBvalue\fR (which may be \s-1NULL\s0). +.PP +In this case if the return value is positive then it is used to skip that +number of arguments as they have been processed by \fBSSL_CONF_cmd()\fR. If \-2 is +returned then \fBcmd\fR is not recognised and application specific arguments +can be checked instead. If \-3 is returned a required argument is missing +and an error is indicated. If 0 is returned some other error occurred and +this can be reported back to the user. +.PP +The function \fBSSL_CONF_cmd_value_type()\fR can be used by applications to +check for the existence of a command or to perform additional syntax +checking or translation of the command value. For example if the return +value is \fB\s-1SSL_CONF_TYPE_FILE\s0\fR an application could translate a relative +pathname to an absolute pathname. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_CONF_cmd()\fR returns 1 if the value of \fBcmd\fR is recognised and \fBvalue\fR is +\&\fB\s-1NOT\s0\fR used and 2 if both \fBcmd\fR and \fBvalue\fR are used. In other words it +returns the number of arguments processed. This is useful when processing +command lines. +.PP +A return value of \-2 means \fBcmd\fR is not recognised. +.PP +A return value of \-3 means \fBcmd\fR is recognised and the command requires a +value but \fBvalue\fR is \s-1NULL.\s0 +.PP +A return code of 0 indicates that both \fBcmd\fR and \fBvalue\fR are valid but an +error occurred attempting to perform the operation: for example due to an +error in the syntax of \fBvalue\fR in this case the error queue may provide +additional information. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +Set supported signature algorithms: +.PP +.Vb 1 +\& SSL_CONF_cmd(ctx, "SignatureAlgorithms", "ECDSA+SHA256:RSA+SHA256:DSA+SHA256"); +.Ve +.PP +There are various ways to select the supported protocols. +.PP +This set the minimum protocol version to TLSv1, and so disables SSLv3. +This is the recommended way to disable protocols. +.PP +.Vb 1 +\& SSL_CONF_cmd(ctx, "MinProtocol", "TLSv1"); +.Ve +.PP +The following also disables SSLv3: +.PP +.Vb 1 +\& SSL_CONF_cmd(ctx, "Protocol", "\-SSLv3"); +.Ve +.PP +The following will first enable all protocols, and then disable +SSLv3. +If no protocol versions were disabled before this has the same effect as +\&\*(L"\-SSLv3\*(R", but if some versions were disables this will re-enable them before +disabling SSLv3. +.PP +.Vb 1 +\& SSL_CONF_cmd(ctx, "Protocol", "ALL,\-SSLv3"); +.Ve +.PP +Only enable TLSv1.2: +.PP +.Vb 2 +\& SSL_CONF_cmd(ctx, "MinProtocol", "TLSv1.2"); +\& SSL_CONF_cmd(ctx, "MaxProtocol", "TLSv1.2"); +.Ve +.PP +This also only enables TLSv1.2: +.PP +.Vb 1 +\& SSL_CONF_cmd(ctx, "Protocol", "\-ALL,TLSv1.2"); +.Ve +.PP +Disable \s-1TLS\s0 session tickets: +.PP +.Vb 1 +\& SSL_CONF_cmd(ctx, "Options", "\-SessionTicket"); +.Ve +.PP +Enable compression: +.PP +.Vb 1 +\& SSL_CONF_cmd(ctx, "Options", "Compression"); +.Ve +.PP +Set supported curves to P\-256, P\-384: +.PP +.Vb 1 +\& SSL_CONF_cmd(ctx, "Curves", "P\-256:P\-384"); +.Ve +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBSSL_CONF_CTX_new\fR\|(3), +\&\fBSSL_CONF_CTX_set_flags\fR\|(3), +\&\fBSSL_CONF_CTX_set1_prefix\fR\|(3), +\&\fBSSL_CONF_CTX_set_ssl_ctx\fR\|(3), +\&\fBSSL_CONF_cmd_argv\fR\|(3), +\&\fBSSL_CTX_set_options\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +The \fBSSL_CONF_cmd()\fR function was added in OpenSSL 1.0.2. +.PP +The \fB\s-1SSL_OP_NO_SSL2\s0\fR option doesn't have effect since 1.1.0, but the macro +is retained for backwards compatibility. +.PP +The \fB\s-1SSL_CONF_TYPE_NONE\s0\fR was added in OpenSSL 1.1.0. In earlier versions of +OpenSSL passing a command which didn't take an argument would return +\&\fB\s-1SSL_CONF_TYPE_UNKNOWN\s0\fR. +.PP +\&\fBMinProtocol\fR and \fBMaxProtocol\fR where added in OpenSSL 1.1.0. +.PP +\&\fBAllowNoDHEKEX\fR and \fBPrioritizeChaCha\fR were added in OpenSSL 1.1.1. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2012\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CONF_cmd_argv.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CONF_cmd_argv.3 new file mode 100644 index 00000000..0c585f73 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CONF_cmd_argv.3 @@ -0,0 +1,182 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CONF_CMD_ARGV 3" +.TH SSL_CONF_CMD_ARGV 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_CONF_cmd_argv \- SSL configuration command line processing +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int SSL_CONF_cmd_argv(SSL_CONF_CTX *cctx, int *pargc, char ***pargv); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The function \fBSSL_CONF_cmd_argv()\fR processes at most two command line +arguments from \fBpargv\fR and \fBpargc\fR. The values of \fBpargv\fR and \fBpargc\fR +are updated to reflect the number of command options processed. The \fBpargc\fR +argument can be set to \fB\s-1NULL\s0\fR if it is not used. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_CONF_cmd_argv()\fR returns the number of command arguments processed: 0, 1, 2 +or a negative error code. +.PP +If \-2 is returned then an argument for a command is missing. +.PP +If \-1 is returned the command is recognised but couldn't be processed due +to an error: for example a syntax error in the argument. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBSSL_CONF_CTX_new\fR\|(3), +\&\fBSSL_CONF_CTX_set_flags\fR\|(3), +\&\fBSSL_CONF_CTX_set1_prefix\fR\|(3), +\&\fBSSL_CONF_CTX_set_ssl_ctx\fR\|(3), +\&\fBSSL_CONF_cmd\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +These functions were added in OpenSSL 1.0.2. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2012\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_add1_chain_cert.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_add1_chain_cert.3 new file mode 100644 index 00000000..0bb0119e --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_add1_chain_cert.3 @@ -0,0 +1,282 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CTX_ADD1_CHAIN_CERT 3" +.TH SSL_CTX_ADD1_CHAIN_CERT 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_CTX_set0_chain, SSL_CTX_set1_chain, SSL_CTX_add0_chain_cert, SSL_CTX_add1_chain_cert, SSL_CTX_get0_chain_certs, SSL_CTX_clear_chain_certs, SSL_set0_chain, SSL_set1_chain, SSL_add0_chain_cert, SSL_add1_chain_cert, SSL_get0_chain_certs, SSL_clear_chain_certs, SSL_CTX_build_cert_chain, SSL_build_cert_chain, SSL_CTX_select_current_cert, SSL_select_current_cert, SSL_CTX_set_current_cert, SSL_set_current_cert \- extra chain certificate processing +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int SSL_CTX_set0_chain(SSL_CTX *ctx, STACK_OF(X509) *sk); +\& int SSL_CTX_set1_chain(SSL_CTX *ctx, STACK_OF(X509) *sk); +\& int SSL_CTX_add0_chain_cert(SSL_CTX *ctx, X509 *x509); +\& int SSL_CTX_add1_chain_cert(SSL_CTX *ctx, X509 *x509); +\& int SSL_CTX_get0_chain_certs(SSL_CTX *ctx, STACK_OF(X509) **sk); +\& int SSL_CTX_clear_chain_certs(SSL_CTX *ctx); +\& +\& int SSL_set0_chain(SSL *ssl, STACK_OF(X509) *sk); +\& int SSL_set1_chain(SSL *ssl, STACK_OF(X509) *sk); +\& int SSL_add0_chain_cert(SSL *ssl, X509 *x509); +\& int SSL_add1_chain_cert(SSL *ssl, X509 *x509); +\& int SSL_get0_chain_certs(SSL *ssl, STACK_OF(X509) **sk); +\& int SSL_clear_chain_certs(SSL *ssl); +\& +\& int SSL_CTX_build_cert_chain(SSL_CTX *ctx, flags); +\& int SSL_build_cert_chain(SSL *ssl, flags); +\& +\& int SSL_CTX_select_current_cert(SSL_CTX *ctx, X509 *x509); +\& int SSL_select_current_cert(SSL *ssl, X509 *x509); +\& int SSL_CTX_set_current_cert(SSL_CTX *ctx, long op); +\& int SSL_set_current_cert(SSL *ssl, long op); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_CTX_set0_chain()\fR and \fBSSL_CTX_set1_chain()\fR set the certificate chain +associated with the current certificate of \fBctx\fR to \fBsk\fR. +.PP +\&\fBSSL_CTX_add0_chain_cert()\fR and \fBSSL_CTX_add1_chain_cert()\fR append the single +certificate \fBx509\fR to the chain associated with the current certificate of +\&\fBctx\fR. +.PP +\&\fBSSL_CTX_get0_chain_certs()\fR retrieves the chain associated with the current +certificate of \fBctx\fR. +.PP +\&\fBSSL_CTX_clear_chain_certs()\fR clears any existing chain associated with the +current certificate of \fBctx\fR. (This is implemented by calling +\&\fBSSL_CTX_set0_chain()\fR with \fBsk\fR set to \fB\s-1NULL\s0\fR). +.PP +\&\fBSSL_CTX_build_cert_chain()\fR builds the certificate chain for \fBctx\fR normally +this uses the chain store or the verify store if the chain store is not set. +If the function is successful the built chain will replace any existing chain. +The \fBflags\fR parameter can be set to \fB\s-1SSL_BUILD_CHAIN_FLAG_UNTRUSTED\s0\fR to use +existing chain certificates as untrusted CAs, \fB\s-1SSL_BUILD_CHAIN_FLAG_NO_ROOT\s0\fR +to omit the root \s-1CA\s0 from the built chain, \fB\s-1SSL_BUILD_CHAIN_FLAG_CHECK\s0\fR to +use all existing chain certificates only to build the chain (effectively +sanity checking and rearranging them if necessary), the flag +\&\fB\s-1SSL_BUILD_CHAIN_FLAG_IGNORE_ERROR\s0\fR ignores any errors during verification: +if flag \fB\s-1SSL_BUILD_CHAIN_FLAG_CLEAR_ERROR\s0\fR is also set verification errors +are cleared from the error queue. +.PP +Each of these functions operates on the \fIcurrent\fR end entity +(i.e. server or client) certificate. This is the last certificate loaded or +selected on the corresponding \fBctx\fR structure. +.PP +\&\fBSSL_CTX_select_current_cert()\fR selects \fBx509\fR as the current end entity +certificate, but only if \fBx509\fR has already been loaded into \fBctx\fR using a +function such as \fBSSL_CTX_use_certificate()\fR. +.PP +\&\fBSSL_set0_chain()\fR, \fBSSL_set1_chain()\fR, \fBSSL_add0_chain_cert()\fR, +\&\fBSSL_add1_chain_cert()\fR, \fBSSL_get0_chain_certs()\fR, \fBSSL_clear_chain_certs()\fR, +\&\fBSSL_build_cert_chain()\fR, \fBSSL_select_current_cert()\fR and \fBSSL_set_current_cert()\fR +are similar except they apply to \s-1SSL\s0 structure \fBssl\fR. +.PP +\&\fBSSL_CTX_set_current_cert()\fR changes the current certificate to a value based +on the \fBop\fR argument. Currently \fBop\fR can be \fB\s-1SSL_CERT_SET_FIRST\s0\fR to use +the first valid certificate or \fB\s-1SSL_CERT_SET_NEXT\s0\fR to set the next valid +certificate after the current certificate. These two operations can be +used to iterate over all certificates in an \fB\s-1SSL_CTX\s0\fR structure. +.PP +\&\fBSSL_set_current_cert()\fR also supports the option \fB\s-1SSL_CERT_SET_SERVER\s0\fR. +If \fBssl\fR is a server and has sent a certificate to a connected client +this option sets that certificate to the current certificate and returns 1. +If the negotiated cipher suite is anonymous (and thus no certificate will +be sent) 2 is returned and the current certificate is unchanged. If \fBssl\fR +is not a server or a certificate has not been sent 0 is returned and +the current certificate is unchanged. +.PP +All these functions are implemented as macros. Those containing a \fB1\fR +increment the reference count of the supplied certificate or chain so it must +be freed at some point after the operation. Those containing a \fB0\fR do +not increment reference counts and the supplied certificate or chain +\&\fB\s-1MUST NOT\s0\fR be freed after the operation. +.SH "NOTES" +.IX Header "NOTES" +The chains associate with an \s-1SSL_CTX\s0 structure are copied to any \s-1SSL\s0 +structures when \fBSSL_new()\fR is called. \s-1SSL\s0 structures will not be affected +by any chains subsequently changed in the parent \s-1SSL_CTX.\s0 +.PP +One chain can be set for each key type supported by a server. So, for example, +an \s-1RSA\s0 and a \s-1DSA\s0 certificate can (and often will) have different chains. +.PP +The functions \fBSSL_CTX_build_cert_chain()\fR and \fBSSL_build_cert_chain()\fR can +be used to check application configuration and to ensure any necessary +subordinate CAs are sent in the correct order. Misconfigured applications +sending incorrect certificate chains often cause problems with peers. +.PP +For example an application can add any set of certificates using +\&\fBSSL_CTX_use_certificate_chain_file()\fR then call \fBSSL_CTX_build_cert_chain()\fR +with the option \fB\s-1SSL_BUILD_CHAIN_FLAG_CHECK\s0\fR to check and reorder them. +.PP +Applications can issue non fatal warnings when checking chains by setting +the flag \fB\s-1SSL_BUILD_CHAIN_FLAG_IGNORE_ERRORS\s0\fR and checking the return +value. +.PP +Calling \fBSSL_CTX_build_cert_chain()\fR or \fBSSL_build_cert_chain()\fR is more +efficient than the automatic chain building as it is only performed once. +Automatic chain building is performed on each new session. +.PP +If any certificates are added using these functions no certificates added +using \fBSSL_CTX_add_extra_chain_cert()\fR will be used. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_set_current_cert()\fR with \fB\s-1SSL_CERT_SET_SERVER\s0\fR return 1 for success, 2 if +no server certificate is used because the cipher suites is anonymous and 0 +for failure. +.PP +\&\fBSSL_CTX_build_cert_chain()\fR and \fBSSL_build_cert_chain()\fR return 1 for success +and 0 for failure. If the flag \fB\s-1SSL_BUILD_CHAIN_FLAG_IGNORE_ERROR\s0\fR and +a verification error occurs then 2 is returned. +.PP +All other functions return 1 for success and 0 for failure. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBSSL_CTX_add_extra_chain_cert\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +These functions were added in OpenSSL 1.0.2. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2013\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_add_extra_chain_cert.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_add_extra_chain_cert.3 new file mode 100644 index 00000000..5a755e88 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_add_extra_chain_cert.3 @@ -0,0 +1,209 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CTX_ADD_EXTRA_CHAIN_CERT 3" +.TH SSL_CTX_ADD_EXTRA_CHAIN_CERT 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_CTX_add_extra_chain_cert, SSL_CTX_clear_extra_chain_certs \- add or clear extra chain certificates +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& long SSL_CTX_add_extra_chain_cert(SSL_CTX *ctx, X509 *x509); +\& long SSL_CTX_clear_extra_chain_certs(SSL_CTX *ctx); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_CTX_add_extra_chain_cert()\fR adds the certificate \fBx509\fR to the extra chain +certificates associated with \fBctx\fR. Several certificates can be added one +after another. +.PP +\&\fBSSL_CTX_clear_extra_chain_certs()\fR clears all extra chain certificates +associated with \fBctx\fR. +.PP +These functions are implemented as macros. +.SH "NOTES" +.IX Header "NOTES" +When sending a certificate chain, extra chain certificates are sent in order +following the end entity certificate. +.PP +If no chain is specified, the library will try to complete the chain from the +available \s-1CA\s0 certificates in the trusted \s-1CA\s0 storage, see +\&\fBSSL_CTX_load_verify_locations\fR\|(3). +.PP +The \fBx509\fR certificate provided to \fBSSL_CTX_add_extra_chain_cert()\fR will be +freed by the library when the \fB\s-1SSL_CTX\s0\fR is destroyed. An application +\&\fBshould not\fR free the \fBx509\fR object. +.SH "RESTRICTIONS" +.IX Header "RESTRICTIONS" +Only one set of extra chain certificates can be specified per \s-1SSL_CTX\s0 +structure. Different chains for different certificates (for example if both +\&\s-1RSA\s0 and \s-1DSA\s0 certificates are specified by the same server) or different \s-1SSL\s0 +structures with the same parent \s-1SSL_CTX\s0 cannot be specified using this +function. For more flexibility functions such as \fBSSL_add1_chain_cert()\fR should +be used instead. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_CTX_add_extra_chain_cert()\fR and \fBSSL_CTX_clear_extra_chain_certs()\fR return +1 on success and 0 for failure. Check out the error stack to find out the +reason for failure. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), +\&\fBSSL_CTX_use_certificate\fR\|(3), +\&\fBSSL_CTX_set_client_cert_cb\fR\|(3), +\&\fBSSL_CTX_load_verify_locations\fR\|(3) +\&\fBSSL_CTX_set0_chain\fR\|(3) +\&\fBSSL_CTX_set1_chain\fR\|(3) +\&\fBSSL_CTX_add0_chain_cert\fR\|(3) +\&\fBSSL_CTX_add1_chain_cert\fR\|(3) +\&\fBSSL_set0_chain\fR\|(3) +\&\fBSSL_set1_chain\fR\|(3) +\&\fBSSL_add0_chain_cert\fR\|(3) +\&\fBSSL_add1_chain_cert\fR\|(3) +\&\fBSSL_CTX_build_cert_chain\fR\|(3) +\&\fBSSL_build_cert_chain\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_add_session.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_add_session.3 new file mode 100644 index 00000000..fc9a9d01 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_add_session.3 @@ -0,0 +1,200 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CTX_ADD_SESSION 3" +.TH SSL_CTX_ADD_SESSION 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_CTX_add_session, SSL_CTX_remove_session \- manipulate session cache +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int SSL_CTX_add_session(SSL_CTX *ctx, SSL_SESSION *c); +\& +\& int SSL_CTX_remove_session(SSL_CTX *ctx, SSL_SESSION *c); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_CTX_add_session()\fR adds the session \fBc\fR to the context \fBctx\fR. The +reference count for session \fBc\fR is incremented by 1. If a session with +the same session id already exists, the old session is removed by calling +\&\fBSSL_SESSION_free\fR\|(3). +.PP +\&\fBSSL_CTX_remove_session()\fR removes the session \fBc\fR from the context \fBctx\fR and +marks it as non-resumable. \fBSSL_SESSION_free\fR\|(3) is called once for \fBc\fR. +.SH "NOTES" +.IX Header "NOTES" +When adding a new session to the internal session cache, it is examined +whether a session with the same session id already exists. In this case +it is assumed that both sessions are identical. If the same session is +stored in a different \s-1SSL_SESSION\s0 object, The old session is +removed and replaced by the new session. If the session is actually +identical (the \s-1SSL_SESSION\s0 object is identical), \fBSSL_CTX_add_session()\fR +is a no-op, and the return value is 0. +.PP +If a server \s-1SSL_CTX\s0 is configured with the \s-1SSL_SESS_CACHE_NO_INTERNAL_STORE\s0 +flag then the internal cache will not be populated automatically by new +sessions negotiated by the \s-1SSL/TLS\s0 implementation, even though the internal +cache will be searched automatically for session-resume requests (the +latter can be suppressed by \s-1SSL_SESS_CACHE_NO_INTERNAL_LOOKUP\s0). So the +application can use \fBSSL_CTX_add_session()\fR directly to have full control +over the sessions that can be resumed if desired. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +The following values are returned by all functions: +.IP "0" 4 +The operation failed. In case of the add operation, it was tried to add +the same (identical) session twice. In case of the remove operation, the +session was not found in the cache. +.IP "1" 4 +.IX Item "1" +The operation succeeded. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), +\&\fBSSL_CTX_set_session_cache_mode\fR\|(3), +\&\fBSSL_SESSION_free\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2001\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_config.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_config.3 new file mode 100644 index 00000000..c893d218 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_config.3 @@ -0,0 +1,224 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CTX_CONFIG 3" +.TH SSL_CTX_CONFIG 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_CTX_config, SSL_config \- configure SSL_CTX or SSL structure +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int SSL_CTX_config(SSL_CTX *ctx, const char *name); +\& int SSL_config(SSL *s, const char *name); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The functions \fBSSL_CTX_config()\fR and \fBSSL_config()\fR configure an \fB\s-1SSL_CTX\s0\fR or +\&\fB\s-1SSL\s0\fR structure using the configuration \fBname\fR. +.SH "NOTES" +.IX Header "NOTES" +By calling \fBSSL_CTX_config()\fR or \fBSSL_config()\fR an application can perform many +complex tasks based on the contents of the configuration file: greatly +simplifying application configuration code. A degree of future proofing +can also be achieved: an application can support configuration features +in newer versions of OpenSSL automatically. +.PP +A configuration file must have been previously loaded, for example using +\&\fBCONF_modules_load_file()\fR. See \fBconfig\fR\|(5) for details of the configuration +file syntax. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_CTX_config()\fR and \fBSSL_config()\fR return 1 for success or 0 if an error +occurred. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +If the file \*(L"config.cnf\*(R" contains the following: +.PP +.Vb 1 +\& testapp = test_sect +\& +\& [test_sect] +\& # list of configuration modules +\& +\& ssl_conf = ssl_sect +\& +\& [ssl_sect] +\& server = server_section +\& +\& [server_section] +\& RSA.Certificate = server\-rsa.pem +\& ECDSA.Certificate = server\-ecdsa.pem +\& Ciphers = ALL:!RC4 +.Ve +.PP +An application could call: +.PP +.Vb 4 +\& if (CONF_modules_load_file("config.cnf", "testapp", 0) <= 0) { +\& fprintf(stderr, "Error processing config file\en"); +\& goto err; +\& } +\& +\& ctx = SSL_CTX_new(TLS_server_method()); +\& +\& if (SSL_CTX_config(ctx, "server") == 0) { +\& fprintf(stderr, "Error configuring server.\en"); +\& goto err; +\& } +.Ve +.PP +In this example two certificates and the cipher list are configured without +the need for any additional application code. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBconfig\fR\|(5), +\&\fBSSL_CONF_cmd\fR\|(3), +\&\fBCONF_modules_load_file\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +The \fBSSL_CTX_config()\fR and \fBSSL_config()\fR functions were added in OpenSSL 1.1.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2015\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_ctrl.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_ctrl.3 new file mode 100644 index 00000000..46a97405 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_ctrl.3 @@ -0,0 +1,175 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CTX_CTRL 3" +.TH SSL_CTX_CTRL 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_CTX_ctrl, SSL_CTX_callback_ctrl, SSL_ctrl, SSL_callback_ctrl \- internal handling functions for SSL_CTX and SSL objects +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& long SSL_CTX_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg); +\& long SSL_CTX_callback_ctrl(SSL_CTX *, int cmd, void (*fp)()); +\& +\& long SSL_ctrl(SSL *ssl, int cmd, long larg, void *parg); +\& long SSL_callback_ctrl(SSL *, int cmd, void (*fp)()); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The SSL_*\fB_ctrl()\fR family of functions is used to manipulate settings of +the \s-1SSL_CTX\s0 and \s-1SSL\s0 objects. Depending on the command \fBcmd\fR the arguments +\&\fBlarg\fR, \fBparg\fR, or \fBfp\fR are evaluated. These functions should never +be called directly. All functionalities needed are made available via +other functions or macros. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +The return values of the SSL*\fB_ctrl()\fR functions depend on the command +supplied via the \fBcmd\fR parameter. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2001\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_dane_enable.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_dane_enable.3 new file mode 100644 index 00000000..04f6ef9d --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_dane_enable.3 @@ -0,0 +1,508 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CTX_DANE_ENABLE 3" +.TH SSL_CTX_DANE_ENABLE 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_CTX_dane_enable, SSL_CTX_dane_mtype_set, SSL_dane_enable, SSL_dane_tlsa_add, SSL_get0_dane_authority, SSL_get0_dane_tlsa, SSL_CTX_dane_set_flags, SSL_CTX_dane_clear_flags, SSL_dane_set_flags, SSL_dane_clear_flags \&\- enable DANE TLS authentication of the remote TLS server in the local TLS client +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int SSL_CTX_dane_enable(SSL_CTX *ctx); +\& int SSL_CTX_dane_mtype_set(SSL_CTX *ctx, const EVP_MD *md, +\& uint8_t mtype, uint8_t ord); +\& int SSL_dane_enable(SSL *s, const char *basedomain); +\& int SSL_dane_tlsa_add(SSL *s, uint8_t usage, uint8_t selector, +\& uint8_t mtype, unsigned const char *data, size_t dlen); +\& int SSL_get0_dane_authority(SSL *s, X509 **mcert, EVP_PKEY **mspki); +\& int SSL_get0_dane_tlsa(SSL *s, uint8_t *usage, uint8_t *selector, +\& uint8_t *mtype, unsigned const char **data, +\& size_t *dlen); +\& unsigned long SSL_CTX_dane_set_flags(SSL_CTX *ctx, unsigned long flags); +\& unsigned long SSL_CTX_dane_clear_flags(SSL_CTX *ctx, unsigned long flags); +\& unsigned long SSL_dane_set_flags(SSL *ssl, unsigned long flags); +\& unsigned long SSL_dane_clear_flags(SSL *ssl, unsigned long flags); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +These functions implement support for \s-1DANE TLSA\s0 (\s-1RFC6698\s0 and \s-1RFC7671\s0) +peer authentication. +.PP +\&\fBSSL_CTX_dane_enable()\fR must be called first to initialize the shared state +required for \s-1DANE\s0 support. +Individual connections associated with the context can then enable +per-connection \s-1DANE\s0 support as appropriate. +\&\s-1DANE\s0 authentication is implemented in the \fBX509_verify_cert\fR\|(3) function, and +applications that override \fBX509_verify_cert\fR\|(3) via +\&\fBSSL_CTX_set_cert_verify_callback\fR\|(3) are responsible to authenticate the peer +chain in whatever manner they see fit. +.PP +\&\fBSSL_CTX_dane_mtype_set()\fR may then be called zero or more times to adjust the +supported digest algorithms. +This must be done before any \s-1SSL\s0 handles are created for the context. +.PP +The \fBmtype\fR argument specifies a \s-1DANE TLSA\s0 matching type and the \fBmd\fR +argument specifies the associated digest algorithm handle. +The \fBord\fR argument specifies a strength ordinal. +Algorithms with a larger strength ordinal are considered more secure. +Strength ordinals are used to implement \s-1RFC7671\s0 digest algorithm agility. +Specifying a \fB\s-1NULL\s0\fR digest algorithm for a matching type disables +support for that matching type. +Matching type \fBFull\fR\|(0) cannot be modified or disabled. +.PP +By default, matching type \f(CW\*(C`SHA2\-256(1)\*(C'\fR (see \s-1RFC7218\s0 for definitions +of the \s-1DANE TLSA\s0 parameter acronyms) is mapped to \f(CW\*(C`EVP_sha256()\*(C'\fR +with a strength ordinal of \f(CW1\fR and matching type \f(CW\*(C`SHA2\-512(2)\*(C'\fR +is mapped to \f(CW\*(C`EVP_sha512()\*(C'\fR with a strength ordinal of \f(CW2\fR. +.PP +\&\fBSSL_dane_enable()\fR must be called before the \s-1SSL\s0 handshake is initiated with +\&\fBSSL_connect\fR\|(3) if (and only if) you want to enable \s-1DANE\s0 for that connection. +(The connection must be associated with a DANE-enabled \s-1SSL\s0 context). +The \fBbasedomain\fR argument specifies the \s-1RFC7671 TLSA\s0 base domain, +which will be the primary peer reference identifier for certificate +name checks. +Additional server names can be specified via \fBSSL_add1_host\fR\|(3). +The \fBbasedomain\fR is used as the default \s-1SNI\s0 hint if none has yet been +specified via \fBSSL_set_tlsext_host_name\fR\|(3). +.PP +\&\fBSSL_dane_tlsa_add()\fR may then be called one or more times, to load each of the +\&\s-1TLSA\s0 records that apply to the remote \s-1TLS\s0 peer. +(This too must be done prior to the beginning of the \s-1SSL\s0 handshake). +The arguments specify the fields of the \s-1TLSA\s0 record. +The \fBdata\fR field is provided in binary (wire \s-1RDATA\s0) form, not the hexadecimal +\&\s-1ASCII\s0 presentation form, with an explicit length passed via \fBdlen\fR. +The library takes a copy of the \fBdata\fR buffer contents and the caller may +free the original \fBdata\fR buffer when convenient. +A return value of 0 indicates that \*(L"unusable\*(R" \s-1TLSA\s0 records (with invalid or +unsupported parameters) were provided. +A negative return value indicates an internal error in processing the record. +.PP +The caller is expected to check the return value of each \fBSSL_dane_tlsa_add()\fR +call and take appropriate action if none are usable or an internal error +is encountered in processing some records. +.PP +If no \s-1TLSA\s0 records are added successfully, \s-1DANE\s0 authentication is not enabled, +and authentication will be based on any configured traditional trust-anchors; +authentication success in this case does not mean that the peer was +DANE-authenticated. +.PP +\&\fBSSL_get0_dane_authority()\fR can be used to get more detailed information about +the matched \s-1DANE\s0 trust-anchor after successful connection completion. +The return value is negative if \s-1DANE\s0 verification failed (or was not enabled), +0 if an \s-1EE TLSA\s0 record directly matched the leaf certificate, or a positive +number indicating the depth at which a \s-1TA\s0 record matched an issuer certificate. +The complete verified chain can be retrieved via \fBSSL_get0_verified_chain\fR\|(3). +The return value is an index into this verified chain, rather than the list of +certificates sent by the peer as returned by \fBSSL_get_peer_cert_chain\fR\|(3). +.PP +If the \fBmcert\fR argument is not \fB\s-1NULL\s0\fR and a \s-1TLSA\s0 record matched a chain +certificate, a pointer to the matching certificate is returned via \fBmcert\fR. +The returned address is a short-term internal reference to the certificate and +must not be freed by the application. +Applications that want to retain access to the certificate can call +\&\fBX509_up_ref\fR\|(3) to obtain a long-term reference which must then be freed via +\&\fBX509_free\fR\|(3) once no longer needed. +.PP +If no \s-1TLSA\s0 records directly matched any elements of the certificate chain, but +a \s-1\fBDANE\-TA\s0\fR\|(2) \s-1\fBSPKI\s0\fR\|(1) \fBFull\fR\|(0) record provided the public key that signed an +element of the chain, then that key is returned via \fBmspki\fR argument (if not +\&\s-1NULL\s0). +In this case the return value is the depth of the top-most element of the +validated certificate chain. +As with \fBmcert\fR this is a short-term internal reference, and +\&\fBEVP_PKEY_up_ref\fR\|(3) and \fBEVP_PKEY_free\fR\|(3) can be used to acquire and +release long-term references respectively. +.PP +\&\fBSSL_get0_dane_tlsa()\fR can be used to retrieve the fields of the \s-1TLSA\s0 record that +matched the peer certificate chain. +The return value indicates the match depth or failure to match just as with +\&\fBSSL_get0_dane_authority()\fR. +When the return value is non-negative, the storage pointed to by the \fBusage\fR, +\&\fBselector\fR, \fBmtype\fR and \fBdata\fR parameters is updated to the corresponding +\&\s-1TLSA\s0 record fields. +The \fBdata\fR field is in binary wire form, and is therefore not NUL-terminated, +its length is returned via the \fBdlen\fR parameter. +If any of these parameters is \s-1NULL,\s0 the corresponding field is not returned. +The \fBdata\fR parameter is set to a short-term internal-copy of the associated +data field and must not be freed by the application. +Applications that need long-term access to this field need to copy the content. +.PP +\&\fBSSL_CTX_dane_set_flags()\fR and \fBSSL_dane_set_flags()\fR can be used to enable +optional \s-1DANE\s0 verification features. +\&\fBSSL_CTX_dane_clear_flags()\fR and \fBSSL_dane_clear_flags()\fR can be used to disable +the same features. +The \fBflags\fR argument is a bitmask of the features to enable or disable. +The \fBflags\fR set for an \fB\s-1SSL_CTX\s0\fR context are copied to each \fB\s-1SSL\s0\fR handle +associated with that context at the time the handle is created. +Subsequent changes in the context's \fBflags\fR have no effect on the \fBflags\fR set +for the handle. +.PP +At present, the only available option is \fB\s-1DANE_FLAG_NO_DANE_EE_NAMECHECKS\s0\fR +which can be used to disable server name checks when authenticating via +\&\s-1\fBDANE\-EE\s0\fR\|(3) \s-1TLSA\s0 records. +For some applications, primarily web browsers, it is not safe to disable name +checks due to \*(L"unknown key share\*(R" attacks, in which a malicious server can +convince a client that a connection to a victim server is instead a secure +connection to the malicious server. +The malicious server may then be able to violate cross-origin scripting +restrictions. +Thus, despite the text of \s-1RFC7671,\s0 name checks are by default enabled for +\&\s-1\fBDANE\-EE\s0\fR\|(3) \s-1TLSA\s0 records, and can be disabled in applications where it is safe +to do so. +In particular, \s-1SMTP\s0 and \s-1XMPP\s0 clients should set this option as \s-1SRV\s0 and \s-1MX\s0 +records already make it possible for a remote domain to redirect client +connections to any server of its choice, and in any case \s-1SMTP\s0 and \s-1XMPP\s0 clients +do not execute scripts downloaded from remote servers. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +The functions \fBSSL_CTX_dane_enable()\fR, \fBSSL_CTX_dane_mtype_set()\fR, +\&\fBSSL_dane_enable()\fR and \fBSSL_dane_tlsa_add()\fR return a positive value on success. +Negative return values indicate resource problems (out of memory, etc.) in the +\&\s-1SSL\s0 library, while a return value of \fB0\fR indicates incorrect usage or invalid +input, such as an unsupported \s-1TLSA\s0 record certificate usage, selector or +matching type. +Invalid input also includes malformed data, either a digest length that does +not match the digest algorithm, or a \f(CWFull(0)\fR (binary \s-1ASN.1 DER\s0 form) +certificate or a public key that fails to parse. +.PP +The functions \fBSSL_get0_dane_authority()\fR and \fBSSL_get0_dane_tlsa()\fR return a +negative value when \s-1DANE\s0 authentication failed or was not enabled, a +non-negative value indicates the chain depth at which the \s-1TLSA\s0 record matched a +chain certificate, or the depth of the top-most certificate, when the \s-1TLSA\s0 +record is a full public key that is its signer. +.PP +The functions \fBSSL_CTX_dane_set_flags()\fR, \fBSSL_CTX_dane_clear_flags()\fR, +\&\fBSSL_dane_set_flags()\fR and \fBSSL_dane_clear_flags()\fR return the \fBflags\fR in effect +before they were called. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +Suppose \*(L"smtp.example.com\*(R" is the \s-1MX\s0 host of the domain \*(L"example.com\*(R", and has +DNSSEC-validated \s-1TLSA\s0 records. +The calls below will perform \s-1DANE\s0 authentication and arrange to match either +the \s-1MX\s0 hostname or the destination domain name in the \s-1SMTP\s0 server certificate. +Wildcards are supported, but must match the entire label. +The actual name matched in the certificate (which might be a wildcard) is +retrieved, and must be copied by the application if it is to be retained beyond +the lifetime of the \s-1SSL\s0 connection. +.PP +.Vb 7 +\& SSL_CTX *ctx; +\& SSL *ssl; +\& int (*verify_cb)(int ok, X509_STORE_CTX *sctx) = NULL; +\& int num_usable = 0; +\& const char *nexthop_domain = "example.com"; +\& const char *dane_tlsa_domain = "smtp.example.com"; +\& uint8_t usage, selector, mtype; +\& +\& if ((ctx = SSL_CTX_new(TLS_client_method())) == NULL) +\& /* error */ +\& if (SSL_CTX_dane_enable(ctx) <= 0) +\& /* error */ +\& if ((ssl = SSL_new(ctx)) == NULL) +\& /* error */ +\& if (SSL_dane_enable(ssl, dane_tlsa_domain) <= 0) +\& /* error */ +\& +\& /* +\& * For many applications it is safe to skip DANE\-EE(3) namechecks. Do not +\& * disable the checks unless "unknown key share" attacks pose no risk for +\& * your application. +\& */ +\& SSL_dane_set_flags(ssl, DANE_FLAG_NO_DANE_EE_NAMECHECKS); +\& +\& if (!SSL_add1_host(ssl, nexthop_domain)) +\& /* error */ +\& SSL_set_hostflags(ssl, X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS); +\& +\& for (... each TLSA record ...) { +\& unsigned char *data; +\& size_t len; +\& int ret; +\& +\& /* set usage, selector, mtype, data, len */ +\& +\& /* +\& * Opportunistic DANE TLS clients support only DANE\-TA(2) or DANE\-EE(3). +\& * They treat all other certificate usages, and in particular PKIX\-TA(0) +\& * and PKIX\-EE(1), as unusable. +\& */ +\& switch (usage) { +\& default: +\& case 0: /* PKIX\-TA(0) */ +\& case 1: /* PKIX\-EE(1) */ +\& continue; +\& case 2: /* DANE\-TA(2) */ +\& case 3: /* DANE\-EE(3) */ +\& break; +\& } +\& +\& ret = SSL_dane_tlsa_add(ssl, usage, selector, mtype, data, len); +\& /* free data as appropriate */ +\& +\& if (ret < 0) +\& /* handle SSL library internal error */ +\& else if (ret == 0) +\& /* handle unusable TLSA record */ +\& else +\& ++num_usable; +\& } +\& +\& /* +\& * At this point, the verification mode is still the default SSL_VERIFY_NONE. +\& * Opportunistic DANE clients use unauthenticated TLS when all TLSA records +\& * are unusable, so continue the handshake even if authentication fails. +\& */ +\& if (num_usable == 0) { +\& /* Log all records unusable? */ +\& +\& /* Optionally set verify_cb to a suitable non\-NULL callback. */ +\& SSL_set_verify(ssl, SSL_VERIFY_NONE, verify_cb); +\& } else { +\& /* At least one usable record. We expect to verify the peer */ +\& +\& /* Optionally set verify_cb to a suitable non\-NULL callback. */ +\& +\& /* +\& * Below we elect to fail the handshake when peer verification fails. +\& * Alternatively, use the permissive SSL_VERIFY_NONE verification mode, +\& * complete the handshake, check the verification status, and if not +\& * verified disconnect gracefully at the application layer, especially if +\& * application protocol supports informing the server that authentication +\& * failed. +\& */ +\& SSL_set_verify(ssl, SSL_VERIFY_PEER, verify_cb); +\& } +\& +\& /* +\& * Load any saved session for resumption, making sure that the previous +\& * session applied the same security and authentication requirements that +\& * would be expected of a fresh connection. +\& */ +\& +\& /* Perform SSL_connect() handshake and handle errors here */ +\& +\& if (SSL_session_reused(ssl)) { +\& if (SSL_get_verify_result(ssl) == X509_V_OK) { +\& /* +\& * Resumed session was originally verified, this connection is +\& * authenticated. +\& */ +\& } else { +\& /* +\& * Resumed session was not originally verified, this connection is not +\& * authenticated. +\& */ +\& } +\& } else if (SSL_get_verify_result(ssl) == X509_V_OK) { +\& const char *peername = SSL_get0_peername(ssl); +\& EVP_PKEY *mspki = NULL; +\& +\& int depth = SSL_get0_dane_authority(ssl, NULL, &mspki); +\& if (depth >= 0) { +\& (void) SSL_get0_dane_tlsa(ssl, &usage, &selector, &mtype, NULL, NULL); +\& printf("DANE TLSA %d %d %d %s at depth %d\en", usage, selector, mtype, +\& (mspki != NULL) ? "TA public key verified certificate" : +\& depth ? "matched TA certificate" : "matched EE certificate", +\& depth); +\& } +\& if (peername != NULL) { +\& /* Name checks were in scope and matched the peername */ +\& printf("Verified peername: %s\en", peername); +\& } +\& } else { +\& /* +\& * Not authenticated, presumably all TLSA rrs unusable, but possibly a +\& * callback suppressed connection termination despite the presence of +\& * usable TLSA RRs none of which matched. Do whatever is appropriate for +\& * fresh unauthenticated connections. +\& */ +\& } +.Ve +.SH "NOTES" +.IX Header "NOTES" +It is expected that the majority of clients employing \s-1DANE TLS\s0 will be doing +\&\*(L"opportunistic \s-1DANE TLS\*(R"\s0 in the sense of \s-1RFC7672\s0 and \s-1RFC7435.\s0 +That is, they will use \s-1DANE\s0 authentication when DNSSEC-validated \s-1TLSA\s0 records +are published for a given peer, and otherwise will use unauthenticated \s-1TLS\s0 or +even cleartext. +.PP +Such applications should generally treat any \s-1TLSA\s0 records published by the peer +with usages \s-1\fBPKIX\-TA\s0\fR\|(0) and \s-1\fBPKIX\-EE\s0\fR\|(1) as \*(L"unusable\*(R", and should not include +them among the \s-1TLSA\s0 records used to authenticate peer connections. +In addition, some \s-1TLSA\s0 records with supported usages may be \*(L"unusable\*(R" as a +result of invalid or unsupported parameters. +.PP +When a peer has \s-1TLSA\s0 records, but none are \*(L"usable\*(R", an opportunistic +application must avoid cleartext, but cannot authenticate the peer, +and so should generally proceed with an unauthenticated connection. +Opportunistic applications need to note the return value of each +call to \fBSSL_dane_tlsa_add()\fR, and if all return 0 (due to invalid +or unsupported parameters) disable peer authentication by calling +\&\fBSSL_set_verify\fR\|(3) with \fBmode\fR equal to \fB\s-1SSL_VERIFY_NONE\s0\fR. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBSSL_new\fR\|(3), +\&\fBSSL_add1_host\fR\|(3), +\&\fBSSL_set_hostflags\fR\|(3), +\&\fBSSL_set_tlsext_host_name\fR\|(3), +\&\fBSSL_set_verify\fR\|(3), +\&\fBSSL_CTX_set_cert_verify_callback\fR\|(3), +\&\fBSSL_get0_verified_chain\fR\|(3), +\&\fBSSL_get_peer_cert_chain\fR\|(3), +\&\fBSSL_get_verify_result\fR\|(3), +\&\fBSSL_connect\fR\|(3), +\&\fBSSL_get0_peername\fR\|(3), +\&\fBX509_verify_cert\fR\|(3), +\&\fBX509_up_ref\fR\|(3), +\&\fBX509_free\fR\|(3), +\&\fBEVP_get_digestbyname\fR\|(3), +\&\fBEVP_PKEY_up_ref\fR\|(3), +\&\fBEVP_PKEY_free\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +These functions were added in OpenSSL 1.1.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2016\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_flush_sessions.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_flush_sessions.3 new file mode 100644 index 00000000..7695e0b0 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_flush_sessions.3 @@ -0,0 +1,188 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CTX_FLUSH_SESSIONS 3" +.TH SSL_CTX_FLUSH_SESSIONS 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_CTX_flush_sessions \- remove expired sessions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& void SSL_CTX_flush_sessions(SSL_CTX *ctx, long tm); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_CTX_flush_sessions()\fR causes a run through the session cache of +\&\fBctx\fR to remove sessions expired at time \fBtm\fR. +.SH "NOTES" +.IX Header "NOTES" +If enabled, the internal session cache will collect all sessions established +up to the specified maximum number (see \fBSSL_CTX_sess_set_cache_size()\fR). +As sessions will not be reused ones they are expired, they should be +removed from the cache to save resources. This can either be done +automatically whenever 255 new sessions were established (see +\&\fBSSL_CTX_set_session_cache_mode\fR\|(3)) +or manually by calling \fBSSL_CTX_flush_sessions()\fR. +.PP +The parameter \fBtm\fR specifies the time which should be used for the +expiration test, in most cases the actual time given by \fBtime\fR\|(0) +will be used. +.PP +\&\fBSSL_CTX_flush_sessions()\fR will only check sessions stored in the internal +cache. When a session is found and removed, the remove_session_cb is however +called to synchronize with the external cache (see +\&\fBSSL_CTX_sess_set_get_cb\fR\|(3)). +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_CTX_flush_sessions()\fR does not return a value. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), +\&\fBSSL_CTX_set_session_cache_mode\fR\|(3), +\&\fBSSL_CTX_set_timeout\fR\|(3), +\&\fBSSL_CTX_sess_set_get_cb\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2001\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_free.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_free.3 new file mode 100644 index 00000000..1691d43f --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_free.3 @@ -0,0 +1,182 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CTX_FREE 3" +.TH SSL_CTX_FREE 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_CTX_free \- free an allocated SSL_CTX object +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& void SSL_CTX_free(SSL_CTX *ctx); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_CTX_free()\fR decrements the reference count of \fBctx\fR, and removes the +\&\s-1SSL_CTX\s0 object pointed to by \fBctx\fR and frees up the allocated memory if the reference count has reached 0. +.PP +It also calls the \fBfree()\fRing procedures for indirectly affected items, if +applicable: the session cache, the list of ciphers, the list of Client CAs, +the certificates and keys. +.PP +If \fBctx\fR is \s-1NULL\s0 nothing is done. +.SH "WARNINGS" +.IX Header "WARNINGS" +If a session-remove callback is set (\fBSSL_CTX_sess_set_remove_cb()\fR), this +callback will be called for each session being freed from \fBctx\fR's +session cache. This implies, that all corresponding sessions from an +external session cache are removed as well. If this is not desired, the user +should explicitly unset the callback by calling +SSL_CTX_sess_set_remove_cb(\fBctx\fR, \s-1NULL\s0) prior to calling \fBSSL_CTX_free()\fR. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_CTX_free()\fR does not provide diagnostic information. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBSSL_CTX_new\fR\|(3), \fBssl\fR\|(7), +\&\fBSSL_CTX_sess_set_get_cb\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_get0_param.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_get0_param.3 new file mode 100644 index 00000000..b73bc6da --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_get0_param.3 @@ -0,0 +1,194 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CTX_GET0_PARAM 3" +.TH SSL_CTX_GET0_PARAM 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_CTX_get0_param, SSL_get0_param, SSL_CTX_set1_param, SSL_set1_param \- get and set verification parameters +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& X509_VERIFY_PARAM *SSL_CTX_get0_param(SSL_CTX *ctx) +\& X509_VERIFY_PARAM *SSL_get0_param(SSL *ssl) +\& int SSL_CTX_set1_param(SSL_CTX *ctx, X509_VERIFY_PARAM *vpm) +\& int SSL_set1_param(SSL *ssl, X509_VERIFY_PARAM *vpm) +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_CTX_get0_param()\fR and \fBSSL_get0_param()\fR retrieve an internal pointer to +the verification parameters for \fBctx\fR or \fBssl\fR respectively. The returned +pointer must not be freed by the calling application. +.PP +\&\fBSSL_CTX_set1_param()\fR and \fBSSL_set1_param()\fR set the verification parameters +to \fBvpm\fR for \fBctx\fR or \fBssl\fR. +.SH "NOTES" +.IX Header "NOTES" +Typically parameters are retrieved from an \fB\s-1SSL_CTX\s0\fR or \fB\s-1SSL\s0\fR structure +using \fBSSL_CTX_get0_param()\fR or \fBSSL_get0_param()\fR and an application modifies +them to suit its needs: for example to add a hostname check. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_CTX_get0_param()\fR and \fBSSL_get0_param()\fR return a pointer to an +\&\fBX509_VERIFY_PARAM\fR structure. +.PP +\&\fBSSL_CTX_set1_param()\fR and \fBSSL_set1_param()\fR return 1 for success and 0 +for failure. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +Check hostname matches \*(L"www.foo.com\*(R" in peer certificate: +.PP +.Vb 2 +\& X509_VERIFY_PARAM *vpm = SSL_get0_param(ssl); +\& X509_VERIFY_PARAM_set1_host(vpm, "www.foo.com", 0); +.Ve +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBX509_VERIFY_PARAM_set_flags\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +These functions were added in OpenSSL 1.0.2. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2015\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_get_verify_mode.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_get_verify_mode.3 new file mode 100644 index 00000000..fe95a275 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_get_verify_mode.3 @@ -0,0 +1,191 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CTX_GET_VERIFY_MODE 3" +.TH SSL_CTX_GET_VERIFY_MODE 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_CTX_get_verify_mode, SSL_get_verify_mode, SSL_CTX_get_verify_depth, SSL_get_verify_depth, SSL_get_verify_callback, SSL_CTX_get_verify_callback \- get currently set verification parameters +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int SSL_CTX_get_verify_mode(const SSL_CTX *ctx); +\& int SSL_get_verify_mode(const SSL *ssl); +\& int SSL_CTX_get_verify_depth(const SSL_CTX *ctx); +\& int SSL_get_verify_depth(const SSL *ssl); +\& int (*SSL_CTX_get_verify_callback(const SSL_CTX *ctx))(int, X509_STORE_CTX *); +\& int (*SSL_get_verify_callback(const SSL *ssl))(int, X509_STORE_CTX *); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_CTX_get_verify_mode()\fR returns the verification mode currently set in +\&\fBctx\fR. +.PP +\&\fBSSL_get_verify_mode()\fR returns the verification mode currently set in +\&\fBssl\fR. +.PP +\&\fBSSL_CTX_get_verify_depth()\fR returns the verification depth limit currently set +in \fBctx\fR. If no limit has been explicitly set, \-1 is returned and the +default value will be used. +.PP +\&\fBSSL_get_verify_depth()\fR returns the verification depth limit currently set +in \fBssl\fR. If no limit has been explicitly set, \-1 is returned and the +default value will be used. +.PP +\&\fBSSL_CTX_get_verify_callback()\fR returns a function pointer to the verification +callback currently set in \fBctx\fR. If no callback was explicitly set, the +\&\s-1NULL\s0 pointer is returned and the default callback will be used. +.PP +\&\fBSSL_get_verify_callback()\fR returns a function pointer to the verification +callback currently set in \fBssl\fR. If no callback was explicitly set, the +\&\s-1NULL\s0 pointer is returned and the default callback will be used. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +See \s-1DESCRIPTION\s0 +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), \fBSSL_CTX_set_verify\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_has_client_custom_ext.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_has_client_custom_ext.3 new file mode 100644 index 00000000..21e30307 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_has_client_custom_ext.3 @@ -0,0 +1,168 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CTX_HAS_CLIENT_CUSTOM_EXT 3" +.TH SSL_CTX_HAS_CLIENT_CUSTOM_EXT 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_CTX_has_client_custom_ext \- check whether a handler exists for a particular client extension type +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int SSL_CTX_has_client_custom_ext(const SSL_CTX *ctx, unsigned int ext_type); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_CTX_has_client_custom_ext()\fR checks whether a handler has been set for a +client extension of type \fBext_type\fR using \fBSSL_CTX_add_client_custom_ext()\fR. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +Returns 1 if a handler has been set, 0 otherwise. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), +\&\fBSSL_CTX_add_client_custom_ext\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_load_verify_locations.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_load_verify_locations.3 new file mode 100644 index 00000000..6b1a2791 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_load_verify_locations.3 @@ -0,0 +1,287 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CTX_LOAD_VERIFY_LOCATIONS 3" +.TH SSL_CTX_LOAD_VERIFY_LOCATIONS 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_CTX_load_verify_locations, SSL_CTX_set_default_verify_paths, SSL_CTX_set_default_verify_dir, SSL_CTX_set_default_verify_file \- set default locations for trusted CA certificates +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile, +\& const char *CApath); +\& +\& int SSL_CTX_set_default_verify_paths(SSL_CTX *ctx); +\& +\& int SSL_CTX_set_default_verify_dir(SSL_CTX *ctx); +\& +\& int SSL_CTX_set_default_verify_file(SSL_CTX *ctx); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_CTX_load_verify_locations()\fR specifies the locations for \fBctx\fR, at +which \s-1CA\s0 certificates for verification purposes are located. The certificates +available via \fBCAfile\fR and \fBCApath\fR are trusted. +.PP +\&\fBSSL_CTX_set_default_verify_paths()\fR specifies that the default locations from +which \s-1CA\s0 certificates are loaded should be used. There is one default directory +and one default file. The default \s-1CA\s0 certificates directory is called \*(L"certs\*(R" in +the default OpenSSL directory. Alternatively the \s-1SSL_CERT_DIR\s0 environment +variable can be defined to override this location. The default \s-1CA\s0 certificates +file is called \*(L"cert.pem\*(R" in the default OpenSSL directory. Alternatively the +\&\s-1SSL_CERT_FILE\s0 environment variable can be defined to override this location. +.PP +\&\fBSSL_CTX_set_default_verify_dir()\fR is similar to +\&\fBSSL_CTX_set_default_verify_paths()\fR except that just the default directory is +used. +.PP +\&\fBSSL_CTX_set_default_verify_file()\fR is similar to +\&\fBSSL_CTX_set_default_verify_paths()\fR except that just the default file is +used. +.SH "NOTES" +.IX Header "NOTES" +If \fBCAfile\fR is not \s-1NULL,\s0 it points to a file of \s-1CA\s0 certificates in \s-1PEM\s0 +format. The file can contain several \s-1CA\s0 certificates identified by +.PP +.Vb 3 +\& \-\-\-\-\-BEGIN CERTIFICATE\-\-\-\-\- +\& ... (CA certificate in base64 encoding) ... +\& \-\-\-\-\-END CERTIFICATE\-\-\-\-\- +.Ve +.PP +sequences. Before, between, and after the certificates text is allowed +which can be used e.g. for descriptions of the certificates. +.PP +The \fBCAfile\fR is processed on execution of the \fBSSL_CTX_load_verify_locations()\fR +function. +.PP +If \fBCApath\fR is not \s-1NULL,\s0 it points to a directory containing \s-1CA\s0 certificates +in \s-1PEM\s0 format. The files each contain one \s-1CA\s0 certificate. The files are +looked up by the \s-1CA\s0 subject name hash value, which must hence be available. +If more than one \s-1CA\s0 certificate with the same name hash value exist, the +extension must be different (e.g. 9d66eef0.0, 9d66eef0.1 etc). The search +is performed in the ordering of the extension number, regardless of other +properties of the certificates. +Use the \fBc_rehash\fR utility to create the necessary links. +.PP +The certificates in \fBCApath\fR are only looked up when required, e.g. when +building the certificate chain or when actually performing the verification +of a peer certificate. +.PP +When looking up \s-1CA\s0 certificates, the OpenSSL library will first search the +certificates in \fBCAfile\fR, then those in \fBCApath\fR. Certificate matching +is done based on the subject name, the key identifier (if present), and the +serial number as taken from the certificate to be verified. If these data +do not match, the next certificate will be tried. If a first certificate +matching the parameters is found, the verification process will be performed; +no other certificates for the same parameters will be searched in case of +failure. +.PP +In server mode, when requesting a client certificate, the server must send +the list of CAs of which it will accept client certificates. This list +is not influenced by the contents of \fBCAfile\fR or \fBCApath\fR and must +explicitly be set using the +\&\fBSSL_CTX_set_client_CA_list\fR\|(3) +family of functions. +.PP +When building its own certificate chain, an OpenSSL client/server will +try to fill in missing certificates from \fBCAfile\fR/\fBCApath\fR, if the +certificate chain was not explicitly specified (see +\&\fBSSL_CTX_add_extra_chain_cert\fR\|(3), +\&\fBSSL_CTX_use_certificate\fR\|(3). +.SH "WARNINGS" +.IX Header "WARNINGS" +If several \s-1CA\s0 certificates matching the name, key identifier, and serial +number condition are available, only the first one will be examined. This +may lead to unexpected results if the same \s-1CA\s0 certificate is available +with different expiration dates. If a \*(L"certificate expired\*(R" verification +error occurs, no other certificate will be searched. Make sure to not +have expired certificates mixed with valid ones. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +For SSL_CTX_load_verify_locations the following return values can occur: +.IP "0" 4 +The operation failed because \fBCAfile\fR and \fBCApath\fR are \s-1NULL\s0 or the +processing at one of the locations specified failed. Check the error +stack to find out the reason. +.IP "1" 4 +.IX Item "1" +The operation succeeded. +.PP +\&\fBSSL_CTX_set_default_verify_paths()\fR, \fBSSL_CTX_set_default_verify_dir()\fR and +\&\fBSSL_CTX_set_default_verify_file()\fR all return 1 on success or 0 on failure. A +missing default location is still treated as a success. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +Generate a \s-1CA\s0 certificate file with descriptive text from the \s-1CA\s0 certificates +ca1.pem ca2.pem ca3.pem: +.PP +.Vb 5 +\& #!/bin/sh +\& rm CAfile.pem +\& for i in ca1.pem ca2.pem ca3.pem ; do +\& openssl x509 \-in $i \-text >> CAfile.pem +\& done +.Ve +.PP +Prepare the directory /some/where/certs containing several \s-1CA\s0 certificates +for use as \fBCApath\fR: +.PP +.Vb 2 +\& cd /some/where/certs +\& c_rehash . +.Ve +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), +\&\fBSSL_CTX_set_client_CA_list\fR\|(3), +\&\fBSSL_get_client_CA_list\fR\|(3), +\&\fBSSL_CTX_use_certificate\fR\|(3), +\&\fBSSL_CTX_add_extra_chain_cert\fR\|(3), +\&\fBSSL_CTX_set_cert_store\fR\|(3), +\&\fBSSL_CTX_set_client_CA_list\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_new.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_new.3 new file mode 100644 index 00000000..2013e685 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_new.3 @@ -0,0 +1,326 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CTX_NEW 3" +.TH SSL_CTX_NEW 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +TLSv1_2_method, TLSv1_2_server_method, TLSv1_2_client_method, SSL_CTX_new, SSL_CTX_up_ref, SSLv3_method, SSLv3_server_method, SSLv3_client_method, TLSv1_method, TLSv1_server_method, TLSv1_client_method, TLSv1_1_method, TLSv1_1_server_method, TLSv1_1_client_method, TLS_method, TLS_server_method, TLS_client_method, SSLv23_method, SSLv23_server_method, SSLv23_client_method, DTLS_method, DTLS_server_method, DTLS_client_method, DTLSv1_method, DTLSv1_server_method, DTLSv1_client_method, DTLSv1_2_method, DTLSv1_2_server_method, DTLSv1_2_client_method \&\- create a new SSL_CTX object as framework for TLS/SSL or DTLS enabled functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& SSL_CTX *SSL_CTX_new(const SSL_METHOD *method); +\& int SSL_CTX_up_ref(SSL_CTX *ctx); +\& +\& const SSL_METHOD *TLS_method(void); +\& const SSL_METHOD *TLS_server_method(void); +\& const SSL_METHOD *TLS_client_method(void); +\& +\& const SSL_METHOD *SSLv23_method(void); +\& const SSL_METHOD *SSLv23_server_method(void); +\& const SSL_METHOD *SSLv23_client_method(void); +\& +\& #ifndef OPENSSL_NO_SSL3_METHOD +\& const SSL_METHOD *SSLv3_method(void); +\& const SSL_METHOD *SSLv3_server_method(void); +\& const SSL_METHOD *SSLv3_client_method(void); +\& #endif +\& +\& #ifndef OPENSSL_NO_TLS1_METHOD +\& const SSL_METHOD *TLSv1_method(void); +\& const SSL_METHOD *TLSv1_server_method(void); +\& const SSL_METHOD *TLSv1_client_method(void); +\& #endif +\& +\& #ifndef OPENSSL_NO_TLS1_1_METHOD +\& const SSL_METHOD *TLSv1_1_method(void); +\& const SSL_METHOD *TLSv1_1_server_method(void); +\& const SSL_METHOD *TLSv1_1_client_method(void); +\& #endif +\& +\& #ifndef OPENSSL_NO_TLS1_2_METHOD +\& const SSL_METHOD *TLSv1_2_method(void); +\& const SSL_METHOD *TLSv1_2_server_method(void); +\& const SSL_METHOD *TLSv1_2_client_method(void); +\& #endif +\& +\& const SSL_METHOD *DTLS_method(void); +\& const SSL_METHOD *DTLS_server_method(void); +\& const SSL_METHOD *DTLS_client_method(void); +\& +\& #ifndef OPENSSL_NO_DTLS1_METHOD +\& const SSL_METHOD *DTLSv1_method(void); +\& const SSL_METHOD *DTLSv1_server_method(void); +\& const SSL_METHOD *DTLSv1_client_method(void); +\& #endif +\& +\& #ifndef OPENSSL_NO_DTLS1_2_METHOD +\& const SSL_METHOD *DTLSv1_2_method(void); +\& const SSL_METHOD *DTLSv1_2_server_method(void); +\& const SSL_METHOD *DTLSv1_2_client_method(void); +\& #endif +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_CTX_new()\fR creates a new \fB\s-1SSL_CTX\s0\fR object as framework to +establish \s-1TLS/SSL\s0 or \s-1DTLS\s0 enabled connections. An \fB\s-1SSL_CTX\s0\fR object is +reference counted. Creating an \fB\s-1SSL_CTX\s0\fR object for the first time increments +the reference count. Freeing it (using SSL_CTX_free) decrements it. When the +reference count drops to zero, any memory or resources allocated to the +\&\fB\s-1SSL_CTX\s0\fR object are freed. \fBSSL_CTX_up_ref()\fR increments the reference count for +an existing \fB\s-1SSL_CTX\s0\fR structure. +.SH "NOTES" +.IX Header "NOTES" +The \s-1SSL_CTX\s0 object uses \fBmethod\fR as connection method. +The methods exist in a generic type (for client and server use), a server only +type, and a client only type. +\&\fBmethod\fR can be of the following types: +.IP "\fBTLS_method()\fR, \fBTLS_server_method()\fR, \fBTLS_client_method()\fR" 4 +.IX Item "TLS_method(), TLS_server_method(), TLS_client_method()" +These are the general-purpose \fIversion-flexible\fR \s-1SSL/TLS\s0 methods. +The actual protocol version used will be negotiated to the highest version +mutually supported by the client and the server. +The supported protocols are SSLv3, TLSv1, TLSv1.1, TLSv1.2 and TLSv1.3. +Applications should use these methods, and avoid the version-specific +methods described below, which are deprecated. +.IP "\fBSSLv23_method()\fR, \fBSSLv23_server_method()\fR, \fBSSLv23_client_method()\fR" 4 +.IX Item "SSLv23_method(), SSLv23_server_method(), SSLv23_client_method()" +These functions do not exist anymore, they have been renamed to +\&\fBTLS_method()\fR, \fBTLS_server_method()\fR and \fBTLS_client_method()\fR respectively. +Currently, the old function calls are renamed to the corresponding new +ones by preprocessor macros, to ensure that existing code which uses the +old function names still compiles. However, using the old function names +is deprecated and new code should call the new functions instead. +.IP "\fBTLSv1_2_method()\fR, \fBTLSv1_2_server_method()\fR, \fBTLSv1_2_client_method()\fR" 4 +.IX Item "TLSv1_2_method(), TLSv1_2_server_method(), TLSv1_2_client_method()" +A \s-1TLS/SSL\s0 connection established with these methods will only understand the +TLSv1.2 protocol. These methods are deprecated. +.IP "\fBTLSv1_1_method()\fR, \fBTLSv1_1_server_method()\fR, \fBTLSv1_1_client_method()\fR" 4 +.IX Item "TLSv1_1_method(), TLSv1_1_server_method(), TLSv1_1_client_method()" +A \s-1TLS/SSL\s0 connection established with these methods will only understand the +TLSv1.1 protocol. These methods are deprecated. +.IP "\fBTLSv1_method()\fR, \fBTLSv1_server_method()\fR, \fBTLSv1_client_method()\fR" 4 +.IX Item "TLSv1_method(), TLSv1_server_method(), TLSv1_client_method()" +A \s-1TLS/SSL\s0 connection established with these methods will only understand the +TLSv1 protocol. These methods are deprecated. +.IP "\fBSSLv3_method()\fR, \fBSSLv3_server_method()\fR, \fBSSLv3_client_method()\fR" 4 +.IX Item "SSLv3_method(), SSLv3_server_method(), SSLv3_client_method()" +A \s-1TLS/SSL\s0 connection established with these methods will only understand the +SSLv3 protocol. +The SSLv3 protocol is deprecated and should not be used. +.IP "\fBDTLS_method()\fR, \fBDTLS_server_method()\fR, \fBDTLS_client_method()\fR" 4 +.IX Item "DTLS_method(), DTLS_server_method(), DTLS_client_method()" +These are the version-flexible \s-1DTLS\s0 methods. +Currently supported protocols are \s-1DTLS 1.0\s0 and \s-1DTLS 1.2.\s0 +.IP "\fBDTLSv1_2_method()\fR, \fBDTLSv1_2_server_method()\fR, \fBDTLSv1_2_client_method()\fR" 4 +.IX Item "DTLSv1_2_method(), DTLSv1_2_server_method(), DTLSv1_2_client_method()" +These are the version-specific methods for DTLSv1.2. +These methods are deprecated. +.IP "\fBDTLSv1_method()\fR, \fBDTLSv1_server_method()\fR, \fBDTLSv1_client_method()\fR" 4 +.IX Item "DTLSv1_method(), DTLSv1_server_method(), DTLSv1_client_method()" +These are the version-specific methods for DTLSv1. +These methods are deprecated. +.PP +\&\fBSSL_CTX_new()\fR initializes the list of ciphers, the session cache setting, the +callbacks, the keys and certificates and the options to their default values. +.PP +\&\fBTLS_method()\fR, \fBTLS_server_method()\fR, \fBTLS_client_method()\fR, \fBDTLS_method()\fR, +\&\fBDTLS_server_method()\fR and \fBDTLS_client_method()\fR are the \fIversion-flexible\fR +methods. +All other methods only support one specific protocol version. +Use the \fIversion-flexible\fR methods instead of the version specific methods. +.PP +If you want to limit the supported protocols for the version flexible +methods you can use \fBSSL_CTX_set_min_proto_version\fR\|(3), +\&\fBSSL_set_min_proto_version\fR\|(3), \fBSSL_CTX_set_max_proto_version\fR\|(3) and +\&\fBSSL_set_max_proto_version\fR\|(3) functions. +Using these functions it is possible to choose e.g. \fBTLS_server_method()\fR +and be able to negotiate with all possible clients, but to only +allow newer protocols like \s-1TLS 1.0, TLS 1.1, TLS 1.2\s0 or \s-1TLS 1.3.\s0 +.PP +The list of protocols available can also be limited using the +\&\fBSSL_OP_NO_SSLv3\fR, \fBSSL_OP_NO_TLSv1\fR, \fBSSL_OP_NO_TLSv1_1\fR, +\&\fBSSL_OP_NO_TLSv1_3\fR, \fBSSL_OP_NO_TLSv1_2\fR and \fBSSL_OP_NO_TLSv1_3\fR +options of the +\&\fBSSL_CTX_set_options\fR\|(3) or \fBSSL_set_options\fR\|(3) functions, but this approach +is not recommended. Clients should avoid creating \*(L"holes\*(R" in the set of +protocols they support. When disabling a protocol, make sure that you also +disable either all previous or all subsequent protocol versions. +In clients, when a protocol version is disabled without disabling \fIall\fR +previous protocol versions, the effect is to also disable all subsequent +protocol versions. +.PP +The SSLv3 protocol is deprecated and should generally not be used. +Applications should typically use \fBSSL_CTX_set_min_proto_version\fR\|(3) to set +the minimum protocol to at least \fB\s-1TLS1_VERSION\s0\fR. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +The following return values can occur: +.IP "\s-1NULL\s0" 4 +.IX Item "NULL" +The creation of a new \s-1SSL_CTX\s0 object failed. Check the error stack to find out +the reason. +.IP "Pointer to an \s-1SSL_CTX\s0 object" 4 +.IX Item "Pointer to an SSL_CTX object" +The return value points to an allocated \s-1SSL_CTX\s0 object. +.Sp +\&\fBSSL_CTX_up_ref()\fR returns 1 for success and 0 for failure. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBSSL_CTX_set_options\fR\|(3), \fBSSL_CTX_free\fR\|(3), \fBSSL_accept\fR\|(3), +\&\fBSSL_CTX_set_min_proto_version\fR\|(3), \fBssl\fR\|(7), \fBSSL_set_connect_state\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +Support for SSLv2 and the corresponding \fBSSLv2_method()\fR, +\&\fBSSLv2_server_method()\fR and \fBSSLv2_client_method()\fR functions where +removed in OpenSSL 1.1.0. +.PP +\&\fBSSLv23_method()\fR, \fBSSLv23_server_method()\fR and \fBSSLv23_client_method()\fR +were deprecated and the preferred \fBTLS_method()\fR, \fBTLS_server_method()\fR +and \fBTLS_client_method()\fR functions were added in OpenSSL 1.1.0. +.PP +All version-specific methods were deprecated in OpenSSL 1.1.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_sess_number.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_sess_number.3 new file mode 100644 index 00000000..62f33a69 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_sess_number.3 @@ -0,0 +1,217 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CTX_SESS_NUMBER 3" +.TH SSL_CTX_SESS_NUMBER 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_CTX_sess_number, SSL_CTX_sess_connect, SSL_CTX_sess_connect_good, SSL_CTX_sess_connect_renegotiate, SSL_CTX_sess_accept, SSL_CTX_sess_accept_good, SSL_CTX_sess_accept_renegotiate, SSL_CTX_sess_hits, SSL_CTX_sess_cb_hits, SSL_CTX_sess_misses, SSL_CTX_sess_timeouts, SSL_CTX_sess_cache_full \- obtain session cache statistics +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& long SSL_CTX_sess_number(SSL_CTX *ctx); +\& long SSL_CTX_sess_connect(SSL_CTX *ctx); +\& long SSL_CTX_sess_connect_good(SSL_CTX *ctx); +\& long SSL_CTX_sess_connect_renegotiate(SSL_CTX *ctx); +\& long SSL_CTX_sess_accept(SSL_CTX *ctx); +\& long SSL_CTX_sess_accept_good(SSL_CTX *ctx); +\& long SSL_CTX_sess_accept_renegotiate(SSL_CTX *ctx); +\& long SSL_CTX_sess_hits(SSL_CTX *ctx); +\& long SSL_CTX_sess_cb_hits(SSL_CTX *ctx); +\& long SSL_CTX_sess_misses(SSL_CTX *ctx); +\& long SSL_CTX_sess_timeouts(SSL_CTX *ctx); +\& long SSL_CTX_sess_cache_full(SSL_CTX *ctx); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_CTX_sess_number()\fR returns the current number of sessions in the internal +session cache. +.PP +\&\fBSSL_CTX_sess_connect()\fR returns the number of started \s-1SSL/TLS\s0 handshakes in +client mode. +.PP +\&\fBSSL_CTX_sess_connect_good()\fR returns the number of successfully established +\&\s-1SSL/TLS\s0 sessions in client mode. +.PP +\&\fBSSL_CTX_sess_connect_renegotiate()\fR returns the number of started renegotiations +in client mode. +.PP +\&\fBSSL_CTX_sess_accept()\fR returns the number of started \s-1SSL/TLS\s0 handshakes in +server mode. +.PP +\&\fBSSL_CTX_sess_accept_good()\fR returns the number of successfully established +\&\s-1SSL/TLS\s0 sessions in server mode. +.PP +\&\fBSSL_CTX_sess_accept_renegotiate()\fR returns the number of started renegotiations +in server mode. +.PP +\&\fBSSL_CTX_sess_hits()\fR returns the number of successfully reused sessions. +In client mode a session set with \fBSSL_set_session\fR\|(3) +successfully reused is counted as a hit. In server mode a session successfully +retrieved from internal or external cache is counted as a hit. +.PP +\&\fBSSL_CTX_sess_cb_hits()\fR returns the number of successfully retrieved sessions +from the external session cache in server mode. +.PP +\&\fBSSL_CTX_sess_misses()\fR returns the number of sessions proposed by clients +that were not found in the internal session cache in server mode. +.PP +\&\fBSSL_CTX_sess_timeouts()\fR returns the number of sessions proposed by clients +and either found in the internal or external session cache in server mode, + but that were invalid due to timeout. These sessions are not included in +the \fBSSL_CTX_sess_hits()\fR count. +.PP +\&\fBSSL_CTX_sess_cache_full()\fR returns the number of sessions that were removed +because the maximum session cache size was exceeded. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +The functions return the values indicated in the \s-1DESCRIPTION\s0 section. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), \fBSSL_set_session\fR\|(3), +\&\fBSSL_CTX_set_session_cache_mode\fR\|(3) +\&\fBSSL_CTX_sess_set_cache_size\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2001\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_sess_set_cache_size.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_sess_set_cache_size.3 new file mode 100644 index 00000000..7b591bc9 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_sess_set_cache_size.3 @@ -0,0 +1,193 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CTX_SESS_SET_CACHE_SIZE 3" +.TH SSL_CTX_SESS_SET_CACHE_SIZE 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_CTX_sess_set_cache_size, SSL_CTX_sess_get_cache_size \- manipulate session cache size +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& long SSL_CTX_sess_set_cache_size(SSL_CTX *ctx, long t); +\& long SSL_CTX_sess_get_cache_size(SSL_CTX *ctx); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_CTX_sess_set_cache_size()\fR sets the size of the internal session cache +of context \fBctx\fR to \fBt\fR. +This value is a hint and not an absolute; see the notes below. +.PP +\&\fBSSL_CTX_sess_get_cache_size()\fR returns the currently valid session cache size. +.SH "NOTES" +.IX Header "NOTES" +The internal session cache size is \s-1SSL_SESSION_CACHE_MAX_SIZE_DEFAULT,\s0 +currently 1024*20, so that up to 20000 sessions can be held. This size +can be modified using the \fBSSL_CTX_sess_set_cache_size()\fR call. A special +case is the size 0, which is used for unlimited size. +.PP +If adding the session makes the cache exceed its size, then unused +sessions are dropped from the end of the cache. +Cache space may also be reclaimed by calling +\&\fBSSL_CTX_flush_sessions\fR\|(3) to remove +expired sessions. +.PP +If the size of the session cache is reduced and more sessions are already +in the session cache, old session will be removed at the next time a +session shall be added. This removal is not synchronized with the +expiration of sessions. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_CTX_sess_set_cache_size()\fR returns the previously valid size. +.PP +\&\fBSSL_CTX_sess_get_cache_size()\fR returns the currently valid size. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), +\&\fBSSL_CTX_set_session_cache_mode\fR\|(3), +\&\fBSSL_CTX_sess_number\fR\|(3), +\&\fBSSL_CTX_flush_sessions\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2001\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_sess_set_get_cb.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_sess_set_get_cb.3 new file mode 100644 index 00000000..783e57f6 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_sess_set_get_cb.3 @@ -0,0 +1,254 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CTX_SESS_SET_GET_CB 3" +.TH SSL_CTX_SESS_SET_GET_CB 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_CTX_sess_set_new_cb, SSL_CTX_sess_set_remove_cb, SSL_CTX_sess_set_get_cb, SSL_CTX_sess_get_new_cb, SSL_CTX_sess_get_remove_cb, SSL_CTX_sess_get_get_cb \- provide callback functions for server side external session caching +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& void SSL_CTX_sess_set_new_cb(SSL_CTX *ctx, +\& int (*new_session_cb)(SSL *, SSL_SESSION *)); +\& void SSL_CTX_sess_set_remove_cb(SSL_CTX *ctx, +\& void (*remove_session_cb)(SSL_CTX *ctx, +\& SSL_SESSION *)); +\& void SSL_CTX_sess_set_get_cb(SSL_CTX *ctx, +\& SSL_SESSION (*get_session_cb)(SSL *, +\& const unsigned char *, +\& int, int *)); +\& +\& int (*SSL_CTX_sess_get_new_cb(SSL_CTX *ctx))(struct ssl_st *ssl, +\& SSL_SESSION *sess); +\& void (*SSL_CTX_sess_get_remove_cb(SSL_CTX *ctx))(struct ssl_ctx_st *ctx, +\& SSL_SESSION *sess); +\& SSL_SESSION *(*SSL_CTX_sess_get_get_cb(SSL_CTX *ctx))(struct ssl_st *ssl, +\& const unsigned char *data, +\& int len, int *copy); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_CTX_sess_set_new_cb()\fR sets the callback function that is +called whenever a new session was negotiated. +.PP +\&\fBSSL_CTX_sess_set_remove_cb()\fR sets the callback function that is +called whenever a session is removed by the \s-1SSL\s0 engine. For example, +this can occur because a session is considered faulty or has become obsolete +because of exceeding the timeout value. +.PP +\&\fBSSL_CTX_sess_set_get_cb()\fR sets the callback function that is called +whenever a \s-1TLS\s0 client proposed to resume a session but the session +could not be found in the internal session cache (see +\&\fBSSL_CTX_set_session_cache_mode\fR\|(3)). +(\s-1TLS\s0 server only.) +.PP +\&\fBSSL_CTX_sess_get_new_cb()\fR, \fBSSL_CTX_sess_get_remove_cb()\fR, and +\&\fBSSL_CTX_sess_get_get_cb()\fR retrieve the function pointers set by the +corresponding set callback functions. If a callback function has not been +set, the \s-1NULL\s0 pointer is returned. +.SH "NOTES" +.IX Header "NOTES" +In order to allow external session caching, synchronization with the internal +session cache is realized via callback functions. Inside these callback +functions, session can be saved to disk or put into a database using the +\&\fBd2i_SSL_SESSION\fR\|(3) interface. +.PP +The \fBnew_session_cb()\fR is called whenever a new session has been negotiated and +session caching is enabled (see \fBSSL_CTX_set_session_cache_mode\fR\|(3)). The +\&\fBnew_session_cb()\fR is passed the \fBssl\fR connection and the nascent +ssl session \fBsess\fR. +Since sessions are reference-counted objects, the reference count on the +session is incremented before the callback, on behalf of the application. If +the callback returns \fB0\fR, the session will be immediately removed from the +internal cache and the reference count released. If the callback returns \fB1\fR, +the application retains the reference (for an entry in the +application-maintained \*(L"external session cache\*(R"), and is responsible for +calling \fBSSL_SESSION_free()\fR when the session reference is no longer in use. +.PP +Note that in TLSv1.3, sessions are established after the main +handshake has completed. The server decides when to send the client the session +information and this may occur some time after the end of the handshake (or not +at all). This means that applications should expect the \fBnew_session_cb()\fR +function to be invoked during the handshake (for <= TLSv1.2) or after the +handshake (for TLSv1.3). It is also possible in TLSv1.3 for multiple sessions to +be established with a single connection. In these case the \fBnew_session_cb()\fR +function will be invoked multiple times. +.PP +In TLSv1.3 it is recommended that each \s-1SSL_SESSION\s0 object is only used for +resumption once. One way of enforcing that is for applications to call +\&\fBSSL_CTX_remove_session\fR\|(3) after a session has been used. +.PP +The \fBremove_session_cb()\fR is called whenever the \s-1SSL\s0 engine removes a session +from the internal cache. This can happen when the session is removed because +it is expired or when a connection was not shutdown cleanly. It also happens +for all sessions in the internal session cache when +\&\fBSSL_CTX_free\fR\|(3) is called. The \fBremove_session_cb()\fR is passed +the \fBctx\fR and the ssl session \fBsess\fR. It does not provide any feedback. +.PP +The \fBget_session_cb()\fR is only called on \s-1SSL/TLS\s0 servers, and is given +the session id +proposed by the client. The \fBget_session_cb()\fR is always called, even when +session caching was disabled. The \fBget_session_cb()\fR is passed the +\&\fBssl\fR connection and the session id of length \fBlength\fR at the memory location +\&\fBdata\fR. By setting the parameter \fBcopy\fR to \fB1\fR, the callback can require the +\&\s-1SSL\s0 engine to increment the reference count of the \s-1SSL_SESSION\s0 object; +setting \fBcopy\fR to \fB0\fR causes the reference count to remain unchanged. +If the \fBget_session_cb()\fR does not write to \fBcopy\fR, the reference count +is incremented and the session must be explicitly freed with +\&\fBSSL_SESSION_free\fR\|(3). +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_CTX_sess_get_new_cb()\fR, \fBSSL_CTX_sess_get_remove_cb()\fR and \fBSSL_CTX_sess_get_get_cb()\fR +return different callback function pointers respectively. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), \fBd2i_SSL_SESSION\fR\|(3), +\&\fBSSL_CTX_set_session_cache_mode\fR\|(3), +\&\fBSSL_CTX_flush_sessions\fR\|(3), +\&\fBSSL_SESSION_free\fR\|(3), +\&\fBSSL_CTX_free\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2001\-2020 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_sessions.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_sessions.3 new file mode 100644 index 00000000..ea1ef03e --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_sessions.3 @@ -0,0 +1,178 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CTX_SESSIONS 3" +.TH SSL_CTX_SESSIONS 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_CTX_sessions \- access internal session cache +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& struct lhash_st *SSL_CTX_sessions(SSL_CTX *ctx); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_CTX_sessions()\fR returns a pointer to the lhash databases containing the +internal session cache for \fBctx\fR. +.SH "NOTES" +.IX Header "NOTES" +The sessions in the internal session cache are kept in an +\&\s-1\fBLHASH\s0\fR\|(3) type database. It is possible to directly +access this database e.g. for searching. In parallel, the sessions +form a linked list which is maintained separately from the +\&\s-1\fBLHASH\s0\fR\|(3) operations, so that the database must not be +modified directly but by using the +\&\fBSSL_CTX_add_session\fR\|(3) family of functions. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_CTX_sessions()\fR returns a pointer to the lhash of \fB\s-1SSL_SESSION\s0\fR. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), \s-1\fBLHASH\s0\fR\|(3), +\&\fBSSL_CTX_add_session\fR\|(3), +\&\fBSSL_CTX_set_session_cache_mode\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2001\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set0_CA_list.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set0_CA_list.3 new file mode 100644 index 00000000..d1495065 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set0_CA_list.3 @@ -0,0 +1,307 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CTX_SET0_CA_LIST 3" +.TH SSL_CTX_SET0_CA_LIST 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_CTX_set_client_CA_list, SSL_set_client_CA_list, SSL_get_client_CA_list, SSL_CTX_get_client_CA_list, SSL_CTX_add_client_CA, SSL_add_client_CA, SSL_set0_CA_list, SSL_CTX_set0_CA_list, SSL_get0_CA_list, SSL_CTX_get0_CA_list, SSL_add1_to_CA_list, SSL_CTX_add1_to_CA_list, SSL_get0_peer_CA_list \&\- get or set CA list +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& void SSL_CTX_set_client_CA_list(SSL_CTX *ctx, STACK_OF(X509_NAME) *list); +\& void SSL_set_client_CA_list(SSL *s, STACK_OF(X509_NAME) *list); +\& STACK_OF(X509_NAME) *SSL_get_client_CA_list(const SSL *s); +\& STACK_OF(X509_NAME) *SSL_CTX_get_client_CA_list(const SSL_CTX *ctx); +\& int SSL_CTX_add_client_CA(SSL_CTX *ctx, X509 *cacert); +\& int SSL_add_client_CA(SSL *ssl, X509 *cacert); +\& +\& void SSL_CTX_set0_CA_list(SSL_CTX *ctx, STACK_OF(X509_NAME) *name_list); +\& void SSL_set0_CA_list(SSL *s, STACK_OF(X509_NAME) *name_list); +\& const STACK_OF(X509_NAME) *SSL_CTX_get0_CA_list(const SSL_CTX *ctx); +\& const STACK_OF(X509_NAME) *SSL_get0_CA_list(const SSL *s); +\& int SSL_CTX_add1_to_CA_list(SSL_CTX *ctx, const X509 *x); +\& int SSL_add1_to_CA_list(SSL *ssl, const X509 *x); +\& +\& const STACK_OF(X509_NAME) *SSL_get0_peer_CA_list(const SSL *s); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The functions described here set and manage the list of \s-1CA\s0 names that are sent +between two communicating peers. +.PP +For \s-1TLS\s0 versions 1.2 and earlier the list of \s-1CA\s0 names is only sent from the +server to the client when requesting a client certificate. So any list of \s-1CA\s0 +names set is never sent from client to server and the list of \s-1CA\s0 names retrieved +by \fBSSL_get0_peer_CA_list()\fR is always \fB\s-1NULL\s0\fR. +.PP +For \s-1TLS 1.3\s0 the list of \s-1CA\s0 names is sent using the \fBcertificate_authorities\fR +extension and may be sent by a client (in the ClientHello message) or by +a server (when requesting a certificate). +.PP +In most cases it is not necessary to set \s-1CA\s0 names on the client side. The list +of \s-1CA\s0 names that are acceptable to the client will be sent in plaintext to the +server. This has privacy implications and may also have performance implications +if the list is large. This optional capability was introduced as part of TLSv1.3 +and therefore setting \s-1CA\s0 names on the client side will have no impact if that +protocol version has been disabled. Most servers do not need this and so this +should be avoided unless required. +.PP +The \*(L"client \s-1CA\s0 list\*(R" functions below only have an effect when called on the +server side. +.PP +\&\fBSSL_CTX_set_client_CA_list()\fR sets the \fBlist\fR of CAs sent to the client when +requesting a client certificate for \fBctx\fR. Ownership of \fBlist\fR is transferred +to \fBctx\fR and it should not be freed by the caller. +.PP +\&\fBSSL_set_client_CA_list()\fR sets the \fBlist\fR of CAs sent to the client when +requesting a client certificate for the chosen \fBssl\fR, overriding the +setting valid for \fBssl\fR's \s-1SSL_CTX\s0 object. Ownership of \fBlist\fR is transferred +to \fBs\fR and it should not be freed by the caller. +.PP +\&\fBSSL_CTX_get_client_CA_list()\fR returns the list of client CAs explicitly set for +\&\fBctx\fR using \fBSSL_CTX_set_client_CA_list()\fR. The returned list should not be freed +by the caller. +.PP +\&\fBSSL_get_client_CA_list()\fR returns the list of client CAs explicitly +set for \fBssl\fR using \fBSSL_set_client_CA_list()\fR or \fBssl\fR's \s-1SSL_CTX\s0 object with +\&\fBSSL_CTX_set_client_CA_list()\fR, when in server mode. In client mode, +SSL_get_client_CA_list returns the list of client CAs sent from the server, if +any. The returned list should not be freed by the caller. +.PP +\&\fBSSL_CTX_add_client_CA()\fR adds the \s-1CA\s0 name extracted from \fBcacert\fR to the +list of CAs sent to the client when requesting a client certificate for +\&\fBctx\fR. +.PP +\&\fBSSL_add_client_CA()\fR adds the \s-1CA\s0 name extracted from \fBcacert\fR to the +list of CAs sent to the client when requesting a client certificate for +the chosen \fBssl\fR, overriding the setting valid for \fBssl\fR's \s-1SSL_CTX\s0 object. +.PP +\&\fBSSL_get0_peer_CA_list()\fR retrieves the list of \s-1CA\s0 names (if any) the peer +has sent. This can be called on either the server or the client side. The +returned list should not be freed by the caller. +.PP +The \*(L"generic \s-1CA\s0 list\*(R" functions below are very similar to the \*(L"client \s-1CA\s0 +list\*(R" functions except that they have an effect on both the server and client +sides. The lists of \s-1CA\s0 names managed are separate \- so you cannot (for example) +set \s-1CA\s0 names using the \*(L"client \s-1CA\s0 list\*(R" functions and then get them using the +\&\*(L"generic \s-1CA\s0 list\*(R" functions. Where a mix of the two types of functions has been +used on the server side then the \*(L"client \s-1CA\s0 list\*(R" functions take precedence. +Typically, on the server side, the \*(L"client \s-1CA\s0 list \*(R" functions should be used in +preference. As noted above in most cases it is not necessary to set \s-1CA\s0 names on +the client side. +.PP +\&\fBSSL_CTX_set0_CA_list()\fR sets the list of CAs to be sent to the peer to +\&\fBname_list\fR. Ownership of \fBname_list\fR is transferred to \fBctx\fR and +it should not be freed by the caller. +.PP +\&\fBSSL_set0_CA_list()\fR sets the list of CAs to be sent to the peer to \fBname_list\fR +overriding any list set in the parent \fB\s-1SSL_CTX\s0\fR of \fBs\fR. Ownership of +\&\fBname_list\fR is transferred to \fBs\fR and it should not be freed by the caller. +.PP +\&\fBSSL_CTX_get0_CA_list()\fR retrieves any previously set list of CAs set for +\&\fBctx\fR. The returned list should not be freed by the caller. +.PP +\&\fBSSL_get0_CA_list()\fR retrieves any previously set list of CAs set for +\&\fBs\fR or if none are set the list from the parent \fB\s-1SSL_CTX\s0\fR is retrieved. The +returned list should not be freed by the caller. +.PP +\&\fBSSL_CTX_add1_to_CA_list()\fR appends the \s-1CA\s0 subject name extracted from \fBx\fR to the +list of CAs sent to peer for \fBctx\fR. +.PP +\&\fBSSL_add1_to_CA_list()\fR appends the \s-1CA\s0 subject name extracted from \fBx\fR to the +list of CAs sent to the peer for \fBs\fR, overriding the setting in the parent +\&\fB\s-1SSL_CTX\s0\fR. +.SH "NOTES" +.IX Header "NOTES" +When a \s-1TLS/SSL\s0 server requests a client certificate (see +\&\fB\fBSSL_CTX_set_verify\fB\|(3)\fR), it sends a list of CAs, for which it will accept +certificates, to the client. +.PP +This list must explicitly be set using \fBSSL_CTX_set_client_CA_list()\fR or +\&\fBSSL_CTX_set0_CA_list()\fR for \fBctx\fR and \fBSSL_set_client_CA_list()\fR or +\&\fBSSL_set0_CA_list()\fR for the specific \fBssl\fR. The list specified +overrides the previous setting. The CAs listed do not become trusted (\fBlist\fR +only contains the names, not the complete certificates); use +\&\fBSSL_CTX_load_verify_locations\fR\|(3) to additionally load them for verification. +.PP +If the list of acceptable CAs is compiled in a file, the +\&\fBSSL_load_client_CA_file\fR\|(3) function can be used to help to import the +necessary data. +.PP +\&\fBSSL_CTX_add_client_CA()\fR, \fBSSL_CTX_add1_to_CA_list()\fR, \fBSSL_add_client_CA()\fR and +\&\fBSSL_add1_to_CA_list()\fR can be used to add additional items the list of CAs. If no +list was specified before using \fBSSL_CTX_set_client_CA_list()\fR, +\&\fBSSL_CTX_set0_CA_list()\fR, \fBSSL_set_client_CA_list()\fR or \fBSSL_set0_CA_list()\fR, a +new \s-1CA\s0 list for \fBctx\fR or \fBssl\fR (as appropriate) is opened. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_CTX_set_client_CA_list()\fR, \fBSSL_set_client_CA_list()\fR, +\&\fBSSL_CTX_set_client_CA_list()\fR, \fBSSL_set_client_CA_list()\fR, \fBSSL_CTX_set0_CA_list()\fR +and \fBSSL_set0_CA_list()\fR do not return a value. +.PP +\&\fBSSL_CTX_get_client_CA_list()\fR, \fBSSL_get_client_CA_list()\fR, \fBSSL_CTX_get0_CA_list()\fR +and \fBSSL_get0_CA_list()\fR return a stack of \s-1CA\s0 names or \fB\s-1NULL\s0\fR is no \s-1CA\s0 names are +set. +.PP +\&\fBSSL_CTX_add_client_CA()\fR,\fBSSL_add_client_CA()\fR, \fBSSL_CTX_add1_to_CA_list()\fR and +\&\fBSSL_add1_to_CA_list()\fR return 1 for success and 0 for failure. +.PP +\&\fBSSL_get0_peer_CA_list()\fR returns a stack of \s-1CA\s0 names sent by the peer or +\&\fB\s-1NULL\s0\fR or an empty stack if no list was sent. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +Scan all certificates in \fBCAfile\fR and list them as acceptable CAs: +.PP +.Vb 1 +\& SSL_CTX_set_client_CA_list(ctx, SSL_load_client_CA_file(CAfile)); +.Ve +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), +\&\fBSSL_load_client_CA_file\fR\|(3), +\&\fBSSL_CTX_load_verify_locations\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set1_curves.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set1_curves.3 new file mode 100644 index 00000000..dff3f482 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set1_curves.3 @@ -0,0 +1,238 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CTX_SET1_CURVES 3" +.TH SSL_CTX_SET1_CURVES 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_CTX_set1_groups, SSL_CTX_set1_groups_list, SSL_set1_groups, SSL_set1_groups_list, SSL_get1_groups, SSL_get_shared_group, SSL_CTX_set1_curves, SSL_CTX_set1_curves_list, SSL_set1_curves, SSL_set1_curves_list, SSL_get1_curves, SSL_get_shared_curve \&\- EC supported curve functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int SSL_CTX_set1_groups(SSL_CTX *ctx, int *glist, int glistlen); +\& int SSL_CTX_set1_groups_list(SSL_CTX *ctx, char *list); +\& +\& int SSL_set1_groups(SSL *ssl, int *glist, int glistlen); +\& int SSL_set1_groups_list(SSL *ssl, char *list); +\& +\& int SSL_get1_groups(SSL *ssl, int *groups); +\& int SSL_get_shared_group(SSL *s, int n); +\& +\& int SSL_CTX_set1_curves(SSL_CTX *ctx, int *clist, int clistlen); +\& int SSL_CTX_set1_curves_list(SSL_CTX *ctx, char *list); +\& +\& int SSL_set1_curves(SSL *ssl, int *clist, int clistlen); +\& int SSL_set1_curves_list(SSL *ssl, char *list); +\& +\& int SSL_get1_curves(SSL *ssl, int *curves); +\& int SSL_get_shared_curve(SSL *s, int n); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +For all of the functions below that set the supported groups there must be at +least one group in the list. +.PP +\&\fBSSL_CTX_set1_groups()\fR sets the supported groups for \fBctx\fR to \fBglistlen\fR +groups in the array \fBglist\fR. The array consist of all NIDs of groups in +preference order. For a \s-1TLS\s0 client the groups are used directly in the +supported groups extension. For a \s-1TLS\s0 server the groups are used to +determine the set of shared groups. +.PP +\&\fBSSL_CTX_set1_groups_list()\fR sets the supported groups for \fBctx\fR to +string \fBlist\fR. The string is a colon separated list of group NIDs or +names, for example \*(L"P\-521:P\-384:P\-256\*(R". +.PP +\&\fBSSL_set1_groups()\fR and \fBSSL_set1_groups_list()\fR are similar except they set +supported groups for the \s-1SSL\s0 structure \fBssl\fR. +.PP +\&\fBSSL_get1_groups()\fR returns the set of supported groups sent by a client +in the supported groups extension. It returns the total number of +supported groups. The \fBgroups\fR parameter can be \fB\s-1NULL\s0\fR to simply +return the number of groups for memory allocation purposes. The +\&\fBgroups\fR array is in the form of a set of group NIDs in preference +order. It can return zero if the client did not send a supported groups +extension. +.PP +\&\fBSSL_get_shared_group()\fR returns shared group \fBn\fR for a server-side +\&\s-1SSL\s0 \fBssl\fR. If \fBn\fR is \-1 then the total number of shared groups is +returned, which may be zero. Other than for diagnostic purposes, +most applications will only be interested in the first shared group +so \fBn\fR is normally set to zero. If the value \fBn\fR is out of range, +NID_undef is returned. +.PP +All these functions are implemented as macros. +.PP +The curve functions are synonyms for the equivalently named group functions and +are identical in every respect. They exist because, prior to \s-1TLS1.3,\s0 there was +only the concept of supported curves. In \s-1TLS1.3\s0 this was renamed to supported +groups, and extended to include Diffie Hellman groups. The group functions +should be used in preference. +.SH "NOTES" +.IX Header "NOTES" +If an application wishes to make use of several of these functions for +configuration purposes either on a command line or in a file it should +consider using the \s-1SSL_CONF\s0 interface instead of manually parsing options. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_CTX_set1_groups()\fR, \fBSSL_CTX_set1_groups_list()\fR, \fBSSL_set1_groups()\fR and +\&\fBSSL_set1_groups_list()\fR, return 1 for success and 0 for failure. +.PP +\&\fBSSL_get1_groups()\fR returns the number of groups, which may be zero. +.PP +\&\fBSSL_get_shared_group()\fR returns the \s-1NID\s0 of shared group \fBn\fR or NID_undef if there +is no shared group \fBn\fR; or the total number of shared groups if \fBn\fR +is \-1. +.PP +When called on a client \fBssl\fR, \fBSSL_get_shared_group()\fR has no meaning and +returns \-1. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBSSL_CTX_add_extra_chain_cert\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +The curve functions were added in OpenSSL 1.0.2. The equivalent group +functions were added in OpenSSL 1.1.1. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2013\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set1_sigalgs.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set1_sigalgs.3 new file mode 100644 index 00000000..55fd3d09 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set1_sigalgs.3 @@ -0,0 +1,249 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CTX_SET1_SIGALGS 3" +.TH SSL_CTX_SET1_SIGALGS 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_CTX_set1_sigalgs, SSL_set1_sigalgs, SSL_CTX_set1_sigalgs_list, SSL_set1_sigalgs_list, SSL_CTX_set1_client_sigalgs, SSL_set1_client_sigalgs, SSL_CTX_set1_client_sigalgs_list, SSL_set1_client_sigalgs_list \- set supported signature algorithms +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& long SSL_CTX_set1_sigalgs(SSL_CTX *ctx, const int *slist, long slistlen); +\& long SSL_set1_sigalgs(SSL *ssl, const int *slist, long slistlen); +\& long SSL_CTX_set1_sigalgs_list(SSL_CTX *ctx, const char *str); +\& long SSL_set1_sigalgs_list(SSL *ssl, const char *str); +\& +\& long SSL_CTX_set1_client_sigalgs(SSL_CTX *ctx, const int *slist, long slistlen); +\& long SSL_set1_client_sigalgs(SSL *ssl, const int *slist, long slistlen); +\& long SSL_CTX_set1_client_sigalgs_list(SSL_CTX *ctx, const char *str); +\& long SSL_set1_client_sigalgs_list(SSL *ssl, const char *str); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_CTX_set1_sigalgs()\fR and \fBSSL_set1_sigalgs()\fR set the supported signature +algorithms for \fBctx\fR or \fBssl\fR. The array \fBslist\fR of length \fBslistlen\fR +must consist of pairs of NIDs corresponding to digest and public key +algorithms. +.PP +\&\fBSSL_CTX_set1_sigalgs_list()\fR and \fBSSL_set1_sigalgs_list()\fR set the supported +signature algorithms for \fBctx\fR or \fBssl\fR. The \fBstr\fR parameter +must be a null terminated string consisting of a colon separated list of +elements, where each element is either a combination of a public key +algorithm and a digest separated by \fB+\fR, or a \s-1TLS 1\s0.3\-style named +SignatureScheme such as rsa_pss_pss_sha256. +.PP +\&\fBSSL_CTX_set1_client_sigalgs()\fR, \fBSSL_set1_client_sigalgs()\fR, +\&\fBSSL_CTX_set1_client_sigalgs_list()\fR and \fBSSL_set1_client_sigalgs_list()\fR set +signature algorithms related to client authentication, otherwise they are +identical to \fBSSL_CTX_set1_sigalgs()\fR, \fBSSL_set1_sigalgs()\fR, +\&\fBSSL_CTX_set1_sigalgs_list()\fR and \fBSSL_set1_sigalgs_list()\fR. +.PP +All these functions are implemented as macros. The signature algorithm +parameter (integer array or string) is not freed: the application should +free it, if necessary. +.SH "NOTES" +.IX Header "NOTES" +If an application wishes to allow the setting of signature algorithms +as one of many user configurable options it should consider using the more +flexible \s-1SSL_CONF API\s0 instead. +.PP +The signature algorithms set by a client are used directly in the supported +signature algorithm in the client hello message. +.PP +The supported signature algorithms set by a server are not sent to the +client but are used to determine the set of shared signature algorithms +and (if server preferences are set with \s-1SSL_OP_CIPHER_SERVER_PREFERENCE\s0) +their order. +.PP +The client authentication signature algorithms set by a server are sent +in a certificate request message if client authentication is enabled, +otherwise they are unused. +.PP +Similarly client authentication signature algorithms set by a client are +used to determined the set of client authentication shared signature +algorithms. +.PP +Signature algorithms will neither be advertised nor used if the security level +prohibits them (for example \s-1SHA1\s0 if the security level is 4 or more). +.PP +Currently the NID_md5, NID_sha1, NID_sha224, NID_sha256, NID_sha384 and +NID_sha512 digest NIDs are supported and the public key algorithm NIDs +\&\s-1EVP_PKEY_RSA, EVP_PKEY_RSA_PSS, EVP_PKEY_DSA\s0 and \s-1EVP_PKEY_EC.\s0 +.PP +The short or long name values for digests can be used in a string (for +example \*(L"\s-1MD5\*(R", \*(L"SHA1\*(R", \*(L"SHA224\*(R", \*(L"SHA256\*(R", \*(L"SHA384\*(R", \*(L"SHA512\*(R"\s0) and +the public key algorithm strings \*(L"\s-1RSA\*(R",\s0 \*(L"RSA-PSS\*(R", \*(L"\s-1DSA\*(R"\s0 or \*(L"\s-1ECDSA\*(R".\s0 +.PP +The \s-1TLS 1.3\s0 signature scheme names (such as \*(L"rsa_pss_pss_sha256\*(R") can also +be used with the \fB_list\fR forms of the \s-1API.\s0 +.PP +The use of \s-1MD5\s0 as a digest is strongly discouraged due to security weaknesses. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +All these functions return 1 for success and 0 for failure. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +Set supported signature algorithms to \s-1SHA256\s0 with \s-1ECDSA\s0 and \s-1SHA256\s0 with \s-1RSA\s0 +using an array: +.PP +.Vb 1 +\& const int slist[] = {NID_sha256, EVP_PKEY_EC, NID_sha256, EVP_PKEY_RSA}; +\& +\& SSL_CTX_set1_sigalgs(ctx, slist, 4); +.Ve +.PP +Set supported signature algorithms to \s-1SHA256\s0 with \s-1ECDSA\s0 and \s-1SHA256\s0 with \s-1RSA\s0 +using a string: +.PP +.Vb 1 +\& SSL_CTX_set1_sigalgs_list(ctx, "ECDSA+SHA256:RSA+SHA256"); +.Ve +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), \fBSSL_get_shared_sigalgs\fR\|(3), +\&\fBSSL_CONF_CTX_new\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2015\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set1_verify_cert_store.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set1_verify_cert_store.3 new file mode 100644 index 00000000..1c513207 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set1_verify_cert_store.3 @@ -0,0 +1,226 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CTX_SET1_VERIFY_CERT_STORE 3" +.TH SSL_CTX_SET1_VERIFY_CERT_STORE 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_CTX_set0_verify_cert_store, SSL_CTX_set1_verify_cert_store, SSL_CTX_set0_chain_cert_store, SSL_CTX_set1_chain_cert_store, SSL_set0_verify_cert_store, SSL_set1_verify_cert_store, SSL_set0_chain_cert_store, SSL_set1_chain_cert_store \- set certificate verification or chain store +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int SSL_CTX_set0_verify_cert_store(SSL_CTX *ctx, X509_STORE *st); +\& int SSL_CTX_set1_verify_cert_store(SSL_CTX *ctx, X509_STORE *st); +\& int SSL_CTX_set0_chain_cert_store(SSL_CTX *ctx, X509_STORE *st); +\& int SSL_CTX_set1_chain_cert_store(SSL_CTX *ctx, X509_STORE *st); +\& +\& int SSL_set0_verify_cert_store(SSL *ctx, X509_STORE *st); +\& int SSL_set1_verify_cert_store(SSL *ctx, X509_STORE *st); +\& int SSL_set0_chain_cert_store(SSL *ctx, X509_STORE *st); +\& int SSL_set1_chain_cert_store(SSL *ctx, X509_STORE *st); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_CTX_set0_verify_cert_store()\fR and \fBSSL_CTX_set1_verify_cert_store()\fR +set the certificate store used for certificate verification to \fBst\fR. +.PP +\&\fBSSL_CTX_set0_chain_cert_store()\fR and \fBSSL_CTX_set1_chain_cert_store()\fR +set the certificate store used for certificate chain building to \fBst\fR. +.PP +\&\fBSSL_set0_verify_cert_store()\fR, \fBSSL_set1_verify_cert_store()\fR, +\&\fBSSL_set0_chain_cert_store()\fR and \fBSSL_set1_chain_cert_store()\fR are similar +except they apply to \s-1SSL\s0 structure \fBssl\fR. +.PP +All these functions are implemented as macros. Those containing a \fB1\fR +increment the reference count of the supplied store so it must +be freed at some point after the operation. Those containing a \fB0\fR do +not increment reference counts and the supplied store \fB\s-1MUST NOT\s0\fR be freed +after the operation. +.SH "NOTES" +.IX Header "NOTES" +The stores pointers associated with an \s-1SSL_CTX\s0 structure are copied to any \s-1SSL\s0 +structures when \fBSSL_new()\fR is called. As a result \s-1SSL\s0 structures will not be +affected if the parent \s-1SSL_CTX\s0 store pointer is set to a new value. +.PP +The verification store is used to verify the certificate chain sent by the +peer: that is an \s-1SSL/TLS\s0 client will use the verification store to verify +the server's certificate chain and a \s-1SSL/TLS\s0 server will use it to verify +any client certificate chain. +.PP +The chain store is used to build the certificate chain. +.PP +If the mode \fB\s-1SSL_MODE_NO_AUTO_CHAIN\s0\fR is set or a certificate chain is +configured already (for example using the functions such as +\&\fBSSL_CTX_add1_chain_cert\fR\|(3) or +\&\fBSSL_CTX_add_extra_chain_cert\fR\|(3)) then +automatic chain building is disabled. +.PP +If the mode \fB\s-1SSL_MODE_NO_AUTO_CHAIN\s0\fR is set then automatic chain building +is disabled. +.PP +If the chain or the verification store is not set then the store associated +with the parent \s-1SSL_CTX\s0 is used instead to retain compatibility with previous +versions of OpenSSL. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +All these functions return 1 for success and 0 for failure. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBSSL_CTX_add_extra_chain_cert\fR\|(3) +\&\fBSSL_CTX_set0_chain\fR\|(3) +\&\fBSSL_CTX_set1_chain\fR\|(3) +\&\fBSSL_CTX_add0_chain_cert\fR\|(3) +\&\fBSSL_CTX_add1_chain_cert\fR\|(3) +\&\fBSSL_set0_chain\fR\|(3) +\&\fBSSL_set1_chain\fR\|(3) +\&\fBSSL_add0_chain_cert\fR\|(3) +\&\fBSSL_add1_chain_cert\fR\|(3) +\&\fBSSL_CTX_build_cert_chain\fR\|(3) +\&\fBSSL_build_cert_chain\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +These functions were added in OpenSSL 1.0.2. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2013\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_alpn_select_cb.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_alpn_select_cb.3 new file mode 100644 index 00000000..895d73a3 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_alpn_select_cb.3 @@ -0,0 +1,314 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CTX_SET_ALPN_SELECT_CB 3" +.TH SSL_CTX_SET_ALPN_SELECT_CB 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_CTX_set_alpn_protos, SSL_set_alpn_protos, SSL_CTX_set_alpn_select_cb, SSL_CTX_set_next_proto_select_cb, SSL_CTX_set_next_protos_advertised_cb, SSL_select_next_proto, SSL_get0_alpn_selected, SSL_get0_next_proto_negotiated \&\- handle application layer protocol negotiation (ALPN) +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int SSL_CTX_set_alpn_protos(SSL_CTX *ctx, const unsigned char *protos, +\& unsigned int protos_len); +\& int SSL_set_alpn_protos(SSL *ssl, const unsigned char *protos, +\& unsigned int protos_len); +\& void SSL_CTX_set_alpn_select_cb(SSL_CTX *ctx, +\& int (*cb) (SSL *ssl, +\& const unsigned char **out, +\& unsigned char *outlen, +\& const unsigned char *in, +\& unsigned int inlen, +\& void *arg), void *arg); +\& void SSL_get0_alpn_selected(const SSL *ssl, const unsigned char **data, +\& unsigned int *len); +\& +\& void SSL_CTX_set_next_protos_advertised_cb(SSL_CTX *ctx, +\& int (*cb)(SSL *ssl, +\& const unsigned char **out, +\& unsigned int *outlen, +\& void *arg), +\& void *arg); +\& void SSL_CTX_set_next_proto_select_cb(SSL_CTX *ctx, +\& int (*cb)(SSL *s, +\& unsigned char **out, +\& unsigned char *outlen, +\& const unsigned char *in, +\& unsigned int inlen, +\& void *arg), +\& void *arg); +\& int SSL_select_next_proto(unsigned char **out, unsigned char *outlen, +\& const unsigned char *server, +\& unsigned int server_len, +\& const unsigned char *client, +\& unsigned int client_len) +\& void SSL_get0_next_proto_negotiated(const SSL *s, const unsigned char **data, +\& unsigned *len); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_CTX_set_alpn_protos()\fR and \fBSSL_set_alpn_protos()\fR are used by the client to +set the list of protocols available to be negotiated. The \fBprotos\fR must be in +protocol-list format, described below. The length of \fBprotos\fR is specified in +\&\fBprotos_len\fR. +.PP +\&\fBSSL_CTX_set_alpn_select_cb()\fR sets the application callback \fBcb\fR used by a +server to select which protocol to use for the incoming connection. When \fBcb\fR +is \s-1NULL, ALPN\s0 is not used. The \fBarg\fR value is a pointer which is passed to +the application callback. +.PP +\&\fBcb\fR is the application defined callback. The \fBin\fR, \fBinlen\fR parameters are a +vector in protocol-list format. The value of the \fBout\fR, \fBoutlen\fR vector +should be set to the value of a single protocol selected from the \fBin\fR, +\&\fBinlen\fR vector. The \fBout\fR buffer may point directly into \fBin\fR, or to a +buffer that outlives the handshake. The \fBarg\fR parameter is the pointer set via +\&\fBSSL_CTX_set_alpn_select_cb()\fR. +.PP +\&\fBSSL_select_next_proto()\fR is a helper function used to select protocols. It +implements the standard protocol selection. It is expected that this function +is called from the application callback \fBcb\fR. The protocol data in \fBserver\fR, +\&\fBserver_len\fR and \fBclient\fR, \fBclient_len\fR must be in the protocol-list format +described below. The first item in the \fBserver\fR, \fBserver_len\fR list that +matches an item in the \fBclient\fR, \fBclient_len\fR list is selected, and returned +in \fBout\fR, \fBoutlen\fR. The \fBout\fR value will point into either \fBserver\fR or +\&\fBclient\fR, so it should be copied immediately. If no match is found, the first +item in \fBclient\fR, \fBclient_len\fR is returned in \fBout\fR, \fBoutlen\fR. This +function can also be used in the \s-1NPN\s0 callback. +.PP +\&\fBSSL_CTX_set_next_proto_select_cb()\fR sets a callback \fBcb\fR that is called when a +client needs to select a protocol from the server's provided list, and a +user-defined pointer argument \fBarg\fR which will be passed to this callback. +For the callback itself, \fBout\fR +must be set to point to the selected protocol (which may be within \fBin\fR). +The length of the protocol name must be written into \fBoutlen\fR. The +server's advertised protocols are provided in \fBin\fR and \fBinlen\fR. The +callback can assume that \fBin\fR is syntactically valid. The client must +select a protocol. It is fatal to the connection if this callback returns +a value other than \fB\s-1SSL_TLSEXT_ERR_OK\s0\fR. The \fBarg\fR parameter is the pointer +set via \fBSSL_CTX_set_next_proto_select_cb()\fR. +.PP +\&\fBSSL_CTX_set_next_protos_advertised_cb()\fR sets a callback \fBcb\fR that is called +when a \s-1TLS\s0 server needs a list of supported protocols for Next Protocol +Negotiation. The returned list must be in protocol-list format, described +below. The list is +returned by setting \fBout\fR to point to it and \fBoutlen\fR to its length. This +memory will not be modified, but the \fB\s-1SSL\s0\fR does keep a +reference to it. The callback should return \fB\s-1SSL_TLSEXT_ERR_OK\s0\fR if it +wishes to advertise. Otherwise, no such extension will be included in the +ServerHello. +.PP +\&\fBSSL_get0_alpn_selected()\fR returns a pointer to the selected protocol in \fBdata\fR +with length \fBlen\fR. It is not NUL-terminated. \fBdata\fR is set to \s-1NULL\s0 and \fBlen\fR +is set to 0 if no protocol has been selected. \fBdata\fR must not be freed. +.PP +\&\fBSSL_get0_next_proto_negotiated()\fR sets \fBdata\fR and \fBlen\fR to point to the +client's requested protocol for this connection. If the client did not +request any protocol or \s-1NPN\s0 is not enabled, then \fBdata\fR is set to \s-1NULL\s0 and +\&\fBlen\fR to 0. Note that +the client can request any protocol it chooses. The value returned from +this function need not be a member of the list of supported protocols +provided by the callback. +.SH "NOTES" +.IX Header "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 +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. +.PP +Example: +.PP +.Vb 5 +\& unsigned char vector[] = { +\& 6, \*(Aqs\*(Aq, \*(Aqp\*(Aq, \*(Aqd\*(Aq, \*(Aqy\*(Aq, \*(Aq/\*(Aq, \*(Aq1\*(Aq, +\& 8, \*(Aqh\*(Aq, \*(Aqt\*(Aq, \*(Aqt\*(Aq, \*(Aqp\*(Aq, \*(Aq/\*(Aq, \*(Aq1\*(Aq, \*(Aq.\*(Aq, \*(Aq1\*(Aq +\& }; +\& unsigned int length = sizeof(vector); +.Ve +.PP +The \s-1ALPN\s0 callback is executed after the servername callback; as that servername +callback may update the \s-1SSL_CTX,\s0 and subsequently, the \s-1ALPN\s0 callback. +.PP +If there is no \s-1ALPN\s0 proposed in the ClientHello, the \s-1ALPN\s0 callback is not +invoked. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_CTX_set_alpn_protos()\fR and \fBSSL_set_alpn_protos()\fR return 0 on success, and +non\-0 on failure. \s-1WARNING:\s0 these functions reverse the return value convention. +.PP +\&\fBSSL_select_next_proto()\fR returns one of the following: +.IP "\s-1OPENSSL_NPN_NEGOTIATED\s0" 4 +.IX Item "OPENSSL_NPN_NEGOTIATED" +A match was found and is returned in \fBout\fR, \fBoutlen\fR. +.IP "\s-1OPENSSL_NPN_NO_OVERLAP\s0" 4 +.IX Item "OPENSSL_NPN_NO_OVERLAP" +No match was found. The first item in \fBclient\fR, \fBclient_len\fR is returned in +\&\fBout\fR, \fBoutlen\fR. +.PP +The \s-1ALPN\s0 select callback \fBcb\fR, must return one of the following: +.IP "\s-1SSL_TLSEXT_ERR_OK\s0" 4 +.IX Item "SSL_TLSEXT_ERR_OK" +\&\s-1ALPN\s0 protocol selected. +.IP "\s-1SSL_TLSEXT_ERR_ALERT_FATAL\s0" 4 +.IX Item "SSL_TLSEXT_ERR_ALERT_FATAL" +There was no overlap between the client's supplied list and the server +configuration. +.IP "\s-1SSL_TLSEXT_ERR_NOACK\s0" 4 +.IX Item "SSL_TLSEXT_ERR_NOACK" +\&\s-1ALPN\s0 protocol not selected, e.g., because no \s-1ALPN\s0 protocols are configured for +this connection. +.PP +The callback set using \fBSSL_CTX_set_next_proto_select_cb()\fR should return +\&\fB\s-1SSL_TLSEXT_ERR_OK\s0\fR if successful. Any other value is fatal to the connection. +.PP +The callback set using \fBSSL_CTX_set_next_protos_advertised_cb()\fR should return +\&\fB\s-1SSL_TLSEXT_ERR_OK\s0\fR if it wishes to advertise. Otherwise, no such extension +will be included in the ServerHello. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), \fBSSL_CTX_set_tlsext_servername_callback\fR\|(3), +\&\fBSSL_CTX_set_tlsext_servername_arg\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2016\-2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_cert_cb.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_cert_cb.3 new file mode 100644 index 00000000..42583adb --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_cert_cb.3 @@ -0,0 +1,213 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CTX_SET_CERT_CB 3" +.TH SSL_CTX_SET_CERT_CB 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_CTX_set_cert_cb, SSL_set_cert_cb \- handle certificate callback function +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& void SSL_CTX_set_cert_cb(SSL_CTX *c, int (*cert_cb)(SSL *ssl, void *arg), +\& void *arg); +\& void SSL_set_cert_cb(SSL *s, int (*cert_cb)(SSL *ssl, void *arg), void *arg); +\& +\& int (*cert_cb)(SSL *ssl, void *arg); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_CTX_set_cert_cb()\fR and \fBSSL_set_cert_cb()\fR sets the \fBcert_cb()\fR callback, +\&\fBarg\fR value is pointer which is passed to the application callback. +.PP +When \fBcert_cb()\fR is \s-1NULL,\s0 no callback function is used. +.PP +\&\fBcert_cb()\fR is the application defined callback. It is called before a +certificate will be used by a client or server. The callback can then inspect +the passed \fBssl\fR structure and set or clear any appropriate certificates. If +the callback is successful it \fB\s-1MUST\s0\fR return 1 even if no certificates have +been set. A zero is returned on error which will abort the handshake with a +fatal internal error alert. A negative return value will suspend the handshake +and the handshake function will return immediately. +\&\fBSSL_get_error\fR\|(3) will return \s-1SSL_ERROR_WANT_X509_LOOKUP\s0 to +indicate, that the handshake was suspended. The next call to the handshake +function will again lead to the call of \fBcert_cb()\fR. It is the job of the +\&\fBcert_cb()\fR to store information about the state of the last call, +if required to continue. +.SH "NOTES" +.IX Header "NOTES" +An application will typically call \fBSSL_use_certificate()\fR and +\&\fBSSL_use_PrivateKey()\fR to set the end entity certificate and private key. +It can add intermediate and optionally the root \s-1CA\s0 certificates using +\&\fBSSL_add1_chain_cert()\fR. +.PP +It might also call \fBSSL_certs_clear()\fR to delete any certificates associated +with the \fB\s-1SSL\s0\fR object. +.PP +The certificate callback functionality supersedes the (largely broken) +functionality provided by the old client certificate callback interface. +It is \fBalways\fR called even is a certificate is already set so the callback +can modify or delete the existing certificate. +.PP +A more advanced callback might examine the handshake parameters and set +whatever chain is appropriate. For example a legacy client supporting only +TLSv1.0 might receive a certificate chain signed using \s-1SHA1\s0 whereas a +TLSv1.2 or later client which advertises support for \s-1SHA256\s0 could receive a +chain using \s-1SHA256.\s0 +.PP +Normal server sanity checks are performed on any certificates set +by the callback. So if an \s-1EC\s0 chain is set for a curve the client does not +support it will \fBnot\fR be used. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_CTX_set_cert_cb()\fR and \fBSSL_set_cert_cb()\fR do not return values. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), \fBSSL_use_certificate\fR\|(3), +\&\fBSSL_add1_chain_cert\fR\|(3), +\&\fBSSL_get_client_CA_list\fR\|(3), +\&\fBSSL_clear\fR\|(3), \fBSSL_free\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2014\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_cert_store.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_cert_store.3 new file mode 100644 index 00000000..41d9f44a --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_cert_store.3 @@ -0,0 +1,219 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CTX_SET_CERT_STORE 3" +.TH SSL_CTX_SET_CERT_STORE 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_CTX_set_cert_store, SSL_CTX_set1_cert_store, SSL_CTX_get_cert_store \- manipulate X509 certificate verification storage +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& void SSL_CTX_set_cert_store(SSL_CTX *ctx, X509_STORE *store); +\& void SSL_CTX_set1_cert_store(SSL_CTX *ctx, X509_STORE *store); +\& X509_STORE *SSL_CTX_get_cert_store(const SSL_CTX *ctx); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_CTX_set_cert_store()\fR sets/replaces the certificate verification storage +of \fBctx\fR to/with \fBstore\fR. If another X509_STORE object is currently +set in \fBctx\fR, it will be \fBX509_STORE_free()\fRed. +.PP +\&\fBSSL_CTX_set1_cert_store()\fR sets/replaces the certificate verification storage +of \fBctx\fR to/with \fBstore\fR. The \fBstore\fR's reference count is incremented. +If another X509_STORE object is currently set in \fBctx\fR, it will be \fBX509_STORE_free()\fRed. +.PP +\&\fBSSL_CTX_get_cert_store()\fR returns a pointer to the current certificate +verification storage. +.SH "NOTES" +.IX Header "NOTES" +In order to verify the certificates presented by the peer, trusted \s-1CA\s0 +certificates must be accessed. These \s-1CA\s0 certificates are made available +via lookup methods, handled inside the X509_STORE. From the X509_STORE +the X509_STORE_CTX used when verifying certificates is created. +.PP +Typically the trusted certificate store is handled indirectly via using +\&\fBSSL_CTX_load_verify_locations\fR\|(3). +Using the \fBSSL_CTX_set_cert_store()\fR and \fBSSL_CTX_get_cert_store()\fR functions +it is possible to manipulate the X509_STORE object beyond the +\&\fBSSL_CTX_load_verify_locations\fR\|(3) +call. +.PP +Currently no detailed documentation on how to use the X509_STORE +object is available. Not all members of the X509_STORE are used when +the verification takes place. So will e.g. the \fBverify_callback()\fR be +overridden with the \fBverify_callback()\fR set via the +\&\fBSSL_CTX_set_verify\fR\|(3) family of functions. +This document must therefore be updated when documentation about the +X509_STORE object and its handling becomes available. +.PP +\&\fBSSL_CTX_set_cert_store()\fR does not increment the \fBstore\fR's reference +count, so it should not be used to assign an X509_STORE that is owned +by another \s-1SSL_CTX.\s0 +.PP +To share X509_STOREs between two SSL_CTXs, use \fBSSL_CTX_get_cert_store()\fR +to get the X509_STORE from the first \s-1SSL_CTX,\s0 and then use +\&\fBSSL_CTX_set1_cert_store()\fR to assign to the second \s-1SSL_CTX\s0 and +increment the reference count of the X509_STORE. +.SH "RESTRICTIONS" +.IX Header "RESTRICTIONS" +The X509_STORE structure used by an \s-1SSL_CTX\s0 is used for verifying peer +certificates and building certificate chains, it is also shared by +every child \s-1SSL\s0 structure. Applications wanting finer control can use +functions such as \fBSSL_CTX_set1_verify_cert_store()\fR instead. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_CTX_set_cert_store()\fR does not return diagnostic output. +.PP +\&\fBSSL_CTX_set1_cert_store()\fR does not return diagnostic output. +.PP +\&\fBSSL_CTX_get_cert_store()\fR returns the current setting. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), +\&\fBSSL_CTX_load_verify_locations\fR\|(3), +\&\fBSSL_CTX_set_verify\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2001\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_cert_verify_callback.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_cert_verify_callback.3 new file mode 100644 index 00000000..77386a6a --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_cert_verify_callback.3 @@ -0,0 +1,209 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CTX_SET_CERT_VERIFY_CALLBACK 3" +.TH SSL_CTX_SET_CERT_VERIFY_CALLBACK 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_CTX_set_cert_verify_callback \- set peer certificate verification procedure +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& void SSL_CTX_set_cert_verify_callback(SSL_CTX *ctx, +\& int (*callback)(X509_STORE_CTX *, void *), +\& void *arg); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_CTX_set_cert_verify_callback()\fR sets the verification callback function for +\&\fIctx\fR. \s-1SSL\s0 objects that are created from \fIctx\fR inherit the setting valid at +the time when \fBSSL_new\fR\|(3) is called. +.SH "NOTES" +.IX Header "NOTES" +Whenever a certificate is verified during a \s-1SSL/TLS\s0 handshake, a verification +function is called. If the application does not explicitly specify a +verification callback function, the built-in verification function is used. +If a verification callback \fIcallback\fR is specified via +\&\fBSSL_CTX_set_cert_verify_callback()\fR, the supplied callback function is called +instead. By setting \fIcallback\fR to \s-1NULL,\s0 the default behaviour is restored. +.PP +When the verification must be performed, \fIcallback\fR will be called with +the arguments callback(X509_STORE_CTX *x509_store_ctx, void *arg). The +argument \fIarg\fR is specified by the application when setting \fIcallback\fR. +.PP +\&\fIcallback\fR should return 1 to indicate verification success and 0 to +indicate verification failure. If \s-1SSL_VERIFY_PEER\s0 is set and \fIcallback\fR +returns 0, the handshake will fail. As the verification procedure may +allow the connection to continue in the case of failure (by always +returning 1) the verification result must be set in any case using the +\&\fBerror\fR member of \fIx509_store_ctx\fR so that the calling application +will be informed about the detailed result of the verification procedure! +.PP +Within \fIx509_store_ctx\fR, \fIcallback\fR has access to the \fIverify_callback\fR +function set using \fBSSL_CTX_set_verify\fR\|(3). +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_CTX_set_cert_verify_callback()\fR does not return a value. +.SH "WARNINGS" +.IX Header "WARNINGS" +Do not mix the verification callback described in this function with the +\&\fBverify_callback\fR function called during the verification process. The +latter is set using the \fBSSL_CTX_set_verify\fR\|(3) +family of functions. +.PP +Providing a complete verification procedure including certificate purpose +settings etc is a complex task. The built-in procedure is quite powerful +and in most cases it should be sufficient to modify its behaviour using +the \fBverify_callback\fR function. +.SH "BUGS" +.IX Header "BUGS" +\&\fBSSL_CTX_set_cert_verify_callback()\fR does not provide diagnostic information. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), \fBSSL_CTX_set_verify\fR\|(3), +\&\fBSSL_get_verify_result\fR\|(3), +\&\fBSSL_CTX_load_verify_locations\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2001\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_cipher_list.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_cipher_list.3 new file mode 100644 index 00000000..bb4965c5 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_cipher_list.3 @@ -0,0 +1,237 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CTX_SET_CIPHER_LIST 3" +.TH SSL_CTX_SET_CIPHER_LIST 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_CTX_set_cipher_list, SSL_set_cipher_list, SSL_CTX_set_ciphersuites, SSL_set_ciphersuites \&\- choose list of available SSL_CIPHERs +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int SSL_CTX_set_cipher_list(SSL_CTX *ctx, const char *str); +\& int SSL_set_cipher_list(SSL *ssl, const char *str); +\& +\& int SSL_CTX_set_ciphersuites(SSL_CTX *ctx, const char *str); +\& int SSL_set_ciphersuites(SSL *s, const char *str); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_CTX_set_cipher_list()\fR sets the list of available ciphers (TLSv1.2 and below) +for \fBctx\fR using the control string \fBstr\fR. The format of the string is described +in \fBciphers\fR\|(1). The list of ciphers is inherited by all +\&\fBssl\fR objects created from \fBctx\fR. This function does not impact TLSv1.3 +ciphersuites. Use \fBSSL_CTX_set_ciphersuites()\fR to configure those. +.PP +\&\fBSSL_set_cipher_list()\fR sets the list of ciphers (TLSv1.2 and below) only for +\&\fBssl\fR. +.PP +\&\fBSSL_CTX_set_ciphersuites()\fR is used to configure the available TLSv1.3 +ciphersuites for \fBctx\fR. This is a simple colon (\*(L":\*(R") separated list of TLSv1.3 +ciphersuite names in order of preference. Valid TLSv1.3 ciphersuite names are: +.IP "\s-1TLS_AES_128_GCM_SHA256\s0" 4 +.IX Item "TLS_AES_128_GCM_SHA256" +.PD 0 +.IP "\s-1TLS_AES_256_GCM_SHA384\s0" 4 +.IX Item "TLS_AES_256_GCM_SHA384" +.IP "\s-1TLS_CHACHA20_POLY1305_SHA256\s0" 4 +.IX Item "TLS_CHACHA20_POLY1305_SHA256" +.IP "\s-1TLS_AES_128_CCM_SHA256\s0" 4 +.IX Item "TLS_AES_128_CCM_SHA256" +.IP "\s-1TLS_AES_128_CCM_8_SHA256\s0" 4 +.IX Item "TLS_AES_128_CCM_8_SHA256" +.PD +.PP +An empty list is permissible. The default value for the this setting is: +.PP +\&\*(L"\s-1TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256\*(R"\s0 +.PP +\&\fBSSL_set_ciphersuites()\fR is the same as \fBSSL_CTX_set_ciphersuites()\fR except it +configures the ciphersuites for \fBssl\fR. +.SH "NOTES" +.IX Header "NOTES" +The control string \fBstr\fR for \fBSSL_CTX_set_cipher_list()\fR and +\&\fBSSL_set_cipher_list()\fR should be universally usable and not depend +on details of the library configuration (ciphers compiled in). Thus no +syntax checking takes place. Items that are not recognized, because the +corresponding ciphers are not compiled in or because they are mistyped, +are simply ignored. Failure is only flagged if no ciphers could be collected +at all. +.PP +It should be noted, that inclusion of a cipher to be used into the list is +a necessary condition. On the client side, the inclusion into the list is +also sufficient unless the security level excludes it. On the server side, +additional restrictions apply. All ciphers have additional requirements. +\&\s-1ADH\s0 ciphers don't need a certificate, but DH-parameters must have been set. +All other ciphers need a corresponding certificate and key. +.PP +A \s-1RSA\s0 cipher can only be chosen, when a \s-1RSA\s0 certificate is available. +\&\s-1RSA\s0 ciphers using \s-1DHE\s0 need a certificate and key and additional DH-parameters +(see \fBSSL_CTX_set_tmp_dh_callback\fR\|(3)). +.PP +A \s-1DSA\s0 cipher can only be chosen, when a \s-1DSA\s0 certificate is available. +\&\s-1DSA\s0 ciphers always use \s-1DH\s0 key exchange and therefore need DH-parameters +(see \fBSSL_CTX_set_tmp_dh_callback\fR\|(3)). +.PP +When these conditions are not met for any cipher in the list (e.g. a +client only supports export \s-1RSA\s0 ciphers with an asymmetric key length +of 512 bits and the server is not configured to use temporary \s-1RSA\s0 +keys), the \*(L"no shared cipher\*(R" (\s-1SSL_R_NO_SHARED_CIPHER\s0) error is generated +and the handshake will fail. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_CTX_set_cipher_list()\fR and \fBSSL_set_cipher_list()\fR return 1 if any cipher +could be selected and 0 on complete failure. +.PP +\&\fBSSL_CTX_set_ciphersuites()\fR and \fBSSL_set_ciphersuites()\fR return 1 if the requested +ciphersuite list was configured, and 0 otherwise. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), \fBSSL_get_ciphers\fR\|(3), +\&\fBSSL_CTX_use_certificate\fR\|(3), +\&\fBSSL_CTX_set_tmp_dh_callback\fR\|(3), +\&\fBciphers\fR\|(1) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_client_cert_cb.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_client_cert_cb.3 new file mode 100644 index 00000000..e565dc6d --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_client_cert_cb.3 @@ -0,0 +1,241 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CTX_SET_CLIENT_CERT_CB 3" +.TH SSL_CTX_SET_CLIENT_CERT_CB 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_CTX_set_client_cert_cb, SSL_CTX_get_client_cert_cb \- handle client certificate callback function +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& void SSL_CTX_set_client_cert_cb(SSL_CTX *ctx, +\& int (*client_cert_cb)(SSL *ssl, X509 **x509, +\& EVP_PKEY **pkey)); +\& int (*SSL_CTX_get_client_cert_cb(SSL_CTX *ctx))(SSL *ssl, X509 **x509, +\& EVP_PKEY **pkey); +\& int (*client_cert_cb)(SSL *ssl, X509 **x509, EVP_PKEY **pkey); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_CTX_set_client_cert_cb()\fR sets the \fBclient_cert_cb()\fR callback, that is +called when a client certificate is requested by a server and no certificate +was yet set for the \s-1SSL\s0 object. +.PP +When \fBclient_cert_cb()\fR is \s-1NULL,\s0 no callback function is used. +.PP +\&\fBSSL_CTX_get_client_cert_cb()\fR returns a pointer to the currently set callback +function. +.PP +\&\fBclient_cert_cb()\fR is the application defined callback. If it wants to +set a certificate, a certificate/private key combination must be set +using the \fBx509\fR and \fBpkey\fR arguments and \*(L"1\*(R" must be returned. The +certificate will be installed into \fBssl\fR, see the \s-1NOTES\s0 and \s-1BUGS\s0 sections. +If no certificate should be set, \*(L"0\*(R" has to be returned and no certificate +will be sent. A negative return value will suspend the handshake and the +handshake function will return immediately. \fBSSL_get_error\fR\|(3) +will return \s-1SSL_ERROR_WANT_X509_LOOKUP\s0 to indicate, that the handshake was +suspended. The next call to the handshake function will again lead to the call +of \fBclient_cert_cb()\fR. It is the job of the \fBclient_cert_cb()\fR to store information +about the state of the last call, if required to continue. +.SH "NOTES" +.IX Header "NOTES" +During a handshake (or renegotiation) a server may request a certificate +from the client. A client certificate must only be sent, when the server +did send the request. +.PP +When a certificate was set using the +\&\fBSSL_CTX_use_certificate\fR\|(3) family of functions, +it will be sent to the server. The \s-1TLS\s0 standard requires that only a +certificate is sent, if it matches the list of acceptable CAs sent by the +server. This constraint is violated by the default behavior of the OpenSSL +library. Using the callback function it is possible to implement a proper +selection routine or to allow a user interaction to choose the certificate to +be sent. +.PP +If a callback function is defined and no certificate was yet defined for the +\&\s-1SSL\s0 object, the callback function will be called. +If the callback function returns a certificate, the OpenSSL library +will try to load the private key and certificate data into the \s-1SSL\s0 +object using the \fBSSL_use_certificate()\fR and \fBSSL_use_private_key()\fR functions. +Thus it will permanently install the certificate and key for this \s-1SSL\s0 +object. It will not be reset by calling \fBSSL_clear\fR\|(3). +If the callback returns no certificate, the OpenSSL library will not send +a certificate. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_CTX_get_client_cert_cb()\fR returns function pointer of \fBclient_cert_cb()\fR or +\&\s-1NULL\s0 if the callback is not set. +.SH "BUGS" +.IX Header "BUGS" +The \fBclient_cert_cb()\fR cannot return a complete certificate chain, it can +only return one client certificate. If the chain only has a length of 2, +the root \s-1CA\s0 certificate may be omitted according to the \s-1TLS\s0 standard and +thus a standard conforming answer can be sent to the server. For a +longer chain, the client must send the complete chain (with the option +to leave out the root \s-1CA\s0 certificate). This can only be accomplished by +either adding the intermediate \s-1CA\s0 certificates into the trusted +certificate store for the \s-1SSL_CTX\s0 object (resulting in having to add +\&\s-1CA\s0 certificates that otherwise maybe would not be trusted), or by adding +the chain certificates using the +\&\fBSSL_CTX_add_extra_chain_cert\fR\|(3) +function, which is only available for the \s-1SSL_CTX\s0 object as a whole and that +therefore probably can only apply for one client certificate, making +the concept of the callback function (to allow the choice from several +certificates) questionable. +.PP +Once the \s-1SSL\s0 object has been used in conjunction with the callback function, +the certificate will be set for the \s-1SSL\s0 object and will not be cleared +even when \fBSSL_clear\fR\|(3) is being called. It is therefore +mandatory to destroy the \s-1SSL\s0 object using \fBSSL_free\fR\|(3) +and create a new one to return to the previous state. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), \fBSSL_CTX_use_certificate\fR\|(3), +\&\fBSSL_CTX_add_extra_chain_cert\fR\|(3), +\&\fBSSL_get_client_CA_list\fR\|(3), +\&\fBSSL_clear\fR\|(3), \fBSSL_free\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2002\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_client_hello_cb.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_client_hello_cb.3 new file mode 100644 index 00000000..0ed9b053 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_client_hello_cb.3 @@ -0,0 +1,262 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CTX_SET_CLIENT_HELLO_CB 3" +.TH SSL_CTX_SET_CLIENT_HELLO_CB 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_CTX_set_client_hello_cb, SSL_client_hello_cb_fn, SSL_client_hello_isv2, SSL_client_hello_get0_legacy_version, SSL_client_hello_get0_random, SSL_client_hello_get0_session_id, SSL_client_hello_get0_ciphers, SSL_client_hello_get0_compression_methods, SSL_client_hello_get1_extensions_present, SSL_client_hello_get0_ext \- callback functions for early server\-side ClientHello processing +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 10 +\& typedef int (*SSL_client_hello_cb_fn)(SSL *s, int *al, void *arg); +\& void SSL_CTX_set_client_hello_cb(SSL_CTX *c, SSL_client_hello_cb_fn *f, +\& void *arg); +\& int SSL_client_hello_isv2(SSL *s); +\& unsigned int SSL_client_hello_get0_legacy_version(SSL *s); +\& size_t SSL_client_hello_get0_random(SSL *s, const unsigned char **out); +\& size_t SSL_client_hello_get0_session_id(SSL *s, const unsigned char **out); +\& size_t SSL_client_hello_get0_ciphers(SSL *s, const unsigned char **out); +\& size_t SSL_client_hello_get0_compression_methods(SSL *s, +\& const unsigned char **out); +\& int SSL_client_hello_get1_extensions_present(SSL *s, int **out, +\& size_t *outlen); +\& int SSL_client_hello_get0_ext(SSL *s, int type, const unsigned char **out, +\& size_t *outlen); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_CTX_set_client_hello_cb()\fR sets the callback function, which is automatically +called during the early stages of ClientHello processing on the server. +The argument supplied when setting the callback is passed back to the +callback at runtime. A callback that returns failure (0) will cause the +connection to terminate, and callbacks returning failure should indicate +what alert value is to be sent in the \fBal\fR parameter. A callback may +also return a negative value to suspend the handshake, and the handshake +function will return immediately. \fBSSL_get_error\fR\|(3) will return +\&\s-1SSL_ERROR_WANT_CLIENT_HELLO_CB\s0 to indicate that the handshake was suspended. +It is the job of the ClientHello callback to store information about the state +of the last call if needed to continue. On the next call into the handshake +function, the ClientHello callback will be called again, and, if it returns +success, normal handshake processing will continue from that point. +.PP +\&\fBSSL_client_hello_isv2()\fR indicates whether the ClientHello was carried in a +SSLv2 record and is in the SSLv2 format. The SSLv2 format has substantial +differences from the normal SSLv3 format, including using three bytes per +cipher suite, and not allowing extensions. Additionally, the SSLv2 format +\&'challenge' field is exposed via \fBSSL_client_hello_get0_random()\fR, padded to +\&\s-1SSL3_RANDOM_SIZE\s0 bytes with zeros if needed. For SSLv2 format ClientHellos, +\&\fBSSL_client_hello_get0_compression_methods()\fR returns a dummy list that only includes +the null compression method, since the SSLv2 format does not include a +mechanism by which to negotiate compression. +.PP +\&\fBSSL_client_hello_get0_random()\fR, \fBSSL_client_hello_get0_session_id()\fR, +\&\fBSSL_client_hello_get0_ciphers()\fR, and +\&\fBSSL_client_hello_get0_compression_methods()\fR provide access to the corresponding +ClientHello fields, returning the field length and optionally setting an out +pointer to the octets of that field. +.PP +Similarly, \fBSSL_client_hello_get0_ext()\fR provides access to individual extensions +from the ClientHello on a per-extension basis. For the provided wire +protocol extension type value, the extension value and length are returned +in the output parameters (if present). +.PP +\&\fBSSL_client_hello_get1_extensions_present()\fR can be used prior to +\&\fBSSL_client_hello_get0_ext()\fR, to determine which extensions are present in the +ClientHello before querying for them. The \fBout\fR and \fBoutlen\fR parameters are +both required, and on success the caller must release the storage allocated for +\&\fB*out\fR using \fBOPENSSL_free()\fR. The contents of \fB*out\fR is an array of integers +holding the numerical value of the \s-1TLS\s0 extension types in the order they appear +in the ClientHello. \fB*outlen\fR contains the number of elements in the array. +In situations when the ClientHello has no extensions, the function will return +success with \fB*out\fR set to \s-1NULL\s0 and \fB*outlen\fR set to 0. +.SH "NOTES" +.IX Header "NOTES" +The ClientHello callback provides a vast window of possibilities for application +code to affect the \s-1TLS\s0 handshake. A primary use of the callback is to +allow the server to examine the server name indication extension provided +by the client in order to select an appropriate certificate to present, +and make other configuration adjustments relevant to that server name +and its configuration. Such configuration changes can include swapping out +the associated \s-1SSL_CTX\s0 pointer, modifying the server's list of permitted \s-1TLS\s0 +versions, changing the server's cipher list in response to the client's +cipher list, etc. +.PP +It is also recommended that applications utilize a ClientHello callback and +not use a servername callback, in order to avoid unexpected behavior that +occurs due to the relative order of processing between things like session +resumption and the historical servername callback. +.PP +The SSL_client_hello_* family of functions may only be called from code executing +within a ClientHello callback. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +The application's supplied ClientHello callback returns +\&\s-1SSL_CLIENT_HELLO_SUCCESS\s0 on success, \s-1SSL_CLIENT_HELLO_ERROR\s0 on failure, and +\&\s-1SSL_CLIENT_HELLO_RETRY\s0 to suspend processing. +.PP +\&\fBSSL_client_hello_isv2()\fR returns 1 for SSLv2\-format ClientHellos and 0 otherwise. +.PP +\&\fBSSL_client_hello_get0_random()\fR, \fBSSL_client_hello_get0_session_id()\fR, +\&\fBSSL_client_hello_get0_ciphers()\fR, and +\&\fBSSL_client_hello_get0_compression_methods()\fR return the length of the +corresponding ClientHello fields. If zero is returned, the output pointer +should not be assumed to be valid. +.PP +\&\fBSSL_client_hello_get0_ext()\fR returns 1 if the extension of type 'type' is present, and +0 otherwise. +.PP +\&\fBSSL_client_hello_get1_extensions_present()\fR returns 1 on success and 0 on failure. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), \fBSSL_CTX_set_tlsext_servername_callback\fR\|(3), +SSL_bytes_to_cipher_list +.SH "HISTORY" +.IX Header "HISTORY" +The \s-1SSL\s0 ClientHello callback, \fBSSL_client_hello_isv2()\fR, +\&\fBSSL_client_hello_get0_random()\fR, \fBSSL_client_hello_get0_session_id()\fR, +\&\fBSSL_client_hello_get0_ciphers()\fR, \fBSSL_client_hello_get0_compression_methods()\fR, +\&\fBSSL_client_hello_get0_ext()\fR, and \fBSSL_client_hello_get1_extensions_present()\fR +were added in OpenSSL 1.1.1. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_ct_validation_callback.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_ct_validation_callback.3 new file mode 100644 index 00000000..0a0e84e6 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_ct_validation_callback.3 @@ -0,0 +1,271 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CTX_SET_CT_VALIDATION_CALLBACK 3" +.TH SSL_CTX_SET_CT_VALIDATION_CALLBACK 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +ssl_ct_validation_cb, SSL_enable_ct, SSL_CTX_enable_ct, SSL_disable_ct, SSL_CTX_disable_ct, SSL_set_ct_validation_callback, SSL_CTX_set_ct_validation_callback, SSL_ct_is_enabled, SSL_CTX_ct_is_enabled \- control Certificate Transparency policy +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& typedef int (*ssl_ct_validation_cb)(const CT_POLICY_EVAL_CTX *ctx, +\& const STACK_OF(SCT) *scts, void *arg); +\& +\& int SSL_enable_ct(SSL *s, int validation_mode); +\& int SSL_CTX_enable_ct(SSL_CTX *ctx, int validation_mode); +\& int SSL_set_ct_validation_callback(SSL *s, ssl_ct_validation_cb callback, +\& void *arg); +\& int SSL_CTX_set_ct_validation_callback(SSL_CTX *ctx, +\& ssl_ct_validation_cb callback, +\& void *arg); +\& void SSL_disable_ct(SSL *s); +\& void SSL_CTX_disable_ct(SSL_CTX *ctx); +\& int SSL_ct_is_enabled(const SSL *s); +\& int SSL_CTX_ct_is_enabled(const SSL_CTX *ctx); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_enable_ct()\fR and \fBSSL_CTX_enable_ct()\fR enable the processing of signed +certificate timestamps (SCTs) either for a given \s-1SSL\s0 connection or for all +connections that share the given \s-1SSL\s0 context, respectively. +This is accomplished by setting a built-in \s-1CT\s0 validation callback. +The behaviour of the callback is determined by the \fBvalidation_mode\fR argument, +which can be either of \fB\s-1SSL_CT_VALIDATION_PERMISSIVE\s0\fR or +\&\fB\s-1SSL_CT_VALIDATION_STRICT\s0\fR as described below. +.PP +If \fBvalidation_mode\fR is equal to \fB\s-1SSL_CT_VALIDATION_STRICT\s0\fR, then in a full +\&\s-1TLS\s0 handshake with the verification mode set to \fB\s-1SSL_VERIFY_PEER\s0\fR, if the peer +presents no valid SCTs the handshake will be aborted. +If the verification mode is \fB\s-1SSL_VERIFY_NONE\s0\fR, the handshake will continue +despite lack of valid SCTs. +However, in that case if the verification status before the built-in callback +was \fBX509_V_OK\fR it will be set to \fBX509_V_ERR_NO_VALID_SCTS\fR after the +callback. +Applications can call \fBSSL_get_verify_result\fR\|(3) to check the status at +handshake completion, even after session resumption since the verification +status is part of the saved session state. +See \fBSSL_set_verify\fR\|(3), <\fBSSL_get_verify_result\fR\|(3)>, \fBSSL_session_reused\fR\|(3). +.PP +If \fBvalidation_mode\fR is equal to \fB\s-1SSL_CT_VALIDATION_PERMISSIVE\s0\fR, then the +handshake continues, and the verification status is not modified, regardless of +the validation status of any SCTs. +The application can still inspect the validation status of the SCTs at +handshake completion. +Note that with session resumption there will not be any SCTs presented during +the handshake. +Therefore, in applications that delay \s-1SCT\s0 policy enforcement until after +handshake completion, such delayed \s-1SCT\s0 checks should only be performed when the +session is not resumed. +.PP +\&\fBSSL_set_ct_validation_callback()\fR and \fBSSL_CTX_set_ct_validation_callback()\fR +register a custom callback that may implement a different policy than either of +the above. +This callback can examine the peer's SCTs and determine whether they are +sufficient to allow the connection to continue. +The \s-1TLS\s0 handshake is aborted if the verification mode is not \fB\s-1SSL_VERIFY_NONE\s0\fR +and the callback returns a non-positive result. +.PP +An arbitrary callback context argument, \fBarg\fR, can be passed in when setting +the callback. +This will be passed to the callback whenever it is invoked. +Ownership of this context remains with the caller. +.PP +If no callback is set, SCTs will not be requested and Certificate Transparency +validation will not occur. +.PP +No callback will be invoked when the peer presents no certificate, e.g. by +employing an anonymous (aNULL) cipher suite. +In that case the handshake continues as it would had no callback been +requested. +Callbacks are also not invoked when the peer certificate chain is invalid or +validated via \s-1\fBDANE\-TA\s0\fR\|(2) or \s-1\fBDANE\-EE\s0\fR\|(3) \s-1TLSA\s0 records which use a private X.509 +\&\s-1PKI,\s0 or no X.509 \s-1PKI\s0 at all, respectively. +Clients that require SCTs are expected to not have enabled any aNULL ciphers +nor to have specified server verification via \s-1\fBDANE\-TA\s0\fR\|(2) or \s-1\fBDANE\-EE\s0\fR\|(3) \s-1TLSA\s0 +records. +.PP +\&\fBSSL_disable_ct()\fR and \fBSSL_CTX_disable_ct()\fR turn off \s-1CT\s0 processing, whether +enabled via the built-in or the custom callbacks, by setting a \s-1NULL\s0 callback. +These may be implemented as macros. +.PP +\&\fBSSL_ct_is_enabled()\fR and \fBSSL_CTX_ct_is_enabled()\fR return 1 if \s-1CT\s0 processing is +enabled via either \fBSSL_enable_ct()\fR or a non-null custom callback, and 0 +otherwise. +.SH "NOTES" +.IX Header "NOTES" +When \s-1SCT\s0 processing is enabled, \s-1OCSP\s0 stapling will be enabled. This is because +one possible source of SCTs is the \s-1OCSP\s0 response from a server. +.PP +The time returned by \fBSSL_SESSION_get_time()\fR will be used to evaluate whether any +presented SCTs have timestamps that are in the future (and therefore invalid). +.SH "RESTRICTIONS" +.IX Header "RESTRICTIONS" +Certificate Transparency validation cannot be enabled and so a callback cannot +be set if a custom client extension handler has been registered to handle \s-1SCT\s0 +extensions (\fBTLSEXT_TYPE_signed_certificate_timestamp\fR). +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_enable_ct()\fR, \fBSSL_CTX_enable_ct()\fR, \fBSSL_CTX_set_ct_validation_callback()\fR and +\&\fBSSL_set_ct_validation_callback()\fR return 1 if the \fBcallback\fR is successfully +set. +They return 0 if an error occurs, e.g. a custom client extension handler has +been setup to handle SCTs. +.PP +\&\fBSSL_disable_ct()\fR and \fBSSL_CTX_disable_ct()\fR do not return a result. +.PP +\&\fBSSL_CTX_ct_is_enabled()\fR and \fBSSL_ct_is_enabled()\fR return a 1 if a non-null \s-1CT\s0 +validation callback is set, or 0 if no callback (or equivalently a \s-1NULL\s0 +callback) is set. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), +<\fBSSL_get_verify_result\fR\|(3)>, +\&\fBSSL_session_reused\fR\|(3), +\&\fBSSL_set_verify\fR\|(3), +\&\fBSSL_CTX_set_verify\fR\|(3), +\&\fBSSL_SESSION_get_time\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2016\-2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_ctlog_list_file.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_ctlog_list_file.3 new file mode 100644 index 00000000..1944734b --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_ctlog_list_file.3 @@ -0,0 +1,183 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CTX_SET_CTLOG_LIST_FILE 3" +.TH SSL_CTX_SET_CTLOG_LIST_FILE 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_CTX_set_default_ctlog_list_file, SSL_CTX_set_ctlog_list_file \- load a Certificate Transparency log list from a file +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int SSL_CTX_set_default_ctlog_list_file(SSL_CTX *ctx); +\& int SSL_CTX_set_ctlog_list_file(SSL_CTX *ctx, const char *path); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_CTX_set_default_ctlog_list_file()\fR loads a list of Certificate Transparency +(\s-1CT\s0) logs from the default file location, \*(L"ct_log_list.cnf\*(R", found in the +directory where OpenSSL is installed. +.PP +\&\fBSSL_CTX_set_ctlog_list_file()\fR loads a list of \s-1CT\s0 logs from a specific path. +See \fBCTLOG_STORE_new\fR\|(3) for the file format. +.SH "NOTES" +.IX Header "NOTES" +These functions will not clear the existing \s-1CT\s0 log list \- it will be appended +to. To replace the existing list, use SSL_CTX_set0_ctlog_store first. +.PP +If an error occurs whilst parsing a particular log entry in the file, that log +entry will be skipped. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_CTX_set_default_ctlog_list_file()\fR and \fBSSL_CTX_set_ctlog_list_file()\fR +return 1 if the log list is successfully loaded, and 0 if an error occurs. In +the case of an error, the log list may have been partially loaded. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), +\&\fBSSL_CTX_set_ct_validation_callback\fR\|(3), +\&\fBCTLOG_STORE_new\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2016\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_default_passwd_cb.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_default_passwd_cb.3 new file mode 100644 index 00000000..647e80b1 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_default_passwd_cb.3 @@ -0,0 +1,240 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CTX_SET_DEFAULT_PASSWD_CB 3" +.TH SSL_CTX_SET_DEFAULT_PASSWD_CB 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_CTX_set_default_passwd_cb, SSL_CTX_set_default_passwd_cb_userdata, SSL_CTX_get_default_passwd_cb, SSL_CTX_get_default_passwd_cb_userdata, SSL_set_default_passwd_cb, SSL_set_default_passwd_cb_userdata, SSL_get_default_passwd_cb, SSL_get_default_passwd_cb_userdata \- set or get passwd callback for encrypted PEM file handling +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& void SSL_CTX_set_default_passwd_cb(SSL_CTX *ctx, pem_password_cb *cb); +\& void SSL_CTX_set_default_passwd_cb_userdata(SSL_CTX *ctx, void *u); +\& pem_password_cb *SSL_CTX_get_default_passwd_cb(SSL_CTX *ctx); +\& void *SSL_CTX_get_default_passwd_cb_userdata(SSL_CTX *ctx); +\& +\& void SSL_set_default_passwd_cb(SSL *s, pem_password_cb *cb); +\& void SSL_set_default_passwd_cb_userdata(SSL *s, void *u); +\& pem_password_cb *SSL_get_default_passwd_cb(SSL *s); +\& void *SSL_get_default_passwd_cb_userdata(SSL *s); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_CTX_set_default_passwd_cb()\fR sets the default password callback called +when loading/storing a \s-1PEM\s0 certificate with encryption. +.PP +\&\fBSSL_CTX_set_default_passwd_cb_userdata()\fR sets a pointer to userdata, \fBu\fR, +which will be provided to the password callback on invocation. +.PP +\&\fBSSL_CTX_get_default_passwd_cb()\fR returns a function pointer to the password +callback currently set in \fBctx\fR. If no callback was explicitly set, the +\&\s-1NULL\s0 pointer is returned. +.PP +\&\fBSSL_CTX_get_default_passwd_cb_userdata()\fR returns a pointer to the userdata +currently set in \fBctx\fR. If no userdata was explicitly set, the \s-1NULL\s0 pointer +is returned. +.PP +\&\fBSSL_set_default_passwd_cb()\fR, \fBSSL_set_default_passwd_cb_userdata()\fR, +\&\fBSSL_get_default_passwd_cb()\fR and \fBSSL_get_default_passwd_cb_userdata()\fR perform +the same function as their \s-1SSL_CTX\s0 counterparts, but using an \s-1SSL\s0 object. +.PP +The password callback, which must be provided by the application, hands back the +password to be used during decryption. +On invocation a pointer to userdata +is provided. The function must store the password into the provided buffer +\&\fBbuf\fR which is of size \fBsize\fR. The actual length of the password must +be returned to the calling function. \fBrwflag\fR indicates whether the +callback is used for reading/decryption (rwflag=0) or writing/encryption +(rwflag=1). +For more details, see \fBpem_password_cb\fR\|(3). +.SH "NOTES" +.IX Header "NOTES" +When loading or storing private keys, a password might be supplied to +protect the private key. The way this password can be supplied may depend +on the application. If only one private key is handled, it can be practical +to have the callback handle the password dialog interactively. If several +keys have to be handled, it can be practical to ask for the password once, +then keep it in memory and use it several times. In the last case, the +password could be stored into the userdata storage and the +callback only returns the password already stored. +.PP +When asking for the password interactively, the callback can use +\&\fBrwflag\fR to check, whether an item shall be encrypted (rwflag=1). +In this case the password dialog may ask for the same password twice +for comparison in order to catch typos, that would make decryption +impossible. +.PP +Other items in \s-1PEM\s0 formatting (certificates) can also be encrypted, it is +however not usual, as certificate information is considered public. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +These functions do not provide diagnostic information. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +The following example returns the password provided as userdata to the +calling function. The password is considered to be a '\e0' terminated +string. If the password does not fit into the buffer, the password is +truncated. +.PP +.Vb 6 +\& int my_cb(char *buf, int size, int rwflag, void *u) +\& { +\& strncpy(buf, (char *)u, size); +\& buf[size \- 1] = \*(Aq\e0\*(Aq; +\& return strlen(buf); +\& } +.Ve +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), +\&\fBSSL_CTX_use_certificate\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +\&\fBSSL_CTX_get_default_passwd_cb()\fR, \fBSSL_CTX_get_default_passwd_cb_userdata()\fR, +\&\fBSSL_set_default_passwd_cb()\fR and \fBSSL_set_default_passwd_cb_userdata()\fR were +added in OpenSSL 1.1.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_ex_data.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_ex_data.3 new file mode 100644 index 00000000..cc82b5b2 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_ex_data.3 @@ -0,0 +1,182 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CTX_SET_EX_DATA 3" +.TH SSL_CTX_SET_EX_DATA 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_CTX_get_ex_data, SSL_CTX_set_ex_data, SSL_get_ex_data, SSL_set_ex_data \&\- Store and retrieve extra data from the SSL_CTX, SSL or SSL_SESSION +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& void *SSL_CTX_get_ex_data(const SSL_CTX *s, int idx); +\& +\& int SSL_CTX_set_ex_data(SSL_CTX *s, int idx, void *arg); +\& +\& void *SSL_get_ex_data(const SSL *s, int idx); +\& +\& int SSL_set_ex_data(SSL *s, int idx, void *arg); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +SSL*\fB_set_ex_data()\fR functions can be used to store arbitrary user data into the +\&\fB\s-1SSL_CTX\s0\fR, or \fB\s-1SSL\s0\fR object. The user must supply a unique index +which they can subsequently use to retrieve the data using SSL*\fB_get_ex_data()\fR. +.PP +For more detailed information see \fBCRYPTO_get_ex_data\fR\|(3) and +\&\fBCRYPTO_set_ex_data\fR\|(3) which implement these functions and +\&\fBCRYPTO_get_ex_new_index\fR\|(3) for generating a unique index. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +The SSL*\fB_set_ex_data()\fR functions return 1 if the item is successfully stored +and 0 if it is not. +The SSL*\fB_get_ex_data()\fR functions return the ex_data pointer if successful, +otherwise \s-1NULL.\s0 +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBCRYPTO_get_ex_data\fR\|(3), \fBCRYPTO_set_ex_data\fR\|(3), +\&\fBCRYPTO_get_ex_new_index\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_generate_session_id.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_generate_session_id.3 new file mode 100644 index 00000000..def1175e --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_generate_session_id.3 @@ -0,0 +1,267 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CTX_SET_GENERATE_SESSION_ID 3" +.TH SSL_CTX_SET_GENERATE_SESSION_ID 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_CTX_set_generate_session_id, SSL_set_generate_session_id, SSL_has_matching_session_id, GEN_SESSION_CB \&\- manipulate generation of SSL session IDs (server only) +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& typedef int (*GEN_SESSION_CB)(SSL *ssl, unsigned char *id, +\& unsigned int *id_len); +\& +\& int SSL_CTX_set_generate_session_id(SSL_CTX *ctx, GEN_SESSION_CB cb); +\& int SSL_set_generate_session_id(SSL *ssl, GEN_SESSION_CB, cb); +\& int SSL_has_matching_session_id(const SSL *ssl, const unsigned char *id, +\& unsigned int id_len); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_CTX_set_generate_session_id()\fR sets the callback function for generating +new session ids for \s-1SSL/TLS\s0 sessions for \fBctx\fR to be \fBcb\fR. +.PP +\&\fBSSL_set_generate_session_id()\fR sets the callback function for generating +new session ids for \s-1SSL/TLS\s0 sessions for \fBssl\fR to be \fBcb\fR. +.PP +\&\fBSSL_has_matching_session_id()\fR checks, whether a session with id \fBid\fR +(of length \fBid_len\fR) is already contained in the internal session cache +of the parent context of \fBssl\fR. +.SH "NOTES" +.IX Header "NOTES" +When a new session is established between client and server, the server +generates a session id. The session id is an arbitrary sequence of bytes. +The length of the session id is between 1 and 32 bytes. The session id is not +security critical but must be unique for the server. Additionally, the session id is +transmitted in the clear when reusing the session so it must not contain +sensitive information. +.PP +Without a callback being set, an OpenSSL server will generate a unique +session id from pseudo random numbers of the maximum possible length. +Using the callback function, the session id can be changed to contain +additional information like e.g. a host id in order to improve load balancing +or external caching techniques. +.PP +The callback function receives a pointer to the memory location to put +\&\fBid\fR into and a pointer to the maximum allowed length \fBid_len\fR. The +buffer at location \fBid\fR is only guaranteed to have the size \fBid_len\fR. +The callback is only allowed to generate a shorter id and reduce \fBid_len\fR; +the callback \fBmust never\fR increase \fBid_len\fR or write to the location +\&\fBid\fR exceeding the given limit. +.PP +The location \fBid\fR is filled with 0x00 before the callback is called, so the +callback may only fill part of the possible length and leave \fBid_len\fR +untouched while maintaining reproducibility. +.PP +Since the sessions must be distinguished, session ids must be unique. +Without the callback a random number is used, so that the probability +of generating the same session id is extremely small (2^256 for SSLv3/TLSv1). +In order to assure the uniqueness of the generated session id, the callback must call +\&\fBSSL_has_matching_session_id()\fR and generate another id if a conflict occurs. +If an id conflict is not resolved, the handshake will fail. +If the application codes e.g. a unique host id, a unique process number, and +a unique sequence number into the session id, uniqueness could easily be +achieved without randomness added (it should however be taken care that +no confidential information is leaked this way). If the application can not +guarantee uniqueness, it is recommended to use the maximum \fBid_len\fR and +fill in the bytes not used to code special information with random data +to avoid collisions. +.PP +\&\fBSSL_has_matching_session_id()\fR will only query the internal session cache, +not the external one. Since the session id is generated before the +handshake is completed, it is not immediately added to the cache. If +another thread is using the same internal session cache, a race condition +can occur in that another thread generates the same session id. +Collisions can also occur when using an external session cache, since +the external cache is not tested with \fBSSL_has_matching_session_id()\fR +and the same race condition applies. +.PP +The callback must return 0 if it cannot generate a session id for whatever +reason and return 1 on success. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_CTX_set_generate_session_id()\fR and \fBSSL_set_generate_session_id()\fR +always return 1. +.PP +\&\fBSSL_has_matching_session_id()\fR returns 1 if another session with the +same id is already in the cache. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +The callback function listed will generate a session id with the +server id given, and will fill the rest with pseudo random bytes: +.PP +.Vb 1 +\& const char session_id_prefix = "www\-18"; +\& +\& #define MAX_SESSION_ID_ATTEMPTS 10 +\& static int generate_session_id(SSL *ssl, unsigned char *id, +\& unsigned int *id_len) +\& { +\& unsigned int count = 0; +\& +\& do { +\& RAND_pseudo_bytes(id, *id_len); +\& /* +\& * 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 +\& * fail due to conflicts. +\& */ +\& memcpy(id, session_id_prefix, strlen(session_id_prefix) < *id_len ? +\& strlen(session_id_prefix) : *id_len); +\& } while (SSL_has_matching_session_id(ssl, id, *id_len) +\& && ++count < MAX_SESSION_ID_ATTEMPTS); +\& if (count >= MAX_SESSION_ID_ATTEMPTS) +\& return 0; +\& return 1; +\& } +.Ve +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), \fBSSL_get_version\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2001\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_info_callback.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_info_callback.3 new file mode 100644 index 00000000..7077198e --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_info_callback.3 @@ -0,0 +1,285 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CTX_SET_INFO_CALLBACK 3" +.TH SSL_CTX_SET_INFO_CALLBACK 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_CTX_set_info_callback, SSL_CTX_get_info_callback, SSL_set_info_callback, SSL_get_info_callback \&\- handle information callback for SSL connections +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& void SSL_CTX_set_info_callback(SSL_CTX *ctx, void (*callback)()); +\& void (*SSL_CTX_get_info_callback(const SSL_CTX *ctx))(); +\& +\& void SSL_set_info_callback(SSL *ssl, void (*callback)()); +\& void (*SSL_get_info_callback(const SSL *ssl))(); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_CTX_set_info_callback()\fR sets the \fBcallback\fR function, that can be used to +obtain state information for \s-1SSL\s0 objects created from \fBctx\fR during connection +setup and use. The setting for \fBctx\fR is overridden from the setting for +a specific \s-1SSL\s0 object, if specified. +When \fBcallback\fR is \s-1NULL,\s0 no callback function is used. +.PP +\&\fBSSL_set_info_callback()\fR sets the \fBcallback\fR function, that can be used to +obtain state information for \fBssl\fR during connection setup and use. +When \fBcallback\fR is \s-1NULL,\s0 the callback setting currently valid for +\&\fBctx\fR is used. +.PP +\&\fBSSL_CTX_get_info_callback()\fR returns a pointer to the currently set information +callback function for \fBctx\fR. +.PP +\&\fBSSL_get_info_callback()\fR returns a pointer to the currently set information +callback function for \fBssl\fR. +.SH "NOTES" +.IX Header "NOTES" +When setting up a connection and during use, it is possible to obtain state +information from the \s-1SSL/TLS\s0 engine. When set, an information callback function +is called whenever a significant event occurs such as: the state changes, +an alert appears, or an error occurs. +.PP +The callback function is called as \fBcallback(\s-1SSL\s0 *ssl, int where, int ret)\fR. +The \fBwhere\fR argument specifies information about where (in which context) +the callback function was called. If \fBret\fR is 0, an error condition occurred. +If an alert is handled, \s-1SSL_CB_ALERT\s0 is set and \fBret\fR specifies the alert +information. +.PP +\&\fBwhere\fR is a bitmask made up of the following bits: +.IP "\s-1SSL_CB_LOOP\s0" 4 +.IX Item "SSL_CB_LOOP" +Callback has been called to indicate state change or some other significant +state machine event. This may mean that the callback gets invoked more than once +per state in some situations. +.IP "\s-1SSL_CB_EXIT\s0" 4 +.IX Item "SSL_CB_EXIT" +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 \s-1IO\s0 might otherwise block and non-blocking is being used. +.IP "\s-1SSL_CB_READ\s0" 4 +.IX Item "SSL_CB_READ" +Callback has been called during read operation. +.IP "\s-1SSL_CB_WRITE\s0" 4 +.IX Item "SSL_CB_WRITE" +Callback has been called during write operation. +.IP "\s-1SSL_CB_ALERT\s0" 4 +.IX Item "SSL_CB_ALERT" +Callback has been called due to an alert being sent or received. +.IP "\s-1SSL_CB_READ_ALERT\s0 (SSL_CB_ALERT|SSL_CB_READ)" 4 +.IX Item "SSL_CB_READ_ALERT (SSL_CB_ALERT|SSL_CB_READ)" +.PD 0 +.IP "\s-1SSL_CB_WRITE_ALERT\s0 (SSL_CB_ALERT|SSL_CB_WRITE)" 4 +.IX Item "SSL_CB_WRITE_ALERT (SSL_CB_ALERT|SSL_CB_WRITE)" +.IP "\s-1SSL_CB_ACCEPT_LOOP\s0 (SSL_ST_ACCEPT|SSL_CB_LOOP)" 4 +.IX Item "SSL_CB_ACCEPT_LOOP (SSL_ST_ACCEPT|SSL_CB_LOOP)" +.IP "\s-1SSL_CB_ACCEPT_EXIT\s0 (SSL_ST_ACCEPT|SSL_CB_EXIT)" 4 +.IX Item "SSL_CB_ACCEPT_EXIT (SSL_ST_ACCEPT|SSL_CB_EXIT)" +.IP "\s-1SSL_CB_CONNECT_LOOP\s0 (SSL_ST_CONNECT|SSL_CB_LOOP)" 4 +.IX Item "SSL_CB_CONNECT_LOOP (SSL_ST_CONNECT|SSL_CB_LOOP)" +.IP "\s-1SSL_CB_CONNECT_EXIT\s0 (SSL_ST_CONNECT|SSL_CB_EXIT)" 4 +.IX Item "SSL_CB_CONNECT_EXIT (SSL_ST_CONNECT|SSL_CB_EXIT)" +.IP "\s-1SSL_CB_HANDSHAKE_START\s0" 4 +.IX Item "SSL_CB_HANDSHAKE_START" +.PD +Callback has been called because a new handshake is started. It also occurs when +resuming a handshake following a pause to handle early data. +.IP "\s-1SSL_CB_HANDSHAKE_DONE\s0" 4 +.IX Item "SSL_CB_HANDSHAKE_DONE" +Callback has been called because a handshake is finished. It also occurs if the +handshake is paused to allow the exchange of early data. +.PP +The current state information can be obtained using the +\&\fBSSL_state_string\fR\|(3) family of functions. +.PP +The \fBret\fR information can be evaluated using the +\&\fBSSL_alert_type_string\fR\|(3) family of functions. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_set_info_callback()\fR does not provide diagnostic information. +.PP +\&\fBSSL_get_info_callback()\fR returns the current setting. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +The following example callback function prints state strings, information +about alerts being handled and error messages to the \fBbio_err\fR \s-1BIO.\s0 +.PP +.Vb 4 +\& void apps_ssl_info_callback(SSL *s, int where, int ret) +\& { +\& const char *str; +\& int w = where & ~SSL_ST_MASK; +\& +\& if (w & SSL_ST_CONNECT) +\& str = "SSL_connect"; +\& else if (w & SSL_ST_ACCEPT) +\& str = "SSL_accept"; +\& else +\& str = "undefined"; +\& +\& if (where & SSL_CB_LOOP) { +\& BIO_printf(bio_err, "%s:%s\en", str, SSL_state_string_long(s)); +\& } else if (where & SSL_CB_ALERT) { +\& str = (where & SSL_CB_READ) ? "read" : "write"; +\& BIO_printf(bio_err, "SSL3 alert %s:%s:%s\en", str, +\& SSL_alert_type_string_long(ret), +\& SSL_alert_desc_string_long(ret)); +\& } else if (where & SSL_CB_EXIT) { +\& if (ret == 0) { +\& BIO_printf(bio_err, "%s:failed in %s\en", +\& str, SSL_state_string_long(s)); +\& } else if (ret < 0) { +\& BIO_printf(bio_err, "%s:error in %s\en", +\& str, SSL_state_string_long(s)); +\& } +\& } +\& } +.Ve +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), \fBSSL_state_string\fR\|(3), +\&\fBSSL_alert_type_string\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2001\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_keylog_callback.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_keylog_callback.3 new file mode 100644 index 00000000..65e3c423 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_keylog_callback.3 @@ -0,0 +1,183 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CTX_SET_KEYLOG_CALLBACK 3" +.TH SSL_CTX_SET_KEYLOG_CALLBACK 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_CTX_set_keylog_callback, SSL_CTX_get_keylog_callback, SSL_CTX_keylog_cb_func \- logging TLS key material +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& typedef void (*SSL_CTX_keylog_cb_func)(const SSL *ssl, const char *line); +\& +\& void SSL_CTX_set_keylog_callback(SSL_CTX *ctx, SSL_CTX_keylog_cb_func cb); +\& SSL_CTX_keylog_cb_func SSL_CTX_get_keylog_callback(const SSL_CTX *ctx); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_CTX_set_keylog_callback()\fR sets the \s-1TLS\s0 key logging callback. This callback +is called whenever \s-1TLS\s0 key material is generated or received, in order to allow +applications to store this keying material for debugging purposes. +.PP +\&\fBSSL_CTX_get_keylog_callback()\fR retrieves the previously set \s-1TLS\s0 key logging +callback. If no callback has been set, this will return \s-1NULL.\s0 When there is no +key logging callback, or if SSL_CTX_set_keylog_callback is called with \s-1NULL\s0 as +the value of cb, no logging of key material will be done. +.PP +The key logging callback is called with two items: the \fBssl\fR object associated +with the connection, and \fBline\fR, a string containing the key material in the +format used by \s-1NSS\s0 for its \fB\s-1SSLKEYLOGFILE\s0\fR debugging output. To recreate that +file, the key logging callback should log \fBline\fR, followed by a newline. +\&\fBline\fR will always be a NULL-terminated string. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_CTX_get_keylog_callback()\fR returns a pointer to \fBSSL_CTX_keylog_cb_func\fR or +\&\s-1NULL\s0 if the callback is not set. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2016\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_max_cert_list.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_max_cert_list.3 new file mode 100644 index 00000000..fa5251df --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_max_cert_list.3 @@ -0,0 +1,213 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CTX_SET_MAX_CERT_LIST 3" +.TH SSL_CTX_SET_MAX_CERT_LIST 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_CTX_set_max_cert_list, SSL_CTX_get_max_cert_list, SSL_set_max_cert_list, SSL_get_max_cert_list \- manipulate allowed size for the peer's certificate chain +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& long SSL_CTX_set_max_cert_list(SSL_CTX *ctx, long size); +\& long SSL_CTX_get_max_cert_list(SSL_CTX *ctx); +\& +\& long SSL_set_max_cert_list(SSL *ssl, long size); +\& long SSL_get_max_cert_list(SSL *ctx); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_CTX_set_max_cert_list()\fR sets the maximum size allowed for the peer's +certificate chain for all \s-1SSL\s0 objects created from \fBctx\fR to be bytes. +The \s-1SSL\s0 objects inherit the setting valid for \fBctx\fR at the time +\&\fBSSL_new\fR\|(3) is being called. +.PP +\&\fBSSL_CTX_get_max_cert_list()\fR returns the currently set maximum size for \fBctx\fR. +.PP +\&\fBSSL_set_max_cert_list()\fR sets the maximum size allowed for the peer's +certificate chain for \fBssl\fR to be bytes. This setting stays valid +until a new value is set. +.PP +\&\fBSSL_get_max_cert_list()\fR returns the currently set maximum size for \fBssl\fR. +.SH "NOTES" +.IX Header "NOTES" +During the handshake process, the peer may send a certificate chain. +The \s-1TLS/SSL\s0 standard does not give any maximum size of the certificate chain. +The OpenSSL library handles incoming data by a dynamically allocated buffer. +In order to prevent this buffer from growing without bounds due to data +received from a faulty or malicious peer, a maximum size for the certificate +chain is set. +.PP +The default value for the maximum certificate chain size is 100kB (30kB +on the 16bit \s-1DOS\s0 platform). This should be sufficient for usual certificate +chains (OpenSSL's default maximum chain length is 10, see +\&\fBSSL_CTX_set_verify\fR\|(3), and certificates +without special extensions have a typical size of 1\-2kB). +.PP +For special applications it can be necessary to extend the maximum certificate +chain size allowed to be sent by the peer, see e.g. the work on +\&\*(L"Internet X.509 Public Key Infrastructure Proxy Certificate Profile\*(R" +and \*(L"\s-1TLS\s0 Delegation Protocol\*(R" at http://www.ietf.org/ and +http://www.globus.org/ . +.PP +Under normal conditions it should never be necessary to set a value smaller +than the default, as the buffer is handled dynamically and only uses the +memory actually required by the data sent by the peer. +.PP +If the maximum certificate chain size allowed is exceeded, the handshake will +fail with a \s-1SSL_R_EXCESSIVE_MESSAGE_SIZE\s0 error. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_CTX_set_max_cert_list()\fR and \fBSSL_set_max_cert_list()\fR return the previously +set value. +.PP +\&\fBSSL_CTX_get_max_cert_list()\fR and \fBSSL_get_max_cert_list()\fR return the currently +set value. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), \fBSSL_new\fR\|(3), +\&\fBSSL_CTX_set_verify\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2001\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_min_proto_version.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_min_proto_version.3 new file mode 100644 index 00000000..47a68acf --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_min_proto_version.3 @@ -0,0 +1,199 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CTX_SET_MIN_PROTO_VERSION 3" +.TH SSL_CTX_SET_MIN_PROTO_VERSION 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_CTX_set_min_proto_version, SSL_CTX_set_max_proto_version, SSL_CTX_get_min_proto_version, SSL_CTX_get_max_proto_version, SSL_set_min_proto_version, SSL_set_max_proto_version, SSL_get_min_proto_version, SSL_get_max_proto_version \- Get and set minimum and maximum supported protocol version +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int SSL_CTX_set_min_proto_version(SSL_CTX *ctx, int version); +\& int SSL_CTX_set_max_proto_version(SSL_CTX *ctx, int version); +\& int SSL_CTX_get_min_proto_version(SSL_CTX *ctx); +\& int SSL_CTX_get_max_proto_version(SSL_CTX *ctx); +\& +\& int SSL_set_min_proto_version(SSL *ssl, int version); +\& int SSL_set_max_proto_version(SSL *ssl, int version); +\& int SSL_get_min_proto_version(SSL *ssl); +\& int SSL_get_max_proto_version(SSL *ssl); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The functions get or set the minimum and maximum supported protocol versions +for the \fBctx\fR or \fBssl\fR. +This works in combination with the options set via +\&\fBSSL_CTX_set_options\fR\|(3) that also make it possible to disable +specific protocol versions. +Use these functions instead of disabling specific protocol versions. +.PP +Setting the minimum or maximum version to 0, will enable protocol +versions down to the lowest version, or up to the highest version +supported by the library, respectively. +.PP +Getters return 0 in case \fBctx\fR or \fBssl\fR have been configured to +automatically use the lowest or highest version supported by the library. +.PP +Currently supported versions are \fB\s-1SSL3_VERSION\s0\fR, \fB\s-1TLS1_VERSION\s0\fR, +\&\fB\s-1TLS1_1_VERSION\s0\fR, \fB\s-1TLS1_2_VERSION\s0\fR, \fB\s-1TLS1_3_VERSION\s0\fR for \s-1TLS\s0 and +\&\fB\s-1DTLS1_VERSION\s0\fR, \fB\s-1DTLS1_2_VERSION\s0\fR for \s-1DTLS.\s0 +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +These setter functions return 1 on success and 0 on failure. The getter +functions return the configured version or 0 for auto-configuration of +lowest or highest protocol, respectively. +.SH "NOTES" +.IX Header "NOTES" +All these functions are implemented using macros. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBSSL_CTX_set_options\fR\|(3), \fBSSL_CONF_cmd\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +The setter functions were added in OpenSSL 1.1.0. The getter functions +were added in OpenSSL 1.1.1. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2016\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_mode.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_mode.3 new file mode 100644 index 00000000..734f718e --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_mode.3 @@ -0,0 +1,266 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CTX_SET_MODE 3" +.TH SSL_CTX_SET_MODE 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_CTX_set_mode, SSL_CTX_clear_mode, SSL_set_mode, SSL_clear_mode, SSL_CTX_get_mode, SSL_get_mode \- manipulate SSL engine mode +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& long SSL_CTX_set_mode(SSL_CTX *ctx, long mode); +\& long SSL_CTX_clear_mode(SSL_CTX *ctx, long mode); +\& long SSL_set_mode(SSL *ssl, long mode); +\& long SSL_clear_mode(SSL *ssl, long mode); +\& +\& long SSL_CTX_get_mode(SSL_CTX *ctx); +\& long SSL_get_mode(SSL *ssl); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_CTX_set_mode()\fR adds the mode set via bitmask in \fBmode\fR to \fBctx\fR. +Options already set before are not cleared. +\&\fBSSL_CTX_clear_mode()\fR removes the mode set via bitmask in \fBmode\fR from \fBctx\fR. +.PP +\&\fBSSL_set_mode()\fR adds the mode set via bitmask in \fBmode\fR to \fBssl\fR. +Options already set before are not cleared. +\&\fBSSL_clear_mode()\fR removes the mode set via bitmask in \fBmode\fR from \fBssl\fR. +.PP +\&\fBSSL_CTX_get_mode()\fR returns the mode set for \fBctx\fR. +.PP +\&\fBSSL_get_mode()\fR returns the mode set for \fBssl\fR. +.SH "NOTES" +.IX Header "NOTES" +The following mode changes are available: +.IP "\s-1SSL_MODE_ENABLE_PARTIAL_WRITE\s0" 4 +.IX Item "SSL_MODE_ENABLE_PARTIAL_WRITE" +Allow SSL_write_ex(..., n, &r) to return with 0 < r < n (i.e. report success +when just a single record has been written). This works in a similar way for +\&\fBSSL_write()\fR. When not set (the default), \fBSSL_write_ex()\fR or \fBSSL_write()\fR will only +report success once the complete chunk was written. Once \fBSSL_write_ex()\fR or +\&\fBSSL_write()\fR returns successful, \fBr\fR bytes have been written and the next call +to \fBSSL_write_ex()\fR or \fBSSL_write()\fR must only send the n\-r bytes left, imitating +the behaviour of \fBwrite()\fR. +.IP "\s-1SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER\s0" 4 +.IX Item "SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER" +Make it possible to retry \fBSSL_write_ex()\fR or \fBSSL_write()\fR with changed buffer +location (the buffer contents must stay the same). This is not the default to +avoid the misconception that non-blocking \fBSSL_write()\fR behaves like +non-blocking \fBwrite()\fR. +.IP "\s-1SSL_MODE_AUTO_RETRY\s0" 4 +.IX Item "SSL_MODE_AUTO_RETRY" +During normal operations, non-application data records might need to be sent or +received that the application is not aware of. +If a non-application data record was processed, +\&\fBSSL_read_ex\fR\|(3) and \fBSSL_read\fR\|(3) can return with a failure and indicate the +need to retry with \fB\s-1SSL_ERROR_WANT_READ\s0\fR. +If such a non-application data record was processed, the flag +\&\fB\s-1SSL_MODE_AUTO_RETRY\s0\fR causes it to try to process the next record instead of +returning. +.Sp +In a non-blocking environment applications must be prepared to handle +incomplete read/write operations. +Setting \fB\s-1SSL_MODE_AUTO_RETRY\s0\fR for a non-blocking \fB\s-1BIO\s0\fR will process +non-application data records until either no more data is available or +an application data record has been processed. +.Sp +In a blocking environment, applications are not always prepared to +deal with the functions returning intermediate reports such as retry +requests, and setting the \fB\s-1SSL_MODE_AUTO_RETRY\s0\fR flag will cause the functions +to only return after successfully processing an application data record or a +failure. +.Sp +Turning off \fB\s-1SSL_MODE_AUTO_RETRY\s0\fR can be useful with blocking \fB\s-1BIO\s0\fRs in case +they are used in combination with something like \fBselect()\fR or \fBpoll()\fR. +Otherwise the call to \fBSSL_read()\fR or \fBSSL_read_ex()\fR might hang when a +non-application record was sent and no application data was sent. +.IP "\s-1SSL_MODE_RELEASE_BUFFERS\s0" 4 +.IX Item "SSL_MODE_RELEASE_BUFFERS" +When we no longer need a read buffer or a write buffer for a given \s-1SSL,\s0 +then release the memory we were using to hold it. +Using this flag can +save around 34k per idle \s-1SSL\s0 connection. +This flag has no effect on \s-1SSL\s0 v2 connections, or on \s-1DTLS\s0 connections. +.IP "\s-1SSL_MODE_SEND_FALLBACK_SCSV\s0" 4 +.IX Item "SSL_MODE_SEND_FALLBACK_SCSV" +Send \s-1TLS_FALLBACK_SCSV\s0 in the ClientHello. +To be set only by applications that reconnect with a downgraded protocol +version; see draft\-ietf\-tls\-downgrade\-scsv\-00 for details. +.Sp +\&\s-1DO NOT ENABLE THIS\s0 if your application attempts a normal handshake. +Only use this in explicit fallback retries, following the guidance +in draft\-ietf\-tls\-downgrade\-scsv\-00. +.IP "\s-1SSL_MODE_ASYNC\s0" 4 +.IX Item "SSL_MODE_ASYNC" +Enable asynchronous processing. \s-1TLS I/O\s0 operations may indicate a retry with +\&\s-1SSL_ERROR_WANT_ASYNC\s0 with this mode set if an asynchronous capable engine is +used to perform cryptographic operations. See \fBSSL_get_error\fR\|(3). +.IP "\s-1SSL_MODE_DTLS_SCTP_LABEL_LENGTH_BUG\s0" 4 +.IX Item "SSL_MODE_DTLS_SCTP_LABEL_LENGTH_BUG" +Older versions of OpenSSL had a bug in the computation of the label length +used for computing the endpoint-pair shared secret. The bug was that the +terminating zero was included in the length of the label. Setting this option +enables this behaviour to allow interoperability with such broken +implementations. Please note that setting this option breaks interoperability +with correct implementations. This option only applies to \s-1DTLS\s0 over \s-1SCTP.\s0 +.PP +All modes are off by default except for \s-1SSL_MODE_AUTO_RETRY\s0 which is on by +default since 1.1.1. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_CTX_set_mode()\fR and \fBSSL_set_mode()\fR return the new mode bitmask +after adding \fBmode\fR. +.PP +\&\fBSSL_CTX_get_mode()\fR and \fBSSL_get_mode()\fR return the current bitmask. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), \fBSSL_read_ex\fR\|(3), \fBSSL_read\fR\|(3), \fBSSL_write_ex\fR\|(3) or +\&\fBSSL_write\fR\|(3), \fBSSL_get_error\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +\&\s-1SSL_MODE_ASYNC\s0 was added in OpenSSL 1.1.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2001\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_msg_callback.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_msg_callback.3 new file mode 100644 index 00000000..5bc174a8 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_msg_callback.3 @@ -0,0 +1,252 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CTX_SET_MSG_CALLBACK 3" +.TH SSL_CTX_SET_MSG_CALLBACK 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_CTX_set_msg_callback, SSL_CTX_set_msg_callback_arg, SSL_set_msg_callback, SSL_set_msg_callback_arg \&\- install callback for observing protocol messages +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& void SSL_CTX_set_msg_callback(SSL_CTX *ctx, +\& void (*cb)(int write_p, int version, +\& int content_type, const void *buf, +\& size_t len, SSL *ssl, void *arg)); +\& void SSL_CTX_set_msg_callback_arg(SSL_CTX *ctx, void *arg); +\& +\& void SSL_set_msg_callback(SSL *ssl, +\& void (*cb)(int write_p, int version, +\& int content_type, const void *buf, +\& size_t len, SSL *ssl, void *arg)); +\& void SSL_set_msg_callback_arg(SSL *ssl, void *arg); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_CTX_set_msg_callback()\fR or \fBSSL_set_msg_callback()\fR can be used to +define a message callback function \fIcb\fR for observing all \s-1SSL/TLS\s0 +protocol messages (such as handshake messages) that are received or +sent, as well as other events that occur during processing. +\&\fBSSL_CTX_set_msg_callback_arg()\fR and \fBSSL_set_msg_callback_arg()\fR +can be used to set argument \fIarg\fR to the callback function, which is +available for arbitrary application use. +.PP +\&\fBSSL_CTX_set_msg_callback()\fR and \fBSSL_CTX_set_msg_callback_arg()\fR specify +default settings that will be copied to new \fB\s-1SSL\s0\fR objects by +\&\fBSSL_new\fR\|(3). \fBSSL_set_msg_callback()\fR and +\&\fBSSL_set_msg_callback_arg()\fR modify the actual settings of an \fB\s-1SSL\s0\fR +object. Using a \fB\s-1NULL\s0\fR pointer for \fIcb\fR disables the message callback. +.PP +When \fIcb\fR is called by the \s-1SSL/TLS\s0 library the function arguments have the +following meaning: +.IP "\fIwrite_p\fR" 4 +.IX Item "write_p" +This flag is \fB0\fR when a protocol message has been received and \fB1\fR +when a protocol message has been sent. +.IP "\fIversion\fR" 4 +.IX Item "version" +The protocol version according to which the protocol message is +interpreted by the library such as \fB\s-1TLS1_3_VERSION\s0\fR, \fB\s-1TLS1_2_VERSION\s0\fR etc. +This is set to 0 for the \s-1SSL3_RT_HEADER\s0 pseudo content type (see \s-1NOTES\s0 below). +.IP "\fIcontent_type\fR" 4 +.IX Item "content_type" +This is one of the content type values defined in the protocol specification +(\fB\s-1SSL3_RT_CHANGE_CIPHER_SPEC\s0\fR, \fB\s-1SSL3_RT_ALERT\s0\fR, \fB\s-1SSL3_RT_HANDSHAKE\s0\fR; but never +\&\fB\s-1SSL3_RT_APPLICATION_DATA\s0\fR because the callback will only be called for protocol +messages). Alternatively it may be a \*(L"pseudo\*(R" content type. These pseudo +content types are used to signal some other event in the processing of data (see +\&\s-1NOTES\s0 below). +.IP "\fIbuf\fR, \fIlen\fR" 4 +.IX Item "buf, len" +\&\fIbuf\fR points to a buffer containing the protocol message or other data (in the +case of pseudo content types), which consists of \fIlen\fR bytes. The buffer is no +longer valid after the callback function has returned. +.IP "\fIssl\fR" 4 +.IX Item "ssl" +The \fB\s-1SSL\s0\fR object that received or sent the message. +.IP "\fIarg\fR" 4 +.IX Item "arg" +The user-defined argument optionally defined by +\&\fBSSL_CTX_set_msg_callback_arg()\fR or \fBSSL_set_msg_callback_arg()\fR. +.SH "NOTES" +.IX Header "NOTES" +Protocol messages are passed to the callback function after decryption +and fragment collection where applicable. (Thus record boundaries are +not visible.) +.PP +If processing a received protocol message results in an error, +the callback function may not be called. For example, the callback +function will never see messages that are considered too large to be +processed. +.PP +Due to automatic protocol version negotiation, \fIversion\fR is not +necessarily the protocol version used by the sender of the message: If +a \s-1TLS 1.0\s0 ClientHello message is received by an \s-1SSL 3\s0.0\-only server, +\&\fIversion\fR will be \fB\s-1SSL3_VERSION\s0\fR. +.PP +Pseudo content type values may be sent at various points during the processing +of data. The following pseudo content types are currently defined: +.IP "\fB\s-1SSL3_RT_HEADER\s0\fR" 4 +.IX Item "SSL3_RT_HEADER" +Used when a record is sent or received. The \fBbuf\fR contains the record header +bytes only. +.IP "\fB\s-1SSL3_RT_INNER_CONTENT_TYPE\s0\fR" 4 +.IX Item "SSL3_RT_INNER_CONTENT_TYPE" +Used when an encrypted TLSv1.3 record is sent or received. In encrypted TLSv1.3 +records the content type in the record header is always +\&\s-1SSL3_RT_APPLICATION_DATA.\s0 The real content type for the record is contained in +an \*(L"inner\*(R" content type. \fBbuf\fR contains the encoded \*(L"inner\*(R" content type byte. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_CTX_set_msg_callback()\fR, \fBSSL_CTX_set_msg_callback_arg()\fR, \fBSSL_set_msg_callback()\fR +and \fBSSL_set_msg_callback_arg()\fR do not return values. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), \fBSSL_new\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +The pseudo content type \fB\s-1SSL3_RT_INNER_CONTENT_TYPE\s0\fR was added in OpenSSL 1.1.1. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2001\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_num_tickets.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_num_tickets.3 new file mode 100644 index 00000000..1b7ec7f4 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_num_tickets.3 @@ -0,0 +1,196 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CTX_SET_NUM_TICKETS 3" +.TH SSL_CTX_SET_NUM_TICKETS 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_set_num_tickets, SSL_get_num_tickets, SSL_CTX_set_num_tickets, SSL_CTX_get_num_tickets \&\- control the number of TLSv1.3 session tickets that are issued +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int SSL_set_num_tickets(SSL *s, size_t num_tickets); +\& size_t SSL_get_num_tickets(SSL *s); +\& int SSL_CTX_set_num_tickets(SSL_CTX *ctx, size_t num_tickets); +\& size_t SSL_CTX_get_num_tickets(SSL_CTX *ctx); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_CTX_set_num_tickets()\fR and \fBSSL_set_num_tickets()\fR can be called for a server +application and set the number of TLSv1.3 session tickets that will be sent to +the client after a full handshake. Set the desired value (which could be 0) in +the \fBnum_tickets\fR argument. Typically these functions should be called before +the start of the handshake. +.PP +The default number of tickets is 2; the default number of tickets sent following +a resumption handshake is 1 but this cannot be changed using these functions. +The number of tickets following a resumption handshake can be reduced to 0 using +custom session ticket callbacks (see \fBSSL_CTX_set_session_ticket_cb\fR\|(3)). +.PP +Tickets are also issued on receipt of a post-handshake certificate from the +client following a request by the server using +\&\fBSSL_verify_client_post_handshake\fR\|(3). These new tickets will be associated +with the updated client identity (i.e. including their certificate and +verification status). The number of tickets issued will normally be the same as +was used for the initial handshake. If the initial handshake was a full +handshake then \fBSSL_set_num_tickets()\fR can be called again prior to calling +\&\fBSSL_verify_client_post_handshake()\fR to update the number of tickets that will be +sent. +.PP +\&\fBSSL_CTX_get_num_tickets()\fR and \fBSSL_get_num_tickets()\fR return the number of +tickets set by a previous call to \fBSSL_CTX_set_num_tickets()\fR or +\&\fBSSL_set_num_tickets()\fR, or 2 if no such call has been made. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_CTX_set_num_tickets()\fR and \fBSSL_set_num_tickets()\fR return 1 on success or 0 on +failure. +.PP +\&\fBSSL_CTX_get_num_tickets()\fR and \fBSSL_get_num_tickets()\fR return the number of tickets +that have been previously set. +.SH "HISTORY" +.IX Header "HISTORY" +These functions were added in OpenSSL 1.1.1. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_options.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_options.3 new file mode 100644 index 00000000..ed899f11 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_options.3 @@ -0,0 +1,471 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CTX_SET_OPTIONS 3" +.TH SSL_CTX_SET_OPTIONS 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_CTX_set_options, SSL_set_options, SSL_CTX_clear_options, SSL_clear_options, SSL_CTX_get_options, SSL_get_options, SSL_get_secure_renegotiation_support \- manipulate SSL options +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& long SSL_CTX_set_options(SSL_CTX *ctx, long options); +\& long SSL_set_options(SSL *ssl, long options); +\& +\& long SSL_CTX_clear_options(SSL_CTX *ctx, long options); +\& long SSL_clear_options(SSL *ssl, long options); +\& +\& long SSL_CTX_get_options(SSL_CTX *ctx); +\& long SSL_get_options(SSL *ssl); +\& +\& long SSL_get_secure_renegotiation_support(SSL *ssl); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_CTX_set_options()\fR adds the options set via bitmask in \fBoptions\fR to \fBctx\fR. +Options already set before are not cleared! +.PP +\&\fBSSL_set_options()\fR adds the options set via bitmask in \fBoptions\fR to \fBssl\fR. +Options already set before are not cleared! +.PP +\&\fBSSL_CTX_clear_options()\fR clears the options set via bitmask in \fBoptions\fR +to \fBctx\fR. +.PP +\&\fBSSL_clear_options()\fR clears the options set via bitmask in \fBoptions\fR to \fBssl\fR. +.PP +\&\fBSSL_CTX_get_options()\fR returns the options set for \fBctx\fR. +.PP +\&\fBSSL_get_options()\fR returns the options set for \fBssl\fR. +.PP +\&\fBSSL_get_secure_renegotiation_support()\fR indicates whether the peer supports +secure renegotiation. +Note, this is implemented via a macro. +.SH "NOTES" +.IX Header "NOTES" +The behaviour of the \s-1SSL\s0 library can be changed by setting several options. +The options are coded as bitmasks and can be combined by a bitwise \fBor\fR +operation (|). +.PP +\&\fBSSL_CTX_set_options()\fR and \fBSSL_set_options()\fR affect the (external) +protocol behaviour of the \s-1SSL\s0 library. The (internal) behaviour of +the \s-1API\s0 can be changed by using the similar +\&\fBSSL_CTX_set_mode\fR\|(3) and \fBSSL_set_mode()\fR functions. +.PP +During a handshake, the option settings of the \s-1SSL\s0 object are used. When +a new \s-1SSL\s0 object is created from a context using \fBSSL_new()\fR, the current +option setting is copied. Changes to \fBctx\fR do not affect already created +\&\s-1SSL\s0 objects. \fBSSL_clear()\fR does not affect the settings. +.PP +The following \fBbug workaround\fR options are available: +.IP "\s-1SSL_OP_SAFARI_ECDHE_ECDSA_BUG\s0" 4 +.IX Item "SSL_OP_SAFARI_ECDHE_ECDSA_BUG" +Don't prefer ECDHE-ECDSA ciphers when the client appears to be Safari on \s-1OS X. +OS X 10.8..10.8.3\s0 has broken support for ECDHE-ECDSA ciphers. +.IP "\s-1SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS\s0" 4 +.IX Item "SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS" +Disables a countermeasure against a \s-1SSL 3.0/TLS 1.0\s0 protocol +vulnerability affecting \s-1CBC\s0 ciphers, which cannot be handled by some +broken \s-1SSL\s0 implementations. This option has no effect for connections +using other ciphers. +.IP "\s-1SSL_OP_TLSEXT_PADDING\s0" 4 +.IX Item "SSL_OP_TLSEXT_PADDING" +Adds a padding extension to ensure the ClientHello size is never between +256 and 511 bytes in length. This is needed as a workaround for some +implementations. +.IP "\s-1SSL_OP_ALL\s0" 4 +.IX Item "SSL_OP_ALL" +All of the above bug workarounds plus \fB\s-1SSL_OP_LEGACY_SERVER_CONNECT\s0\fR as +mentioned below. +.PP +It is usually safe to use \fB\s-1SSL_OP_ALL\s0\fR to enable the bug workaround +options if compatibility with somewhat broken implementations is +desired. +.PP +The following \fBmodifying\fR options are available: +.IP "\s-1SSL_OP_TLS_ROLLBACK_BUG\s0" 4 +.IX Item "SSL_OP_TLS_ROLLBACK_BUG" +Disable version rollback attack detection. +.Sp +During the client key exchange, the client must send the same information +about acceptable \s-1SSL/TLS\s0 protocol levels as during the first hello. Some +clients violate this rule by adapting to the server's answer. (Example: +the client sends a SSLv2 hello and accepts up to SSLv3.1=TLSv1, the server +only understands up to SSLv3. In this case the client must still use the +same SSLv3.1=TLSv1 announcement. Some clients step down to SSLv3 with respect +to the server's answer and violate the version rollback protection.) +.IP "\s-1SSL_OP_CIPHER_SERVER_PREFERENCE\s0" 4 +.IX Item "SSL_OP_CIPHER_SERVER_PREFERENCE" +When choosing a cipher, use the server's preferences instead of the client +preferences. When not set, the \s-1SSL\s0 server will always follow the clients +preferences. When set, the \s-1SSL/TLS\s0 server will choose following its +own preferences. +.IP "SSL_OP_NO_SSLv3, SSL_OP_NO_TLSv1, SSL_OP_NO_TLSv1_1, SSL_OP_NO_TLSv1_2, SSL_OP_NO_TLSv1_3, SSL_OP_NO_DTLSv1, SSL_OP_NO_DTLSv1_2" 4 +.IX Item "SSL_OP_NO_SSLv3, SSL_OP_NO_TLSv1, SSL_OP_NO_TLSv1_1, SSL_OP_NO_TLSv1_2, SSL_OP_NO_TLSv1_3, SSL_OP_NO_DTLSv1, SSL_OP_NO_DTLSv1_2" +These options turn off the SSLv3, TLSv1, TLSv1.1, TLSv1.2 or TLSv1.3 protocol +versions with \s-1TLS\s0 or the DTLSv1, DTLSv1.2 versions with \s-1DTLS,\s0 +respectively. +As of OpenSSL 1.1.0, these options are deprecated, use +\&\fBSSL_CTX_set_min_proto_version\fR\|(3) and +\&\fBSSL_CTX_set_max_proto_version\fR\|(3) instead. +.IP "\s-1SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION\s0" 4 +.IX Item "SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION" +When performing renegotiation as a server, always start a new session +(i.e., session resumption requests are only accepted in the initial +handshake). This option is not needed for clients. +.IP "\s-1SSL_OP_NO_COMPRESSION\s0" 4 +.IX Item "SSL_OP_NO_COMPRESSION" +Do not use compression even if it is supported. +.IP "\s-1SSL_OP_NO_QUERY_MTU\s0" 4 +.IX Item "SSL_OP_NO_QUERY_MTU" +Do not query the \s-1MTU.\s0 Only affects \s-1DTLS\s0 connections. +.IP "\s-1SSL_OP_COOKIE_EXCHANGE\s0" 4 +.IX Item "SSL_OP_COOKIE_EXCHANGE" +Turn on Cookie Exchange as described in \s-1RFC4347\s0 Section 4.2.1. Only affects +\&\s-1DTLS\s0 connections. +.IP "\s-1SSL_OP_NO_TICKET\s0" 4 +.IX Item "SSL_OP_NO_TICKET" +\&\s-1SSL/TLS\s0 supports two mechanisms for resuming sessions: session ids and stateless +session tickets. +.Sp +When using session ids a copy of the session information is +cached on the server and a unique id is sent to the client. When the client +wishes to resume it provides the unique id so that the server can retrieve the +session information from its cache. +.Sp +When using stateless session tickets the server uses a session ticket encryption +key to encrypt the session information. This encrypted data is sent to the +client as a \*(L"ticket\*(R". When the client wishes to resume it sends the encrypted +data back to the server. The server uses its key to decrypt the data and resume +the session. In this way the server can operate statelessly \- no session +information needs to be cached locally. +.Sp +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 +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 +in a ticket and sent back to the client. When the client wishes to resume, it +presents a ticket in the same way as for stateless tickets. The server can then +extract the session id from the ticket and retrieve the session information from +its cache. +.Sp +By default OpenSSL will use stateless tickets. The \s-1SSL_OP_NO_TICKET\s0 option will +cause stateless tickets to not be issued. In TLSv1.2 and below this means no +ticket gets sent to the client at all. In TLSv1.3 a stateful ticket will be +sent. This is a server-side option only. +.Sp +In TLSv1.3 it is possible to suppress all tickets (stateful and stateless) from +being sent by calling \fBSSL_CTX_set_num_tickets\fR\|(3) or +\&\fBSSL_set_num_tickets\fR\|(3). +.IP "\s-1SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION\s0" 4 +.IX Item "SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION" +Allow legacy insecure renegotiation between OpenSSL and unpatched clients or +servers. See the \fB\s-1SECURE RENEGOTIATION\s0\fR section for more details. +.IP "\s-1SSL_OP_LEGACY_SERVER_CONNECT\s0" 4 +.IX Item "SSL_OP_LEGACY_SERVER_CONNECT" +Allow legacy insecure renegotiation between OpenSSL and unpatched servers +\&\fBonly\fR: this option is currently set by default. See the +\&\fB\s-1SECURE RENEGOTIATION\s0\fR section for more details. +.IP "\s-1SSL_OP_NO_ENCRYPT_THEN_MAC\s0" 4 +.IX Item "SSL_OP_NO_ENCRYPT_THEN_MAC" +Normally clients and servers will transparently attempt to negotiate the +\&\s-1RFC7366\s0 Encrypt-then-MAC option on \s-1TLS\s0 and \s-1DTLS\s0 connection. +.Sp +If this option is set, Encrypt-then-MAC is disabled. Clients will not +propose, and servers will not accept the extension. +.IP "\s-1SSL_OP_NO_RENEGOTIATION\s0" 4 +.IX Item "SSL_OP_NO_RENEGOTIATION" +Disable all renegotiation in TLSv1.2 and earlier. Do not send HelloRequest +messages, and ignore renegotiation requests via ClientHello. +.IP "\s-1SSL_OP_ALLOW_NO_DHE_KEX\s0" 4 +.IX Item "SSL_OP_ALLOW_NO_DHE_KEX" +In TLSv1.3 allow a non\-(ec)dhe based key exchange mode on resumption. This means +that there will be no forward secrecy for the resumed session. +.IP "\s-1SSL_OP_PRIORITIZE_CHACHA\s0" 4 +.IX Item "SSL_OP_PRIORITIZE_CHACHA" +When \s-1SSL_OP_CIPHER_SERVER_PREFERENCE\s0 is set, temporarily reprioritize +ChaCha20\-Poly1305 ciphers to the top of the server cipher list if a +ChaCha20\-Poly1305 cipher is at the top of the client cipher list. This helps +those clients (e.g. mobile) use ChaCha20\-Poly1305 if that cipher is anywhere +in the server cipher list; but still allows other clients to use \s-1AES\s0 and other +ciphers. Requires \fB\s-1SSL_OP_CIPHER_SERVER_PREFERENCE\s0\fR. +.IP "\s-1SSL_OP_ENABLE_MIDDLEBOX_COMPAT\s0" 4 +.IX Item "SSL_OP_ENABLE_MIDDLEBOX_COMPAT" +If set then dummy Change Cipher Spec (\s-1CCS\s0) messages are sent in TLSv1.3. This +has the effect of making TLSv1.3 look more like TLSv1.2 so that middleboxes that +do not understand TLSv1.3 will not drop the connection. Regardless of whether +this option is set or not \s-1CCS\s0 messages received from the peer will always be +ignored in TLSv1.3. This option is set by default. To switch it off use +\&\fBSSL_clear_options()\fR. A future version of OpenSSL may not set this by default. +.IP "\s-1SSL_OP_NO_ANTI_REPLAY\s0" 4 +.IX Item "SSL_OP_NO_ANTI_REPLAY" +By default, when a server is configured for early data (i.e., max_early_data > 0), +OpenSSL will switch on replay protection. See \fBSSL_read_early_data\fR\|(3) for a +description of the replay protection feature. Anti-replay measures are required +to comply with the TLSv1.3 specification. Some applications may be able to +mitigate the replay risks in other ways and in such cases the built in OpenSSL +functionality is not required. Those applications can turn this feature off by +setting this option. This is a server-side opton only. It is ignored by +clients. +.PP +The following options no longer have any effect but their identifiers are +retained for compatibility purposes: +.IP "\s-1SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG\s0" 4 +.IX Item "SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG" +.PD 0 +.IP "\s-1SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER\s0" 4 +.IX Item "SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER" +.IP "\s-1SSL_OP_SSLEAY_080_CLIENT_DH_BUG\s0" 4 +.IX Item "SSL_OP_SSLEAY_080_CLIENT_DH_BUG" +.IP "\s-1SSL_OP_TLS_D5_BUG\s0" 4 +.IX Item "SSL_OP_TLS_D5_BUG" +.IP "\s-1SSL_OP_TLS_BLOCK_PADDING_BUG\s0" 4 +.IX Item "SSL_OP_TLS_BLOCK_PADDING_BUG" +.IP "\s-1SSL_OP_MSIE_SSLV2_RSA_PADDING\s0" 4 +.IX Item "SSL_OP_MSIE_SSLV2_RSA_PADDING" +.IP "\s-1SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG\s0" 4 +.IX Item "SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG" +.IP "\s-1SSL_OP_MICROSOFT_SESS_ID_BUG\s0" 4 +.IX Item "SSL_OP_MICROSOFT_SESS_ID_BUG" +.IP "\s-1SSL_OP_NETSCAPE_CHALLENGE_BUG\s0" 4 +.IX Item "SSL_OP_NETSCAPE_CHALLENGE_BUG" +.IP "\s-1SSL_OP_PKCS1_CHECK_1\s0" 4 +.IX Item "SSL_OP_PKCS1_CHECK_1" +.IP "\s-1SSL_OP_PKCS1_CHECK_2\s0" 4 +.IX Item "SSL_OP_PKCS1_CHECK_2" +.IP "\s-1SSL_OP_SINGLE_DH_USE\s0" 4 +.IX Item "SSL_OP_SINGLE_DH_USE" +.IP "\s-1SSL_OP_SINGLE_ECDH_USE\s0" 4 +.IX Item "SSL_OP_SINGLE_ECDH_USE" +.IP "\s-1SSL_OP_EPHEMERAL_RSA\s0" 4 +.IX Item "SSL_OP_EPHEMERAL_RSA" +.PD +.SH "SECURE RENEGOTIATION" +.IX Header "SECURE RENEGOTIATION" +OpenSSL always attempts to use secure renegotiation as +described in \s-1RFC5746.\s0 This counters the prefix attack described in +\&\s-1CVE\-2009\-3555\s0 and elsewhere. +.PP +This attack has far reaching consequences which application writers should be +aware of. In the description below an implementation supporting secure +renegotiation is referred to as \fIpatched\fR. A server not supporting secure +renegotiation is referred to as \fIunpatched\fR. +.PP +The following sections describe the operations permitted by OpenSSL's secure +renegotiation implementation. +.SS "Patched client and server" +.IX Subsection "Patched client and server" +Connections and renegotiation are always permitted by OpenSSL implementations. +.SS "Unpatched client and patched OpenSSL server" +.IX Subsection "Unpatched client and patched OpenSSL server" +The initial connection succeeds but client renegotiation is denied by the +server with a \fBno_renegotiation\fR warning alert if \s-1TLS\s0 v1.0 is used or a fatal +\&\fBhandshake_failure\fR alert in \s-1SSL\s0 v3.0. +.PP +If the patched OpenSSL server attempts to renegotiate a fatal +\&\fBhandshake_failure\fR alert is sent. This is because the server code may be +unaware of the unpatched nature of the client. +.PP +If the option \fB\s-1SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION\s0\fR is set then +renegotiation \fBalways\fR succeeds. +.SS "Patched OpenSSL client and unpatched server." +.IX Subsection "Patched OpenSSL client and unpatched server." +If the option \fB\s-1SSL_OP_LEGACY_SERVER_CONNECT\s0\fR or +\&\fB\s-1SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION\s0\fR is set then initial connections +and renegotiation between patched OpenSSL clients and unpatched servers +succeeds. If neither option is set then initial connections to unpatched +servers will fail. +.PP +The option \fB\s-1SSL_OP_LEGACY_SERVER_CONNECT\s0\fR is currently set by default even +though it has security implications: otherwise it would be impossible to +connect to unpatched servers (i.e. all of them initially) and this is clearly +not acceptable. Renegotiation is permitted because this does not add any +additional security issues: during an attack clients do not see any +renegotiations anyway. +.PP +As more servers become patched the option \fB\s-1SSL_OP_LEGACY_SERVER_CONNECT\s0\fR will +\&\fBnot\fR be set by default in a future version of OpenSSL. +.PP +OpenSSL client applications wishing to ensure they can connect to unpatched +servers should always \fBset\fR \fB\s-1SSL_OP_LEGACY_SERVER_CONNECT\s0\fR +.PP +OpenSSL client applications that want to ensure they can \fBnot\fR connect to +unpatched servers (and thus avoid any security issues) should always \fBclear\fR +\&\fB\s-1SSL_OP_LEGACY_SERVER_CONNECT\s0\fR using \fBSSL_CTX_clear_options()\fR or +\&\fBSSL_clear_options()\fR. +.PP +The difference between the \fB\s-1SSL_OP_LEGACY_SERVER_CONNECT\s0\fR and +\&\fB\s-1SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION\s0\fR options is that +\&\fB\s-1SSL_OP_LEGACY_SERVER_CONNECT\s0\fR enables initial connections and secure +renegotiation between OpenSSL clients and unpatched servers \fBonly\fR, while +\&\fB\s-1SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION\s0\fR allows initial connections +and renegotiation between OpenSSL and unpatched clients or servers. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_CTX_set_options()\fR and \fBSSL_set_options()\fR return the new options bitmask +after adding \fBoptions\fR. +.PP +\&\fBSSL_CTX_clear_options()\fR and \fBSSL_clear_options()\fR return the new options bitmask +after clearing \fBoptions\fR. +.PP +\&\fBSSL_CTX_get_options()\fR and \fBSSL_get_options()\fR return the current bitmask. +.PP +\&\fBSSL_get_secure_renegotiation_support()\fR returns 1 is the peer supports +secure renegotiation and 0 if it does not. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), \fBSSL_new\fR\|(3), \fBSSL_clear\fR\|(3), +\&\fBSSL_CTX_set_tmp_dh_callback\fR\|(3), +\&\fBSSL_CTX_set_min_proto_version\fR\|(3), +\&\fBdhparam\fR\|(1) +.SH "HISTORY" +.IX Header "HISTORY" +The attempt to always try to use secure renegotiation was added in +OpenSSL 0.9.8m. +.PP +The \fB\s-1SSL_OP_PRIORITIZE_CHACHA\s0\fR and \fB\s-1SSL_OP_NO_RENEGOTIATION\s0\fR options +were added in OpenSSL 1.1.1. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2001\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_psk_client_callback.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_psk_client_callback.3 new file mode 100644 index 00000000..a32c90d3 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_psk_client_callback.3 @@ -0,0 +1,292 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CTX_SET_PSK_CLIENT_CALLBACK 3" +.TH SSL_CTX_SET_PSK_CLIENT_CALLBACK 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_psk_client_cb_func, SSL_psk_use_session_cb_func, SSL_CTX_set_psk_client_callback, SSL_set_psk_client_callback, SSL_CTX_set_psk_use_session_callback, SSL_set_psk_use_session_callback \&\- set PSK client callback +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& typedef int (*SSL_psk_use_session_cb_func)(SSL *ssl, const EVP_MD *md, +\& const unsigned char **id, +\& size_t *idlen, +\& SSL_SESSION **sess); +\& +\& +\& void SSL_CTX_set_psk_use_session_callback(SSL_CTX *ctx, +\& SSL_psk_use_session_cb_func cb); +\& void SSL_set_psk_use_session_callback(SSL *s, SSL_psk_use_session_cb_func cb); +\& +\& +\& typedef unsigned int (*SSL_psk_client_cb_func)(SSL *ssl, +\& const char *hint, +\& char *identity, +\& unsigned int max_identity_len, +\& unsigned char *psk, +\& unsigned int max_psk_len); +\& +\& void SSL_CTX_set_psk_client_callback(SSL_CTX *ctx, SSL_psk_client_cb_func cb); +\& void SSL_set_psk_client_callback(SSL *ssl, SSL_psk_client_cb_func cb); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +A client application wishing to use TLSv1.3 PSKs should use either +\&\fBSSL_CTX_set_psk_use_session_callback()\fR or \fBSSL_set_psk_use_session_callback()\fR as +appropriate. These functions cannot be used for TLSv1.2 and below PSKs. +.PP +The callback function is given a pointer to the \s-1SSL\s0 connection in \fBssl\fR. +.PP +The first time the callback is called for a connection the \fBmd\fR parameter is +\&\s-1NULL.\s0 In some circumstances the callback will be called a second time. In that +case the server will have specified a ciphersuite to use already and the \s-1PSK\s0 +must be compatible with the digest for that ciphersuite. The digest will be +given in \fBmd\fR. The \s-1PSK\s0 returned by the callback is allowed to be different +between the first and second time it is called. +.PP +On successful completion the callback must store a pointer to an identifier for +the \s-1PSK\s0 in \fB*id\fR. The identifier length in bytes should be stored in \fB*idlen\fR. +The memory pointed to by \fB*id\fR remains owned by the application and should +be freed by it as required at any point after the handshake is complete. +.PP +Additionally the callback should store a pointer to an \s-1SSL_SESSION\s0 object in +\&\fB*sess\fR. This is used as the basis for the \s-1PSK,\s0 and should, at a minimum, have +the following fields set: +.IP "The master key" 4 +.IX Item "The master key" +This can be set via a call to \fBSSL_SESSION_set1_master_key\fR\|(3). +.IP "A ciphersuite" 4 +.IX Item "A ciphersuite" +Only the handshake digest associated with the ciphersuite is relevant for the +\&\s-1PSK\s0 (the server may go on to negotiate any ciphersuite which is compatible with +the digest). The application can use any TLSv1.3 ciphersuite. If \fBmd\fR is +not \s-1NULL\s0 the handshake digest for the ciphersuite should be the same. +The ciphersuite can be set via a call to <\fBSSL_SESSION_set_cipher\fR\|(3)>. The +handshake digest of an \s-1SSL_CIPHER\s0 object can be checked using +<\fBSSL_CIPHER_get_handshake_digest\fR\|(3)>. +.IP "The protocol version" 4 +.IX Item "The protocol version" +This can be set via a call to \fBSSL_SESSION_set_protocol_version\fR\|(3) and should +be \s-1TLS1_3_VERSION.\s0 +.PP +Additionally the maximum early data value should be set via a call to +\&\fBSSL_SESSION_set_max_early_data\fR\|(3) if the \s-1PSK\s0 will be used for sending early +data. +.PP +Alternatively an \s-1SSL_SESSION\s0 created from a previous non-PSK handshake may also +be used as the basis for a \s-1PSK.\s0 +.PP +Ownership of the \s-1SSL_SESSION\s0 object is passed to the OpenSSL library and so it +should not be freed by the application. +.PP +It is also possible for the callback to succeed but not supply a \s-1PSK.\s0 In this +case no \s-1PSK\s0 will be sent to the server but the handshake will continue. To do +this the callback should return successfully and ensure that \fB*sess\fR is +\&\s-1NULL.\s0 The contents of \fB*id\fR and \fB*idlen\fR will be ignored. +.PP +A client application wishing to use \s-1PSK\s0 ciphersuites for TLSv1.2 and below must +provide a different callback function. This function will be called when the +client is sending the ClientKeyExchange message to the server. +.PP +The purpose of the callback function is to select the \s-1PSK\s0 identity and +the pre-shared key to use during the connection setup phase. +.PP +The callback is set using functions \fBSSL_CTX_set_psk_client_callback()\fR +or \fBSSL_set_psk_client_callback()\fR. The callback function is given the +connection in parameter \fBssl\fR, a \fB\s-1NULL\s0\fR\-terminated \s-1PSK\s0 identity hint +sent by the server in parameter \fBhint\fR, a buffer \fBidentity\fR of +length \fBmax_identity_len\fR bytes where the resulting +\&\fB\s-1NUL\s0\fR\-terminated identity is to be stored, and a buffer \fBpsk\fR of +length \fBmax_psk_len\fR bytes where the resulting pre-shared key is to +be stored. +.PP +The callback for use in TLSv1.2 will also work in TLSv1.3 although it is +recommended to use \fBSSL_CTX_set_psk_use_session_callback()\fR +or \fBSSL_set_psk_use_session_callback()\fR for this purpose instead. If TLSv1.3 has +been negotiated then OpenSSL will first check to see if a callback has been set +via \fBSSL_CTX_set_psk_use_session_callback()\fR or \fBSSL_set_psk_use_session_callback()\fR +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 \fBSSL_CTX_set_psk_client_callback()\fR or +\&\fBSSL_set_psk_client_callback()\fR and use that. In this case the \fBhint\fR value will +always be \s-1NULL\s0 and the handshake digest will default to \s-1SHA\-256\s0 for any returned +\&\s-1PSK.\s0 +.SH "NOTES" +.IX Header "NOTES" +Note that parameter \fBhint\fR given to the callback may be \fB\s-1NULL\s0\fR. +.PP +A connection established via a TLSv1.3 \s-1PSK\s0 will appear as if session resumption +has occurred so that \fBSSL_session_reused\fR\|(3) will return true. +.PP +There are no known security issues with sharing the same \s-1PSK\s0 between TLSv1.2 (or +below) and TLSv1.3. However the \s-1RFC\s0 has this note of caution: +.PP +\&\*(L"While there is no known way in which the same \s-1PSK\s0 might produce related output +in both versions, only limited analysis has been done. Implementations can +ensure safety from cross-protocol related output by not reusing PSKs between +\&\s-1TLS 1.3\s0 and \s-1TLS 1.2.\*(R"\s0 +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +Return values from the \fBSSL_psk_client_cb_func\fR callback are interpreted as +follows: +.PP +On success (callback found a \s-1PSK\s0 identity and a pre-shared key to use) +the length (> 0) of \fBpsk\fR in bytes is returned. +.PP +Otherwise or on errors the callback should return 0. In this case +the connection setup fails. +.PP +The SSL_psk_use_session_cb_func callback should return 1 on success or 0 on +failure. In the event of failure the connection setup fails. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBSSL_CTX_set_psk_find_session_callback\fR\|(3), +\&\fBSSL_set_psk_find_session_callback\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +\&\fBSSL_CTX_set_psk_use_session_callback()\fR and \fBSSL_set_psk_use_session_callback()\fR +were added in OpenSSL 1.1.1. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2006\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_quiet_shutdown.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_quiet_shutdown.3 new file mode 100644 index 00000000..4421cb79 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_quiet_shutdown.3 @@ -0,0 +1,203 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CTX_SET_QUIET_SHUTDOWN 3" +.TH SSL_CTX_SET_QUIET_SHUTDOWN 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_CTX_set_quiet_shutdown, SSL_CTX_get_quiet_shutdown, SSL_set_quiet_shutdown, SSL_get_quiet_shutdown \- manipulate shutdown behaviour +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& void SSL_CTX_set_quiet_shutdown(SSL_CTX *ctx, int mode); +\& int SSL_CTX_get_quiet_shutdown(const SSL_CTX *ctx); +\& +\& void SSL_set_quiet_shutdown(SSL *ssl, int mode); +\& int SSL_get_quiet_shutdown(const SSL *ssl); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_CTX_set_quiet_shutdown()\fR sets the \*(L"quiet shutdown\*(R" flag for \fBctx\fR to be +\&\fBmode\fR. \s-1SSL\s0 objects created from \fBctx\fR inherit the \fBmode\fR valid at the time +\&\fBSSL_new\fR\|(3) is called. \fBmode\fR may be 0 or 1. +.PP +\&\fBSSL_CTX_get_quiet_shutdown()\fR returns the \*(L"quiet shutdown\*(R" setting of \fBctx\fR. +.PP +\&\fBSSL_set_quiet_shutdown()\fR sets the \*(L"quiet shutdown\*(R" flag for \fBssl\fR to be +\&\fBmode\fR. The setting stays valid until \fBssl\fR is removed with +\&\fBSSL_free\fR\|(3) or \fBSSL_set_quiet_shutdown()\fR is called again. +It is not changed when \fBSSL_clear\fR\|(3) is called. +\&\fBmode\fR may be 0 or 1. +.PP +\&\fBSSL_get_quiet_shutdown()\fR returns the \*(L"quiet shutdown\*(R" setting of \fBssl\fR. +.SH "NOTES" +.IX Header "NOTES" +Normally when a \s-1SSL\s0 connection is finished, the parties must send out +close_notify alert messages using \fBSSL_shutdown\fR\|(3) +for a clean shutdown. +.PP +When setting the \*(L"quiet shutdown\*(R" flag to 1, \fBSSL_shutdown\fR\|(3) +will set the internal flags to SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN. +(\fBSSL_shutdown\fR\|(3) then behaves like +\&\fBSSL_set_shutdown\fR\|(3) called with +SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN.) +The session is thus considered to be shutdown, but no close_notify alert +is sent to the peer. This behaviour violates the \s-1TLS\s0 standard. +.PP +The default is normal shutdown behaviour as described by the \s-1TLS\s0 standard. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_CTX_set_quiet_shutdown()\fR and \fBSSL_set_quiet_shutdown()\fR do not return +diagnostic information. +.PP +\&\fBSSL_CTX_get_quiet_shutdown()\fR and SSL_get_quiet_shutdown return the current +setting. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), \fBSSL_shutdown\fR\|(3), +\&\fBSSL_set_shutdown\fR\|(3), \fBSSL_new\fR\|(3), +\&\fBSSL_clear\fR\|(3), \fBSSL_free\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2001\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_read_ahead.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_read_ahead.3 new file mode 100644 index 00000000..50c19e47 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_read_ahead.3 @@ -0,0 +1,202 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CTX_SET_READ_AHEAD 3" +.TH SSL_CTX_SET_READ_AHEAD 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_CTX_set_read_ahead, SSL_CTX_get_read_ahead, SSL_set_read_ahead, SSL_get_read_ahead, SSL_CTX_get_default_read_ahead \&\- manage whether to read as many input bytes as possible +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& void SSL_set_read_ahead(SSL *s, int yes); +\& int SSL_get_read_ahead(const SSL *s); +\& +\& SSL_CTX_set_read_ahead(SSL_CTX *ctx, int yes); +\& long SSL_CTX_get_read_ahead(SSL_CTX *ctx); +\& long SSL_CTX_get_default_read_ahead(SSL_CTX *ctx); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_CTX_set_read_ahead()\fR and \fBSSL_set_read_ahead()\fR set whether we should read as +many input bytes as possible (for non-blocking reads) or not. For example if +\&\fBx\fR bytes are currently required by OpenSSL, but \fBy\fR bytes are available from +the underlying \s-1BIO\s0 (where \fBy\fR > \fBx\fR), then OpenSSL will read all \fBy\fR bytes +into its buffer (providing that the buffer is large enough) if reading ahead is +on, or \fBx\fR bytes otherwise. +Setting the parameter \fByes\fR to 0 turns reading ahead is off, other values turn +it on. +\&\fBSSL_CTX_set_default_read_ahead()\fR is identical to \fBSSL_CTX_set_read_ahead()\fR. +.PP +\&\fBSSL_CTX_get_read_ahead()\fR and \fBSSL_get_read_ahead()\fR indicate whether reading +ahead has been set or not. +\&\fBSSL_CTX_get_default_read_ahead()\fR is identical to \fBSSL_CTX_get_read_ahead()\fR. +.SH "NOTES" +.IX Header "NOTES" +These functions have no impact when used with \s-1DTLS.\s0 The return values for +\&\fBSSL_CTX_get_read_head()\fR and \fBSSL_get_read_ahead()\fR are undefined for \s-1DTLS.\s0 Setting +\&\fBread_ahead\fR can impact the behaviour of the \fBSSL_pending()\fR function +(see \fBSSL_pending\fR\|(3)). +.PP +Since \fBSSL_read()\fR can return \fB\s-1SSL_ERROR_WANT_READ\s0\fR for non-application data +records, and \fBSSL_has_pending()\fR can't tell the difference between processed and +unprocessed data, it's recommended that if read ahead is turned on that +\&\fB\s-1SSL_MODE_AUTO_RETRY\s0\fR is not turned off using \fBSSL_CTX_clear_mode()\fR. +That will prevent getting \fB\s-1SSL_ERROR_WANT_READ\s0\fR when there is still a complete +record available that hasn't been processed. +.PP +If the application wants to continue to use the underlying transport (e.g. \s-1TCP\s0 +connection) after the \s-1SSL\s0 connection is finished using \fBSSL_shutdown()\fR reading +ahead should be turned off. +Otherwise the \s-1SSL\s0 structure might read data that it shouldn't. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_get_read_ahead()\fR and \fBSSL_CTX_get_read_ahead()\fR return 0 if reading ahead is off, +and non zero otherwise. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), \fBSSL_pending\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2015\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_record_padding_callback.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_record_padding_callback.3 new file mode 100644 index 00000000..e8276205 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_record_padding_callback.3 @@ -0,0 +1,219 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CTX_SET_RECORD_PADDING_CALLBACK 3" +.TH SSL_CTX_SET_RECORD_PADDING_CALLBACK 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_CTX_set_record_padding_callback, SSL_set_record_padding_callback, SSL_CTX_set_record_padding_callback_arg, SSL_set_record_padding_callback_arg, SSL_CTX_get_record_padding_callback_arg, SSL_get_record_padding_callback_arg, SSL_CTX_set_block_padding, SSL_set_block_padding \- install callback to specify TLS 1.3 record padding +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& void SSL_CTX_set_record_padding_callback(SSL_CTX *ctx, size_t (*cb)(SSL *s, int type, size_t len, void *arg)); +\& void SSL_set_record_padding_callback(SSL *ssl, size_t (*cb)(SSL *s, int type, size_t len, void *arg)); +\& +\& void SSL_CTX_set_record_padding_callback_arg(SSL_CTX *ctx, void *arg); +\& void *SSL_CTX_get_record_padding_callback_arg(const SSL_CTX *ctx); +\& +\& void SSL_set_record_padding_callback_arg(SSL *ssl, void *arg); +\& void *SSL_get_record_padding_callback_arg(const SSL *ssl); +\& +\& int SSL_CTX_set_block_padding(SSL_CTX *ctx, size_t block_size); +\& int SSL_set_block_padding(SSL *ssl, size_t block_size); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_CTX_set_record_padding_callback()\fR or \fBSSL_set_record_padding_callback()\fR +can be used to assign a callback function \fIcb\fR to specify the padding +for \s-1TLS 1.3\s0 records. The value set in \fBctx\fR is copied to a new \s-1SSL\s0 by \fBSSL_new()\fR. +.PP +\&\fBSSL_CTX_set_record_padding_callback_arg()\fR and \fBSSL_set_record_padding_callback_arg()\fR +assign a value \fBarg\fR that is passed to the callback when it is invoked. The value +set in \fBctx\fR is copied to a new \s-1SSL\s0 by \fBSSL_new()\fR. +.PP +\&\fBSSL_CTX_get_record_padding_callback_arg()\fR and \fBSSL_get_record_padding_callback_arg()\fR +retrieve the \fBarg\fR value that is passed to the callback. +.PP +\&\fBSSL_CTX_set_block_padding()\fR and \fBSSL_set_block_padding()\fR pads the record to a multiple +of the \fBblock_size\fR. A \fBblock_size\fR of 0 or 1 disables block padding. The limit of +\&\fBblock_size\fR is \s-1SSL3_RT_MAX_PLAIN_LENGTH.\s0 +.PP +The callback is invoked for every record before encryption. +The \fBtype\fR parameter is the \s-1TLS\s0 record type that is being processed; may be +one of \s-1SSL3_RT_APPLICATION_DATA, SSL3_RT_HANDSHAKE,\s0 or \s-1SSL3_RT_ALERT.\s0 +The \fBlen\fR parameter is the current plaintext length of the record before encryption. +The \fBarg\fR parameter is the value set via \fBSSL_CTX_set_record_padding_callback_arg()\fR +or \fBSSL_set_record_padding_callback_arg()\fR. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +The \fBSSL_CTX_get_record_padding_callback_arg()\fR and \fBSSL_get_record_padding_callback_arg()\fR +functions return the \fBarg\fR value assigned in the corresponding set functions. +.PP +The \fBSSL_CTX_set_block_padding()\fR and \fBSSL_set_block_padding()\fR functions return 1 on success +or 0 if \fBblock_size\fR is too large. +.PP +The \fBcb\fR returns the number of padding bytes to add to the record. A return of 0 +indicates no padding will be added. A return value that causes the record to +exceed the maximum record size (\s-1SSL3_RT_MAX_PLAIN_LENGTH\s0) will pad out to the +maximum record size. +.SH "NOTES" +.IX Header "NOTES" +The default behavior is to add no padding to the record. +.PP +A user-supplied padding callback function will override the behavior set by +\&\fBSSL_set_block_padding()\fR or \fBSSL_CTX_set_block_padding()\fR. Setting the user-supplied +callback to \s-1NULL\s0 will restore the configured block padding behavior. +.PP +These functions only apply to \s-1TLS 1.3\s0 records being written. +.PP +Padding bytes are not added in constant-time. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), \fBSSL_new\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +The record padding \s-1API\s0 was added for \s-1TLS 1.3\s0 support in OpenSSL 1.1.1. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_security_level.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_security_level.3 new file mode 100644 index 00000000..10224d96 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_security_level.3 @@ -0,0 +1,309 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CTX_SET_SECURITY_LEVEL 3" +.TH SSL_CTX_SET_SECURITY_LEVEL 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_CTX_set_security_level, SSL_set_security_level, SSL_CTX_get_security_level, SSL_get_security_level, SSL_CTX_set_security_callback, SSL_set_security_callback, SSL_CTX_get_security_callback, SSL_get_security_callback, SSL_CTX_set0_security_ex_data, SSL_set0_security_ex_data, SSL_CTX_get0_security_ex_data, SSL_get0_security_ex_data \- SSL/TLS security framework +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& void SSL_CTX_set_security_level(SSL_CTX *ctx, int level); +\& void SSL_set_security_level(SSL *s, int level); +\& +\& int SSL_CTX_get_security_level(const SSL_CTX *ctx); +\& int SSL_get_security_level(const SSL *s); +\& +\& void SSL_CTX_set_security_callback(SSL_CTX *ctx, +\& int (*cb)(SSL *s, SSL_CTX *ctx, int op, +\& int bits, int nid, +\& void *other, void *ex)); +\& +\& void SSL_set_security_callback(SSL *s, int (*cb)(SSL *s, SSL_CTX *ctx, int op, +\& int bits, int nid, +\& void *other, void *ex)); +\& +\& int (*SSL_CTX_get_security_callback(const SSL_CTX *ctx))(SSL *s, SSL_CTX *ctx, int op, +\& int bits, int nid, void *other, +\& void *ex); +\& int (*SSL_get_security_callback(const SSL *s))(SSL *s, SSL_CTX *ctx, int op, +\& int bits, int nid, void *other, +\& void *ex); +\& +\& void SSL_CTX_set0_security_ex_data(SSL_CTX *ctx, void *ex); +\& void SSL_set0_security_ex_data(SSL *s, void *ex); +\& +\& void *SSL_CTX_get0_security_ex_data(const SSL_CTX *ctx); +\& void *SSL_get0_security_ex_data(const SSL *s); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The functions \fBSSL_CTX_set_security_level()\fR and \fBSSL_set_security_level()\fR set +the security level to \fBlevel\fR. If not set the library default security level +is used. +.PP +The functions \fBSSL_CTX_get_security_level()\fR and \fBSSL_get_security_level()\fR +retrieve the current security level. +.PP +\&\fBSSL_CTX_set_security_callback()\fR, \fBSSL_set_security_callback()\fR, +\&\fBSSL_CTX_get_security_callback()\fR and \fBSSL_get_security_callback()\fR get or set +the security callback associated with \fBctx\fR or \fBs\fR. If not set a default +security callback is used. The meaning of the parameters and the behaviour +of the default callbacks is described below. +.PP +\&\fBSSL_CTX_set0_security_ex_data()\fR, \fBSSL_set0_security_ex_data()\fR, +\&\fBSSL_CTX_get0_security_ex_data()\fR and \fBSSL_get0_security_ex_data()\fR set the +extra data pointer passed to the \fBex\fR parameter of the callback. This +value is passed to the callback verbatim and can be set to any convenient +application specific value. +.SH "DEFAULT CALLBACK BEHAVIOUR" +.IX Header "DEFAULT CALLBACK BEHAVIOUR" +If an application doesn't set its own security callback the default +callback is used. It is intended to provide sane defaults. The meaning +of each level is described below. +.IP "\fBLevel 0\fR" 4 +.IX Item "Level 0" +Everything is permitted. This retains compatibility with previous versions of +OpenSSL. +.IP "\fBLevel 1\fR" 4 +.IX Item "Level 1" +The security level corresponds to a minimum of 80 bits of security. Any +parameters offering below 80 bits of security are excluded. As a result \s-1RSA, +DSA\s0 and \s-1DH\s0 keys shorter than 1024 bits and \s-1ECC\s0 keys shorter than 160 bits +are prohibited. All export cipher suites are prohibited since they all offer +less than 80 bits of security. \s-1SSL\s0 version 2 is prohibited. Any cipher suite +using \s-1MD5\s0 for the \s-1MAC\s0 is also prohibited. +.IP "\fBLevel 2\fR" 4 +.IX Item "Level 2" +Security level set to 112 bits of security. As a result \s-1RSA, DSA\s0 and \s-1DH\s0 keys +shorter than 2048 bits and \s-1ECC\s0 keys shorter than 224 bits are prohibited. +In addition to the level 1 exclusions any cipher suite using \s-1RC4\s0 is also +prohibited. \s-1SSL\s0 version 3 is also not allowed. Compression is disabled. +.IP "\fBLevel 3\fR" 4 +.IX Item "Level 3" +Security level set to 128 bits of security. As a result \s-1RSA, DSA\s0 and \s-1DH\s0 keys +shorter than 3072 bits and \s-1ECC\s0 keys shorter than 256 bits are prohibited. +In addition to the level 2 exclusions cipher suites not offering forward +secrecy are prohibited. \s-1TLS\s0 versions below 1.1 are not permitted. Session +tickets are disabled. +.IP "\fBLevel 4\fR" 4 +.IX Item "Level 4" +Security level set to 192 bits of security. As a result \s-1RSA, DSA\s0 and +\&\s-1DH\s0 keys shorter than 7680 bits and \s-1ECC\s0 keys shorter than 384 bits are +prohibited. Cipher suites using \s-1SHA1\s0 for the \s-1MAC\s0 are prohibited. \s-1TLS\s0 +versions below 1.2 are not permitted. +.IP "\fBLevel 5\fR" 4 +.IX Item "Level 5" +Security level set to 256 bits of security. As a result \s-1RSA, DSA\s0 and \s-1DH\s0 keys +shorter than 15360 bits and \s-1ECC\s0 keys shorter than 512 bits are prohibited. +.SH "APPLICATION DEFINED SECURITY CALLBACKS" +.IX Header "APPLICATION DEFINED SECURITY CALLBACKS" +\&\fIDocumentation to be provided.\fR +.SH "NOTES" +.IX Header "NOTES" +\&\fB\s-1WARNING\s0\fR at this time setting the security level higher than 1 for +general internet use is likely to cause \fBconsiderable\fR interoperability +issues and is not recommended. This is because the \fB\s-1SHA1\s0\fR algorithm +is very widely used in certificates and will be rejected at levels +higher than 1 because it only offers 80 bits of security. +.PP +The default security level can be configured when OpenSSL is compiled by +setting \fB\-DOPENSSL_TLS_SECURITY_LEVEL=level\fR. If not set then 1 is used. +.PP +The security framework disables or reject parameters inconsistent with the +set security level. In the past this was difficult as applications had to set +a number of distinct parameters (supported ciphers, supported curves supported +signature algorithms) to achieve this end and some cases (\s-1DH\s0 parameter size +for example) could not be checked at all. +.PP +By setting an appropriate security level much of this complexity can be +avoided. +.PP +The bits of security limits affect all relevant parameters including +cipher suite encryption algorithms, supported \s-1ECC\s0 curves, supported +signature algorithms, \s-1DH\s0 parameter sizes, certificate key sizes and +signature algorithms. This limit applies no matter what other custom +settings an application has set: so if the cipher suite is set to \fB\s-1ALL\s0\fR +then only cipher suites consistent with the security level are permissible. +.PP +See \s-1SP800\-57\s0 for how the security limits are related to individual +algorithms. +.PP +Some security levels require large key sizes for non-ECC public key +algorithms which can severely degrade performance. For example 256 bits +of security requires the use of \s-1RSA\s0 keys of at least 15360 bits in size. +.PP +Some restrictions can be gracefully handled: for example cipher suites +offering insufficient security are not sent by the client and will not +be selected by the server. Other restrictions such as the peer certificate +key size or the \s-1DH\s0 parameter size will abort the handshake with a fatal +alert. +.PP +Attempts to set certificates or parameters with insufficient security are +also blocked. For example trying to set a certificate using a 512 bit \s-1RSA\s0 +key using \fBSSL_CTX_use_certificate()\fR at level 1. Applications which do not +check the return values for errors will misbehave: for example it might +appear that a certificate is not set at all because it had been rejected. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_CTX_set_security_level()\fR and \fBSSL_set_security_level()\fR do not return values. +.PP +\&\fBSSL_CTX_get_security_level()\fR and \fBSSL_get_security_level()\fR return a integer that +represents the security level with \fB\s-1SSL_CTX\s0\fR or \fB\s-1SSL\s0\fR, respectively. +.PP +\&\fBSSL_CTX_set_security_callback()\fR and \fBSSL_set_security_callback()\fR do not return +values. +.PP +\&\fBSSL_CTX_get_security_callback()\fR and \fBSSL_get_security_callback()\fR return the pointer +to the security callback or \s-1NULL\s0 if the callback is not set. +.PP +\&\fBSSL_CTX_get0_security_ex_data()\fR and \fBSSL_get0_security_ex_data()\fR return the extra +data pointer or \s-1NULL\s0 if the ex data is not set. +.SH "HISTORY" +.IX Header "HISTORY" +These functions were added in OpenSSL 1.1.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2014\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_session_cache_mode.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_session_cache_mode.3 new file mode 100644 index 00000000..d5a42665 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_session_cache_mode.3 @@ -0,0 +1,258 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CTX_SET_SESSION_CACHE_MODE 3" +.TH SSL_CTX_SET_SESSION_CACHE_MODE 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_CTX_set_session_cache_mode, SSL_CTX_get_session_cache_mode \- enable/disable session caching +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& long SSL_CTX_set_session_cache_mode(SSL_CTX ctx, long mode); +\& long SSL_CTX_get_session_cache_mode(SSL_CTX ctx); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_CTX_set_session_cache_mode()\fR enables/disables session caching +by setting the operational mode for \fBctx\fR to . +.PP +\&\fBSSL_CTX_get_session_cache_mode()\fR returns the currently used cache mode. +.SH "NOTES" +.IX Header "NOTES" +The OpenSSL library can store/retrieve \s-1SSL/TLS\s0 sessions for later reuse. +The sessions can be held in memory for each \fBctx\fR, if more than one +\&\s-1SSL_CTX\s0 object is being maintained, the sessions are unique for each \s-1SSL_CTX\s0 +object. +.PP +In order to reuse a session, a client must send the session's id to the +server. It can only send exactly one id. The server then either +agrees to reuse the session or it starts a full handshake (to create a new +session). +.PP +A server will look up the session in its internal session storage. If the +session is not found in internal storage or lookups for the internal storage +have been deactivated (\s-1SSL_SESS_CACHE_NO_INTERNAL_LOOKUP\s0), the server will try +the external storage if available. +.PP +Since a client may try to reuse a session intended for use in a different +context, the session id context must be set by the server (see +\&\fBSSL_CTX_set_session_id_context\fR\|(3)). +.PP +The following session cache modes and modifiers are available: +.IP "\s-1SSL_SESS_CACHE_OFF\s0" 4 +.IX Item "SSL_SESS_CACHE_OFF" +No session caching for client or server takes place. +.IP "\s-1SSL_SESS_CACHE_CLIENT\s0" 4 +.IX Item "SSL_SESS_CACHE_CLIENT" +Client sessions are added to the session cache. As there is no reliable way +for the OpenSSL library to know whether a session should be reused or which +session to choose (due to the abstract \s-1BIO\s0 layer the \s-1SSL\s0 engine does not +have details about the connection), the application must select the session +to be reused by using the \fBSSL_set_session\fR\|(3) +function. This option is not activated by default. +.IP "\s-1SSL_SESS_CACHE_SERVER\s0" 4 +.IX Item "SSL_SESS_CACHE_SERVER" +Server sessions are added to the session cache. When a client proposes a +session to be reused, the server looks for the corresponding session in (first) +the internal session cache (unless \s-1SSL_SESS_CACHE_NO_INTERNAL_LOOKUP\s0 is set), +then (second) in the external cache if available. If the session is found, the +server will try to reuse the session. This is the default. +.IP "\s-1SSL_SESS_CACHE_BOTH\s0" 4 +.IX Item "SSL_SESS_CACHE_BOTH" +Enable both \s-1SSL_SESS_CACHE_CLIENT\s0 and \s-1SSL_SESS_CACHE_SERVER\s0 at the same time. +.IP "\s-1SSL_SESS_CACHE_NO_AUTO_CLEAR\s0" 4 +.IX Item "SSL_SESS_CACHE_NO_AUTO_CLEAR" +Normally the session cache is checked for expired sessions every +255 connections using the +\&\fBSSL_CTX_flush_sessions\fR\|(3) function. Since +this may lead to a delay which cannot be controlled, the automatic +flushing may be disabled and +\&\fBSSL_CTX_flush_sessions\fR\|(3) can be called +explicitly by the application. +.IP "\s-1SSL_SESS_CACHE_NO_INTERNAL_LOOKUP\s0" 4 +.IX Item "SSL_SESS_CACHE_NO_INTERNAL_LOOKUP" +By setting this flag, session-resume operations in an \s-1SSL/TLS\s0 server will not +automatically look up sessions in the internal cache, even if sessions are +automatically stored there. If external session caching callbacks are in use, +this flag guarantees that all lookups are directed to the external cache. +As automatic lookup only applies for \s-1SSL/TLS\s0 servers, the flag has no effect on +clients. +.IP "\s-1SSL_SESS_CACHE_NO_INTERNAL_STORE\s0" 4 +.IX Item "SSL_SESS_CACHE_NO_INTERNAL_STORE" +Depending on the presence of \s-1SSL_SESS_CACHE_CLIENT\s0 and/or \s-1SSL_SESS_CACHE_SERVER,\s0 +sessions negotiated in an \s-1SSL/TLS\s0 handshake may be cached for possible reuse. +Normally a new session is added to the internal cache as well as any external +session caching (callback) that is configured for the \s-1SSL_CTX.\s0 This flag will +prevent sessions being stored in the internal cache (though the application can +add them manually using \fBSSL_CTX_add_session\fR\|(3)). Note: +in any \s-1SSL/TLS\s0 servers where external caching is configured, any successful +session lookups in the external cache (ie. 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. +.IP "\s-1SSL_SESS_CACHE_NO_INTERNAL\s0" 4 +.IX Item "SSL_SESS_CACHE_NO_INTERNAL" +Enable both \s-1SSL_SESS_CACHE_NO_INTERNAL_LOOKUP\s0 and +\&\s-1SSL_SESS_CACHE_NO_INTERNAL_STORE\s0 at the same time. +.PP +The default mode is \s-1SSL_SESS_CACHE_SERVER.\s0 +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_CTX_set_session_cache_mode()\fR returns the previously set cache mode. +.PP +\&\fBSSL_CTX_get_session_cache_mode()\fR returns the currently set cache mode. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), \fBSSL_set_session\fR\|(3), +\&\fBSSL_session_reused\fR\|(3), +\&\fBSSL_CTX_add_session\fR\|(3), +\&\fBSSL_CTX_sess_number\fR\|(3), +\&\fBSSL_CTX_sess_set_cache_size\fR\|(3), +\&\fBSSL_CTX_sess_set_get_cb\fR\|(3), +\&\fBSSL_CTX_set_session_id_context\fR\|(3), +\&\fBSSL_CTX_set_timeout\fR\|(3), +\&\fBSSL_CTX_flush_sessions\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2001\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_session_id_context.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_session_id_context.3 new file mode 100644 index 00000000..79e5b307 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_session_id_context.3 @@ -0,0 +1,215 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CTX_SET_SESSION_ID_CONTEXT 3" +.TH SSL_CTX_SET_SESSION_ID_CONTEXT 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_CTX_set_session_id_context, SSL_set_session_id_context \- set context within which session can be reused (server side only) +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int SSL_CTX_set_session_id_context(SSL_CTX *ctx, const unsigned char *sid_ctx, +\& unsigned int sid_ctx_len); +\& int SSL_set_session_id_context(SSL *ssl, const unsigned char *sid_ctx, +\& unsigned int sid_ctx_len); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_CTX_set_session_id_context()\fR sets the context \fBsid_ctx\fR of length +\&\fBsid_ctx_len\fR within which a session can be reused for the \fBctx\fR object. +.PP +\&\fBSSL_set_session_id_context()\fR sets the context \fBsid_ctx\fR of length +\&\fBsid_ctx_len\fR within which a session can be reused for the \fBssl\fR object. +.SH "NOTES" +.IX Header "NOTES" +Sessions are generated within a certain context. When exporting/importing +sessions with \fBi2d_SSL_SESSION\fR/\fBd2i_SSL_SESSION\fR 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 +must set its own session id context \fBsid_ctx\fR which is used to distinguish +the contexts and is stored in exported sessions. The \fBsid_ctx\fR can be +any kind of binary data with a given length, it is therefore possible +to use e.g. the name of the application and/or the hostname and/or service +name ... +.PP +The session id context becomes part of the session. The session id context +is set by the \s-1SSL/TLS\s0 server. The \fBSSL_CTX_set_session_id_context()\fR and +\&\fBSSL_set_session_id_context()\fR functions are therefore only useful on the +server side. +.PP +OpenSSL clients will check the session id context returned by the server +when reusing a session. +.PP +The maximum length of the \fBsid_ctx\fR is limited to +\&\fB\s-1SSL_MAX_SID_CTX_LENGTH\s0\fR. +.SH "WARNINGS" +.IX Header "WARNINGS" +If the session id context is not set on an \s-1SSL/TLS\s0 server and client +certificates are used, stored sessions +will not be reused but a fatal error will be flagged and the handshake +will fail. +.PP +If a server returns a different session id context to an OpenSSL client +when reusing a session, an error will be flagged and the handshake will +fail. OpenSSL servers will always return the correct session id context, +as an OpenSSL server checks the session id context itself before reusing +a session as described above. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_CTX_set_session_id_context()\fR and \fBSSL_set_session_id_context()\fR +return the following values: +.IP "0" 4 +The length \fBsid_ctx_len\fR of the session id context \fBsid_ctx\fR exceeded +the maximum allowed length of \fB\s-1SSL_MAX_SID_CTX_LENGTH\s0\fR. The error +is logged to the error stack. +.IP "1" 4 +.IX Item "1" +The operation succeeded. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2001\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_session_ticket_cb.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_session_ticket_cb.3 new file mode 100644 index 00000000..bc3f1e3b --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_session_ticket_cb.3 @@ -0,0 +1,301 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CTX_SET_SESSION_TICKET_CB 3" +.TH SSL_CTX_SET_SESSION_TICKET_CB 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_CTX_set_session_ticket_cb, SSL_SESSION_get0_ticket_appdata, SSL_SESSION_set1_ticket_appdata, SSL_CTX_generate_session_ticket_fn, SSL_CTX_decrypt_session_ticket_fn \- manage session ticket application data +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& typedef int (*SSL_CTX_generate_session_ticket_fn)(SSL *s, void *arg); +\& typedef SSL_TICKET_RETURN (*SSL_CTX_decrypt_session_ticket_fn)(SSL *s, SSL_SESSION *ss, +\& const unsigned char *keyname, +\& size_t keyname_len, +\& SSL_TICKET_STATUS status, +\& void *arg); +\& int SSL_CTX_set_session_ticket_cb(SSL_CTX *ctx, +\& SSL_CTX_generate_session_ticket_fn gen_cb, +\& SSL_CTX_decrypt_session_ticket_fn dec_cb, +\& void *arg); +\& int SSL_SESSION_set1_ticket_appdata(SSL_SESSION *ss, const void *data, size_t len); +\& int SSL_SESSION_get0_ticket_appdata(SSL_SESSION *ss, void **data, size_t *len); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_CTX_set_set_session_ticket_cb()\fR sets the application callbacks \fBgen_cb\fR +and \fBdec_cb\fR that are used by a server to set and get application data stored +with a session, and placed into a session ticket. Either callback function may +be set to \s-1NULL.\s0 The value of \fBarg\fR is passed to the callbacks. +.PP +\&\fBgen_cb\fR is the application defined callback invoked when a session ticket is +about to be created. The application can call \fBSSL_SESSION_set1_ticket_appdata()\fR +at this time to add application data to the session ticket. The value of \fBarg\fR +is the same as that given to \fBSSL_CTX_set_session_ticket_cb()\fR. The \fBgen_cb\fR +callback is defined as type \fBSSL_CTX_generate_session_ticket_fn\fR. +.PP +\&\fBdec_cb\fR is the application defined callback invoked after session ticket +decryption has been attempted and any session ticket application data is +available. If ticket decryption was successful then the \fBss\fR argument contains +the session data. The \fBkeyname\fR and \fBkeyname_len\fR arguments identify the key +used to decrypt the session ticket. The \fBstatus\fR argument is the result of the +ticket decryption. See the \s-1NOTES\s0 section below for further details. The value +of \fBarg\fR is the same as that given to \fBSSL_CTX_set_session_ticket_cb()\fR. The +\&\fBdec_cb\fR callback is defined as type \fBSSL_CTX_decrypt_session_ticket_fn\fR. +.PP +\&\fBSSL_SESSION_set1_ticket_appdata()\fR sets the application data specified by +\&\fBdata\fR and \fBlen\fR into \fBss\fR which is then placed into any generated session +tickets. It can be called at any time before a session ticket is created to +update the data placed into the session ticket. However, given that sessions +and tickets are created by the handshake, the \fBgen_cb\fR is provided to notify +the application that a session ticket is about to be generated. +.PP +\&\fBSSL_SESSION_get0_ticket_appdata()\fR assigns \fBdata\fR to the session ticket +application data and assigns \fBlen\fR to the length of the session ticket +application data from \fBss\fR. The application data can be set via +\&\fBSSL_SESSION_set1_ticket_appdata()\fR or by a session ticket. \s-1NULL\s0 will be assigned +to \fBdata\fR and 0 will be assigned to \fBlen\fR if there is no session ticket +application data. \fBSSL_SESSION_get0_ticket_appdata()\fR can be called any time +after a session has been created. The \fBdec_cb\fR is provided to notify the +application that a session ticket has just been decrypted. +.SH "NOTES" +.IX Header "NOTES" +When the \fBdec_cb\fR callback is invoked, the \s-1SSL_SESSION\s0 \fBss\fR has not yet been +assigned to the \s-1SSL\s0 \fBs\fR. The \fBstatus\fR indicates the result of the ticket +decryption. The callback must check the \fBstatus\fR value before performing any +action, as it is called even if ticket decryption fails. +.PP +The \fBkeyname\fR and \fBkeyname_len\fR arguments to \fBdec_cb\fR may be used to identify +the key that was used to encrypt the session ticket. +.PP +The \fBstatus\fR argument can be any of these values: +.IP "\s-1SSL_TICKET_EMPTY\s0" 4 +.IX Item "SSL_TICKET_EMPTY" +Empty ticket present. No ticket data will be used and a new ticket should be +sent to the client. This only occurs in TLSv1.2 or below. In TLSv1.3 it is not +valid for a client to send an empty ticket. +.IP "\s-1SSL_TICKET_NO_DECRYPT\s0" 4 +.IX Item "SSL_TICKET_NO_DECRYPT" +The ticket couldn't be decrypted. No ticket data will be used and a new ticket +should be sent to the client. +.IP "\s-1SSL_TICKET_SUCCESS\s0" 4 +.IX Item "SSL_TICKET_SUCCESS" +A ticket was successfully decrypted, any session ticket application data should +be available. A new ticket should not be sent to the client. +.IP "\s-1SSL_TICKET_SUCCESS_RENEW\s0" 4 +.IX Item "SSL_TICKET_SUCCESS_RENEW" +Same as \fB\s-1SSL_TICKET_SUCCESS\s0\fR, but a new ticket should be sent to the client. +.PP +The return value can be any of these values: +.IP "\s-1SSL_TICKET_RETURN_ABORT\s0" 4 +.IX Item "SSL_TICKET_RETURN_ABORT" +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 +that all of them are. For this reason this option should be used with caution. +.IP "\s-1SSL_TICKET_RETURN_IGNORE\s0" 4 +.IX Item "SSL_TICKET_RETURN_IGNORE" +Do not use a ticket (if one was available). Do not send a renewed ticket to the +client. +.IP "\s-1SSL_TICKET_RETURN_IGNORE_RENEW\s0" 4 +.IX Item "SSL_TICKET_RETURN_IGNORE_RENEW" +Do not use a ticket (if one was available). Send a renewed ticket to the client. +.Sp +If the callback does not wish to change the default ticket behaviour then it +should return this value if \fBstatus\fR is \fB\s-1SSL_TICKET_EMPTY\s0\fR or +\&\fB\s-1SSL_TICKET_NO_DECRYPT\s0\fR. +.IP "\s-1SSL_TICKET_RETURN_USE\s0" 4 +.IX Item "SSL_TICKET_RETURN_USE" +Use the ticket. Do not send a renewed ticket to the client. It is an error for +the callback to return this value if \fBstatus\fR has a value other than +\&\fB\s-1SSL_TICKET_SUCCESS\s0\fR or \fB\s-1SSL_TICKET_SUCCESS_RENEW\s0\fR. +.Sp +If the callback does not wish to change the default ticket behaviour then it +should return this value if \fBstatus\fR is \fB\s-1SSL_TICKET_SUCCESS\s0\fR. +.IP "\s-1SSL_TICKET_RETURN_USE_RENEW\s0" 4 +.IX Item "SSL_TICKET_RETURN_USE_RENEW" +Use the ticket. Send a renewed ticket to the client. It is an error for the +callback to return this value if \fBstatus\fR has a value other than +\&\fB\s-1SSL_TICKET_SUCCESS\s0\fR or \fB\s-1SSL_TICKET_SUCCESS_RENEW\s0\fR. +.Sp +If the callback does not wish to change the default ticket behaviour then it +should return this value if \fBstatus\fR is \fB\s-1SSL_TICKET_SUCCESS_RENEW\s0\fR. +.PP +If \fBstatus\fR has the value \fB\s-1SSL_TICKET_EMPTY\s0\fR or \fB\s-1SSL_TICKET_NO_DECRYPT\s0\fR then +no session data will be available and the callback must not use the \fBss\fR +argument. If \fBstatus\fR has the value \fB\s-1SSL_TICKET_SUCCESS\s0\fR or +\&\fB\s-1SSL_TICKET_SUCCESS_RENEW\s0\fR then the application can call +\&\fBSSL_SESSION_get0_ticket_appdata()\fR using the session provided in the \fBss\fR +argument to retrieve the application data. +.PP +When the \fBgen_cb\fR callback is invoked, the \fBSSL_get_session()\fR function can be +used to retrieve the \s-1SSL_SESSION\s0 for \fBSSL_SESSION_set1_ticket_appdata()\fR. +.PP +By default, in TLSv1.2 and below, a new session ticket is not issued on a +successful resumption and therefore \fBgen_cb\fR will not be called. In TLSv1.3 the +default behaviour is to always issue a new ticket on resumption. In both cases +this behaviour can be changed if a ticket key callback is in use (see +\&\fBSSL_CTX_set_tlsext_ticket_key_cb\fR\|(3)). +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +The \fBSSL_CTX_set_session_ticket_cb()\fR, \fBSSL_SESSION_set1_ticket_appdata()\fR and +\&\fBSSL_SESSION_get0_ticket_appdata()\fR functions return 1 on success and 0 on +failure. +.PP +The \fBgen_cb\fR callback must return 1 to continue the connection. A return of 0 +will terminate the connection with an \s-1INTERNAL_ERROR\s0 alert. +.PP +The \fBdec_cb\fR callback must return a value as described in \s-1NOTES\s0 above. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), +\&\fBSSL_get_session\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +The \fBSSL_CTX_set_session_ticket_cb()\fR, \fBSSSL_SESSION_set1_ticket_appdata()\fR +and \fBSSL_SESSION_get_ticket_appdata()\fR functions were added in OpenSSL 1.1.1. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_split_send_fragment.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_split_send_fragment.3 new file mode 100644 index 00000000..ba85a7db --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_split_send_fragment.3 @@ -0,0 +1,303 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CTX_SET_SPLIT_SEND_FRAGMENT 3" +.TH SSL_CTX_SET_SPLIT_SEND_FRAGMENT 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_CTX_set_max_send_fragment, SSL_set_max_send_fragment, SSL_CTX_set_split_send_fragment, SSL_set_split_send_fragment, SSL_CTX_set_max_pipelines, SSL_set_max_pipelines, SSL_CTX_set_default_read_buffer_len, SSL_set_default_read_buffer_len, SSL_CTX_set_tlsext_max_fragment_length, SSL_set_tlsext_max_fragment_length, SSL_SESSION_get_max_fragment_length \- Control fragment size settings and pipelining operations +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& long SSL_CTX_set_max_send_fragment(SSL_CTX *ctx, long); +\& long SSL_set_max_send_fragment(SSL *ssl, long m); +\& +\& long SSL_CTX_set_max_pipelines(SSL_CTX *ctx, long m); +\& long SSL_set_max_pipelines(SSL_CTX *ssl, long m); +\& +\& long SSL_CTX_set_split_send_fragment(SSL_CTX *ctx, long m); +\& long SSL_set_split_send_fragment(SSL *ssl, long m); +\& +\& void SSL_CTX_set_default_read_buffer_len(SSL_CTX *ctx, size_t len); +\& void SSL_set_default_read_buffer_len(SSL *s, size_t len); +\& +\& int SSL_CTX_set_tlsext_max_fragment_length(SSL_CTX *ctx, uint8_t mode); +\& int SSL_set_tlsext_max_fragment_length(SSL *ssl, uint8_t mode); +\& uint8_t SSL_SESSION_get_max_fragment_length(SSL_SESSION *session); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +Some engines are able to process multiple simultaneous crypto operations. This +capability could be utilised to parallelise the processing of a single +connection. For example a single write can be split into multiple records and +each one encrypted independently and in parallel. Note: this will only work in +\&\s-1TLS1.1+.\s0 There is no support in SSLv3, TLSv1.0 or \s-1DTLS\s0 (any version). This +capability is known as \*(L"pipelining\*(R" within OpenSSL. +.PP +In order to benefit from the pipelining capability. You need to have an engine +that provides ciphers that support this. The OpenSSL \*(L"dasync\*(R" engine provides +\&\s-1AES128\-SHA\s0 based ciphers that have this capability. However these are for +development and test purposes only. +.PP +\&\fBSSL_CTX_set_max_send_fragment()\fR and \fBSSL_set_max_send_fragment()\fR set the +\&\fBmax_send_fragment\fR parameter for \s-1SSL_CTX\s0 and \s-1SSL\s0 objects respectively. This +value restricts the amount of plaintext bytes that will be sent in any one +\&\s-1SSL/TLS\s0 record. By default its value is \s-1SSL3_RT_MAX_PLAIN_LENGTH\s0 (16384). These +functions will only accept a value in the range 512 \- \s-1SSL3_RT_MAX_PLAIN_LENGTH.\s0 +.PP +\&\fBSSL_CTX_set_max_pipelines()\fR and \fBSSL_set_max_pipelines()\fR set the maximum number +of pipelines that will be used at any one time. This value applies to both +\&\*(L"read\*(R" pipelining and \*(L"write\*(R" pipelining. By default only one pipeline will be +used (i.e. normal non-parallel operation). The number of pipelines set must be +in the range 1 \- \s-1SSL_MAX_PIPELINES\s0 (32). Setting this to a value > 1 will also +automatically turn on \*(L"read_ahead\*(R" (see \fBSSL_CTX_set_read_ahead\fR\|(3)). This is +explained further below. OpenSSL will only every use more than one pipeline if +a cipher suite is negotiated that uses a pipeline capable cipher provided by an +engine. +.PP +Pipelining operates slightly differently for reading encrypted data compared to +writing encrypted data. \fBSSL_CTX_set_split_send_fragment()\fR and +\&\fBSSL_set_split_send_fragment()\fR define how data is split up into pipelines when +writing encrypted data. The number of pipelines used will be determined by the +amount of data provided to the \fBSSL_write_ex()\fR or \fBSSL_write()\fR call divided by +\&\fBsplit_send_fragment\fR. +.PP +For example if \fBsplit_send_fragment\fR is set to 2000 and \fBmax_pipelines\fR is 4 +then: +.PP +SSL_write/SSL_write_ex called with 0\-2000 bytes == 1 pipeline used +.PP +SSL_write/SSL_write_ex called with 2001\-4000 bytes == 2 pipelines used +.PP +SSL_write/SSL_write_ex called with 4001\-6000 bytes == 3 pipelines used +.PP +SSL_write/SSL_write_ex called with 6001+ bytes == 4 pipelines used +.PP +\&\fBsplit_send_fragment\fR must always be less than or equal to +\&\fBmax_send_fragment\fR. By default it is set to be equal to \fBmax_send_fragment\fR. +This will mean that the same number of records will always be created as would +have been created in the non-parallel case, although the data will be +apportioned differently. In the parallel case data will be spread equally +between the pipelines. +.PP +Read pipelining is controlled in a slightly different way than with write +pipelining. While reading we are constrained by the number of records that the +peer (and the network) can provide to us in one go. The more records we can get +in one go the more opportunity we have to parallelise the processing. As noted +above when setting \fBmax_pipelines\fR to a value greater than one, \fBread_ahead\fR +is automatically set. The \fBread_ahead\fR parameter causes OpenSSL to attempt to +read as much data into the read buffer as the network can provide and will fit +into the buffer. Without this set data is read into the read buffer one record +at a time. The more data that can be read, the more opportunity there is for +parallelising the processing at the cost of increased memory overhead per +connection. Setting \fBread_ahead\fR can impact the behaviour of the \fBSSL_pending()\fR +function (see \fBSSL_pending\fR\|(3)). +.PP +The \fBSSL_CTX_set_default_read_buffer_len()\fR and \fBSSL_set_default_read_buffer_len()\fR +functions control the size of the read buffer that will be used. The \fBlen\fR +parameter sets the size of the buffer. The value will only be used if it is +greater than the default that would have been used anyway. The normal default +value depends on a number of factors but it will be at least +\&\s-1SSL3_RT_MAX_PLAIN_LENGTH + SSL3_RT_MAX_ENCRYPTED_OVERHEAD\s0 (16704) bytes. +.PP +\&\fBSSL_CTX_set_tlsext_max_fragment_length()\fR sets the default maximum fragment +length negotiation mode via value \fBmode\fR to \fBctx\fR. +This setting affects only \s-1SSL\s0 instances created after this function is called. +It affects the client-side as only its side may initiate this extension use. +.PP +\&\fBSSL_set_tlsext_max_fragment_length()\fR sets the maximum fragment length +negotiation mode via value \fBmode\fR to \fBssl\fR. +This setting will be used during a handshake when extensions are exchanged +between client and server. +So it only affects \s-1SSL\s0 sessions created after this function is called. +It affects the client-side as only its side may initiate this extension use. +.PP +\&\fBSSL_SESSION_get_max_fragment_length()\fR gets the maximum fragment length +negotiated in \fBsession\fR. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +All non-void functions return 1 on success and 0 on failure. +.SH "NOTES" +.IX Header "NOTES" +The Maximum Fragment Length extension support is optional on the server side. +If the server does not support this extension then +\&\fBSSL_SESSION_get_max_fragment_length()\fR will return: +TLSEXT_max_fragment_length_DISABLED. +.PP +The following modes are available: +.IP "TLSEXT_max_fragment_length_DISABLED" 4 +.IX Item "TLSEXT_max_fragment_length_DISABLED" +Disables Maximum Fragment Length Negotiation (default). +.IP "TLSEXT_max_fragment_length_512" 4 +.IX Item "TLSEXT_max_fragment_length_512" +Sets Maximum Fragment Length to 512 bytes. +.IP "TLSEXT_max_fragment_length_1024" 4 +.IX Item "TLSEXT_max_fragment_length_1024" +Sets Maximum Fragment Length to 1024. +.IP "TLSEXT_max_fragment_length_2048" 4 +.IX Item "TLSEXT_max_fragment_length_2048" +Sets Maximum Fragment Length to 2048. +.IP "TLSEXT_max_fragment_length_4096" 4 +.IX Item "TLSEXT_max_fragment_length_4096" +Sets Maximum Fragment Length to 4096. +.PP +With the exception of \fBSSL_CTX_set_default_read_buffer_len()\fR +\&\fBSSL_set_default_read_buffer_len()\fR, \fBSSL_CTX_set_tlsext_max_fragment_length()\fR, +\&\fBSSL_set_tlsext_max_fragment_length()\fR and \fBSSL_SESSION_get_max_fragment_length()\fR +all these functions are implemented using macros. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBSSL_CTX_set_read_ahead\fR\|(3), \fBSSL_pending\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +The \fBSSL_CTX_set_max_pipelines()\fR, \fBSSL_set_max_pipelines()\fR, +\&\fBSSL_CTX_set_split_send_fragment()\fR, \fBSSL_set_split_send_fragment()\fR, +\&\fBSSL_CTX_set_default_read_buffer_len()\fR and \fBSSL_set_default_read_buffer_len()\fR +functions were added in OpenSSL 1.1.0. +.PP +The \fBSSL_CTX_set_tlsext_max_fragment_length()\fR, \fBSSL_set_tlsext_max_fragment_length()\fR +and \fBSSL_SESSION_get_max_fragment_length()\fR functions were added in OpenSSL 1.1.1. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2016\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_ssl_version.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_ssl_version.3 new file mode 100644 index 00000000..39712589 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_ssl_version.3 @@ -0,0 +1,193 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CTX_SET_SSL_VERSION 3" +.TH SSL_CTX_SET_SSL_VERSION 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_CTX_set_ssl_version, SSL_set_ssl_method, SSL_get_ssl_method \&\- choose a new TLS/SSL method +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int SSL_CTX_set_ssl_version(SSL_CTX *ctx, const SSL_METHOD *method); +\& int SSL_set_ssl_method(SSL *s, const SSL_METHOD *method); +\& const SSL_METHOD *SSL_get_ssl_method(const SSL *ssl); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_CTX_set_ssl_version()\fR sets a new default \s-1TLS/SSL\s0 \fBmethod\fR for \s-1SSL\s0 objects +newly created from this \fBctx\fR. \s-1SSL\s0 objects already created with +\&\fBSSL_new\fR\|(3) are not affected, except when +\&\fBSSL_clear\fR\|(3) is being called. +.PP +\&\fBSSL_set_ssl_method()\fR sets a new \s-1TLS/SSL\s0 \fBmethod\fR for a particular \fBssl\fR +object. It may be reset, when \fBSSL_clear()\fR is called. +.PP +\&\fBSSL_get_ssl_method()\fR returns a function pointer to the \s-1TLS/SSL\s0 method +set in \fBssl\fR. +.SH "NOTES" +.IX Header "NOTES" +The available \fBmethod\fR choices are described in +\&\fBSSL_CTX_new\fR\|(3). +.PP +When \fBSSL_clear\fR\|(3) is called and no session is connected to +an \s-1SSL\s0 object, the method of the \s-1SSL\s0 object is reset to the method currently +set in the corresponding \s-1SSL_CTX\s0 object. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +The following return values can occur for \fBSSL_CTX_set_ssl_version()\fR +and \fBSSL_set_ssl_method()\fR: +.IP "0" 4 +The new choice failed, check the error stack to find out the reason. +.IP "1" 4 +.IX Item "1" +The operation succeeded. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBSSL_CTX_new\fR\|(3), \fBSSL_new\fR\|(3), +\&\fBSSL_clear\fR\|(3), \fBssl\fR\|(7), +\&\fBSSL_set_connect_state\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_stateless_cookie_generate_cb.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_stateless_cookie_generate_cb.3 new file mode 100644 index 00000000..46a3d973 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_stateless_cookie_generate_cb.3 @@ -0,0 +1,222 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CTX_SET_STATELESS_COOKIE_GENERATE_CB 3" +.TH SSL_CTX_SET_STATELESS_COOKIE_GENERATE_CB 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_CTX_set_stateless_cookie_generate_cb, SSL_CTX_set_stateless_cookie_verify_cb, SSL_CTX_set_cookie_generate_cb, SSL_CTX_set_cookie_verify_cb \&\- Callback functions for stateless TLS1.3 cookies +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& void SSL_CTX_set_stateless_cookie_generate_cb( +\& SSL_CTX *ctx, +\& int (*gen_stateless_cookie_cb) (SSL *ssl, +\& unsigned char *cookie, +\& size_t *cookie_len)); +\& void SSL_CTX_set_stateless_cookie_verify_cb( +\& SSL_CTX *ctx, +\& int (*verify_stateless_cookie_cb) (SSL *ssl, +\& const unsigned char *cookie, +\& size_t cookie_len)); +\& +\& void SSL_CTX_set_cookie_generate_cb(SSL_CTX *ctx, +\& int (*app_gen_cookie_cb) (SSL *ssl, +\& unsigned char +\& *cookie, +\& unsigned int +\& *cookie_len)); +\& void SSL_CTX_set_cookie_verify_cb(SSL_CTX *ctx, +\& int (*app_verify_cookie_cb) (SSL *ssl, +\& const unsigned +\& char *cookie, +\& unsigned int +\& cookie_len)); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_CTX_set_stateless_cookie_generate_cb()\fR sets the callback used by +\&\fBSSL_stateless\fR\|(3) to generate the application-controlled portion of the cookie +provided to clients in the HelloRetryRequest transmitted as a response to a +ClientHello with a missing or invalid cookie. \fBgen_stateless_cookie_cb()\fR must +write at most \s-1SSL_COOKIE_LENGTH\s0 bytes into \fBcookie\fR, and must write the number +of bytes written to \fBcookie_len\fR. If a cookie cannot be generated, a zero +return value can be used to abort the handshake. +.PP +\&\fBSSL_CTX_set_stateless_cookie_verify_cb()\fR sets the callback used by +\&\fBSSL_stateless\fR\|(3) to determine whether the application-controlled portion of a +ClientHello cookie is valid. The cookie data is pointed to by \fBcookie\fR and is of +length \fBcookie_len\fR. A nonzero return value from \fBverify_stateless_cookie_cb()\fR +communicates that the cookie is valid. The integrity of the entire cookie, +including the application-controlled portion, is automatically verified by \s-1HMAC\s0 +before \fBverify_stateless_cookie_cb()\fR is called. +.PP +\&\fBSSL_CTX_set_cookie_generate_cb()\fR sets the callback used by \fBDTLSv1_listen\fR\|(3) +to generate the cookie provided to clients in the HelloVerifyRequest transmitted +as a response to a ClientHello with a missing or invalid cookie. +\&\fBapp_gen_cookie_cb()\fR must write at most \s-1DTLS1_COOKIE_LENGTH\s0 bytes into +\&\fBcookie\fR, and must write the number of bytes written to \fBcookie_len\fR. If a +cookie cannot be generated, a zero return value can be used to abort the +handshake. +.PP +\&\fBSSL_CTX_set_cookie_verify_cb()\fR sets the callback used by \fBDTLSv1_listen\fR\|(3) to +determine whether the cookie in a ClientHello is valid. The cookie data is +pointed to by \fBcookie\fR and is of length \fBcookie_len\fR. A nonzero return value +from \fBapp_verify_cookie_cb()\fR communicates that the cookie is valid. The +integrity of the cookie is not verified by OpenSSL. This is an application +responsibility. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +Neither function returns a value. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBSSL_stateless\fR\|(3), +\&\fBDTLSv1_listen\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +\&\fBSSL_CTX_set_stateless_cookie_generate_cb()\fR and +\&\fBSSL_CTX_set_stateless_cookie_verify_cb()\fR were added in OpenSSL 1.1.1. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_timeout.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_timeout.3 new file mode 100644 index 00000000..0fc580c9 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_timeout.3 @@ -0,0 +1,199 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CTX_SET_TIMEOUT 3" +.TH SSL_CTX_SET_TIMEOUT 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_CTX_set_timeout, SSL_CTX_get_timeout \- manipulate timeout values for session caching +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& long SSL_CTX_set_timeout(SSL_CTX *ctx, long t); +\& long SSL_CTX_get_timeout(SSL_CTX *ctx); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_CTX_set_timeout()\fR sets the timeout for newly created sessions for +\&\fBctx\fR to \fBt\fR. The timeout value \fBt\fR must be given in seconds. +.PP +\&\fBSSL_CTX_get_timeout()\fR returns the currently set timeout value for \fBctx\fR. +.SH "NOTES" +.IX Header "NOTES" +Whenever a new session is created, it is assigned a maximum lifetime. This +lifetime is specified by storing the creation time of the session and the +timeout value valid at this time. If the actual time is later than creation +time plus timeout, the session is not reused. +.PP +Due to this realization, all sessions behave according to the timeout value +valid at the time of the session negotiation. Changes of the timeout value +do not affect already established sessions. +.PP +The expiration time of a single session can be modified using the +\&\fBSSL_SESSION_get_time\fR\|(3) family of functions. +.PP +Expired sessions are removed from the internal session cache, whenever +\&\fBSSL_CTX_flush_sessions\fR\|(3) is called, either +directly by the application or automatically (see +\&\fBSSL_CTX_set_session_cache_mode\fR\|(3)) +.PP +The default value for session timeout is decided on a per protocol +basis, see \fBSSL_get_default_timeout\fR\|(3). +All currently supported protocols have the same default timeout value +of 300 seconds. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_CTX_set_timeout()\fR returns the previously set timeout value. +.PP +\&\fBSSL_CTX_get_timeout()\fR returns the currently set timeout value. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), +\&\fBSSL_CTX_set_session_cache_mode\fR\|(3), +\&\fBSSL_SESSION_get_time\fR\|(3), +\&\fBSSL_CTX_flush_sessions\fR\|(3), +\&\fBSSL_get_default_timeout\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2001\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_tlsext_servername_callback.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_tlsext_servername_callback.3 new file mode 100644 index 00000000..da10a437 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_tlsext_servername_callback.3 @@ -0,0 +1,285 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CTX_SET_TLSEXT_SERVERNAME_CALLBACK 3" +.TH SSL_CTX_SET_TLSEXT_SERVERNAME_CALLBACK 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_CTX_set_tlsext_servername_callback, SSL_CTX_set_tlsext_servername_arg, SSL_get_servername_type, SSL_get_servername, SSL_set_tlsext_host_name \- handle server name indication (SNI) +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& long SSL_CTX_set_tlsext_servername_callback(SSL_CTX *ctx, +\& int (*cb)(SSL *s, int *al, void *arg)); +\& long SSL_CTX_set_tlsext_servername_arg(SSL_CTX *ctx, void *arg); +\& +\& const char *SSL_get_servername(const SSL *s, const int type); +\& int SSL_get_servername_type(const SSL *s); +\& +\& int SSL_set_tlsext_host_name(const SSL *s, const char *name); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The functionality provided by the servername callback is mostly superseded by +the ClientHello callback, which can be set using \fBSSL_CTX_set_client_hello_cb()\fR. +However, even where the ClientHello callback is used, the servername callback is +still necessary in order to acknowledge the servername requested by the client. +.PP +\&\fBSSL_CTX_set_tlsext_servername_callback()\fR sets the application callback \fBcb\fR +used by a server to perform any actions or configuration required based on +the servername extension received in the incoming connection. When \fBcb\fR +is \s-1NULL, SNI\s0 is not used. +.PP +The servername callback should return one of the following values: +.IP "\s-1SSL_TLSEXT_ERR_OK\s0" 4 +.IX Item "SSL_TLSEXT_ERR_OK" +This is used to indicate that the servername requested by the client has been +accepted. Typically a server will call \fBSSL_set_SSL_CTX()\fR in the callback to set +up a different configuration for the selected servername in this case. +.IP "\s-1SSL_TLSEXT_ERR_ALERT_FATAL\s0" 4 +.IX Item "SSL_TLSEXT_ERR_ALERT_FATAL" +In this case the servername requested by the client is not accepted and the +handshake will be aborted. The value of the alert to be used should be stored in +the location pointed to by the \fBal\fR parameter to the callback. By default this +value is initialised to \s-1SSL_AD_UNRECOGNIZED_NAME.\s0 +.IP "\s-1SSL_TLSEXT_ERR_ALERT_WARNING\s0" 4 +.IX 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 +of the alert should be stored in the location pointed to by the \fBal\fR parameter +as for \s-1SSL_TLSEXT_ERR_ALERT_FATAL\s0 above. Note that TLSv1.3 does not support +warning alerts, so if TLSv1.3 has been negotiated then this return value is +treated the same way as \s-1SSL_TLSEXT_ERR_NOACK.\s0 +.IP "\s-1SSL_TLSEXT_ERR_NOACK\s0" 4 +.IX Item "SSL_TLSEXT_ERR_NOACK" +This return value indicates that the servername is not accepted by the server. +No alerts are sent and the server will not acknowledge the requested servername. +.PP +\&\fBSSL_CTX_set_tlsext_servername_arg()\fR sets a context-specific argument to be +passed into the callback (via the \fBarg\fR parameter) for this \fB\s-1SSL_CTX\s0\fR. +.PP +The behaviour of \fBSSL_get_servername()\fR depends on a number of different factors. +In particular note that in TLSv1.3 the servername is negotiated in every +handshake. In TLSv1.2 the servername is only negotiated on initial handshakes +and not on resumption handshakes. +.IP "On the client, before the handshake" 4 +.IX Item "On the client, before the handshake" +If a servername has been set via a call to \fBSSL_set_tlsext_host_name()\fR then it +will return that servername. +.Sp +If one has not been set, but a TLSv1.2 resumption is being attempted and the +session from the original handshake had a servername accepted by the server then +it will return that servername. +.Sp +Otherwise it returns \s-1NULL.\s0 +.IP "On the client, during or after the handshake and a TLSv1.2 (or below) resumption occurred" 4 +.IX 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 +server then it will return that servername. +.Sp +Otherwise it returns the servername set via \fBSSL_set_tlsext_host_name()\fR or \s-1NULL\s0 +if it was not called. +.IP "On the client, during or after the handshake and a TLSv1.2 (or below) resumption did not occur" 4 +.IX Item "On the client, during or after the handshake and a TLSv1.2 (or below) resumption did not occur" +It will return the servername set via \fBSSL_set_tlsext_host_name()\fR or \s-1NULL\s0 if it +was not called. +.IP "On the server, before the handshake" 4 +.IX Item "On the server, before the handshake" +The function will always return \s-1NULL\s0 before the handshake +.IP "On the server, after the servername extension has been processed and a TLSv1.2 (or below) resumption occurred" 4 +.IX Item "On the server, after the servername extension has been processed and a TLSv1.2 (or below) resumption occurred" +If a servername was accepted by the server in the original handshake then it +will return that servername, or \s-1NULL\s0 otherwise. +.IP "On the server, after the servername extension has been processed and a TLSv1.2 (or below) resumption did not occur" 4 +.IX Item "On the server, after the servername extension has been processed and a TLSv1.2 (or below) resumption did not occur" +The function will return the servername requested by the client in this +handshake or \s-1NULL\s0 if none was requested. +.PP +Note that the ClientHello callback occurs before a servername extension from the +client is processed. The servername, certificate and \s-1ALPN\s0 callbacks occur after +a servername extension from the client is processed. +.PP +\&\fBSSL_get_servername_type()\fR returns the servername type or \-1 if no servername +is present. Currently the only supported type (defined in \s-1RFC3546\s0) is +\&\fBTLSEXT_NAMETYPE_host_name\fR. +.PP +\&\fBSSL_set_tlsext_host_name()\fR sets the server name indication ClientHello extension +to contain the value \fBname\fR. The type of server name indication extension is set +to \fBTLSEXT_NAMETYPE_host_name\fR (defined in \s-1RFC3546\s0). +.SH "NOTES" +.IX Header "NOTES" +Several callbacks are executed during ClientHello processing, including +the ClientHello, \s-1ALPN,\s0 and servername callbacks. The ClientHello callback is +executed first, then the servername callback, followed by the \s-1ALPN\s0 callback. +.PP +The \fBSSL_set_tlsext_host_name()\fR function should only be called on \s-1SSL\s0 objects +that will act as clients; otherwise the configured \fBname\fR will be ignored. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_CTX_set_tlsext_servername_callback()\fR and +\&\fBSSL_CTX_set_tlsext_servername_arg()\fR both always return 1 indicating success. +\&\fBSSL_set_tlsext_host_name()\fR returns 1 on success, 0 in case of error. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), \fBSSL_CTX_set_alpn_select_cb\fR\|(3), +\&\fBSSL_get0_alpn_selected\fR\|(3), \fBSSL_CTX_set_client_hello_cb\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +\&\fBSSL_get_servername()\fR historically provided some unexpected results in certain +corner cases. This has been fixed from OpenSSL 1.1.1e. +.PP +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 +the client it returned the servername from the second handshake. This has now +been changed to return the servername requested in the original handshake. +.PP +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 +resumption was successful then when called by the server it returned the +servername requested in the original handshake. This has now been changed to +\&\s-1NULL.\s0 +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017\-2020 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_tlsext_status_cb.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_tlsext_status_cb.3 new file mode 100644 index 00000000..8b06e4e1 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_tlsext_status_cb.3 @@ -0,0 +1,245 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CTX_SET_TLSEXT_STATUS_CB 3" +.TH SSL_CTX_SET_TLSEXT_STATUS_CB 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_CTX_set_tlsext_status_cb, SSL_CTX_get_tlsext_status_cb, SSL_CTX_set_tlsext_status_arg, SSL_CTX_get_tlsext_status_arg, SSL_CTX_set_tlsext_status_type, SSL_CTX_get_tlsext_status_type, SSL_set_tlsext_status_type, SSL_get_tlsext_status_type, SSL_get_tlsext_status_ocsp_resp, SSL_set_tlsext_status_ocsp_resp \&\- OCSP Certificate Status Request functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& long SSL_CTX_set_tlsext_status_cb(SSL_CTX *ctx, int (*callback)(SSL *, void *)); +\& long SSL_CTX_get_tlsext_status_cb(SSL_CTX *ctx, int (**callback)(SSL *, void *)); +\& +\& long SSL_CTX_set_tlsext_status_arg(SSL_CTX *ctx, void *arg); +\& long SSL_CTX_get_tlsext_status_arg(SSL_CTX *ctx, void **arg); +\& +\& long SSL_CTX_set_tlsext_status_type(SSL_CTX *ctx, int type); +\& long SSL_CTX_get_tlsext_status_type(SSL_CTX *ctx); +\& +\& long SSL_set_tlsext_status_type(SSL *s, int type); +\& long SSL_get_tlsext_status_type(SSL *s); +\& +\& long SSL_get_tlsext_status_ocsp_resp(ssl, unsigned char **resp); +\& long SSL_set_tlsext_status_ocsp_resp(ssl, unsigned char *resp, int len); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +A client application may request that a server send back an \s-1OCSP\s0 status response +(also known as \s-1OCSP\s0 stapling). To do so the client should call the +\&\fBSSL_CTX_set_tlsext_status_type()\fR function prior to the creation of any \s-1SSL\s0 +objects. Alternatively an application can call the \fBSSL_set_tlsext_status_type()\fR +function on an individual \s-1SSL\s0 object prior to the start of the handshake. +Currently the only supported type is \fBTLSEXT_STATUSTYPE_ocsp\fR. This value +should be passed in the \fBtype\fR argument. Calling +\&\fBSSL_CTX_get_tlsext_status_type()\fR will return the type \fBTLSEXT_STATUSTYPE_ocsp\fR +previously set via \fBSSL_CTX_set_tlsext_status_type()\fR or \-1 if not set. +.PP +The client should additionally provide a callback function to decide what to do +with the returned \s-1OCSP\s0 response by calling \fBSSL_CTX_set_tlsext_status_cb()\fR. The +callback function should determine whether the returned \s-1OCSP\s0 response is +acceptable or not. The callback will be passed as an argument the value +previously set via a call to \fBSSL_CTX_set_tlsext_status_arg()\fR. Note that the +callback will not be called in the event of a handshake where session resumption +occurs (because there are no Certificates exchanged in such a handshake). +The callback previously set via \fBSSL_CTX_set_tlsext_status_cb()\fR can be retrieved +by calling \fBSSL_CTX_get_tlsext_status_cb()\fR, and the argument by calling +\&\fBSSL_CTX_get_tlsext_status_arg()\fR. +.PP +On the client side \fBSSL_get_tlsext_status_type()\fR can be used to determine whether +the client has previously called \fBSSL_set_tlsext_status_type()\fR. It will return +\&\fBTLSEXT_STATUSTYPE_ocsp\fR if it has been called or \-1 otherwise. On the server +side \fBSSL_get_tlsext_status_type()\fR can be used to determine whether the client +requested \s-1OCSP\s0 stapling. If the client requested it then this function will +return \fBTLSEXT_STATUSTYPE_ocsp\fR, or \-1 otherwise. +.PP +The response returned by the server can be obtained via a call to +\&\fBSSL_get_tlsext_status_ocsp_resp()\fR. The value \fB*resp\fR will be updated to point +to the \s-1OCSP\s0 response data and the return value will be the length of that data. +Typically a callback would obtain an \s-1OCSP_RESPONSE\s0 object from this data via a +call to the \fBd2i_OCSP_RESPONSE()\fR function. If the server has not provided any +response data then \fB*resp\fR will be \s-1NULL\s0 and the return value from +\&\fBSSL_get_tlsext_status_ocsp_resp()\fR will be \-1. +.PP +A server application must also call the \fBSSL_CTX_set_tlsext_status_cb()\fR function +if it wants to be able to provide clients with \s-1OCSP\s0 Certificate Status +responses. Typically the server callback would obtain the server certificate +that is being sent back to the client via a call to \fBSSL_get_certificate()\fR; +obtain the \s-1OCSP\s0 response to be sent back; and then set that response data by +calling \fBSSL_set_tlsext_status_ocsp_resp()\fR. A pointer to the response data should +be provided in the \fBresp\fR argument, and the length of that data should be in +the \fBlen\fR argument. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +The callback when used on the client side should return a negative value on +error; 0 if the response is not acceptable (in which case the handshake will +fail) or a positive value if it is acceptable. +.PP +The callback when used on the server side should return with either +\&\s-1SSL_TLSEXT_ERR_OK\s0 (meaning that the \s-1OCSP\s0 response that has been set should be +returned), \s-1SSL_TLSEXT_ERR_NOACK\s0 (meaning that an \s-1OCSP\s0 response should not be +returned) or \s-1SSL_TLSEXT_ERR_ALERT_FATAL\s0 (meaning that a fatal error has +occurred). +.PP +\&\fBSSL_CTX_set_tlsext_status_cb()\fR, \fBSSL_CTX_set_tlsext_status_arg()\fR, +\&\fBSSL_CTX_set_tlsext_status_type()\fR, \fBSSL_set_tlsext_status_type()\fR and +\&\fBSSL_set_tlsext_status_ocsp_resp()\fR return 0 on error or 1 on success. +.PP +\&\fBSSL_CTX_get_tlsext_status_type()\fR returns the value previously set by +\&\fBSSL_CTX_set_tlsext_status_type()\fR, or \-1 if not set. +.PP +\&\fBSSL_get_tlsext_status_ocsp_resp()\fR returns the length of the \s-1OCSP\s0 response data +or \-1 if there is no \s-1OCSP\s0 response data. +.PP +\&\fBSSL_get_tlsext_status_type()\fR returns \fBTLSEXT_STATUSTYPE_ocsp\fR on the client +side if \fBSSL_set_tlsext_status_type()\fR was previously called, or on the server +side if the client requested \s-1OCSP\s0 stapling. Otherwise \-1 is returned. +.SH "HISTORY" +.IX Header "HISTORY" +The \fBSSL_get_tlsext_status_type()\fR, \fBSSL_CTX_get_tlsext_status_type()\fR +and \fBSSL_CTX_set_tlsext_status_type()\fR functions were added in OpenSSL 1.1.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2015\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_tlsext_ticket_key_cb.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_tlsext_ticket_key_cb.3 new file mode 100644 index 00000000..6b0f5f3f --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_tlsext_ticket_key_cb.3 @@ -0,0 +1,323 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CTX_SET_TLSEXT_TICKET_KEY_CB 3" +.TH SSL_CTX_SET_TLSEXT_TICKET_KEY_CB 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_CTX_set_tlsext_ticket_key_cb \- set a callback for session ticket processing +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& long SSL_CTX_set_tlsext_ticket_key_cb(SSL_CTX sslctx, +\& int (*cb)(SSL *s, unsigned char key_name[16], +\& unsigned char iv[EVP_MAX_IV_LENGTH], +\& EVP_CIPHER_CTX *ctx, HMAC_CTX *hctx, int enc)); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_CTX_set_tlsext_ticket_key_cb()\fR sets a callback function \fIcb\fR for handling +session tickets for the ssl context \fIsslctx\fR. Session tickets, defined in +\&\s-1RFC5077\s0 provide an enhanced session resumption capability where the server +implementation is not required to maintain per session state. It only applies +to \s-1TLS\s0 and there is no SSLv3 implementation. +.PP +The callback function \fIcb\fR will be called for every client instigated \s-1TLS\s0 +session when session ticket extension is presented in the \s-1TLS\s0 hello +message. It is the responsibility of this function to create or retrieve the +cryptographic parameters and to maintain their state. +.PP +The OpenSSL library uses your callback function to help implement a common \s-1TLS\s0 +ticket construction state according to \s-1RFC5077\s0 Section 4 such that per session +state is unnecessary and a small set of cryptographic variables needs to be +maintained by the callback function implementation. +.PP +In order to reuse a session, a \s-1TLS\s0 client must send the a session ticket +extension to the server. The client can only send exactly one session ticket. +The server, through the callback function, either agrees to reuse the session +ticket information or it starts a full \s-1TLS\s0 handshake to create a new session +ticket. +.PP +Before the callback function is started \fIctx\fR and \fIhctx\fR have been +initialised with \fBEVP_CIPHER_CTX_reset\fR\|(3) and \fBHMAC_CTX_reset\fR\|(3) respectively. +.PP +For new sessions tickets, when the client doesn't present a session ticket, or +an attempted retrieval of the ticket failed, or a renew option was indicated, +the callback function will be called with \fIenc\fR equal to 1. The OpenSSL +library expects that the function will set an arbitrary \fIname\fR, initialize +\&\fIiv\fR, and set the cipher context \fIctx\fR and the hash context \fIhctx\fR. +.PP +The \fIname\fR is 16 characters long and is used as a key identifier. +.PP +The \fIiv\fR length is the length of the \s-1IV\s0 of the corresponding cipher. The +maximum \s-1IV\s0 length is \fB\s-1EVP_MAX_IV_LENGTH\s0\fR bytes defined in \fBevp.h\fR. +.PP +The initialization vector \fIiv\fR should be a random value. The cipher context +\&\fIctx\fR should use the initialisation vector \fIiv\fR. The cipher context can be +set using \fBEVP_EncryptInit_ex\fR\|(3). The hmac context can be set using +\&\fBHMAC_Init_ex\fR\|(3). +.PP +When the client presents a session ticket, the callback function with be called +with \fIenc\fR set to 0 indicating that the \fIcb\fR function should retrieve a set +of parameters. In this case \fIname\fR and \fIiv\fR have already been parsed out of +the session ticket. The OpenSSL library expects that the \fIname\fR will be used +to retrieve a cryptographic parameters and that the cryptographic context +\&\fIctx\fR will be set with the retrieved parameters and the initialization vector +\&\fIiv\fR. using a function like \fBEVP_DecryptInit_ex\fR\|(3). The \fIhctx\fR needs to be +set using \fBHMAC_Init_ex\fR\|(3). +.PP +If the \fIname\fR is still valid but a renewal of the ticket is required the +callback function should return 2. The library will call the callback again +with an argument of enc equal to 1 to set the new ticket. +.PP +The return value of the \fIcb\fR function is used by OpenSSL to determine what +further processing will occur. The following return values have meaning: +.IP "2" 4 +.IX Item "2" +This indicates that the \fIctx\fR and \fIhctx\fR have been set and the session can +continue on those parameters. Additionally it indicates that the session +ticket is in a renewal period and should be replaced. The OpenSSL library will +call \fIcb\fR again with an enc argument of 1 to set the new ticket (see \s-1RFC5077 +3.3\s0 paragraph 2). +.IP "1" 4 +.IX Item "1" +This indicates that the \fIctx\fR and \fIhctx\fR have been set and the session can +continue on those parameters. +.IP "0" 4 +This indicates that it was not possible to set/retrieve a session ticket and +the \s-1SSL/TLS\s0 session will continue by negotiating a set of cryptographic +parameters or using the alternate \s-1SSL/TLS\s0 resumption mechanism, session ids. +.Sp +If called with enc equal to 0 the library will call the \fIcb\fR again to get +a new set of parameters. +.IP "less than 0" 4 +.IX Item "less than 0" +This indicates an error. +.SH "NOTES" +.IX Header "NOTES" +Session resumption shortcuts the \s-1TLS\s0 so that the client certificate +negotiation don't occur. It makes up for this by storing client certificate +an all other negotiated state information encrypted within the ticket. In a +resumed session the applications will have all this state information available +exactly as if a full negotiation had occurred. +.PP +If an attacker can obtain the key used to encrypt a session ticket, they can +obtain the master secret for any ticket using that key and decrypt any traffic +using that session: even if the cipher suite supports forward secrecy. As +a result applications may wish to use multiple keys and avoid using long term +keys stored in files. +.PP +Applications can use longer keys to maintain a consistent level of security. +For example if a cipher suite uses 256 bit ciphers but only a 128 bit ticket key +the overall security is only 128 bits because breaking the ticket key will +enable an attacker to obtain the session keys. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +returns 0 to indicate the callback function was set. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +Reference Implementation: +.PP +.Vb 2 +\& SSL_CTX_set_tlsext_ticket_key_cb(SSL, ssl_tlsext_ticket_key_cb); +\& ... +\& +\& static int ssl_tlsext_ticket_key_cb(SSL *s, unsigned char key_name[16], +\& unsigned char *iv, EVP_CIPHER_CTX *ctx, +\& HMAC_CTX *hctx, int enc) +\& { +\& if (enc) { /* create new session */ +\& if (RAND_bytes(iv, EVP_MAX_IV_LENGTH) <= 0) +\& return \-1; /* insufficient random */ +\& +\& key = currentkey(); /* something that you need to implement */ +\& if (key == NULL) { +\& /* current key doesn\*(Aqt exist or isn\*(Aqt valid */ +\& key = createkey(); /* +\& * Something that you need to implement. +\& * createkey needs to initialise a name, +\& * an aes_key, a hmac_key and optionally +\& * an expire time. +\& */ +\& if (key == NULL) /* key couldn\*(Aqt be created */ +\& return 0; +\& } +\& 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); +\& +\& return 1; +\& +\& } else { /* retrieve session */ +\& key = findkey(name); +\& +\& if (key == NULL || key\->expire < now()) +\& 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); +\& +\& if (key\->expire < now() \- RENEW_TIME) { +\& /* +\& * return 2 \- This session will get a new ticket even though the +\& * current one is still valid. +\& */ +\& return 2; +\& } +\& return 1; +\& } +\& } +.Ve +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), \fBSSL_set_session\fR\|(3), +\&\fBSSL_session_reused\fR\|(3), +\&\fBSSL_CTX_add_session\fR\|(3), +\&\fBSSL_CTX_sess_number\fR\|(3), +\&\fBSSL_CTX_sess_set_get_cb\fR\|(3), +\&\fBSSL_CTX_set_session_id_context\fR\|(3), +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2014\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_tlsext_use_srtp.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_tlsext_use_srtp.3 new file mode 100644 index 00000000..eb4ee508 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_tlsext_use_srtp.3 @@ -0,0 +1,231 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CTX_SET_TLSEXT_USE_SRTP 3" +.TH SSL_CTX_SET_TLSEXT_USE_SRTP 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_CTX_set_tlsext_use_srtp, SSL_set_tlsext_use_srtp, SSL_get_srtp_profiles, SSL_get_selected_srtp_profile \&\- Configure and query SRTP support +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int SSL_CTX_set_tlsext_use_srtp(SSL_CTX *ctx, const char *profiles); +\& int SSL_set_tlsext_use_srtp(SSL *ssl, const char *profiles); +\& +\& STACK_OF(SRTP_PROTECTION_PROFILE) *SSL_get_srtp_profiles(SSL *ssl); +\& SRTP_PROTECTION_PROFILE *SSL_get_selected_srtp_profile(SSL *s); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\s-1SRTP\s0 is the Secure Real-Time Transport Protocol. OpenSSL implements support for +the \*(L"use_srtp\*(R" \s-1DTLS\s0 extension defined in \s-1RFC5764.\s0 This provides a mechanism for +establishing \s-1SRTP\s0 keying material, algorithms and parameters using \s-1DTLS.\s0 This +capability may be used as part of an implementation that conforms to \s-1RFC5763.\s0 +OpenSSL does not implement \s-1SRTP\s0 itself or \s-1RFC5763.\s0 Note that OpenSSL does not +support the use of \s-1SRTP\s0 Master Key Identifiers (MKIs). Also note that this +extension is only supported in \s-1DTLS.\s0 Any \s-1SRTP\s0 configuration will be ignored if a +\&\s-1TLS\s0 connection is attempted. +.PP +An OpenSSL client wishing to send the \*(L"use_srtp\*(R" extension should call +\&\fBSSL_CTX_set_tlsext_use_srtp()\fR to set its use for all \s-1SSL\s0 objects subsequently +created from an \s-1SSL_CTX.\s0 Alternatively a client may call +\&\fBSSL_set_tlsext_use_srtp()\fR to set its use for an individual \s-1SSL\s0 object. The +\&\fBprofiles\fR parameters should point to a NUL-terminated, colon delimited list of +\&\s-1SRTP\s0 protection profile names. +.PP +The currently supported protection profile names are: +.IP "\s-1SRTP_AES128_CM_SHA1_80\s0" 4 +.IX Item "SRTP_AES128_CM_SHA1_80" +This corresponds to \s-1SRTP_AES128_CM_HMAC_SHA1_80\s0 defined in \s-1RFC5764.\s0 +.IP "\s-1SRTP_AES128_CM_SHA1_32\s0" 4 +.IX Item "SRTP_AES128_CM_SHA1_32" +This corresponds to \s-1SRTP_AES128_CM_HMAC_SHA1_32\s0 defined in \s-1RFC5764.\s0 +.IP "\s-1SRTP_AEAD_AES_128_GCM\s0" 4 +.IX Item "SRTP_AEAD_AES_128_GCM" +This corresponds to the profile of the same name defined in \s-1RFC7714.\s0 +.IP "\s-1SRTP_AEAD_AES_256_GCM\s0" 4 +.IX Item "SRTP_AEAD_AES_256_GCM" +This corresponds to the profile of the same name defined in \s-1RFC7714.\s0 +.PP +Supplying an unrecognised protection profile name will result in an error. +.PP +An OpenSSL server wishing to support the \*(L"use_srtp\*(R" extension should also call +\&\fBSSL_CTX_set_tlsext_use_srtp()\fR or \fBSSL_set_tlsext_use_srtp()\fR to indicate the +protection profiles that it is willing to negotiate. +.PP +The currently configured list of protection profiles for either a client or a +server can be obtained by calling \fBSSL_get_srtp_profiles()\fR. This returns a stack +of \s-1SRTP_PROTECTION_PROFILE\s0 objects. The memory pointed to in the return value of +this function should not be freed by the caller. +.PP +After a handshake has been completed the negotiated \s-1SRTP\s0 protection profile (if +any) can be obtained (on the client or the server) by calling +\&\fBSSL_get_selected_srtp_profile()\fR. This function will return \s-1NULL\s0 if no \s-1SRTP\s0 +protection profile was negotiated. The memory returned from this function should +not be freed by the caller. +.PP +If an \s-1SRTP\s0 protection profile has been successfully negotiated then the \s-1SRTP\s0 +keying material (on both the client and server) should be obtained via a call to +\&\fBSSL_export_keying_material\fR\|(3). This call should provide a label value of +\&\*(L"EXTRACTOR\-dtls_srtp\*(R" and a \s-1NULL\s0 context value (use_context is 0). The total +length of keying material obtained should be equal to two times the sum of the +master key length and the salt length as defined for the protection profile in +use. This provides the client write master key, the server write master key, the +client write master salt and the server write master salt in that order. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_CTX_set_tlsext_use_srtp()\fR and \fBSSL_set_tlsext_use_srtp()\fR return 0 on success +or 1 on error. +.PP +\&\fBSSL_get_srtp_profiles()\fR returns a stack of \s-1SRTP_PROTECTION_PROFILE\s0 objects on +success or \s-1NULL\s0 on error or if no protection profiles have been configured. +.PP +\&\fBSSL_get_selected_srtp_profile()\fR returns a pointer to an \s-1SRTP_PROTECTION_PROFILE\s0 +object if one has been negotiated or \s-1NULL\s0 otherwise. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBSSL_export_keying_material\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_tmp_dh_callback.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_tmp_dh_callback.3 new file mode 100644 index 00000000..7ae149d8 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_tmp_dh_callback.3 @@ -0,0 +1,269 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CTX_SET_TMP_DH_CALLBACK 3" +.TH SSL_CTX_SET_TMP_DH_CALLBACK 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_CTX_set_tmp_dh_callback, SSL_CTX_set_tmp_dh, SSL_set_tmp_dh_callback, SSL_set_tmp_dh \- handle DH keys for ephemeral key exchange +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& void SSL_CTX_set_tmp_dh_callback(SSL_CTX *ctx, +\& DH *(*tmp_dh_callback)(SSL *ssl, int is_export, +\& int keylength)); +\& long SSL_CTX_set_tmp_dh(SSL_CTX *ctx, DH *dh); +\& +\& void SSL_set_tmp_dh_callback(SSL *ctx, +\& DH *(*tmp_dh_callback)(SSL *ssl, int is_export, +\& int keylength)); +\& long SSL_set_tmp_dh(SSL *ssl, DH *dh) +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_CTX_set_tmp_dh_callback()\fR sets the callback function for \fBctx\fR to be +used when a \s-1DH\s0 parameters are required to \fBtmp_dh_callback\fR. +The callback is inherited by all \fBssl\fR objects created from \fBctx\fR. +.PP +\&\fBSSL_CTX_set_tmp_dh()\fR sets \s-1DH\s0 parameters to be used to be \fBdh\fR. +The key is inherited by all \fBssl\fR objects created from \fBctx\fR. +.PP +\&\fBSSL_set_tmp_dh_callback()\fR sets the callback only for \fBssl\fR. +.PP +\&\fBSSL_set_tmp_dh()\fR sets the parameters only for \fBssl\fR. +.PP +These functions apply to \s-1SSL/TLS\s0 servers only. +.SH "NOTES" +.IX Header "NOTES" +When using a cipher with \s-1RSA\s0 authentication, an ephemeral \s-1DH\s0 key exchange +can take place. Ciphers with \s-1DSA\s0 keys always use ephemeral \s-1DH\s0 keys as well. +In these cases, the session data are negotiated using the +ephemeral/temporary \s-1DH\s0 key and the key supplied and certified +by the certificate chain is only used for signing. +Anonymous ciphers (without a permanent server key) also use ephemeral \s-1DH\s0 keys. +.PP +Using ephemeral \s-1DH\s0 key exchange yields forward secrecy, as the connection +can only be decrypted, when the \s-1DH\s0 key is known. By generating a temporary +\&\s-1DH\s0 key inside the server application that is lost when the application +is left, it becomes impossible for an attacker to decrypt past sessions, +even if he gets hold of the normal (certified) key, as this key was +only used for signing. +.PP +In order to perform a \s-1DH\s0 key exchange the server must use a \s-1DH\s0 group +(\s-1DH\s0 parameters) and generate a \s-1DH\s0 key. The server will always generate +a new \s-1DH\s0 key during the negotiation. +.PP +As generating \s-1DH\s0 parameters is extremely time consuming, an application +should not generate the parameters on the fly but supply the parameters. +\&\s-1DH\s0 parameters can be reused, as the actual key is newly generated during +the negotiation. The risk in reusing \s-1DH\s0 parameters is that an attacker +may specialize on a very often used \s-1DH\s0 group. Applications should therefore +generate their own \s-1DH\s0 parameters during the installation process using the +openssl \fBdhparam\fR\|(1) application. This application +guarantees that \*(L"strong\*(R" primes are used. +.PP +Files dh2048.pem, and dh4096.pem in the 'apps' directory of the current +version of the OpenSSL distribution contain the '\s-1SKIP\s0' \s-1DH\s0 parameters, +which use safe primes and were generated verifiably pseudo-randomly. +These files can be converted into C code using the \fB\-C\fR option of the +\&\fBdhparam\fR\|(1) application. Generation of custom \s-1DH\s0 +parameters during installation should still be preferred to stop an +attacker from specializing on a commonly used group. File dh1024.pem +contains old parameters that must not be used by applications. +.PP +An application may either directly specify the \s-1DH\s0 parameters or +can supply the \s-1DH\s0 parameters via a callback function. +.PP +Previous versions of the callback used \fBis_export\fR and \fBkeylength\fR +parameters to control parameter generation for export and non-export +cipher suites. Modern servers that do not support export cipher suites +are advised to either use \fBSSL_CTX_set_tmp_dh()\fR or alternatively, use +the callback but ignore \fBkeylength\fR and \fBis_export\fR and simply +supply at least 2048\-bit parameters in the callback. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_CTX_set_tmp_dh_callback()\fR and \fBSSL_set_tmp_dh_callback()\fR do not return +diagnostic output. +.PP +\&\fBSSL_CTX_set_tmp_dh()\fR and \fBSSL_set_tmp_dh()\fR do return 1 on success and 0 +on failure. Check the error queue to find out the reason of failure. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +Setup \s-1DH\s0 parameters with a key length of 2048 bits. (Error handling +partly left out.) +.PP +Command-line parameter generation: +.PP +.Vb 1 +\& $ openssl dhparam \-out dh_param_2048.pem 2048 +.Ve +.PP +Code for setting up parameters during server initialization: +.PP +.Vb 1 +\& SSL_CTX ctx = SSL_CTX_new(); +\& +\& DH *dh_2048 = NULL; +\& FILE *paramfile = fopen("dh_param_2048.pem", "r"); +\& +\& if (paramfile) { +\& dh_2048 = PEM_read_DHparams(paramfile, NULL, NULL, NULL); +\& fclose(paramfile); +\& } else { +\& /* Error. */ +\& } +\& if (dh_2048 == NULL) +\& /* Error. */ +\& if (SSL_CTX_set_tmp_dh(ctx, dh_2048) != 1) +\& /* Error. */ +\& ... +.Ve +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), \fBSSL_CTX_set_cipher_list\fR\|(3), +\&\fBSSL_CTX_set_options\fR\|(3), +\&\fBciphers\fR\|(1), \fBdhparam\fR\|(1) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2001\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_verify.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_verify.3 new file mode 100644 index 00000000..f4445077 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_set_verify.3 @@ -0,0 +1,472 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CTX_SET_VERIFY 3" +.TH SSL_CTX_SET_VERIFY 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_get_ex_data_X509_STORE_CTX_idx, SSL_CTX_set_verify, SSL_set_verify, SSL_CTX_set_verify_depth, SSL_set_verify_depth, SSL_verify_cb, SSL_verify_client_post_handshake, SSL_set_post_handshake_auth, SSL_CTX_set_post_handshake_auth \&\- set peer certificate verification parameters +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& typedef int (*SSL_verify_cb)(int preverify_ok, X509_STORE_CTX *x509_ctx); +\& +\& void SSL_CTX_set_verify(SSL_CTX *ctx, int mode, SSL_verify_cb verify_callback); +\& void SSL_set_verify(SSL *ssl, int mode, SSL_verify_cb verify_callback); +\& SSL_get_ex_data_X509_STORE_CTX_idx(void); +\& +\& void SSL_CTX_set_verify_depth(SSL_CTX *ctx, int depth); +\& void SSL_set_verify_depth(SSL *ssl, int depth); +\& +\& int SSL_verify_client_post_handshake(SSL *ssl); +\& void SSL_CTX_set_post_handshake_auth(SSL_CTX *ctx, int val); +\& void SSL_set_post_handshake_auth(SSL *ssl, int val); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_CTX_set_verify()\fR sets the verification flags for \fBctx\fR to be \fBmode\fR and +specifies the \fBverify_callback\fR function to be used. If no callback function +shall be specified, the \s-1NULL\s0 pointer can be used for \fBverify_callback\fR. +.PP +\&\fBSSL_set_verify()\fR sets the verification flags for \fBssl\fR to be \fBmode\fR and +specifies the \fBverify_callback\fR function to be used. If no callback function +shall be specified, the \s-1NULL\s0 pointer can be used for \fBverify_callback\fR. In +this case last \fBverify_callback\fR set specifically for this \fBssl\fR remains. If +no special \fBcallback\fR was set before, the default callback for the underlying +\&\fBctx\fR is used, that was valid at the time \fBssl\fR was created with +\&\fBSSL_new\fR\|(3). Within the callback function, +\&\fBSSL_get_ex_data_X509_STORE_CTX_idx\fR can be called to get the data index +of the current \s-1SSL\s0 object that is doing the verification. +.PP +\&\fBSSL_CTX_set_verify_depth()\fR sets the maximum \fBdepth\fR for the certificate chain +verification that shall be allowed for \fBctx\fR. +.PP +\&\fBSSL_set_verify_depth()\fR sets the maximum \fBdepth\fR for the certificate chain +verification that shall be allowed for \fBssl\fR. +.PP +\&\fBSSL_CTX_set_post_handshake_auth()\fR and \fBSSL_set_post_handshake_auth()\fR enable the +Post-Handshake Authentication extension to be added to the ClientHello such that +post-handshake authentication can be requested by the server. If \fBval\fR is 0 +then the extension is not sent, otherwise it is. By default the extension is not +sent. A certificate callback will need to be set via +\&\fBSSL_CTX_set_client_cert_cb()\fR if no certificate is provided at initialization. +.PP +\&\fBSSL_verify_client_post_handshake()\fR causes a CertificateRequest message to be +sent by a server on the given \fBssl\fR connection. The \s-1SSL_VERIFY_PEER\s0 flag must +be set; the \s-1SSL_VERIFY_POST_HANDSHAKE\s0 flag is optional. +.SH "NOTES" +.IX Header "NOTES" +The verification of certificates can be controlled by a set of logically +or'ed \fBmode\fR flags: +.IP "\s-1SSL_VERIFY_NONE\s0" 4 +.IX Item "SSL_VERIFY_NONE" +\&\fBServer mode:\fR the server will not send a client certificate request to the +client, so the client will not send a certificate. +.Sp +\&\fBClient mode:\fR if not using an anonymous cipher (by default disabled), the +server will send a certificate which will be checked. The result of the +certificate verification process can be checked after the \s-1TLS/SSL\s0 handshake +using the \fBSSL_get_verify_result\fR\|(3) function. +The handshake will be continued regardless of the verification result. +.IP "\s-1SSL_VERIFY_PEER\s0" 4 +.IX Item "SSL_VERIFY_PEER" +\&\fBServer mode:\fR the server sends a client certificate request to the client. +The certificate returned (if any) is checked. If the verification process +fails, the \s-1TLS/SSL\s0 handshake is +immediately terminated with an alert message containing the reason for +the verification failure. +The behaviour can be controlled by the additional +\&\s-1SSL_VERIFY_FAIL_IF_NO_PEER_CERT, SSL_VERIFY_CLIENT_ONCE\s0 and +\&\s-1SSL_VERIFY_POST_HANDSHAKE\s0 flags. +.Sp +\&\fBClient mode:\fR the server certificate is verified. If the verification process +fails, the \s-1TLS/SSL\s0 handshake is +immediately terminated with an alert message containing the reason for +the verification failure. If no server certificate is sent, because an +anonymous cipher is used, \s-1SSL_VERIFY_PEER\s0 is ignored. +.IP "\s-1SSL_VERIFY_FAIL_IF_NO_PEER_CERT\s0" 4 +.IX Item "SSL_VERIFY_FAIL_IF_NO_PEER_CERT" +\&\fBServer mode:\fR if the client did not return a certificate, the \s-1TLS/SSL\s0 +handshake is immediately terminated with a \*(L"handshake failure\*(R" alert. +This flag must be used together with \s-1SSL_VERIFY_PEER.\s0 +.Sp +\&\fBClient mode:\fR ignored (see \s-1BUGS\s0) +.IP "\s-1SSL_VERIFY_CLIENT_ONCE\s0" 4 +.IX Item "SSL_VERIFY_CLIENT_ONCE" +\&\fBServer mode:\fR only request a client certificate once during the +connection. Do not ask for a client certificate again during +renegotiation or post-authentication if a certificate was requested +during the initial handshake. This flag must be used together with +\&\s-1SSL_VERIFY_PEER.\s0 +.Sp +\&\fBClient mode:\fR ignored (see \s-1BUGS\s0) +.IP "\s-1SSL_VERIFY_POST_HANDSHAKE\s0" 4 +.IX Item "SSL_VERIFY_POST_HANDSHAKE" +\&\fBServer mode:\fR the server will not send a client certificate request +during the initial handshake, but will send the request via +\&\fBSSL_verify_client_post_handshake()\fR. This allows the \s-1SSL_CTX\s0 or \s-1SSL\s0 +to be configured for post-handshake peer verification before the +handshake occurs. This flag must be used together with +\&\s-1SSL_VERIFY_PEER.\s0 TLSv1.3 only; no effect on pre\-TLSv1.3 connections. +.Sp +\&\fBClient mode:\fR ignored (see \s-1BUGS\s0) +.PP +If the \fBmode\fR is \s-1SSL_VERIFY_NONE\s0 none of the other flags may be set. +.PP +The actual verification procedure is performed either using the built-in +verification procedure or using another application provided verification +function set with +\&\fBSSL_CTX_set_cert_verify_callback\fR\|(3). +The following descriptions apply in the case of the built-in procedure. An +application provided procedure also has access to the verify depth information +and the \fBverify_callback()\fR function, but the way this information is used +may be different. +.PP +\&\fBSSL_CTX_set_verify_depth()\fR and \fBSSL_set_verify_depth()\fR set a limit on the +number of certificates between the end-entity and trust-anchor certificates. +Neither the +end-entity nor the trust-anchor certificates count against \fBdepth\fR. If the +certificate chain needed to reach a trusted issuer is longer than \fBdepth+2\fR, +X509_V_ERR_CERT_CHAIN_TOO_LONG will be issued. +The depth count is \*(L"level 0:peer certificate\*(R", \*(L"level 1: \s-1CA\s0 certificate\*(R", +\&\*(L"level 2: higher level \s-1CA\s0 certificate\*(R", and so on. Setting the maximum +depth to 2 allows the levels 0, 1, 2 and 3 (0 being the end-entity and 3 the +trust-anchor). +The default depth limit is 100, +allowing for the peer certificate, at most 100 intermediate \s-1CA\s0 certificates and +a final trust anchor certificate. +.PP +The \fBverify_callback\fR function is used to control the behaviour when the +\&\s-1SSL_VERIFY_PEER\s0 flag is set. It must be supplied by the application and +receives two arguments: \fBpreverify_ok\fR indicates, whether the verification of +the certificate in question was passed (preverify_ok=1) or not +(preverify_ok=0). \fBx509_ctx\fR is a pointer to the complete context used +for the certificate chain verification. +.PP +The certificate chain is checked starting with the deepest nesting level +(the root \s-1CA\s0 certificate) and worked upward to the peer's certificate. +At each level signatures and issuer attributes are checked. Whenever +a verification error is found, the error number is stored in \fBx509_ctx\fR +and \fBverify_callback\fR is called with \fBpreverify_ok\fR=0. By applying +X509_CTX_store_* functions \fBverify_callback\fR can locate the certificate +in question and perform additional steps (see \s-1EXAMPLES\s0). If no error is +found for a certificate, \fBverify_callback\fR is called with \fBpreverify_ok\fR=1 +before advancing to the next level. +.PP +The return value of \fBverify_callback\fR controls the strategy of the further +verification process. If \fBverify_callback\fR returns 0, the verification +process is immediately stopped with \*(L"verification failed\*(R" state. If +\&\s-1SSL_VERIFY_PEER\s0 is set, a verification failure alert is sent to the peer and +the \s-1TLS/SSL\s0 handshake is terminated. If \fBverify_callback\fR returns 1, +the verification process is continued. If \fBverify_callback\fR always returns +1, the \s-1TLS/SSL\s0 handshake will not be terminated with respect to verification +failures and the connection will be established. The calling process can +however retrieve the error code of the last verification error using +\&\fBSSL_get_verify_result\fR\|(3) or by maintaining its +own error storage managed by \fBverify_callback\fR. +.PP +If no \fBverify_callback\fR is specified, the default callback will be used. +Its return value is identical to \fBpreverify_ok\fR, so that any verification +failure will lead to a termination of the \s-1TLS/SSL\s0 handshake with an +alert message, if \s-1SSL_VERIFY_PEER\s0 is set. +.PP +After calling \fBSSL_set_post_handshake_auth()\fR, the client will need to add a +certificate or certificate callback to its configuration before it can +successfully authenticate. This must be called before \fBSSL_connect()\fR. +.PP +\&\fBSSL_verify_client_post_handshake()\fR requires that verify flags have been +previously set, and that a client sent the post-handshake authentication +extension. When the client returns a certificate the verify callback will be +invoked. A write operation must take place for the Certificate Request to be +sent to the client, this can be done with \fBSSL_do_handshake()\fR or \fBSSL_write_ex()\fR. +Only one certificate request may be outstanding at any time. +.PP +When post-handshake authentication occurs, a refreshed NewSessionTicket +message is sent to the client. +.SH "BUGS" +.IX Header "BUGS" +In client mode, it is not checked whether the \s-1SSL_VERIFY_PEER\s0 flag +is set, but whether any flags other than \s-1SSL_VERIFY_NONE\s0 are set. This can +lead to unexpected behaviour if \s-1SSL_VERIFY_PEER\s0 and other flags are not used as +required. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +The SSL*_set_verify*() functions do not provide diagnostic information. +.PP +The \fBSSL_verify_client_post_handshake()\fR function returns 1 if the request +succeeded, and 0 if the request failed. The error stack can be examined +to determine the failure reason. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +The following code sequence realizes an example \fBverify_callback\fR function +that will always continue the \s-1TLS/SSL\s0 handshake regardless of verification +failure, if wished. The callback realizes a verification depth limit with +more informational output. +.PP +All verification errors are printed; information about the certificate chain +is printed on request. +The example is realized for a server that does allow but not require client +certificates. +.PP +The example makes use of the ex_data technique to store application data +into/retrieve application data from the \s-1SSL\s0 structure +(see \fBCRYPTO_get_ex_new_index\fR\|(3), +\&\fBSSL_get_ex_data_X509_STORE_CTX_idx\fR\|(3)). +.PP +.Vb 7 +\& ... +\& typedef struct { +\& int verbose_mode; +\& int verify_depth; +\& int always_continue; +\& } mydata_t; +\& int mydata_index; +\& +\& ... +\& static int verify_callback(int preverify_ok, X509_STORE_CTX *ctx) +\& { +\& char buf[256]; +\& X509 *err_cert; +\& int err, depth; +\& SSL *ssl; +\& mydata_t *mydata; +\& +\& err_cert = X509_STORE_CTX_get_current_cert(ctx); +\& err = X509_STORE_CTX_get_error(ctx); +\& depth = X509_STORE_CTX_get_error_depth(ctx); +\& +\& /* +\& * Retrieve the pointer to the SSL of the connection currently treated +\& * and the application specific data stored into the SSL object. +\& */ +\& ssl = X509_STORE_CTX_get_ex_data(ctx, SSL_get_ex_data_X509_STORE_CTX_idx()); +\& mydata = SSL_get_ex_data(ssl, mydata_index); +\& +\& X509_NAME_oneline(X509_get_subject_name(err_cert), buf, 256); +\& +\& /* +\& * Catch a too long certificate chain. The depth limit set using +\& * SSL_CTX_set_verify_depth() is by purpose set to "limit+1" so +\& * that whenever the "depth>verify_depth" condition is met, we +\& * have violated the limit and want to log this error condition. +\& * We must do it here, because the CHAIN_TOO_LONG error would not +\& * be found explicitly; only errors introduced by cutting off the +\& * additional certificates would be logged. +\& */ +\& if (depth > mydata\->verify_depth) { +\& preverify_ok = 0; +\& err = X509_V_ERR_CERT_CHAIN_TOO_LONG; +\& X509_STORE_CTX_set_error(ctx, err); +\& } +\& if (!preverify_ok) { +\& printf("verify error:num=%d:%s:depth=%d:%s\en", err, +\& X509_verify_cert_error_string(err), depth, buf); +\& } else if (mydata\->verbose_mode) { +\& printf("depth=%d:%s\en", depth, buf); +\& } +\& +\& /* +\& * At this point, err contains the last verification error. We can use +\& * it for something special +\& */ +\& if (!preverify_ok && (err == X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT)) { +\& X509_NAME_oneline(X509_get_issuer_name(err_cert), buf, 256); +\& printf("issuer= %s\en", buf); +\& } +\& +\& if (mydata\->always_continue) +\& return 1; +\& else +\& return preverify_ok; +\& } +\& ... +\& +\& mydata_t mydata; +\& +\& ... +\& mydata_index = SSL_get_ex_new_index(0, "mydata index", NULL, NULL, NULL); +\& +\& ... +\& SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER | SSL_VERIFY_CLIENT_ONCE, +\& verify_callback); +\& +\& /* +\& * Let the verify_callback catch the verify_depth error so that we get +\& * an appropriate error in the logfile. +\& */ +\& SSL_CTX_set_verify_depth(verify_depth + 1); +\& +\& /* +\& * Set up the SSL specific data into "mydata" and store it into th SSL +\& * structure. +\& */ +\& mydata.verify_depth = verify_depth; ... +\& SSL_set_ex_data(ssl, mydata_index, &mydata); +\& +\& ... +\& SSL_accept(ssl); /* check of success left out for clarity */ +\& if (peer = SSL_get_peer_certificate(ssl)) { +\& if (SSL_get_verify_result(ssl) == X509_V_OK) { +\& /* The client sent a certificate which verified OK */ +\& } +\& } +.Ve +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), \fBSSL_new\fR\|(3), +\&\fBSSL_CTX_get_verify_mode\fR\|(3), +\&\fBSSL_get_verify_result\fR\|(3), +\&\fBSSL_CTX_load_verify_locations\fR\|(3), +\&\fBSSL_get_peer_certificate\fR\|(3), +\&\fBSSL_CTX_set_cert_verify_callback\fR\|(3), +\&\fBSSL_get_ex_data_X509_STORE_CTX_idx\fR\|(3), +\&\fBSSL_CTX_set_client_cert_cb\fR\|(3), +\&\fBCRYPTO_get_ex_new_index\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +The \s-1SSL_VERIFY_POST_HANDSHAKE\s0 option, and the \fBSSL_verify_client_post_handshake()\fR +and \fBSSL_set_post_handshake_auth()\fR functions were added in OpenSSL 1.1.1. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_use_certificate.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_use_certificate.3 new file mode 100644 index 00000000..3fbc6bd3 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_use_certificate.3 @@ -0,0 +1,324 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CTX_USE_CERTIFICATE 3" +.TH SSL_CTX_USE_CERTIFICATE 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_CTX_use_certificate, SSL_CTX_use_certificate_ASN1, SSL_CTX_use_certificate_file, SSL_use_certificate, SSL_use_certificate_ASN1, SSL_use_certificate_file, SSL_CTX_use_certificate_chain_file, SSL_use_certificate_chain_file, SSL_CTX_use_PrivateKey, SSL_CTX_use_PrivateKey_ASN1, SSL_CTX_use_PrivateKey_file, SSL_CTX_use_RSAPrivateKey, SSL_CTX_use_RSAPrivateKey_ASN1, SSL_CTX_use_RSAPrivateKey_file, SSL_use_PrivateKey_file, SSL_use_PrivateKey_ASN1, SSL_use_PrivateKey, SSL_use_RSAPrivateKey, SSL_use_RSAPrivateKey_ASN1, SSL_use_RSAPrivateKey_file, SSL_CTX_check_private_key, SSL_check_private_key, SSL_CTX_use_cert_and_key, SSL_use_cert_and_key \&\- load certificate and key data +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int SSL_CTX_use_certificate(SSL_CTX *ctx, X509 *x); +\& int SSL_CTX_use_certificate_ASN1(SSL_CTX *ctx, int len, unsigned char *d); +\& int SSL_CTX_use_certificate_file(SSL_CTX *ctx, const char *file, int type); +\& int SSL_use_certificate(SSL *ssl, X509 *x); +\& int SSL_use_certificate_ASN1(SSL *ssl, unsigned char *d, int len); +\& int SSL_use_certificate_file(SSL *ssl, const char *file, int type); +\& +\& int SSL_CTX_use_certificate_chain_file(SSL_CTX *ctx, const char *file); +\& int SSL_use_certificate_chain_file(SSL *ssl, const char *file); +\& +\& int SSL_CTX_use_PrivateKey(SSL_CTX *ctx, EVP_PKEY *pkey); +\& int SSL_CTX_use_PrivateKey_ASN1(int pk, SSL_CTX *ctx, unsigned char *d, +\& long len); +\& int SSL_CTX_use_PrivateKey_file(SSL_CTX *ctx, const char *file, int type); +\& int SSL_CTX_use_RSAPrivateKey(SSL_CTX *ctx, RSA *rsa); +\& int SSL_CTX_use_RSAPrivateKey_ASN1(SSL_CTX *ctx, unsigned char *d, long len); +\& int SSL_CTX_use_RSAPrivateKey_file(SSL_CTX *ctx, const char *file, int type); +\& int SSL_use_PrivateKey(SSL *ssl, EVP_PKEY *pkey); +\& int SSL_use_PrivateKey_ASN1(int pk, SSL *ssl, unsigned char *d, long len); +\& int SSL_use_PrivateKey_file(SSL *ssl, const char *file, int type); +\& int SSL_use_RSAPrivateKey(SSL *ssl, RSA *rsa); +\& int SSL_use_RSAPrivateKey_ASN1(SSL *ssl, unsigned char *d, long len); +\& int SSL_use_RSAPrivateKey_file(SSL *ssl, const char *file, int type); +\& +\& int SSL_CTX_check_private_key(const SSL_CTX *ctx); +\& int SSL_check_private_key(const SSL *ssl); +\& +\& int SSL_CTX_use_cert_and_key(SSL_CTX *ctx, X509 *x, EVP_PKEY *pkey, STACK_OF(X509) *chain, int override); +\& int SSL_use_cert_and_key(SSL *ssl, X509 *x, EVP_PKEY *pkey, STACK_OF(X509) *chain, int override); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +These functions load the certificates and private keys into the \s-1SSL_CTX\s0 +or \s-1SSL\s0 object, respectively. +.PP +The SSL_CTX_* class of functions loads the certificates and keys into the +\&\s-1SSL_CTX\s0 object \fBctx\fR. The information is passed to \s-1SSL\s0 objects \fBssl\fR +created from \fBctx\fR with \fBSSL_new\fR\|(3) by copying, so that +changes applied to \fBctx\fR do not propagate to already existing \s-1SSL\s0 objects. +.PP +The SSL_* class of functions only loads certificates and keys into a +specific \s-1SSL\s0 object. The specific information is kept, when +\&\fBSSL_clear\fR\|(3) is called for this \s-1SSL\s0 object. +.PP +\&\fBSSL_CTX_use_certificate()\fR loads the certificate \fBx\fR into \fBctx\fR, +\&\fBSSL_use_certificate()\fR loads \fBx\fR into \fBssl\fR. The rest of the +certificates needed to form the complete certificate chain can be +specified using the +\&\fBSSL_CTX_add_extra_chain_cert\fR\|(3) +function. +.PP +\&\fBSSL_CTX_use_certificate_ASN1()\fR loads the \s-1ASN1\s0 encoded certificate from +the memory location \fBd\fR (with length \fBlen\fR) into \fBctx\fR, +\&\fBSSL_use_certificate_ASN1()\fR loads the \s-1ASN1\s0 encoded certificate into \fBssl\fR. +.PP +\&\fBSSL_CTX_use_certificate_file()\fR loads the first certificate stored in \fBfile\fR +into \fBctx\fR. The formatting \fBtype\fR of the certificate must be specified +from the known types \s-1SSL_FILETYPE_PEM, SSL_FILETYPE_ASN1.\s0 +\&\fBSSL_use_certificate_file()\fR loads the certificate from \fBfile\fR into \fBssl\fR. +See the \s-1NOTES\s0 section on why \fBSSL_CTX_use_certificate_chain_file()\fR +should be preferred. +.PP +\&\fBSSL_CTX_use_certificate_chain_file()\fR loads a certificate chain from +\&\fBfile\fR into \fBctx\fR. The certificates must be in \s-1PEM\s0 format and must +be sorted starting with the subject's certificate (actual client or server +certificate), followed by intermediate \s-1CA\s0 certificates if applicable, and +ending at the highest level (root) \s-1CA.\s0 \fBSSL_use_certificate_chain_file()\fR is +similar except it loads the certificate chain into \fBssl\fR. +.PP +\&\fBSSL_CTX_use_PrivateKey()\fR adds \fBpkey\fR as private key to \fBctx\fR. +\&\fBSSL_CTX_use_RSAPrivateKey()\fR adds the private key \fBrsa\fR of type \s-1RSA\s0 +to \fBctx\fR. \fBSSL_use_PrivateKey()\fR adds \fBpkey\fR as private key to \fBssl\fR; +\&\fBSSL_use_RSAPrivateKey()\fR adds \fBrsa\fR as private key of type \s-1RSA\s0 to \fBssl\fR. +If a certificate has already been set and the private does not belong +to the certificate an error is returned. To change a certificate, private +key pair the new certificate needs to be set with \fBSSL_use_certificate()\fR +or \fBSSL_CTX_use_certificate()\fR before setting the private key with +\&\fBSSL_CTX_use_PrivateKey()\fR or \fBSSL_use_PrivateKey()\fR. +.PP +\&\fBSSL_CTX_use_cert_and_key()\fR and \fBSSL_use_cert_and_key()\fR assign the X.509 +certificate \fBx\fR, private key \fBkey\fR, and certificate \fBchain\fR onto the +corresponding \fBssl\fR or \fBctx\fR. The \fBpkey\fR argument must be the private +key of the X.509 certificate \fBx\fR. If the \fBoverride\fR argument is 0, then +\&\fBx\fR, \fBpkey\fR and \fBchain\fR are set only if all were not previously set. +If \fBoverride\fR is non\-0, then the certificate, private key and chain certs +are always set. If \fBpkey\fR is \s-1NULL,\s0 then the public key of \fBx\fR is used as +the private key. This is intended to be used with hardware (via the \s-1ENGINE\s0 +interface) that stores the private key securely, such that it cannot be +accessed by OpenSSL. The reference count of the public key is incremented +(twice if there is no private key); it is not copied nor duplicated. This +allows all private key validations checks to succeed without an actual +private key being assigned via \fBSSL_CTX_use_PrivateKey()\fR, etc. +.PP +\&\fBSSL_CTX_use_PrivateKey_ASN1()\fR adds the private key of type \fBpk\fR +stored at memory location \fBd\fR (length \fBlen\fR) to \fBctx\fR. +\&\fBSSL_CTX_use_RSAPrivateKey_ASN1()\fR adds the private key of type \s-1RSA\s0 +stored at memory location \fBd\fR (length \fBlen\fR) to \fBctx\fR. +\&\fBSSL_use_PrivateKey_ASN1()\fR and \fBSSL_use_RSAPrivateKey_ASN1()\fR add the private +key to \fBssl\fR. +.PP +\&\fBSSL_CTX_use_PrivateKey_file()\fR adds the first private key found in +\&\fBfile\fR to \fBctx\fR. The formatting \fBtype\fR of the private key must be specified +from the known types \s-1SSL_FILETYPE_PEM, SSL_FILETYPE_ASN1.\s0 +\&\fBSSL_CTX_use_RSAPrivateKey_file()\fR adds the first private \s-1RSA\s0 key found in +\&\fBfile\fR to \fBctx\fR. \fBSSL_use_PrivateKey_file()\fR adds the first private key found +in \fBfile\fR to \fBssl\fR; \fBSSL_use_RSAPrivateKey_file()\fR adds the first private +\&\s-1RSA\s0 key found to \fBssl\fR. +.PP +\&\fBSSL_CTX_check_private_key()\fR checks the consistency of a private key with +the corresponding certificate loaded into \fBctx\fR. If more than one +key/certificate pair (\s-1RSA/DSA\s0) is installed, the last item installed will +be checked. If e.g. the last item was a \s-1RSA\s0 certificate or key, the \s-1RSA\s0 +key/certificate pair will be checked. \fBSSL_check_private_key()\fR performs +the same check for \fBssl\fR. If no key/certificate was explicitly added for +this \fBssl\fR, the last item added into \fBctx\fR will be checked. +.SH "NOTES" +.IX Header "NOTES" +The internal certificate store of OpenSSL can hold several private +key/certificate pairs at a time. The certificate used depends on the +cipher selected, see also \fBSSL_CTX_set_cipher_list\fR\|(3). +.PP +When reading certificates and private keys from file, files of type +\&\s-1SSL_FILETYPE_ASN1\s0 (also known as \fB\s-1DER\s0\fR, binary encoding) can only contain +one certificate or private key, consequently +\&\fBSSL_CTX_use_certificate_chain_file()\fR is only applicable to \s-1PEM\s0 formatting. +Files of type \s-1SSL_FILETYPE_PEM\s0 can contain more than one item. +.PP +\&\fBSSL_CTX_use_certificate_chain_file()\fR adds the first certificate found +in the file to the certificate store. The other certificates are added +to the store of chain certificates using \fBSSL_CTX_add1_chain_cert\fR\|(3). Note: versions of OpenSSL before 1.0.2 only had a single +certificate chain store for all certificate types, OpenSSL 1.0.2 and later +have a separate chain store for each type. \fBSSL_CTX_use_certificate_chain_file()\fR +should be used instead of the \fBSSL_CTX_use_certificate_file()\fR function in order +to allow the use of complete certificate chains even when no trusted \s-1CA\s0 +storage is used or when the \s-1CA\s0 issuing the certificate shall not be added to +the trusted \s-1CA\s0 storage. +.PP +If additional certificates are needed to complete the chain during the +\&\s-1TLS\s0 negotiation, \s-1CA\s0 certificates are additionally looked up in the +locations of trusted \s-1CA\s0 certificates, see +\&\fBSSL_CTX_load_verify_locations\fR\|(3). +.PP +The private keys loaded from file can be encrypted. In order to successfully +load encrypted keys, a function returning the passphrase must have been +supplied, see +\&\fBSSL_CTX_set_default_passwd_cb\fR\|(3). +(Certificate files might be encrypted as well from the technical point +of view, it however does not make sense as the data in the certificate +is considered public anyway.) +.PP +All of the functions to set a new certificate will replace any existing +certificate of the same type that has already been set. Similarly all of the +functions to set a new private key will replace any private key that has already +been set. Applications should call \fBSSL_CTX_check_private_key\fR\|(3) or +\&\fBSSL_check_private_key\fR\|(3) as appropriate after loading a new certificate and +private key to confirm that the certificate and key match. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +On success, the functions return 1. +Otherwise check out the error stack to find out the reason. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), \fBSSL_new\fR\|(3), \fBSSL_clear\fR\|(3), +\&\fBSSL_CTX_load_verify_locations\fR\|(3), +\&\fBSSL_CTX_set_default_passwd_cb\fR\|(3), +\&\fBSSL_CTX_set_cipher_list\fR\|(3), +\&\fBSSL_CTX_set_client_CA_list\fR\|(3), +\&\fBSSL_CTX_set_client_cert_cb\fR\|(3), +\&\fBSSL_CTX_add_extra_chain_cert\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_use_psk_identity_hint.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_use_psk_identity_hint.3 new file mode 100644 index 00000000..213311c9 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_use_psk_identity_hint.3 @@ -0,0 +1,269 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CTX_USE_PSK_IDENTITY_HINT 3" +.TH SSL_CTX_USE_PSK_IDENTITY_HINT 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_psk_server_cb_func, SSL_psk_find_session_cb_func, SSL_CTX_use_psk_identity_hint, SSL_use_psk_identity_hint, SSL_CTX_set_psk_server_callback, SSL_set_psk_server_callback, SSL_CTX_set_psk_find_session_callback, SSL_set_psk_find_session_callback \&\- set PSK identity hint to use +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& typedef int (*SSL_psk_find_session_cb_func)(SSL *ssl, +\& const unsigned char *identity, +\& size_t identity_len, +\& SSL_SESSION **sess); +\& +\& +\& void SSL_CTX_set_psk_find_session_callback(SSL_CTX *ctx, +\& SSL_psk_find_session_cb_func cb); +\& void SSL_set_psk_find_session_callback(SSL *s, SSL_psk_find_session_cb_func cb); +\& +\& typedef unsigned int (*SSL_psk_server_cb_func)(SSL *ssl, +\& const char *identity, +\& unsigned char *psk, +\& unsigned int max_psk_len); +\& +\& int SSL_CTX_use_psk_identity_hint(SSL_CTX *ctx, const char *hint); +\& int SSL_use_psk_identity_hint(SSL *ssl, const char *hint); +\& +\& void SSL_CTX_set_psk_server_callback(SSL_CTX *ctx, SSL_psk_server_cb_func cb); +\& void SSL_set_psk_server_callback(SSL *ssl, SSL_psk_server_cb_func cb); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +A server application wishing to use TLSv1.3 PSKs should set a callback +using either \fBSSL_CTX_set_psk_find_session_callback()\fR or +\&\fBSSL_set_psk_find_session_callback()\fR as appropriate. +.PP +The callback function is given a pointer to the \s-1SSL\s0 connection in \fBssl\fR and +an identity in \fBidentity\fR of length \fBidentity_len\fR. The callback function +should identify an \s-1SSL_SESSION\s0 object that provides the \s-1PSK\s0 details and store it +in \fB*sess\fR. The \s-1SSL_SESSION\s0 object should, as a minimum, set the master key, +the ciphersuite and the protocol version. See +\&\fBSSL_CTX_set_psk_use_session_callback\fR\|(3) for details. +.PP +It is also possible for the callback to succeed but not supply a \s-1PSK.\s0 In this +case no \s-1PSK\s0 will be used but the handshake will continue. To do this the +callback should return successfully and ensure that \fB*sess\fR is +\&\s-1NULL.\s0 +.PP +Identity hints are not relevant for TLSv1.3. A server application wishing to use +\&\s-1PSK\s0 ciphersuites for TLSv1.2 and below may call \fBSSL_CTX_use_psk_identity_hint()\fR +to set the given \fB\s-1NUL\s0\fR\-terminated \s-1PSK\s0 identity hint \fBhint\fR for \s-1SSL\s0 context +object \fBctx\fR. \fBSSL_use_psk_identity_hint()\fR sets the given \fB\s-1NUL\s0\fR\-terminated \s-1PSK\s0 +identity hint \fBhint\fR for the \s-1SSL\s0 connection object \fBssl\fR. If \fBhint\fR is +\&\fB\s-1NULL\s0\fR the current hint from \fBctx\fR or \fBssl\fR is deleted. +.PP +In the case where \s-1PSK\s0 identity hint is \fB\s-1NULL\s0\fR, the server does not send the +ServerKeyExchange message to the client. +.PP +A server application wishing to use PSKs for TLSv1.2 and below must provide a +callback function which is called when the server receives the +ClientKeyExchange message from the client. The purpose of the callback function +is to validate the received \s-1PSK\s0 identity and to fetch the pre-shared key used +during the connection setup phase. The callback is set using the functions +\&\fBSSL_CTX_set_psk_server_callback()\fR or \fBSSL_set_psk_server_callback()\fR. The callback +function is given the connection in parameter \fBssl\fR, \fB\s-1NUL\s0\fR\-terminated \s-1PSK\s0 +identity sent by the client in parameter \fBidentity\fR, and a buffer \fBpsk\fR of +length \fBmax_psk_len\fR bytes where the pre-shared key is to be stored. +.PP +The callback for use in TLSv1.2 will also work in TLSv1.3 although it is +recommended to use \fBSSL_CTX_set_psk_find_session_callback()\fR +or \fBSSL_set_psk_find_session_callback()\fR for this purpose instead. If TLSv1.3 has +been negotiated then OpenSSL will first check to see if a callback has been set +via \fBSSL_CTX_set_psk_find_session_callback()\fR or \fBSSL_set_psk_find_session_callback()\fR +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 \fBSSL_CTX_set_psk_server_callback()\fR or +\&\fBSSL_set_psk_server_callback()\fR and use that. In this case the handshake digest +will default to \s-1SHA\-256\s0 for any returned \s-1PSK.\s0 +.SH "NOTES" +.IX Header "NOTES" +A connection established via a TLSv1.3 \s-1PSK\s0 will appear as if session resumption +has occurred so that \fBSSL_session_reused\fR\|(3) will return true. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fB\fBSSL_CTX_use_psk_identity_hint()\fB\fR and \fB\fBSSL_use_psk_identity_hint()\fB\fR return +1 on success, 0 otherwise. +.PP +Return values from the TLSv1.2 and below server callback are interpreted as +follows: +.IP "0" 4 +\&\s-1PSK\s0 identity was not found. An \*(L"unknown_psk_identity\*(R" alert message +will be sent and the connection setup fails. +.IP ">0" 4 +.IX Item ">0" +\&\s-1PSK\s0 identity was found and the server callback has provided the \s-1PSK\s0 +successfully in parameter \fBpsk\fR. Return value is the length of +\&\fBpsk\fR in bytes. It is an error to return a value greater than +\&\fBmax_psk_len\fR. +.Sp +If the \s-1PSK\s0 identity was not found but the callback instructs the +protocol to continue anyway, the callback must provide some random +data to \fBpsk\fR and return the length of the random data, so the +connection will fail with decryption_error before it will be finished +completely. +.PP +The \fBSSL_psk_find_session_cb_func\fR callback should return 1 on success or 0 on +failure. In the event of failure the connection setup fails. +.SH "NOTES" +.IX Header "NOTES" +There are no known security issues with sharing the same \s-1PSK\s0 between TLSv1.2 (or +below) and TLSv1.3. However the \s-1RFC\s0 has this note of caution: +.PP +\&\*(L"While there is no known way in which the same \s-1PSK\s0 might produce related output +in both versions, only limited analysis has been done. Implementations can +ensure safety from cross-protocol related output by not reusing PSKs between +\&\s-1TLS 1.3\s0 and \s-1TLS 1.2.\*(R"\s0 +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBSSL_CTX_set_psk_use_session_callback\fR\|(3), +\&\fBSSL_set_psk_use_session_callback\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +\&\fBSSL_CTX_set_psk_find_session_callback()\fR and \fBSSL_set_psk_find_session_callback()\fR +were added in OpenSSL 1.1.1. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2006\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_use_serverinfo.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_use_serverinfo.3 new file mode 100644 index 00000000..c8b3d327 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_CTX_use_serverinfo.3 @@ -0,0 +1,215 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CTX_USE_SERVERINFO 3" +.TH SSL_CTX_USE_SERVERINFO 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_CTX_use_serverinfo_ex, SSL_CTX_use_serverinfo, SSL_CTX_use_serverinfo_file \&\- use serverinfo extension +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int SSL_CTX_use_serverinfo_ex(SSL_CTX *ctx, unsigned int version, +\& const unsigned char *serverinfo, +\& size_t serverinfo_length); +\& +\& int SSL_CTX_use_serverinfo(SSL_CTX *ctx, const unsigned char *serverinfo, +\& size_t serverinfo_length); +\& +\& int SSL_CTX_use_serverinfo_file(SSL_CTX *ctx, const char *file); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +These functions load \*(L"serverinfo\*(R" \s-1TLS\s0 extensions into the \s-1SSL_CTX. A\s0 +\&\*(L"serverinfo\*(R" extension is returned in response to an empty ClientHello +Extension. +.PP +\&\fBSSL_CTX_use_serverinfo_ex()\fR loads one or more serverinfo extensions from +a byte array into \fBctx\fR. The \fBversion\fR parameter specifies the format of the +byte array provided in \fB*serverinfo\fR which is of length \fBserverinfo_length\fR. +.PP +If \fBversion\fR is \fB\s-1SSL_SERVERINFOV2\s0\fR then the extensions in the array must +consist of a 4\-byte context, a 2\-byte Extension Type, a 2\-byte length, and then +length bytes of extension_data. The context and type values have the same +meaning as for \fBSSL_CTX_add_custom_ext\fR\|(3). If serverinfo is being loaded for +extensions to be added to a Certificate message, then the extension will only +be added for the first certificate in the message (which is always the +end-entity certificate). +.PP +If \fBversion\fR is \fB\s-1SSL_SERVERINFOV1\s0\fR then the extensions in the array must +consist of a 2\-byte Extension Type, a 2\-byte length, and then length bytes of +extension_data. The type value has the same meaning as for +\&\fBSSL_CTX_add_custom_ext\fR\|(3). The following default context value will be used +in this case: +.PP +.Vb 2 +\& SSL_EXT_TLS1_2_AND_BELOW_ONLY | SSL_EXT_CLIENT_HELLO +\& | SSL_EXT_TLS1_2_SERVER_HELLO | SSL_EXT_IGNORE_ON_RESUMPTION +.Ve +.PP +\&\fBSSL_CTX_use_serverinfo()\fR does the same thing as \fBSSL_CTX_use_serverinfo_ex()\fR +except that there is no \fBversion\fR parameter so a default version of +\&\s-1SSL_SERVERINFOV1\s0 is used instead. +.PP +\&\fBSSL_CTX_use_serverinfo_file()\fR loads one or more serverinfo extensions from +\&\fBfile\fR into \fBctx\fR. The extensions must be in \s-1PEM\s0 format. Each extension +must be in a format as described above for \fBSSL_CTX_use_serverinfo_ex()\fR. Each +\&\s-1PEM\s0 extension name must begin with the phrase \*(L"\s-1BEGIN SERVERINFOV2 FOR \*(R"\s0 for +\&\s-1SSL_SERVERINFOV2\s0 data or \*(L"\s-1BEGIN SERVERINFO FOR \*(R"\s0 for \s-1SSL_SERVERINFOV1\s0 data. +.PP +If more than one certificate (\s-1RSA/DSA\s0) is installed using +\&\fBSSL_CTX_use_certificate()\fR, the serverinfo extension will be loaded into the +last certificate installed. If e.g. the last item was a \s-1RSA\s0 certificate, the +loaded serverinfo extension data will be loaded for that certificate. To +use the serverinfo extension for multiple certificates, +\&\fBSSL_CTX_use_serverinfo()\fR needs to be called multiple times, once \fBafter\fR +each time a certificate is loaded via a call to \fBSSL_CTX_use_certificate()\fR. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +On success, the functions return 1. +On failure, the functions return 0. Check out the error stack to find out +the reason. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2013\-2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_SESSION_free.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_SESSION_free.3 new file mode 100644 index 00000000..517f97de --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_SESSION_free.3 @@ -0,0 +1,214 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_SESSION_FREE 3" +.TH SSL_SESSION_FREE 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_SESSION_new, SSL_SESSION_dup, SSL_SESSION_up_ref, SSL_SESSION_free \- create, free and manage SSL_SESSION structures +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& SSL_SESSION *SSL_SESSION_new(void); +\& SSL_SESSION *SSL_SESSION_dup(SSL_SESSION *src); +\& int SSL_SESSION_up_ref(SSL_SESSION *ses); +\& void SSL_SESSION_free(SSL_SESSION *session); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_SESSION_new()\fR creates a new \s-1SSL_SESSION\s0 structure and returns a pointer to +it. +.PP +\&\fBSSL_SESSION_dup()\fR copies the contents of the \s-1SSL_SESSION\s0 structure in \fBsrc\fR +and returns a pointer to it. +.PP +\&\fBSSL_SESSION_up_ref()\fR increments the reference count on the given \s-1SSL_SESSION\s0 +structure. +.PP +\&\fBSSL_SESSION_free()\fR decrements the reference count of \fBsession\fR and removes +the \fB\s-1SSL_SESSION\s0\fR structure pointed to by \fBsession\fR and frees up the allocated +memory, if the reference count has reached 0. +If \fBsession\fR is \s-1NULL\s0 nothing is done. +.SH "NOTES" +.IX Header "NOTES" +\&\s-1SSL_SESSION\s0 objects are allocated, when a \s-1TLS/SSL\s0 handshake operation +is successfully completed. Depending on the settings, see +\&\fBSSL_CTX_set_session_cache_mode\fR\|(3), +the \s-1SSL_SESSION\s0 objects are internally referenced by the \s-1SSL_CTX\s0 and +linked into its session cache. \s-1SSL\s0 objects may be using the \s-1SSL_SESSION\s0 object; +as a session may be reused, several \s-1SSL\s0 objects may be using one \s-1SSL_SESSION\s0 +object at the same time. It is therefore crucial to keep the reference +count (usage information) correct and not delete a \s-1SSL_SESSION\s0 object +that is still used, as this may lead to program failures due to +dangling pointers. These failures may also appear delayed, e.g. +when an \s-1SSL_SESSION\s0 object was completely freed as the reference count +incorrectly became 0, but it is still referenced in the internal +session cache and the cache list is processed during a +\&\fBSSL_CTX_flush_sessions\fR\|(3) operation. +.PP +\&\fBSSL_SESSION_free()\fR must only be called for \s-1SSL_SESSION\s0 objects, for +which the reference count was explicitly incremented (e.g. +by calling \fBSSL_get1_session()\fR, see \fBSSL_get_session\fR\|(3)) +or when the \s-1SSL_SESSION\s0 object was generated outside a \s-1TLS\s0 handshake +operation, e.g. by using \fBd2i_SSL_SESSION\fR\|(3). +It must not be called on other \s-1SSL_SESSION\s0 objects, as this would cause +incorrect reference counts and therefore program failures. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +SSL_SESSION_new returns a pointer to the newly allocated \s-1SSL_SESSION\s0 structure +or \s-1NULL\s0 on error. +.PP +SSL_SESSION_up_ref returns 1 on success or 0 on error. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), \fBSSL_get_session\fR\|(3), +\&\fBSSL_CTX_set_session_cache_mode\fR\|(3), +\&\fBSSL_CTX_flush_sessions\fR\|(3), +\&\fBd2i_SSL_SESSION\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +The \fBSSL_SESSION_dup()\fR function was added in OpenSSL 1.1.1. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_SESSION_get0_cipher.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_SESSION_get0_cipher.3 new file mode 100644 index 00000000..e71a3690 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_SESSION_get0_cipher.3 @@ -0,0 +1,187 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_SESSION_GET0_CIPHER 3" +.TH SSL_SESSION_GET0_CIPHER 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_SESSION_get0_cipher, SSL_SESSION_set_cipher \&\- set and retrieve the SSL cipher associated with a session +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& const SSL_CIPHER *SSL_SESSION_get0_cipher(const SSL_SESSION *s); +\& int SSL_SESSION_set_cipher(SSL_SESSION *s, const SSL_CIPHER *cipher); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_SESSION_get0_cipher()\fR retrieves the cipher that was used by the +connection when the session was created, or \s-1NULL\s0 if it cannot be determined. +.PP +The value returned is a pointer to an object maintained within \fBs\fR and +should not be released. +.PP +\&\fBSSL_SESSION_set_cipher()\fR can be used to set the ciphersuite associated with the +\&\s-1SSL_SESSION\s0 \fBs\fR to \fBcipher\fR. For example, this could be used to set up a +session based \s-1PSK\s0 (see \fBSSL_CTX_set_psk_use_session_callback\fR\|(3)). +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_SESSION_get0_cipher()\fR returns the \s-1SSL_CIPHER\s0 associated with the \s-1SSL_SESSION\s0 +or \s-1NULL\s0 if it cannot be determined. +.PP +\&\fBSSL_SESSION_set_cipher()\fR returns 1 on success or 0 on failure. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), +\&\fBd2i_SSL_SESSION\fR\|(3), +\&\fBSSL_SESSION_get_time\fR\|(3), +\&\fBSSL_SESSION_get0_hostname\fR\|(3), +\&\fBSSL_SESSION_free\fR\|(3), +\&\fBSSL_CTX_set_psk_use_session_callback\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +The \fBSSL_SESSION_get0_cipher()\fR function was added in OpenSSL 1.1.0. +The \fBSSL_SESSION_set_cipher()\fR function was added in OpenSSL 1.1.1. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2016\-2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_SESSION_get0_hostname.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_SESSION_get0_hostname.3 new file mode 100644 index 00000000..1f5c4755 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_SESSION_get0_hostname.3 @@ -0,0 +1,204 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_SESSION_GET0_HOSTNAME 3" +.TH SSL_SESSION_GET0_HOSTNAME 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_SESSION_get0_hostname, SSL_SESSION_set1_hostname, SSL_SESSION_get0_alpn_selected, SSL_SESSION_set1_alpn_selected \&\- get and set SNI and ALPN data associated with a session +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& const char *SSL_SESSION_get0_hostname(const SSL_SESSION *s); +\& int SSL_SESSION_set1_hostname(SSL_SESSION *s, const char *hostname); +\& +\& void SSL_SESSION_get0_alpn_selected(const SSL_SESSION *s, +\& const unsigned char **alpn, +\& size_t *len); +\& int SSL_SESSION_set1_alpn_selected(SSL_SESSION *s, const unsigned char *alpn, +\& size_t len); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_SESSION_get0_hostname()\fR retrieves the \s-1SNI\s0 value that was sent by the +client when the session was created if it was accepted by the server and TLSv1.2 +or below was negotiated. Otherwise \s-1NULL\s0 is returned. Note that in TLSv1.3 the +\&\s-1SNI\s0 hostname is negotiated with each handshake including resumption handshakes +and is therefore never associated with the session. +.PP +The value returned is a pointer to memory maintained within \fBs\fR and +should not be free'd. +.PP +\&\fBSSL_SESSION_set1_hostname()\fR sets the \s-1SNI\s0 value for the hostname to a copy of +the string provided in hostname. +.PP +\&\fBSSL_SESSION_get0_alpn_selected()\fR retrieves the selected \s-1ALPN\s0 protocol for this +session and its associated length in bytes. The returned value of \fB*alpn\fR is a +pointer to memory maintained within \fBs\fR and should not be free'd. +.PP +\&\fBSSL_SESSION_set1_alpn_selected()\fR sets the \s-1ALPN\s0 protocol for this session to the +value in \fBalpn\fR which should be of length \fBlen\fR bytes. A copy of the input +value is made, and the caller retains ownership of the memory pointed to by +\&\fBalpn\fR. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_SESSION_get0_hostname()\fR returns either a string or \s-1NULL\s0 based on if there +is the \s-1SNI\s0 value sent by client. +.PP +\&\fBSSL_SESSION_set1_hostname()\fR returns 1 on success or 0 on error. +.PP +\&\fBSSL_SESSION_set1_alpn_selected()\fR returns 1 on success or 0 on error. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), +\&\fBd2i_SSL_SESSION\fR\|(3), +\&\fBSSL_SESSION_get_time\fR\|(3), +\&\fBSSL_SESSION_free\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +The \fBSSL_SESSION_set1_hostname()\fR, \fBSSL_SESSION_get0_alpn_selected()\fR and +\&\fBSSL_SESSION_set1_alpn_selected()\fR functions were added in OpenSSL 1.1.1. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2016\-2020 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_SESSION_get0_id_context.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_SESSION_get0_id_context.3 new file mode 100644 index 00000000..415113f2 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_SESSION_get0_id_context.3 @@ -0,0 +1,185 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_SESSION_GET0_ID_CONTEXT 3" +.TH SSL_SESSION_GET0_ID_CONTEXT 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_SESSION_get0_id_context, SSL_SESSION_set1_id_context \&\- get and set the SSL ID context associated with a session +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& const unsigned char *SSL_SESSION_get0_id_context(const SSL_SESSION *s, +\& unsigned int *len) +\& int SSL_SESSION_set1_id_context(SSL_SESSION *s, const unsigned char *sid_ctx, +\& unsigned int sid_ctx_len); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +See \fBSSL_CTX_set_session_id_context\fR\|(3) for further details on session \s-1ID\s0 +contexts. +.PP +\&\fBSSL_SESSION_get0_id_context()\fR returns the \s-1ID\s0 context associated with +the \s-1SSL/TLS\s0 session \fBs\fR. The length of the \s-1ID\s0 context is written to +\&\fB*len\fR if \fBlen\fR is not \s-1NULL.\s0 +.PP +The value returned is a pointer to an object maintained within \fBs\fR and +should not be released. +.PP +\&\fBSSL_SESSION_set1_id_context()\fR takes a copy of the provided \s-1ID\s0 context given in +\&\fBsid_ctx\fR and associates it with the session \fBs\fR. The length of the \s-1ID\s0 context +is given by \fBsid_ctx_len\fR which must not exceed \s-1SSL_MAX_SID_CTX_LENGTH\s0 bytes. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_SESSION_set1_id_context()\fR returns 1 on success or 0 on error. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), +\&\fBSSL_set_session_id_context\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +The \fBSSL_SESSION_get0_id_context()\fR function was added in OpenSSL 1.1.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2015\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_SESSION_get0_peer.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_SESSION_get0_peer.3 new file mode 100644 index 00000000..55155fc3 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_SESSION_get0_peer.3 @@ -0,0 +1,169 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_SESSION_GET0_PEER 3" +.TH SSL_SESSION_GET0_PEER 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_SESSION_get0_peer \&\- get details about peer's certificate for a session +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& X509 *SSL_SESSION_get0_peer(SSL_SESSION *s); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_SESSION_get0_peer()\fR returns the peer certificate associated with the session +\&\fBs\fR or \s-1NULL\s0 if no peer certificate is available. The caller should not free the +returned value (unless \fBX509_up_ref\fR\|(3) has also been called). +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_SESSION_get0_peer()\fR returns a pointer to the peer certificate or \s-1NULL\s0 if +no peer certificate is available. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_SESSION_get_compress_id.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_SESSION_get_compress_id.3 new file mode 100644 index 00000000..1bcdb163 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_SESSION_get_compress_id.3 @@ -0,0 +1,170 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_SESSION_GET_COMPRESS_ID 3" +.TH SSL_SESSION_GET_COMPRESS_ID 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_SESSION_get_compress_id \&\- get details about the compression associated with a session +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& unsigned int SSL_SESSION_get_compress_id(const SSL_SESSION *s); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +If compression has been negotiated for an ssl session then +\&\fBSSL_SESSION_get_compress_id()\fR will return the id for the compression method or +0 otherwise. The only built-in supported compression method is zlib which has an +id of 1. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_SESSION_get_compress_id()\fR returns the id of the compression method or 0 if +none. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_SESSION_get_ex_data.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_SESSION_get_ex_data.3 new file mode 100644 index 00000000..039a60b1 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_SESSION_get_ex_data.3 @@ -0,0 +1,177 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_SESSION_GET_EX_DATA 3" +.TH SSL_SESSION_GET_EX_DATA 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_SESSION_set_ex_data, SSL_SESSION_get_ex_data \&\- get and set application specific data on a session +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int SSL_SESSION_set_ex_data(SSL_SESSION *ss, int idx, void *data); +\& void *SSL_SESSION_get_ex_data(const SSL_SESSION *s, int idx); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_SESSION_set_ex_data()\fR enables an application to store arbitrary application +specific data \fBdata\fR in an \s-1SSL_SESSION\s0 structure \fBss\fR. The index \fBidx\fR should +be a value previously returned from a call to \fBCRYPTO_get_ex_new_index\fR\|(3). +.PP +\&\fBSSL_SESSION_get_ex_data()\fR retrieves application specific data previously stored +in an \s-1SSL_SESSION\s0 structure \fBs\fR. The \fBidx\fR value should be the same as that +used when originally storing the data. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_SESSION_set_ex_data()\fR returns 1 for success or 0 for failure. +.PP +\&\fBSSL_SESSION_get_ex_data()\fR returns the previously stored value or \s-1NULL\s0 on +failure. \s-1NULL\s0 may also be a valid value. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), +\&\fBCRYPTO_get_ex_new_index\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_SESSION_get_protocol_version.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_SESSION_get_protocol_version.3 new file mode 100644 index 00000000..aa5f8996 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_SESSION_get_protocol_version.3 @@ -0,0 +1,185 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_SESSION_GET_PROTOCOL_VERSION 3" +.TH SSL_SESSION_GET_PROTOCOL_VERSION 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_SESSION_get_protocol_version, SSL_SESSION_set_protocol_version \&\- get and set the session protocol version +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int SSL_SESSION_get_protocol_version(const SSL_SESSION *s); +\& int SSL_SESSION_set_protocol_version(SSL_SESSION *s, int version); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_SESSION_get_protocol_version()\fR returns the protocol version number used +by session \fBs\fR. +.PP +\&\fBSSL_SESSION_set_protocol_version()\fR sets the protocol version associated with the +\&\s-1SSL_SESSION\s0 object \fBs\fR to the value \fBversion\fR. This value should be a version +constant such as \fB\s-1TLS1_3_VERSION\s0\fR etc. For example, this could be used to set +up a session based \s-1PSK\s0 (see \fBSSL_CTX_set_psk_use_session_callback\fR\|(3)). +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_SESSION_get_protocol_version()\fR returns a number indicating the protocol +version used for the session; this number matches the constants \fIe.g.\fR +\&\fB\s-1TLS1_VERSION\s0\fR, \fB\s-1TLS1_2_VERSION\s0\fR or \fB\s-1TLS1_3_VERSION\s0\fR. +.PP +Note that the \fBSSL_SESSION_get_protocol_version()\fR function +does \fBnot\fR perform a null check on the provided session \fBs\fR pointer. +.PP +\&\fBSSL_SESSION_set_protocol_version()\fR returns 1 on success or 0 on failure. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), +\&\fBSSL_CTX_set_psk_use_session_callback\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +The \fBSSL_SESSION_get_protocol_version()\fR function was added in OpenSSL 1.1.0. +The \fBSSL_SESSION_set_protocol_version()\fR function was added in OpenSSL 1.1.1. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2001\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_SESSION_get_time.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_SESSION_get_time.3 new file mode 100644 index 00000000..daf0671c --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_SESSION_get_time.3 @@ -0,0 +1,204 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_SESSION_GET_TIME 3" +.TH SSL_SESSION_GET_TIME 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_SESSION_get_time, SSL_SESSION_set_time, SSL_SESSION_get_timeout, SSL_SESSION_set_timeout, SSL_get_time, SSL_set_time, SSL_get_timeout, SSL_set_timeout \&\- retrieve and manipulate session time and timeout settings +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& long SSL_SESSION_get_time(const SSL_SESSION *s); +\& long SSL_SESSION_set_time(SSL_SESSION *s, long tm); +\& long SSL_SESSION_get_timeout(const SSL_SESSION *s); +\& long SSL_SESSION_set_timeout(SSL_SESSION *s, long tm); +\& +\& long SSL_get_time(const SSL_SESSION *s); +\& long SSL_set_time(SSL_SESSION *s, long tm); +\& long SSL_get_timeout(const SSL_SESSION *s); +\& long SSL_set_timeout(SSL_SESSION *s, long tm); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_SESSION_get_time()\fR returns the time at which the session \fBs\fR was +established. The time is given in seconds since the Epoch and therefore +compatible to the time delivered by the \fBtime()\fR call. +.PP +\&\fBSSL_SESSION_set_time()\fR replaces the creation time of the session \fBs\fR with +the chosen value \fBtm\fR. +.PP +\&\fBSSL_SESSION_get_timeout()\fR returns the timeout value set for session \fBs\fR +in seconds. +.PP +\&\fBSSL_SESSION_set_timeout()\fR sets the timeout value for session \fBs\fR in seconds +to \fBtm\fR. +.PP +The \fBSSL_get_time()\fR, \fBSSL_set_time()\fR, \fBSSL_get_timeout()\fR, and \fBSSL_set_timeout()\fR +functions are synonyms for the SSL_SESSION_*() counterparts. +.SH "NOTES" +.IX Header "NOTES" +Sessions are expired by examining the creation time and the timeout value. +Both are set at creation time of the session to the actual time and the +default timeout value at creation, respectively, as set by +\&\fBSSL_CTX_set_timeout\fR\|(3). +Using these functions it is possible to extend or shorten the lifetime +of the session. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_SESSION_get_time()\fR and \fBSSL_SESSION_get_timeout()\fR return the currently +valid values. +.PP +\&\fBSSL_SESSION_set_time()\fR and \fBSSL_SESSION_set_timeout()\fR return 1 on success. +.PP +If any of the function is passed the \s-1NULL\s0 pointer for the session \fBs\fR, +0 is returned. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), +\&\fBSSL_CTX_set_timeout\fR\|(3), +\&\fBSSL_get_default_timeout\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2001\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_SESSION_has_ticket.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_SESSION_has_ticket.3 new file mode 100644 index 00000000..67bac9d2 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_SESSION_has_ticket.3 @@ -0,0 +1,188 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_SESSION_HAS_TICKET 3" +.TH SSL_SESSION_HAS_TICKET 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_SESSION_get0_ticket, SSL_SESSION_has_ticket, SSL_SESSION_get_ticket_lifetime_hint \&\- get details about the ticket associated with a session +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int SSL_SESSION_has_ticket(const SSL_SESSION *s); +\& unsigned long SSL_SESSION_get_ticket_lifetime_hint(const SSL_SESSION *s); +\& void SSL_SESSION_get0_ticket(const SSL_SESSION *s, const unsigned char **tick, +\& size_t *len); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_SESSION_has_ticket()\fR returns 1 if there is a Session Ticket associated with +this session, and 0 otherwise. +.PP +SSL_SESSION_get_ticket_lifetime_hint returns the lifetime hint in seconds +associated with the session ticket. +.PP +SSL_SESSION_get0_ticket obtains a pointer to the ticket associated with a +session. The length of the ticket is written to \fB*len\fR. If \fBtick\fR is non +\&\s-1NULL\s0 then a pointer to the ticket is written to \fB*tick\fR. The pointer is only +valid while the connection is in use. The session (and hence the ticket pointer) +may also become invalid as a result of a call to \fBSSL_CTX_flush_sessions()\fR. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_SESSION_has_ticket()\fR returns 1 if session ticket exists or 0 otherwise. +.PP +\&\fBSSL_SESSION_get_ticket_lifetime_hint()\fR returns the number of seconds. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), +\&\fBd2i_SSL_SESSION\fR\|(3), +\&\fBSSL_SESSION_get_time\fR\|(3), +\&\fBSSL_SESSION_free\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +The \fBSSL_SESSION_has_ticket()\fR, \fBSSL_SESSION_get_ticket_lifetime_hint()\fR +and \fBSSL_SESSION_get0_ticket()\fR functions were added in OpenSSL 1.1.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2015\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_SESSION_is_resumable.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_SESSION_is_resumable.3 new file mode 100644 index 00000000..5fba8af1 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_SESSION_is_resumable.3 @@ -0,0 +1,174 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_SESSION_IS_RESUMABLE 3" +.TH SSL_SESSION_IS_RESUMABLE 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_SESSION_is_resumable \&\- determine whether an SSL_SESSION object can be used for resumption +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int SSL_SESSION_is_resumable(const SSL_SESSION *s); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_SESSION_is_resumable()\fR determines whether an \s-1SSL_SESSION\s0 object can be used +to resume a session or not. Returns 1 if it can or 0 if not. Note that +attempting to resume with a non-resumable session will result in a full +handshake. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_SESSION_is_resumable()\fR returns 1 if the session is resumable or 0 otherwise. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), +\&\fBSSL_get_session\fR\|(3), +\&\fBSSL_CTX_sess_set_new_cb\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +The \fBSSL_SESSION_is_resumable()\fR function was added in OpenSSL 1.1.1. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_SESSION_print.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_SESSION_print.3 new file mode 100644 index 00000000..ca5568fb --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_SESSION_print.3 @@ -0,0 +1,176 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_SESSION_PRINT 3" +.TH SSL_SESSION_PRINT 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_SESSION_print, SSL_SESSION_print_fp, SSL_SESSION_print_keylog \&\- printf information about a session +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int SSL_SESSION_print(BIO *fp, const SSL_SESSION *ses); +\& int SSL_SESSION_print_fp(FILE *fp, const SSL_SESSION *ses); +\& int SSL_SESSION_print_keylog(BIO *bp, const SSL_SESSION *x); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_SESSION_print()\fR prints summary information about the session provided in +\&\fBses\fR to the \s-1BIO\s0 \fBfp\fR. +.PP +\&\fBSSL_SESSION_print_fp()\fR does the same as \fBSSL_SESSION_print()\fR except it prints it +to the \s-1FILE\s0 \fBfp\fR. +.PP +\&\fBSSL_SESSION_print_keylog()\fR prints session information to the provided \s-1BIO\s0 +in \s-1NSS\s0 keylog format. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_SESSION_print()\fR, \fBSSL_SESSION_print_fp()\fR and SSL_SESSION_print_keylog return +1 on success or 0 on error. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_SESSION_set1_id.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_SESSION_set1_id.3 new file mode 100644 index 00000000..1cc5d613 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_SESSION_set1_id.3 @@ -0,0 +1,179 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_SESSION_SET1_ID 3" +.TH SSL_SESSION_SET1_ID 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_SESSION_get_id, SSL_SESSION_set1_id \&\- get and set the SSL session ID +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& const unsigned char *SSL_SESSION_get_id(const SSL_SESSION *s, +\& unsigned int *len) +\& int SSL_SESSION_set1_id(SSL_SESSION *s, const unsigned char *sid, +\& unsigned int sid_len); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_SESSION_get_id()\fR returns a pointer to the internal session id value for the +session \fBs\fR. The length of the id in bytes is stored in \fB*len\fR. The length may +be 0. The caller should not free the returned pointer directly. +.PP +\&\fBSSL_SESSION_set1_id()\fR sets the session \s-1ID\s0 for the \fBssl\fR \s-1SSL/TLS\s0 session +to \fBsid\fR of length \fBsid_len\fR. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_SESSION_get_id()\fR returns a pointer to the session id value. +\&\fBSSL_SESSION_set1_id()\fR returns 1 for success and 0 for failure, for example +if the supplied session \s-1ID\s0 length exceeds \fB\s-1SSL_MAX_SSL_SESSION_ID_LENGTH\s0\fR. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7) +.SH "HISTORY" +.IX Header "HISTORY" +The \fBSSL_SESSION_set1_id()\fR function was added in OpenSSL 1.1.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2015\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_accept.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_accept.3 new file mode 100644 index 00000000..1ae4a174 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_accept.3 @@ -0,0 +1,205 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_ACCEPT 3" +.TH SSL_ACCEPT 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_accept \- wait for a TLS/SSL client to initiate a TLS/SSL handshake +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int SSL_accept(SSL *ssl); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_accept()\fR waits for a \s-1TLS/SSL\s0 client to initiate the \s-1TLS/SSL\s0 handshake. +The communication channel must already have been set and assigned to the +\&\fBssl\fR by setting an underlying \fB\s-1BIO\s0\fR. +.SH "NOTES" +.IX Header "NOTES" +The behaviour of \fBSSL_accept()\fR depends on the underlying \s-1BIO.\s0 +.PP +If the underlying \s-1BIO\s0 is \fBblocking\fR, \fBSSL_accept()\fR will only return once the +handshake has been finished or an error occurred. +.PP +If the underlying \s-1BIO\s0 is \fBnon-blocking\fR, \fBSSL_accept()\fR will also return +when the underlying \s-1BIO\s0 could not satisfy the needs of \fBSSL_accept()\fR +to continue the handshake, indicating the problem by the return value \-1. +In this case a call to \fBSSL_get_error()\fR with the +return value of \fBSSL_accept()\fR will yield \fB\s-1SSL_ERROR_WANT_READ\s0\fR or +\&\fB\s-1SSL_ERROR_WANT_WRITE\s0\fR. The calling process then must repeat the call after +taking appropriate action to satisfy the needs of \fBSSL_accept()\fR. +The action depends on the underlying \s-1BIO.\s0 When using a non-blocking socket, +nothing is to be done, but \fBselect()\fR can be used to check for the required +condition. When using a buffering \s-1BIO,\s0 like a \s-1BIO\s0 pair, data must be written +into or retrieved out of the \s-1BIO\s0 before being able to continue. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +The following return values can occur: +.IP "0" 4 +The \s-1TLS/SSL\s0 handshake was not successful but was shut down controlled and +by the specifications of the \s-1TLS/SSL\s0 protocol. Call \fBSSL_get_error()\fR with the +return value \fBret\fR to find out the reason. +.IP "1" 4 +.IX Item "1" +The \s-1TLS/SSL\s0 handshake was successfully completed, a \s-1TLS/SSL\s0 connection has been +established. +.IP "<0" 4 +.IX Item "<0" +The \s-1TLS/SSL\s0 handshake was not successful because a fatal error occurred either +at the protocol level or a connection failure occurred. The shutdown was +not clean. It can also occur if action is needed to continue the operation +for non-blocking BIOs. Call \fBSSL_get_error()\fR with the return value \fBret\fR +to find out the reason. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBSSL_get_error\fR\|(3), \fBSSL_connect\fR\|(3), +\&\fBSSL_shutdown\fR\|(3), \fBssl\fR\|(7), \fBbio\fR\|(7), +\&\fBSSL_set_connect_state\fR\|(3), +\&\fBSSL_do_handshake\fR\|(3), +\&\fBSSL_CTX_new\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2020 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_alert_type_string.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_alert_type_string.3 new file mode 100644 index 00000000..b07c7814 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_alert_type_string.3 @@ -0,0 +1,369 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_ALERT_TYPE_STRING 3" +.TH SSL_ALERT_TYPE_STRING 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_alert_type_string, SSL_alert_type_string_long, SSL_alert_desc_string, SSL_alert_desc_string_long \- get textual description of alert information +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& const char *SSL_alert_type_string(int value); +\& const char *SSL_alert_type_string_long(int value); +\& +\& const char *SSL_alert_desc_string(int value); +\& const char *SSL_alert_desc_string_long(int value); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_alert_type_string()\fR returns a one letter string indicating the +type of the alert specified by \fBvalue\fR. +.PP +\&\fBSSL_alert_type_string_long()\fR returns a string indicating the type of the alert +specified by \fBvalue\fR. +.PP +\&\fBSSL_alert_desc_string()\fR returns a two letter string as a short form +describing the reason of the alert specified by \fBvalue\fR. +.PP +\&\fBSSL_alert_desc_string_long()\fR returns a string describing the reason +of the alert specified by \fBvalue\fR. +.SH "NOTES" +.IX Header "NOTES" +When one side of an \s-1SSL/TLS\s0 communication wants to inform the peer about +a special situation, it sends an alert. The alert is sent as a special message +and does not influence the normal data stream (unless its contents results +in the communication being canceled). +.PP +A warning alert is sent, when a non-fatal error condition occurs. The +\&\*(L"close notify\*(R" alert is sent as a warning alert. Other examples for +non-fatal errors are certificate errors (\*(L"certificate expired\*(R", +\&\*(L"unsupported certificate\*(R"), for which a warning alert may be sent. +(The sending party may however decide to send a fatal error.) The +receiving side may cancel the connection on reception of a warning +alert on it discretion. +.PP +Several alert messages must be sent as fatal alert messages as specified +by the \s-1TLS RFC. A\s0 fatal alert always leads to a connection abort. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +The following strings can occur for \fBSSL_alert_type_string()\fR or +\&\fBSSL_alert_type_string_long()\fR: +.ie n .IP """W""/""warning""" 4 +.el .IP "``W''/``warning''" 4 +.IX Item "W/warning" +.PD 0 +.ie n .IP """F""/""fatal""" 4 +.el .IP "``F''/``fatal''" 4 +.IX Item "F/fatal" +.ie n .IP """U""/""unknown""" 4 +.el .IP "``U''/``unknown''" 4 +.IX Item "U/unknown" +.PD +This indicates that no support is available for this alert type. +Probably \fBvalue\fR does not contain a correct alert message. +.PP +The following strings can occur for \fBSSL_alert_desc_string()\fR or +\&\fBSSL_alert_desc_string_long()\fR: +.ie n .IP """\s-1CN""/\s0""close notify""" 4 +.el .IP "``\s-1CN''/\s0``close notify''" 4 +.IX Item "CN/close notify" +The connection shall be closed. This is a warning alert. +.ie n .IP """\s-1UM""/\s0""unexpected message""" 4 +.el .IP "``\s-1UM''/\s0``unexpected message''" 4 +.IX Item "UM/unexpected message" +An inappropriate message was received. This alert is always fatal +and should never be observed in communication between proper +implementations. +.ie n .IP """\s-1BM""/\s0""bad record mac""" 4 +.el .IP "``\s-1BM''/\s0``bad record mac''" 4 +.IX Item "BM/bad record mac" +This alert is returned if a record is received with an incorrect +\&\s-1MAC.\s0 This message is always fatal. +.ie n .IP """\s-1DF""/\s0""decompression failure""" 4 +.el .IP "``\s-1DF''/\s0``decompression failure''" 4 +.IX Item "DF/decompression failure" +The decompression function received improper input (e.g. data +that would expand to excessive length). This message is always +fatal. +.ie n .IP """\s-1HF""/\s0""handshake failure""" 4 +.el .IP "``\s-1HF''/\s0``handshake failure''" 4 +.IX Item "HF/handshake failure" +Reception of a handshake_failure alert message indicates that the +sender was unable to negotiate an acceptable set of security +parameters given the options available. This is a fatal error. +.ie n .IP """\s-1NC""/\s0""no certificate""" 4 +.el .IP "``\s-1NC''/\s0``no certificate''" 4 +.IX Item "NC/no certificate" +A client, that was asked to send a certificate, does not send a certificate +(SSLv3 only). +.ie n .IP """\s-1BC""/\s0""bad certificate""" 4 +.el .IP "``\s-1BC''/\s0``bad certificate''" 4 +.IX Item "BC/bad certificate" +A certificate was corrupt, contained signatures that did not +verify correctly, etc +.ie n .IP """\s-1UC""/\s0""unsupported certificate""" 4 +.el .IP "``\s-1UC''/\s0``unsupported certificate''" 4 +.IX Item "UC/unsupported certificate" +A certificate was of an unsupported type. +.ie n .IP """\s-1CR""/\s0""certificate revoked""" 4 +.el .IP "``\s-1CR''/\s0``certificate revoked''" 4 +.IX Item "CR/certificate revoked" +A certificate was revoked by its signer. +.ie n .IP """\s-1CE""/\s0""certificate expired""" 4 +.el .IP "``\s-1CE''/\s0``certificate expired''" 4 +.IX Item "CE/certificate expired" +A certificate has expired or is not currently valid. +.ie n .IP """\s-1CU""/\s0""certificate unknown""" 4 +.el .IP "``\s-1CU''/\s0``certificate unknown''" 4 +.IX Item "CU/certificate unknown" +Some other (unspecified) issue arose in processing the +certificate, rendering it unacceptable. +.ie n .IP """\s-1IP""/\s0""illegal parameter""" 4 +.el .IP "``\s-1IP''/\s0``illegal parameter''" 4 +.IX Item "IP/illegal parameter" +A field in the handshake was out of range or inconsistent with +other fields. This is always fatal. +.ie n .IP """\s-1DC""/\s0""decryption failed""" 4 +.el .IP "``\s-1DC''/\s0``decryption failed''" 4 +.IX Item "DC/decryption failed" +A TLSCiphertext decrypted in an invalid way: either it wasn't an +even multiple of the block length or its padding values, when +checked, weren't correct. This message is always fatal. +.ie n .IP """\s-1RO""/\s0""record overflow""" 4 +.el .IP "``\s-1RO''/\s0``record overflow''" 4 +.IX Item "RO/record overflow" +A TLSCiphertext record was received which had a length more than +2^14+2048 bytes, or a record decrypted to a TLSCompressed record +with more than 2^14+1024 bytes. This message is always fatal. +.ie n .IP """\s-1CA""/\s0""unknown \s-1CA""\s0" 4 +.el .IP "``\s-1CA''/\s0``unknown \s-1CA''\s0" 4 +.IX Item "CA/unknown CA" +A valid certificate chain or partial chain was received, but the +certificate was not accepted because the \s-1CA\s0 certificate could not +be located or couldn't be matched with a known, trusted \s-1CA.\s0 This +message is always fatal. +.ie n .IP """\s-1AD""/\s0""access denied""" 4 +.el .IP "``\s-1AD''/\s0``access denied''" 4 +.IX Item "AD/access denied" +A valid certificate was received, but when access control was +applied, the sender decided not to proceed with negotiation. +This message is always fatal. +.ie n .IP """\s-1DE""/\s0""decode error""" 4 +.el .IP "``\s-1DE''/\s0``decode error''" 4 +.IX Item "DE/decode error" +A message could not be decoded because some field was out of the +specified range or the length of the message was incorrect. This +message is always fatal. +.ie n .IP """\s-1CY""/\s0""decrypt error""" 4 +.el .IP "``\s-1CY''/\s0``decrypt error''" 4 +.IX Item "CY/decrypt error" +A handshake cryptographic operation failed, including being +unable to correctly verify a signature, decrypt a key exchange, +or validate a finished message. +.ie n .IP """\s-1ER""/\s0""export restriction""" 4 +.el .IP "``\s-1ER''/\s0``export restriction''" 4 +.IX Item "ER/export restriction" +A negotiation not in compliance with export restrictions was +detected; for example, attempting to transfer a 1024 bit +ephemeral \s-1RSA\s0 key for the \s-1RSA_EXPORT\s0 handshake method. This +message is always fatal. +.ie n .IP """\s-1PV""/\s0""protocol version""" 4 +.el .IP "``\s-1PV''/\s0``protocol version''" 4 +.IX Item "PV/protocol version" +The protocol version the client has attempted to negotiate is +recognized, but not supported. (For example, old protocol +versions might be avoided for security reasons). This message is +always fatal. +.ie n .IP """\s-1IS""/\s0""insufficient security""" 4 +.el .IP "``\s-1IS''/\s0``insufficient security''" 4 +.IX Item "IS/insufficient security" +Returned instead of handshake_failure when a negotiation has +failed specifically because the server requires ciphers more +secure than those supported by the client. This message is always +fatal. +.ie n .IP """\s-1IE""/\s0""internal error""" 4 +.el .IP "``\s-1IE''/\s0``internal error''" 4 +.IX Item "IE/internal error" +An internal error unrelated to the peer or the correctness of the +protocol makes it impossible to continue (such as a memory +allocation failure). This message is always fatal. +.ie n .IP """\s-1US""/\s0""user canceled""" 4 +.el .IP "``\s-1US''/\s0``user canceled''" 4 +.IX Item "US/user canceled" +This handshake is being canceled for some reason unrelated to a +protocol failure. If the user cancels an operation after the +handshake is complete, just closing the connection by sending a +close_notify is more appropriate. This alert should be followed +by a close_notify. This message is generally a warning. +.ie n .IP """\s-1NR""/\s0""no renegotiation""" 4 +.el .IP "``\s-1NR''/\s0``no renegotiation''" 4 +.IX Item "NR/no renegotiation" +Sent by the client in response to a hello request or by the +server in response to a client hello after initial handshaking. +Either of these would normally lead to renegotiation; when that +is not appropriate, the recipient should respond with this alert; +at that point, the original requester can decide whether to +proceed with the connection. One case where this would be +appropriate would be where a server has spawned a process to +satisfy a request; the process might receive security parameters +(key length, authentication, etc.) at startup and it might be +difficult to communicate changes to these parameters after that +point. This message is always a warning. +.ie n .IP """\s-1UP""/\s0""unknown \s-1PSK\s0 identity""" 4 +.el .IP "``\s-1UP''/\s0``unknown \s-1PSK\s0 identity''" 4 +.IX Item "UP/unknown PSK identity" +Sent by the server to indicate that it does not recognize a \s-1PSK\s0 +identity or an \s-1SRP\s0 identity. +.ie n .IP """\s-1UK""/\s0""unknown""" 4 +.el .IP "``\s-1UK''/\s0``unknown''" 4 +.IX Item "UK/unknown" +This indicates that no description is available for this alert type. +Probably \fBvalue\fR does not contain a correct alert message. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), \fBSSL_CTX_set_info_callback\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2001\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_alloc_buffers.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_alloc_buffers.3 new file mode 100644 index 00000000..5d8b6383 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_alloc_buffers.3 @@ -0,0 +1,193 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_ALLOC_BUFFERS 3" +.TH SSL_ALLOC_BUFFERS 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_free_buffers, SSL_alloc_buffers \- manage SSL structure buffers +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int SSL_free_buffers(SSL *ssl); +\& int SSL_alloc_buffers(SSL *ssl); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_free_buffers()\fR frees the read and write buffers of the given \fBssl\fR. +\&\fBSSL_alloc_buffers()\fR allocates the read and write buffers of the given \fBssl\fR. +.PP +The \fB\s-1SSL_MODE_RELEASE_BUFFERS\s0\fR mode releases read or write buffers whenever +the buffers have been drained. These functions allow applications to manually +control when buffers are freed and allocated. +.PP +After freeing the buffers, the buffers are automatically reallocated upon a +new read or write. The \fBSSL_alloc_buffers()\fR does not need to be called, but +can be used to make sure the buffers are pre-allocated. This can be used to +avoid allocation during data processing or with \fBCRYPTO_set_mem_functions()\fR +to control where and how buffers are allocated. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +The following return values can occur: +.IP "0 (Failure)" 4 +.IX Item "0 (Failure)" +The \fBSSL_free_buffers()\fR function returns 0 when there is pending data to be +read or written. The \fBSSL_alloc_buffers()\fR function returns 0 when there is +an allocation failure. +.IP "1 (Success)" 4 +.IX Item "1 (Success)" +The \fBSSL_free_buffers()\fR function returns 1 if the buffers have been freed. This +value is also returned if the buffers had been freed before calling +\&\fBSSL_free_buffers()\fR. +The \fBSSL_alloc_buffers()\fR function returns 1 if the buffers have been allocated. +This value is also returned if the buffers had been allocated before calling +\&\fBSSL_alloc_buffers()\fR. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBSSL_free\fR\|(3), \fBSSL_clear\fR\|(3), +\&\fBSSL_new\fR\|(3), \fBSSL_CTX_set_mode\fR\|(3), +CRYPTO_set_mem_functions +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_check_chain.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_check_chain.3 new file mode 100644 index 00000000..2fd273a6 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_check_chain.3 @@ -0,0 +1,225 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CHECK_CHAIN 3" +.TH SSL_CHECK_CHAIN 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_check_chain \- check certificate chain suitability +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int SSL_check_chain(SSL *s, X509 *x, EVP_PKEY *pk, STACK_OF(X509) *chain); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_check_chain()\fR checks whether certificate \fBx\fR, private key \fBpk\fR and +certificate chain \fBchain\fR is suitable for use with the current session +\&\fBs\fR. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_check_chain()\fR returns a bitmap of flags indicating the validity of the +chain. +.PP +\&\fB\s-1CERT_PKEY_VALID\s0\fR: the chain can be used with the current session. +If this flag is \fBnot\fR set then the certificate will never be used even +if the application tries to set it because it is inconsistent with the +peer preferences. +.PP +\&\fB\s-1CERT_PKEY_SIGN\s0\fR: the \s-1EE\s0 key can be used for signing. +.PP +\&\fB\s-1CERT_PKEY_EE_SIGNATURE\s0\fR: the signature algorithm of the \s-1EE\s0 certificate is +acceptable. +.PP +\&\fB\s-1CERT_PKEY_CA_SIGNATURE\s0\fR: the signature algorithms of all \s-1CA\s0 certificates +are acceptable. +.PP +\&\fB\s-1CERT_PKEY_EE_PARAM\s0\fR: the parameters of the end entity certificate are +acceptable (e.g. it is a supported curve). +.PP +\&\fB\s-1CERT_PKEY_CA_PARAM\s0\fR: the parameters of all \s-1CA\s0 certificates are acceptable. +.PP +\&\fB\s-1CERT_PKEY_EXPLICIT_SIGN\s0\fR: the end entity certificate algorithm +can be used explicitly for signing (i.e. it is mentioned in the signature +algorithms extension). +.PP +\&\fB\s-1CERT_PKEY_ISSUER_NAME\s0\fR: the issuer name is acceptable. This is only +meaningful for client authentication. +.PP +\&\fB\s-1CERT_PKEY_CERT_TYPE\s0\fR: the certificate type is acceptable. Only meaningful +for client authentication. +.PP +\&\fB\s-1CERT_PKEY_SUITEB\s0\fR: chain is suitable for Suite B use. +.SH "NOTES" +.IX Header "NOTES" +\&\fBSSL_check_chain()\fR must be called in servers after a client hello message or in +clients after a certificate request message. It will typically be called +in the certificate callback. +.PP +An application wishing to support multiple certificate chains may call this +function on each chain in turn: starting with the one it considers the +most secure. It could then use the chain of the first set which returns +suitable flags. +.PP +As a minimum the flag \fB\s-1CERT_PKEY_VALID\s0\fR must be set for a chain to be +usable. An application supporting multiple chains with different \s-1CA\s0 signature +algorithms may also wish to check \fB\s-1CERT_PKEY_CA_SIGNATURE\s0\fR too. If no +chain is suitable a server should fall back to the most secure chain which +sets \fB\s-1CERT_PKEY_VALID\s0\fR. +.PP +The validity of a chain is determined by checking if it matches a supported +signature algorithm, supported curves and in the case of client authentication +certificate types and issuer names. +.PP +Since the supported signature algorithms extension is only used in \s-1TLS 1.2, +TLS 1.3\s0 and \s-1DTLS 1.2\s0 the results for earlier versions of \s-1TLS\s0 and \s-1DTLS\s0 may not +be very useful. Applications may wish to specify a different \*(L"legacy\*(R" chain +for earlier versions of \s-1TLS\s0 or \s-1DTLS.\s0 +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBSSL_CTX_set_cert_cb\fR\|(3), +\&\fBssl\fR\|(7) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2015\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_clear.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_clear.3 new file mode 100644 index 00000000..7a619ba3 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_clear.3 @@ -0,0 +1,208 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CLEAR 3" +.TH SSL_CLEAR 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_clear \- reset SSL object to allow another connection +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int SSL_clear(SSL *ssl); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +Reset \fBssl\fR to allow another connection. All settings (method, ciphers, +BIOs) are kept. +.SH "NOTES" +.IX Header "NOTES" +SSL_clear is used to prepare an \s-1SSL\s0 object for a new connection. While all +settings are kept, a side effect is the handling of the current \s-1SSL\s0 session. +If a session is still \fBopen\fR, it is considered bad and will be removed +from the session cache, as required by \s-1RFC2246. A\s0 session is considered open, +if \fBSSL_shutdown\fR\|(3) was not called for the connection +or at least \fBSSL_set_shutdown\fR\|(3) was used to +set the \s-1SSL_SENT_SHUTDOWN\s0 state. +.PP +If a session was closed cleanly, the session object will be kept and all +settings corresponding. This explicitly means, that e.g. the special method +used during the session will be kept for the next handshake. So if the +session was a TLSv1 session, a \s-1SSL\s0 client object will use a TLSv1 client +method for the next handshake and a \s-1SSL\s0 server object will use a TLSv1 +server method, even if TLS_*_methods were chosen on startup. This +will might lead to connection failures (see \fBSSL_new\fR\|(3)) +for a description of the method's properties. +.SH "WARNINGS" +.IX Header "WARNINGS" +\&\fBSSL_clear()\fR resets the \s-1SSL\s0 object to allow for another connection. The +reset operation however keeps several settings of the last sessions +(some of these settings were made automatically during the last +handshake). It only makes sense for a new connection with the exact +same peer that shares these settings, and may fail if that peer +changes its settings between connections. Use the sequence +\&\fBSSL_get_session\fR\|(3); +\&\fBSSL_new\fR\|(3); +\&\fBSSL_set_session\fR\|(3); +\&\fBSSL_free\fR\|(3) +instead to avoid such failures +(or simply \fBSSL_free\fR\|(3); \fBSSL_new\fR\|(3) +if session reuse is not desired). +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +The following return values can occur: +.IP "0" 4 +The \fBSSL_clear()\fR operation could not be performed. Check the error stack to +find out the reason. +.IP "1" 4 +.IX Item "1" +The \fBSSL_clear()\fR operation was successful. +.PP +\&\fBSSL_new\fR\|(3), \fBSSL_free\fR\|(3), +\&\fBSSL_shutdown\fR\|(3), \fBSSL_set_shutdown\fR\|(3), +\&\fBSSL_CTX_set_options\fR\|(3), \fBssl\fR\|(7), +\&\fBSSL_CTX_set_client_cert_cb\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_connect.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_connect.3 new file mode 100644 index 00000000..43684f8b --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_connect.3 @@ -0,0 +1,220 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_CONNECT 3" +.TH SSL_CONNECT 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_connect \- initiate the TLS/SSL handshake with an TLS/SSL server +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int SSL_connect(SSL *ssl); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_connect()\fR initiates the \s-1TLS/SSL\s0 handshake with a server. The communication +channel must already have been set and assigned to the \fBssl\fR by setting an +underlying \fB\s-1BIO\s0\fR. +.SH "NOTES" +.IX Header "NOTES" +The behaviour of \fBSSL_connect()\fR depends on the underlying \s-1BIO.\s0 +.PP +If the underlying \s-1BIO\s0 is \fBblocking\fR, \fBSSL_connect()\fR will only return once the +handshake has been finished or an error occurred. +.PP +If the underlying \s-1BIO\s0 is \fBnon-blocking\fR, \fBSSL_connect()\fR will also return +when the underlying \s-1BIO\s0 could not satisfy the needs of \fBSSL_connect()\fR +to continue the handshake, indicating the problem by the return value \-1. +In this case a call to \fBSSL_get_error()\fR with the +return value of \fBSSL_connect()\fR will yield \fB\s-1SSL_ERROR_WANT_READ\s0\fR or +\&\fB\s-1SSL_ERROR_WANT_WRITE\s0\fR. The calling process then must repeat the call after +taking appropriate action to satisfy the needs of \fBSSL_connect()\fR. +The action depends on the underlying \s-1BIO.\s0 When using a non-blocking socket, +nothing is to be done, but \fBselect()\fR can be used to check for the required +condition. When using a buffering \s-1BIO,\s0 like a \s-1BIO\s0 pair, data must be written +into or retrieved out of the \s-1BIO\s0 before being able to continue. +.PP +Many systems implement Nagle's algorithm by default which means that it will +buffer outgoing \s-1TCP\s0 data if a \s-1TCP\s0 packet has already been sent for which no +corresponding \s-1ACK\s0 has been received yet from the peer. This can have performance +impacts after a successful TLSv1.3 handshake or a successful TLSv1.2 (or below) +resumption handshake, because the last peer to communicate in the handshake is +the client. If the client is also the first to send application data (as is +typical for many protocols) then this data could be buffered until an \s-1ACK\s0 has +been received for the final handshake message. +.PP +The \fB\s-1TCP_NODELAY\s0\fR socket option is often available to disable Nagle's +algorithm. If an application opts to disable Nagle's algorithm consideration +should be given to turning it back on again later if appropriate. The helper +function \fBBIO_set_tcp_ndelay()\fR can be used to turn on or off the \fB\s-1TCP_NODELAY\s0\fR +option. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +The following return values can occur: +.IP "0" 4 +The \s-1TLS/SSL\s0 handshake was not successful but was shut down controlled and +by the specifications of the \s-1TLS/SSL\s0 protocol. Call \fBSSL_get_error()\fR with the +return value \fBret\fR to find out the reason. +.IP "1" 4 +.IX Item "1" +The \s-1TLS/SSL\s0 handshake was successfully completed, a \s-1TLS/SSL\s0 connection has been +established. +.IP "<0" 4 +.IX Item "<0" +The \s-1TLS/SSL\s0 handshake was not successful, because a fatal error occurred either +at the protocol level or a connection failure occurred. The shutdown was +not clean. It can also occur if action is needed to continue the operation +for non-blocking BIOs. Call \fBSSL_get_error()\fR with the return value \fBret\fR +to find out the reason. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBSSL_get_error\fR\|(3), \fBSSL_accept\fR\|(3), +\&\fBSSL_shutdown\fR\|(3), \fBssl\fR\|(7), \fBbio\fR\|(7), +\&\fBSSL_set_connect_state\fR\|(3), +\&\fBSSL_do_handshake\fR\|(3), +\&\fBSSL_CTX_new\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2020 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_do_handshake.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_do_handshake.3 new file mode 100644 index 00000000..d3e222dc --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_do_handshake.3 @@ -0,0 +1,204 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_DO_HANDSHAKE 3" +.TH SSL_DO_HANDSHAKE 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_do_handshake \- perform a TLS/SSL handshake +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int SSL_do_handshake(SSL *ssl); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_do_handshake()\fR will wait for a \s-1SSL/TLS\s0 handshake to take place. If the +connection is in client mode, the handshake will be started. The handshake +routines may have to be explicitly set in advance using either +\&\fBSSL_set_connect_state\fR\|(3) or +\&\fBSSL_set_accept_state\fR\|(3). +.SH "NOTES" +.IX Header "NOTES" +The behaviour of \fBSSL_do_handshake()\fR depends on the underlying \s-1BIO.\s0 +.PP +If the underlying \s-1BIO\s0 is \fBblocking\fR, \fBSSL_do_handshake()\fR will only return +once the handshake has been finished or an error occurred. +.PP +If the underlying \s-1BIO\s0 is \fBnon-blocking\fR, \fBSSL_do_handshake()\fR will also return +when the underlying \s-1BIO\s0 could not satisfy the needs of \fBSSL_do_handshake()\fR +to continue the handshake. In this case a call to \fBSSL_get_error()\fR with the +return value of \fBSSL_do_handshake()\fR will yield \fB\s-1SSL_ERROR_WANT_READ\s0\fR or +\&\fB\s-1SSL_ERROR_WANT_WRITE\s0\fR. The calling process then must repeat the call after +taking appropriate action to satisfy the needs of \fBSSL_do_handshake()\fR. +The action depends on the underlying \s-1BIO.\s0 When using a non-blocking socket, +nothing is to be done, but \fBselect()\fR can be used to check for the required +condition. When using a buffering \s-1BIO,\s0 like a \s-1BIO\s0 pair, data must be written +into or retrieved out of the \s-1BIO\s0 before being able to continue. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +The following return values can occur: +.IP "0" 4 +The \s-1TLS/SSL\s0 handshake was not successful but was shut down controlled and +by the specifications of the \s-1TLS/SSL\s0 protocol. Call \fBSSL_get_error()\fR with the +return value \fBret\fR to find out the reason. +.IP "1" 4 +.IX Item "1" +The \s-1TLS/SSL\s0 handshake was successfully completed, a \s-1TLS/SSL\s0 connection has been +established. +.IP "<0" 4 +.IX Item "<0" +The \s-1TLS/SSL\s0 handshake was not successful because a fatal error occurred either +at the protocol level or a connection failure occurred. The shutdown was +not clean. It can also occur if action is needed to continue the operation +for non-blocking BIOs. Call \fBSSL_get_error()\fR with the return value \fBret\fR +to find out the reason. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBSSL_get_error\fR\|(3), \fBSSL_connect\fR\|(3), +\&\fBSSL_accept\fR\|(3), \fBssl\fR\|(7), \fBbio\fR\|(7), +\&\fBSSL_set_connect_state\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2002\-2020 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_export_keying_material.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_export_keying_material.3 new file mode 100644 index 00000000..98b112da --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_export_keying_material.3 @@ -0,0 +1,217 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_EXPORT_KEYING_MATERIAL 3" +.TH SSL_EXPORT_KEYING_MATERIAL 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_export_keying_material, SSL_export_keying_material_early \&\- obtain keying material for application use +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int SSL_export_keying_material(SSL *s, unsigned char *out, size_t olen, +\& const char *label, size_t llen, +\& const unsigned char *context, +\& size_t contextlen, int use_context); +\& +\& int SSL_export_keying_material_early(SSL *s, unsigned char *out, size_t olen, +\& const char *label, size_t llen, +\& const unsigned char *context, +\& size_t contextlen); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +During the creation of a \s-1TLS\s0 or \s-1DTLS\s0 connection shared keying material is +established between the two endpoints. The functions +\&\fBSSL_export_keying_material()\fR and \fBSSL_export_keying_material_early()\fR enable an +application to use some of this keying material for its own purposes in +accordance with \s-1RFC5705\s0 (for TLSv1.2 and below) or \s-1RFC8446\s0 (for TLSv1.3). +.PP +\&\fBSSL_export_keying_material()\fR derives keying material using +the \fIexporter_master_secret\fR established in the handshake. +.PP +\&\fBSSL_export_keying_material_early()\fR is only usable with TLSv1.3, and derives +keying material using the \fIearly_exporter_master_secret\fR (as defined in the +\&\s-1TLS 1.3 RFC\s0). For the client, the \fIearly_exporter_master_secret\fR is only +available when the client attempts to send 0\-RTT data. For the server, it is +only available when the server accepts 0\-RTT data. +.PP +An application may need to securely establish the context within which this +keying material will be used. For example this may include identifiers for the +application session, application algorithms or parameters, or the lifetime of +the context. The context value is left to the application but must be the same +on both sides of the communication. +.PP +For a given \s-1SSL\s0 connection \fBs\fR, \fBolen\fR bytes of data will be written to +\&\fBout\fR. The application specific context should be supplied in the location +pointed to by \fBcontext\fR and should be \fBcontextlen\fR bytes long. Provision of +a context is optional. If the context should be omitted entirely then +\&\fBuse_context\fR should be set to 0. Otherwise it should be any other value. If +\&\fBuse_context\fR is 0 then the values of \fBcontext\fR and \fBcontextlen\fR are ignored. +Note that in TLSv1.2 and below a zero length context is treated differently from +no context at all, and will result in different keying material being returned. +In TLSv1.3 a zero length context is that same as no context at all and will +result in the same keying material being returned. +.PP +An application specific label should be provided in the location pointed to by +\&\fBlabel\fR and should be \fBllen\fR bytes long. Typically this will be a value from +the \s-1IANA\s0 Exporter Label Registry +(). +Alternatively labels beginning with \*(L"\s-1EXPERIMENTAL\*(R"\s0 are permitted by the standard +to be used without registration. TLSv1.3 imposes a maximum label length of +249 bytes. +.PP +Note that this function is only defined for TLSv1.0 and above, and DTLSv1.0 and +above. Attempting to use it in SSLv3 will result in an error. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_export_keying_material()\fR returns 0 or \-1 on failure or 1 on success. +.PP +\&\fBSSL_export_keying_material_early()\fR returns 0 on failure or 1 on success. +.SH "HISTORY" +.IX Header "HISTORY" +The \fBSSL_export_keying_material_early()\fR function was added in OpenSSL 1.1.1. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_extension_supported.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_extension_supported.3 new file mode 100644 index 00000000..93e5eef4 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_extension_supported.3 @@ -0,0 +1,399 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_EXTENSION_SUPPORTED 3" +.TH SSL_EXTENSION_SUPPORTED 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_extension_supported, SSL_CTX_add_custom_ext, SSL_CTX_add_client_custom_ext, SSL_CTX_add_server_custom_ext, custom_ext_add_cb, custom_ext_free_cb, custom_ext_parse_cb \&\- custom TLS extension handling +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& typedef int (*SSL_custom_ext_add_cb_ex) (SSL *s, unsigned int ext_type, +\& unsigned int context, +\& const unsigned char **out, +\& size_t *outlen, X509 *x, +\& size_t chainidx, int *al, +\& void *add_arg); +\& +\& typedef void (*SSL_custom_ext_free_cb_ex) (SSL *s, unsigned int ext_type, +\& unsigned int context, +\& const unsigned char *out, +\& void *add_arg); +\& +\& typedef int (*SSL_custom_ext_parse_cb_ex) (SSL *s, unsigned int ext_type, +\& unsigned int context, +\& const unsigned char *in, +\& size_t inlen, X509 *x, +\& size_t chainidx, int *al, +\& void *parse_arg); +\& +\& int SSL_CTX_add_custom_ext(SSL_CTX *ctx, unsigned int ext_type, +\& unsigned int context, +\& SSL_custom_ext_add_cb_ex add_cb, +\& SSL_custom_ext_free_cb_ex free_cb, +\& void *add_arg, +\& SSL_custom_ext_parse_cb_ex parse_cb, +\& void *parse_arg); +\& +\& typedef int (*custom_ext_add_cb)(SSL *s, unsigned int ext_type, +\& const unsigned char **out, +\& size_t *outlen, int *al, +\& void *add_arg); +\& +\& typedef void (*custom_ext_free_cb)(SSL *s, unsigned int ext_type, +\& const unsigned char *out, +\& void *add_arg); +\& +\& typedef int (*custom_ext_parse_cb)(SSL *s, unsigned int ext_type, +\& const unsigned char *in, +\& size_t inlen, int *al, +\& void *parse_arg); +\& +\& int SSL_CTX_add_client_custom_ext(SSL_CTX *ctx, unsigned int ext_type, +\& custom_ext_add_cb add_cb, +\& custom_ext_free_cb free_cb, void *add_arg, +\& custom_ext_parse_cb parse_cb, +\& void *parse_arg); +\& +\& int SSL_CTX_add_server_custom_ext(SSL_CTX *ctx, unsigned int ext_type, +\& custom_ext_add_cb add_cb, +\& custom_ext_free_cb free_cb, void *add_arg, +\& custom_ext_parse_cb parse_cb, +\& void *parse_arg); +\& +\& int SSL_extension_supported(unsigned int ext_type); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_CTX_add_custom_ext()\fR adds a custom extension for a \s-1TLS/DTLS\s0 client or server +for all supported protocol versions with extension type \fBext_type\fR and +callbacks \fBadd_cb\fR, \fBfree_cb\fR and \fBparse_cb\fR (see the +\&\*(L"\s-1EXTENSION CALLBACKS\*(R"\s0 section below). The \fBcontext\fR value determines +which messages and under what conditions the extension will be added/parsed (see +the \*(L"\s-1EXTENSION CONTEXTS\*(R"\s0 section below). +.PP +\&\fBSSL_CTX_add_client_custom_ext()\fR adds a custom extension for a \s-1TLS/DTLS\s0 client +with extension type \fBext_type\fR and callbacks \fBadd_cb\fR, \fBfree_cb\fR and +\&\fBparse_cb\fR. This function is similar to \fBSSL_CTX_add_custom_ext()\fR except it only +applies to clients, uses the older style of callbacks, and implicitly sets the +\&\fBcontext\fR value to: +.PP +.Vb 2 +\& SSL_EXT_TLS1_2_AND_BELOW_ONLY | SSL_EXT_CLIENT_HELLO +\& | SSL_EXT_TLS1_2_SERVER_HELLO | SSL_EXT_IGNORE_ON_RESUMPTION +.Ve +.PP +\&\fBSSL_CTX_add_server_custom_ext()\fR adds a custom extension for a \s-1TLS/DTLS\s0 server +with extension type \fBext_type\fR and callbacks \fBadd_cb\fR, \fBfree_cb\fR and +\&\fBparse_cb\fR. This function is similar to \fBSSL_CTX_add_custom_ext()\fR except it +only applies to servers, uses the older style of callbacks, and implicitly sets +the \fBcontext\fR value to the same as for \fBSSL_CTX_add_client_custom_ext()\fR above. +.PP +The \fBext_type\fR parameter corresponds to the \fBextension_type\fR field of +\&\s-1RFC5246\s0 et al. It is \fBnot\fR a \s-1NID.\s0 In all cases the extension type must not be +handled by OpenSSL internally or an error occurs. +.PP +\&\fBSSL_extension_supported()\fR returns 1 if the extension \fBext_type\fR is handled +internally by OpenSSL and 0 otherwise. +.SH "EXTENSION CALLBACKS" +.IX Header "EXTENSION CALLBACKS" +The callback \fBadd_cb\fR is called to send custom extension data to be +included in various \s-1TLS\s0 messages. The \fBext_type\fR parameter is set to the +extension type which will be added and \fBadd_arg\fR to the value set when the +extension handler was added. When using the new style callbacks the \fBcontext\fR +parameter will indicate which message is currently being constructed e.g. for +the ClientHello it will be set to \fB\s-1SSL_EXT_CLIENT_HELLO\s0\fR. +.PP +If the application wishes to include the extension \fBext_type\fR it should +set \fB*out\fR to the extension data, set \fB*outlen\fR to the length of the +extension data and return 1. +.PP +If the \fBadd_cb\fR does not wish to include the extension it must return 0. +.PP +If \fBadd_cb\fR returns \-1 a fatal handshake error occurs using the \s-1TLS\s0 +alert value specified in \fB*al\fR. +.PP +When constructing the ClientHello, if \fBadd_cb\fR is set to \s-1NULL\s0 a zero length +extension is added for \fBext_type\fR. For all other messages if \fBadd_cb\fR is set +to \s-1NULL\s0 then no extension is added. +.PP +When constructing a Certificate message the callback will be called for each +certificate in the message. The \fBx\fR parameter will indicate the +current certificate and the \fBchainidx\fR parameter will indicate the position +of the certificate in the message. The first certificate is always the end +entity certificate and has a \fBchainidx\fR value of 0. The certificates are in the +order that they were received in the Certificate message. +.PP +For all messages except the ServerHello and EncryptedExtensions every +registered \fBadd_cb\fR is always called to see if the application wishes to add an +extension (as long as all requirements of the specified \fBcontext\fR are met). +.PP +For the ServerHello and EncryptedExtension messages every registered \fBadd_cb\fR +is called once if and only if the requirements of the specified \fBcontext\fR are +met and the corresponding extension was received in the ClientHello. That is, if +no corresponding extension was received in the ClientHello then \fBadd_cb\fR will +not be called. +.PP +If an extension is added (that is \fBadd_cb\fR returns 1) \fBfree_cb\fR is called +(if it is set) with the value of \fBout\fR set by the add callback. It can be +used to free up any dynamic extension data set by \fBadd_cb\fR. Since \fBout\fR is +constant (to permit use of constant data in \fBadd_cb\fR) applications may need to +cast away const to free the data. +.PP +The callback \fBparse_cb\fR receives data for \s-1TLS\s0 extensions. The callback is only +called if the extension is present and relevant for the context (see +\&\*(L"\s-1EXTENSION CONTEXTS\*(R"\s0 below). +.PP +The extension data consists of \fBinlen\fR bytes in the buffer \fBin\fR for the +extension \fBext_type\fR. +.PP +If the message being parsed is a TLSv1.3 compatible Certificate message then +\&\fBparse_cb\fR will be called for each certificate contained within the message. +The \fBx\fR parameter will indicate the current certificate and the \fBchainidx\fR +parameter will indicate the position of the certificate in the message. The +first certificate is always the end entity certificate and has a \fBchainidx\fR +value of 0. +.PP +If the \fBparse_cb\fR considers the extension data acceptable it must return +1. If it returns 0 or a negative value a fatal handshake error occurs +using the \s-1TLS\s0 alert value specified in \fB*al\fR. +.PP +The buffer \fBin\fR is a temporary internal buffer which will not be valid after +the callback returns. +.SH "EXTENSION CONTEXTS" +.IX Header "EXTENSION CONTEXTS" +An extension context defines which messages and under which conditions an +extension should be added or expected. The context is built up by performing +a bitwise \s-1OR\s0 of multiple pre-defined values together. The valid context values +are: +.IP "\s-1SSL_EXT_TLS_ONLY\s0" 4 +.IX Item "SSL_EXT_TLS_ONLY" +The extension is only allowed in \s-1TLS\s0 +.IP "\s-1SSL_EXT_DTLS_ONLY\s0" 4 +.IX Item "SSL_EXT_DTLS_ONLY" +The extension is only allowed in \s-1DTLS\s0 +.IP "\s-1SSL_EXT_TLS_IMPLEMENTATION_ONLY\s0" 4 +.IX Item "SSL_EXT_TLS_IMPLEMENTATION_ONLY" +The extension is allowed in \s-1DTLS,\s0 but there is only a \s-1TLS\s0 implementation +available (so it is ignored in \s-1DTLS\s0). +.IP "\s-1SSL_EXT_SSL3_ALLOWED\s0" 4 +.IX Item "SSL_EXT_SSL3_ALLOWED" +Extensions are not typically defined for SSLv3. Setting this value will allow +the extension in SSLv3. Applications will not typically need to use this. +.IP "\s-1SSL_EXT_TLS1_2_AND_BELOW_ONLY\s0" 4 +.IX Item "SSL_EXT_TLS1_2_AND_BELOW_ONLY" +The extension is only defined for TLSv1.2/DTLSv1.2 and below. Servers will +ignore this extension if it is present in the ClientHello and TLSv1.3 is +negotiated. +.IP "\s-1SSL_EXT_TLS1_3_ONLY\s0" 4 +.IX Item "SSL_EXT_TLS1_3_ONLY" +The extension is only defined for \s-1TLS1.3\s0 and above. Servers will ignore this +extension if it is present in the ClientHello and TLSv1.2 or below is +negotiated. +.IP "\s-1SSL_EXT_IGNORE_ON_RESUMPTION\s0" 4 +.IX Item "SSL_EXT_IGNORE_ON_RESUMPTION" +The extension will be ignored during parsing if a previous session is being +successfully resumed. +.IP "\s-1SSL_EXT_CLIENT_HELLO\s0" 4 +.IX Item "SSL_EXT_CLIENT_HELLO" +The extension may be present in the ClientHello message. +.IP "\s-1SSL_EXT_TLS1_2_SERVER_HELLO\s0" 4 +.IX Item "SSL_EXT_TLS1_2_SERVER_HELLO" +The extension may be present in a TLSv1.2 or below compatible ServerHello +message. +.IP "\s-1SSL_EXT_TLS1_3_SERVER_HELLO\s0" 4 +.IX Item "SSL_EXT_TLS1_3_SERVER_HELLO" +The extension may be present in a TLSv1.3 compatible ServerHello message. +.IP "\s-1SSL_EXT_TLS1_3_ENCRYPTED_EXTENSIONS\s0" 4 +.IX Item "SSL_EXT_TLS1_3_ENCRYPTED_EXTENSIONS" +The extension may be present in an EncryptedExtensions message. +.IP "\s-1SSL_EXT_TLS1_3_HELLO_RETRY_REQUEST\s0" 4 +.IX Item "SSL_EXT_TLS1_3_HELLO_RETRY_REQUEST" +The extension may be present in a HelloRetryRequest message. +.IP "\s-1SSL_EXT_TLS1_3_CERTIFICATE\s0" 4 +.IX Item "SSL_EXT_TLS1_3_CERTIFICATE" +The extension may be present in a TLSv1.3 compatible Certificate message. +.IP "\s-1SSL_EXT_TLS1_3_NEW_SESSION_TICKET\s0" 4 +.IX Item "SSL_EXT_TLS1_3_NEW_SESSION_TICKET" +The extension may be present in a TLSv1.3 compatible NewSessionTicket message. +.IP "\s-1SSL_EXT_TLS1_3_CERTIFICATE_REQUEST\s0" 4 +.IX Item "SSL_EXT_TLS1_3_CERTIFICATE_REQUEST" +The extension may be present in a TLSv1.3 compatible CertificateRequest message. +.PP +The context must include at least one message value (otherwise the extension +will never be used). +.SH "NOTES" +.IX Header "NOTES" +The \fBadd_arg\fR and \fBparse_arg\fR parameters can be set to arbitrary values +which will be passed to the corresponding callbacks. They can, for example, +be used to store the extension data received in a convenient structure or +pass the extension data to be added or freed when adding extensions. +.PP +If the same custom extension type is received multiple times a fatal +\&\fBdecode_error\fR alert is sent and the handshake aborts. If a custom extension +is received in a ServerHello/EncryptedExtensions message which was not sent in +the ClientHello a fatal \fBunsupported_extension\fR alert is sent and the +handshake is aborted. The ServerHello/EncryptedExtensions \fBadd_cb\fR callback is +only called if the corresponding extension was received in the ClientHello. This +is compliant with the \s-1TLS\s0 specifications. This behaviour ensures that each +callback is called at most once and that an application can never send +unsolicited extensions. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_CTX_add_custom_ext()\fR, \fBSSL_CTX_add_client_custom_ext()\fR and +\&\fBSSL_CTX_add_server_custom_ext()\fR return 1 for success and 0 for failure. A +failure can occur if an attempt is made to add the same \fBext_type\fR more than +once, if an attempt is made to use an extension type handled internally by +OpenSSL or if an internal error occurs (for example a memory allocation +failure). +.PP +\&\fBSSL_extension_supported()\fR returns 1 if the extension \fBext_type\fR is handled +internally by OpenSSL and 0 otherwise. +.SH "HISTORY" +.IX Header "HISTORY" +The \fBSSL_CTX_add_custom_ext()\fR function was added in OpenSSL 1.1.1. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2014\-2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_free.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_free.3 new file mode 100644 index 00000000..55059475 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_free.3 @@ -0,0 +1,186 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_FREE 3" +.TH SSL_FREE 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_free \- free an allocated SSL structure +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& void SSL_free(SSL *ssl); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_free()\fR decrements the reference count of \fBssl\fR, and removes the \s-1SSL\s0 +structure pointed to by \fBssl\fR and frees up the allocated memory if the +reference count has reached 0. +If \fBssl\fR is \s-1NULL\s0 nothing is done. +.SH "NOTES" +.IX Header "NOTES" +\&\fBSSL_free()\fR also calls the \fBfree()\fRing procedures for indirectly affected items, if +applicable: the buffering \s-1BIO,\s0 the read and write BIOs, +cipher lists specially created for this \fBssl\fR, the \fB\s-1SSL_SESSION\s0\fR. +Do not explicitly free these indirectly freed up items before or after +calling \fBSSL_free()\fR, as trying to free things twice may lead to program +failure. +.PP +The ssl session has reference counts from two users: the \s-1SSL\s0 object, for +which the reference count is removed by \fBSSL_free()\fR and the internal +session cache. If the session is considered bad, because +\&\fBSSL_shutdown\fR\|(3) was not called for the connection +and \fBSSL_set_shutdown\fR\|(3) was not used to set the +\&\s-1SSL_SENT_SHUTDOWN\s0 state, the session will also be removed +from the session cache as required by \s-1RFC2246.\s0 +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_free()\fR does not provide diagnostic information. +.PP +\&\fBSSL_new\fR\|(3), \fBSSL_clear\fR\|(3), +\&\fBSSL_shutdown\fR\|(3), \fBSSL_set_shutdown\fR\|(3), +\&\fBssl\fR\|(7) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get0_peer_scts.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get0_peer_scts.3 new file mode 100644 index 00000000..9c5d0645 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get0_peer_scts.3 @@ -0,0 +1,176 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_GET0_PEER_SCTS 3" +.TH SSL_GET0_PEER_SCTS 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_get0_peer_scts \- get SCTs received +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& const STACK_OF(SCT) *SSL_get0_peer_scts(SSL *s); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_get0_peer_scts()\fR returns the signed certificate timestamps (SCTs) that have +been received. If this is the first time that this function has been called for +a given \fB\s-1SSL\s0\fR instance, it will examine the \s-1TLS\s0 extensions, \s-1OCSP\s0 response and +the peer's certificate for SCTs. Future calls will return the same SCTs. +.SH "RESTRICTIONS" +.IX Header "RESTRICTIONS" +If no Certificate Transparency validation callback has been set (using +\&\fBSSL_CTX_set_ct_validation_callback\fR or \fBSSL_set_ct_validation_callback\fR), +this function is not guaranteed to return all of the SCTs that the peer is +capable of sending. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_get0_peer_scts()\fR returns a list of SCTs found, or \s-1NULL\s0 if an error occurs. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), +\&\fBSSL_CTX_set_ct_validation_callback\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_SSL_CTX.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_SSL_CTX.3 new file mode 100644 index 00000000..08750218 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_SSL_CTX.3 @@ -0,0 +1,167 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_GET_SSL_CTX 3" +.TH SSL_GET_SSL_CTX 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_get_SSL_CTX \- get the SSL_CTX from which an SSL is created +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& SSL_CTX *SSL_get_SSL_CTX(const SSL *ssl); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_get_SSL_CTX()\fR returns a pointer to the \s-1SSL_CTX\s0 object, from which +\&\fBssl\fR was created with \fBSSL_new\fR\|(3). +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +The pointer to the \s-1SSL_CTX\s0 object is returned. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), \fBSSL_new\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2001\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_all_async_fds.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_all_async_fds.3 new file mode 100644 index 00000000..c544fcb5 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_all_async_fds.3 @@ -0,0 +1,213 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_GET_ALL_ASYNC_FDS 3" +.TH SSL_GET_ALL_ASYNC_FDS 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_waiting_for_async, SSL_get_all_async_fds, SSL_get_changed_async_fds \&\- manage asynchronous operations +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 2 +\& #include +\& #include +\& +\& int SSL_waiting_for_async(SSL *s); +\& int SSL_get_all_async_fds(SSL *s, OSSL_ASYNC_FD *fd, size_t *numfds); +\& int SSL_get_changed_async_fds(SSL *s, OSSL_ASYNC_FD *addfd, size_t *numaddfds, +\& OSSL_ASYNC_FD *delfd, size_t *numdelfds); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_waiting_for_async()\fR determines whether an \s-1SSL\s0 connection is currently +waiting for asynchronous operations to complete (see the \s-1SSL_MODE_ASYNC\s0 mode in +\&\fBSSL_CTX_set_mode\fR\|(3)). +.PP +\&\fBSSL_get_all_async_fds()\fR returns a list of file descriptor which can be used in a +call to \fBselect()\fR or \fBpoll()\fR to determine whether the current asynchronous +operation has completed or not. A completed operation will result in data +appearing as \*(L"read ready\*(R" on the file descriptor (no actual data should be read +from the file descriptor). This function should only be called if the \s-1SSL\s0 object +is currently waiting for asynchronous work to complete (i.e. +\&\s-1SSL_ERROR_WANT_ASYNC\s0 has been received \- see \fBSSL_get_error\fR\|(3)). Typically the +list will only contain one file descriptor. However if multiple asynchronous +capable engines are in use then more than one is possible. The number of file +descriptors returned is stored in \fB*numfds\fR and the file descriptors themselves +are in \fB*fds\fR. The \fBfds\fR parameter may be \s-1NULL\s0 in which case no file +descriptors are returned but \fB*numfds\fR is still populated. It is the callers +responsibility to ensure sufficient memory is allocated at \fB*fds\fR so typically +this function is called twice (once with a \s-1NULL\s0 \fBfds\fR parameter and once +without). +.PP +\&\fBSSL_get_changed_async_fds()\fR returns a list of the asynchronous file descriptors +that have been added and a list that have been deleted since the last +\&\s-1SSL_ERROR_WANT_ASYNC\s0 was received (or since the \s-1SSL\s0 object was created if no +\&\s-1SSL_ERROR_WANT_ASYNC\s0 has been received). Similar to \fBSSL_get_all_async_fds()\fR it +is the callers responsibility to ensure that \fB*addfd\fR and \fB*delfd\fR have +sufficient memory allocated, although they may be \s-1NULL.\s0 The number of added fds +and the number of deleted fds are stored in \fB*numaddfds\fR and \fB*numdelfds\fR +respectively. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_waiting_for_async()\fR will return 1 if the current \s-1SSL\s0 operation is waiting +for an async operation to complete and 0 otherwise. +.PP +\&\fBSSL_get_all_async_fds()\fR and \fBSSL_get_changed_async_fds()\fR return 1 on success or +0 on error. +.SH "NOTES" +.IX Header "NOTES" +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 +it is defined as an application developer's responsibility to include +windows.h prior to async.h. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBSSL_get_error\fR\|(3), \fBSSL_CTX_set_mode\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +The \fBSSL_waiting_for_async()\fR, \fBSSL_get_all_async_fds()\fR +and \fBSSL_get_changed_async_fds()\fR functions were added in OpenSSL 1.1.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_ciphers.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_ciphers.3 new file mode 100644 index 00000000..3f38eeab --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_ciphers.3 @@ -0,0 +1,241 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_GET_CIPHERS 3" +.TH SSL_GET_CIPHERS 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_get1_supported_ciphers, SSL_get_client_ciphers, SSL_get_ciphers, SSL_CTX_get_ciphers, SSL_bytes_to_cipher_list, SSL_get_cipher_list, SSL_get_shared_ciphers \&\- get list of available SSL_CIPHERs +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& STACK_OF(SSL_CIPHER) *SSL_get_ciphers(const SSL *ssl); +\& STACK_OF(SSL_CIPHER) *SSL_CTX_get_ciphers(const SSL_CTX *ctx); +\& STACK_OF(SSL_CIPHER) *SSL_get1_supported_ciphers(SSL *s); +\& STACK_OF(SSL_CIPHER) *SSL_get_client_ciphers(const SSL *ssl); +\& int SSL_bytes_to_cipher_list(SSL *s, const unsigned char *bytes, size_t len, +\& int isv2format, STACK_OF(SSL_CIPHER) **sk, +\& STACK_OF(SSL_CIPHER) **scsvs); +\& const char *SSL_get_cipher_list(const SSL *ssl, int priority); +\& char *SSL_get_shared_ciphers(const SSL *s, char *buf, int size); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_get_ciphers()\fR returns the stack of available SSL_CIPHERs for \fBssl\fR, +sorted by preference. If \fBssl\fR is \s-1NULL\s0 or no ciphers are available, \s-1NULL\s0 +is returned. +.PP +\&\fBSSL_CTX_get_ciphers()\fR returns the stack of available SSL_CIPHERs for \fBctx\fR. +.PP +\&\fBSSL_get1_supported_ciphers()\fR returns the stack of enabled SSL_CIPHERs for +\&\fBssl\fR as would be sent in a ClientHello (that is, sorted by preference). +The list depends on settings like the cipher list, the supported protocol +versions, the security level, and the enabled signature algorithms. +\&\s-1SRP\s0 and \s-1PSK\s0 ciphers are only enabled if the appropriate callbacks or settings +have been applied. +The list of ciphers that would be sent in a ClientHello can differ from +the list of ciphers that would be acceptable when acting as a server. +For example, additional ciphers may be usable by a server if there is +a gap in the list of supported protocols, and some ciphers may not be +usable by a server if there is not a suitable certificate configured. +If \fBssl\fR is \s-1NULL\s0 or no ciphers are available, \s-1NULL\s0 is returned. +.PP +\&\fBSSL_get_client_ciphers()\fR returns the stack of available SSL_CIPHERs matching the +list received from the client on \fBssl\fR. If \fBssl\fR is \s-1NULL,\s0 no ciphers are +available, or \fBssl\fR is not operating in server mode, \s-1NULL\s0 is returned. +.PP +\&\fBSSL_bytes_to_cipher_list()\fR treats the supplied \fBlen\fR octets in \fBbytes\fR +as a wire-protocol cipher suite specification (in the three-octet-per-cipher +SSLv2 wire format if \fBisv2format\fR is nonzero; otherwise the two-octet +SSLv3/TLS wire format), and parses the cipher suites supported by the library +into the returned stacks of \s-1SSL_CIPHER\s0 objects sk and Signalling Cipher-Suite +Values scsvs. Unsupported cipher suites are ignored. Returns 1 on success +and 0 on failure. +.PP +\&\fBSSL_get_cipher_list()\fR returns a pointer to the name of the \s-1SSL_CIPHER\s0 +listed for \fBssl\fR with \fBpriority\fR. If \fBssl\fR is \s-1NULL,\s0 no ciphers are +available, or there are less ciphers than \fBpriority\fR available, \s-1NULL\s0 +is returned. +.PP +\&\fBSSL_get_shared_ciphers()\fR creates a colon separated and \s-1NUL\s0 terminated list of +\&\s-1SSL_CIPHER\s0 names that are available in both the client and the server. \fBbuf\fR is +the buffer that should be populated with the list of names and \fBsize\fR is the +size of that buffer. A pointer to \fBbuf\fR is returned on success or \s-1NULL\s0 on +error. If the supplied buffer is not large enough to contain the complete list +of names then a truncated list of names will be returned. Note that just because +a ciphersuite is available (i.e. it is configured in the cipher list) and shared +by both the client and the server it does not mean that it is enabled (see the +description of \fBSSL_get1_supported_ciphers()\fR above). This function will return +available shared ciphersuites whether or not they are enabled. This is a server +side function only and must only be called after the completion of the initial +handshake. +.SH "NOTES" +.IX Header "NOTES" +The details of the ciphers obtained by \fBSSL_get_ciphers()\fR, \fBSSL_CTX_get_ciphers()\fR +\&\fBSSL_get1_supported_ciphers()\fR and \fBSSL_get_client_ciphers()\fR can be obtained using +the \fBSSL_CIPHER_get_name\fR\|(3) family of functions. +.PP +Call \fBSSL_get_cipher_list()\fR with \fBpriority\fR starting from 0 to obtain the +sorted list of available ciphers, until \s-1NULL\s0 is returned. +.PP +Note: \fBSSL_get_ciphers()\fR, \fBSSL_CTX_get_ciphers()\fR and \fBSSL_get_client_ciphers()\fR +return a pointer to an internal cipher stack, which will be freed later on when +the \s-1SSL\s0 or \s-1SSL_SESSION\s0 object is freed. Therefore, the calling code \fB\s-1MUST NOT\s0\fR +free the return value itself. +.PP +The stack returned by \fBSSL_get1_supported_ciphers()\fR should be freed using +\&\fBsk_SSL_CIPHER_free()\fR. +.PP +The stacks returned by \fBSSL_bytes_to_cipher_list()\fR should be freed using +\&\fBsk_SSL_CIPHER_free()\fR. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +See \s-1DESCRIPTION\s0 +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), \fBSSL_CTX_set_cipher_list\fR\|(3), +\&\fBSSL_CIPHER_get_name\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_client_random.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_client_random.3 new file mode 100644 index 00000000..8194dbcf --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_client_random.3 @@ -0,0 +1,229 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_GET_CLIENT_RANDOM 3" +.TH SSL_GET_CLIENT_RANDOM 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_get_client_random, SSL_get_server_random, SSL_SESSION_get_master_key, SSL_SESSION_set1_master_key \&\- get internal TLS/SSL random values and get/set master key +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& size_t SSL_get_client_random(const SSL *ssl, unsigned char *out, size_t outlen); +\& size_t SSL_get_server_random(const SSL *ssl, unsigned char *out, size_t outlen); +\& size_t SSL_SESSION_get_master_key(const SSL_SESSION *session, +\& unsigned char *out, size_t outlen); +\& int SSL_SESSION_set1_master_key(SSL_SESSION *sess, const unsigned char *in, +\& size_t len); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_get_client_random()\fR extracts the random value sent from the client +to the server during the initial \s-1SSL/TLS\s0 handshake. It copies as many +bytes as it can of this value into the buffer provided in \fBout\fR, +which must have at least \fBoutlen\fR bytes available. It returns the +total number of bytes that were actually copied. If \fBoutlen\fR is +zero, \fBSSL_get_client_random()\fR copies nothing, and returns the +total size of the client_random value. +.PP +\&\fBSSL_get_server_random()\fR behaves the same, but extracts the random value +sent from the server to the client during the initial \s-1SSL/TLS\s0 handshake. +.PP +\&\fBSSL_SESSION_get_master_key()\fR behaves the same, but extracts the master +secret used to guarantee the security of the \s-1SSL/TLS\s0 session. This one +can be dangerous if misused; see \s-1NOTES\s0 below. +.PP +\&\fBSSL_SESSION_set1_master_key()\fR sets the master key value associated with the +\&\s-1SSL_SESSION\s0 \fBsess\fR. For example, this could be used to set up a session based +\&\s-1PSK\s0 (see \fBSSL_CTX_set_psk_use_session_callback\fR\|(3)). The master key of length +\&\fBlen\fR should be provided at \fBin\fR. The supplied master key is copied by the +function, so the caller is responsible for freeing and cleaning any memory +associated with \fBin\fR. The caller must ensure that the length of the key is +suitable for the ciphersuite associated with the \s-1SSL_SESSION.\s0 +.SH "NOTES" +.IX Header "NOTES" +You probably shouldn't use these functions. +.PP +These functions expose internal values from the \s-1TLS\s0 handshake, for +use in low-level protocols. You probably should not use them, unless +you are implementing something that needs access to the internal protocol +details. +.PP +Despite the names of \fBSSL_get_client_random()\fR and \fBSSL_get_server_random()\fR, they +\&\s-1ARE NOT\s0 random number generators. Instead, they return the mostly-random values that +were already generated and used in the \s-1TLS\s0 protocol. Using them +in place of \fBRAND_bytes()\fR would be grossly foolish. +.PP +The security of your \s-1TLS\s0 session depends on keeping the master key secret: +do not expose it, or any information about it, to anybody. +If you need to calculate another secret value that depends on the master +secret, you should probably use \fBSSL_export_keying_material()\fR instead, and +forget that you ever saw these functions. +.PP +In current versions of the \s-1TLS\s0 protocols, the length of client_random +(and also server_random) is always \s-1SSL3_RANDOM_SIZE\s0 bytes. Support for +other outlen arguments to the SSL_get_*\fB_random()\fR functions is provided +in case of the unlikely event that a future version or variant of \s-1TLS\s0 +uses some other length there. +.PP +Finally, though the \*(L"client_random\*(R" and \*(L"server_random\*(R" values are called +\&\*(L"random\*(R", many \s-1TLS\s0 implementations will generate four bytes of those +values based on their view of the current time. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_SESSION_set1_master_key()\fR returns 1 on success or 0 on failure. +.PP +For the other functions, if \fBoutlen\fR is greater than 0 then these functions +return the number of bytes actually copied, which will be less than or equal to +\&\fBoutlen\fR. If \fBoutlen\fR is 0 then these functions return the maximum number +of bytes they would copy \*(-- that is, the length of the underlying field. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), +\&\fBRAND_bytes\fR\|(3), +\&\fBSSL_export_keying_material\fR\|(3), +\&\fBSSL_CTX_set_psk_use_session_callback\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2015\-2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_current_cipher.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_current_cipher.3 new file mode 100644 index 00000000..9ab87fb5 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_current_cipher.3 @@ -0,0 +1,200 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_GET_CURRENT_CIPHER 3" +.TH SSL_GET_CURRENT_CIPHER 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_get_current_cipher, SSL_get_cipher_name, SSL_get_cipher, SSL_get_cipher_bits, SSL_get_cipher_version, SSL_get_pending_cipher \- get SSL_CIPHER of a connection +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& SSL_CIPHER *SSL_get_current_cipher(const SSL *ssl); +\& SSL_CIPHER *SSL_get_pending_cipher(const SSL *ssl); +\& +\& const char *SSL_get_cipher_name(const SSL *s); +\& const char *SSL_get_cipher(const SSL *s); +\& int SSL_get_cipher_bits(const SSL *s, int *np); +\& const char *SSL_get_cipher_version(const SSL *s); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_get_current_cipher()\fR returns a pointer to an \s-1SSL_CIPHER\s0 object containing +the description of the actually used cipher of a connection established with +the \fBssl\fR object. +See \fBSSL_CIPHER_get_name\fR\|(3) for more details. +.PP +\&\fBSSL_get_cipher_name()\fR obtains the +name of the currently used cipher. +\&\fBSSL_get_cipher()\fR is identical to \fBSSL_get_cipher_name()\fR. +\&\fBSSL_get_cipher_bits()\fR is a +macro to obtain the number of secret/algorithm bits used and +\&\fBSSL_get_cipher_version()\fR returns the protocol name. +.PP +\&\fBSSL_get_pending_cipher()\fR returns a pointer to an \s-1SSL_CIPHER\s0 object containing +the description of the cipher (if any) that has been negotiated for future use +on the connection established with the \fBssl\fR object, but is not yet in use. +This may be the case during handshake processing, when control flow can be +returned to the application via any of several callback methods. The internal +sequencing of handshake processing and callback invocation is not guaranteed +to be stable from release to release, and at present only the callback set +by \fBSSL_CTX_set_alpn_select_cb()\fR is guaranteed to have a non-NULL return value. +Other callbacks may be added to this list over time. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_get_current_cipher()\fR returns the cipher actually used, or \s-1NULL\s0 if +no session has been established. +.PP +\&\fBSSL_get_pending_cipher()\fR returns the cipher to be used at the next change +of cipher suite, or \s-1NULL\s0 if no such cipher is known. +.SH "NOTES" +.IX Header "NOTES" +SSL_get_cipher, SSL_get_cipher_bits, SSL_get_cipher_version, and +SSL_get_cipher_name are implemented as macros. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), \fBSSL_CIPHER_get_name\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_default_timeout.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_default_timeout.3 new file mode 100644 index 00000000..496bfaf7 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_default_timeout.3 @@ -0,0 +1,181 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_GET_DEFAULT_TIMEOUT 3" +.TH SSL_GET_DEFAULT_TIMEOUT 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_get_default_timeout \- get default session timeout value +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& long SSL_get_default_timeout(const SSL *ssl); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_get_default_timeout()\fR returns the default timeout value assigned to +\&\s-1SSL_SESSION\s0 objects negotiated for the protocol valid for \fBssl\fR. +.SH "NOTES" +.IX Header "NOTES" +Whenever a new session is negotiated, it is assigned a timeout value, +after which it will not be accepted for session reuse. If the timeout +value was not explicitly set using +\&\fBSSL_CTX_set_timeout\fR\|(3), the hardcoded default +timeout for the protocol will be used. +.PP +\&\fBSSL_get_default_timeout()\fR return this hardcoded value, which is 300 seconds +for all currently supported protocols. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +See description. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), +\&\fBSSL_CTX_set_session_cache_mode\fR\|(3), +\&\fBSSL_SESSION_get_time\fR\|(3), +\&\fBSSL_CTX_flush_sessions\fR\|(3), +\&\fBSSL_get_default_timeout\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2001\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_error.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_error.3 new file mode 100644 index 00000000..2f9fcdef --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_error.3 @@ -0,0 +1,304 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_GET_ERROR 3" +.TH SSL_GET_ERROR 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_get_error \- obtain result code for TLS/SSL I/O operation +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int SSL_get_error(const SSL *ssl, int ret); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_get_error()\fR returns a result code (suitable for the C \*(L"switch\*(R" +statement) for a preceding call to \fBSSL_connect()\fR, \fBSSL_accept()\fR, \fBSSL_do_handshake()\fR, +\&\fBSSL_read_ex()\fR, \fBSSL_read()\fR, \fBSSL_peek_ex()\fR, \fBSSL_peek()\fR, \fBSSL_shutdown()\fR, +\&\fBSSL_write_ex()\fR or \fBSSL_write()\fR on \fBssl\fR. The value returned by that \s-1TLS/SSL I/O\s0 +function must be passed to \fBSSL_get_error()\fR in parameter \fBret\fR. +.PP +In addition to \fBssl\fR and \fBret\fR, \fBSSL_get_error()\fR inspects the +current thread's OpenSSL error queue. Thus, \fBSSL_get_error()\fR must be +used in the same thread that performed the \s-1TLS/SSL I/O\s0 operation, and no +other OpenSSL function calls should appear in between. The current +thread's error queue must be empty before the \s-1TLS/SSL I/O\s0 operation is +attempted, or \fBSSL_get_error()\fR will not work reliably. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +The following return values can currently occur: +.IP "\s-1SSL_ERROR_NONE\s0" 4 +.IX Item "SSL_ERROR_NONE" +The \s-1TLS/SSL I/O\s0 operation completed. This result code is returned +if and only if \fBret > 0\fR. +.IP "\s-1SSL_ERROR_ZERO_RETURN\s0" 4 +.IX Item "SSL_ERROR_ZERO_RETURN" +The \s-1TLS/SSL\s0 peer has closed the connection for writing by sending the +close_notify alert. +No more data can be read. +Note that \fB\s-1SSL_ERROR_ZERO_RETURN\s0\fR does not necessarily +indicate that the underlying transport has been closed. +.IP "\s-1SSL_ERROR_WANT_READ, SSL_ERROR_WANT_WRITE\s0" 4 +.IX Item "SSL_ERROR_WANT_READ, SSL_ERROR_WANT_WRITE" +The operation did not complete and can be retried later. +.Sp +\&\fB\s-1SSL_ERROR_WANT_READ\s0\fR is returned when the last operation was a read +operation from a non-blocking \fB\s-1BIO\s0\fR. +It means that not enough data was available at this time to complete the +operation. +If at a later time the underlying \fB\s-1BIO\s0\fR has data available for reading the same +function can be called again. +.Sp +\&\fBSSL_read()\fR and \fBSSL_read_ex()\fR can also set \fB\s-1SSL_ERROR_WANT_READ\s0\fR when there is +still unprocessed data available at either the \fB\s-1SSL\s0\fR or the \fB\s-1BIO\s0\fR layer, even +for a blocking \fB\s-1BIO\s0\fR. +See \fBSSL_read\fR\|(3) for more information. +.Sp +\&\fB\s-1SSL_ERROR_WANT_WRITE\s0\fR is returned when the last operation was a write +to a non-blocking \fB\s-1BIO\s0\fR and it was unable to sent all data to the \fB\s-1BIO\s0\fR. +When the \fB\s-1BIO\s0\fR is writeable again, the same function can be called again. +.Sp +Note that the retry may again lead to an \fB\s-1SSL_ERROR_WANT_READ\s0\fR or +\&\fB\s-1SSL_ERROR_WANT_WRITE\s0\fR condition. +There is no fixed upper limit for the number of iterations that +may be necessary until progress becomes visible at application +protocol level. +.Sp +It is safe to call \fBSSL_read()\fR or \fBSSL_read_ex()\fR when more data is available +even when the call that set this error was an \fBSSL_write()\fR or \fBSSL_write_ex()\fR. +However if the call was an \fBSSL_write()\fR or \fBSSL_write_ex()\fR, it should be called +again to continue sending the application data. +.Sp +For socket \fB\s-1BIO\s0\fRs (e.g. when \fBSSL_set_fd()\fR was used), \fBselect()\fR or +\&\fBpoll()\fR on the underlying socket can be used to find out when the +\&\s-1TLS/SSL I/O\s0 function should be retried. +.Sp +Caveat: Any \s-1TLS/SSL I/O\s0 function can lead to either of +\&\fB\s-1SSL_ERROR_WANT_READ\s0\fR and \fB\s-1SSL_ERROR_WANT_WRITE\s0\fR. +In particular, +\&\fBSSL_read_ex()\fR, \fBSSL_read()\fR, \fBSSL_peek_ex()\fR, or \fBSSL_peek()\fR may want to write data +and \fBSSL_write()\fR or \fBSSL_write_ex()\fR may want to read data. +This is mainly because +\&\s-1TLS/SSL\s0 handshakes may occur at any time during the protocol (initiated by +either the client or the server); \fBSSL_read_ex()\fR, \fBSSL_read()\fR, \fBSSL_peek_ex()\fR, +\&\fBSSL_peek()\fR, \fBSSL_write_ex()\fR, and \fBSSL_write()\fR will handle any pending handshakes. +.IP "\s-1SSL_ERROR_WANT_CONNECT, SSL_ERROR_WANT_ACCEPT\s0" 4 +.IX Item "SSL_ERROR_WANT_CONNECT, SSL_ERROR_WANT_ACCEPT" +The operation did not complete; the same \s-1TLS/SSL I/O\s0 function should be +called again later. The underlying \s-1BIO\s0 was not connected yet to the peer +and the call would block in \fBconnect()\fR/\fBaccept()\fR. The \s-1SSL\s0 function should be +called again when the connection is established. These messages can only +appear with a \fBBIO_s_connect()\fR or \fBBIO_s_accept()\fR \s-1BIO,\s0 respectively. +In order to find out, when the connection has been successfully established, +on many platforms \fBselect()\fR or \fBpoll()\fR for writing on the socket file descriptor +can be used. +.IP "\s-1SSL_ERROR_WANT_X509_LOOKUP\s0" 4 +.IX Item "SSL_ERROR_WANT_X509_LOOKUP" +The operation did not complete because an application callback set by +\&\fBSSL_CTX_set_client_cert_cb()\fR has asked to be called again. +The \s-1TLS/SSL I/O\s0 function should be called again later. +Details depend on the application. +.IP "\s-1SSL_ERROR_WANT_ASYNC\s0" 4 +.IX Item "SSL_ERROR_WANT_ASYNC" +The operation did not complete because an asynchronous engine is still +processing data. This will only occur if the mode has been set to \s-1SSL_MODE_ASYNC\s0 +using \fBSSL_CTX_set_mode\fR\|(3) or \fBSSL_set_mode\fR\|(3) and an asynchronous capable +engine is being used. An application can determine whether the engine has +completed its processing using \fBselect()\fR or \fBpoll()\fR on the asynchronous wait file +descriptor. This file descriptor is available by calling +\&\fBSSL_get_all_async_fds\fR\|(3) or \fBSSL_get_changed_async_fds\fR\|(3). The \s-1TLS/SSL I/O\s0 +function should be called again later. The function \fBmust\fR be called from the +same thread that the original call was made from. +.IP "\s-1SSL_ERROR_WANT_ASYNC_JOB\s0" 4 +.IX Item "SSL_ERROR_WANT_ASYNC_JOB" +The asynchronous job could not be started because there were no async jobs +available in the pool (see \fBASYNC_init_thread\fR\|(3)). This will only occur if the +mode has been set to \s-1SSL_MODE_ASYNC\s0 using \fBSSL_CTX_set_mode\fR\|(3) or +\&\fBSSL_set_mode\fR\|(3) and a maximum limit has been set on the async job pool +through a call to \fBASYNC_init_thread\fR\|(3). The application should retry the +operation after a currently executing asynchronous operation for the current +thread has completed. +.IP "\s-1SSL_ERROR_WANT_CLIENT_HELLO_CB\s0" 4 +.IX Item "SSL_ERROR_WANT_CLIENT_HELLO_CB" +The operation did not complete because an application callback set by +\&\fBSSL_CTX_set_client_hello_cb()\fR has asked to be called again. +The \s-1TLS/SSL I/O\s0 function should be called again later. +Details depend on the application. +.IP "\s-1SSL_ERROR_SYSCALL\s0" 4 +.IX Item "SSL_ERROR_SYSCALL" +Some non-recoverable, fatal I/O error occurred. The OpenSSL error queue may +contain more information on the error. For socket I/O on Unix systems, consult +\&\fBerrno\fR for details. If this error occurs then no further I/O operations should +be performed on the connection and \fBSSL_shutdown()\fR must not be called. +.Sp +This value can also be returned for other errors, check the error queue for +details. +.IP "\s-1SSL_ERROR_SSL\s0" 4 +.IX Item "SSL_ERROR_SSL" +A non-recoverable, fatal error in the \s-1SSL\s0 library occurred, usually a protocol +error. The OpenSSL error queue contains more information on the error. If this +error occurs then no further I/O operations should be performed on the +connection and \fBSSL_shutdown()\fR must not be called. +.SH "BUGS" +.IX Header "BUGS" +The \fB\s-1SSL_ERROR_SYSCALL\s0\fR with \fBerrno\fR value of 0 indicates unexpected \s-1EOF\s0 from +the peer. This will be properly reported as \fB\s-1SSL_ERROR_SSL\s0\fR with reason +code \fB\s-1SSL_R_UNEXPECTED_EOF_WHILE_READING\s0\fR in the OpenSSL 3.0 release because +it is truly a \s-1TLS\s0 protocol error to terminate the connection without +a \fBSSL_shutdown()\fR. +.PP +The issue is kept unfixed in OpenSSL 1.1.1 releases because many applications +which choose to ignore this protocol error depend on the existing way of +reporting the error. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7) +.SH "HISTORY" +.IX Header "HISTORY" +The \s-1SSL_ERROR_WANT_ASYNC\s0 error code was added in OpenSSL 1.1.0. +The \s-1SSL_ERROR_WANT_CLIENT_HELLO_CB\s0 error code was added in OpenSSL 1.1.1. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2020 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_extms_support.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_extms_support.3 new file mode 100644 index 00000000..2d6d0486 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_extms_support.3 @@ -0,0 +1,172 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_GET_EXTMS_SUPPORT 3" +.TH SSL_GET_EXTMS_SUPPORT 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_get_extms_support \- extended master secret support +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int SSL_get_extms_support(SSL *ssl); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_get_extms_support()\fR indicates whether the current session used extended +master secret. +.PP +This function is implemented as a macro. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_get_extms_support()\fR returns 1 if the current session used extended +master secret, 0 if it did not and \-1 if a handshake is currently in +progress i.e. it is not possible to determine if extended master secret +was used. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2015\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_fd.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_fd.3 new file mode 100644 index 00000000..5aa53f72 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_fd.3 @@ -0,0 +1,179 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_GET_FD 3" +.TH SSL_GET_FD 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_get_fd, SSL_get_rfd, SSL_get_wfd \- get file descriptor linked to an SSL object +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int SSL_get_fd(const SSL *ssl); +\& int SSL_get_rfd(const SSL *ssl); +\& int SSL_get_wfd(const SSL *ssl); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_get_fd()\fR returns the file descriptor which is linked to \fBssl\fR. +\&\fBSSL_get_rfd()\fR and \fBSSL_get_wfd()\fR return the file descriptors for the +read or the write channel, which can be different. If the read and the +write channel are different, \fBSSL_get_fd()\fR will return the file descriptor +of the read channel. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +The following return values can occur: +.IP "\-1" 4 +.IX Item "-1" +The operation failed, because the underlying \s-1BIO\s0 is not of the correct type +(suitable for file descriptors). +.IP ">=0" 4 +.IX Item ">=0" +The file descriptor linked to \fBssl\fR. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBSSL_set_fd\fR\|(3), \fBssl\fR\|(7) , \fBbio\fR\|(7) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_peer_cert_chain.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_peer_cert_chain.3 new file mode 100644 index 00000000..bfd5cf72 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_peer_cert_chain.3 @@ -0,0 +1,201 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_GET_PEER_CERT_CHAIN 3" +.TH SSL_GET_PEER_CERT_CHAIN 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_get_peer_cert_chain, SSL_get0_verified_chain \- get the X509 certificate chain of the peer +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& STACK_OF(X509) *SSL_get_peer_cert_chain(const SSL *ssl); +\& STACK_OF(X509) *SSL_get0_verified_chain(const SSL *ssl); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_get_peer_cert_chain()\fR returns a pointer to \s-1STACK_OF\s0(X509) certificates +forming the certificate chain sent by the peer. If called on the client side, +the stack also contains the peer's certificate; if called on the server +side, the peer's certificate must be obtained separately using +\&\fBSSL_get_peer_certificate\fR\|(3). +If the peer did not present a certificate, \s-1NULL\s0 is returned. +.PP +\&\s-1NB:\s0 \fBSSL_get_peer_cert_chain()\fR returns the peer chain as sent by the peer: it +only consists of certificates the peer has sent (in the order the peer +has sent them) it is \fBnot\fR a verified chain. +.PP +\&\fBSSL_get0_verified_chain()\fR returns the \fBverified\fR certificate chain +of the peer including the peer's end entity certificate. It must be called +after a session has been successfully established. If peer verification was +not successful (as indicated by \fBSSL_get_verify_result()\fR not returning +X509_V_OK) the chain may be incomplete or invalid. +.SH "NOTES" +.IX Header "NOTES" +If the session is resumed peers do not send certificates so a \s-1NULL\s0 pointer +is returned by these functions. Applications can call \fBSSL_session_reused()\fR +to determine whether a session is resumed. +.PP +The reference count of each certificate in the returned \s-1STACK_OF\s0(X509) object +is not incremented and the returned stack may be invalidated by renegotiation. +If applications wish to use any certificates in the returned chain +indefinitely they must increase the reference counts using \fBX509_up_ref()\fR or +obtain a copy of the whole chain with \fBX509_chain_up_ref()\fR. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +The following return values can occur: +.IP "\s-1NULL\s0" 4 +.IX Item "NULL" +No certificate was presented by the peer or no connection was established +or the certificate chain is no longer available when a session is reused. +.IP "Pointer to a \s-1STACK_OF\s0(X509)" 4 +.IX Item "Pointer to a STACK_OF(X509)" +The return value points to the certificate chain presented by the peer. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), \fBSSL_get_peer_certificate\fR\|(3), \fBX509_up_ref\fR\|(3), +\&\fBX509_chain_up_ref\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_peer_certificate.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_peer_certificate.3 new file mode 100644 index 00000000..0c8b8df9 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_peer_certificate.3 @@ -0,0 +1,189 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_GET_PEER_CERTIFICATE 3" +.TH SSL_GET_PEER_CERTIFICATE 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_get_peer_certificate \- get the X509 certificate of the peer +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& X509 *SSL_get_peer_certificate(const SSL *ssl); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_get_peer_certificate()\fR returns a pointer to the X509 certificate the +peer presented. If the peer did not present a certificate, \s-1NULL\s0 is returned. +.SH "NOTES" +.IX Header "NOTES" +Due to the protocol definition, a \s-1TLS/SSL\s0 server will always send a +certificate, if present. A client will only send a certificate when +explicitly requested to do so by the server (see +\&\fBSSL_CTX_set_verify\fR\|(3)). If an anonymous cipher +is used, no certificates are sent. +.PP +That a certificate is returned does not indicate information about the +verification state, use \fBSSL_get_verify_result\fR\|(3) +to check the verification state. +.PP +The reference count of the X509 object is incremented by one, so that it +will not be destroyed when the session containing the peer certificate is +freed. The X509 object must be explicitly freed using \fBX509_free()\fR. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +The following return values can occur: +.IP "\s-1NULL\s0" 4 +.IX Item "NULL" +No certificate was presented by the peer or no connection was established. +.IP "Pointer to an X509 certificate" 4 +.IX Item "Pointer to an X509 certificate" +The return value points to the certificate presented by the peer. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), \fBSSL_get_verify_result\fR\|(3), +\&\fBSSL_CTX_set_verify\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_peer_signature_nid.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_peer_signature_nid.3 new file mode 100644 index 00000000..22c86351 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_peer_signature_nid.3 @@ -0,0 +1,183 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_GET_PEER_SIGNATURE_NID 3" +.TH SSL_GET_PEER_SIGNATURE_NID 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_get_peer_signature_nid, SSL_get_peer_signature_type_nid, SSL_get_signature_nid, SSL_get_signature_type_nid \- get TLS message signing types +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int SSL_get_peer_signature_nid(SSL *ssl, int *psig_nid); +\& int SSL_get_peer_signature_type_nid(const SSL *ssl, int *psigtype_nid); +\& int SSL_get_signature_nid(SSL *ssl, int *psig_nid); +\& int SSL_get_signature_type_nid(const SSL *ssl, int *psigtype_nid); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_get_peer_signature_nid()\fR sets \fB*psig_nid\fR to the \s-1NID\s0 of the digest used +by the peer to sign \s-1TLS\s0 messages. It is implemented as a macro. +.PP +\&\fBSSL_get_peer_signature_type_nid()\fR sets \fB*psigtype_nid\fR to the signature +type used by the peer to sign \s-1TLS\s0 messages. Currently the signature type +is the \s-1NID\s0 of the public key type used for signing except for \s-1PSS\s0 signing +where it is \fB\s-1EVP_PKEY_RSA_PSS\s0\fR. To differentiate between +\&\fBrsa_pss_rsae_*\fR and \fBrsa_pss_pss_*\fR signatures, it's necessary to check +the type of public key in the peer's certificate. +.PP +\&\fBSSL_get_signature_nid()\fR and \fBSSL_get_signature_type_nid()\fR return the equivalent +information for the local end of the connection. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +These functions return 1 for success and 0 for failure. There are several +possible reasons for failure: the cipher suite has no signature (e.g. it +uses \s-1RSA\s0 key exchange or is anonymous), the \s-1TLS\s0 version is below 1.2 or +the functions were called too early, e.g. before the peer signed a message. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), \fBSSL_get_peer_certificate\fR\|(3), +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_peer_tmp_key.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_peer_tmp_key.3 new file mode 100644 index 00000000..810d2c59 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_peer_tmp_key.3 @@ -0,0 +1,183 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_GET_PEER_TMP_KEY 3" +.TH SSL_GET_PEER_TMP_KEY 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_get_peer_tmp_key, SSL_get_server_tmp_key, SSL_get_tmp_key \- get information about temporary keys used during a handshake +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& long SSL_get_peer_tmp_key(SSL *ssl, EVP_PKEY **key); +\& long SSL_get_server_tmp_key(SSL *ssl, EVP_PKEY **key); +\& long SSL_get_tmp_key(SSL *ssl, EVP_PKEY **key); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_get_peer_tmp_key()\fR returns the temporary key provided by the peer and +used during key exchange. For example, if \s-1ECDHE\s0 is in use, then this represents +the peer's public \s-1ECDHE\s0 key. On success a pointer to the key is stored in +\&\fB*key\fR. It is the caller's responsibility to free this key after use using +\&\fBEVP_PKEY_free\fR\|(3). +.PP +\&\fBSSL_get_server_tmp_key()\fR is a backwards compatibility alias for +\&\fBSSL_get_peer_tmp_key()\fR. +Under that name it worked just on the client side of the connection, its +behaviour on the server end is release-dependent. +.PP +\&\fBSSL_get_tmp_key()\fR returns the equivalent information for the local +end of the connection. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +All these functions return 1 on success and 0 otherwise. +.SH "NOTES" +.IX Header "NOTES" +This function is implemented as a macro. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), \fBEVP_PKEY_free\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_psk_identity.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_psk_identity.3 new file mode 100644 index 00000000..89b08785 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_psk_identity.3 @@ -0,0 +1,173 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_GET_PSK_IDENTITY 3" +.TH SSL_GET_PSK_IDENTITY 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_get_psk_identity, SSL_get_psk_identity_hint \- get PSK client identity and hint +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& const char *SSL_get_psk_identity_hint(const SSL *ssl); +\& const char *SSL_get_psk_identity(const SSL *ssl); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_get_psk_identity_hint()\fR is used to retrieve the \s-1PSK\s0 identity hint +used during the connection setup related to \s-1SSL\s0 object +\&\fBssl\fR. Similarly, \fBSSL_get_psk_identity()\fR is used to retrieve the \s-1PSK\s0 +identity used during the connection setup. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +If non\-\fB\s-1NULL\s0\fR, \fBSSL_get_psk_identity_hint()\fR returns the \s-1PSK\s0 identity +hint and \fBSSL_get_psk_identity()\fR returns the \s-1PSK\s0 identity. Both are +\&\fB\s-1NULL\s0\fR\-terminated. \fBSSL_get_psk_identity_hint()\fR may return \fB\s-1NULL\s0\fR if +no \s-1PSK\s0 identity hint was used during the connection setup. +.PP +Note that the return value is valid only during the lifetime of the +\&\s-1SSL\s0 object \fBssl\fR. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2006\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_rbio.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_rbio.3 new file mode 100644 index 00000000..3bf26207 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_rbio.3 @@ -0,0 +1,175 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_GET_RBIO 3" +.TH SSL_GET_RBIO 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_get_rbio, SSL_get_wbio \- get BIO linked to an SSL object +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& BIO *SSL_get_rbio(SSL *ssl); +\& BIO *SSL_get_wbio(SSL *ssl); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_get_rbio()\fR and \fBSSL_get_wbio()\fR return pointers to the BIOs for the +read or the write channel, which can be different. The reference count +of the \s-1BIO\s0 is not incremented. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +The following return values can occur: +.IP "\s-1NULL\s0" 4 +.IX Item "NULL" +No \s-1BIO\s0 was connected to the \s-1SSL\s0 object +.IP "Any other pointer" 4 +.IX Item "Any other pointer" +The \s-1BIO\s0 linked to \fBssl\fR. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBSSL_set_bio\fR\|(3), \fBssl\fR\|(7) , \fBbio\fR\|(7) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_session.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_session.3 new file mode 100644 index 00000000..96249e2e --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_session.3 @@ -0,0 +1,235 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_GET_SESSION 3" +.TH SSL_GET_SESSION 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_get_session, SSL_get0_session, SSL_get1_session \- retrieve TLS/SSL session data +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& SSL_SESSION *SSL_get_session(const SSL *ssl); +\& SSL_SESSION *SSL_get0_session(const SSL *ssl); +\& SSL_SESSION *SSL_get1_session(SSL *ssl); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_get_session()\fR returns a pointer to the \fB\s-1SSL_SESSION\s0\fR actually used in +\&\fBssl\fR. The reference count of the \fB\s-1SSL_SESSION\s0\fR is not incremented, so +that the pointer can become invalid by other operations. +.PP +\&\fBSSL_get0_session()\fR is the same as \fBSSL_get_session()\fR. +.PP +\&\fBSSL_get1_session()\fR is the same as \fBSSL_get_session()\fR, but the reference +count of the \fB\s-1SSL_SESSION\s0\fR is incremented by one. +.SH "NOTES" +.IX Header "NOTES" +The ssl session contains all information required to re-establish the +connection without a full handshake for \s-1SSL\s0 versions up to and including +TLSv1.2. In TLSv1.3 the same is true, but sessions are established after the +main handshake has occurred. The server will send the session information to the +client at a time of its choosing, which may be some while after the initial +connection is established (or never). Calling these functions on the client side +in TLSv1.3 before the session has been established will still return an +\&\s-1SSL_SESSION\s0 object but that object cannot be used for resuming the session. See +\&\fBSSL_SESSION_is_resumable\fR\|(3) for information on how to determine whether an +\&\s-1SSL_SESSION\s0 object can be used for resumption or not. +.PP +Additionally, in TLSv1.3, a server can send multiple messages that establish a +session for a single connection. In that case the above functions will only +return information on the last session that was received. +.PP +The preferred way for applications to obtain a resumable \s-1SSL_SESSION\s0 object is +to use a new session callback as described in \fBSSL_CTX_sess_set_new_cb\fR\|(3). +The new session callback is only invoked when a session is actually established, +so this avoids the problem described above where an application obtains an +\&\s-1SSL_SESSION\s0 object that cannot be used for resumption in TLSv1.3. It also +enables applications to obtain information about all sessions sent by the +server. +.PP +A session will be automatically removed from the session cache and marked as +non-resumable if the connection is not closed down cleanly, e.g. if a fatal +error occurs on the connection or \fBSSL_shutdown\fR\|(3) is not called prior to +\&\fBSSL_free\fR\|(3). +.PP +In TLSv1.3 it is recommended that each \s-1SSL_SESSION\s0 object is only used for +resumption once. +.PP +\&\fBSSL_get0_session()\fR returns a pointer to the actual session. As the +reference counter is not incremented, the pointer is only valid while +the connection is in use. If \fBSSL_clear\fR\|(3) or +\&\fBSSL_free\fR\|(3) is called, the session may be removed completely +(if considered bad), and the pointer obtained will become invalid. Even +if the session is valid, it can be removed at any time due to timeout +during \fBSSL_CTX_flush_sessions\fR\|(3). +.PP +If the data is to be kept, \fBSSL_get1_session()\fR will increment the reference +count, so that the session will not be implicitly removed by other operations +but stays in memory. In order to remove the session +\&\fBSSL_SESSION_free\fR\|(3) must be explicitly called once +to decrement the reference count again. +.PP +\&\s-1SSL_SESSION\s0 objects keep internal link information about the session cache +list, when being inserted into one \s-1SSL_CTX\s0 object's session cache. +One \s-1SSL_SESSION\s0 object, regardless of its reference count, must therefore +only be used with one \s-1SSL_CTX\s0 object (and the \s-1SSL\s0 objects created +from this \s-1SSL_CTX\s0 object). +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +The following return values can occur: +.IP "\s-1NULL\s0" 4 +.IX Item "NULL" +There is no session available in \fBssl\fR. +.IP "Pointer to an \s-1SSL_SESSION\s0" 4 +.IX Item "Pointer to an SSL_SESSION" +The return value points to the data of an \s-1SSL\s0 session. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), \fBSSL_free\fR\|(3), +\&\fBSSL_clear\fR\|(3), +\&\fBSSL_SESSION_free\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_shared_sigalgs.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_shared_sigalgs.3 new file mode 100644 index 00000000..056e8543 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_shared_sigalgs.3 @@ -0,0 +1,219 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_GET_SHARED_SIGALGS 3" +.TH SSL_GET_SHARED_SIGALGS 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_get_shared_sigalgs, SSL_get_sigalgs \- get supported signature algorithms +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int SSL_get_shared_sigalgs(SSL *s, int idx, +\& int *psign, int *phash, int *psignhash, +\& unsigned char *rsig, unsigned char *rhash); +\& +\& int SSL_get_sigalgs(SSL *s, int idx, +\& int *psign, int *phash, int *psignhash, +\& unsigned char *rsig, unsigned char *rhash); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_get_shared_sigalgs()\fR returns information about the shared signature +algorithms supported by peer \fBs\fR. The parameter \fBidx\fR indicates the index +of the shared signature algorithm to return starting from zero. The signature +algorithm \s-1NID\s0 is written to \fB*psign\fR, the hash \s-1NID\s0 to \fB*phash\fR and the +sign and hash \s-1NID\s0 to \fB*psignhash\fR. The raw signature and hash values +are written to \fB*rsig\fR and \fB*rhash\fR. +.PP +\&\fBSSL_get_sigalgs()\fR is similar to \fBSSL_get_shared_sigalgs()\fR except it returns +information about all signature algorithms supported by \fBs\fR in the order +they were sent by the peer. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_get_shared_sigalgs()\fR and \fBSSL_get_sigalgs()\fR return the number of +signature algorithms or \fB0\fR if the \fBidx\fR parameter is out of range. +.SH "NOTES" +.IX Header "NOTES" +These functions are typically called for debugging purposes (to report +the peer's preferences) or where an application wants finer control over +certificate selection. Most applications will rely on internal handling +and will not need to call them. +.PP +If an application is only interested in the highest preference shared +signature algorithm it can just set \fBidx\fR to zero. +.PP +Any or all of the parameters \fBpsign\fR, \fBphash\fR, \fBpsignhash\fR, \fBrsig\fR or +\&\fBrhash\fR can be set to \fB\s-1NULL\s0\fR if the value is not required. By setting +them all to \fB\s-1NULL\s0\fR and setting \fBidx\fR to zero the total number of +signature algorithms can be determined: which can be zero. +.PP +These functions must be called after the peer has sent a list of supported +signature algorithms: after a client hello (for servers) or a certificate +request (for clients). They can (for example) be called in the certificate +callback. +.PP +Only \s-1TLS 1.2, TLS 1.3\s0 and \s-1DTLS 1.2\s0 currently support signature algorithms. +If these +functions are called on an earlier version of \s-1TLS\s0 or \s-1DTLS\s0 zero is returned. +.PP +The shared signature algorithms returned by \fBSSL_get_shared_sigalgs()\fR are +ordered according to configuration and peer preferences. +.PP +The raw values correspond to the on the wire form as defined by \s-1RFC5246\s0 et al. +The NIDs are OpenSSL equivalents. For example if the peer sent \fBsha256\fR\|(4) and +\&\fBrsa\fR\|(1) then \fB*rhash\fR would be 4, \fB*rsign\fR 1, \fB*phash\fR NID_sha256, \fB*psig\fR +NID_rsaEncryption and \fB*psighash\fR NID_sha256WithRSAEncryption. +.PP +If a signature algorithm is not recognised the corresponding NIDs +will be set to \fBNID_undef\fR. This may be because the value is not supported, +is not an appropriate combination (for example \s-1MD5\s0 and \s-1DSA\s0) or the +signature algorithm does not use a hash (for example Ed25519). +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBSSL_CTX_set_cert_cb\fR\|(3), +\&\fBssl\fR\|(7) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2015\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_verify_result.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_verify_result.3 new file mode 100644 index 00000000..cff20d38 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_verify_result.3 @@ -0,0 +1,190 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_GET_VERIFY_RESULT 3" +.TH SSL_GET_VERIFY_RESULT 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_get_verify_result \- get result of peer certificate verification +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& long SSL_get_verify_result(const SSL *ssl); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_get_verify_result()\fR returns the result of the verification of the +X509 certificate presented by the peer, if any. +.SH "NOTES" +.IX Header "NOTES" +\&\fBSSL_get_verify_result()\fR can only return one error code while the verification +of a certificate can fail because of many reasons at the same time. Only +the last verification error that occurred during the processing is available +from \fBSSL_get_verify_result()\fR. +.PP +The verification result is part of the established session and is restored +when a session is reused. +.SH "BUGS" +.IX Header "BUGS" +If no peer certificate was presented, the returned result code is +X509_V_OK. This is because no verification error occurred, it does however +not indicate success. \fBSSL_get_verify_result()\fR is only useful in connection +with \fBSSL_get_peer_certificate\fR\|(3). +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +The following return values can currently occur: +.IP "X509_V_OK" 4 +.IX Item "X509_V_OK" +The verification succeeded or no peer certificate was presented. +.IP "Any other value" 4 +.IX Item "Any other value" +Documented in \fBverify\fR\|(1). +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), \fBSSL_set_verify_result\fR\|(3), +\&\fBSSL_get_peer_certificate\fR\|(3), +\&\fBverify\fR\|(1) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_version.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_version.3 new file mode 100644 index 00000000..e0268c26 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_get_version.3 @@ -0,0 +1,221 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_GET_VERSION 3" +.TH SSL_GET_VERSION 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_client_version, SSL_get_version, SSL_is_dtls, SSL_version \- get the protocol information of a connection +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int SSL_client_version(const SSL *s); +\& +\& const char *SSL_get_version(const SSL *ssl); +\& +\& int SSL_is_dtls(const SSL *ssl); +\& +\& int SSL_version(const SSL *s); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_client_version()\fR returns the numeric protocol version advertised by the +client in the legacy_version field of the ClientHello when initiating the +connection. Note that, for \s-1TLS,\s0 this value will never indicate a version greater +than TLSv1.2 even if TLSv1.3 is subsequently negotiated. \fBSSL_get_version()\fR +returns the name of the protocol used for the connection. \fBSSL_version()\fR returns +the numeric protocol version used for the connection. They should only be called +after the initial handshake has been completed. Prior to that the results +returned from these functions may be unreliable. +.PP +\&\fBSSL_is_dtls()\fR returns one if the connection is using \s-1DTLS,\s0 zero if not. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_get_version()\fR returns one of the following strings: +.IP "SSLv3" 4 +.IX Item "SSLv3" +The connection uses the SSLv3 protocol. +.IP "TLSv1" 4 +.IX Item "TLSv1" +The connection uses the TLSv1.0 protocol. +.IP "TLSv1.1" 4 +.IX Item "TLSv1.1" +The connection uses the TLSv1.1 protocol. +.IP "TLSv1.2" 4 +.IX Item "TLSv1.2" +The connection uses the TLSv1.2 protocol. +.IP "TLSv1.3" 4 +.IX Item "TLSv1.3" +The connection uses the TLSv1.3 protocol. +.IP "unknown" 4 +.IX Item "unknown" +This indicates an unknown protocol version. +.PP +\&\fBSSL_version()\fR and \fBSSL_client_version()\fR return an integer which could include any +of the following: +.IP "\s-1SSL3_VERSION\s0" 4 +.IX Item "SSL3_VERSION" +The connection uses the SSLv3 protocol. +.IP "\s-1TLS1_VERSION\s0" 4 +.IX Item "TLS1_VERSION" +The connection uses the TLSv1.0 protocol. +.IP "\s-1TLS1_1_VERSION\s0" 4 +.IX Item "TLS1_1_VERSION" +The connection uses the TLSv1.1 protocol. +.IP "\s-1TLS1_2_VERSION\s0" 4 +.IX Item "TLS1_2_VERSION" +The connection uses the TLSv1.2 protocol. +.IP "\s-1TLS1_3_VERSION\s0" 4 +.IX Item "TLS1_3_VERSION" +The connection uses the TLSv1.3 protocol (never returned for +\&\fBSSL_client_version()\fR). +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7) +.SH "HISTORY" +.IX Header "HISTORY" +The \fBSSL_is_dtls()\fR function was added in OpenSSL 1.1.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2001\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_in_init.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_in_init.3 new file mode 100644 index 00000000..8c7b909a --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_in_init.3 @@ -0,0 +1,227 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_IN_INIT 3" +.TH SSL_IN_INIT 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_in_before, SSL_in_init, SSL_is_init_finished, SSL_in_connect_init, SSL_in_accept_init, SSL_get_state \&\- retrieve information about the handshake state machine +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int SSL_in_init(const SSL *s); +\& int SSL_in_before(const SSL *s); +\& int SSL_is_init_finished(const SSL *s); +\& +\& int SSL_in_connect_init(SSL *s); +\& int SSL_in_accept_init(SSL *s); +\& +\& OSSL_HANDSHAKE_STATE SSL_get_state(const SSL *ssl); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_in_init()\fR returns 1 if the \s-1SSL/TLS\s0 state machine is currently processing or +awaiting handshake messages, or 0 otherwise. +.PP +\&\fBSSL_in_before()\fR returns 1 if no \s-1SSL/TLS\s0 handshake has yet been initiated, or 0 +otherwise. +.PP +\&\fBSSL_is_init_finished()\fR returns 1 if the \s-1SSL/TLS\s0 connection is in a state where +fully protected application data can be transferred or 0 otherwise. +.PP +Note that in some circumstances (such as when early data is being transferred) +\&\fBSSL_in_init()\fR, \fBSSL_in_before()\fR and \fBSSL_is_init_finished()\fR can all return 0. +.PP +\&\fBSSL_in_connect_init()\fR returns 1 if \fBs\fR is acting as a client and \fBSSL_in_init()\fR +would return 1, or 0 otherwise. +.PP +\&\fBSSL_in_accept_init()\fR returns 1 if \fBs\fR is acting as a server and \fBSSL_in_init()\fR +would return 1, or 0 otherwise. +.PP +\&\fBSSL_in_connect_init()\fR and \fBSSL_in_accept_init()\fR are implemented as macros. +.PP +\&\fBSSL_get_state()\fR returns a value indicating the current state of the handshake +state machine. \s-1OSSL_HANDSHAKE_STATE\s0 is an enumerated type where each value +indicates a discrete state machine state. Note that future versions of OpenSSL +may define more states so applications should expect to receive unrecognised +state values. The naming format is made up of a number of elements as follows: +.PP +\&\fBprotocol\fR_ST_\fBrole\fR_\fBmessage\fR +.PP +\&\fBprotocol\fR is one of \s-1TLS\s0 or \s-1DTLS. DTLS\s0 is used where a state is specific to the +\&\s-1DTLS\s0 protocol. Otherwise \s-1TLS\s0 is used. +.PP +\&\fBrole\fR is one of \s-1CR, CW, SR\s0 or \s-1SW\s0 to indicate \*(L"client reading\*(R", +\&\*(L"client writing\*(R", \*(L"server reading\*(R" or \*(L"server writing\*(R" respectively. +.PP +\&\fBmessage\fR is the name of a handshake message that is being or has been sent, or +is being or has been processed. +.PP +Additionally there are some special states that do not conform to the above +format. These are: +.IP "\s-1TLS_ST_BEFORE\s0" 4 +.IX Item "TLS_ST_BEFORE" +No handshake messages have yet been been sent or received. +.IP "\s-1TLS_ST_OK\s0" 4 +.IX Item "TLS_ST_OK" +Handshake message sending/processing has completed. +.IP "\s-1TLS_ST_EARLY_DATA\s0" 4 +.IX Item "TLS_ST_EARLY_DATA" +Early data is being processed +.IP "\s-1TLS_ST_PENDING_EARLY_DATA_END\s0" 4 +.IX Item "TLS_ST_PENDING_EARLY_DATA_END" +Awaiting the end of early data processing +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_in_init()\fR, \fBSSL_in_before()\fR, \fBSSL_is_init_finished()\fR, \fBSSL_in_connect_init()\fR +and \fBSSL_in_accept_init()\fR return values as indicated above. +.PP +\&\fBSSL_get_state()\fR returns the current handshake state. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), +\&\fBSSL_read_early_data\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_key_update.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_key_update.3 new file mode 100644 index 00000000..1f02530a --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_key_update.3 @@ -0,0 +1,236 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_KEY_UPDATE 3" +.TH SSL_KEY_UPDATE 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_key_update, SSL_get_key_update_type, SSL_renegotiate, SSL_renegotiate_abbreviated, SSL_renegotiate_pending \&\- initiate and obtain information about updating connection keys +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int SSL_key_update(SSL *s, int updatetype); +\& int SSL_get_key_update_type(const SSL *s); +\& +\& int SSL_renegotiate(SSL *s); +\& int SSL_renegotiate_abbreviated(SSL *s); +\& int SSL_renegotiate_pending(const SSL *s); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_key_update()\fR schedules an update of the keys for the current \s-1TLS\s0 connection. +If the \fBupdatetype\fR parameter is set to \fB\s-1SSL_KEY_UPDATE_NOT_REQUESTED\s0\fR then +the sending keys for this connection will be updated and the peer will be +informed of the change. If the \fBupdatetype\fR parameter is set to +\&\fB\s-1SSL_KEY_UPDATE_REQUESTED\s0\fR then the sending keys for this connection will be +updated and the peer will be informed of the change along with a request for the +peer to additionally update its sending keys. It is an error if \fBupdatetype\fR is +set to \fB\s-1SSL_KEY_UPDATE_NONE\s0\fR. +.PP +\&\fBSSL_key_update()\fR must only be called after the initial handshake has been +completed and TLSv1.3 has been negotiated. The key update will not take place +until the next time an \s-1IO\s0 operation such as \fBSSL_read_ex()\fR or \fBSSL_write_ex()\fR +takes place on the connection. Alternatively \fBSSL_do_handshake()\fR can be called to +force the update to take place immediately. +.PP +\&\fBSSL_get_key_update_type()\fR can be used to determine whether a key update +operation has been scheduled but not yet performed. The type of the pending key +update operation will be returned if there is one, or \s-1SSL_KEY_UPDATE_NONE\s0 +otherwise. +.PP +\&\fBSSL_renegotiate()\fR and \fBSSL_renegotiate_abbreviated()\fR should only be called for +connections that have negotiated TLSv1.2 or less. Calling them on any other +connection will result in an error. +.PP +When called from the client side, \fBSSL_renegotiate()\fR schedules a completely new +handshake over an existing \s-1SSL/TLS\s0 connection. The next time an \s-1IO\s0 operation +such as \fBSSL_read_ex()\fR or \fBSSL_write_ex()\fR takes place on the connection a check +will be performed to confirm that it is a suitable time to start a +renegotiation. If so, then it will be initiated immediately. OpenSSL will not +attempt to resume any session associated with the connection in the new +handshake. +.PP +When called from the client side, \fBSSL_renegotiate_abbreviated()\fR works in the +same was as \fBSSL_renegotiate()\fR except that OpenSSL will attempt to resume the +session associated with the current connection in the new handshake. +.PP +When called from the server side, \fBSSL_renegotiate()\fR and +\&\fBSSL_renegotiate_abbreviated()\fR behave identically. They both schedule a request +for a new handshake to be sent to the client. The next time an \s-1IO\s0 operation is +performed then the same checks as on the client side are performed and then, if +appropriate, the request is sent. The client may or may not respond with a new +handshake and it may or may not attempt to resume an existing session. If +a new handshake is started then this will be handled transparently by calling +any OpenSSL \s-1IO\s0 function. +.PP +If an OpenSSL client receives a renegotiation request from a server then again +this will be handled transparently through calling any OpenSSL \s-1IO\s0 function. For +a \s-1TLS\s0 connection the client will attempt to resume the current session in the +new handshake. For historical reasons, \s-1DTLS\s0 clients will not attempt to resume +the session in the new handshake. +.PP +The \fBSSL_renegotiate_pending()\fR function returns 1 if a renegotiation or +renegotiation request has been scheduled but not yet acted on, or 0 otherwise. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_key_update()\fR, \fBSSL_renegotiate()\fR and \fBSSL_renegotiate_abbreviated()\fR return 1 +on success or 0 on error. +.PP +\&\fBSSL_get_key_update_type()\fR returns the update type of the pending key update +operation or \s-1SSL_KEY_UPDATE_NONE\s0 if there is none. +.PP +\&\fBSSL_renegotiate_pending()\fR returns 1 if a renegotiation or renegotiation request +has been scheduled but not yet acted on, or 0 otherwise. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), \fBSSL_read_ex\fR\|(3), +\&\fBSSL_write_ex\fR\|(3), +\&\fBSSL_do_handshake\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +The \fBSSL_key_update()\fR and \fBSSL_get_key_update_type()\fR functions were added in +OpenSSL 1.1.1. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_library_init.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_library_init.3 new file mode 100644 index 00000000..ecdc410b --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_library_init.3 @@ -0,0 +1,185 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_LIBRARY_INIT 3" +.TH SSL_LIBRARY_INIT 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_library_init, OpenSSL_add_ssl_algorithms \&\- initialize SSL library by registering algorithms +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int SSL_library_init(void); +\& +\& int OpenSSL_add_ssl_algorithms(void); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_library_init()\fR registers the available \s-1SSL/TLS\s0 ciphers and digests. +.PP +\&\fBOpenSSL_add_ssl_algorithms()\fR is a synonym for \fBSSL_library_init()\fR and is +implemented as a macro. +.SH "NOTES" +.IX Header "NOTES" +\&\fBSSL_library_init()\fR must be called before any other action takes place. +\&\fBSSL_library_init()\fR is not reentrant. +.SH "WARNINGS" +.IX Header "WARNINGS" +\&\fBSSL_library_init()\fR adds ciphers and digests used directly and indirectly by +\&\s-1SSL/TLS.\s0 +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_library_init()\fR always returns \*(L"1\*(R", so it is safe to discard the return +value. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), +\&\fBRAND_add\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +The \fBSSL_library_init()\fR and \fBOpenSSL_add_ssl_algorithms()\fR functions were +deprecated in OpenSSL 1.1.0 by \fBOPENSSL_init_ssl()\fR. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_load_client_CA_file.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_load_client_CA_file.3 new file mode 100644 index 00000000..ab03e310 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_load_client_CA_file.3 @@ -0,0 +1,209 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_LOAD_CLIENT_CA_FILE 3" +.TH SSL_LOAD_CLIENT_CA_FILE 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_load_client_CA_file, SSL_add_file_cert_subjects_to_stack, SSL_add_dir_cert_subjects_to_stack \&\- load certificate names +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& STACK_OF(X509_NAME) *SSL_load_client_CA_file(const char *file); +\& +\& int SSL_add_file_cert_subjects_to_stack(STACK_OF(X509_NAME) *stack, +\& const char *file) +\& int SSL_add_dir_cert_subjects_to_stack(STACK_OF(X509_NAME) *stack, +\& const char *dir) +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_load_client_CA_file()\fR reads certificates from \fIfile\fR and returns +a \s-1STACK_OF\s0(X509_NAME) with the subject names found. +.PP +\&\fBSSL_add_file_cert_subjects_to_stack()\fR reads certificates from \fIfile\fR, +and adds their subject name to the already existing \fIstack\fR. +.PP +\&\fBSSL_add_dir_cert_subjects_to_stack()\fR reads certificates from every +file in the directory \fIdir\fR, and adds their subject name to the +already existing \fIstack\fR. +.SH "NOTES" +.IX Header "NOTES" +\&\fBSSL_load_client_CA_file()\fR reads a file of \s-1PEM\s0 formatted certificates and +extracts the X509_NAMES of the certificates found. While the name suggests +the specific usage as support function for +\&\fBSSL_CTX_set_client_CA_list\fR\|(3), +it is not limited to \s-1CA\s0 certificates. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +The following return values can occur: +.IP "\s-1NULL\s0" 4 +.IX Item "NULL" +The operation failed, check out the error stack for the reason. +.IP "Pointer to \s-1STACK_OF\s0(X509_NAME)" 4 +.IX Item "Pointer to STACK_OF(X509_NAME)" +Pointer to the subject names of the successfully read certificates. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +Load names of CAs from file and use it as a client \s-1CA\s0 list: +.PP +.Vb 2 +\& SSL_CTX *ctx; +\& STACK_OF(X509_NAME) *cert_names; +\& +\& ... +\& cert_names = SSL_load_client_CA_file("/path/to/CAfile.pem"); +\& if (cert_names != NULL) +\& SSL_CTX_set_client_CA_list(ctx, cert_names); +\& else +\& /* error */ +\& ... +.Ve +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), +\&\fBSSL_CTX_set_client_CA_list\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_new.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_new.3 new file mode 100644 index 00000000..54cb214f --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_new.3 @@ -0,0 +1,195 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_NEW 3" +.TH SSL_NEW 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_dup, SSL_new, SSL_up_ref \- create an SSL structure for a connection +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& SSL *SSL_dup(SSL *s); +\& SSL *SSL_new(SSL_CTX *ctx); +\& int SSL_up_ref(SSL *s); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_new()\fR creates a new \fB\s-1SSL\s0\fR structure which is needed to hold the +data for a \s-1TLS/SSL\s0 connection. The new structure inherits the settings +of the underlying context \fBctx\fR: connection method, +options, verification settings, timeout settings. An \fB\s-1SSL\s0\fR structure is +reference counted. Creating an \fB\s-1SSL\s0\fR structure for the first time increments +the reference count. Freeing it (using SSL_free) decrements it. When the +reference count drops to zero, any memory or resources allocated to the \fB\s-1SSL\s0\fR +structure are freed. +.PP +\&\fBSSL_up_ref()\fR increments the reference count for an +existing \fB\s-1SSL\s0\fR structure. +.PP +\&\fBSSL_dup()\fR duplicates an existing \fB\s-1SSL\s0\fR structure into a new allocated one. All +settings are inherited from the original \fB\s-1SSL\s0\fR structure. Dynamic data (i.e. +existing connection details) are not copied, the new \fB\s-1SSL\s0\fR is set into an +initial accept (server) or connect (client) state. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +The following return values can occur: +.IP "\s-1NULL\s0" 4 +.IX Item "NULL" +The creation of a new \s-1SSL\s0 structure failed. Check the error stack to +find out the reason. +.IP "Pointer to an \s-1SSL\s0 structure" 4 +.IX Item "Pointer to an SSL structure" +The return value points to an allocated \s-1SSL\s0 structure. +.Sp +\&\fBSSL_up_ref()\fR returns 1 for success and 0 for failure. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBSSL_free\fR\|(3), \fBSSL_clear\fR\|(3), +\&\fBSSL_CTX_set_options\fR\|(3), +\&\fBSSL_get_SSL_CTX\fR\|(3), +\&\fBssl\fR\|(7) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_pending.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_pending.3 new file mode 100644 index 00000000..d8fa1675 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_pending.3 @@ -0,0 +1,199 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_PENDING 3" +.TH SSL_PENDING 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_pending, SSL_has_pending \- check for readable bytes buffered in an SSL object +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int SSL_pending(const SSL *ssl); +\& int SSL_has_pending(const SSL *s); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +Data is received in whole blocks known as records from the peer. A whole record +is processed (e.g. decrypted) in one go and is buffered by OpenSSL until it is +read by the application via a call to \fBSSL_read_ex\fR\|(3) or \fBSSL_read\fR\|(3). +.PP +\&\fBSSL_pending()\fR returns the number of bytes which have been processed, buffered +and are available inside \fBssl\fR for immediate read. +.PP +If the \fB\s-1SSL\s0\fR object's \fIread_ahead\fR flag is set (see +\&\fBSSL_CTX_set_read_ahead\fR\|(3)), additional protocol bytes (beyond the current +record) may have been read containing more \s-1TLS/SSL\s0 records. This also applies to +\&\s-1DTLS\s0 and pipelining (see \fBSSL_CTX_set_split_send_fragment\fR\|(3)). These +additional bytes will be buffered by OpenSSL but will remain unprocessed until +they are needed. As these bytes are still in an unprocessed state \fBSSL_pending()\fR +will ignore them. Therefore it is possible for no more bytes to be readable from +the underlying \s-1BIO\s0 (because OpenSSL has already read them) and for \fBSSL_pending()\fR +to return 0, even though readable application data bytes are available (because +the data is in unprocessed buffered records). +.PP +\&\fBSSL_has_pending()\fR returns 1 if \fBs\fR has buffered data (whether processed or +unprocessed) and 0 otherwise. Note that it is possible for \fBSSL_has_pending()\fR to +return 1, and then a subsequent call to \fBSSL_read_ex()\fR or \fBSSL_read()\fR to return no +data because the unprocessed buffered data when processed yielded no application +data (for example this can happen during renegotiation). It is also possible in +this scenario for \fBSSL_has_pending()\fR to continue to return 1 even after an +\&\fBSSL_read_ex()\fR or \fBSSL_read()\fR call because the buffered and unprocessed data is +not yet processable (e.g. because OpenSSL has only received a partial record so +far). +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_pending()\fR returns the number of buffered and processed application data +bytes that are pending and are available for immediate read. \fBSSL_has_pending()\fR +returns 1 if there is buffered record data in the \s-1SSL\s0 object and 0 otherwise. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBSSL_read_ex\fR\|(3), \fBSSL_read\fR\|(3), \fBSSL_CTX_set_read_ahead\fR\|(3), +\&\fBSSL_CTX_set_split_send_fragment\fR\|(3), \fBssl\fR\|(7) +.SH "HISTORY" +.IX Header "HISTORY" +The \fBSSL_has_pending()\fR function was added in OpenSSL 1.1.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_read.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_read.3 new file mode 100644 index 00000000..099374ac --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_read.3 @@ -0,0 +1,275 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_READ 3" +.TH SSL_READ 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_read_ex, SSL_read, SSL_peek_ex, SSL_peek \&\- read bytes from a TLS/SSL connection +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int SSL_read_ex(SSL *ssl, void *buf, size_t num, size_t *readbytes); +\& int SSL_read(SSL *ssl, void *buf, int num); +\& +\& int SSL_peek_ex(SSL *ssl, void *buf, size_t num, size_t *readbytes); +\& int SSL_peek(SSL *ssl, void *buf, int num); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_read_ex()\fR and \fBSSL_read()\fR try to read \fBnum\fR bytes from the specified \fBssl\fR +into the buffer \fBbuf\fR. On success \fBSSL_read_ex()\fR will store the number of bytes +actually read in \fB*readbytes\fR. +.PP +\&\fBSSL_peek_ex()\fR and \fBSSL_peek()\fR are identical to \fBSSL_read_ex()\fR and \fBSSL_read()\fR +respectively except no bytes are actually removed from the underlying \s-1BIO\s0 during +the read, so that a subsequent call to \fBSSL_read_ex()\fR or \fBSSL_read()\fR will yield +at least the same bytes. +.SH "NOTES" +.IX Header "NOTES" +In the paragraphs below a \*(L"read function\*(R" is defined as one of \fBSSL_read_ex()\fR, +\&\fBSSL_read()\fR, \fBSSL_peek_ex()\fR or \fBSSL_peek()\fR. +.PP +If necessary, a read function will negotiate a \s-1TLS/SSL\s0 session, if not already +explicitly performed by \fBSSL_connect\fR\|(3) or \fBSSL_accept\fR\|(3). If the +peer requests a re-negotiation, it will be performed transparently during +the read function operation. The behaviour of the read functions depends on the +underlying \s-1BIO.\s0 +.PP +For the transparent negotiation to succeed, the \fBssl\fR must have been +initialized to client or server mode. This is being done by calling +\&\fBSSL_set_connect_state\fR\|(3) or \fBSSL_set_accept_state()\fR before the first +invocation of a read function. +.PP +The read functions work based on the \s-1SSL/TLS\s0 records. The data are received in +records (with a maximum record size of 16kB). Only when a record has been +completely received, can it be processed (decryption and check of integrity). +Therefore data that was not retrieved at the last read call can still be +buffered inside the \s-1SSL\s0 layer and will be retrieved on the next read +call. If \fBnum\fR is higher than the number of bytes buffered then the read +functions will return with the bytes buffered. If no more bytes are in the +buffer, the read functions will trigger the processing of the next record. +Only when the record has been received and processed completely will the read +functions return reporting success. At most the contents of one record will +be returned. As the size of an \s-1SSL/TLS\s0 record may exceed the maximum packet size +of the underlying transport (e.g. \s-1TCP\s0), it may be necessary to read several +packets from the transport layer before the record is complete and the read call +can succeed. +.PP +If \fB\s-1SSL_MODE_AUTO_RETRY\s0\fR has been switched off and a non-application data +record has been processed, the read function can return and set the error to +\&\fB\s-1SSL_ERROR_WANT_READ\s0\fR. +In this case there might still be unprocessed data available in the \fB\s-1BIO\s0\fR. +If read ahead was set using \fBSSL_CTX_set_read_ahead\fR\|(3), there might also still +be unprocessed data available in the \fB\s-1SSL\s0\fR. +This behaviour can be controlled using the \fBSSL_CTX_set_mode\fR\|(3) call. +.PP +If the underlying \s-1BIO\s0 is \fBblocking\fR, a read function will only return once the +read operation has been finished or an error occurred, except when a +non-application data record has been processed and \fB\s-1SSL_MODE_AUTO_RETRY\s0\fR is +not set. +Note that if \fB\s-1SSL_MODE_AUTO_RETRY\s0\fR is set and only non-application data is +available the call will hang. +.PP +If the underlying \s-1BIO\s0 is \fBnon-blocking\fR, a read function will also return when +the underlying \s-1BIO\s0 could not satisfy the needs of the function to continue the +operation. +In this case a call to \fBSSL_get_error\fR\|(3) with the +return value of the read function will yield \fB\s-1SSL_ERROR_WANT_READ\s0\fR or +\&\fB\s-1SSL_ERROR_WANT_WRITE\s0\fR. +As at any time it's possible that non-application data needs to be sent, +a read function can also cause write operations. +The calling process then must repeat the call after taking appropriate action +to satisfy the needs of the read function. +The action depends on the underlying \s-1BIO.\s0 +When using a non-blocking socket, nothing is to be done, but \fBselect()\fR can be +used to check for the required condition. +When using a buffering \s-1BIO,\s0 like a \s-1BIO\s0 pair, data must be written into or +retrieved out of the \s-1BIO\s0 before being able to continue. +.PP +\&\fBSSL_pending\fR\|(3) can be used to find out whether there +are buffered bytes available for immediate retrieval. +In this case the read function can be called without blocking or actually +receiving new data from the underlying socket. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_read_ex()\fR and \fBSSL_peek_ex()\fR will return 1 for success or 0 for failure. +Success means that 1 or more application data bytes have been read from the \s-1SSL\s0 +connection. +Failure means that no bytes could be read from the \s-1SSL\s0 connection. +Failures can be retryable (e.g. we are waiting for more bytes to +be delivered by the network) or non-retryable (e.g. a fatal network error). +In the event of a failure call \fBSSL_get_error\fR\|(3) to find out the reason which +indicates whether the call is retryable or not. +.PP +For \fBSSL_read()\fR and \fBSSL_peek()\fR the following return values can occur: +.IP "> 0" 4 +.IX Item "> 0" +The read operation was successful. +The return value is the number of bytes actually read from the \s-1TLS/SSL\s0 +connection. +.IP "<= 0" 4 +.IX Item "<= 0" +The read operation was not successful, because either the connection was closed, +an error occurred or action must be taken by the calling process. +Call \fBSSL_get_error\fR\|(3) with the return value \fBret\fR to find out the reason. +.Sp +Old documentation indicated a difference between 0 and \-1, and that \-1 was +retryable. +You should instead call \fBSSL_get_error()\fR to find out if it's retryable. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBSSL_get_error\fR\|(3), \fBSSL_write_ex\fR\|(3), +\&\fBSSL_CTX_set_mode\fR\|(3), \fBSSL_CTX_new\fR\|(3), +\&\fBSSL_connect\fR\|(3), \fBSSL_accept\fR\|(3) +\&\fBSSL_set_connect_state\fR\|(3), +\&\fBSSL_pending\fR\|(3), +\&\fBSSL_shutdown\fR\|(3), \fBSSL_set_shutdown\fR\|(3), +\&\fBssl\fR\|(7), \fBbio\fR\|(7) +.SH "HISTORY" +.IX Header "HISTORY" +The \fBSSL_read_ex()\fR and \fBSSL_peek_ex()\fR functions were added in OpenSSL 1.1.1. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_read_early_data.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_read_early_data.3 new file mode 100644 index 00000000..9dd64a0e --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_read_early_data.3 @@ -0,0 +1,480 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_READ_EARLY_DATA 3" +.TH SSL_READ_EARLY_DATA 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_set_max_early_data, SSL_CTX_set_max_early_data, SSL_get_max_early_data, SSL_CTX_get_max_early_data, SSL_set_recv_max_early_data, SSL_CTX_set_recv_max_early_data, SSL_get_recv_max_early_data, SSL_CTX_get_recv_max_early_data, SSL_SESSION_get_max_early_data, SSL_SESSION_set_max_early_data, SSL_write_early_data, SSL_read_early_data, SSL_get_early_data_status, SSL_allow_early_data_cb_fn, SSL_CTX_set_allow_early_data_cb, SSL_set_allow_early_data_cb \&\- functions for sending and receiving early data +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int SSL_CTX_set_max_early_data(SSL_CTX *ctx, uint32_t max_early_data); +\& uint32_t SSL_CTX_get_max_early_data(const SSL_CTX *ctx); +\& int SSL_set_max_early_data(SSL *s, uint32_t max_early_data); +\& uint32_t SSL_get_max_early_data(const SSL *s); +\& +\& int SSL_CTX_set_recv_max_early_data(SSL_CTX *ctx, uint32_t recv_max_early_data); +\& uint32_t SSL_CTX_get_recv_max_early_data(const SSL_CTX *ctx); +\& int SSL_set_recv_max_early_data(SSL *s, uint32_t recv_max_early_data); +\& uint32_t SSL_get_recv_max_early_data(const SSL *s); +\& +\& uint32_t SSL_SESSION_get_max_early_data(const SSL_SESSION *s); +\& int SSL_SESSION_set_max_early_data(SSL_SESSION *s, uint32_t max_early_data); +\& +\& int SSL_write_early_data(SSL *s, const void *buf, size_t num, size_t *written); +\& +\& int SSL_read_early_data(SSL *s, void *buf, size_t num, size_t *readbytes); +\& +\& int SSL_get_early_data_status(const SSL *s); +\& +\& +\& typedef int (*SSL_allow_early_data_cb_fn)(SSL *s, void *arg); +\& +\& void SSL_CTX_set_allow_early_data_cb(SSL_CTX *ctx, +\& SSL_allow_early_data_cb_fn cb, +\& void *arg); +\& void SSL_set_allow_early_data_cb(SSL *s, +\& SSL_allow_early_data_cb_fn cb, +\& void *arg); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +These functions are used to send and receive early data where TLSv1.3 has been +negotiated. Early data can be sent by the client immediately after its initial +ClientHello without having to wait for the server to complete the handshake. +Early data can only be sent if a session has previously been established with +the server, and the server is known to support it. Additionally these functions +can be used to send data from the server to the client when the client has not +yet completed the authentication stage of the handshake. +.PP +Early data has weaker security properties than other data sent over an \s-1SSL/TLS\s0 +connection. In particular the data does not have forward secrecy. There are also +additional considerations around replay attacks (see \*(L"\s-1REPLAY PROTECTION\*(R"\s0 +below). For these reasons extreme care should be exercised when using early +data. For specific details, consult the \s-1TLS 1.3\s0 specification. +.PP +When a server receives early data it may opt to immediately respond by sending +application data back to the client. Data sent by the server at this stage is +done before the full handshake has been completed. Specifically the client's +authentication messages have not yet been received, i.e. the client is +unauthenticated at this point and care should be taken when using this +capability. +.PP +A server or client can determine whether the full handshake has been completed +or not by calling \fBSSL_is_init_finished\fR\|(3). +.PP +On the client side, the function \fBSSL_SESSION_get_max_early_data()\fR can be used to +determine if a session established with a server can be used to send early data. +If the session cannot be used then this function will return 0. Otherwise it +will return the maximum number of early data bytes that can be sent. +.PP +The function \fBSSL_SESSION_set_max_early_data()\fR sets the maximum number of early +data bytes that can be sent for a session. This would typically be used when +creating a \s-1PSK\s0 session file (see \fBSSL_CTX_set_psk_use_session_callback\fR\|(3)). If +using a ticket based \s-1PSK\s0 then this is set automatically to the value provided by +the server. +.PP +A client uses the function \fBSSL_write_early_data()\fR to send early data. This +function is similar to the \fBSSL_write_ex\fR\|(3) function, but with the following +differences. See \fBSSL_write_ex\fR\|(3) for information on how to write bytes to +the underlying connection, and how to handle any errors that may arise. This +page describes the differences between \fBSSL_write_early_data()\fR and +\&\fBSSL_write_ex\fR\|(3). +.PP +When called by a client, \fBSSL_write_early_data()\fR must be the first \s-1IO\s0 function +called on a new connection, i.e. it must occur before any calls to +\&\fBSSL_write_ex\fR\|(3), \fBSSL_read_ex\fR\|(3), \fBSSL_connect\fR\|(3), \fBSSL_do_handshake\fR\|(3) +or other similar functions. It may be called multiple times to stream data to +the server, but the total number of bytes written must not exceed the value +returned from \fBSSL_SESSION_get_max_early_data()\fR. Once the initial +\&\fBSSL_write_early_data()\fR call has completed successfully the client may interleave +calls to \fBSSL_read_ex\fR\|(3) and \fBSSL_read\fR\|(3) with calls to +\&\fBSSL_write_early_data()\fR as required. +.PP +If \fBSSL_write_early_data()\fR fails you should call \fBSSL_get_error\fR\|(3) to determine +the correct course of action, as for \fBSSL_write_ex\fR\|(3). +.PP +When the client no longer wishes to send any more early data then it should +complete the handshake by calling a function such as \fBSSL_connect\fR\|(3) or +\&\fBSSL_do_handshake\fR\|(3). Alternatively you can call a standard write function +such as \fBSSL_write_ex\fR\|(3), which will transparently complete the connection and +write the requested data. +.PP +A server may choose to ignore early data that has been sent to it. Once the +connection has been completed you can determine whether the server accepted or +rejected the early data by calling \fBSSL_get_early_data_status()\fR. This will return +\&\s-1SSL_EARLY_DATA_ACCEPTED\s0 if the data was accepted, \s-1SSL_EARLY_DATA_REJECTED\s0 if it +was rejected or \s-1SSL_EARLY_DATA_NOT_SENT\s0 if no early data was sent. This function +may be called by either the client or the server. +.PP +A server uses the \fBSSL_read_early_data()\fR function to receive early data on a +connection for which early data has been enabled using +\&\fBSSL_CTX_set_max_early_data()\fR or \fBSSL_set_max_early_data()\fR. As for +\&\fBSSL_write_early_data()\fR, this must be the first \s-1IO\s0 function +called on a connection, i.e. it must occur before any calls to +\&\fBSSL_write_ex\fR\|(3), \fBSSL_read_ex\fR\|(3), \fBSSL_accept\fR\|(3), \fBSSL_do_handshake\fR\|(3), +or other similar functions. +.PP +\&\fBSSL_read_early_data()\fR is similar to \fBSSL_read_ex\fR\|(3) with the following +differences. Refer to \fBSSL_read_ex\fR\|(3) for full details. +.PP +\&\fBSSL_read_early_data()\fR may return 3 possible values: +.IP "\s-1SSL_READ_EARLY_DATA_ERROR\s0" 4 +.IX Item "SSL_READ_EARLY_DATA_ERROR" +This indicates an \s-1IO\s0 or some other error occurred. This should be treated in the +same way as a 0 return value from \fBSSL_read_ex\fR\|(3). +.IP "\s-1SSL_READ_EARLY_DATA_SUCCESS\s0" 4 +.IX Item "SSL_READ_EARLY_DATA_SUCCESS" +This indicates that early data was successfully read. This should be treated in +the same way as a 1 return value from \fBSSL_read_ex\fR\|(3). You should continue to +call \fBSSL_read_early_data()\fR to read more data. +.IP "\s-1SSL_READ_EARLY_DATA_FINISH\s0" 4 +.IX Item "SSL_READ_EARLY_DATA_FINISH" +This indicates that no more early data can be read. It may be returned on the +first call to \fBSSL_read_early_data()\fR if the client has not sent any early data, +or if the early data was rejected. +.PP +Once the initial \fBSSL_read_early_data()\fR call has completed successfully (i.e. it +has returned \s-1SSL_READ_EARLY_DATA_SUCCESS\s0 or \s-1SSL_READ_EARLY_DATA_FINISH\s0) then the +server may choose to write data immediately to the unauthenticated client using +\&\fBSSL_write_early_data()\fR. If \fBSSL_read_early_data()\fR returned +\&\s-1SSL_READ_EARLY_DATA_FINISH\s0 then in some situations (e.g. if the client only +supports TLSv1.2) the handshake may have already been completed and calls +to \fBSSL_write_early_data()\fR are not allowed. Call \fBSSL_is_init_finished\fR\|(3) to +determine whether the handshake has completed or not. If the handshake is still +in progress then the server may interleave calls to \fBSSL_write_early_data()\fR with +calls to \fBSSL_read_early_data()\fR as required. +.PP +Servers must not call \fBSSL_read_ex\fR\|(3), \fBSSL_read\fR\|(3), \fBSSL_write_ex\fR\|(3) or +\&\fBSSL_write\fR\|(3) until \fBSSL_read_early_data()\fR has returned with +\&\s-1SSL_READ_EARLY_DATA_FINISH.\s0 Once it has done so the connection to the client +still needs to be completed. Complete the connection by calling a function such +as \fBSSL_accept\fR\|(3) or \fBSSL_do_handshake\fR\|(3). Alternatively you can call a +standard read function such as \fBSSL_read_ex\fR\|(3), which will transparently +complete the connection and read the requested data. Note that it is an error to +attempt to complete the connection before \fBSSL_read_early_data()\fR has returned +\&\s-1SSL_READ_EARLY_DATA_FINISH.\s0 +.PP +Only servers may call \fBSSL_read_early_data()\fR. +.PP +Calls to \fBSSL_read_early_data()\fR may, in certain circumstances, complete the +connection immediately without further need to call a function such as +\&\fBSSL_accept\fR\|(3). This can happen if the client is using a protocol version less +than TLSv1.3. Applications can test for this by calling +\&\fBSSL_is_init_finished\fR\|(3). Alternatively, applications may choose to call +\&\fBSSL_accept\fR\|(3) anyway. Such a call will successfully return immediately with no +further action taken. +.PP +When a session is created between a server and a client the server will specify +the maximum amount of any early data that it will accept on any future +connection attempt. By default the server does not accept early data; a +server may indicate support for early data by calling +\&\fBSSL_CTX_set_max_early_data()\fR or +\&\fBSSL_set_max_early_data()\fR to set it for the whole \s-1SSL_CTX\s0 or an individual \s-1SSL\s0 +object respectively. The \fBmax_early_data\fR parameter specifies the maximum +amount of early data in bytes that is permitted to be sent on a single +connection. Similarly the \fBSSL_CTX_get_max_early_data()\fR and +\&\fBSSL_get_max_early_data()\fR functions can be used to obtain the current maximum +early data settings for the \s-1SSL_CTX\s0 and \s-1SSL\s0 objects respectively. Generally a +server application will either use both of \fBSSL_read_early_data()\fR and +\&\fBSSL_CTX_set_max_early_data()\fR (or \fBSSL_set_max_early_data()\fR), or neither of them, +since there is no practical benefit from using only one of them. If the maximum +early data setting for a server is non-zero then replay protection is +automatically enabled (see \*(L"\s-1REPLAY PROTECTION\*(R"\s0 below). +.PP +If the server rejects the early data sent by a client then it will skip over +the data that is sent. The maximum amount of received early data that is skipped +is controlled by the recv_max_early_data setting. If a client sends more than +this then the connection will abort. This value can be set by calling +\&\fBSSL_CTX_set_recv_max_early_data()\fR or \fBSSL_set_recv_max_early_data()\fR. The current +value for this setting can be obtained by calling +\&\fBSSL_CTX_get_recv_max_early_data()\fR or \fBSSL_get_recv_max_early_data()\fR. The default +value for this setting is 16,384 bytes. +.PP +The recv_max_early_data value also has an impact on early data that is accepted. +The amount of data that is accepted will always be the lower of the +max_early_data for the session and the recv_max_early_data setting for the +server. If a client sends more data than this then the connection will abort. +.PP +The configured value for max_early_data on a server may change over time as +required. However clients may have tickets containing the previously configured +max_early_data value. The recv_max_early_data should always be equal to or +higher than any recently configured max_early_data value in order to avoid +aborted connections. The recv_max_early_data should never be set to less than +the current configured max_early_data value. +.PP +Some server applications may wish to have more control over whether early data +is accepted or not, for example to mitigate replay risks (see \*(L"\s-1REPLAY PROTECTION\*(R"\s0 +below) or to decline early_data when the server is heavily loaded. The functions +\&\fBSSL_CTX_set_allow_early_data_cb()\fR and \fBSSL_set_allow_early_data_cb()\fR set a +callback which is called at a point in the handshake immediately before a +decision is made to accept or reject early data. The callback is provided with a +pointer to the user data argument that was provided when the callback was first +set. Returning 1 from the callback will allow early data and returning 0 will +reject it. Note that the OpenSSL library may reject early data for other reasons +in which case this callback will not get called. Notably, the built-in replay +protection feature will still be used even if a callback is present unless it +has been explicitly disabled using the \s-1SSL_OP_NO_ANTI_REPLAY\s0 option. See +\&\*(L"\s-1REPLAY PROTECTION\*(R"\s0 below. +.SH "NOTES" +.IX Header "NOTES" +The whole purpose of early data is to enable a client to start sending data to +the server before a full round trip of network traffic has occurred. Application +developers should ensure they consider optimisation of the underlying \s-1TCP\s0 socket +to obtain a performant solution. For example Nagle's algorithm is commonly used +by operating systems in an attempt to avoid lots of small \s-1TCP\s0 packets. In many +scenarios this is beneficial for performance, but it does not work well with the +early data solution as implemented in OpenSSL. In Nagle's algorithm the \s-1OS\s0 will +buffer outgoing \s-1TCP\s0 data if a \s-1TCP\s0 packet has already been sent which we have not +yet received an \s-1ACK\s0 for from the peer. The buffered data will only be +transmitted if enough data to fill an entire \s-1TCP\s0 packet is accumulated, or if +the \s-1ACK\s0 is received from the peer. The initial ClientHello will be sent in the +first \s-1TCP\s0 packet along with any data from the first call to +\&\fBSSL_write_early_data()\fR. If the amount of data written will exceed the size of a +single \s-1TCP\s0 packet, or if there are more calls to \fBSSL_write_early_data()\fR then +that additional data will be sent in subsequent \s-1TCP\s0 packets which will be +buffered by the \s-1OS\s0 and not sent until an \s-1ACK\s0 is received for the first packet +containing the ClientHello. This means the early data is not actually +sent until a complete round trip with the server has occurred which defeats the +objective of early data. +.PP +In many operating systems the \s-1TCP_NODELAY\s0 socket option is available to disable +Nagle's algorithm. If an application opts to disable Nagle's algorithm +consideration should be given to turning it back on again after the handshake is +complete if appropriate. +.PP +In rare circumstances, it may be possible for a client to have a session that +reports a max early data value greater than 0, but where the server does not +support this. For example, this can occur if a server has had its configuration +changed to accept a lower max early data value such as by calling +\&\fBSSL_CTX_set_recv_max_early_data()\fR. Another example is if a server used to +support TLSv1.3 but was later downgraded to TLSv1.2. Sending early data to such +a server will cause the connection to abort. Clients that encounter an aborted +connection while sending early data may want to retry the connection without +sending early data as this does not happen automatically. A client will have to +establish a new transport layer connection to the server and attempt the \s-1SSL/TLS\s0 +connection again but without sending early data. Note that it is inadvisable to +retry with a lower maximum protocol version. +.SH "REPLAY PROTECTION" +.IX Header "REPLAY PROTECTION" +When early data is in use the \s-1TLS\s0 protocol provides no security guarantees that +the same early data was not replayed across multiple connections. As a +mitigation for this issue OpenSSL automatically enables replay protection if the +server is configured with a non-zero max early data value. With replay +protection enabled sessions are forced to be single use only. If a client +attempts to reuse a session ticket more than once, then the second and +subsequent attempts will fall back to a full handshake (and any early data that +was submitted will be ignored). Note that single use tickets are enforced even +if a client does not send any early data. +.PP +The replay protection mechanism relies on the internal OpenSSL server session +cache (see \fBSSL_CTX_set_session_cache_mode\fR\|(3)). When replay protection is +being used the server will operate as if the \s-1SSL_OP_NO_TICKET\s0 option had been +selected (see \fBSSL_CTX_set_options\fR\|(3)). Sessions will be added to the cache +whenever a session ticket is issued. When a client attempts to resume the +session, OpenSSL will check for its presence in the internal cache. If it exists +then the resumption is allowed and the session is removed from the cache. If it +does not exist then the resumption is not allowed and a full handshake will +occur. +.PP +Note that some applications may maintain an external cache of sessions (see +\&\fBSSL_CTX_sess_set_new_cb\fR\|(3) and similar functions). It is the application's +responsibility to ensure that any sessions in the external cache are also +populated in the internal cache and that once removed from the internal cache +they are similarly removed from the external cache. Failing to do this could +result in an application becoming vulnerable to replay attacks. Note that +OpenSSL will lock the internal cache while a session is removed but that lock is +not held when the remove session callback (see \fBSSL_CTX_sess_set_remove_cb\fR\|(3)) +is called. This could result in a small amount of time where the session has +been removed from the internal cache but is still available in the external +cache. Applications should be designed with this in mind in order to minimise +the possibility of replay attacks. +.PP +The OpenSSL replay protection does not apply to external Pre Shared Keys (PSKs) +(e.g. see \fBSSL_CTX_set_psk_find_session_callback\fR\|(3)). Therefore extreme caution +should be applied when combining external PSKs with early data. +.PP +Some applications may mitigate the replay risks in other ways. For those +applications it is possible to turn off the built-in replay protection feature +using the \fB\s-1SSL_OP_NO_ANTI_REPLAY\s0\fR option. See \fBSSL_CTX_set_options\fR\|(3) for +details. Applications can also set a callback to make decisions about accepting +early data or not. See \fBSSL_CTX_set_allow_early_data_cb()\fR above for details. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_write_early_data()\fR returns 1 for success or 0 for failure. In the event of a +failure call \fBSSL_get_error\fR\|(3) to determine the correct course of action. +.PP +\&\fBSSL_read_early_data()\fR returns \s-1SSL_READ_EARLY_DATA_ERROR\s0 for failure, +\&\s-1SSL_READ_EARLY_DATA_SUCCESS\s0 for success with more data to read and +\&\s-1SSL_READ_EARLY_DATA_FINISH\s0 for success with no more to data be read. In the +event of a failure call \fBSSL_get_error\fR\|(3) to determine the correct course of +action. +.PP +\&\fBSSL_get_max_early_data()\fR, \fBSSL_CTX_get_max_early_data()\fR and +\&\fBSSL_SESSION_get_max_early_data()\fR return the maximum number of early data bytes +that may be sent. +.PP +\&\fBSSL_set_max_early_data()\fR, \fBSSL_CTX_set_max_early_data()\fR and +\&\fBSSL_SESSION_set_max_early_data()\fR return 1 for success or 0 for failure. +.PP +\&\fBSSL_get_early_data_status()\fR returns \s-1SSL_EARLY_DATA_ACCEPTED\s0 if early data was +accepted by the server, \s-1SSL_EARLY_DATA_REJECTED\s0 if early data was rejected by +the server, or \s-1SSL_EARLY_DATA_NOT_SENT\s0 if no early data was sent. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBSSL_get_error\fR\|(3), +\&\fBSSL_write_ex\fR\|(3), +\&\fBSSL_read_ex\fR\|(3), +\&\fBSSL_connect\fR\|(3), +\&\fBSSL_accept\fR\|(3), +\&\fBSSL_do_handshake\fR\|(3), +\&\fBSSL_CTX_set_psk_use_session_callback\fR\|(3), +\&\fBssl\fR\|(7) +.SH "HISTORY" +.IX Header "HISTORY" +All of the functions described above were added in OpenSSL 1.1.1. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_rstate_string.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_rstate_string.3 new file mode 100644 index 00000000..52aeafca --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_rstate_string.3 @@ -0,0 +1,195 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_RSTATE_STRING 3" +.TH SSL_RSTATE_STRING 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_rstate_string, SSL_rstate_string_long \- get textual description of state of an SSL object during read operation +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& const char *SSL_rstate_string(SSL *ssl); +\& const char *SSL_rstate_string_long(SSL *ssl); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_rstate_string()\fR returns a 2 letter string indicating the current read state +of the \s-1SSL\s0 object \fBssl\fR. +.PP +\&\fBSSL_rstate_string_long()\fR returns a string indicating the current read state of +the \s-1SSL\s0 object \fBssl\fR. +.SH "NOTES" +.IX Header "NOTES" +When performing a read operation, the \s-1SSL/TLS\s0 engine must parse the record, +consisting of header and body. When working in a blocking environment, +SSL_rstate_string[_long]() should always return \*(L"\s-1RD\*(R"/\s0\*(L"read done\*(R". +.PP +This function should only seldom be needed in applications. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_rstate_string()\fR and \fBSSL_rstate_string_long()\fR can return the following +values: +.ie n .IP """\s-1RH""/\s0""read header""" 4 +.el .IP "``\s-1RH''/\s0``read header''" 4 +.IX Item "RH/read header" +The header of the record is being evaluated. +.ie n .IP """\s-1RB""/\s0""read body""" 4 +.el .IP "``\s-1RB''/\s0``read body''" 4 +.IX Item "RB/read body" +The body of the record is being evaluated. +.ie n .IP """\s-1RD""/\s0""read done""" 4 +.el .IP "``\s-1RD''/\s0``read done''" 4 +.IX Item "RD/read done" +The record has been completely processed. +.ie n .IP """unknown""/""unknown""" 4 +.el .IP "``unknown''/``unknown''" 4 +.IX Item "unknown/unknown" +The read state is unknown. This should never happen. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2001\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_session_reused.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_session_reused.3 new file mode 100644 index 00000000..1a97bac0 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_session_reused.3 @@ -0,0 +1,178 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_SESSION_REUSED 3" +.TH SSL_SESSION_REUSED 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_session_reused \- query whether a reused session was negotiated during handshake +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int SSL_session_reused(const SSL *ssl); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +Query, whether a reused session was negotiated during the handshake. +.SH "NOTES" +.IX Header "NOTES" +During the negotiation, a client can propose to reuse a session. The server +then looks up the session in its cache. If both client and server agree +on the session, it will be reused and a flag is being set that can be +queried by the application. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +The following return values can occur: +.IP "0" 4 +A new session was negotiated. +.IP "1" 4 +.IX Item "1" +A session was reused. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), \fBSSL_set_session\fR\|(3), +\&\fBSSL_CTX_set_session_cache_mode\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2001\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_set1_host.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_set1_host.3 new file mode 100644 index 00000000..8363fcce --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_set1_host.3 @@ -0,0 +1,249 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_SET1_HOST 3" +.TH SSL_SET1_HOST 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_set1_host, SSL_add1_host, SSL_set_hostflags, SSL_get0_peername \- SSL server verification parameters +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int SSL_set1_host(SSL *s, const char *hostname); +\& int SSL_add1_host(SSL *s, const char *hostname); +\& void SSL_set_hostflags(SSL *s, unsigned int flags); +\& const char *SSL_get0_peername(SSL *s); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +These functions configure server hostname checks in the \s-1SSL\s0 client. +.PP +\&\fBSSL_set1_host()\fR sets the expected \s-1DNS\s0 hostname to \fBname\fR clearing +any previously specified host name or names. If \fBname\fR is \s-1NULL,\s0 +or the empty string the list of hostnames is cleared, and name +checks are not performed on the peer certificate. When a non-empty +\&\fBname\fR is specified, certificate verification automatically checks +the peer hostname via \fBX509_check_host\fR\|(3) with \fBflags\fR as specified +via \fBSSL_set_hostflags()\fR. Clients that enable \s-1DANE TLSA\s0 authentication +via \fBSSL_dane_enable\fR\|(3) should leave it to that function to set +the primary reference identifier of the peer, and should not call +\&\fBSSL_set1_host()\fR. +.PP +\&\fBSSL_add1_host()\fR adds \fBname\fR as an additional reference identifier +that can match the peer's certificate. Any previous names set via +\&\fBSSL_set1_host()\fR or \fBSSL_add1_host()\fR are retained, no change is made +if \fBname\fR is \s-1NULL\s0 or empty. When multiple names are configured, +the peer is considered verified when any name matches. This function +is required for \s-1DANE TLSA\s0 in the presence of service name indirection +via \s-1CNAME, MX\s0 or \s-1SRV\s0 records as specified in \s-1RFC7671, RFC7672\s0 or +\&\s-1RFC7673.\s0 +.PP +\&\fBSSL_set_hostflags()\fR sets the \fBflags\fR that will be passed to +\&\fBX509_check_host\fR\|(3) when name checks are applicable, by default +the \fBflags\fR value is 0. See \fBX509_check_host\fR\|(3) for the list +of available flags and their meaning. +.PP +\&\fBSSL_get0_peername()\fR returns the \s-1DNS\s0 hostname or subject CommonName +from the peer certificate that matched one of the reference +identifiers. When wildcard matching is not disabled, the name +matched in the peer certificate may be a wildcard name. When one +of the reference identifiers configured via \fBSSL_set1_host()\fR or +\&\fBSSL_add1_host()\fR starts with \*(L".\*(R", which indicates a parent domain prefix +rather than a fixed name, the matched peer name may be a sub-domain +of the reference identifier. The returned string is allocated by +the library and is no longer valid once the associated \fBssl\fR handle +is cleared or freed, or a renegotiation takes place. Applications +must not free the return value. +.PP +\&\s-1SSL\s0 clients are advised to use these functions in preference to +explicitly calling \fBX509_check_host\fR\|(3). Hostname checks may be out +of scope with the \s-1RFC7671 \fBDANE\-EE\s0\fR\|(3) certificate usage, and the +internal check will be suppressed as appropriate when \s-1DANE\s0 is +enabled. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_set1_host()\fR and \fBSSL_add1_host()\fR return 1 for success and 0 for +failure. +.PP +\&\fBSSL_get0_peername()\fR returns \s-1NULL\s0 if peername verification is not +applicable (as with \s-1RFC7671 \fBDANE\-EE\s0\fR\|(3)), or no trusted peername was +matched. Otherwise, it returns the matched peername. To determine +whether verification succeeded call \fBSSL_get_verify_result\fR\|(3). +.SH "EXAMPLES" +.IX Header "EXAMPLES" +Suppose \*(L"smtp.example.com\*(R" is the \s-1MX\s0 host of the domain \*(L"example.com\*(R". +The calls below will arrange to match either the \s-1MX\s0 hostname or the +destination domain name in the \s-1SMTP\s0 server certificate. Wildcards +are supported, but must match the entire label. The actual name +matched in the certificate (which might be a wildcard) is retrieved, +and must be copied by the application if it is to be retained beyond +the lifetime of the \s-1SSL\s0 connection. +.PP +.Vb 5 +\& SSL_set_hostflags(ssl, X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS); +\& if (!SSL_set1_host(ssl, "smtp.example.com")) +\& /* error */ +\& if (!SSL_add1_host(ssl, "example.com")) +\& /* error */ +\& +\& /* XXX: Perform SSL_connect() handshake and handle errors here */ +\& +\& if (SSL_get_verify_result(ssl) == X509_V_OK) { +\& const char *peername = SSL_get0_peername(ssl); +\& +\& if (peername != NULL) +\& /* Name checks were in scope and matched the peername */ +\& } +.Ve +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBX509_check_host\fR\|(3), +\&\fBSSL_get_verify_result\fR\|(3). +\&\fBSSL_dane_enable\fR\|(3). +.SH "HISTORY" +.IX Header "HISTORY" +These functions were added in OpenSSL 1.1.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2016\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_set_bio.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_set_bio.3 new file mode 100644 index 00000000..427ccdbd --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_set_bio.3 @@ -0,0 +1,227 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_SET_BIO 3" +.TH SSL_SET_BIO 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_set_bio, SSL_set0_rbio, SSL_set0_wbio \- connect the SSL object with a BIO +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& void SSL_set_bio(SSL *ssl, BIO *rbio, BIO *wbio); +\& void SSL_set0_rbio(SSL *s, BIO *rbio); +\& void SSL_set0_wbio(SSL *s, BIO *wbio); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_set0_rbio()\fR connects the \s-1BIO\s0 \fBrbio\fR for the read operations of the \fBssl\fR +object. The \s-1SSL\s0 engine inherits the behaviour of \fBrbio\fR. If the \s-1BIO\s0 is +non-blocking then the \fBssl\fR object will also have non-blocking behaviour. This +function transfers ownership of \fBrbio\fR to \fBssl\fR. It will be automatically +freed using \fBBIO_free_all\fR\|(3) when the \fBssl\fR is freed. On calling this +function, any existing \fBrbio\fR that was previously set will also be freed via a +call to \fBBIO_free_all\fR\|(3) (this includes the case where the \fBrbio\fR is set to +the same value as previously). +.PP +\&\fBSSL_set0_wbio()\fR works in the same as \fBSSL_set0_rbio()\fR except that it connects +the \s-1BIO\s0 \fBwbio\fR for the write operations of the \fBssl\fR object. Note that if the +rbio and wbio are the same then \fBSSL_set0_rbio()\fR and \fBSSL_set0_wbio()\fR each take +ownership of one reference. Therefore it may be necessary to increment the +number of references available using \fBBIO_up_ref\fR\|(3) before calling the set0 +functions. +.PP +\&\fBSSL_set_bio()\fR is similar to \fBSSL_set0_rbio()\fR and \fBSSL_set0_wbio()\fR except +that it connects both the \fBrbio\fR and the \fBwbio\fR at the same time, and +transfers the ownership of \fBrbio\fR and \fBwbio\fR to \fBssl\fR according to +the following set of rules: +.IP "\(bu" 2 +If neither the \fBrbio\fR or \fBwbio\fR have changed from their previous values +then nothing is done. +.IP "\(bu" 2 +If the \fBrbio\fR and \fBwbio\fR parameters are different and both are different +to their +previously set values then one reference is consumed for the rbio and one +reference is consumed for the wbio. +.IP "\(bu" 2 +If the \fBrbio\fR and \fBwbio\fR parameters are the same and the \fBrbio\fR is not +the same as the previously set value then one reference is consumed. +.IP "\(bu" 2 +If the \fBrbio\fR and \fBwbio\fR parameters are the same and the \fBrbio\fR is the +same as the previously set value, then no additional references are consumed. +.IP "\(bu" 2 +If the \fBrbio\fR and \fBwbio\fR parameters are different and the \fBrbio\fR is the +same as the +previously set value then one reference is consumed for the \fBwbio\fR and no +references are consumed for the \fBrbio\fR. +.IP "\(bu" 2 +If the \fBrbio\fR and \fBwbio\fR parameters are different and the \fBwbio\fR is the +same as the previously set value and the old \fBrbio\fR and \fBwbio\fR values +were the same as each other then one reference is consumed for the \fBrbio\fR +and no references are consumed for the \fBwbio\fR. +.IP "\(bu" 2 +If the \fBrbio\fR and \fBwbio\fR parameters are different and the \fBwbio\fR +is the same as the +previously set value and the old \fBrbio\fR and \fBwbio\fR values were different +to each +other then one reference is consumed for the \fBrbio\fR and one reference +is consumed +for the \fBwbio\fR. +.PP +Because of this complexity, this function should be avoided; +use \fBSSL_set0_rbio()\fR and \fBSSL_set0_wbio()\fR instead. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_set_bio()\fR, \fBSSL_set0_rbio()\fR and \fBSSL_set0_wbio()\fR cannot fail. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBSSL_get_rbio\fR\|(3), +\&\fBSSL_connect\fR\|(3), \fBSSL_accept\fR\|(3), +\&\fBSSL_shutdown\fR\|(3), \fBssl\fR\|(7), \fBbio\fR\|(7) +.SH "HISTORY" +.IX Header "HISTORY" +\&\fBSSL_set0_rbio()\fR and \fBSSL_set0_wbio()\fR were added in OpenSSL 1.1.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_set_connect_state.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_set_connect_state.3 new file mode 100644 index 00000000..66a93a83 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_set_connect_state.3 @@ -0,0 +1,207 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_SET_CONNECT_STATE 3" +.TH SSL_SET_CONNECT_STATE 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_set_connect_state, SSL_set_accept_state, SSL_is_server \&\- functions for manipulating and examining the client or server mode of an SSL object +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& void SSL_set_connect_state(SSL *ssl); +\& +\& void SSL_set_accept_state(SSL *ssl); +\& +\& int SSL_is_server(const SSL *ssl); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_set_connect_state()\fR sets \fBssl\fR to work in client mode. +.PP +\&\fBSSL_set_accept_state()\fR sets \fBssl\fR to work in server mode. +.PP +\&\fBSSL_is_server()\fR checks if \fBssl\fR is working in server mode. +.SH "NOTES" +.IX Header "NOTES" +When the \s-1SSL_CTX\s0 object was created with \fBSSL_CTX_new\fR\|(3), +it was either assigned a dedicated client method, a dedicated server +method, or a generic method, that can be used for both client and +server connections. (The method might have been changed with +\&\fBSSL_CTX_set_ssl_version\fR\|(3) or +\&\fBSSL_set_ssl_method\fR\|(3).) +.PP +When beginning a new handshake, the \s-1SSL\s0 engine must know whether it must +call the connect (client) or accept (server) routines. Even though it may +be clear from the method chosen, whether client or server mode was +requested, the handshake routines must be explicitly set. +.PP +When using the \fBSSL_connect\fR\|(3) or +\&\fBSSL_accept\fR\|(3) routines, the correct handshake +routines are automatically set. When performing a transparent negotiation +using \fBSSL_write_ex\fR\|(3), \fBSSL_write\fR\|(3), \fBSSL_read_ex\fR\|(3), or \fBSSL_read\fR\|(3), +the handshake routines must be explicitly set in advance using either +\&\fBSSL_set_connect_state()\fR or \fBSSL_set_accept_state()\fR. +.PP +If \fBSSL_is_server()\fR is called before \fBSSL_set_connect_state()\fR or +\&\fBSSL_set_accept_state()\fR is called (either automatically or explicitly), +the result depends on what method was used when \s-1SSL_CTX\s0 was created with +\&\fBSSL_CTX_new\fR\|(3). If a generic method or a dedicated server method was +passed to \fBSSL_CTX_new\fR\|(3), \fBSSL_is_server()\fR returns 1; otherwise, it returns 0. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_set_connect_state()\fR and \fBSSL_set_accept_state()\fR do not return diagnostic +information. +.PP +\&\fBSSL_is_server()\fR returns 1 if \fBssl\fR is working in server mode or 0 for client mode. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), \fBSSL_new\fR\|(3), \fBSSL_CTX_new\fR\|(3), +\&\fBSSL_connect\fR\|(3), \fBSSL_accept\fR\|(3), +\&\fBSSL_write_ex\fR\|(3), \fBSSL_write\fR\|(3), \fBSSL_read_ex\fR\|(3), \fBSSL_read\fR\|(3), +\&\fBSSL_do_handshake\fR\|(3), +\&\fBSSL_CTX_set_ssl_version\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2001\-2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_set_fd.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_set_fd.3 new file mode 100644 index 00000000..de7fd78b --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_set_fd.3 @@ -0,0 +1,188 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_SET_FD 3" +.TH SSL_SET_FD 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_set_fd, SSL_set_rfd, SSL_set_wfd \- connect the SSL object with a file descriptor +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int SSL_set_fd(SSL *ssl, int fd); +\& int SSL_set_rfd(SSL *ssl, int fd); +\& int SSL_set_wfd(SSL *ssl, int fd); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_set_fd()\fR sets the file descriptor \fBfd\fR as the input/output facility +for the \s-1TLS/SSL\s0 (encrypted) side of \fBssl\fR. \fBfd\fR will typically be the +socket file descriptor of a network connection. +.PP +When performing the operation, a \fBsocket \s-1BIO\s0\fR is automatically created to +interface between the \fBssl\fR and \fBfd\fR. The \s-1BIO\s0 and hence the \s-1SSL\s0 engine +inherit the behaviour of \fBfd\fR. If \fBfd\fR is non-blocking, the \fBssl\fR will +also have non-blocking behaviour. +.PP +If there was already a \s-1BIO\s0 connected to \fBssl\fR, \fBBIO_free()\fR will be called +(for both the reading and writing side, if different). +.PP +\&\fBSSL_set_rfd()\fR and \fBSSL_set_wfd()\fR perform the respective action, but only +for the read channel or the write channel, which can be set independently. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +The following return values can occur: +.IP "0" 4 +The operation failed. Check the error stack to find out why. +.IP "1" 4 +.IX Item "1" +The operation succeeded. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBSSL_get_fd\fR\|(3), \fBSSL_set_bio\fR\|(3), +\&\fBSSL_connect\fR\|(3), \fBSSL_accept\fR\|(3), +\&\fBSSL_shutdown\fR\|(3), \fBssl\fR\|(7) , \fBbio\fR\|(7) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_set_session.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_set_session.3 new file mode 100644 index 00000000..0eaa2f30 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_set_session.3 @@ -0,0 +1,194 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_SET_SESSION 3" +.TH SSL_SET_SESSION 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_set_session \- set a TLS/SSL session to be used during TLS/SSL connect +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int SSL_set_session(SSL *ssl, SSL_SESSION *session); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_set_session()\fR sets \fBsession\fR to be used when the \s-1TLS/SSL\s0 connection +is to be established. \fBSSL_set_session()\fR is only useful for \s-1TLS/SSL\s0 clients. +When the session is set, the reference count of \fBsession\fR is incremented +by 1. If the session is not reused, the reference count is decremented +again during \fBSSL_connect()\fR. Whether the session was reused can be queried +with the \fBSSL_session_reused\fR\|(3) call. +.PP +If there is already a session set inside \fBssl\fR (because it was set with +\&\fBSSL_set_session()\fR before or because the same \fBssl\fR was already used for +a connection), \fBSSL_SESSION_free()\fR will be called for that session. If that old +session is still \fBopen\fR, it is considered bad and will be removed from the +session cache (if used). A session is considered open, if \fBSSL_shutdown\fR\|(3) was +not called for the connection (or at least \fBSSL_set_shutdown\fR\|(3) was used to +set the \s-1SSL_SENT_SHUTDOWN\s0 state). +.SH "NOTES" +.IX Header "NOTES" +\&\s-1SSL_SESSION\s0 objects keep internal link information about the session cache +list, when being inserted into one \s-1SSL_CTX\s0 object's session cache. +One \s-1SSL_SESSION\s0 object, regardless of its reference count, must therefore +only be used with one \s-1SSL_CTX\s0 object (and the \s-1SSL\s0 objects created +from this \s-1SSL_CTX\s0 object). +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +The following return values can occur: +.IP "0" 4 +The operation failed; check the error stack to find out the reason. +.IP "1" 4 +.IX Item "1" +The operation succeeded. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), \fBSSL_SESSION_free\fR\|(3), +\&\fBSSL_get_session\fR\|(3), +\&\fBSSL_session_reused\fR\|(3), +\&\fBSSL_CTX_set_session_cache_mode\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_set_shutdown.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_set_shutdown.3 new file mode 100644 index 00000000..46ad0f20 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_set_shutdown.3 @@ -0,0 +1,204 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_SET_SHUTDOWN 3" +.TH SSL_SET_SHUTDOWN 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_set_shutdown, SSL_get_shutdown \- manipulate shutdown state of an SSL connection +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& void SSL_set_shutdown(SSL *ssl, int mode); +\& +\& int SSL_get_shutdown(const SSL *ssl); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_set_shutdown()\fR sets the shutdown state of \fBssl\fR to \fBmode\fR. +.PP +\&\fBSSL_get_shutdown()\fR returns the shutdown mode of \fBssl\fR. +.SH "NOTES" +.IX Header "NOTES" +The shutdown state of an ssl connection is a bitmask of: +.IP "0" 4 +No shutdown setting, yet. +.IP "\s-1SSL_SENT_SHUTDOWN\s0" 4 +.IX Item "SSL_SENT_SHUTDOWN" +A close_notify shutdown alert was sent to the peer, the connection is being +considered closed and the session is closed and correct. +.IP "\s-1SSL_RECEIVED_SHUTDOWN\s0" 4 +.IX Item "SSL_RECEIVED_SHUTDOWN" +A shutdown alert was received form the peer, either a normal close_notify +or a fatal error. +.PP +\&\s-1SSL_SENT_SHUTDOWN\s0 and \s-1SSL_RECEIVED_SHUTDOWN\s0 can be set at the same time. +.PP +The shutdown state of the connection is used to determine the state of +the ssl session. If the session is still open, when +\&\fBSSL_clear\fR\|(3) or \fBSSL_free\fR\|(3) is called, +it is considered bad and removed according to \s-1RFC2246.\s0 +The actual condition for a correctly closed session is \s-1SSL_SENT_SHUTDOWN\s0 +(according to the \s-1TLS RFC,\s0 it is acceptable to only send the close_notify +alert but to not wait for the peer's answer, when the underlying connection +is closed). +\&\fBSSL_set_shutdown()\fR can be used to set this state without sending a +close alert to the peer (see \fBSSL_shutdown\fR\|(3)). +.PP +If a close_notify was received, \s-1SSL_RECEIVED_SHUTDOWN\s0 will be set, +for setting \s-1SSL_SENT_SHUTDOWN\s0 the application must however still call +\&\fBSSL_shutdown\fR\|(3) or \fBSSL_set_shutdown()\fR itself. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_set_shutdown()\fR does not return diagnostic information. +.PP +\&\fBSSL_get_shutdown()\fR returns the current setting. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), \fBSSL_shutdown\fR\|(3), +\&\fBSSL_CTX_set_quiet_shutdown\fR\|(3), +\&\fBSSL_clear\fR\|(3), \fBSSL_free\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2001\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_set_verify_result.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_set_verify_result.3 new file mode 100644 index 00000000..516c7df2 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_set_verify_result.3 @@ -0,0 +1,178 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_SET_VERIFY_RESULT 3" +.TH SSL_SET_VERIFY_RESULT 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_set_verify_result \- override result of peer certificate verification +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& void SSL_set_verify_result(SSL *ssl, long verify_result); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_set_verify_result()\fR sets \fBverify_result\fR of the object \fBssl\fR to be the +result of the verification of the X509 certificate presented by the peer, +if any. +.SH "NOTES" +.IX Header "NOTES" +\&\fBSSL_set_verify_result()\fR overrides the verification result. It only changes +the verification result of the \fBssl\fR object. It does not become part of the +established session, so if the session is to be reused later, the original +value will reappear. +.PP +The valid codes for \fBverify_result\fR are documented in \fBverify\fR\|(1). +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_set_verify_result()\fR does not provide a return value. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), \fBSSL_get_verify_result\fR\|(3), +\&\fBSSL_get_peer_certificate\fR\|(3), +\&\fBverify\fR\|(1) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_shutdown.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_shutdown.3 new file mode 100644 index 00000000..c2f127eb --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_shutdown.3 @@ -0,0 +1,287 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_SHUTDOWN 3" +.TH SSL_SHUTDOWN 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_shutdown \- shut down a TLS/SSL connection +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int SSL_shutdown(SSL *ssl); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_shutdown()\fR shuts down an active \s-1TLS/SSL\s0 connection. It sends the +close_notify shutdown alert to the peer. +.SH "NOTES" +.IX Header "NOTES" +\&\fBSSL_shutdown()\fR tries to send the close_notify shutdown alert to the peer. +Whether the operation succeeds or not, the \s-1SSL_SENT_SHUTDOWN\s0 flag is set and +a currently open session is considered closed and good and will be kept in the +session cache for further reuse. +.PP +Note that \fBSSL_shutdown()\fR must not be called if a previous fatal error has +occurred on a connection i.e. if \fBSSL_get_error()\fR has returned \s-1SSL_ERROR_SYSCALL\s0 +or \s-1SSL_ERROR_SSL.\s0 +.PP +The shutdown procedure consists of two steps: sending of the close_notify +shutdown alert, and reception of the peer's close_notify shutdown alert. +The order of those two steps depends on the application. +.PP +It is acceptable for an application to only send its shutdown alert and +then close the underlying connection without waiting for the peer's response. +This way resources can be saved, as the process can already terminate or +serve another connection. +This should only be done when it is known that the other side will not send more +data, otherwise there is a risk of a truncation attack. +.PP +When a client only writes and never reads from the connection, and the server +has sent a session ticket to establish a session, the client might not be able +to resume the session because it did not received and process the session ticket +from the server. +In case the application wants to be able to resume the session, it is recommended to +do a complete shutdown procedure (bidirectional close_notify alerts). +.PP +When the underlying connection shall be used for more communications, the +complete shutdown procedure must be performed, so that the peers stay +synchronized. +.PP +\&\fBSSL_shutdown()\fR only closes the write direction. +It is not possible to call \fBSSL_write()\fR after calling \fBSSL_shutdown()\fR. +The read direction is closed by the peer. +.SS "First to close the connection" +.IX Subsection "First to close the connection" +When the application is the first party to send the close_notify +alert, \fBSSL_shutdown()\fR will only send the alert and then set the +\&\s-1SSL_SENT_SHUTDOWN\s0 flag (so that the session is considered good and will +be kept in the cache). +If successful, \fBSSL_shutdown()\fR will return 0. +.PP +If a unidirectional shutdown is enough (the underlying connection shall be +closed anyway), this first successful call to \fBSSL_shutdown()\fR is sufficient. +.PP +In order to complete the bidirectional shutdown handshake, the peer needs +to send back a close_notify alert. +The \s-1SSL_RECEIVED_SHUTDOWN\s0 flag will be set after receiving and processing +it. +.PP +The peer is still allowed to send data after receiving the close_notify +event. +When it is done sending data, it will send the close_notify alert. +\&\fBSSL_read()\fR should be called until all data is received. +\&\fBSSL_read()\fR will indicate the end of the peer data by returning <= 0 +and \fBSSL_get_error()\fR returning \s-1SSL_ERROR_ZERO_RETURN.\s0 +.SS "Peer closes the connection" +.IX Subsection "Peer closes the connection" +If the peer already sent the close_notify alert \fBand\fR it was +already processed implicitly inside another function +(\fBSSL_read\fR\|(3)), the \s-1SSL_RECEIVED_SHUTDOWN\s0 flag is set. +\&\fBSSL_read()\fR will return <= 0 in that case, and \fBSSL_get_error()\fR will return +\&\s-1SSL_ERROR_ZERO_RETURN.\s0 +\&\fBSSL_shutdown()\fR will send the close_notify alert, set the \s-1SSL_SENT_SHUTDOWN\s0 +flag. +If successful, \fBSSL_shutdown()\fR will return 1. +.PP +Whether \s-1SSL_RECEIVED_SHUTDOWN\s0 is already set can be checked using the +\&\fBSSL_get_shutdown()\fR (see also \fBSSL_set_shutdown\fR\|(3) call. +.SH "NOTES" +.IX Header "NOTES" +The behaviour of \fBSSL_shutdown()\fR additionally depends on the underlying \s-1BIO.\s0 +If the underlying \s-1BIO\s0 is \fBblocking\fR, \fBSSL_shutdown()\fR will only return once the +handshake step has been finished or an error occurred. +.PP +If the underlying \s-1BIO\s0 is \fBnon-blocking\fR, \fBSSL_shutdown()\fR will also return +when the underlying \s-1BIO\s0 could not satisfy the needs of \fBSSL_shutdown()\fR +to continue the handshake. In this case a call to \fBSSL_get_error()\fR with the +return value of \fBSSL_shutdown()\fR will yield \fB\s-1SSL_ERROR_WANT_READ\s0\fR or +\&\fB\s-1SSL_ERROR_WANT_WRITE\s0\fR. The calling process then must repeat the call after +taking appropriate action to satisfy the needs of \fBSSL_shutdown()\fR. +The action depends on the underlying \s-1BIO.\s0 When using a non-blocking socket, +nothing is to be done, but \fBselect()\fR can be used to check for the required +condition. When using a buffering \s-1BIO,\s0 like a \s-1BIO\s0 pair, data must be written +into or retrieved out of the \s-1BIO\s0 before being able to continue. +.PP +After \fBSSL_shutdown()\fR returned 0, it is possible to call \fBSSL_shutdown()\fR again +to wait for the peer's close_notify alert. +\&\fBSSL_shutdown()\fR will return 1 in that case. +However, it is recommended to wait for it using \fBSSL_read()\fR instead. +.PP +\&\fBSSL_shutdown()\fR can be modified to only set the connection to \*(L"shutdown\*(R" +state but not actually send the close_notify alert messages, +see \fBSSL_CTX_set_quiet_shutdown\fR\|(3). +When \*(L"quiet shutdown\*(R" is enabled, \fBSSL_shutdown()\fR will always succeed +and return 1. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +The following return values can occur: +.IP "0" 4 +The shutdown is not yet finished: the close_notify was sent but the peer +did not send it back yet. +Call \fBSSL_read()\fR to do a bidirectional shutdown. +The output of \fBSSL_get_error\fR\|(3) may be misleading, as an +erroneous \s-1SSL_ERROR_SYSCALL\s0 may be flagged even though no error occurred. +.IP "1" 4 +.IX Item "1" +The shutdown was successfully completed. The close_notify alert was sent +and the peer's close_notify alert was received. +.IP "<0" 4 +.IX Item "<0" +The shutdown was not successful. +Call \fBSSL_get_error\fR\|(3) with the return value \fBret\fR to find out the reason. +It can occur if an action is needed to continue the operation for non-blocking +BIOs. +.Sp +It can also occur when not all data was read using \fBSSL_read()\fR. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBSSL_get_error\fR\|(3), \fBSSL_connect\fR\|(3), +\&\fBSSL_accept\fR\|(3), \fBSSL_set_shutdown\fR\|(3), +\&\fBSSL_CTX_set_quiet_shutdown\fR\|(3), +\&\fBSSL_clear\fR\|(3), \fBSSL_free\fR\|(3), +\&\fBssl\fR\|(7), \fBbio\fR\|(7) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_state_string.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_state_string.3 new file mode 100644 index 00000000..a1e19c1b --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_state_string.3 @@ -0,0 +1,185 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_STATE_STRING 3" +.TH SSL_STATE_STRING 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_state_string, SSL_state_string_long \- get textual description of state of an SSL object +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& const char *SSL_state_string(const SSL *ssl); +\& const char *SSL_state_string_long(const SSL *ssl); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_state_string()\fR returns a 6 letter string indicating the current state +of the \s-1SSL\s0 object \fBssl\fR. +.PP +\&\fBSSL_state_string_long()\fR returns a string indicating the current state of +the \s-1SSL\s0 object \fBssl\fR. +.SH "NOTES" +.IX Header "NOTES" +During its use, an \s-1SSL\s0 objects passes several states. The state is internally +maintained. Querying the state information is not very informative before +or when a connection has been established. It however can be of significant +interest during the handshake. +.PP +When using non-blocking sockets, the function call performing the handshake +may return with \s-1SSL_ERROR_WANT_READ\s0 or \s-1SSL_ERROR_WANT_WRITE\s0 condition, +so that SSL_state_string[_long]() may be called. +.PP +For both blocking or non-blocking sockets, the details state information +can be used within the info_callback function set with the +\&\fBSSL_set_info_callback()\fR call. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +Detailed description of possible states to be included later. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), \fBSSL_CTX_set_info_callback\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2001\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_want.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_want.3 new file mode 100644 index 00000000..5a8d917f --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_want.3 @@ -0,0 +1,233 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_WANT 3" +.TH SSL_WANT 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_want, SSL_want_nothing, SSL_want_read, SSL_want_write, SSL_want_x509_lookup, SSL_want_async, SSL_want_async_job, SSL_want_client_hello_cb \- obtain state information TLS/SSL I/O operation +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int SSL_want(const SSL *ssl); +\& int SSL_want_nothing(const SSL *ssl); +\& int SSL_want_read(const SSL *ssl); +\& int SSL_want_write(const SSL *ssl); +\& int SSL_want_x509_lookup(const SSL *ssl); +\& int SSL_want_async(const SSL *ssl); +\& int SSL_want_async_job(const SSL *ssl); +\& int SSL_want_client_hello_cb(const SSL *ssl); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_want()\fR returns state information for the \s-1SSL\s0 object \fBssl\fR. +.PP +The other SSL_want_*() calls are shortcuts for the possible states returned +by \fBSSL_want()\fR. +.SH "NOTES" +.IX Header "NOTES" +\&\fBSSL_want()\fR examines the internal state information of the \s-1SSL\s0 object. Its +return values are similar to that of \fBSSL_get_error\fR\|(3). +Unlike \fBSSL_get_error\fR\|(3), which also evaluates the +error queue, the results are obtained by examining an internal state flag +only. The information must therefore only be used for normal operation under +non-blocking I/O. Error conditions are not handled and must be treated +using \fBSSL_get_error\fR\|(3). +.PP +The result returned by \fBSSL_want()\fR should always be consistent with +the result of \fBSSL_get_error\fR\|(3). +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +The following return values can currently occur for \fBSSL_want()\fR: +.IP "\s-1SSL_NOTHING\s0" 4 +.IX Item "SSL_NOTHING" +There is no data to be written or to be read. +.IP "\s-1SSL_WRITING\s0" 4 +.IX Item "SSL_WRITING" +There are data in the \s-1SSL\s0 buffer that must be written to the underlying +\&\fB\s-1BIO\s0\fR layer in order to complete the actual SSL_*() operation. +A call to \fBSSL_get_error\fR\|(3) should return +\&\s-1SSL_ERROR_WANT_WRITE.\s0 +.IP "\s-1SSL_READING\s0" 4 +.IX Item "SSL_READING" +More data must be read from the underlying \fB\s-1BIO\s0\fR layer in order to +complete the actual SSL_*() operation. +A call to \fBSSL_get_error\fR\|(3) should return +\&\s-1SSL_ERROR_WANT_READ.\s0 +.IP "\s-1SSL_X509_LOOKUP\s0" 4 +.IX Item "SSL_X509_LOOKUP" +The operation did not complete because an application callback set by +\&\fBSSL_CTX_set_client_cert_cb()\fR has asked to be called again. +A call to \fBSSL_get_error\fR\|(3) should return +\&\s-1SSL_ERROR_WANT_X509_LOOKUP.\s0 +.IP "\s-1SSL_ASYNC_PAUSED\s0" 4 +.IX Item "SSL_ASYNC_PAUSED" +An asynchronous operation partially completed and was then paused. See +\&\fBSSL_get_all_async_fds\fR\|(3). A call to \fBSSL_get_error\fR\|(3) should return +\&\s-1SSL_ERROR_WANT_ASYNC.\s0 +.IP "\s-1SSL_ASYNC_NO_JOBS\s0" 4 +.IX Item "SSL_ASYNC_NO_JOBS" +The asynchronous job could not be started because there were no async jobs +available in the pool (see \fBASYNC_init_thread\fR\|(3)). A call to \fBSSL_get_error\fR\|(3) +should return \s-1SSL_ERROR_WANT_ASYNC_JOB.\s0 +.IP "\s-1SSL_CLIENT_HELLO_CB\s0" 4 +.IX Item "SSL_CLIENT_HELLO_CB" +The operation did not complete because an application callback set by +\&\fBSSL_CTX_set_client_hello_cb()\fR has asked to be called again. +A call to \fBSSL_get_error\fR\|(3) should return +\&\s-1SSL_ERROR_WANT_CLIENT_HELLO_CB.\s0 +.PP +\&\fBSSL_want_nothing()\fR, \fBSSL_want_read()\fR, \fBSSL_want_write()\fR, \fBSSL_want_x509_lookup()\fR, +\&\fBSSL_want_async()\fR, \fBSSL_want_async_job()\fR, and \fBSSL_want_client_hello_cb()\fR return +1, when the corresponding condition is true or 0 otherwise. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), \fBSSL_get_error\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +The \fBSSL_want_client_hello_cb()\fR function and the \s-1SSL_CLIENT_HELLO_CB\s0 return value +were added in OpenSSL 1.1.1. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2001\-2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_write.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_write.3 new file mode 100644 index 00000000..a2b8b73e --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/SSL_write.3 @@ -0,0 +1,251 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL_WRITE 3" +.TH SSL_WRITE 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SSL_write_ex, SSL_write \- write bytes to a TLS/SSL connection +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int SSL_write_ex(SSL *s, const void *buf, size_t num, size_t *written); +\& int SSL_write(SSL *ssl, const void *buf, int num); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBSSL_write_ex()\fR and \fBSSL_write()\fR write \fBnum\fR bytes from the buffer \fBbuf\fR into +the specified \fBssl\fR connection. On success \fBSSL_write_ex()\fR will store the number +of bytes written in \fB*written\fR. +.SH "NOTES" +.IX Header "NOTES" +In the paragraphs below a \*(L"write function\*(R" is defined as one of either +\&\fBSSL_write_ex()\fR, or \fBSSL_write()\fR. +.PP +If necessary, a write function will negotiate a \s-1TLS/SSL\s0 session, if not already +explicitly performed by \fBSSL_connect\fR\|(3) or \fBSSL_accept\fR\|(3). If the peer +requests a re-negotiation, it will be performed transparently during +the write function operation. The behaviour of the write functions depends on the +underlying \s-1BIO.\s0 +.PP +For the transparent negotiation to succeed, the \fBssl\fR must have been +initialized to client or server mode. This is being done by calling +\&\fBSSL_set_connect_state\fR\|(3) or \fBSSL_set_accept_state()\fR +before the first call to a write function. +.PP +If the underlying \s-1BIO\s0 is \fBblocking\fR, the write functions will only return, once +the write operation has been finished or an error occurred. +.PP +If the underlying \s-1BIO\s0 is \fBnon-blocking\fR the write functions will also return +when the underlying \s-1BIO\s0 could not satisfy the needs of the function to continue +the operation. In this case a call to \fBSSL_get_error\fR\|(3) with the +return value of the write function will yield \fB\s-1SSL_ERROR_WANT_READ\s0\fR +or \fB\s-1SSL_ERROR_WANT_WRITE\s0\fR. As at any time a re-negotiation is possible, a +call to a write function can also cause read operations! The calling process +then must repeat the call after taking appropriate action to satisfy the needs +of the write function. The action depends on the underlying \s-1BIO.\s0 When using a +non-blocking socket, nothing is to be done, but \fBselect()\fR can be used to check +for the required condition. When using a buffering \s-1BIO,\s0 like a \s-1BIO\s0 pair, data +must be written into or retrieved out of the \s-1BIO\s0 before being able to continue. +.PP +The write functions will only return with success when the complete contents of +\&\fBbuf\fR of length \fBnum\fR has been written. This default behaviour can be changed +with the \s-1SSL_MODE_ENABLE_PARTIAL_WRITE\s0 option of \fBSSL_CTX_set_mode\fR\|(3). When +this flag is set the write functions will also return with success when a +partial write has been successfully completed. In this case the write function +operation is considered completed. The bytes are sent and a new write call with +a new buffer (with the already sent bytes removed) must be started. A partial +write is performed with the size of a message block, which is 16kB. +.SH "WARNINGS" +.IX Header "WARNINGS" +When a write function call has to be repeated because \fBSSL_get_error\fR\|(3) +returned \fB\s-1SSL_ERROR_WANT_READ\s0\fR or \fB\s-1SSL_ERROR_WANT_WRITE\s0\fR, it must be repeated +with the same arguments. +The data that was passed might have been partially processed. +When \fB\s-1SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER\s0\fR was set using \fBSSL_CTX_set_mode\fR\|(3) +the pointer can be different, but the data and length should still be the same. +.PP +You should not call \fBSSL_write()\fR with num=0, it will return an error. +\&\fBSSL_write_ex()\fR can be called with num=0, but will not send application data to +the peer. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBSSL_write_ex()\fR will return 1 for success or 0 for failure. Success means that +all requested application data bytes have been written to the \s-1SSL\s0 connection or, +if \s-1SSL_MODE_ENABLE_PARTIAL_WRITE\s0 is in use, at least 1 application data byte has +been written to the \s-1SSL\s0 connection. Failure means that not all the requested +bytes have been written yet (if \s-1SSL_MODE_ENABLE_PARTIAL_WRITE\s0 is not in use) or +no bytes could be written to the \s-1SSL\s0 connection (if +\&\s-1SSL_MODE_ENABLE_PARTIAL_WRITE\s0 is in use). Failures can be retryable (e.g. the +network write buffer has temporarily filled up) or non-retryable (e.g. a fatal +network error). In the event of a failure call \fBSSL_get_error\fR\|(3) to find out +the reason which indicates whether the call is retryable or not. +.PP +For \fBSSL_write()\fR the following return values can occur: +.IP "> 0" 4 +.IX Item "> 0" +The write operation was successful, the return value is the number of +bytes actually written to the \s-1TLS/SSL\s0 connection. +.IP "<= 0" 4 +.IX Item "<= 0" +The write operation was not successful, because either the connection was +closed, an error occurred or action must be taken by the calling process. +Call \fBSSL_get_error()\fR with the return value \fBret\fR to find out the reason. +.Sp +Old documentation indicated a difference between 0 and \-1, and that \-1 was +retryable. +You should instead call \fBSSL_get_error()\fR to find out if it's retryable. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBSSL_get_error\fR\|(3), \fBSSL_read_ex\fR\|(3), \fBSSL_read\fR\|(3) +\&\fBSSL_CTX_set_mode\fR\|(3), \fBSSL_CTX_new\fR\|(3), +\&\fBSSL_connect\fR\|(3), \fBSSL_accept\fR\|(3) +\&\fBSSL_set_connect_state\fR\|(3), +\&\fBssl\fR\|(7), \fBbio\fR\|(7) +.SH "HISTORY" +.IX Header "HISTORY" +The \fBSSL_write_ex()\fR function was added in OpenSSL 1.1.1. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/UI_STRING.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/UI_STRING.3 new file mode 100644 index 00000000..e6d0ab48 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/UI_STRING.3 @@ -0,0 +1,274 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "UI_STRING 3" +.TH UI_STRING 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +UI_STRING, UI_string_types, UI_get_string_type, UI_get_input_flags, UI_get0_output_string, UI_get0_action_string, UI_get0_result_string, UI_get_result_string_length, UI_get0_test_string, UI_get_result_minsize, UI_get_result_maxsize, UI_set_result, UI_set_result_ex \&\- User interface string parsing +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& typedef struct ui_string_st UI_STRING; +\& +\& enum UI_string_types { +\& UIT_NONE = 0, +\& UIT_PROMPT, /* Prompt for a string */ +\& UIT_VERIFY, /* Prompt for a string and verify */ +\& UIT_BOOLEAN, /* Prompt for a yes/no response */ +\& UIT_INFO, /* Send info to the user */ +\& UIT_ERROR /* Send an error message to the user */ +\& }; +\& +\& enum UI_string_types UI_get_string_type(UI_STRING *uis); +\& int UI_get_input_flags(UI_STRING *uis); +\& const char *UI_get0_output_string(UI_STRING *uis); +\& const char *UI_get0_action_string(UI_STRING *uis); +\& const char *UI_get0_result_string(UI_STRING *uis); +\& int UI_get_result_string_length(UI_STRING *uis); +\& const char *UI_get0_test_string(UI_STRING *uis); +\& int UI_get_result_minsize(UI_STRING *uis); +\& int UI_get_result_maxsize(UI_STRING *uis); +\& int UI_set_result(UI *ui, UI_STRING *uis, const char *result); +\& int UI_set_result_ex(UI *ui, UI_STRING *uis, const char *result, int len); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fB\s-1UI_STRING\s0\fR gets created internally and added to a \fB\s-1UI\s0\fR whenever +one of the functions \fBUI_add_input_string()\fR, \fBUI_dup_input_string()\fR, +\&\fBUI_add_verify_string()\fR, \fBUI_dup_verify_string()\fR, +\&\fBUI_add_input_boolean()\fR, \fBUI_dup_input_boolean()\fR, \fBUI_add_info_string()\fR, +\&\fBUI_dup_info_string()\fR, \fBUI_add_error_string()\fR or \fBUI_dup_error_string()\fR +is called. +For a \fB\s-1UI_METHOD\s0\fR user, there's no need to know more. +For a \fB\s-1UI_METHOD\s0\fR creator, it is of interest to fetch text from these +\&\fB\s-1UI_STRING\s0\fR objects as well as adding results to some of them. +.PP +\&\fBUI_get_string_type()\fR is used to retrieve the type of the given +\&\fB\s-1UI_STRING\s0\fR. +.PP +\&\fBUI_get_input_flags()\fR is used to retrieve the flags associated with the +given \fB\s-1UI_STRING\s0\fR. +.PP +\&\fBUI_get0_output_string()\fR is used to retrieve the actual string to +output (prompt, info, error, ...). +.PP +\&\fBUI_get0_action_string()\fR is used to retrieve the action description +associated with a \fB\s-1UIT_BOOLEAN\s0\fR type \fB\s-1UI_STRING\s0\fR. +For all other \fB\s-1UI_STRING\s0\fR types, \s-1NULL\s0 is returned. +See \fBUI_add_input_boolean\fR\|(3). +.PP +\&\fBUI_get0_result_string()\fR and \fBUI_get_result_string_length()\fR are used to +retrieve the result of a prompt and its length. +This is only useful for \fB\s-1UIT_PROMPT\s0\fR and \fB\s-1UIT_VERIFY\s0\fR type strings. +For all other \fB\s-1UI_STRING\s0\fR types, \fBUI_get0_result_string()\fR returns \s-1NULL\s0 +and \fBUI_get_result_string_length()\fR returns \-1. +.PP +\&\fBUI_get0_test_string()\fR is used to retrieve the string to compare the +prompt result with. +This is only useful for \fB\s-1UIT_VERIFY\s0\fR type strings. +For all other \fB\s-1UI_STRING\s0\fR types, \s-1NULL\s0 is returned. +.PP +\&\fBUI_get_result_minsize()\fR and \fBUI_get_result_maxsize()\fR are used to +retrieve the minimum and maximum required size of the result. +This is only useful for \fB\s-1UIT_PROMPT\s0\fR and \fB\s-1UIT_VERIFY\s0\fR type strings. +For all other \fB\s-1UI_STRING\s0\fR types, \-1 is returned. +.PP +\&\fBUI_set_result_ex()\fR is used to set the result value of a prompt and its length. +For \fB\s-1UIT_PROMPT\s0\fR and \fB\s-1UIT_VERIFY\s0\fR type \s-1UI\s0 strings, this sets the +result retrievable with \fBUI_get0_result_string()\fR by copying the +contents of \fBresult\fR if its length fits the minimum and maximum size +requirements. +For \fB\s-1UIT_BOOLEAN\s0\fR type \s-1UI\s0 strings, this sets the first character of +the result retrievable with \fBUI_get0_result_string()\fR to the first +\&\fBok_char\fR given with \fBUI_add_input_boolean()\fR or \fBUI_dup_input_boolean()\fR +if the \fBresult\fR matched any of them, or the first of the +\&\fBcancel_chars\fR if the \fBresult\fR matched any of them, otherwise it's +set to the \s-1NUL\s0 char \f(CW\*(C`\e0\*(C'\fR. +See \fBUI_add_input_boolean\fR\|(3) for more information on \fBok_chars\fR and +\&\fBcancel_chars\fR. +.PP +\&\fBUI_set_result()\fR does the same thing as \fBUI_set_result_ex()\fR, but calculates +its length internally. +It expects the string to be terminated with a \s-1NUL\s0 byte, and is therefore +only useful with normal C strings. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBUI_get_string_type()\fR returns the \s-1UI\s0 string type. +.PP +\&\fBUI_get_input_flags()\fR returns the \s-1UI\s0 string flags. +.PP +\&\fBUI_get0_output_string()\fR returns the \s-1UI\s0 string output string. +.PP +\&\fBUI_get0_action_string()\fR returns the \s-1UI\s0 string action description +string for \fB\s-1UIT_BOOLEAN\s0\fR type \s-1UI\s0 strings, \s-1NULL\s0 for any other type. +.PP +\&\fBUI_get0_result_string()\fR returns the \s-1UI\s0 string result buffer for +\&\fB\s-1UIT_PROMPT\s0\fR and \fB\s-1UIT_VERIFY\s0\fR type \s-1UI\s0 strings, \s-1NULL\s0 for any other +type. +.PP +\&\fBUI_get_result_string_length()\fR returns the \s-1UI\s0 string result buffer's +content length for \fB\s-1UIT_PROMPT\s0\fR and \fB\s-1UIT_VERIFY\s0\fR type \s-1UI\s0 strings, +\&\-1 for any other type. +.PP +\&\fBUI_get0_test_string()\fR returns the \s-1UI\s0 string action description +string for \fB\s-1UIT_VERIFY\s0\fR type \s-1UI\s0 strings, \s-1NULL\s0 for any other type. +.PP +\&\fBUI_get_result_minsize()\fR returns the minimum allowed result size for +the \s-1UI\s0 string for \fB\s-1UIT_PROMPT\s0\fR and \fB\s-1UIT_VERIFY\s0\fR type strings, +\&\-1 for any other type. +.PP +\&\fBUI_get_result_maxsize()\fR returns the minimum allowed result size for +the \s-1UI\s0 string for \fB\s-1UIT_PROMPT\s0\fR and \fB\s-1UIT_VERIFY\s0\fR type strings, +\&\-1 for any other type. +.PP +\&\fBUI_set_result()\fR returns 0 on success or when the \s-1UI\s0 string is of any +type other than \fB\s-1UIT_PROMPT\s0\fR, \fB\s-1UIT_VERIFY\s0\fR or \fB\s-1UIT_BOOLEAN\s0\fR, \-1 on +error. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\s-1\fBUI\s0\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2001\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/UI_UTIL_read_pw.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/UI_UTIL_read_pw.3 new file mode 100644 index 00000000..5a35dcff --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/UI_UTIL_read_pw.3 @@ -0,0 +1,202 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "UI_UTIL_READ_PW 3" +.TH UI_UTIL_READ_PW 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +UI_UTIL_read_pw_string, UI_UTIL_read_pw, UI_UTIL_wrap_read_pem_callback \- user interface utilities +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int UI_UTIL_read_pw_string(char *buf, int length, const char *prompt, +\& int verify); +\& int UI_UTIL_read_pw(char *buf, char *buff, int size, const char *prompt, +\& int verify); +\& UI_METHOD *UI_UTIL_wrap_read_pem_callback(pem_password_cb *cb, int rwflag); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBUI_UTIL_read_pw_string()\fR asks for a passphrase, using \fBprompt\fR as a +prompt, and stores it in \fBbuf\fR. +The maximum allowed size is given with \fBlength\fR, including the +terminating \s-1NUL\s0 byte. +If \fBverify\fR is non-zero, the password will be verified as well. +.PP +\&\fBUI_UTIL_read_pw()\fR does the same as \fBUI_UTIL_read_pw_string()\fR, the +difference is that you can give it an external buffer \fBbuff\fR for the +verification passphrase. +.PP +\&\fBUI_UTIL_wrap_read_pem_callback()\fR can be used to create a temporary +\&\fB\s-1UI_METHOD\s0\fR that wraps a given \s-1PEM\s0 password callback \fBcb\fR. +\&\fBrwflag\fR is used to specify if this method will be used for +passphrase entry without (0) or with (1) verification. +When not used any more, the returned method should be freed with +\&\fBUI_destroy_method()\fR. +.SH "NOTES" +.IX Header "NOTES" +\&\fBUI_UTIL_read_pw_string()\fR and \fBUI_UTIL_read_pw()\fR use default +\&\fB\s-1UI_METHOD\s0\fR. +See \fBUI_get_default_method\fR\|(3) and friends for more information. +.PP +The result from the \fB\s-1UI_METHOD\s0\fR created by +\&\fBUI_UTIL_wrap_read_pem_callback()\fR will generate password strings in the +encoding that the given password callback generates. +The default password prompting functions (apart from +\&\fBUI_UTIL_read_pw_string()\fR and \fBUI_UTIL_read_pw()\fR, there is +\&\fBPEM_def_callback()\fR, \fBEVP_read_pw_string()\fR and \fBEVP_read_pw_string_min()\fR) +all use the default \fB\s-1UI_METHOD\s0\fR. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBUI_UTIL_read_pw_string()\fR and \fBUI_UTIL_read_pw()\fR return 0 on success or a negative +value on error. +.PP +\&\fBUI_UTIL_wrap_read_pem_callback()\fR returns a valid \fB\s-1UI_METHOD\s0\fR structure or \s-1NULL\s0 +if an error occurred. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBUI_get_default_method\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2001\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/UI_create_method.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/UI_create_method.3 new file mode 100644 index 00000000..b5a6a043 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/UI_create_method.3 @@ -0,0 +1,319 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "UI_CREATE_METHOD 3" +.TH UI_CREATE_METHOD 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +UI_METHOD, UI_create_method, UI_destroy_method, UI_method_set_opener, UI_method_set_writer, UI_method_set_flusher, UI_method_set_reader, UI_method_set_closer, UI_method_set_data_duplicator, UI_method_set_prompt_constructor, UI_method_set_ex_data, UI_method_get_opener, UI_method_get_writer, UI_method_get_flusher, UI_method_get_reader, UI_method_get_closer, UI_method_get_data_duplicator, UI_method_get_data_destructor, UI_method_get_prompt_constructor, UI_method_get_ex_data \- user interface method creation and destruction +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& typedef struct ui_method_st UI_METHOD; +\& +\& UI_METHOD *UI_create_method(const char *name); +\& void UI_destroy_method(UI_METHOD *ui_method); +\& int UI_method_set_opener(UI_METHOD *method, int (*opener) (UI *ui)); +\& int UI_method_set_writer(UI_METHOD *method, +\& int (*writer) (UI *ui, UI_STRING *uis)); +\& int UI_method_set_flusher(UI_METHOD *method, int (*flusher) (UI *ui)); +\& int UI_method_set_reader(UI_METHOD *method, +\& int (*reader) (UI *ui, UI_STRING *uis)); +\& int UI_method_set_closer(UI_METHOD *method, int (*closer) (UI *ui)); +\& int UI_method_set_data_duplicator(UI_METHOD *method, +\& void *(*duplicator) (UI *ui, void *ui_data), +\& void (*destructor)(UI *ui, void *ui_data)); +\& int UI_method_set_prompt_constructor(UI_METHOD *method, +\& char *(*prompt_constructor) (UI *ui, +\& const char +\& *object_desc, +\& const char +\& *object_name)); +\& int UI_method_set_ex_data(UI_METHOD *method, int idx, void *data); +\& int (*UI_method_get_opener(const UI_METHOD *method)) (UI *); +\& int (*UI_method_get_writer(const UI_METHOD *method)) (UI *, UI_STRING *); +\& int (*UI_method_get_flusher(const UI_METHOD *method)) (UI *); +\& int (*UI_method_get_reader(const UI_METHOD *method)) (UI *, UI_STRING *); +\& int (*UI_method_get_closer(const UI_METHOD *method)) (UI *); +\& char *(*UI_method_get_prompt_constructor(const UI_METHOD *method)) +\& (UI *, const char *, const char *); +\& void *(*UI_method_get_data_duplicator(const UI_METHOD *method)) (UI *, void *); +\& void (*UI_method_get_data_destructor(const UI_METHOD *method)) (UI *, void *); +\& const void *UI_method_get_ex_data(const UI_METHOD *method, int idx); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +A method contains a few functions that implement the low level of the +User Interface. +These functions are: +.IP "an opener" 4 +.IX Item "an opener" +This function takes a reference to a \s-1UI\s0 and starts a session, for +example by opening a channel to a tty, or by creating a dialog box. +.IP "a writer" 4 +.IX Item "a writer" +This function takes a reference to a \s-1UI\s0 and a \s-1UI\s0 String, and writes +the string where appropriate, maybe to the tty, maybe added as a field +label in a dialog box. +Note that this gets fed all strings associated with a \s-1UI,\s0 one after +the other, so care must be taken which ones it actually uses. +.IP "a flusher" 4 +.IX Item "a flusher" +This function takes a reference to a \s-1UI,\s0 and flushes everything that +has been output so far. +For example, if the method builds up a dialog box, this can be used to +actually display it and accepting input ended with a pressed button. +.IP "a reader" 4 +.IX Item "a reader" +This function takes a reference to a \s-1UI\s0 and a \s-1UI\s0 string and reads off +the given prompt, maybe from the tty, maybe from a field in a dialog +box. +Note that this gets fed all strings associated with a \s-1UI,\s0 one after +the other, so care must be taken which ones it actually uses. +.IP "a closer" 4 +.IX Item "a closer" +This function takes a reference to a \s-1UI,\s0 and closes the session, maybe +by closing the channel to the tty, maybe by destroying a dialog box. +.PP +All of these functions are expected to return 0 on error, 1 on +success, or \-1 on out-off-band events, for example if some prompting +has been cancelled (by pressing Ctrl-C, for example). +Only the flusher or the reader are expected to return \-1. +If returned by another of the functions, it's treated as if 0 was +returned. +.PP +Regarding the writer and the reader, don't assume the former should +only write and don't assume the latter should only read. +This depends on the needs of the method. +.PP +For example, a typical tty reader wouldn't write the prompts in the +write, but would rather do so in the reader, because of the sequential +nature of prompting on a tty. +This is how the \fBUI_OpenSSL()\fR method does it. +.PP +In contrast, a method that builds up a dialog box would add all prompt +text in the writer, have all input read in the flusher and store the +results in some temporary buffer, and finally have the reader just +fetch those results. +.PP +The central function that uses these method functions is \fBUI_process()\fR, +and it does it in five steps: +.IP "1." 4 +Open the session using the opener function if that one's defined. +If an error occurs, jump to 5. +.IP "2." 4 +For every \s-1UI\s0 String associated with the \s-1UI,\s0 call the writer function +if that one's defined. +If an error occurs, jump to 5. +.IP "3." 4 +Flush everything using the flusher function if that one's defined. +If an error occurs, jump to 5. +.IP "4." 4 +For every \s-1UI\s0 String associated with the \s-1UI,\s0 call the reader function +if that one's defined. +If an error occurs, jump to 5. +.IP "5." 4 +Close the session using the closer function if that one's defined. +.PP +\&\fBUI_create_method()\fR creates a new \s-1UI\s0 method with a given \fBname\fR. +.PP +\&\fBUI_destroy_method()\fR destroys the given \s-1UI\s0 method \fBui_method\fR. +.PP +\&\fBUI_method_set_opener()\fR, \fBUI_method_set_writer()\fR, +\&\fBUI_method_set_flusher()\fR, \fBUI_method_set_reader()\fR and +\&\fBUI_method_set_closer()\fR set the five main method function to the given +function pointer. +.PP +\&\fBUI_method_set_data_duplicator()\fR sets the user data duplicator and destructor. +See \fBUI_dup_user_data\fR\|(3). +.PP +\&\fBUI_method_set_prompt_constructor()\fR sets the prompt constructor. +See \fBUI_construct_prompt\fR\|(3). +.PP +\&\fBUI_method_set_ex_data()\fR sets application specific data with a given +\&\s-1EX_DATA\s0 index. +See \fBCRYPTO_get_ex_new_index\fR\|(3) for general information on how to +get that index. +.PP +\&\fBUI_method_get_opener()\fR, \fBUI_method_get_writer()\fR, +\&\fBUI_method_get_flusher()\fR, \fBUI_method_get_reader()\fR, +\&\fBUI_method_get_closer()\fR, \fBUI_method_get_data_duplicator()\fR, +\&\fBUI_method_get_data_destructor()\fR and \fBUI_method_get_prompt_constructor()\fR +return the different method functions. +.PP +\&\fBUI_method_get_ex_data()\fR returns the application data previously stored +with \fBUI_method_set_ex_data()\fR. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBUI_create_method()\fR returns a \s-1UI_METHOD\s0 pointer on success, \s-1NULL\s0 on +error. +.PP +\&\fBUI_method_set_opener()\fR, \fBUI_method_set_writer()\fR, +\&\fBUI_method_set_flusher()\fR, \fBUI_method_set_reader()\fR, +\&\fBUI_method_set_closer()\fR, \fBUI_method_set_data_duplicator()\fR and +\&\fBUI_method_set_prompt_constructor()\fR +return 0 on success, \-1 if the given \fBmethod\fR is \s-1NULL.\s0 +.PP +\&\fBUI_method_set_ex_data()\fR returns 1 on success and 0 on error (because +\&\fBCRYPTO_set_ex_data()\fR does so). +.PP +\&\fBUI_method_get_opener()\fR, \fBUI_method_get_writer()\fR, +\&\fBUI_method_get_flusher()\fR, \fBUI_method_get_reader()\fR, +\&\fBUI_method_get_closer()\fR, \fBUI_method_get_data_duplicator()\fR, +\&\fBUI_method_get_data_destructor()\fR and \fBUI_method_get_prompt_constructor()\fR +return the requested function pointer if it's set in the method, +otherwise \s-1NULL.\s0 +.PP +\&\fBUI_method_get_ex_data()\fR returns a pointer to the application specific +data associated with the method. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\s-1\fBUI\s0\fR\|(3), \fBCRYPTO_get_ex_data\fR\|(3), \s-1\fBUI_STRING\s0\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +The \fBUI_method_set_data_duplicator()\fR, \fBUI_method_get_data_duplicator()\fR +and \fBUI_method_get_data_destructor()\fR functions were added in OpenSSL 1.1.1. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2001\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/UI_new.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/UI_new.3 new file mode 100644 index 00000000..923d1523 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/UI_new.3 @@ -0,0 +1,376 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "UI_NEW 3" +.TH UI_NEW 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +UI, UI_new, UI_new_method, UI_free, UI_add_input_string, UI_dup_input_string, UI_add_verify_string, UI_dup_verify_string, UI_add_input_boolean, UI_dup_input_boolean, UI_add_info_string, UI_dup_info_string, UI_add_error_string, UI_dup_error_string, UI_construct_prompt, UI_add_user_data, UI_dup_user_data, UI_get0_user_data, UI_get0_result, UI_get_result_length, UI_process, UI_ctrl, UI_set_default_method, UI_get_default_method, UI_get_method, UI_set_method, UI_OpenSSL, UI_null \- user interface +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& typedef struct ui_st UI; +\& +\& UI *UI_new(void); +\& UI *UI_new_method(const UI_METHOD *method); +\& void UI_free(UI *ui); +\& +\& int UI_add_input_string(UI *ui, const char *prompt, int flags, +\& char *result_buf, int minsize, int maxsize); +\& int UI_dup_input_string(UI *ui, const char *prompt, int flags, +\& char *result_buf, int minsize, int maxsize); +\& int UI_add_verify_string(UI *ui, const char *prompt, int flags, +\& char *result_buf, int minsize, int maxsize, +\& const char *test_buf); +\& int UI_dup_verify_string(UI *ui, const char *prompt, int flags, +\& char *result_buf, int minsize, int maxsize, +\& const char *test_buf); +\& int UI_add_input_boolean(UI *ui, const char *prompt, const char *action_desc, +\& const char *ok_chars, const char *cancel_chars, +\& int flags, char *result_buf); +\& int UI_dup_input_boolean(UI *ui, const char *prompt, const char *action_desc, +\& const char *ok_chars, const char *cancel_chars, +\& int flags, char *result_buf); +\& int UI_add_info_string(UI *ui, const char *text); +\& int UI_dup_info_string(UI *ui, const char *text); +\& int UI_add_error_string(UI *ui, const char *text); +\& int UI_dup_error_string(UI *ui, const char *text); +\& +\& char *UI_construct_prompt(UI *ui_method, +\& const char *object_desc, const char *object_name); +\& +\& void *UI_add_user_data(UI *ui, void *user_data); +\& int UI_dup_user_data(UI *ui, void *user_data); +\& void *UI_get0_user_data(UI *ui); +\& +\& const char *UI_get0_result(UI *ui, int i); +\& int UI_get_result_length(UI *ui, int i); +\& +\& int UI_process(UI *ui); +\& +\& int UI_ctrl(UI *ui, int cmd, long i, void *p, void (*f)()); +\& +\& void UI_set_default_method(const UI_METHOD *meth); +\& const UI_METHOD *UI_get_default_method(void); +\& const UI_METHOD *UI_get_method(UI *ui); +\& const UI_METHOD *UI_set_method(UI *ui, const UI_METHOD *meth); +\& +\& UI_METHOD *UI_OpenSSL(void); +\& const UI_METHOD *UI_null(void); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\s-1UI\s0 stands for User Interface, and is general purpose set of routines to +prompt the user for text-based information. Through user-written methods +(see \fBUI_create_method\fR\|(3)), prompting can be done in any way +imaginable, be it plain text prompting, through dialog boxes or from a +cell phone. +.PP +All the functions work through a context of the type \s-1UI.\s0 This context +contains all the information needed to prompt correctly as well as a +reference to a \s-1UI_METHOD,\s0 which is an ordered vector of functions that +carry out the actual prompting. +.PP +The first thing to do is to create a \s-1UI\s0 with \fBUI_new()\fR or \fBUI_new_method()\fR, +then add information to it with the UI_add or UI_dup functions. Also, +user-defined random data can be passed down to the underlying method +through calls to \fBUI_add_user_data()\fR or \fBUI_dup_user_data()\fR. The default +\&\s-1UI\s0 method doesn't care about these data, but other methods might. Finally, +use \fBUI_process()\fR to actually perform the prompting and \fBUI_get0_result()\fR +and \fBUI_get_result_length()\fR to find the result to the prompt and its length. +.PP +A \s-1UI\s0 can contain more than one prompt, which are performed in the given +sequence. Each prompt gets an index number which is returned by the +UI_add and UI_dup functions, and has to be used to get the corresponding +result with \fBUI_get0_result()\fR and \fBUI_get_result_length()\fR. +.PP +\&\fBUI_process()\fR can be called more than once on the same \s-1UI,\s0 thereby allowing +a \s-1UI\s0 to have a long lifetime, but can just as well have a short lifetime. +.PP +The functions are as follows: +.PP +\&\fBUI_new()\fR creates a new \s-1UI\s0 using the default \s-1UI\s0 method. When done with +this \s-1UI,\s0 it should be freed using \fBUI_free()\fR. +.PP +\&\fBUI_new_method()\fR creates a new \s-1UI\s0 using the given \s-1UI\s0 method. When done with +this \s-1UI,\s0 it should be freed using \fBUI_free()\fR. +.PP +\&\fBUI_OpenSSL()\fR returns the built-in \s-1UI\s0 method (note: not necessarily the +default one, since the default can be changed. See further on). This +method is the most machine/OS dependent part of OpenSSL and normally +generates the most problems when porting. +.PP +\&\fBUI_null()\fR returns a \s-1UI\s0 method that does nothing. Its use is to avoid +getting internal defaults for passed \s-1UI_METHOD\s0 pointers. +.PP +\&\fBUI_free()\fR removes a \s-1UI\s0 from memory, along with all other pieces of memory +that's connected to it, like duplicated input strings, results and others. +If \fBui\fR is \s-1NULL\s0 nothing is done. +.PP +\&\fBUI_add_input_string()\fR and \fBUI_add_verify_string()\fR add a prompt to the \s-1UI,\s0 +as well as flags and a result buffer and the desired minimum and maximum +sizes of the result, not counting the final \s-1NUL\s0 character. The given +information is used to prompt for information, for example a password, +and to verify a password (i.e. having the user enter it twice and check +that the same string was entered twice). \fBUI_add_verify_string()\fR takes +and extra argument that should be a pointer to the result buffer of the +input string that it's supposed to verify, or verification will fail. +.PP +\&\fBUI_add_input_boolean()\fR adds a prompt to the \s-1UI\s0 that's supposed to be answered +in a boolean way, with a single character for yes and a different character +for no. A set of characters that can be used to cancel the prompt is given +as well. The prompt itself is divided in two, one part being the +descriptive text (given through the \fIprompt\fR argument) and one describing +the possible answers (given through the \fIaction_desc\fR argument). +.PP +\&\fBUI_add_info_string()\fR and \fBUI_add_error_string()\fR add strings that are shown at +the same time as the prompt for extra information or to show an error string. +The difference between the two is only conceptual. With the builtin method, +there's no technical difference between them. Other methods may make a +difference between them, however. +.PP +The flags currently supported are \fB\s-1UI_INPUT_FLAG_ECHO\s0\fR, which is relevant for +\&\fBUI_add_input_string()\fR and will have the users response be echoed (when +prompting for a password, this flag should obviously not be used, and +\&\fB\s-1UI_INPUT_FLAG_DEFAULT_PWD\s0\fR, which means that a default password of some +sort will be used (completely depending on the application and the \s-1UI\s0 +method). +.PP +\&\fBUI_dup_input_string()\fR, \fBUI_dup_verify_string()\fR, \fBUI_dup_input_boolean()\fR, +\&\fBUI_dup_info_string()\fR and \fBUI_dup_error_string()\fR are basically the same +as their UI_add counterparts, except that they make their own copies +of all strings. +.PP +\&\fBUI_construct_prompt()\fR is a helper function that can be used to create +a prompt from two pieces of information: an description and a name. +The default constructor (if there is none provided by the method used) +creates a string "Enter \fIdescription\fR for \fIname\fR:\*(L". With the +description \*(R"pass phrase\*(L" and the file name \*(R"foo.key\*(L", that becomes +\&\*(R"Enter pass phrase for foo.key:". Other methods may create whatever +string and may include encodings that will be processed by the other +method functions. +.PP +\&\fBUI_add_user_data()\fR adds a user data pointer for the method to use at any +time. The builtin \s-1UI\s0 method doesn't care about this info. Note that several +calls to this function doesn't add data, it replaces the previous blob +with the one given as argument. +.PP +\&\fBUI_dup_user_data()\fR duplicates the user data and works as an alternative +to \fBUI_add_user_data()\fR when the user data needs to be preserved for a longer +duration, perhaps even the lifetime of the application. The \s-1UI\s0 object takes +ownership of this duplicate and will free it whenever it gets replaced or +the \s-1UI\s0 is destroyed. \fBUI_dup_user_data()\fR returns 0 on success, or \-1 on memory +allocation failure or if the method doesn't have a duplicator function. +.PP +\&\fBUI_get0_user_data()\fR retrieves the data that has last been given to the +\&\s-1UI\s0 with \fBUI_add_user_data()\fR or UI_dup_user_data. +.PP +\&\fBUI_get0_result()\fR returns a pointer to the result buffer associated with +the information indexed by \fIi\fR. +.PP +\&\fBUI_get_result_length()\fR returns the length of the result buffer associated with +the information indexed by \fIi\fR. +.PP +\&\fBUI_process()\fR goes through the information given so far, does all the printing +and prompting and returns the final status, which is \-2 on out-of-band events +(Interrupt, Cancel, ...), \-1 on error and 0 on success. +.PP +\&\fBUI_ctrl()\fR adds extra control for the application author. For now, it +understands two commands: \fB\s-1UI_CTRL_PRINT_ERRORS\s0\fR, which makes \fBUI_process()\fR +print the OpenSSL error stack as part of processing the \s-1UI,\s0 and +\&\fB\s-1UI_CTRL_IS_REDOABLE\s0\fR, which returns a flag saying if the used \s-1UI\s0 can +be used again or not. +.PP +\&\fBUI_set_default_method()\fR changes the default \s-1UI\s0 method to the one given. +This function is not thread-safe and should not be called at the same time +as other OpenSSL functions. +.PP +\&\fBUI_get_default_method()\fR returns a pointer to the current default \s-1UI\s0 method. +.PP +\&\fBUI_get_method()\fR returns the \s-1UI\s0 method associated with a given \s-1UI.\s0 +.PP +\&\fBUI_set_method()\fR changes the \s-1UI\s0 method associated with a given \s-1UI.\s0 +.SH "NOTES" +.IX Header "NOTES" +The resulting strings that the built in method \fBUI_OpenSSL()\fR generate +are assumed to be encoded according to the current locale or (for +Windows) code page. +For applications having different demands, these strings need to be +converted appropriately by the caller. +For Windows, if the \s-1OPENSSL_WIN32_UTF8\s0 environment variable is set, +the built-in method \fBUI_OpenSSL()\fR will produce \s-1UTF\-8\s0 encoded strings +instead. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBUI_new()\fR and \fBUI_new_method()\fR return a valid \fB\s-1UI\s0\fR structure or \s-1NULL\s0 if an error +occurred. +.PP +\&\fBUI_add_input_string()\fR, \fBUI_dup_input_string()\fR, \fBUI_add_verify_string()\fR, +\&\fBUI_dup_verify_string()\fR, \fBUI_add_input_boolean()\fR, \fBUI_dup_input_boolean()\fR, +\&\fBUI_add_info_string()\fR, \fBUI_dup_info_string()\fR, \fBUI_add_error_string()\fR +and \fBUI_dup_error_string()\fR return a positive number on success or a value which +is less than or equal to 0 otherwise. +.PP +\&\fBUI_construct_prompt()\fR returns a string or \s-1NULL\s0 if an error occurred. +.PP +\&\fBUI_dup_user_data()\fR returns 0 on success or \-1 on error. +.PP +\&\fBUI_get0_result()\fR returns a string or \s-1NULL\s0 on error. +.PP +\&\fBUI_get_result_length()\fR returns a positive integer or 0 on success; otherwise it +returns \-1 on error. +.PP +\&\fBUI_process()\fR returns 0 on success or a negative value on error. +.PP +\&\fBUI_ctrl()\fR returns a mask on success or \-1 on error. +.PP +\&\fBUI_get_default_method()\fR, \fBUI_get_method()\fR, \fBUI_OpenSSL()\fR, \fBUI_null()\fR and +\&\fBUI_set_method()\fR return either a valid \fB\s-1UI_METHOD\s0\fR structure or \s-1NULL\s0 +respectively. +.SH "HISTORY" +.IX Header "HISTORY" +The \fBUI_dup_user_data()\fR function was added in OpenSSL 1.1.1. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2001\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509V3_get_d2i.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509V3_get_d2i.3 new file mode 100644 index 00000000..3180bf51 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509V3_get_d2i.3 @@ -0,0 +1,375 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "X509V3_GET_D2I 3" +.TH X509V3_GET_D2I 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +X509_get0_extensions, X509_CRL_get0_extensions, X509_REVOKED_get0_extensions, X509V3_get_d2i, X509V3_add1_i2d, X509V3_EXT_d2i, X509V3_EXT_i2d, X509_get_ext_d2i, X509_add1_ext_i2d, X509_CRL_get_ext_d2i, X509_CRL_add1_ext_i2d, X509_REVOKED_get_ext_d2i, X509_REVOKED_add1_ext_i2d \- X509 extension decode and encode functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& void *X509V3_get_d2i(const STACK_OF(X509_EXTENSION) *x, int nid, int *crit, +\& int *idx); +\& int X509V3_add1_i2d(STACK_OF(X509_EXTENSION) **x, int nid, void *value, +\& int crit, unsigned long flags); +\& +\& void *X509V3_EXT_d2i(X509_EXTENSION *ext); +\& X509_EXTENSION *X509V3_EXT_i2d(int ext_nid, int crit, void *ext); +\& +\& void *X509_get_ext_d2i(const X509 *x, int nid, int *crit, int *idx); +\& int X509_add1_ext_i2d(X509 *x, int nid, void *value, int crit, +\& unsigned long flags); +\& +\& void *X509_CRL_get_ext_d2i(const X509_CRL *crl, int nid, int *crit, int *idx); +\& int X509_CRL_add1_ext_i2d(X509_CRL *crl, int nid, void *value, int crit, +\& unsigned long flags); +\& +\& void *X509_REVOKED_get_ext_d2i(const X509_REVOKED *r, int nid, int *crit, int *idx); +\& int X509_REVOKED_add1_ext_i2d(X509_REVOKED *r, int nid, void *value, int crit, +\& unsigned long flags); +\& +\& const STACK_OF(X509_EXTENSION) *X509_get0_extensions(const X509 *x); +\& const STACK_OF(X509_EXTENSION) *X509_CRL_get0_extensions(const X509_CRL *crl); +\& const STACK_OF(X509_EXTENSION) *X509_REVOKED_get0_extensions(const X509_REVOKED *r); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBX509V3_get_ext_d2i()\fR looks for an extension with \s-1OID\s0 \fBnid\fR in the extensions +\&\fBx\fR and, if found, decodes it. If \fBidx\fR is \fB\s-1NULL\s0\fR then only one +occurrence of an extension is permissible otherwise the first extension after +index \fB*idx\fR is returned and \fB*idx\fR updated to the location of the extension. +If \fBcrit\fR is not \fB\s-1NULL\s0\fR then \fB*crit\fR is set to a status value: \-2 if the +extension occurs multiple times (this is only returned if \fBidx\fR is \fB\s-1NULL\s0\fR), +\&\-1 if the extension could not be found, 0 if the extension is found and is +not critical and 1 if critical. A pointer to an extension specific structure +or \fB\s-1NULL\s0\fR is returned. +.PP +\&\fBX509V3_add1_i2d()\fR adds extension \fBvalue\fR to \s-1STACK\s0 \fB*x\fR (allocating a new +\&\s-1STACK\s0 if necessary) using \s-1OID\s0 \fBnid\fR and criticality \fBcrit\fR according +to \fBflags\fR. +.PP +\&\fBX509V3_EXT_d2i()\fR attempts to decode the \s-1ASN.1\s0 data contained in extension +\&\fBext\fR and returns a pointer to an extension specific structure or \fB\s-1NULL\s0\fR +if the extension could not be decoded (invalid syntax or not supported). +.PP +\&\fBX509V3_EXT_i2d()\fR encodes the extension specific structure \fBext\fR +with \s-1OID\s0 \fBext_nid\fR and criticality \fBcrit\fR. +.PP +\&\fBX509_get_ext_d2i()\fR and \fBX509_add1_ext_i2d()\fR operate on the extensions of +certificate \fBx\fR, they are otherwise identical to \fBX509V3_get_d2i()\fR and +\&\fBX509V3_add_i2d()\fR. +.PP +\&\fBX509_CRL_get_ext_d2i()\fR and \fBX509_CRL_add1_ext_i2d()\fR operate on the extensions +of \s-1CRL\s0 \fBcrl\fR, they are otherwise identical to \fBX509V3_get_d2i()\fR and +\&\fBX509V3_add_i2d()\fR. +.PP +\&\fBX509_REVOKED_get_ext_d2i()\fR and \fBX509_REVOKED_add1_ext_i2d()\fR operate on the +extensions of \fBX509_REVOKED\fR structure \fBr\fR (i.e for \s-1CRL\s0 entry extensions), +they are otherwise identical to \fBX509V3_get_d2i()\fR and \fBX509V3_add_i2d()\fR. +.PP +\&\fBX509_get0_extensions()\fR, \fBX509_CRL_get0_extensions()\fR and +\&\fBX509_REVOKED_get0_extensions()\fR return a stack of all the extensions +of a certificate a \s-1CRL\s0 or a \s-1CRL\s0 entry respectively. +.SH "NOTES" +.IX Header "NOTES" +In almost all cases an extension can occur at most once and multiple +occurrences is an error. Therefore the \fBidx\fR parameter is usually \fB\s-1NULL\s0\fR. +.PP +The \fBflags\fR parameter may be one of the following values. +.PP +\&\fBX509V3_ADD_DEFAULT\fR appends a new extension only if the extension does +not already exist. An error is returned if the extension does already +exist. +.PP +\&\fBX509V3_ADD_APPEND\fR appends a new extension, ignoring whether the extension +already exists. +.PP +\&\fBX509V3_ADD_REPLACE\fR replaces an extension if it exists otherwise appends +a new extension. +.PP +\&\fBX509V3_ADD_REPLACE_EXISTING\fR replaces an existing extension if it exists +otherwise returns an error. +.PP +\&\fBX509V3_ADD_KEEP_EXISTING\fR appends a new extension only if the extension does +not already exist. An error \fBis not\fR returned if the extension does already +exist. +.PP +\&\fBX509V3_ADD_DELETE\fR extension \fBnid\fR is deleted: no new extension is added. +.PP +If \fBX509V3_ADD_SILENT\fR is ored with \fBflags\fR: any error returned will not +be added to the error queue. +.PP +The function \fBX509V3_get_d2i()\fR will return \fB\s-1NULL\s0\fR if the extension is not +found, occurs multiple times or cannot be decoded. It is possible to +determine the precise reason by checking the value of \fB*crit\fR. +.SH "SUPPORTED EXTENSIONS" +.IX Header "SUPPORTED EXTENSIONS" +The following sections contain a list of all supported extensions +including their name and \s-1NID.\s0 +.SS "\s-1PKIX\s0 Certificate Extensions" +.IX Subsection "PKIX Certificate Extensions" +The following certificate extensions are defined in \s-1PKIX\s0 standards such as +\&\s-1RFC5280.\s0 +.PP +.Vb 3 +\& Basic Constraints NID_basic_constraints +\& Key Usage NID_key_usage +\& Extended Key Usage NID_ext_key_usage +\& +\& Subject Key Identifier NID_subject_key_identifier +\& Authority Key Identifier NID_authority_key_identifier +\& +\& Private Key Usage Period NID_private_key_usage_period +\& +\& Subject Alternative Name NID_subject_alt_name +\& Issuer Alternative Name NID_issuer_alt_name +\& +\& Authority Information Access NID_info_access +\& Subject Information Access NID_sinfo_access +\& +\& Name Constraints NID_name_constraints +\& +\& Certificate Policies NID_certificate_policies +\& Policy Mappings NID_policy_mappings +\& Policy Constraints NID_policy_constraints +\& Inhibit Any Policy NID_inhibit_any_policy +\& +\& TLS Feature NID_tlsfeature +.Ve +.SS "Netscape Certificate Extensions" +.IX Subsection "Netscape Certificate Extensions" +The following are (largely obsolete) Netscape certificate extensions. +.PP +.Vb 8 +\& Netscape Cert Type NID_netscape_cert_type +\& Netscape Base Url NID_netscape_base_url +\& Netscape Revocation Url NID_netscape_revocation_url +\& Netscape CA Revocation Url NID_netscape_ca_revocation_url +\& Netscape Renewal Url NID_netscape_renewal_url +\& Netscape CA Policy Url NID_netscape_ca_policy_url +\& Netscape SSL Server Name NID_netscape_ssl_server_name +\& Netscape Comment NID_netscape_comment +.Ve +.SS "Miscellaneous Certificate Extensions" +.IX Subsection "Miscellaneous Certificate Extensions" +.Vb 2 +\& Strong Extranet ID NID_sxnet +\& Proxy Certificate Information NID_proxyCertInfo +.Ve +.SS "\s-1PKIX CRL\s0 Extensions" +.IX Subsection "PKIX CRL Extensions" +The following are \s-1CRL\s0 extensions from \s-1PKIX\s0 standards such as \s-1RFC5280.\s0 +.PP +.Vb 6 +\& CRL Number NID_crl_number +\& CRL Distribution Points NID_crl_distribution_points +\& Delta CRL Indicator NID_delta_crl +\& Freshest CRL NID_freshest_crl +\& Invalidity Date NID_invalidity_date +\& Issuing Distribution Point NID_issuing_distribution_point +.Ve +.PP +The following are \s-1CRL\s0 entry extensions from \s-1PKIX\s0 standards such as \s-1RFC5280.\s0 +.PP +.Vb 2 +\& CRL Reason Code NID_crl_reason +\& Certificate Issuer NID_certificate_issuer +.Ve +.SS "\s-1OCSP\s0 Extensions" +.IX Subsection "OCSP Extensions" +.Vb 7 +\& OCSP Nonce NID_id_pkix_OCSP_Nonce +\& OCSP CRL ID NID_id_pkix_OCSP_CrlID +\& Acceptable OCSP Responses NID_id_pkix_OCSP_acceptableResponses +\& OCSP No Check NID_id_pkix_OCSP_noCheck +\& OCSP Archive Cutoff NID_id_pkix_OCSP_archiveCutoff +\& OCSP Service Locator NID_id_pkix_OCSP_serviceLocator +\& Hold Instruction Code NID_hold_instruction_code +.Ve +.SS "Certificate Transparency Extensions" +.IX Subsection "Certificate Transparency Extensions" +The following extensions are used by certificate transparency, \s-1RFC6962\s0 +.PP +.Vb 2 +\& CT Precertificate SCTs NID_ct_precert_scts +\& CT Certificate SCTs NID_ct_cert_scts +.Ve +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBX509V3_EXT_d2i()\fR and *\fBX509V3_get_d2i()\fR return a pointer to an extension +specific structure of \fB\s-1NULL\s0\fR if an error occurs. +.PP +\&\fBX509V3_EXT_i2d()\fR returns a pointer to an \fBX509_EXTENSION\fR structure +or \fB\s-1NULL\s0\fR if an error occurs. +.PP +\&\fBX509V3_add1_i2d()\fR returns 1 if the operation is successful and 0 if it +fails due to a non-fatal error (extension not found, already exists, +cannot be encoded) or \-1 due to a fatal error such as a memory allocation +failure. +.PP +\&\fBX509_get0_extensions()\fR, \fBX509_CRL_get0_extensions()\fR and +\&\fBX509_REVOKED_get0_extensions()\fR return a stack of extensions. They return +\&\s-1NULL\s0 if no extensions are present. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBd2i_X509\fR\|(3), +\&\fBERR_get_error\fR\|(3), +\&\fBX509_CRL_get0_by_serial\fR\|(3), +\&\fBX509_get0_signature\fR\|(3), +\&\fBX509_get_ext_d2i\fR\|(3), +\&\fBX509_get_extension_flags\fR\|(3), +\&\fBX509_get_pubkey\fR\|(3), +\&\fBX509_get_subject_name\fR\|(3), +\&\fBX509_get_version\fR\|(3), +\&\fBX509_NAME_add_entry_by_txt\fR\|(3), +\&\fBX509_NAME_ENTRY_get_object\fR\|(3), +\&\fBX509_NAME_get_index_by_NID\fR\|(3), +\&\fBX509_NAME_print_ex\fR\|(3), +\&\fBX509_new\fR\|(3), +\&\fBX509_sign\fR\|(3), +\&\fBX509_verify_cert\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2015\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_ALGOR_dup.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_ALGOR_dup.3 new file mode 100644 index 00000000..d4088eee --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_ALGOR_dup.3 @@ -0,0 +1,193 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "X509_ALGOR_DUP 3" +.TH X509_ALGOR_DUP 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +X509_ALGOR_dup, X509_ALGOR_set0, X509_ALGOR_get0, X509_ALGOR_set_md, X509_ALGOR_cmp \- AlgorithmIdentifier functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& X509_ALGOR *X509_ALGOR_dup(X509_ALGOR *alg); +\& int X509_ALGOR_set0(X509_ALGOR *alg, ASN1_OBJECT *aobj, int ptype, void *pval); +\& void X509_ALGOR_get0(const ASN1_OBJECT **paobj, int *pptype, +\& const void **ppval, const X509_ALGOR *alg); +\& void X509_ALGOR_set_md(X509_ALGOR *alg, const EVP_MD *md); +\& int X509_ALGOR_cmp(const X509_ALGOR *a, const X509_ALGOR *b); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBX509_ALGOR_dup()\fR returns a copy of \fBalg\fR. +.PP +\&\fBX509_ALGOR_set0()\fR sets the algorithm \s-1OID\s0 of \fBalg\fR to \fBaobj\fR and the +associated parameter type to \fBptype\fR with value \fBpval\fR. If \fBptype\fR is +\&\fBV_ASN1_UNDEF\fR the parameter is omitted, otherwise \fBptype\fR and \fBpval\fR have +the same meaning as the \fBtype\fR and \fBvalue\fR parameters to \fBASN1_TYPE_set()\fR. +All the supplied parameters are used internally so must \fB\s-1NOT\s0\fR be freed after +this call. +.PP +\&\fBX509_ALGOR_get0()\fR is the inverse of \fBX509_ALGOR_set0()\fR: it returns the +algorithm \s-1OID\s0 in \fB*paobj\fR and the associated parameter in \fB*pptype\fR +and \fB*ppval\fR from the \fBAlgorithmIdentifier\fR \fBalg\fR. +.PP +\&\fBX509_ALGOR_set_md()\fR sets the \fBAlgorithmIdentifier\fR \fBalg\fR to appropriate +values for the message digest \fBmd\fR. +.PP +\&\fBX509_ALGOR_cmp()\fR compares \fBa\fR and \fBb\fR and returns 0 if they have identical +encodings and non-zero otherwise. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBX509_ALGOR_dup()\fR returns a valid \fBX509_ALGOR\fR structure or \s-1NULL\s0 if an error +occurred. +.PP +\&\fBX509_ALGOR_set0()\fR returns 1 on success or 0 on error. +.PP +\&\fBX509_ALGOR_get0()\fR and \fBX509_ALGOR_set_md()\fR return no values. +.PP +\&\fBX509_ALGOR_cmp()\fR returns 0 if the two parameters have identical encodings and +non-zero otherwise. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2002\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_CRL_get0_by_serial.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_CRL_get0_by_serial.3 new file mode 100644 index 00000000..43535225 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_CRL_get0_by_serial.3 @@ -0,0 +1,242 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "X509_CRL_GET0_BY_SERIAL 3" +.TH X509_CRL_GET0_BY_SERIAL 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +X509_CRL_get0_by_serial, X509_CRL_get0_by_cert, X509_CRL_get_REVOKED, X509_REVOKED_get0_serialNumber, X509_REVOKED_get0_revocationDate, X509_REVOKED_set_serialNumber, X509_REVOKED_set_revocationDate, X509_CRL_add0_revoked, X509_CRL_sort \- CRL revoked entry utility functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int X509_CRL_get0_by_serial(X509_CRL *crl, +\& X509_REVOKED **ret, ASN1_INTEGER *serial); +\& int X509_CRL_get0_by_cert(X509_CRL *crl, X509_REVOKED **ret, X509 *x); +\& +\& STACK_OF(X509_REVOKED) *X509_CRL_get_REVOKED(X509_CRL *crl); +\& +\& const ASN1_INTEGER *X509_REVOKED_get0_serialNumber(const X509_REVOKED *r); +\& const ASN1_TIME *X509_REVOKED_get0_revocationDate(const X509_REVOKED *r); +\& +\& int X509_REVOKED_set_serialNumber(X509_REVOKED *r, ASN1_INTEGER *serial); +\& int X509_REVOKED_set_revocationDate(X509_REVOKED *r, ASN1_TIME *tm); +\& +\& int X509_CRL_add0_revoked(X509_CRL *crl, X509_REVOKED *rev); +\& +\& int X509_CRL_sort(X509_CRL *crl); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBX509_CRL_get0_by_serial()\fR attempts to find a revoked entry in \fBcrl\fR for +serial number \fBserial\fR. If it is successful it sets \fB*ret\fR to the internal +pointer of the matching entry, as a result \fB*ret\fR must not be freed up +after the call. +.PP +\&\fBX509_CRL_get0_by_cert()\fR is similar to \fBX509_get0_by_serial()\fR except it +looks for a revoked entry using the serial number of certificate \fBx\fR. +.PP +\&\fBX509_CRL_get_REVOKED()\fR returns an internal pointer to a stack of all +revoked entries for \fBcrl\fR. +.PP +\&\fBX509_REVOKED_get0_serialNumber()\fR returns an internal pointer to the +serial number of \fBr\fR. +.PP +\&\fBX509_REVOKED_get0_revocationDate()\fR returns an internal pointer to the +revocation date of \fBr\fR. +.PP +\&\fBX509_REVOKED_set_serialNumber()\fR sets the serial number of \fBr\fR to \fBserial\fR. +The supplied \fBserial\fR pointer is not used internally so it should be +freed up after use. +.PP +\&\fBX509_REVOKED_set_revocationDate()\fR sets the revocation date of \fBr\fR to +\&\fBtm\fR. The supplied \fBtm\fR pointer is not used internally so it should be +freed up after use. +.PP +\&\fBX509_CRL_add0_revoked()\fR appends revoked entry \fBrev\fR to \s-1CRL\s0 \fBcrl\fR. The +pointer \fBrev\fR is used internally so it must not be freed up after the call: +it is freed when the parent \s-1CRL\s0 is freed. +.PP +\&\fBX509_CRL_sort()\fR sorts the revoked entries of \fBcrl\fR into ascending serial +number order. +.SH "NOTES" +.IX Header "NOTES" +Applications can determine the number of revoked entries returned by +\&\fBX509_CRL_get_revoked()\fR using \fBsk_X509_REVOKED_num()\fR and examine each one +in turn using \fBsk_X509_REVOKED_value()\fR. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBX509_CRL_get0_by_serial()\fR and \fBX509_CRL_get0_by_cert()\fR return 0 for failure, +1 on success except if the revoked entry has the reason \f(CW\*(C`removeFromCRL\*(C'\fR (8), +in which case 2 is returned. +.PP +\&\fBX509_REVOKED_set_serialNumber()\fR, \fBX509_REVOKED_set_revocationDate()\fR, +\&\fBX509_CRL_add0_revoked()\fR and \fBX509_CRL_sort()\fR return 1 for success and 0 for +failure. +.PP +\&\fBX509_REVOKED_get0_serialNumber()\fR returns an \fB\s-1ASN1_INTEGER\s0\fR pointer. +.PP +\&\fBX509_REVOKED_get0_revocationDate()\fR returns an \fB\s-1ASN1_TIME\s0\fR value. +.PP +\&\fBX509_CRL_get_REVOKED()\fR returns a \s-1STACK\s0 of revoked entries. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBd2i_X509\fR\|(3), +\&\fBERR_get_error\fR\|(3), +\&\fBX509_get0_signature\fR\|(3), +\&\fBX509_get_ext_d2i\fR\|(3), +\&\fBX509_get_extension_flags\fR\|(3), +\&\fBX509_get_pubkey\fR\|(3), +\&\fBX509_get_subject_name\fR\|(3), +\&\fBX509_get_version\fR\|(3), +\&\fBX509_NAME_add_entry_by_txt\fR\|(3), +\&\fBX509_NAME_ENTRY_get_object\fR\|(3), +\&\fBX509_NAME_get_index_by_NID\fR\|(3), +\&\fBX509_NAME_print_ex\fR\|(3), +\&\fBX509_new\fR\|(3), +\&\fBX509_sign\fR\|(3), +\&\fBX509V3_get_d2i\fR\|(3), +\&\fBX509_verify_cert\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2015\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_EXTENSION_set_object.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_EXTENSION_set_object.3 new file mode 100644 index 00000000..83464846 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_EXTENSION_set_object.3 @@ -0,0 +1,223 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "X509_EXTENSION_SET_OBJECT 3" +.TH X509_EXTENSION_SET_OBJECT 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +X509_EXTENSION_set_object, X509_EXTENSION_set_critical, X509_EXTENSION_set_data, X509_EXTENSION_create_by_NID, X509_EXTENSION_create_by_OBJ, X509_EXTENSION_get_object, X509_EXTENSION_get_critical, X509_EXTENSION_get_data \- extension utility functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 3 +\& int X509_EXTENSION_set_object(X509_EXTENSION *ex, const ASN1_OBJECT *obj); +\& int X509_EXTENSION_set_critical(X509_EXTENSION *ex, int crit); +\& int X509_EXTENSION_set_data(X509_EXTENSION *ex, ASN1_OCTET_STRING *data); +\& +\& X509_EXTENSION *X509_EXTENSION_create_by_NID(X509_EXTENSION **ex, +\& int nid, int crit, +\& ASN1_OCTET_STRING *data); +\& X509_EXTENSION *X509_EXTENSION_create_by_OBJ(X509_EXTENSION **ex, +\& const ASN1_OBJECT *obj, int crit, +\& ASN1_OCTET_STRING *data); +\& +\& ASN1_OBJECT *X509_EXTENSION_get_object(X509_EXTENSION *ex); +\& int X509_EXTENSION_get_critical(const X509_EXTENSION *ex); +\& ASN1_OCTET_STRING *X509_EXTENSION_get_data(X509_EXTENSION *ne); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBX509_EXTENSION_set_object()\fR sets the extension type of \fBex\fR to \fBobj\fR. The +\&\fBobj\fR pointer is duplicated internally so \fBobj\fR should be freed up after use. +.PP +\&\fBX509_EXTENSION_set_critical()\fR sets the criticality of \fBex\fR to \fBcrit\fR. If +\&\fBcrit\fR is zero the extension in non-critical otherwise it is critical. +.PP +\&\fBX509_EXTENSION_set_data()\fR sets the data in extension \fBex\fR to \fBdata\fR. The +\&\fBdata\fR pointer is duplicated internally. +.PP +\&\fBX509_EXTENSION_create_by_NID()\fR creates an extension of type \fBnid\fR, +criticality \fBcrit\fR using data \fBdata\fR. The created extension is returned and +written to \fB*ex\fR reusing or allocating a new extension if necessary so \fB*ex\fR +should either be \fB\s-1NULL\s0\fR or a valid \fBX509_EXTENSION\fR structure it must +\&\fBnot\fR be an uninitialised pointer. +.PP +\&\fBX509_EXTENSION_create_by_OBJ()\fR is identical to \fBX509_EXTENSION_create_by_NID()\fR +except it creates and extension using \fBobj\fR instead of a \s-1NID.\s0 +.PP +\&\fBX509_EXTENSION_get_object()\fR returns the extension type of \fBex\fR as an +\&\fB\s-1ASN1_OBJECT\s0\fR pointer. The returned pointer is an internal value which must +not be freed up. +.PP +\&\fBX509_EXTENSION_get_critical()\fR returns the criticality of extension \fBex\fR it +returns \fB1\fR for critical and \fB0\fR for non-critical. +.PP +\&\fBX509_EXTENSION_get_data()\fR returns the data of extension \fBex\fR. The returned +pointer is an internal value which must not be freed up. +.SH "NOTES" +.IX Header "NOTES" +These functions manipulate the contents of an extension directly. Most +applications will want to parse or encode and add an extension: they should +use the extension encode and decode functions instead such as +\&\fBX509_add1_ext_i2d()\fR and \fBX509_get_ext_d2i()\fR. +.PP +The \fBdata\fR associated with an extension is the extension encoding in an +\&\fB\s-1ASN1_OCTET_STRING\s0\fR structure. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBX509_EXTENSION_set_object()\fR \fBX509_EXTENSION_set_critical()\fR and +\&\fBX509_EXTENSION_set_data()\fR return \fB1\fR for success and \fB0\fR for failure. +.PP +\&\fBX509_EXTENSION_create_by_NID()\fR and \fBX509_EXTENSION_create_by_OBJ()\fR return +an \fBX509_EXTENSION\fR pointer or \fB\s-1NULL\s0\fR if an error occurs. +.PP +\&\fBX509_EXTENSION_get_object()\fR returns an \fB\s-1ASN1_OBJECT\s0\fR pointer. +.PP +\&\fBX509_EXTENSION_get_critical()\fR returns \fB0\fR for non-critical and \fB1\fR for +critical. +.PP +\&\fBX509_EXTENSION_get_data()\fR returns an \fB\s-1ASN1_OCTET_STRING\s0\fR pointer. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBX509V3_get_d2i\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2015\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_LOOKUP.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_LOOKUP.3 new file mode 100644 index 00000000..31d81b2f --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_LOOKUP.3 @@ -0,0 +1,310 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "X509_LOOKUP 3" +.TH X509_LOOKUP 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +X509_LOOKUP, X509_LOOKUP_TYPE, X509_LOOKUP_new, X509_LOOKUP_free, X509_LOOKUP_init, X509_LOOKUP_shutdown, X509_LOOKUP_set_method_data, X509_LOOKUP_get_method_data, X509_LOOKUP_ctrl, X509_LOOKUP_load_file, X509_LOOKUP_add_dir, X509_LOOKUP_get_store, X509_LOOKUP_by_subject, X509_LOOKUP_by_issuer_serial, X509_LOOKUP_by_fingerprint, X509_LOOKUP_by_alias \&\- OpenSSL certificate lookup mechanisms +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& typedef x509_lookup_st X509_LOOKUP; +\& +\& typedef enum X509_LOOKUP_TYPE; +\& +\& X509_LOOKUP *X509_LOOKUP_new(X509_LOOKUP_METHOD *method); +\& int X509_LOOKUP_init(X509_LOOKUP *ctx); +\& int X509_LOOKUP_shutdown(X509_LOOKUP *ctx); +\& void X509_LOOKUP_free(X509_LOOKUP *ctx); +\& +\& int X509_LOOKUP_set_method_data(X509_LOOKUP *ctx, void *data); +\& void *X509_LOOKUP_get_method_data(const X509_LOOKUP *ctx); +\& +\& int X509_LOOKUP_ctrl(X509_LOOKUP *ctx, int cmd, const char *argc, +\& long argl, char **ret); +\& int X509_LOOKUP_load_file(X509_LOOKUP *ctx, char *name, long type); +\& int X509_LOOKUP_add_dir(X509_LOOKUP *ctx, char *name, long type); +\& +\& X509_STORE *X509_LOOKUP_get_store(const X509_LOOKUP *ctx); +\& +\& int X509_LOOKUP_by_subject(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, +\& X509_NAME *name, X509_OBJECT *ret); +\& int X509_LOOKUP_by_issuer_serial(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, +\& X509_NAME *name, ASN1_INTEGER *serial, +\& X509_OBJECT *ret); +\& int X509_LOOKUP_by_fingerprint(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, +\& const unsigned char *bytes, int len, +\& X509_OBJECT *ret); +\& int X509_LOOKUP_by_alias(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, +\& const char *str, int len, X509_OBJECT *ret); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fBX509_LOOKUP\fR structure holds the information needed to look up +certificates and CRLs according to an associated \fBX509_LOOKUP_METHOD\fR\|(3). +Multiple \fBX509_LOOKUP\fR instances can be added to an \fBX509_STORE\fR\|(3) +to enable lookup in that store. +.PP +\&\fBX509_LOOKUP_new()\fR creates a new \fBX509_LOOKUP\fR using the given lookup +\&\fImethod\fR. +It can also be created by calling \fBX509_STORE_add_lookup\fR\|(3), which +will associate an \fBX509_STORE\fR with the lookup mechanism. +.PP +\&\fBX509_LOOKUP_init()\fR initializes the internal state and resources as +needed by the given \fBX509_LOOKUP\fR to do its work. +.PP +\&\fBX509_LOOKUP_shutdown()\fR tears down the internal state and resources of +the given \fBX509_LOOKUP\fR. +.PP +\&\fBX509_LOOKUP_free()\fR destructs the given \fBX509_LOOKUP\fR. +.PP +\&\fBX509_LOOKUP_set_method_data()\fR associates a pointer to application data +to the given \fBX509_LOOKUP\fR. +.PP +\&\fBX509_LOOKUP_get_method_data()\fR retrieves a pointer to application data +from the given \fBX509_LOOKUP\fR. +.PP +\&\fBX509_LOOKUP_ctrl()\fR is used to set or get additional data to or from an +\&\fBX509_LOOKUP\fR structure or its associated \fBX509_LOOKUP_METHOD\fR\|(3). +The arguments of the control command are passed via \fIargc\fR and \fIargl\fR, +its return value via \fI*ret\fR. +The meaning of the arguments depends on the \fIcmd\fR number of the +control command. In general, this function is not called directly, but +wrapped by a macro call, see below. +The control \fIcmd\fRs known to OpenSSL are discussed in more depth +in \*(L"Control Commands\*(R". +.PP +\&\fBX509_LOOKUP_load_file()\fR passes a filename to be loaded immediately +into the associated \fBX509_STORE\fR. +\&\fItype\fR indicates what type of object is expected. +This can only be used with a lookup using the implementation +\&\fBX509_LOOKUP_file\fR\|(3). +.PP +\&\fBX509_LOOKUP_add_dir()\fR passes a directory specification from which +certificates and CRLs are loaded on demand into the associated +\&\fBX509_STORE\fR. +\&\fItype\fR indicates what type of object is expected. +This can only be used with a lookup using the implementation +\&\fBX509_LOOKUP_hash_dir\fR\|(3). +.PP +\&\fBX509_LOOKUP_load_file()\fR, \fBX509_LOOKUP_add_dir()\fR, +\&\fBX509_LOOKUP_add_store()\fR, and \fBX509_LOOKUP_load_store()\fR are implemented +as macros that use \fBX509_LOOKUP_ctrl()\fR. +.PP +\&\fBX509_LOOKUP_by_subject()\fR, \fBX509_LOOKUP_by_issuer_serial()\fR, +\&\fBX509_LOOKUP_by_fingerprint()\fR, and \fBX509_LOOKUP_by_alias()\fR look up +certificates and CRLs in the \fBX509_STORE\fR\|(3) associated with the +\&\fBX509_LOOKUP\fR using different criteria, where the looked up object is +stored in \fIret\fR. +Some of the underlying \fBX509_LOOKUP_METHOD\fRs will also cache objects +matching the criteria in the associated \fBX509_STORE\fR, which makes it +possible to handle cases where the criteria have more than one hit. +.SS "File Types" +.IX Subsection "File Types" +\&\fBX509_LOOKUP_load_file()\fR and \fBX509_LOOKUP_add_dir()\fR take a \fItype\fR, +which can be one of the following: +.IP "\fBX509_FILETYPE_PEM\fR" 4 +.IX Item "X509_FILETYPE_PEM" +The file or files that are loaded are expected to be in \s-1PEM\s0 format. +.IP "\fBX509_FILETYPE_ASN1\fR" 4 +.IX Item "X509_FILETYPE_ASN1" +The file or files that are loaded are expected to be in raw \s-1DER\s0 format. +.IP "\fBX509_FILETYPE_DEFAULT\fR" 4 +.IX Item "X509_FILETYPE_DEFAULT" +The default certificate file or directory is used. In this case, +\&\fIname\fR is ignored. +.SS "Control Commands" +.IX Subsection "Control Commands" +The \fBX509_LOOKUP_METHOD\fRs built into OpenSSL recognise the following +\&\fBX509_LOOKUP_ctrl()\fR \fIcmd\fRs: +.IP "\fBX509_L_FILE_LOAD\fR" 4 +.IX Item "X509_L_FILE_LOAD" +This is the command that \fBX509_LOOKUP_load_file()\fR uses. +The filename is passed in \fIargc\fR, and the type in \fIargl\fR. +.IP "\fBX509_L_ADD_DIR\fR" 4 +.IX Item "X509_L_ADD_DIR" +This is the command that \fBX509_LOOKUP_add_dir()\fR uses. +The directory specification is passed in \fIargc\fR, and the type in +\&\fIargl\fR. +.IP "\fBX509_L_ADD_STORE\fR" 4 +.IX Item "X509_L_ADD_STORE" +This is the command that \fBX509_LOOKUP_add_store()\fR uses. +The \s-1URI\s0 is passed in \fIargc\fR. +.IP "\fBX509_L_LOAD_STORE\fR" 4 +.IX Item "X509_L_LOAD_STORE" +This is the command that \fBX509_LOOKUP_load_store()\fR uses. +The \s-1URI\s0 is passed in \fIargc\fR. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBX509_LOOKUP_new()\fR returns an \fBX509_LOOKUP\fR pointer when successful, +or \s-1NULL\s0 on error. +.PP +\&\fBX509_LOOKUP_init()\fR and \fBX509_LOOKUP_shutdown()\fR return 1 on success, or +0 on error. +.PP +\&\fBX509_LOOKUP_ctrl()\fR returns \-1 if the \fBX509_LOOKUP\fR doesn't have an +associated \fBX509_LOOKUP_METHOD\fR, or 1 if the +doesn't have a control function. +Otherwise, it returns what the control function in the +\&\fBX509_LOOKUP_METHOD\fR returns, which is usually 1 on success and 0 in +error. +.IX Xref "509_LOOKUP_METHOD" +.PP +\&\fBX509_LOOKUP_get_store()\fR returns an \fBX509_STORE\fR pointer if there is +one, otherwise \s-1NULL.\s0 +.PP +\&\fBX509_LOOKUP_by_subject()\fR, \fBX509_LOOKUP_by_issuer_serial()\fR, +\&\fBX509_LOOKUP_by_fingerprint()\fR, and \fBX509_LOOKUP_by_alias()\fR all return 0 +if there is no \fBX509_LOOKUP_METHOD\fR or that method doesn't implement +the corresponding function. +Otherwise, it returns what the corresponding function in the +\&\fBX509_LOOKUP_METHOD\fR returns, which is usually 1 on success and 0 in +error. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBX509_LOOKUP_METHOD\fR\|(3), \fBX509_STORE\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2020 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the Apache License 2.0 (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_LOOKUP_hash_dir.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_LOOKUP_hash_dir.3 new file mode 100644 index 00000000..8ca6fa90 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_LOOKUP_hash_dir.3 @@ -0,0 +1,264 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "X509_LOOKUP_HASH_DIR 3" +.TH X509_LOOKUP_HASH_DIR 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +X509_LOOKUP_hash_dir, X509_LOOKUP_file, X509_load_cert_file, X509_load_crl_file, X509_load_cert_crl_file \- Default OpenSSL certificate lookup methods +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& X509_LOOKUP_METHOD *X509_LOOKUP_hash_dir(void); +\& X509_LOOKUP_METHOD *X509_LOOKUP_file(void); +\& +\& int X509_load_cert_file(X509_LOOKUP *ctx, const char *file, int type); +\& int X509_load_crl_file(X509_LOOKUP *ctx, const char *file, int type); +\& int X509_load_cert_crl_file(X509_LOOKUP *ctx, const char *file, int type); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBX509_LOOKUP_hash_dir\fR and \fBX509_LOOKUP_file\fR are two certificate +lookup methods to use with \fBX509_STORE\fR, provided by OpenSSL library. +.PP +Users of the library typically do not need to create instances of these +methods manually, they would be created automatically by +\&\fBX509_STORE_load_locations\fR\|(3) or +\&\fBSSL_CTX_load_verify_locations\fR\|(3) +functions. +.PP +Internally loading of certificates and CRLs is implemented via functions +\&\fBX509_load_cert_crl_file\fR, \fBX509_load_cert_file\fR and +\&\fBX509_load_crl_file\fR. These functions support parameter \fItype\fR, which +can be one of constants \fB\s-1FILETYPE_PEM\s0\fR, \fB\s-1FILETYPE_ASN1\s0\fR and +\&\fB\s-1FILETYPE_DEFAULT\s0\fR. They load certificates and/or CRLs from specified +file into memory cache of \fBX509_STORE\fR objects which given \fBctx\fR +parameter is associated with. +.PP +Functions \fBX509_load_cert_file\fR and +\&\fBX509_load_crl_file\fR can load both \s-1PEM\s0 and \s-1DER\s0 formats depending of +type value. Because \s-1DER\s0 format cannot contain more than one certificate +or \s-1CRL\s0 object (while \s-1PEM\s0 can contain several concatenated \s-1PEM\s0 objects) +\&\fBX509_load_cert_crl_file\fR with \fB\s-1FILETYPE_ASN1\s0\fR is equivalent to +\&\fBX509_load_cert_file\fR. +.PP +Constant \fB\s-1FILETYPE_DEFAULT\s0\fR with \s-1NULL\s0 filename causes these functions +to load default certificate store file (see +\&\fBX509_STORE_set_default_paths\fR\|(3). +.PP +Functions return number of objects loaded from file or 0 in case of +error. +.PP +Both methods support adding several certificate locations into one +\&\fBX509_STORE\fR. +.PP +This page documents certificate store formats used by these methods and +caching policy. +.SS "File Method" +.IX Subsection "File Method" +The \fBX509_LOOKUP_file\fR method loads all the certificates or CRLs +present in a file into memory at the time the file is added as a +lookup source. +.PP +File format is \s-1ASCII\s0 text which contains concatenated \s-1PEM\s0 certificates +and CRLs. +.PP +This method should be used by applications which work with a small +set of CAs. +.SS "Hashed Directory Method" +.IX Subsection "Hashed Directory Method" +\&\fBX509_LOOKUP_hash_dir\fR is a more advanced method, which loads +certificates and CRLs on demand, and caches them in memory once +they are loaded. As of OpenSSL 1.0.0, it also checks for newer CRLs +upon each lookup, so that newer CRLs are as soon as they appear in +the directory. +.PP +The directory should contain one certificate or \s-1CRL\s0 per file in \s-1PEM\s0 format, +with a file name of the form \fIhash\fR.\fIN\fR for a certificate, or +\&\fIhash\fR.\fBr\fR\fIN\fR for a \s-1CRL.\s0 +The \fIhash\fR is the value returned by the \fBX509_NAME_hash\fR\|(3) function applied +to the subject name for certificates or issuer name for CRLs. +The hash can also be obtained via the \fB\-hash\fR option of the \fBx509\fR\|(1) or +\&\fBcrl\fR\|(1) commands. +.PP +The .\fIN\fR or .\fBr\fR\fIN\fR suffix is a sequence number that starts at zero, and is +incremented consecutively for each certificate or \s-1CRL\s0 with the same \fIhash\fR +value. +Gaps in the sequence numbers are not supported, it is assumed that there are no +more objects with the same hash beyond the first missing number in the +sequence. +.PP +Sequence numbers make it possible for the directory to contain multiple +certificates with same subject name hash value. +For example, it is possible to have in the store several certificates with same +subject or several CRLs with same issuer (and, for example, different validity +period). +.PP +When checking for new CRLs once one \s-1CRL\s0 for given hash value is +loaded, hash_dir lookup method checks only for certificates with +sequence number greater than that of the already cached \s-1CRL.\s0 +.PP +Note that the hash algorithm used for subject name hashing changed in OpenSSL +1.0.0, and all certificate stores have to be rehashed when moving from OpenSSL +0.9.8 to 1.0.0. +.PP +OpenSSL includes a \fBrehash\fR\|(1) utility which creates symlinks with correct +hashed names for all files with .pem suffix in a given directory. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBX509_LOOKUP_hash_dir()\fR and \fBX509_LOOKUP_file()\fR always return a valid +\&\fBX509_LOOKUP_METHOD\fR structure. +.PP +\&\fBX509_load_cert_file()\fR, \fBX509_load_crl_file()\fR and \fBX509_load_cert_crl_file()\fR return +the number of loaded objects or 0 on error. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBPEM_read_PrivateKey\fR\|(3), +\&\fBX509_STORE_load_locations\fR\|(3), +\&\fBX509_store_add_lookup\fR\|(3), +\&\fBSSL_CTX_load_verify_locations\fR\|(3), +\&\fBX509_LOOKUP_meth_new\fR\|(3), +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2015\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_LOOKUP_meth_new.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_LOOKUP_meth_new.3 new file mode 100644 index 00000000..ffef831f --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_LOOKUP_meth_new.3 @@ -0,0 +1,310 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "X509_LOOKUP_METH_NEW 3" +.TH X509_LOOKUP_METH_NEW 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +X509_LOOKUP_METHOD, X509_LOOKUP_meth_new, X509_LOOKUP_meth_free, X509_LOOKUP_meth_set_new_item, X509_LOOKUP_meth_get_new_item, X509_LOOKUP_meth_set_free, X509_LOOKUP_meth_get_free, X509_LOOKUP_meth_set_init, X509_LOOKUP_meth_get_init, X509_LOOKUP_meth_set_shutdown, X509_LOOKUP_meth_get_shutdown, X509_LOOKUP_ctrl_fn, X509_LOOKUP_meth_set_ctrl, X509_LOOKUP_meth_get_ctrl, X509_LOOKUP_get_by_subject_fn, X509_LOOKUP_meth_set_get_by_subject, X509_LOOKUP_meth_get_get_by_subject, X509_LOOKUP_get_by_issuer_serial_fn, X509_LOOKUP_meth_set_get_by_issuer_serial, X509_LOOKUP_meth_get_get_by_issuer_serial, X509_LOOKUP_get_by_fingerprint_fn, X509_LOOKUP_meth_set_get_by_fingerprint, X509_LOOKUP_meth_get_get_by_fingerprint, X509_LOOKUP_get_by_alias_fn, X509_LOOKUP_meth_set_get_by_alias, X509_LOOKUP_meth_get_get_by_alias, X509_OBJECT_set1_X509, X509_OBJECT_set1_X509_CRL \&\- Routines to build up X509_LOOKUP methods +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& typedef x509_lookup_method_st X509_LOOKUP_METHOD; +\& +\& X509_LOOKUP_METHOD *X509_LOOKUP_meth_new(const char *name); +\& void X509_LOOKUP_meth_free(X509_LOOKUP_METHOD *method); +\& +\& int X509_LOOKUP_meth_set_new_item(X509_LOOKUP_METHOD *method, +\& int (*new_item) (X509_LOOKUP *ctx)); +\& int (*X509_LOOKUP_meth_get_new_item(const X509_LOOKUP_METHOD* method)) +\& (X509_LOOKUP *ctx); +\& +\& int X509_LOOKUP_meth_set_free(X509_LOOKUP_METHOD *method, +\& void (*free) (X509_LOOKUP *ctx)); +\& void (*X509_LOOKUP_meth_get_free(const X509_LOOKUP_METHOD* method)) +\& (X509_LOOKUP *ctx); +\& +\& int X509_LOOKUP_meth_set_init(X509_LOOKUP_METHOD *method, +\& int (*init) (X509_LOOKUP *ctx)); +\& int (*X509_LOOKUP_meth_get_init(const X509_LOOKUP_METHOD* method)) +\& (X509_LOOKUP *ctx); +\& +\& int X509_LOOKUP_meth_set_shutdown(X509_LOOKUP_METHOD *method, +\& int (*shutdown) (X509_LOOKUP *ctx)); +\& int (*X509_LOOKUP_meth_get_shutdown(const X509_LOOKUP_METHOD* method)) +\& (X509_LOOKUP *ctx); +\& +\& typedef int (*X509_LOOKUP_ctrl_fn)(X509_LOOKUP *ctx, int cmd, const char *argc, +\& long argl, char **ret); +\& int X509_LOOKUP_meth_set_ctrl(X509_LOOKUP_METHOD *method, +\& X509_LOOKUP_ctrl_fn ctrl_fn); +\& X509_LOOKUP_ctrl_fn X509_LOOKUP_meth_get_ctrl(const X509_LOOKUP_METHOD *method); +\& +\& typedef int (*X509_LOOKUP_get_by_subject_fn)(X509_LOOKUP *ctx, +\& X509_LOOKUP_TYPE type, +\& X509_NAME *name, +\& X509_OBJECT *ret); +\& int X509_LOOKUP_meth_set_get_by_subject(X509_LOOKUP_METHOD *method, +\& X509_LOOKUP_get_by_subject_fn fn); +\& X509_LOOKUP_get_by_subject_fn X509_LOOKUP_meth_get_get_by_subject( +\& const X509_LOOKUP_METHOD *method); +\& +\& typedef int (*X509_LOOKUP_get_by_issuer_serial_fn)(X509_LOOKUP *ctx, +\& X509_LOOKUP_TYPE type, +\& X509_NAME *name, +\& ASN1_INTEGER *serial, +\& X509_OBJECT *ret); +\& int X509_LOOKUP_meth_set_get_by_issuer_serial( +\& X509_LOOKUP_METHOD *method, X509_LOOKUP_get_by_issuer_serial_fn fn); +\& X509_LOOKUP_get_by_issuer_serial_fn X509_LOOKUP_meth_get_get_by_issuer_serial( +\& const X509_LOOKUP_METHOD *method); +\& +\& typedef int (*X509_LOOKUP_get_by_fingerprint_fn)(X509_LOOKUP *ctx, +\& X509_LOOKUP_TYPE type, +\& const unsigned char* bytes, +\& int len, +\& X509_OBJECT *ret); +\& int X509_LOOKUP_meth_set_get_by_fingerprint(X509_LOOKUP_METHOD *method, +\& X509_LOOKUP_get_by_fingerprint_fn fn); +\& X509_LOOKUP_get_by_fingerprint_fn X509_LOOKUP_meth_get_get_by_fingerprint( +\& const X509_LOOKUP_METHOD *method); +\& +\& typedef int (*X509_LOOKUP_get_by_alias_fn)(X509_LOOKUP *ctx, +\& X509_LOOKUP_TYPE type, +\& const char *str, +\& int len, +\& X509_OBJECT *ret); +\& int X509_LOOKUP_meth_set_get_by_alias(X509_LOOKUP_METHOD *method, +\& X509_LOOKUP_get_by_alias_fn fn); +\& X509_LOOKUP_get_by_alias_fn X509_LOOKUP_meth_get_get_by_alias( +\& const X509_LOOKUP_METHOD *method); +\& +\& int X509_OBJECT_set1_X509(X509_OBJECT *a, X509 *obj); +\& int X509_OBJECT_set1_X509_CRL(X509_OBJECT *a, X509_CRL *obj); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fBX509_LOOKUP_METHOD\fR type is a structure used for the implementation of new +X509_LOOKUP types. It provides a set of functions used by OpenSSL for the +implementation of various X509 and X509_CRL lookup capabilities. One instance +of an X509_LOOKUP_METHOD can be associated to many instantiations of an +\&\fBX509_LOOKUP\fR structure. +.PP +\&\fBX509_LOOKUP_meth_new()\fR creates a new \fBX509_LOOKUP_METHOD\fR structure. It should +be given a human-readable string containing a brief description of the lookup +method. +.PP +\&\fBX509_LOOKUP_meth_free()\fR destroys a \fBX509_LOOKUP_METHOD\fR structure. +.PP +\&\fBX509_LOOKUP_get_new_item()\fR and \fBX509_LOOKUP_set_new_item()\fR get and set the +function that is called when an \fBX509_LOOKUP\fR object is created with +\&\fBX509_LOOKUP_new()\fR. If an X509_LOOKUP_METHOD requires any per\-X509_LOOKUP +specific data, the supplied new_item function should allocate this data and +invoke \fBX509_LOOKUP_set_method_data\fR\|(3). +.PP +\&\fBX509_LOOKUP_get_free()\fR and \fBX509_LOOKUP_set_free()\fR get and set the function +that is used to free any method data that was allocated and set from within +new_item function. +.PP +\&\fBX509_LOOKUP_meth_get_init()\fR and \fBX509_LOOKUP_meth_set_init()\fR get and set the +function that is used to initialize the method data that was set with +\&\fBX509_LOOKUP_set_method_data\fR\|(3) as part of the new_item routine. +.PP +\&\fBX509_LOOKUP_meth_get_shutdown()\fR and \fBX509_LOOKUP_meth_set_shutdown()\fR get and set +the function that is used to shut down the method data whose state was +previously initialized in the init function. +.PP +\&\fBX509_LOOKUP_meth_get_ctrl()\fR and \fBX509_LOOKUP_meth_set_ctrl()\fR get and set a +function to be used to handle arbitrary control commands issued by +\&\fBX509_LOOKUP_ctrl()\fR. The control function is given the X509_LOOKUP +\&\fBctx\fR, along with the arguments passed by X509_LOOKUP_ctrl. \fBcmd\fR is +an arbitrary integer that defines some operation. \fBargc\fR is a pointer +to an array of characters. \fBargl\fR is an integer. \fBret\fR, if set, +points to a location where any return data should be written to. How +\&\fBargc\fR and \fBargl\fR are used depends entirely on the control function. +.PP +\&\fBX509_LOOKUP_set_get_by_subject()\fR, \fBX509_LOOKUP_set_get_by_issuer_serial()\fR, +\&\fBX509_LOOKUP_set_get_by_fingerprint()\fR, \fBX509_LOOKUP_set_get_by_alias()\fR set +the functions used to retrieve an X509 or X509_CRL object by the object's +subject, issuer, fingerprint, and alias respectively. These functions are given +the X509_LOOKUP context, the type of the X509_OBJECT being requested, parameters +related to the lookup, and an X509_OBJECT that will receive the requested +object. +.PP +Implementations must add objects they find to the \fBX509_STORE\fR object +using \fBX509_STORE_add_cert()\fR or \fBX509_STORE_add_crl()\fR. This increments +its reference count. However, the \fBX509_STORE_CTX_get_by_subject()\fR +function also increases the reference count which leads to one too +many references being held. Therefore applications should +additionally call \fBX509_free()\fR or \fBX509_CRL_free()\fR to decrement the +reference count again. +.PP +Implementations should also use either \fBX509_OBJECT_set1_X509()\fR or +\&\fBX509_OBJECT_set1_X509_CRL()\fR to set the result. Note that this also +increments the result's reference count. +.PP +Any method data that was created as a result of the new_item function +set by \fBX509_LOOKUP_meth_set_new_item()\fR can be accessed with +\&\fBX509_LOOKUP_get_method_data\fR\|(3). The \fBX509_STORE\fR object that owns the +X509_LOOKUP may be accessed with \fBX509_LOOKUP_get_store\fR\|(3). Successful +lookups should return 1, and unsuccessful lookups should return 0. +.PP +\&\fBX509_LOOKUP_get_get_by_subject()\fR, \fBX509_LOOKUP_get_get_by_issuer_serial()\fR, +\&\fBX509_LOOKUP_get_get_by_fingerprint()\fR, \fBX509_LOOKUP_get_get_by_alias()\fR retrieve +the function set by the corresponding setter. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +The \fBX509_LOOKUP_meth_set\fR functions return 1 on success or 0 on error. +.PP +The \fBX509_LOOKUP_meth_get\fR functions return the corresponding function +pointers. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBX509_STORE_new\fR\|(3), \fBSSL_CTX_set_cert_store\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +The functions described here were added in OpenSSL 1.1.0i. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2018\-2020 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_NAME_ENTRY_get_object.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_NAME_ENTRY_get_object.3 new file mode 100644 index 00000000..68955b3b --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_NAME_ENTRY_get_object.3 @@ -0,0 +1,224 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "X509_NAME_ENTRY_GET_OBJECT 3" +.TH X509_NAME_ENTRY_GET_OBJECT 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +X509_NAME_ENTRY_get_object, X509_NAME_ENTRY_get_data, X509_NAME_ENTRY_set_object, X509_NAME_ENTRY_set_data, X509_NAME_ENTRY_create_by_txt, X509_NAME_ENTRY_create_by_NID, X509_NAME_ENTRY_create_by_OBJ \- X509_NAME_ENTRY utility functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& ASN1_OBJECT *X509_NAME_ENTRY_get_object(const X509_NAME_ENTRY *ne); +\& ASN1_STRING *X509_NAME_ENTRY_get_data(const X509_NAME_ENTRY *ne); +\& +\& int X509_NAME_ENTRY_set_object(X509_NAME_ENTRY *ne, const ASN1_OBJECT *obj); +\& int X509_NAME_ENTRY_set_data(X509_NAME_ENTRY *ne, int type, +\& const unsigned char *bytes, int len); +\& +\& X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_txt(X509_NAME_ENTRY **ne, const char *field, +\& int type, const unsigned char *bytes, +\& int len); +\& X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_NID(X509_NAME_ENTRY **ne, int nid, +\& int type, const unsigned char *bytes, +\& int len); +\& X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_OBJ(X509_NAME_ENTRY **ne, +\& const ASN1_OBJECT *obj, int type, +\& const unsigned char *bytes, int len); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBX509_NAME_ENTRY_get_object()\fR retrieves the field name of \fBne\fR in +and \fB\s-1ASN1_OBJECT\s0\fR structure. +.PP +\&\fBX509_NAME_ENTRY_get_data()\fR retrieves the field value of \fBne\fR in +and \fB\s-1ASN1_STRING\s0\fR structure. +.PP +\&\fBX509_NAME_ENTRY_set_object()\fR sets the field name of \fBne\fR to \fBobj\fR. +.PP +\&\fBX509_NAME_ENTRY_set_data()\fR sets the field value of \fBne\fR to string type +\&\fBtype\fR and value determined by \fBbytes\fR and \fBlen\fR. +.PP +\&\fBX509_NAME_ENTRY_create_by_txt()\fR, \fBX509_NAME_ENTRY_create_by_NID()\fR +and \fBX509_NAME_ENTRY_create_by_OBJ()\fR create and return an +\&\fBX509_NAME_ENTRY\fR structure. +.SH "NOTES" +.IX Header "NOTES" +\&\fBX509_NAME_ENTRY_get_object()\fR and \fBX509_NAME_ENTRY_get_data()\fR can be +used to examine an \fBX509_NAME_ENTRY\fR function as returned by +\&\fBX509_NAME_get_entry()\fR for example. +.PP +\&\fBX509_NAME_ENTRY_create_by_txt()\fR, \fBX509_NAME_ENTRY_create_by_OBJ()\fR, +\&\fBX509_NAME_ENTRY_create_by_NID()\fR and \fBX509_NAME_ENTRY_set_data()\fR +are seldom used in practice because \fBX509_NAME_ENTRY\fR structures +are almost always part of \fBX509_NAME\fR structures and the +corresponding \fBX509_NAME\fR functions are typically used to +create and add new entries in a single operation. +.PP +The arguments of these functions support similar options to the similarly +named ones of the corresponding \fBX509_NAME\fR functions such as +\&\fBX509_NAME_add_entry_by_txt()\fR. So for example \fBtype\fR can be set to +\&\fB\s-1MBSTRING_ASC\s0\fR but in the case of \fBX509_set_data()\fR the field name must be +set first so the relevant field information can be looked up internally. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBX509_NAME_ENTRY_get_object()\fR returns a valid \fB\s-1ASN1_OBJECT\s0\fR structure if it is +set or \s-1NULL\s0 if an error occurred. +.PP +\&\fBX509_NAME_ENTRY_get_data()\fR returns a valid \fB\s-1ASN1_STRING\s0\fR structure if it is set +or \s-1NULL\s0 if an error occurred. +.PP +\&\fBX509_NAME_ENTRY_set_object()\fR and \fBX509_NAME_ENTRY_set_data()\fR return 1 on success +or 0 on error. +.PP +\&\fBX509_NAME_ENTRY_create_by_txt()\fR, \fBX509_NAME_ENTRY_create_by_NID()\fR and +\&\fBX509_NAME_ENTRY_create_by_OBJ()\fR return a valid \fBX509_NAME_ENTRY\fR on success or +\&\s-1NULL\s0 if an error occurred. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_get_error\fR\|(3), \fBd2i_X509_NAME\fR\|(3), +\&\fBOBJ_nid2obj\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2002\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_NAME_add_entry_by_txt.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_NAME_add_entry_by_txt.3 new file mode 100644 index 00000000..8719140d --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_NAME_add_entry_by_txt.3 @@ -0,0 +1,257 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "X509_NAME_ADD_ENTRY_BY_TXT 3" +.TH X509_NAME_ADD_ENTRY_BY_TXT 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +X509_NAME_add_entry_by_txt, X509_NAME_add_entry_by_OBJ, X509_NAME_add_entry_by_NID, X509_NAME_add_entry, X509_NAME_delete_entry \- X509_NAME modification functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int X509_NAME_add_entry_by_txt(X509_NAME *name, const char *field, int type, +\& const unsigned char *bytes, int len, int loc, int set); +\& +\& int X509_NAME_add_entry_by_OBJ(X509_NAME *name, const ASN1_OBJECT *obj, int type, +\& const unsigned char *bytes, int len, int loc, int set); +\& +\& int X509_NAME_add_entry_by_NID(X509_NAME *name, int nid, int type, +\& const unsigned char *bytes, int len, int loc, int set); +\& +\& int X509_NAME_add_entry(X509_NAME *name, const X509_NAME_ENTRY *ne, int loc, int set); +\& +\& X509_NAME_ENTRY *X509_NAME_delete_entry(X509_NAME *name, int loc); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBX509_NAME_add_entry_by_txt()\fR, \fBX509_NAME_add_entry_by_OBJ()\fR and +\&\fBX509_NAME_add_entry_by_NID()\fR add a field whose name is defined +by a string \fBfield\fR, an object \fBobj\fR or a \s-1NID\s0 \fBnid\fR respectively. +The field value to be added is in \fBbytes\fR of length \fBlen\fR. If +\&\fBlen\fR is \-1 then the field length is calculated internally using +strlen(bytes). +.PP +The type of field is determined by \fBtype\fR which can either be a +definition of the type of \fBbytes\fR (such as \fB\s-1MBSTRING_ASC\s0\fR) or a +standard \s-1ASN1\s0 type (such as \fBV_ASN1_IA5STRING\fR). The new entry is +added to a position determined by \fBloc\fR and \fBset\fR. +.PP +\&\fBX509_NAME_add_entry()\fR adds a copy of \fBX509_NAME_ENTRY\fR structure \fBne\fR +to \fBname\fR. The new entry is added to a position determined by \fBloc\fR +and \fBset\fR. Since a copy of \fBne\fR is added \fBne\fR must be freed up after +the call. +.PP +\&\fBX509_NAME_delete_entry()\fR deletes an entry from \fBname\fR at position +\&\fBloc\fR. The deleted entry is returned and must be freed up. +.SH "NOTES" +.IX Header "NOTES" +The use of string types such as \fB\s-1MBSTRING_ASC\s0\fR or \fB\s-1MBSTRING_UTF8\s0\fR +is strongly recommended for the \fBtype\fR parameter. This allows the +internal code to correctly determine the type of the field and to +apply length checks according to the relevant standards. This is +done using \fBASN1_STRING_set_by_NID()\fR. +.PP +If instead an \s-1ASN1\s0 type is used no checks are performed and the +supplied data in \fBbytes\fR is used directly. +.PP +In \fBX509_NAME_add_entry_by_txt()\fR the \fBfield\fR string represents +the field name using OBJ_txt2obj(field, 0). +.PP +The \fBloc\fR and \fBset\fR parameters determine where a new entry should +be added. For almost all applications \fBloc\fR can be set to \-1 and \fBset\fR +to 0. This adds a new entry to the end of \fBname\fR as a single valued +RelativeDistinguishedName (\s-1RDN\s0). +.PP +\&\fBloc\fR actually determines the index where the new entry is inserted: +if it is \-1 it is appended. +.PP +\&\fBset\fR determines how the new type is added. If it is zero a +new \s-1RDN\s0 is created. +.PP +If \fBset\fR is \-1 or 1 it is added to the previous or next \s-1RDN\s0 +structure respectively. This will then be a multivalued \s-1RDN:\s0 +since multivalues RDNs are very seldom used \fBset\fR is almost +always set to zero. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBX509_NAME_add_entry_by_txt()\fR, \fBX509_NAME_add_entry_by_OBJ()\fR, +\&\fBX509_NAME_add_entry_by_NID()\fR and \fBX509_NAME_add_entry()\fR return 1 for +success of 0 if an error occurred. +.PP +\&\fBX509_NAME_delete_entry()\fR returns either the deleted \fBX509_NAME_ENTRY\fR +structure of \fB\s-1NULL\s0\fR if an error occurred. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +Create an \fBX509_NAME\fR structure: +.PP +\&\*(L"C=UK, O=Disorganized Organization, CN=Joe Bloggs\*(R" +.PP +.Vb 1 +\& X509_NAME *nm; +\& +\& nm = X509_NAME_new(); +\& if (nm == NULL) +\& /* Some error */ +\& if (!X509_NAME_add_entry_by_txt(nm, "C", MBSTRING_ASC, +\& "UK", \-1, \-1, 0)) +\& /* Error */ +\& if (!X509_NAME_add_entry_by_txt(nm, "O", MBSTRING_ASC, +\& "Disorganized Organization", \-1, \-1, 0)) +\& /* Error */ +\& if (!X509_NAME_add_entry_by_txt(nm, "CN", MBSTRING_ASC, +\& "Joe Bloggs", \-1, \-1, 0)) +\& /* Error */ +.Ve +.SH "BUGS" +.IX Header "BUGS" +\&\fBtype\fR can still be set to \fBV_ASN1_APP_CHOOSE\fR to use a +different algorithm to determine field types. Since this form does +not understand multicharacter types, performs no length checks and +can result in invalid field types its use is strongly discouraged. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_get_error\fR\|(3), \fBd2i_X509_NAME\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2002\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_NAME_get0_der.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_NAME_get0_der.3 new file mode 100644 index 00000000..153d392b --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_NAME_get0_der.3 @@ -0,0 +1,171 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "X509_NAME_GET0_DER 3" +.TH X509_NAME_GET0_DER 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +X509_NAME_get0_der \- get X509_NAME DER encoding +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int X509_NAME_get0_der(X509_NAME *nm, const unsigned char **pder, +\& size_t *pderlen) +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The function \fBX509_NAME_get0_der()\fR returns an internal pointer to the +encoding of an \fBX509_NAME\fR structure in \fB*pder\fR and consisting of +\&\fB*pderlen\fR bytes. It is useful for applications that wish to examine +the encoding of an \fBX509_NAME\fR structure without copying it. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +The function \fBX509_NAME_get0_der()\fR returns 1 for success and 0 if an error +occurred. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBd2i_X509\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2002\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_NAME_get_index_by_NID.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_NAME_get_index_by_NID.3 new file mode 100644 index 00000000..158153a4 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_NAME_get_index_by_NID.3 @@ -0,0 +1,254 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "X509_NAME_GET_INDEX_BY_NID 3" +.TH X509_NAME_GET_INDEX_BY_NID 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +X509_NAME_get_index_by_NID, X509_NAME_get_index_by_OBJ, X509_NAME_get_entry, X509_NAME_entry_count, X509_NAME_get_text_by_NID, X509_NAME_get_text_by_OBJ \- X509_NAME lookup and enumeration functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int X509_NAME_get_index_by_NID(X509_NAME *name, int nid, int lastpos); +\& int X509_NAME_get_index_by_OBJ(X509_NAME *name, const ASN1_OBJECT *obj, int lastpos); +\& +\& int X509_NAME_entry_count(const X509_NAME *name); +\& X509_NAME_ENTRY *X509_NAME_get_entry(const X509_NAME *name, int loc); +\& +\& int X509_NAME_get_text_by_NID(X509_NAME *name, int nid, char *buf, int len); +\& int X509_NAME_get_text_by_OBJ(X509_NAME *name, const ASN1_OBJECT *obj, char *buf, int len); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +These functions allow an \fBX509_NAME\fR structure to be examined. The +\&\fBX509_NAME\fR structure is the same as the \fBName\fR type defined in +\&\s-1RFC2459\s0 (and elsewhere) and used for example in certificate subject +and issuer names. +.PP +\&\fBX509_NAME_get_index_by_NID()\fR and \fBX509_NAME_get_index_by_OBJ()\fR retrieve +the next index matching \fBnid\fR or \fBobj\fR after \fBlastpos\fR. \fBlastpos\fR +should initially be set to \-1. If there are no more entries \-1 is returned. +If \fBnid\fR is invalid (doesn't correspond to a valid \s-1OID\s0) then \-2 is returned. +.PP +\&\fBX509_NAME_entry_count()\fR returns the total number of entries in \fBname\fR. +.PP +\&\fBX509_NAME_get_entry()\fR retrieves the \fBX509_NAME_ENTRY\fR from \fBname\fR +corresponding to index \fBloc\fR. Acceptable values for \fBloc\fR run from +0 to (X509_NAME_entry_count(name) \- 1). The value returned is an +internal pointer which must not be freed. +.PP +\&\fBX509_NAME_get_text_by_NID()\fR, \fBX509_NAME_get_text_by_OBJ()\fR retrieve +the \*(L"text\*(R" from the first entry in \fBname\fR which matches \fBnid\fR or +\&\fBobj\fR, if no such entry exists \-1 is returned. At most \fBlen\fR bytes +will be written and the text written to \fBbuf\fR will be null +terminated. The length of the output string written is returned +excluding the terminating null. If \fBbuf\fR is <\s-1NULL\s0> then the amount +of space needed in \fBbuf\fR (excluding the final null) is returned. +.SH "NOTES" +.IX Header "NOTES" +\&\fBX509_NAME_get_text_by_NID()\fR and \fBX509_NAME_get_text_by_OBJ()\fR should be +considered deprecated because they +have various limitations which make them +of minimal use in practice. They can only find the first matching +entry and will copy the contents of the field verbatim: this can +be highly confusing if the target is a multicharacter string type +like a BMPString or a UTF8String. +.PP +For a more general solution \fBX509_NAME_get_index_by_NID()\fR or +\&\fBX509_NAME_get_index_by_OBJ()\fR should be used followed by +\&\fBX509_NAME_get_entry()\fR on any matching indices and then the +various \fBX509_NAME_ENTRY\fR utility functions on the result. +.PP +The list of all relevant \fBNID_*\fR and \fBOBJ_* codes\fR can be found in +the source code header files and/or +. +.PP +Applications which could pass invalid NIDs to \fBX509_NAME_get_index_by_NID()\fR +should check for the return value of \-2. Alternatively the \s-1NID\s0 validity +can be determined first by checking OBJ_nid2obj(nid) is not \s-1NULL.\s0 +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBX509_NAME_get_index_by_NID()\fR and \fBX509_NAME_get_index_by_OBJ()\fR +return the index of the next matching entry or \-1 if not found. +\&\fBX509_NAME_get_index_by_NID()\fR can also return \-2 if the supplied +\&\s-1NID\s0 is invalid. +.PP +\&\fBX509_NAME_entry_count()\fR returns the total number of entries. +.PP +\&\fBX509_NAME_get_entry()\fR returns an \fBX509_NAME\fR pointer to the +requested entry or \fB\s-1NULL\s0\fR if the index is invalid. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +Process all entries: +.PP +.Vb 2 +\& int i; +\& X509_NAME_ENTRY *e; +\& +\& for (i = 0; i < X509_NAME_entry_count(nm); i++) { +\& e = X509_NAME_get_entry(nm, i); +\& /* Do something with e */ +\& } +.Ve +.PP +Process all commonName entries: +.PP +.Vb 2 +\& int lastpos = \-1; +\& X509_NAME_ENTRY *e; +\& +\& for (;;) { +\& lastpos = X509_NAME_get_index_by_NID(nm, NID_commonName, lastpos); +\& if (lastpos == \-1) +\& break; +\& e = X509_NAME_get_entry(nm, lastpos); +\& /* Do something with e */ +\& } +.Ve +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_get_error\fR\|(3), \fBd2i_X509_NAME\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2002\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_NAME_print_ex.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_NAME_print_ex.3 new file mode 100644 index 00000000..e4b8884c --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_NAME_print_ex.3 @@ -0,0 +1,252 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "X509_NAME_PRINT_EX 3" +.TH X509_NAME_PRINT_EX 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +X509_NAME_print_ex, X509_NAME_print_ex_fp, X509_NAME_print, X509_NAME_oneline \- X509_NAME printing routines +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int X509_NAME_print_ex(BIO *out, const X509_NAME *nm, int indent, unsigned long flags); +\& int X509_NAME_print_ex_fp(FILE *fp, const X509_NAME *nm, int indent, unsigned long flags); +\& char *X509_NAME_oneline(const X509_NAME *a, char *buf, int size); +\& int X509_NAME_print(BIO *bp, const X509_NAME *name, int obase); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBX509_NAME_print_ex()\fR prints a human readable version of \fBnm\fR to \s-1BIO\s0 \fBout\fR. Each +line (for multiline formats) is indented by \fBindent\fR spaces. The output format +can be extensively customised by use of the \fBflags\fR parameter. +.PP +\&\fBX509_NAME_print_ex_fp()\fR is identical to \fBX509_NAME_print_ex()\fR except the output is +written to \s-1FILE\s0 pointer \fBfp\fR. +.PP +\&\fBX509_NAME_oneline()\fR prints an \s-1ASCII\s0 version of \fBa\fR to \fBbuf\fR. +If \fBbuf\fR is \fB\s-1NULL\s0\fR then a buffer is dynamically allocated and returned, and +\&\fBsize\fR is ignored. +Otherwise, at most \fBsize\fR bytes will be written, including the ending '\e0', +and \fBbuf\fR is returned. +.PP +\&\fBX509_NAME_print()\fR prints out \fBname\fR to \fBbp\fR indenting each line by \fBobase\fR +characters. Multiple lines are used if the output (including indent) exceeds +80 characters. +.SH "NOTES" +.IX Header "NOTES" +The functions \fBX509_NAME_oneline()\fR and \fBX509_NAME_print()\fR +produce a non standard output form, they don't handle multi character fields and +have various quirks and inconsistencies. +Their use is strongly discouraged in new applications and they could +be deprecated in a future release. +.PP +Although there are a large number of possible flags for most purposes +\&\fB\s-1XN_FLAG_ONELINE\s0\fR, \fB\s-1XN_FLAG_MULTILINE\s0\fR or \fB\s-1XN_FLAG_RFC2253\s0\fR will suffice. +As noted on the \fBASN1_STRING_print_ex\fR\|(3) manual page +for \s-1UTF8\s0 terminals the \fB\s-1ASN1_STRFLGS_ESC_MSB\s0\fR should be unset: so for example +\&\fB\s-1XN_FLAG_ONELINE &\s0 ~ASN1_STRFLGS_ESC_MSB\fR would be used. +.PP +The complete set of the flags supported by \fBX509_NAME_print_ex()\fR is listed below. +.PP +Several options can be ored together. +.PP +The options \fB\s-1XN_FLAG_SEP_COMMA_PLUS\s0\fR, \fB\s-1XN_FLAG_SEP_CPLUS_SPC\s0\fR, +\&\fB\s-1XN_FLAG_SEP_SPLUS_SPC\s0\fR and \fB\s-1XN_FLAG_SEP_MULTILINE\s0\fR determine the field separators +to use. Two distinct separators are used between distinct RelativeDistinguishedName +components and separate values in the same \s-1RDN\s0 for a multi-valued \s-1RDN.\s0 Multi-valued +RDNs are currently very rare so the second separator will hardly ever be used. +.PP +\&\fB\s-1XN_FLAG_SEP_COMMA_PLUS\s0\fR uses comma and plus as separators. \fB\s-1XN_FLAG_SEP_CPLUS_SPC\s0\fR +uses comma and plus with spaces: this is more readable that plain comma and plus. +\&\fB\s-1XN_FLAG_SEP_SPLUS_SPC\s0\fR uses spaced semicolon and plus. \fB\s-1XN_FLAG_SEP_MULTILINE\s0\fR uses +spaced newline and plus respectively. +.PP +If \fB\s-1XN_FLAG_DN_REV\s0\fR is set the whole \s-1DN\s0 is printed in reversed order. +.PP +The fields \fB\s-1XN_FLAG_FN_SN\s0\fR, \fB\s-1XN_FLAG_FN_LN\s0\fR, \fB\s-1XN_FLAG_FN_OID\s0\fR, +\&\fB\s-1XN_FLAG_FN_NONE\s0\fR determine how a field name is displayed. It will +use the short name (e.g. \s-1CN\s0) the long name (e.g. commonName) always +use \s-1OID\s0 numerical form (normally OIDs are only used if the field name is not +recognised) and no field name respectively. +.PP +If \fB\s-1XN_FLAG_SPC_EQ\s0\fR is set then spaces will be placed around the '=' character +separating field names and values. +.PP +If \fB\s-1XN_FLAG_DUMP_UNKNOWN_FIELDS\s0\fR is set then the encoding of unknown fields is +printed instead of the values. +.PP +If \fB\s-1XN_FLAG_FN_ALIGN\s0\fR is set then field names are padded to 20 characters: this +is only of use for multiline format. +.PP +Additionally all the options supported by \fBASN1_STRING_print_ex()\fR can be used to +control how each field value is displayed. +.PP +In addition a number options can be set for commonly used formats. +.PP +\&\fB\s-1XN_FLAG_RFC2253\s0\fR sets options which produce an output compatible with \s-1RFC2253\s0 it +is equivalent to: + \fB\s-1ASN1_STRFLGS_RFC2253\s0 | \s-1XN_FLAG_SEP_COMMA_PLUS\s0 | \s-1XN_FLAG_DN_REV\s0 | \s-1XN_FLAG_FN_SN\s0 | \s-1XN_FLAG_DUMP_UNKNOWN_FIELDS\s0\fR +.PP +\&\fB\s-1XN_FLAG_ONELINE\s0\fR is a more readable one line format which is the same as: + \fB\s-1ASN1_STRFLGS_RFC2253\s0 | \s-1ASN1_STRFLGS_ESC_QUOTE\s0 | \s-1XN_FLAG_SEP_CPLUS_SPC\s0 | \s-1XN_FLAG_SPC_EQ\s0 | \s-1XN_FLAG_FN_SN\s0\fR +.PP +\&\fB\s-1XN_FLAG_MULTILINE\s0\fR is a multiline format which is the same as: + \fB\s-1ASN1_STRFLGS_ESC_CTRL\s0 | \s-1ASN1_STRFLGS_ESC_MSB\s0 | \s-1XN_FLAG_SEP_MULTILINE\s0 | \s-1XN_FLAG_SPC_EQ\s0 | \s-1XN_FLAG_FN_LN\s0 | \s-1XN_FLAG_FN_ALIGN\s0\fR +.PP +\&\fB\s-1XN_FLAG_COMPAT\s0\fR uses a format identical to \fBX509_NAME_print()\fR: in fact it calls \fBX509_NAME_print()\fR internally. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBX509_NAME_oneline()\fR returns a valid string on success or \s-1NULL\s0 on error. +.PP +\&\fBX509_NAME_print()\fR returns 1 on success or 0 on error. +.PP +\&\fBX509_NAME_print_ex()\fR and \fBX509_NAME_print_ex_fp()\fR return 1 on success or 0 on error +if the \fB\s-1XN_FLAG_COMPAT\s0\fR is set, which is the same as \fBX509_NAME_print()\fR. Otherwise, +it returns \-1 on error or other values on success. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBASN1_STRING_print_ex\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2002\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_PUBKEY_new.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_PUBKEY_new.3 new file mode 100644 index 00000000..bff3d52d --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_PUBKEY_new.3 @@ -0,0 +1,248 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "X509_PUBKEY_NEW 3" +.TH X509_PUBKEY_NEW 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +X509_PUBKEY_new, X509_PUBKEY_free, X509_PUBKEY_set, X509_PUBKEY_get0, X509_PUBKEY_get, d2i_PUBKEY, i2d_PUBKEY, d2i_PUBKEY_bio, d2i_PUBKEY_fp, i2d_PUBKEY_fp, i2d_PUBKEY_bio, X509_PUBKEY_set0_param, X509_PUBKEY_get0_param \- SubjectPublicKeyInfo public key functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& X509_PUBKEY *X509_PUBKEY_new(void); +\& void X509_PUBKEY_free(X509_PUBKEY *a); +\& +\& int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey); +\& EVP_PKEY *X509_PUBKEY_get0(X509_PUBKEY *key); +\& EVP_PKEY *X509_PUBKEY_get(X509_PUBKEY *key); +\& +\& EVP_PKEY *d2i_PUBKEY(EVP_PKEY **a, const unsigned char **pp, long length); +\& int i2d_PUBKEY(EVP_PKEY *a, unsigned char **pp); +\& +\& EVP_PKEY *d2i_PUBKEY_bio(BIO *bp, EVP_PKEY **a); +\& EVP_PKEY *d2i_PUBKEY_fp(FILE *fp, EVP_PKEY **a); +\& +\& int i2d_PUBKEY_fp(FILE *fp, EVP_PKEY *pkey); +\& int i2d_PUBKEY_bio(BIO *bp, EVP_PKEY *pkey); +\& +\& int X509_PUBKEY_set0_param(X509_PUBKEY *pub, ASN1_OBJECT *aobj, +\& int ptype, void *pval, +\& unsigned char *penc, int penclen); +\& int X509_PUBKEY_get0_param(ASN1_OBJECT **ppkalg, +\& const unsigned char **pk, int *ppklen, +\& X509_ALGOR **pa, X509_PUBKEY *pub); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fBX509_PUBKEY\fR structure represents the \s-1ASN.1\s0 \fBSubjectPublicKeyInfo\fR +structure defined in \s-1RFC5280\s0 and used in certificates and certificate requests. +.PP +\&\fBX509_PUBKEY_new()\fR allocates and initializes an \fBX509_PUBKEY\fR structure. +.PP +\&\fBX509_PUBKEY_free()\fR frees up \fBX509_PUBKEY\fR structure \fBa\fR. If \fBa\fR is \s-1NULL\s0 +nothing is done. +.PP +\&\fBX509_PUBKEY_set()\fR sets the public key in \fB*x\fR to the public key contained +in the \fB\s-1EVP_PKEY\s0\fR structure \fBpkey\fR. If \fB*x\fR is not \s-1NULL\s0 any existing +public key structure will be freed. +.PP +\&\fBX509_PUBKEY_get0()\fR returns the public key contained in \fBkey\fR. The returned +value is an internal pointer which \fB\s-1MUST NOT\s0\fR be freed after use. +.PP +\&\fBX509_PUBKEY_get()\fR is similar to \fBX509_PUBKEY_get0()\fR except the reference +count on the returned key is incremented so it \fB\s-1MUST\s0\fR be freed using +\&\fBEVP_PKEY_free()\fR after use. +.PP +\&\fBd2i_PUBKEY()\fR and \fBi2d_PUBKEY()\fR decode and encode an \fB\s-1EVP_PKEY\s0\fR structure +using \fBSubjectPublicKeyInfo\fR format. They otherwise follow the conventions of +other \s-1ASN.1\s0 functions such as \fBd2i_X509()\fR. +.PP +\&\fBd2i_PUBKEY_bio()\fR, \fBd2i_PUBKEY_fp()\fR, \fBi2d_PUBKEY_bio()\fR and \fBi2d_PUBKEY_fp()\fR are +similar to \fBd2i_PUBKEY()\fR and \fBi2d_PUBKEY()\fR except they decode or encode using a +\&\fB\s-1BIO\s0\fR or \fB\s-1FILE\s0\fR pointer. +.PP +\&\fBX509_PUBKEY_set0_param()\fR sets the public key parameters of \fBpub\fR. The +\&\s-1OID\s0 associated with the algorithm is set to \fBaobj\fR. The type of the +algorithm parameters is set to \fBtype\fR using the structure \fBpval\fR. +The encoding of the public key itself is set to the \fBpenclen\fR +bytes contained in buffer \fBpenc\fR. On success ownership of all the supplied +parameters is passed to \fBpub\fR so they must not be freed after the +call. +.PP +\&\fBX509_PUBKEY_get0_param()\fR retrieves the public key parameters from \fBpub\fR, +\&\fB*ppkalg\fR is set to the associated \s-1OID\s0 and the encoding consists of +\&\fB*ppklen\fR bytes at \fB*pk\fR, \fB*pa\fR is set to the associated +AlgorithmIdentifier for the public key. If the value of any of these +parameters is not required it can be set to \fB\s-1NULL\s0\fR. All of the +retrieved pointers are internal and must not be freed after the +call. +.SH "NOTES" +.IX Header "NOTES" +The \fBX509_PUBKEY\fR functions can be used to encode and decode public keys +in a standard format. +.PP +In many cases applications will not call the \fBX509_PUBKEY\fR functions +directly: they will instead call wrapper functions such as \fBX509_get0_pubkey()\fR. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +If the allocation fails, \fBX509_PUBKEY_new()\fR returns \fB\s-1NULL\s0\fR and sets an error +code that can be obtained by \fBERR_get_error\fR\|(3). +.PP +Otherwise it returns a pointer to the newly allocated structure. +.PP +\&\fBX509_PUBKEY_free()\fR does not return a value. +.PP +\&\fBX509_PUBKEY_get0()\fR and \fBX509_PUBKEY_get()\fR return a pointer to an \fB\s-1EVP_PKEY\s0\fR +structure or \fB\s-1NULL\s0\fR if an error occurs. +.PP +\&\fBX509_PUBKEY_set()\fR, \fBX509_PUBKEY_set0_param()\fR and \fBX509_PUBKEY_get0_param()\fR +return 1 for success and 0 if an error occurred. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBd2i_X509\fR\|(3), +\&\fBERR_get_error\fR\|(3), +\&\fBX509_get_pubkey\fR\|(3), +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_SIG_get0.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_SIG_get0.3 new file mode 100644 index 00000000..b65a7e0d --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_SIG_get0.3 @@ -0,0 +1,172 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "X509_SIG_GET0 3" +.TH X509_SIG_GET0 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +X509_SIG_get0, X509_SIG_getm \- DigestInfo functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& void X509_SIG_get0(const X509_SIG *sig, const X509_ALGOR **palg, +\& const ASN1_OCTET_STRING **pdigest); +\& void X509_SIG_getm(X509_SIG *sig, X509_ALGOR **palg, +\& ASN1_OCTET_STRING **pdigest, +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBX509_SIG_get0()\fR returns pointers to the algorithm identifier and digest +value in \fBsig\fR. \fBX509_SIG_getm()\fR is identical to \fBX509_SIG_get0()\fR +except the pointers returned are not constant and can be modified: +for example to initialise them. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBX509_SIG_get0()\fR and \fBX509_SIG_getm()\fR return no values. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBd2i_X509\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2002\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_STORE_CTX_get_error.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_STORE_CTX_get_error.3 new file mode 100644 index 00000000..763684bd --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_STORE_CTX_get_error.3 @@ -0,0 +1,416 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "X509_STORE_CTX_GET_ERROR 3" +.TH X509_STORE_CTX_GET_ERROR 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +X509_STORE_CTX_get_error, X509_STORE_CTX_set_error, X509_STORE_CTX_get_error_depth, X509_STORE_CTX_set_error_depth, X509_STORE_CTX_get_current_cert, X509_STORE_CTX_set_current_cert, X509_STORE_CTX_get0_cert, X509_STORE_CTX_get1_chain, X509_verify_cert_error_string \- get or set certificate verification status information +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int X509_STORE_CTX_get_error(X509_STORE_CTX *ctx); +\& void X509_STORE_CTX_set_error(X509_STORE_CTX *ctx, int s); +\& int X509_STORE_CTX_get_error_depth(X509_STORE_CTX *ctx); +\& void X509_STORE_CTX_set_error_depth(X509_STORE_CTX *ctx, int depth); +\& X509 *X509_STORE_CTX_get_current_cert(X509_STORE_CTX *ctx); +\& void X509_STORE_CTX_set_current_cert(X509_STORE_CTX *ctx, X509 *x); +\& X509 *X509_STORE_CTX_get0_cert(X509_STORE_CTX *ctx); +\& +\& STACK_OF(X509) *X509_STORE_CTX_get1_chain(X509_STORE_CTX *ctx); +\& +\& const char *X509_verify_cert_error_string(long n); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +These functions are typically called after \fBX509_verify_cert()\fR has indicated +an error or in a verification callback to determine the nature of an error. +.PP +\&\fBX509_STORE_CTX_get_error()\fR returns the error code of \fBctx\fR, see +the \fB\s-1ERROR CODES\s0\fR section for a full description of all error codes. +.PP +\&\fBX509_STORE_CTX_set_error()\fR sets the error code of \fBctx\fR to \fBs\fR. For example +it might be used in a verification callback to set an error based on additional +checks. +.PP +\&\fBX509_STORE_CTX_get_error_depth()\fR returns the \fBdepth\fR of the error. This is a +non-negative integer representing where in the certificate chain the error +occurred. If it is zero it occurred in the end entity certificate, one if +it is the certificate which signed the end entity certificate and so on. +.PP +\&\fBX509_STORE_CTX_set_error_depth()\fR sets the error \fBdepth\fR. +This can be used in combination with \fBX509_STORE_CTX_set_error()\fR to set the +depth at which an error condition was detected. +.PP +\&\fBX509_STORE_CTX_get_current_cert()\fR returns the certificate in \fBctx\fR which +caused the error or \fB\s-1NULL\s0\fR if no certificate is relevant. +.PP +\&\fBX509_STORE_CTX_set_current_cert()\fR sets the certificate \fBx\fR in \fBctx\fR which +caused the error. +This value is not intended to remain valid for very long, and remains owned by +the caller. +It may be examined by a verification callback invoked to handle each error +encountered during chain verification and is no longer required after such a +callback. +If a callback wishes the save the certificate for use after it returns, it +needs to increment its reference count via \fBX509_up_ref\fR\|(3). +Once such a \fIsaved\fR certificate is no longer needed it can be freed with +\&\fBX509_free\fR\|(3). +.PP +\&\fBX509_STORE_CTX_get0_cert()\fR retrieves an internal pointer to the +certificate being verified by the \fBctx\fR. +.PP +\&\fBX509_STORE_CTX_get1_chain()\fR returns a complete validate chain if a previous +call to \fBX509_verify_cert()\fR is successful. If the call to \fBX509_verify_cert()\fR +is \fBnot\fR successful the returned chain may be incomplete or invalid. The +returned chain persists after the \fBctx\fR structure is freed, when it is +no longer needed it should be free up using: +.PP +.Vb 1 +\& sk_X509_pop_free(chain, X509_free); +.Ve +.PP +\&\fBX509_verify_cert_error_string()\fR returns a human readable error string for +verification error \fBn\fR. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBX509_STORE_CTX_get_error()\fR returns \fBX509_V_OK\fR or an error code. +.PP +\&\fBX509_STORE_CTX_get_error_depth()\fR returns a non-negative error depth. +.PP +\&\fBX509_STORE_CTX_get_current_cert()\fR returns the certificate which caused the +error or \fB\s-1NULL\s0\fR if no certificate is relevant to the error. +.PP +\&\fBX509_verify_cert_error_string()\fR returns a human readable error string for +verification error \fBn\fR. +.SH "ERROR CODES" +.IX Header "ERROR CODES" +A list of error codes and messages is shown below. Some of the +error codes are defined but currently never returned: these are described as +\&\*(L"unused\*(R". +.IP "\fBX509_V_OK: ok\fR" 4 +.IX Item "X509_V_OK: ok" +the operation was successful. +.IP "\fBX509_V_ERR_UNABLE_TO_GET_ISSUER_CERT: unable to get issuer certificate\fR" 4 +.IX Item "X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT: unable to get issuer certificate" +the issuer certificate of a locally looked up certificate could not be found. +This normally means the list of trusted certificates is not complete. +.IP "\fBX509_V_ERR_UNABLE_TO_GET_CRL: unable to get certificate \s-1CRL\s0\fR" 4 +.IX Item "X509_V_ERR_UNABLE_TO_GET_CRL: unable to get certificate CRL" +the \s-1CRL\s0 of a certificate could not be found. +.IP "\fBX509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE: unable to decrypt certificate's signature\fR" 4 +.IX Item "X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE: unable to decrypt certificate's signature" +the certificate signature could not be decrypted. This means that the actual +signature value could not be determined rather than it not matching the +expected value, this is only meaningful for \s-1RSA\s0 keys. +.IP "\fBX509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE: unable to decrypt \s-1CRL\s0's signature\fR" 4 +.IX Item "X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE: unable to decrypt CRL's signature" +the \s-1CRL\s0 signature could not be decrypted: this means that the actual signature +value could not be determined rather than it not matching the expected value. +Unused. +.IP "\fBX509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY: unable to decode issuer public key\fR" 4 +.IX Item "X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY: unable to decode issuer public key" +the public key in the certificate SubjectPublicKeyInfo could not be read. +.IP "\fBX509_V_ERR_CERT_SIGNATURE_FAILURE: certificate signature failure\fR" 4 +.IX Item "X509_V_ERR_CERT_SIGNATURE_FAILURE: certificate signature failure" +the signature of the certificate is invalid. +.IP "\fBX509_V_ERR_CRL_SIGNATURE_FAILURE: \s-1CRL\s0 signature failure\fR" 4 +.IX Item "X509_V_ERR_CRL_SIGNATURE_FAILURE: CRL signature failure" +the signature of the certificate is invalid. +.IP "\fBX509_V_ERR_CERT_NOT_YET_VALID: certificate is not yet valid\fR" 4 +.IX Item "X509_V_ERR_CERT_NOT_YET_VALID: certificate is not yet valid" +the certificate is not yet valid: the notBefore date is after the current time. +.IP "\fBX509_V_ERR_CERT_HAS_EXPIRED: certificate has expired\fR" 4 +.IX Item "X509_V_ERR_CERT_HAS_EXPIRED: certificate has expired" +the certificate has expired: that is the notAfter date is before the current time. +.IP "\fBX509_V_ERR_CRL_NOT_YET_VALID: \s-1CRL\s0 is not yet valid\fR" 4 +.IX Item "X509_V_ERR_CRL_NOT_YET_VALID: CRL is not yet valid" +the \s-1CRL\s0 is not yet valid. +.IP "\fBX509_V_ERR_CRL_HAS_EXPIRED: \s-1CRL\s0 has expired\fR" 4 +.IX Item "X509_V_ERR_CRL_HAS_EXPIRED: CRL has expired" +the \s-1CRL\s0 has expired. +.IP "\fBX509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD: format error in certificate's notBefore field\fR" 4 +.IX Item "X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD: format error in certificate's notBefore field" +the certificate notBefore field contains an invalid time. +.IP "\fBX509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD: format error in certificate's notAfter field\fR" 4 +.IX Item "X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD: format error in certificate's notAfter field" +the certificate notAfter field contains an invalid time. +.IP "\fBX509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD: format error in \s-1CRL\s0's lastUpdate field\fR" 4 +.IX Item "X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD: format error in CRL's lastUpdate field" +the \s-1CRL\s0 lastUpdate field contains an invalid time. +.IP "\fBX509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD: format error in \s-1CRL\s0's nextUpdate field\fR" 4 +.IX Item "X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD: format error in CRL's nextUpdate field" +the \s-1CRL\s0 nextUpdate field contains an invalid time. +.IP "\fBX509_V_ERR_OUT_OF_MEM: out of memory\fR" 4 +.IX Item "X509_V_ERR_OUT_OF_MEM: out of memory" +an error occurred trying to allocate memory. This should never happen. +.IP "\fBX509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT: self signed certificate\fR" 4 +.IX Item "X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT: self signed certificate" +the passed certificate is self signed and the same certificate cannot be found +in the list of trusted certificates. +.IP "\fBX509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN: self signed certificate in certificate chain\fR" 4 +.IX Item "X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN: self signed certificate in certificate chain" +the certificate chain could be built up using the untrusted certificates but +the root could not be found locally. +.IP "\fBX509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY: unable to get local issuer certificate\fR" 4 +.IX Item "X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY: unable to get local issuer certificate" +the issuer certificate could not be found: this occurs if the issuer certificate +of an untrusted certificate cannot be found. +.IP "\fBX509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE: unable to verify the first certificate\fR" 4 +.IX Item "X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE: unable to verify the first certificate" +no signatures could be verified because the chain contains only one certificate +and it is not self signed. +.IP "\fBX509_V_ERR_CERT_CHAIN_TOO_LONG: certificate chain too long\fR" 4 +.IX Item "X509_V_ERR_CERT_CHAIN_TOO_LONG: certificate chain too long" +the certificate chain length is greater than the supplied maximum depth. Unused. +.IP "\fBX509_V_ERR_CERT_REVOKED: certificate revoked\fR" 4 +.IX Item "X509_V_ERR_CERT_REVOKED: certificate revoked" +the certificate has been revoked. +.IP "\fBX509_V_ERR_INVALID_CA: invalid \s-1CA\s0 certificate\fR" 4 +.IX Item "X509_V_ERR_INVALID_CA: invalid CA certificate" +a \s-1CA\s0 certificate is invalid. Either it is not a \s-1CA\s0 or its extensions are not +consistent with the supplied purpose. +.IP "\fBX509_V_ERR_PATH_LENGTH_EXCEEDED: path length constraint exceeded\fR" 4 +.IX Item "X509_V_ERR_PATH_LENGTH_EXCEEDED: path length constraint exceeded" +the basicConstraints path-length parameter has been exceeded. +.IP "\fBX509_V_ERR_INVALID_PURPOSE: unsupported certificate purpose\fR" 4 +.IX Item "X509_V_ERR_INVALID_PURPOSE: unsupported certificate purpose" +the supplied certificate cannot be used for the specified purpose. +.IP "\fBX509_V_ERR_CERT_UNTRUSTED: certificate not trusted\fR" 4 +.IX Item "X509_V_ERR_CERT_UNTRUSTED: certificate not trusted" +the root \s-1CA\s0 is not marked as trusted for the specified purpose. +.IP "\fBX509_V_ERR_CERT_REJECTED: certificate rejected\fR" 4 +.IX Item "X509_V_ERR_CERT_REJECTED: certificate rejected" +the root \s-1CA\s0 is marked to reject the specified purpose. +.IP "\fBX509_V_ERR_SUBJECT_ISSUER_MISMATCH: subject issuer mismatch\fR" 4 +.IX Item "X509_V_ERR_SUBJECT_ISSUER_MISMATCH: subject issuer mismatch" +the current candidate issuer certificate was rejected because its subject name +did not match the issuer name of the current certificate. This is only set +if issuer check debugging is enabled it is used for status notification and +is \fBnot\fR in itself an error. +.IP "\fBX509_V_ERR_AKID_SKID_MISMATCH: authority and subject key identifier mismatch\fR" 4 +.IX Item "X509_V_ERR_AKID_SKID_MISMATCH: authority and subject key identifier mismatch" +the current candidate issuer certificate was rejected because its subject key +identifier was present and did not match the authority key identifier current +certificate. This is only set if issuer check debugging is enabled it is used +for status notification and is \fBnot\fR in itself an error. +.IP "\fBX509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH: authority and issuer serial number mismatch\fR" 4 +.IX Item "X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH: authority and issuer serial number mismatch" +the current candidate issuer certificate was rejected because its issuer name +and serial number was present and did not match the authority key identifier of +the current certificate. This is only set if issuer check debugging is enabled +it is used for status notification and is \fBnot\fR in itself an error. +.IP "\fBX509_V_ERR_KEYUSAGE_NO_CERTSIGN:key usage does not include certificate signing\fR" 4 +.IX Item "X509_V_ERR_KEYUSAGE_NO_CERTSIGN:key usage does not include certificate signing" +the current candidate issuer certificate was rejected because its keyUsage +extension does not permit certificate signing. This is only set if issuer check +debugging is enabled it is used for status notification and is \fBnot\fR in itself +an error. +.IP "\fBX509_V_ERR_INVALID_EXTENSION: invalid or inconsistent certificate extension\fR" 4 +.IX Item "X509_V_ERR_INVALID_EXTENSION: invalid or inconsistent certificate extension" +A certificate extension had an invalid value (for example an incorrect +encoding) or some value inconsistent with other extensions. +.IP "\fBX509_V_ERR_INVALID_POLICY_EXTENSION: invalid or inconsistent certificate policy extension\fR" 4 +.IX Item "X509_V_ERR_INVALID_POLICY_EXTENSION: invalid or inconsistent certificate policy extension" +A certificate policies extension had an invalid value (for example an incorrect +encoding) or some value inconsistent with other extensions. This error only +occurs if policy processing is enabled. +.IP "\fBX509_V_ERR_NO_EXPLICIT_POLICY: no explicit policy\fR" 4 +.IX Item "X509_V_ERR_NO_EXPLICIT_POLICY: no explicit policy" +The verification flags were set to require and explicit policy but none was +present. +.IP "\fBX509_V_ERR_DIFFERENT_CRL_SCOPE: Different \s-1CRL\s0 scope\fR" 4 +.IX Item "X509_V_ERR_DIFFERENT_CRL_SCOPE: Different CRL scope" +The only CRLs that could be found did not match the scope of the certificate. +.IP "\fBX509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE: Unsupported extension feature\fR" 4 +.IX Item "X509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE: Unsupported extension feature" +Some feature of a certificate extension is not supported. Unused. +.IP "\fBX509_V_ERR_PERMITTED_VIOLATION: permitted subtree violation\fR" 4 +.IX Item "X509_V_ERR_PERMITTED_VIOLATION: permitted subtree violation" +A name constraint violation occurred in the permitted subtrees. +.IP "\fBX509_V_ERR_EXCLUDED_VIOLATION: excluded subtree violation\fR" 4 +.IX Item "X509_V_ERR_EXCLUDED_VIOLATION: excluded subtree violation" +A name constraint violation occurred in the excluded subtrees. +.IP "\fBX509_V_ERR_SUBTREE_MINMAX: name constraints minimum and maximum not supported\fR" 4 +.IX Item "X509_V_ERR_SUBTREE_MINMAX: name constraints minimum and maximum not supported" +A certificate name constraints extension included a minimum or maximum field: +this is not supported. +.IP "\fBX509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE: unsupported name constraint type\fR" 4 +.IX Item "X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE: unsupported name constraint type" +An unsupported name constraint type was encountered. OpenSSL currently only +supports directory name, \s-1DNS\s0 name, email and \s-1URI\s0 types. +.IP "\fBX509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX: unsupported or invalid name constraint syntax\fR" 4 +.IX Item "X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX: unsupported or invalid name constraint syntax" +The format of the name constraint is not recognised: for example an email +address format of a form not mentioned in \s-1RFC3280.\s0 This could be caused by +a garbage extension or some new feature not currently supported. +.IP "\fBX509_V_ERR_CRL_PATH_VALIDATION_ERROR: \s-1CRL\s0 path validation error\fR" 4 +.IX Item "X509_V_ERR_CRL_PATH_VALIDATION_ERROR: CRL path validation error" +An error occurred when attempting to verify the \s-1CRL\s0 path. This error can only +happen if extended \s-1CRL\s0 checking is enabled. +.IP "\fBX509_V_ERR_APPLICATION_VERIFICATION: application verification failure\fR" 4 +.IX Item "X509_V_ERR_APPLICATION_VERIFICATION: application verification failure" +an application specific error. This will never be returned unless explicitly +set by an application. +.SH "NOTES" +.IX Header "NOTES" +The above functions should be used instead of directly referencing the fields +in the \fBX509_VERIFY_CTX\fR structure. +.PP +In versions of OpenSSL before 1.0 the current certificate returned by +\&\fBX509_STORE_CTX_get_current_cert()\fR was never \fB\s-1NULL\s0\fR. Applications should +check the return value before printing out any debugging information relating +to the current certificate. +.PP +If an unrecognised error code is passed to \fBX509_verify_cert_error_string()\fR the +numerical value of the unknown code is returned in a static buffer. This is not +thread safe but will never happen unless an invalid code is passed. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBX509_verify_cert\fR\|(3), +\&\fBX509_up_ref\fR\|(3), +\&\fBX509_free\fR\|(3). +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2009\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_STORE_CTX_new.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_STORE_CTX_new.3 new file mode 100644 index 00000000..5d5a0b1c --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_STORE_CTX_new.3 @@ -0,0 +1,295 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "X509_STORE_CTX_NEW 3" +.TH X509_STORE_CTX_NEW 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +X509_STORE_CTX_new, X509_STORE_CTX_cleanup, X509_STORE_CTX_free, X509_STORE_CTX_init, X509_STORE_CTX_set0_trusted_stack, X509_STORE_CTX_set_cert, X509_STORE_CTX_set0_crls, X509_STORE_CTX_get0_chain, X509_STORE_CTX_set0_verified_chain, X509_STORE_CTX_get0_param, X509_STORE_CTX_set0_param, X509_STORE_CTX_get0_untrusted, X509_STORE_CTX_set0_untrusted, X509_STORE_CTX_get_num_untrusted, X509_STORE_CTX_set_default, X509_STORE_CTX_set_verify, X509_STORE_CTX_verify_fn \&\- X509_STORE_CTX initialisation +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& X509_STORE_CTX *X509_STORE_CTX_new(void); +\& void X509_STORE_CTX_cleanup(X509_STORE_CTX *ctx); +\& void X509_STORE_CTX_free(X509_STORE_CTX *ctx); +\& +\& int X509_STORE_CTX_init(X509_STORE_CTX *ctx, X509_STORE *store, +\& X509 *x509, STACK_OF(X509) *chain); +\& +\& void X509_STORE_CTX_set0_trusted_stack(X509_STORE_CTX *ctx, STACK_OF(X509) *sk); +\& +\& void X509_STORE_CTX_set_cert(X509_STORE_CTX *ctx, X509 *x); +\& STACK_OF(X509) *X509_STORE_CTX_get0_chain(X509_STORE_CTX *ctx); +\& void X509_STORE_CTX_set0_verified_chain(X509_STORE_CTX *ctx, STACK_OF(X509) *chain); +\& void X509_STORE_CTX_set0_crls(X509_STORE_CTX *ctx, STACK_OF(X509_CRL) *sk); +\& +\& X509_VERIFY_PARAM *X509_STORE_CTX_get0_param(X509_STORE_CTX *ctx); +\& void X509_STORE_CTX_set0_param(X509_STORE_CTX *ctx, X509_VERIFY_PARAM *param); +\& int X509_STORE_CTX_set_default(X509_STORE_CTX *ctx, const char *name); +\& +\& STACK_OF(X509)* X509_STORE_CTX_get0_untrusted(X509_STORE_CTX *ctx); +\& void X509_STORE_CTX_set0_untrusted(X509_STORE_CTX *ctx, STACK_OF(X509) *sk); +\& +\& int X509_STORE_CTX_get_num_untrusted(X509_STORE_CTX *ctx); +\& +\& typedef int (*X509_STORE_CTX_verify_fn)(X509_STORE_CTX *); +\& void X509_STORE_CTX_set_verify(X509_STORE_CTX *ctx, X509_STORE_CTX_verify_fn verify); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +These functions initialise an \fBX509_STORE_CTX\fR structure for subsequent use +by \fBX509_verify_cert()\fR. +.PP +\&\fBX509_STORE_CTX_new()\fR returns a newly initialised \fBX509_STORE_CTX\fR structure. +.PP +\&\fBX509_STORE_CTX_cleanup()\fR internally cleans up an \fBX509_STORE_CTX\fR structure. +The context can then be reused with an new call to \fBX509_STORE_CTX_init()\fR. +.PP +\&\fBX509_STORE_CTX_free()\fR completely frees up \fBctx\fR. After this call \fBctx\fR +is no longer valid. +If \fBctx\fR is \s-1NULL\s0 nothing is done. +.PP +\&\fBX509_STORE_CTX_init()\fR sets up \fBctx\fR for a subsequent verification operation. +It must be called before each call to \fBX509_verify_cert()\fR, i.e. a \fBctx\fR is only +good for one call to \fBX509_verify_cert()\fR; if you want to verify a second +certificate with the same \fBctx\fR then you must call \fBX509_STORE_CTX_cleanup()\fR +and then \fBX509_STORE_CTX_init()\fR again before the second call to +\&\fBX509_verify_cert()\fR. The trusted certificate store is set to \fBstore\fR, the end +entity certificate to be verified is set to \fBx509\fR and a set of additional +certificates (which will be untrusted but may be used to build the chain) in +\&\fBchain\fR. Any or all of the \fBstore\fR, \fBx509\fR and \fBchain\fR parameters can be +\&\fB\s-1NULL\s0\fR. +.PP +\&\fBX509_STORE_CTX_set0_trusted_stack()\fR sets the set of trusted certificates of +\&\fBctx\fR to \fBsk\fR. This is an alternative way of specifying trusted certificates +instead of using an \fBX509_STORE\fR. +.PP +\&\fBX509_STORE_CTX_set_cert()\fR sets the certificate to be verified in \fBctx\fR to +\&\fBx\fR. +.PP +\&\fBX509_STORE_CTX_set0_verified_chain()\fR sets the validated chain used +by \fBctx\fR to be \fBchain\fR. +Ownership of the chain is transferred to \fBctx\fR and should not be +free'd by the caller. +\&\fBX509_STORE_CTX_get0_chain()\fR returns a the internal pointer used by the +\&\fBctx\fR that contains the validated chain. +.PP +\&\fBX509_STORE_CTX_set0_crls()\fR sets a set of CRLs to use to aid certificate +verification to \fBsk\fR. These CRLs will only be used if \s-1CRL\s0 verification is +enabled in the associated \fBX509_VERIFY_PARAM\fR structure. This might be +used where additional \*(L"useful\*(R" CRLs are supplied as part of a protocol, +for example in a PKCS#7 structure. +.PP +\&\fBX509_STORE_CTX_get0_param()\fR retrieves an internal pointer +to the verification parameters associated with \fBctx\fR. +.PP +\&\fBX509_STORE_CTX_get0_untrusted()\fR retrieves an internal pointer to the +stack of untrusted certificates associated with \fBctx\fR. +.PP +\&\fBX509_STORE_CTX_set0_untrusted()\fR sets the internal point to the stack +of untrusted certificates associated with \fBctx\fR to \fBsk\fR. +.PP +\&\fBX509_STORE_CTX_set0_param()\fR sets the internal verification parameter pointer +to \fBparam\fR. After this call \fBparam\fR should not be used. +.PP +\&\fBX509_STORE_CTX_set_default()\fR looks up and sets the default verification +method to \fBname\fR. This uses the function \fBX509_VERIFY_PARAM_lookup()\fR to +find an appropriate set of parameters from \fBname\fR. +.PP +\&\fBX509_STORE_CTX_get_num_untrusted()\fR returns the number of untrusted certificates +that were used in building the chain following a call to \fBX509_verify_cert()\fR. +.PP +\&\fBX509_STORE_CTX_set_verify()\fR provides the capability for overriding the default +verify function. This function is responsible for verifying chain signatures and +expiration times. +.PP +A verify function is defined as an X509_STORE_CTX_verify type which has the +following signature: +.PP +.Vb 1 +\& int (*verify)(X509_STORE_CTX *); +.Ve +.PP +This function should receive the current X509_STORE_CTX as a parameter and +return 1 on success or 0 on failure. +.SH "NOTES" +.IX Header "NOTES" +The certificates and CRLs in a store are used internally and should \fBnot\fR +be freed up until after the associated \fBX509_STORE_CTX\fR is freed. +.SH "BUGS" +.IX Header "BUGS" +The certificates and CRLs in a context are used internally and should \fBnot\fR +be freed up until after the associated \fBX509_STORE_CTX\fR is freed. Copies +should be made or reference counts increased instead. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBX509_STORE_CTX_new()\fR returns an newly allocates context or \fB\s-1NULL\s0\fR is an +error occurred. +.PP +\&\fBX509_STORE_CTX_init()\fR returns 1 for success or 0 if an error occurred. +.PP +\&\fBX509_STORE_CTX_get0_param()\fR returns a pointer to an \fBX509_VERIFY_PARAM\fR +structure or \fB\s-1NULL\s0\fR if an error occurred. +.PP +\&\fBX509_STORE_CTX_cleanup()\fR, \fBX509_STORE_CTX_free()\fR, +\&\fBX509_STORE_CTX_set0_trusted_stack()\fR, +\&\fBX509_STORE_CTX_set_cert()\fR, +\&\fBX509_STORE_CTX_set0_crls()\fR and \fBX509_STORE_CTX_set0_param()\fR do not return +values. +.PP +\&\fBX509_STORE_CTX_set_default()\fR returns 1 for success or 0 if an error occurred. +.PP +\&\fBX509_STORE_CTX_get_num_untrusted()\fR returns the number of untrusted certificates +used. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBX509_verify_cert\fR\|(3) +\&\fBX509_VERIFY_PARAM_set_flags\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +The \fBX509_STORE_CTX_set0_crls()\fR function was added in OpenSSL 1.0.0. +The \fBX509_STORE_CTX_get_num_untrusted()\fR function was added in OpenSSL 1.1.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2009\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_STORE_CTX_set_verify_cb.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_STORE_CTX_set_verify_cb.3 new file mode 100644 index 00000000..1312285f --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_STORE_CTX_set_verify_cb.3 @@ -0,0 +1,334 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "X509_STORE_CTX_SET_VERIFY_CB 3" +.TH X509_STORE_CTX_SET_VERIFY_CB 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +X509_STORE_CTX_get_cleanup, X509_STORE_CTX_get_lookup_crls, X509_STORE_CTX_get_lookup_certs, X509_STORE_CTX_get_check_policy, X509_STORE_CTX_get_cert_crl, X509_STORE_CTX_get_check_crl, X509_STORE_CTX_get_get_crl, X509_STORE_CTX_get_check_revocation, X509_STORE_CTX_get_check_issued, X509_STORE_CTX_get_get_issuer, X509_STORE_CTX_get_verify_cb, X509_STORE_CTX_set_verify_cb, X509_STORE_CTX_verify_cb \&\- get and set verification callback +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& typedef int (*X509_STORE_CTX_verify_cb)(int, X509_STORE_CTX *); +\& +\& X509_STORE_CTX_verify_cb X509_STORE_CTX_get_verify_cb(X509_STORE_CTX *ctx); +\& +\& void X509_STORE_CTX_set_verify_cb(X509_STORE_CTX *ctx, +\& X509_STORE_CTX_verify_cb verify_cb); +\& +\& X509_STORE_CTX_get_issuer_fn X509_STORE_CTX_get_get_issuer(X509_STORE_CTX *ctx); +\& X509_STORE_CTX_check_issued_fn X509_STORE_CTX_get_check_issued(X509_STORE_CTX *ctx); +\& X509_STORE_CTX_check_revocation_fn X509_STORE_CTX_get_check_revocation(X509_STORE_CTX *ctx); +\& X509_STORE_CTX_get_crl_fn X509_STORE_CTX_get_get_crl(X509_STORE_CTX *ctx); +\& X509_STORE_CTX_check_crl_fn X509_STORE_CTX_get_check_crl(X509_STORE_CTX *ctx); +\& X509_STORE_CTX_cert_crl_fn X509_STORE_CTX_get_cert_crl(X509_STORE_CTX *ctx); +\& X509_STORE_CTX_check_policy_fn X509_STORE_CTX_get_check_policy(X509_STORE_CTX *ctx); +\& X509_STORE_CTX_lookup_certs_fn X509_STORE_CTX_get_lookup_certs(X509_STORE_CTX *ctx); +\& X509_STORE_CTX_lookup_crls_fn X509_STORE_CTX_get_lookup_crls(X509_STORE_CTX *ctx); +\& X509_STORE_CTX_cleanup_fn X509_STORE_CTX_get_cleanup(X509_STORE_CTX *ctx); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBX509_STORE_CTX_set_verify_cb()\fR sets the verification callback of \fBctx\fR to +\&\fBverify_cb\fR overwriting any existing callback. +.PP +The verification callback can be used to customise the operation of certificate +verification, either by overriding error conditions or logging errors for +debugging purposes. +.PP +However a verification callback is \fBnot\fR essential and the default operation +is often sufficient. +.PP +The \fBok\fR parameter to the callback indicates the value the callback should +return to retain the default behaviour. If it is zero then an error condition +is indicated. If it is 1 then no error occurred. If the flag +\&\fBX509_V_FLAG_NOTIFY_POLICY\fR is set then \fBok\fR is set to 2 to indicate the +policy checking is complete. +.PP +The \fBctx\fR parameter to the callback is the \fBX509_STORE_CTX\fR structure that +is performing the verification operation. A callback can examine this +structure and receive additional information about the error, for example +by calling \fBX509_STORE_CTX_get_current_cert()\fR. Additional application data can +be passed to the callback via the \fBex_data\fR mechanism. +.PP +\&\fBX509_STORE_CTX_get_verify_cb()\fR returns the value of the current callback +for the specific \fBctx\fR. +.PP +\&\fBX509_STORE_CTX_get_get_issuer()\fR, +\&\fBX509_STORE_CTX_get_check_issued()\fR, \fBX509_STORE_CTX_get_check_revocation()\fR, +\&\fBX509_STORE_CTX_get_get_crl()\fR, \fBX509_STORE_CTX_get_check_crl()\fR, +\&\fBX509_STORE_CTX_get_cert_crl()\fR, \fBX509_STORE_CTX_get_check_policy()\fR, +\&\fBX509_STORE_CTX_get_lookup_certs()\fR, \fBX509_STORE_CTX_get_lookup_crls()\fR +and \fBX509_STORE_CTX_get_cleanup()\fR return the function pointers cached +from the corresponding \fBX509_STORE\fR, please see +\&\fBX509_STORE_set_verify\fR\|(3) for more information. +.SH "WARNINGS" +.IX Header "WARNINGS" +In general a verification callback should \fB\s-1NOT\s0\fR unconditionally return 1 in +all circumstances because this will allow verification to succeed no matter +what the error. This effectively removes all security from the application +because \fBany\fR certificate (including untrusted generated ones) will be +accepted. +.SH "NOTES" +.IX Header "NOTES" +The verification callback can be set and inherited from the parent structure +performing the operation. In some cases (such as S/MIME verification) the +\&\fBX509_STORE_CTX\fR structure is created and destroyed internally and the +only way to set a custom verification callback is by inheriting it from the +associated \fBX509_STORE\fR. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBX509_STORE_CTX_set_verify_cb()\fR does not return a value. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +Default callback operation: +.PP +.Vb 3 +\& int verify_callback(int ok, X509_STORE_CTX *ctx) { +\& return ok; +\& } +.Ve +.PP +Simple example, suppose a certificate in the chain is expired and we wish +to continue after this error: +.PP +.Vb 7 +\& int verify_callback(int ok, X509_STORE_CTX *ctx) { +\& /* Tolerate certificate expiration */ +\& if (X509_STORE_CTX_get_error(ctx) == X509_V_ERR_CERT_HAS_EXPIRED) +\& return 1; +\& /* Otherwise don\*(Aqt override */ +\& return ok; +\& } +.Ve +.PP +More complex example, we don't wish to continue after \fBany\fR certificate has +expired just one specific case: +.PP +.Vb 4 +\& int verify_callback(int ok, X509_STORE_CTX *ctx) +\& { +\& int err = X509_STORE_CTX_get_error(ctx); +\& X509 *err_cert = X509_STORE_CTX_get_current_cert(ctx); +\& +\& if (err == X509_V_ERR_CERT_HAS_EXPIRED) { +\& if (check_is_acceptable_expired_cert(err_cert) +\& return 1; +\& } +\& return ok; +\& } +.Ve +.PP +Full featured logging callback. In this case the \fBbio_err\fR is assumed to be +a global logging \fB\s-1BIO\s0\fR, an alternative would to store a \s-1BIO\s0 in \fBctx\fR using +\&\fBex_data\fR. +.PP +.Vb 4 +\& int verify_callback(int ok, X509_STORE_CTX *ctx) +\& { +\& X509 *err_cert; +\& int err, depth; +\& +\& err_cert = X509_STORE_CTX_get_current_cert(ctx); +\& err = X509_STORE_CTX_get_error(ctx); +\& depth = X509_STORE_CTX_get_error_depth(ctx); +\& +\& BIO_printf(bio_err, "depth=%d ", depth); +\& if (err_cert) { +\& X509_NAME_print_ex(bio_err, X509_get_subject_name(err_cert), +\& 0, XN_FLAG_ONELINE); +\& BIO_puts(bio_err, "\en"); +\& } +\& else +\& BIO_puts(bio_err, "\en"); +\& if (!ok) +\& BIO_printf(bio_err, "verify error:num=%d:%s\en", err, +\& X509_verify_cert_error_string(err)); +\& switch (err) { +\& case X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT: +\& BIO_puts(bio_err, "issuer= "); +\& X509_NAME_print_ex(bio_err, X509_get_issuer_name(err_cert), +\& 0, XN_FLAG_ONELINE); +\& BIO_puts(bio_err, "\en"); +\& break; +\& case X509_V_ERR_CERT_NOT_YET_VALID: +\& case X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD: +\& BIO_printf(bio_err, "notBefore="); +\& ASN1_TIME_print(bio_err, X509_get_notBefore(err_cert)); +\& BIO_printf(bio_err, "\en"); +\& break; +\& case X509_V_ERR_CERT_HAS_EXPIRED: +\& case X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD: +\& BIO_printf(bio_err, "notAfter="); +\& ASN1_TIME_print(bio_err, X509_get_notAfter(err_cert)); +\& BIO_printf(bio_err, "\en"); +\& break; +\& case X509_V_ERR_NO_EXPLICIT_POLICY: +\& policies_print(bio_err, ctx); +\& break; +\& } +\& if (err == X509_V_OK && ok == 2) +\& /* print out policies */ +\& +\& BIO_printf(bio_err, "verify return:%d\en", ok); +\& return(ok); +\& } +.Ve +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBX509_STORE_CTX_get_error\fR\|(3) +\&\fBX509_STORE_set_verify_cb_func\fR\|(3) +\&\fBX509_STORE_CTX_get_ex_new_index\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +The +\&\fBX509_STORE_CTX_get_get_issuer()\fR, +\&\fBX509_STORE_CTX_get_check_issued()\fR, \fBX509_STORE_CTX_get_check_revocation()\fR, +\&\fBX509_STORE_CTX_get_get_crl()\fR, \fBX509_STORE_CTX_get_check_crl()\fR, +\&\fBX509_STORE_CTX_get_cert_crl()\fR, \fBX509_STORE_CTX_get_check_policy()\fR, +\&\fBX509_STORE_CTX_get_lookup_certs()\fR, \fBX509_STORE_CTX_get_lookup_crls()\fR +and \fBX509_STORE_CTX_get_cleanup()\fR functions were added in OpenSSL 1.1.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2009\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_STORE_add_cert.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_STORE_add_cert.3 new file mode 100644 index 00000000..e787ec45 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_STORE_add_cert.3 @@ -0,0 +1,243 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "X509_STORE_ADD_CERT 3" +.TH X509_STORE_ADD_CERT 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +X509_STORE, X509_STORE_add_cert, X509_STORE_add_crl, X509_STORE_set_depth, X509_STORE_set_flags, X509_STORE_set_purpose, X509_STORE_set_trust, X509_STORE_add_lookup, X509_STORE_load_locations, X509_STORE_set_default_paths \&\- X509_STORE manipulation +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& typedef x509_store_st X509_STORE; +\& +\& int X509_STORE_add_cert(X509_STORE *ctx, X509 *x); +\& int X509_STORE_add_crl(X509_STORE *ctx, X509_CRL *x); +\& int X509_STORE_set_depth(X509_STORE *store, int depth); +\& int X509_STORE_set_flags(X509_STORE *ctx, unsigned long flags); +\& int X509_STORE_set_purpose(X509_STORE *ctx, int purpose); +\& int X509_STORE_set_trust(X509_STORE *ctx, int trust); +\& +\& X509_LOOKUP *X509_STORE_add_lookup(X509_STORE *store, +\& X509_LOOKUP_METHOD *meth); +\& +\& int X509_STORE_load_locations(X509_STORE *ctx, +\& const char *file, const char *dir); +\& int X509_STORE_set_default_paths(X509_STORE *ctx); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fBX509_STORE\fR structure is intended to be a consolidated mechanism for +holding information about X.509 certificates and CRLs, and constructing +and validating chains of certificates terminating in trusted roots. +It admits multiple lookup mechanisms and efficient scaling performance +with large numbers of certificates, and a great deal of flexibility in +how validation and policy checks are performed. +.PP +\&\fBX509_STORE_new\fR\|(3) creates an empty \fBX509_STORE\fR structure, which contains +no information about trusted certificates or where such certificates +are located on disk, and is generally not usable. Normally, trusted +certificates will be added to the \fBX509_STORE\fR to prepare it for use, +via mechanisms such as \fBX509_STORE_add_lookup()\fR and \fBX509_LOOKUP_file()\fR, or +\&\fBPEM_read_bio_X509_AUX()\fR and \fBX509_STORE_add_cert()\fR. CRLs can also be added, +and many behaviors configured as desired. +.PP +Once the \fBX509_STORE\fR is suitably configured, \fBX509_STORE_CTX_new()\fR is +used to instantiate a single-use \fBX509_STORE_CTX\fR for each chain-building +and verification operation. That process includes providing the end-entity +certificate to be verified and an additional set of untrusted certificates +that may be used in chain-building. As such, it is expected that the +certificates included in the \fBX509_STORE\fR are certificates that represent +trusted entities such as root certificate authorities (CAs). +OpenSSL represents these trusted certificates internally as \fBX509\fR objects +with an associated \fBX509_CERT_AUX\fR, as are produced by +\&\fBPEM_read_bio_X509_AUX()\fR and similar routines that refer to X509_AUX. +The public interfaces that operate on such trusted certificates still +operate on pointers to \fBX509\fR objects, though. +.PP +\&\fBX509_STORE_add_cert()\fR and \fBX509_STORE_add_crl()\fR add the respective object +to the \fBX509_STORE\fR's local storage. Untrusted objects should not be +added in this way. The added object's reference count is incremented by one, +hence the caller retains ownership of the object and needs to free it when it +is no longer needed. +.PP +\&\fBX509_STORE_set_depth()\fR, \fBX509_STORE_set_flags()\fR, \fBX509_STORE_set_purpose()\fR, +\&\fBX509_STORE_set_trust()\fR, and \fBX509_STORE_set1_param()\fR set the default values +for the corresponding values used in certificate chain validation. Their +behavior is documented in the corresponding \fBX509_VERIFY_PARAM\fR manual +pages, e.g., \fBX509_VERIFY_PARAM_set_depth\fR\|(3). +.PP +\&\fBX509_STORE_add_lookup()\fR finds or creates a \fBX509_LOOKUP\fR\|(3) with the +\&\fBX509_LOOKUP_METHOD\fR\|(3) \fImeth\fR and adds it to the \fBX509_STORE\fR +\&\fIstore\fR. This also associates the \fBX509_STORE\fR with the lookup, so +\&\fBX509_LOOKUP\fR functions can look up objects in that store. +.PP +\&\fBX509_STORE_load_locations()\fR loads trusted certificate(s) into an +\&\fBX509_STORE\fR from a given file and/or directory path. It is permitted +to specify just a file, just a directory, or both paths. The certificates +in the directory must be in hashed form, as documented in +\&\fBX509_LOOKUP_hash_dir\fR\|(3). +.PP +\&\fBX509_STORE_set_default_paths()\fR is somewhat misnamed, in that it does not +set what default paths should be used for loading certificates. Instead, +it loads certificates into the \fBX509_STORE\fR from the hardcoded default +paths. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBX509_STORE_add_cert()\fR, \fBX509_STORE_add_crl()\fR, \fBX509_STORE_set_depth()\fR, +\&\fBX509_STORE_set_flags()\fR, \fBX509_STORE_set_purpose()\fR, +\&\fBX509_STORE_set_trust()\fR, \fBX509_STORE_load_locations()\fR, and +\&\fBX509_STORE_set_default_paths()\fR return 1 on success or 0 on failure. +.PP +\&\fBX509_STORE_add_lookup()\fR returns the found or created +\&\fBX509_LOOKUP\fR\|(3), or \s-1NULL\s0 on error. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBX509_LOOKUP_hash_dir\fR\|(3). +\&\fBX509_VERIFY_PARAM_set_depth\fR\|(3). +\&\fBX509_STORE_new\fR\|(3), +\&\fBX509_STORE_get0_param\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017\-2020 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_STORE_get0_param.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_STORE_get0_param.3 new file mode 100644 index 00000000..325d199a --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_STORE_get0_param.3 @@ -0,0 +1,186 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "X509_STORE_GET0_PARAM 3" +.TH X509_STORE_GET0_PARAM 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +X509_STORE_get0_param, X509_STORE_set1_param, X509_STORE_get0_objects \- X509_STORE setter and getter functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& X509_VERIFY_PARAM *X509_STORE_get0_param(X509_STORE *ctx); +\& int X509_STORE_set1_param(X509_STORE *ctx, X509_VERIFY_PARAM *pm); +\& STACK_OF(X509_OBJECT) *X509_STORE_get0_objects(X509_STORE *ctx); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBX509_STORE_set1_param()\fR sets the verification parameters +to \fBpm\fR for \fBctx\fR. +.PP +\&\fBX509_STORE_get0_param()\fR retrieves an internal pointer to the verification +parameters for \fBctx\fR. The returned pointer must not be freed by the +calling application +.PP +\&\fBX509_STORE_get0_objects()\fR retrieve an internal pointer to the store's +X509 object cache. The cache contains \fBX509\fR and \fBX509_CRL\fR objects. The +returned pointer must not be freed by the calling application. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBX509_STORE_get0_param()\fR returns a pointer to an +\&\fBX509_VERIFY_PARAM\fR structure. +.PP +\&\fBX509_STORE_set1_param()\fR returns 1 for success and 0 for failure. +.PP +\&\fBX509_STORE_get0_objects()\fR returns a pointer to a stack of \fBX509_OBJECT\fR. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBX509_STORE_new\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +\&\fBX509_STORE_get0_param\fR and \fBX509_STORE_get0_objects\fR were added in +OpenSSL 1.1.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_STORE_new.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_STORE_new.3 new file mode 100644 index 00000000..7f7fcfa2 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_STORE_new.3 @@ -0,0 +1,188 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "X509_STORE_NEW 3" +.TH X509_STORE_NEW 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +X509_STORE_new, X509_STORE_up_ref, X509_STORE_free, X509_STORE_lock, X509_STORE_unlock \- X509_STORE allocation, freeing and locking functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& X509_STORE *X509_STORE_new(void); +\& void X509_STORE_free(X509_STORE *v); +\& int X509_STORE_lock(X509_STORE *v); +\& int X509_STORE_unlock(X509_STORE *v); +\& int X509_STORE_up_ref(X509_STORE *v); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fBX509_STORE_new()\fR function returns a new X509_STORE. +.PP +\&\fBX509_STORE_up_ref()\fR increments the reference count associated with the +X509_STORE object. +.PP +\&\fBX509_STORE_lock()\fR locks the store from modification by other threads, +\&\fBX509_STORE_unlock()\fR unlocks it. +.PP +\&\fBX509_STORE_free()\fR frees up a single X509_STORE object. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBX509_STORE_new()\fR returns a newly created X509_STORE or \s-1NULL\s0 if the call fails. +.PP +\&\fBX509_STORE_up_ref()\fR, \fBX509_STORE_lock()\fR and \fBX509_STORE_unlock()\fR return +1 for success and 0 for failure. +.PP +\&\fBX509_STORE_free()\fR does not return values. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBX509_STORE_set_verify_cb_func\fR\|(3) +\&\fBX509_STORE_get0_param\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +The \fBX509_STORE_up_ref()\fR, \fBX509_STORE_lock()\fR and \fBX509_STORE_unlock()\fR +functions were added in OpenSSL 1.1.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2016\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_STORE_set_verify_cb_func.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_STORE_set_verify_cb_func.3 new file mode 100644 index 00000000..15ccb7c6 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_STORE_set_verify_cb_func.3 @@ -0,0 +1,364 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "X509_STORE_SET_VERIFY_CB_FUNC 3" +.TH X509_STORE_SET_VERIFY_CB_FUNC 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +X509_STORE_set_lookup_crls_cb, X509_STORE_set_verify_func, X509_STORE_get_cleanup, X509_STORE_set_cleanup, X509_STORE_get_lookup_crls, X509_STORE_set_lookup_crls, X509_STORE_get_lookup_certs, X509_STORE_set_lookup_certs, X509_STORE_get_check_policy, X509_STORE_set_check_policy, X509_STORE_get_cert_crl, X509_STORE_set_cert_crl, X509_STORE_get_check_crl, X509_STORE_set_check_crl, X509_STORE_get_get_crl, X509_STORE_set_get_crl, X509_STORE_get_check_revocation, X509_STORE_set_check_revocation, X509_STORE_get_check_issued, X509_STORE_set_check_issued, X509_STORE_get_get_issuer, X509_STORE_set_get_issuer, X509_STORE_CTX_get_verify, X509_STORE_set_verify, X509_STORE_get_verify_cb, X509_STORE_set_verify_cb_func, X509_STORE_set_verify_cb, X509_STORE_CTX_cert_crl_fn, X509_STORE_CTX_check_crl_fn, X509_STORE_CTX_check_issued_fn, X509_STORE_CTX_check_policy_fn, X509_STORE_CTX_check_revocation_fn, X509_STORE_CTX_cleanup_fn, X509_STORE_CTX_get_crl_fn, X509_STORE_CTX_get_issuer_fn, X509_STORE_CTX_lookup_certs_fn, X509_STORE_CTX_lookup_crls_fn \&\- set verification callback +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& typedef int (*X509_STORE_CTX_get_issuer_fn)(X509 **issuer, +\& X509_STORE_CTX *ctx, X509 *x); +\& typedef int (*X509_STORE_CTX_check_issued_fn)(X509_STORE_CTX *ctx, +\& X509 *x, X509 *issuer); +\& typedef int (*X509_STORE_CTX_check_revocation_fn)(X509_STORE_CTX *ctx); +\& typedef int (*X509_STORE_CTX_get_crl_fn)(X509_STORE_CTX *ctx, +\& X509_CRL **crl, X509 *x); +\& typedef int (*X509_STORE_CTX_check_crl_fn)(X509_STORE_CTX *ctx, X509_CRL *crl); +\& typedef int (*X509_STORE_CTX_cert_crl_fn)(X509_STORE_CTX *ctx, +\& X509_CRL *crl, X509 *x); +\& typedef int (*X509_STORE_CTX_check_policy_fn)(X509_STORE_CTX *ctx); +\& typedef STACK_OF(X509) *(*X509_STORE_CTX_lookup_certs_fn)(X509_STORE_CTX *ctx, +\& X509_NAME *nm); +\& typedef STACK_OF(X509_CRL) *(*X509_STORE_CTX_lookup_crls_fn)(X509_STORE_CTX *ctx, +\& X509_NAME *nm); +\& typedef int (*X509_STORE_CTX_cleanup_fn)(X509_STORE_CTX *ctx); +\& +\& void X509_STORE_set_verify_cb(X509_STORE *ctx, +\& X509_STORE_CTX_verify_cb verify_cb); +\& X509_STORE_CTX_verify_cb X509_STORE_get_verify_cb(X509_STORE_CTX *ctx); +\& +\& void X509_STORE_set_verify(X509_STORE *ctx, X509_STORE_CTX_verify_fn verify); +\& X509_STORE_CTX_verify_fn X509_STORE_CTX_get_verify(X509_STORE_CTX *ctx); +\& +\& void X509_STORE_set_get_issuer(X509_STORE *ctx, +\& X509_STORE_CTX_get_issuer_fn get_issuer); +\& X509_STORE_CTX_get_issuer_fn X509_STORE_get_get_issuer(X509_STORE_CTX *ctx); +\& +\& void X509_STORE_set_check_issued(X509_STORE *ctx, +\& X509_STORE_CTX_check_issued_fn check_issued); +\& X509_STORE_CTX_check_issued_fn X509_STORE_get_check_issued(X509_STORE_CTX *ctx); +\& +\& void X509_STORE_set_check_revocation(X509_STORE *ctx, +\& X509_STORE_CTX_check_revocation_fn check_revocation); +\& X509_STORE_CTX_check_revocation_fn X509_STORE_get_check_revocation(X509_STORE_CTX *ctx); +\& +\& void X509_STORE_set_get_crl(X509_STORE *ctx, +\& X509_STORE_CTX_get_crl_fn get_crl); +\& X509_STORE_CTX_get_crl_fn X509_STORE_get_get_crl(X509_STORE_CTX *ctx); +\& +\& void X509_STORE_set_check_crl(X509_STORE *ctx, +\& X509_STORE_CTX_check_crl_fn check_crl); +\& X509_STORE_CTX_check_crl_fn X509_STORE_get_check_crl(X509_STORE_CTX *ctx); +\& +\& void X509_STORE_set_cert_crl(X509_STORE *ctx, +\& X509_STORE_CTX_cert_crl_fn cert_crl); +\& X509_STORE_CTX_cert_crl_fn X509_STORE_get_cert_crl(X509_STORE_CTX *ctx); +\& +\& void X509_STORE_set_check_policy(X509_STORE *ctx, +\& X509_STORE_CTX_check_policy_fn check_policy); +\& X509_STORE_CTX_check_policy_fn X509_STORE_get_check_policy(X509_STORE_CTX *ctx); +\& +\& void X509_STORE_set_lookup_certs(X509_STORE *ctx, +\& X509_STORE_CTX_lookup_certs_fn lookup_certs); +\& X509_STORE_CTX_lookup_certs_fn X509_STORE_get_lookup_certs(X509_STORE_CTX *ctx); +\& +\& void X509_STORE_set_lookup_crls(X509_STORE *ctx, +\& X509_STORE_CTX_lookup_crls_fn lookup_crls); +\& X509_STORE_CTX_lookup_crls_fn X509_STORE_get_lookup_crls(X509_STORE_CTX *ctx); +\& +\& void X509_STORE_set_cleanup(X509_STORE *ctx, +\& X509_STORE_CTX_cleanup_fn cleanup); +\& X509_STORE_CTX_cleanup_fn X509_STORE_get_cleanup(X509_STORE_CTX *ctx); +\& +\& /* Aliases */ +\& void X509_STORE_set_verify_cb_func(X509_STORE *st, +\& X509_STORE_CTX_verify_cb verify_cb); +\& void X509_STORE_set_verify_func(X509_STORE *ctx, +\& X509_STORE_CTX_verify_fn verify); +\& void X509_STORE_set_lookup_crls_cb(X509_STORE *ctx, +\& X509_STORE_CTX_lookup_crls_fn lookup_crls); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBX509_STORE_set_verify_cb()\fR sets the verification callback of \fBctx\fR to +\&\fBverify_cb\fR overwriting the previous callback. +The callback assigned with this function becomes a default for the one +that can be assigned directly to the corresponding \fBX509_STORE_CTX\fR, +please see \fBX509_STORE_CTX_set_verify_cb\fR\|(3) for further information. +.PP +\&\fBX509_STORE_set_verify()\fR sets the final chain verification function for +\&\fBctx\fR to \fBverify\fR. +Its purpose is to go through the chain of certificates and check that +all signatures are valid and that the current time is within the +limits of each certificate's first and last validity time. +The final chain verification functions must return 0 on failure and 1 +on success. +\&\fIIf no chain verification function is provided, the internal default +function will be used instead.\fR +.PP +\&\fBX509_STORE_set_get_issuer()\fR sets the function to get the issuer +certificate that verifies the given certificate \fBx\fR. +When found, the issuer certificate must be assigned to \fB*issuer\fR. +This function must return 0 on failure and 1 on success. +\&\fIIf no function to get the issuer is provided, the internal default +function will be used instead.\fR +.PP +\&\fBX509_STORE_set_check_issued()\fR sets the function to check that a given +certificate \fBx\fR is issued with the issuer certificate \fBissuer\fR. +This function must return 0 on failure (among others if \fBx\fR hasn't +been issued with \fBissuer\fR) and 1 on success. +\&\fIIf no function to get the issuer is provided, the internal default +function will be used instead.\fR +.PP +\&\fBX509_STORE_set_check_revocation()\fR sets the revocation checking +function. +Its purpose is to look through the final chain and check the +revocation status for each certificate. +It must return 0 on failure and 1 on success. +\&\fIIf no function to get the issuer is provided, the internal default +function will be used instead.\fR +.PP +\&\fBX509_STORE_set_get_crl()\fR sets the function to get the crl for a given +certificate \fBx\fR. +When found, the crl must be assigned to \fB*crl\fR. +This function must return 0 on failure and 1 on success. +\&\fIIf no function to get the issuer is provided, the internal default +function will be used instead.\fR +.PP +\&\fBX509_STORE_set_check_crl()\fR sets the function to check the validity of +the given \fBcrl\fR. +This function must return 0 on failure and 1 on success. +\&\fIIf no function to get the issuer is provided, the internal default +function will be used instead.\fR +.PP +\&\fBX509_STORE_set_cert_crl()\fR sets the function to check the revocation +status of the given certificate \fBx\fR against the given \fBcrl\fR. +This function must return 0 on failure and 1 on success. +\&\fIIf no function to get the issuer is provided, the internal default +function will be used instead.\fR +.PP +\&\fBX509_STORE_set_check_policy()\fR sets the function to check the policies +of all the certificates in the final chain.. +This function must return 0 on failure and 1 on success. +\&\fIIf no function to get the issuer is provided, the internal default +function will be used instead.\fR +.PP +\&\fBX509_STORE_set_lookup_certs()\fR and \fBX509_STORE_set_lookup_crls()\fR set the +functions to look up all the certs or all the CRLs that match the +given name \fBnm\fR. +These functions return \s-1NULL\s0 on failure and a pointer to a stack of +certificates (\fBX509\fR) or to a stack of CRLs (\fBX509_CRL\fR) on +success. +\&\fIIf no function to get the issuer is provided, the internal default +function will be used instead.\fR +.PP +\&\fBX509_STORE_set_cleanup()\fR sets the final cleanup function, which is +called when the context (\fBX509_STORE_CTX\fR) is being torn down. +This function doesn't return any value. +\&\fIIf no function to get the issuer is provided, the internal default +function will be used instead.\fR +.PP +\&\fBX509_STORE_get_verify_cb()\fR, \fBX509_STORE_CTX_get_verify()\fR, +\&\fBX509_STORE_get_get_issuer()\fR, \fBX509_STORE_get_check_issued()\fR, +\&\fBX509_STORE_get_check_revocation()\fR, \fBX509_STORE_get_get_crl()\fR, +\&\fBX509_STORE_get_check_crl()\fR, \fBX509_STORE_set_verify()\fR, +\&\fBX509_STORE_set_get_issuer()\fR, \fBX509_STORE_get_cert_crl()\fR, +\&\fBX509_STORE_get_check_policy()\fR, \fBX509_STORE_get_lookup_certs()\fR, +\&\fBX509_STORE_get_lookup_crls()\fR and \fBX509_STORE_get_cleanup()\fR all return +the function pointer assigned with \fBX509_STORE_set_check_issued()\fR, +\&\fBX509_STORE_set_check_revocation()\fR, \fBX509_STORE_set_get_crl()\fR, +\&\fBX509_STORE_set_check_crl()\fR, \fBX509_STORE_set_cert_crl()\fR, +\&\fBX509_STORE_set_check_policy()\fR, \fBX509_STORE_set_lookup_certs()\fR, +\&\fBX509_STORE_set_lookup_crls()\fR and \fBX509_STORE_set_cleanup()\fR, or \s-1NULL\s0 if +no assignment has been made. +.PP +\&\fBX509_STORE_set_verify_cb_func()\fR, \fBX509_STORE_set_verify_func()\fR and +\&\fBX509_STORE_set_lookup_crls_cb()\fR are aliases for +\&\fBX509_STORE_set_verify_cb()\fR, \fBX509_STORE_set_verify()\fR and +X509_STORE_set_lookup_crls, available as macros for backward +compatibility. +.SH "NOTES" +.IX Header "NOTES" +All the callbacks from a \fBX509_STORE\fR are inherited by the +corresponding \fBX509_STORE_CTX\fR structure when it is initialized. +See \fBX509_STORE_CTX_set_verify_cb\fR\|(3) for further details. +.SH "BUGS" +.IX Header "BUGS" +The macro version of this function was the only one available before +OpenSSL 1.0.0. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +The X509_STORE_set_*() functions do not return a value. +.PP +The X509_STORE_get_*() functions return a pointer of the appropriate +function type. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBX509_STORE_CTX_set_verify_cb\fR\|(3), \fBX509_STORE_CTX_get0_chain\fR\|(3), +\&\fBX509_STORE_CTX_verify_cb\fR\|(3), \fBX509_STORE_CTX_verify_fn\fR\|(3), +\&\fBCMS_verify\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +The \fBX509_STORE_set_verify_cb()\fR function was added in OpenSSL 1.0.0. +.PP +The functions +\&\fBX509_STORE_set_verify_cb()\fR, \fBX509_STORE_get_verify_cb()\fR, +\&\fBX509_STORE_set_verify()\fR, \fBX509_STORE_CTX_get_verify()\fR, +\&\fBX509_STORE_set_get_issuer()\fR, \fBX509_STORE_get_get_issuer()\fR, +\&\fBX509_STORE_set_check_issued()\fR, \fBX509_STORE_get_check_issued()\fR, +\&\fBX509_STORE_set_check_revocation()\fR, \fBX509_STORE_get_check_revocation()\fR, +\&\fBX509_STORE_set_get_crl()\fR, \fBX509_STORE_get_get_crl()\fR, +\&\fBX509_STORE_set_check_crl()\fR, \fBX509_STORE_get_check_crl()\fR, +\&\fBX509_STORE_set_cert_crl()\fR, \fBX509_STORE_get_cert_crl()\fR, +\&\fBX509_STORE_set_check_policy()\fR, \fBX509_STORE_get_check_policy()\fR, +\&\fBX509_STORE_set_lookup_certs()\fR, \fBX509_STORE_get_lookup_certs()\fR, +\&\fBX509_STORE_set_lookup_crls()\fR, \fBX509_STORE_get_lookup_crls()\fR, +\&\fBX509_STORE_set_cleanup()\fR and \fBX509_STORE_get_cleanup()\fR +were added in OpenSSL 1.1.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2009\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_VERIFY_PARAM_set_flags.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_VERIFY_PARAM_set_flags.3 new file mode 100644 index 00000000..edd57c00 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_VERIFY_PARAM_set_flags.3 @@ -0,0 +1,500 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "X509_VERIFY_PARAM_SET_FLAGS 3" +.TH X509_VERIFY_PARAM_SET_FLAGS 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +X509_VERIFY_PARAM_set_flags, X509_VERIFY_PARAM_clear_flags, X509_VERIFY_PARAM_get_flags, X509_VERIFY_PARAM_set_purpose, X509_VERIFY_PARAM_get_inh_flags, X509_VERIFY_PARAM_set_inh_flags, X509_VERIFY_PARAM_set_trust, X509_VERIFY_PARAM_set_depth, X509_VERIFY_PARAM_get_depth, X509_VERIFY_PARAM_set_auth_level, X509_VERIFY_PARAM_get_auth_level, X509_VERIFY_PARAM_set_time, X509_VERIFY_PARAM_get_time, X509_VERIFY_PARAM_add0_policy, X509_VERIFY_PARAM_set1_policies, X509_VERIFY_PARAM_set1_host, X509_VERIFY_PARAM_add1_host, X509_VERIFY_PARAM_set_hostflags, X509_VERIFY_PARAM_get_hostflags, X509_VERIFY_PARAM_get0_peername, X509_VERIFY_PARAM_set1_email, X509_VERIFY_PARAM_set1_ip, X509_VERIFY_PARAM_set1_ip_asc \&\- X509 verification parameters +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int X509_VERIFY_PARAM_set_flags(X509_VERIFY_PARAM *param, +\& unsigned long flags); +\& int X509_VERIFY_PARAM_clear_flags(X509_VERIFY_PARAM *param, +\& unsigned long flags); +\& unsigned long X509_VERIFY_PARAM_get_flags(X509_VERIFY_PARAM *param); +\& +\& int X509_VERIFY_PARAM_set_inh_flags(X509_VERIFY_PARAM *param, +\& uint32_t flags); +\& uint32_t X509_VERIFY_PARAM_get_inh_flags(const X509_VERIFY_PARAM *param); +\& +\& int X509_VERIFY_PARAM_set_purpose(X509_VERIFY_PARAM *param, int purpose); +\& int X509_VERIFY_PARAM_set_trust(X509_VERIFY_PARAM *param, int trust); +\& +\& void X509_VERIFY_PARAM_set_time(X509_VERIFY_PARAM *param, time_t t); +\& time_t X509_VERIFY_PARAM_get_time(const X509_VERIFY_PARAM *param); +\& +\& int X509_VERIFY_PARAM_add0_policy(X509_VERIFY_PARAM *param, +\& ASN1_OBJECT *policy); +\& int X509_VERIFY_PARAM_set1_policies(X509_VERIFY_PARAM *param, +\& STACK_OF(ASN1_OBJECT) *policies); +\& +\& void X509_VERIFY_PARAM_set_depth(X509_VERIFY_PARAM *param, int depth); +\& int X509_VERIFY_PARAM_get_depth(const X509_VERIFY_PARAM *param); +\& +\& void X509_VERIFY_PARAM_set_auth_level(X509_VERIFY_PARAM *param, +\& int auth_level); +\& int X509_VERIFY_PARAM_get_auth_level(const X509_VERIFY_PARAM *param); +\& +\& int X509_VERIFY_PARAM_set1_host(X509_VERIFY_PARAM *param, +\& const char *name, size_t namelen); +\& int X509_VERIFY_PARAM_add1_host(X509_VERIFY_PARAM *param, +\& const char *name, size_t namelen); +\& void X509_VERIFY_PARAM_set_hostflags(X509_VERIFY_PARAM *param, +\& unsigned int flags); +\& unsigned int X509_VERIFY_PARAM_get_hostflags(const X509_VERIFY_PARAM *param); +\& char *X509_VERIFY_PARAM_get0_peername(X509_VERIFY_PARAM *param); +\& int X509_VERIFY_PARAM_set1_email(X509_VERIFY_PARAM *param, +\& const char *email, size_t emaillen); +\& int X509_VERIFY_PARAM_set1_ip(X509_VERIFY_PARAM *param, +\& const unsigned char *ip, size_t iplen); +\& int X509_VERIFY_PARAM_set1_ip_asc(X509_VERIFY_PARAM *param, const char *ipasc); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +These functions manipulate the \fBX509_VERIFY_PARAM\fR structure associated with +a certificate verification operation. +.PP +The \fBX509_VERIFY_PARAM_set_flags()\fR function sets the flags in \fBparam\fR by oring +it with \fBflags\fR. See the \fB\s-1VERIFICATION FLAGS\s0\fR section for a complete +description of values the \fBflags\fR parameter can take. +.PP +\&\fBX509_VERIFY_PARAM_get_flags()\fR returns the flags in \fBparam\fR. +.PP +\&\fBX509_VERIFY_PARAM_get_inh_flags()\fR returns the inheritance flags in \fBparam\fR +which specifies how verification flags are copied from one structure to +another. \fBX509_VERIFY_PARAM_set_inh_flags()\fR sets the inheritance flags. +See the \fB\s-1INHERITANCE FLAGS\s0\fR section for a description of these bits. +.PP +\&\fBX509_VERIFY_PARAM_clear_flags()\fR clears the flags \fBflags\fR in \fBparam\fR. +.PP +\&\fBX509_VERIFY_PARAM_set_purpose()\fR sets the verification purpose in \fBparam\fR +to \fBpurpose\fR. This determines the acceptable purpose of the certificate +chain, for example \s-1SSL\s0 client or \s-1SSL\s0 server. +.PP +\&\fBX509_VERIFY_PARAM_set_trust()\fR sets the trust setting in \fBparam\fR to +\&\fBtrust\fR. +.PP +\&\fBX509_VERIFY_PARAM_set_time()\fR sets the verification time in \fBparam\fR to +\&\fBt\fR. Normally the current time is used. +.PP +\&\fBX509_VERIFY_PARAM_add0_policy()\fR enables policy checking (it is disabled +by default) and adds \fBpolicy\fR to the acceptable policy set. +.PP +\&\fBX509_VERIFY_PARAM_set1_policies()\fR enables policy checking (it is disabled +by default) and sets the acceptable policy set to \fBpolicies\fR. Any existing +policy set is cleared. The \fBpolicies\fR parameter can be \fB\s-1NULL\s0\fR to clear +an existing policy set. +.PP +\&\fBX509_VERIFY_PARAM_set_depth()\fR sets the maximum verification depth to \fBdepth\fR. +That is the maximum number of intermediate \s-1CA\s0 certificates that can appear in a +chain. +A maximal depth chain contains 2 more certificates than the limit, since +neither the end-entity certificate nor the trust-anchor count against this +limit. +Thus a \fBdepth\fR limit of 0 only allows the end-entity certificate to be signed +directly by the trust-anchor, while with a \fBdepth\fR limit of 1 there can be one +intermediate \s-1CA\s0 certificate between the trust-anchor and the end-entity +certificate. +.PP +\&\fBX509_VERIFY_PARAM_set_auth_level()\fR sets the authentication security level to +\&\fBauth_level\fR. +The authentication security level determines the acceptable signature and public +key strength when verifying certificate chains. +For a certificate chain to validate, the public keys of all the certificates +must meet the specified security level. +The signature algorithm security level is not enforced for the chain's \fItrust +anchor\fR certificate, which is either directly trusted or validated by means other +than its signature. +See \fBSSL_CTX_set_security_level\fR\|(3) for the definitions of the available +levels. +The default security level is \-1, or \*(L"not set\*(R". +At security level 0 or lower all algorithms are acceptable. +Security level 1 requires at least 80\-bit\-equivalent security and is broadly +interoperable, though it will, for example, reject \s-1MD5\s0 signatures or \s-1RSA\s0 keys +shorter than 1024 bits. +.PP +\&\fBX509_VERIFY_PARAM_set1_host()\fR sets the expected \s-1DNS\s0 hostname to +\&\fBname\fR clearing any previously specified host name or names. If +\&\fBname\fR is \s-1NULL,\s0 or empty the list of hostnames is cleared, and +name checks are not performed on the peer certificate. If \fBname\fR +is NUL-terminated, \fBnamelen\fR may be zero, otherwise \fBnamelen\fR +must be set to the length of \fBname\fR. +.PP +When a hostname is specified, +certificate verification automatically invokes \fBX509_check_host\fR\|(3) +with flags equal to the \fBflags\fR argument given to +\&\fBX509_VERIFY_PARAM_set_hostflags()\fR (default zero). Applications +are strongly advised to use this interface in preference to explicitly +calling \fBX509_check_host\fR\|(3), hostname checks may be out of scope +with the \s-1\fBDANE\-EE\s0\fR\|(3) certificate usage, and the internal check will +be suppressed as appropriate when \s-1DANE\s0 verification is enabled. +.PP +When the subject CommonName will not be ignored, whether as a result of the +\&\fBX509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT\fR host flag, or because no \s-1DNS\s0 subject +alternative names are present in the certificate, any \s-1DNS\s0 name constraints in +issuer certificates apply to the subject CommonName as well as the subject +alternative name extension. +.PP +When the subject CommonName will be ignored, whether as a result of the +\&\fBX509_CHECK_FLAG_NEVER_CHECK_SUBJECT\fR host flag, or because some \s-1DNS\s0 subject +alternative names are present in the certificate, \s-1DNS\s0 name constraints in +issuer certificates will not be applied to the subject \s-1DN.\s0 +As described in \fBX509_check_host\fR\|(3) the \fBX509_CHECK_FLAG_NEVER_CHECK_SUBJECT\fR +flag takes precedence over the \fBX509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT\fR flag. +.PP +\&\fBX509_VERIFY_PARAM_get_hostflags()\fR returns any host flags previously set via a +call to \fBX509_VERIFY_PARAM_set_hostflags()\fR. +.PP +\&\fBX509_VERIFY_PARAM_add1_host()\fR adds \fBname\fR as an additional reference +identifier that can match the peer's certificate. Any previous names +set via \fBX509_VERIFY_PARAM_set1_host()\fR or \fBX509_VERIFY_PARAM_add1_host()\fR +are retained, no change is made if \fBname\fR is \s-1NULL\s0 or empty. When +multiple names are configured, the peer is considered verified when +any name matches. +.PP +\&\fBX509_VERIFY_PARAM_get0_peername()\fR returns the \s-1DNS\s0 hostname or subject +CommonName from the peer certificate that matched one of the reference +identifiers. When wildcard matching is not disabled, or when a +reference identifier specifies a parent domain (starts with \*(L".\*(R") +rather than a hostname, the peer name may be a wildcard name or a +sub-domain of the reference identifier respectively. The return +string is allocated by the library and is no longer valid once the +associated \fBparam\fR argument is freed. Applications must not free +the return value. +.PP +\&\fBX509_VERIFY_PARAM_set1_email()\fR sets the expected \s-1RFC822\s0 email address to +\&\fBemail\fR. If \fBemail\fR is NUL-terminated, \fBemaillen\fR may be zero, otherwise +\&\fBemaillen\fR must be set to the length of \fBemail\fR. When an email address +is specified, certificate verification automatically invokes +\&\fBX509_check_email\fR\|(3). +.PP +\&\fBX509_VERIFY_PARAM_set1_ip()\fR sets the expected \s-1IP\s0 address to \fBip\fR. +The \fBip\fR argument is in binary format, in network byte-order and +\&\fBiplen\fR must be set to 4 for IPv4 and 16 for IPv6. When an \s-1IP\s0 +address is specified, certificate verification automatically invokes +\&\fBX509_check_ip\fR\|(3). +.PP +\&\fBX509_VERIFY_PARAM_set1_ip_asc()\fR sets the expected \s-1IP\s0 address to +\&\fBipasc\fR. The \fBipasc\fR argument is a NUL-terminal \s-1ASCII\s0 string: +dotted decimal quad for IPv4 and colon-separated hexadecimal for +IPv6. The condensed \*(L"::\*(R" notation is supported for IPv6 addresses. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBX509_VERIFY_PARAM_set_flags()\fR, \fBX509_VERIFY_PARAM_clear_flags()\fR, +\&\fBX509_VERIFY_PARAM_set_inh_flags()\fR, +\&\fBX509_VERIFY_PARAM_set_purpose()\fR, \fBX509_VERIFY_PARAM_set_trust()\fR, +\&\fBX509_VERIFY_PARAM_add0_policy()\fR \fBX509_VERIFY_PARAM_set1_policies()\fR, +\&\fBX509_VERIFY_PARAM_set1_host()\fR, \fBX509_VERIFY_PARAM_add1_host()\fR, +\&\fBX509_VERIFY_PARAM_set1_email()\fR, \fBX509_VERIFY_PARAM_set1_ip()\fR and +\&\fBX509_VERIFY_PARAM_set1_ip_asc()\fR return 1 for success and 0 for +failure. +.PP +\&\fBX509_VERIFY_PARAM_get_flags()\fR returns the current verification flags. +.PP +\&\fBX509_VERIFY_PARAM_get_hostflags()\fR returns any current host flags. +.PP +\&\fBX509_VERIFY_PARAM_get_inh_flags()\fR returns the current inheritance flags. +.PP +\&\fBX509_VERIFY_PARAM_set_time()\fR and \fBX509_VERIFY_PARAM_set_depth()\fR do not return +values. +.PP +\&\fBX509_VERIFY_PARAM_get_depth()\fR returns the current verification depth. +.PP +\&\fBX509_VERIFY_PARAM_get_auth_level()\fR returns the current authentication security +level. +.SH "VERIFICATION FLAGS" +.IX Header "VERIFICATION FLAGS" +The verification flags consists of zero or more of the following flags +ored together. +.PP +\&\fBX509_V_FLAG_CRL_CHECK\fR enables \s-1CRL\s0 checking for the certificate chain leaf +certificate. An error occurs if a suitable \s-1CRL\s0 cannot be found. +.PP +\&\fBX509_V_FLAG_CRL_CHECK_ALL\fR enables \s-1CRL\s0 checking for the entire certificate +chain. +.PP +\&\fBX509_V_FLAG_IGNORE_CRITICAL\fR disabled critical extension checking. By default +any unhandled critical extensions in certificates or (if checked) CRLs results +in a fatal error. If this flag is set unhandled critical extensions are +ignored. \fB\s-1WARNING\s0\fR setting this option for anything other than debugging +purposes can be a security risk. Finer control over which extensions are +supported can be performed in the verification callback. +.PP +The \fBX509_V_FLAG_X509_STRICT\fR flag disables workarounds for some broken +certificates and makes the verification strictly apply \fBX509\fR rules. +.PP +\&\fBX509_V_FLAG_ALLOW_PROXY_CERTS\fR enables proxy certificate verification. +.PP +\&\fBX509_V_FLAG_POLICY_CHECK\fR enables certificate policy checking, by default +no policy checking is performed. Additional information is sent to the +verification callback relating to policy checking. +.PP +\&\fBX509_V_FLAG_EXPLICIT_POLICY\fR, \fBX509_V_FLAG_INHIBIT_ANY\fR and +\&\fBX509_V_FLAG_INHIBIT_MAP\fR set the \fBrequire explicit policy\fR, \fBinhibit any +policy\fR and \fBinhibit policy mapping\fR flags respectively as defined in +\&\fB\s-1RFC3280\s0\fR. Policy checking is automatically enabled if any of these flags +are set. +.PP +If \fBX509_V_FLAG_NOTIFY_POLICY\fR is set and the policy checking is successful +a special status code is set to the verification callback. This permits it +to examine the valid policy tree and perform additional checks or simply +log it for debugging purposes. +.PP +By default some additional features such as indirect CRLs and CRLs signed by +different keys are disabled. If \fBX509_V_FLAG_EXTENDED_CRL_SUPPORT\fR is set +they are enabled. +.PP +If \fBX509_V_FLAG_USE_DELTAS\fR is set delta CRLs (if present) are used to +determine certificate status. If not set deltas are ignored. +.PP +\&\fBX509_V_FLAG_CHECK_SS_SIGNATURE\fR enables checking of the root \s-1CA\s0 self signed +certificate signature. By default this check is disabled because it doesn't +add any additional security but in some cases applications might want to +check the signature anyway. A side effect of not checking the root \s-1CA\s0 +signature is that disabled or unsupported message digests on the root \s-1CA\s0 +are not treated as fatal errors. +.PP +When \fBX509_V_FLAG_TRUSTED_FIRST\fR is set, construction of the certificate chain +in \fBX509_verify_cert\fR\|(3) will search the trust store for issuer certificates +before searching the provided untrusted certificates. +Local issuer certificates are often more likely to satisfy local security +requirements and lead to a locally trusted root. +This is especially important when some certificates in the trust store have +explicit trust settings (see \*(L"\s-1TRUST SETTINGS\*(R"\s0 in \fBx509\fR\|(1)). +As of OpenSSL 1.1.0 this option is on by default. +.PP +The \fBX509_V_FLAG_NO_ALT_CHAINS\fR flag suppresses checking for alternative +chains. +By default, unless \fBX509_V_FLAG_TRUSTED_FIRST\fR is set, when building a +certificate chain, if the first certificate chain found is not trusted, then +OpenSSL will attempt to replace untrusted certificates supplied by the peer +with certificates from the trust store to see if an alternative chain can be +found that is trusted. +As of OpenSSL 1.1.0, with \fBX509_V_FLAG_TRUSTED_FIRST\fR always set, this option +has no effect. +.PP +The \fBX509_V_FLAG_PARTIAL_CHAIN\fR flag causes intermediate certificates in the +trust store to be treated as trust-anchors, in the same way as the self-signed +root \s-1CA\s0 certificates. +This makes it possible to trust certificates issued by an intermediate \s-1CA\s0 +without having to trust its ancestor root \s-1CA.\s0 +With OpenSSL 1.1.0 and later and set, chain +construction stops as soon as the first certificate from the trust store is +added to the chain, whether that certificate is a self-signed \*(L"root\*(R" +certificate or a not self-signed intermediate certificate. +Thus, when an intermediate certificate is found in the trust store, the +verified chain passed to callbacks may be shorter than it otherwise would +be without the \fBX509_V_FLAG_PARTIAL_CHAIN\fR flag. +.PP +The \fBX509_V_FLAG_NO_CHECK_TIME\fR flag suppresses checking the validity period +of certificates and CRLs against the current time. If \fBX509_VERIFY_PARAM_set_time()\fR +is used to specify a verification time, the check is not suppressed. +.SH "INHERITANCE FLAGS" +.IX Header "INHERITANCE FLAGS" +These flags specify how parameters are \*(L"inherited\*(R" from one structure to +another. +.PP +If \fBX509_VP_FLAG_ONCE\fR is set then the current setting is zeroed +after the next call. +.PP +If \fBX509_VP_FLAG_LOCKED\fR is set then no values are copied. This overrides +all of the following flags. +.PP +If \fBX509_VP_FLAG_DEFAULT\fR is set then anything set in the source is copied +to the destination. Effectively the values in \*(L"to\*(R" become default values +which will be used only if nothing new is set in \*(L"from\*(R". This is the +default. +.PP +If \fBX509_VP_FLAG_OVERWRITE\fR is set then all value are copied across whether +they are set or not. Flags is still Ored though. +.PP +If \fBX509_VP_FLAG_RESET_FLAGS\fR is set then the flags value is copied instead +of ORed. +.SH "NOTES" +.IX Header "NOTES" +The above functions should be used to manipulate verification parameters +instead of functions which work in specific structures such as +\&\fBX509_STORE_CTX_set_flags()\fR which are likely to be deprecated in a future +release. +.SH "BUGS" +.IX Header "BUGS" +Delta \s-1CRL\s0 checking is currently primitive. Only a single delta can be used and +(partly due to limitations of \fBX509_STORE\fR) constructed CRLs are not +maintained. +.PP +If CRLs checking is enable CRLs are expected to be available in the +corresponding \fBX509_STORE\fR structure. No attempt is made to download +CRLs from the \s-1CRL\s0 distribution points extension. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +Enable \s-1CRL\s0 checking when performing certificate verification during \s-1SSL\s0 +connections associated with an \fB\s-1SSL_CTX\s0\fR structure \fBctx\fR: +.PP +.Vb 1 +\& X509_VERIFY_PARAM *param; +\& +\& param = X509_VERIFY_PARAM_new(); +\& X509_VERIFY_PARAM_set_flags(param, X509_V_FLAG_CRL_CHECK); +\& SSL_CTX_set1_param(ctx, param); +\& X509_VERIFY_PARAM_free(param); +.Ve +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBX509_verify_cert\fR\|(3), +\&\fBX509_check_host\fR\|(3), +\&\fBX509_check_email\fR\|(3), +\&\fBX509_check_ip\fR\|(3), +\&\fBx509\fR\|(1) +.SH "HISTORY" +.IX Header "HISTORY" +The \fBX509_V_FLAG_NO_ALT_CHAINS\fR flag was added in OpenSSL 1.1.0. +The flag \fBX509_V_FLAG_CB_ISSUER_CHECK\fR was deprecated in OpenSSL 1.1.0 +and has no effect. +.PP +The \fBX509_VERIFY_PARAM_get_hostflags()\fR function was added in OpenSSL 1.1.0i. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2009\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_check_ca.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_check_ca.3 new file mode 100644 index 00000000..548e6e93 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_check_ca.3 @@ -0,0 +1,177 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "X509_CHECK_CA 3" +.TH X509_CHECK_CA 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +X509_check_ca \- check if given certificate is CA certificate +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int X509_check_ca(X509 *cert); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +This function checks if given certificate is \s-1CA\s0 certificate (can be used +to sign other certificates). +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +Function return 0, if it is not \s-1CA\s0 certificate, 1 if it is proper X509v3 +\&\s-1CA\s0 certificate with \fBbasicConstraints\fR extension \s-1CA:TRUE, +3,\s0 if it is self-signed X509 v1 certificate, 4, if it is certificate with +\&\fBkeyUsage\fR extension with bit \fBkeyCertSign\fR set, but without +\&\fBbasicConstraints\fR, and 5 if it has outdated Netscape Certificate Type +extension telling that it is \s-1CA\s0 certificate. +.PP +Actually, any non-zero value means that this certificate could have been +used to sign other certificates. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBX509_verify_cert\fR\|(3), +\&\fBX509_check_issued\fR\|(3), +\&\fBX509_check_purpose\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2015\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_check_host.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_check_host.3 new file mode 100644 index 00000000..c708f84c --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_check_host.3 @@ -0,0 +1,288 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "X509_CHECK_HOST 3" +.TH X509_CHECK_HOST 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +X509_check_host, X509_check_email, X509_check_ip, X509_check_ip_asc \- X.509 certificate matching +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int X509_check_host(X509 *, const char *name, size_t namelen, +\& unsigned int flags, char **peername); +\& int X509_check_email(X509 *, const char *address, size_t addresslen, +\& unsigned int flags); +\& int X509_check_ip(X509 *, const unsigned char *address, size_t addresslen, +\& unsigned int flags); +\& int X509_check_ip_asc(X509 *, const char *address, unsigned int flags); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The certificate matching functions are used to check whether a +certificate matches a given host name, email address, or \s-1IP\s0 address. +The validity of the certificate and its trust level has to be checked by +other means. +.PP +\&\fBX509_check_host()\fR checks if the certificate Subject Alternative +Name (\s-1SAN\s0) or Subject CommonName (\s-1CN\s0) matches the specified host +name, which must be encoded in the preferred name syntax described +in section 3.5 of \s-1RFC 1034.\s0 By default, wildcards are supported +and they match only in the left-most label; but they may match +part of that label with an explicit prefix or suffix. For example, +by default, the host \fBname\fR \*(L"www.example.com\*(R" would match a +certificate with a \s-1SAN\s0 or \s-1CN\s0 value of \*(L"*.example.com\*(R", \*(L"w*.example.com\*(R" +or \*(L"*w.example.com\*(R". +.PP +Per section 6.4.2 of \s-1RFC 6125,\s0 \fBname\fR values representing international +domain names must be given in A\-label form. The \fBnamelen\fR argument +must be the number of characters in the name string or zero in which +case the length is calculated with strlen(\fBname\fR). When \fBname\fR starts +with a dot (e.g \*(L".example.com\*(R"), it will be matched by a certificate +valid for any sub-domain of \fBname\fR, (see also +\&\fBX509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS\fR below). +.PP +When the certificate is matched, and \fBpeername\fR is not \s-1NULL,\s0 a +pointer to a copy of the matching \s-1SAN\s0 or \s-1CN\s0 from the peer certificate +is stored at the address passed in \fBpeername\fR. The application +is responsible for freeing the peername via \fBOPENSSL_free()\fR when it +is no longer needed. +.PP +\&\fBX509_check_email()\fR checks if the certificate matches the specified +email \fBaddress\fR. Only the mailbox syntax of \s-1RFC 822\s0 is supported, +comments are not allowed, and no attempt is made to normalize quoted +characters. The \fBaddresslen\fR argument must be the number of +characters in the address string or zero in which case the length +is calculated with strlen(\fBaddress\fR). +.PP +\&\fBX509_check_ip()\fR checks if the certificate matches a specified IPv4 or +IPv6 address. The \fBaddress\fR array is in binary format, in network +byte order. The length is either 4 (IPv4) or 16 (IPv6). Only +explicitly marked addresses in the certificates are considered; \s-1IP\s0 +addresses stored in \s-1DNS\s0 names and Common Names are ignored. +.PP +\&\fBX509_check_ip_asc()\fR is similar, except that the NUL-terminated +string \fBaddress\fR is first converted to the internal representation. +.PP +The \fBflags\fR argument is usually 0. It can be the bitwise \s-1OR\s0 of the +flags: +.IP "\fBX509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT\fR," 4 +.IX Item "X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT," +.PD 0 +.IP "\fBX509_CHECK_FLAG_NEVER_CHECK_SUBJECT\fR," 4 +.IX Item "X509_CHECK_FLAG_NEVER_CHECK_SUBJECT," +.IP "\fBX509_CHECK_FLAG_NO_WILDCARDS\fR," 4 +.IX Item "X509_CHECK_FLAG_NO_WILDCARDS," +.IP "\fBX509_CHECK_FLAG_NO_PARTIAL_WILDCARDS\fR," 4 +.IX Item "X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS," +.IP "\fBX509_CHECK_FLAG_MULTI_LABEL_WILDCARDS\fR." 4 +.IX Item "X509_CHECK_FLAG_MULTI_LABEL_WILDCARDS." +.IP "\fBX509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS\fR." 4 +.IX Item "X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS." +.PD +.PP +The \fBX509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT\fR flag causes the function +to consider the subject \s-1DN\s0 even if the certificate contains at least +one subject alternative name of the right type (\s-1DNS\s0 name or email +address as appropriate); the default is to ignore the subject \s-1DN\s0 +when at least one corresponding subject alternative names is present. +.PP +The \fBX509_CHECK_FLAG_NEVER_CHECK_SUBJECT\fR flag causes the function to never +consider the subject \s-1DN\s0 even if the certificate contains no subject alternative +names of the right type (\s-1DNS\s0 name or email address as appropriate); the default +is to use the subject \s-1DN\s0 when no corresponding subject alternative names are +present. +If both \fBX509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT\fR and +\&\fBX509_CHECK_FLAG_NEVER_CHECK_SUBJECT\fR are specified, the latter takes +precedence and the subject \s-1DN\s0 is not checked for matching names. +.PP +If set, \fBX509_CHECK_FLAG_NO_WILDCARDS\fR disables wildcard +expansion; this only applies to \fBX509_check_host\fR. +.PP +If set, \fBX509_CHECK_FLAG_NO_PARTIAL_WILDCARDS\fR suppresses support +for \*(L"*\*(R" as wildcard pattern in labels that have a prefix or suffix, +such as: \*(L"www*\*(R" or \*(L"*www\*(R"; this only applies to \fBX509_check_host\fR. +.PP +If set, \fBX509_CHECK_FLAG_MULTI_LABEL_WILDCARDS\fR allows a \*(L"*\*(R" that +constitutes the complete label of a \s-1DNS\s0 name (e.g. \*(L"*.example.com\*(R") +to match more than one label in \fBname\fR; this flag only applies +to \fBX509_check_host\fR. +.PP +If set, \fBX509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS\fR restricts \fBname\fR +values which start with \*(L".\*(R", that would otherwise match any sub-domain +in the peer certificate, to only match direct child sub-domains. +Thus, for instance, with this flag set a \fBname\fR of \*(L".example.com\*(R" +would match a peer certificate with a \s-1DNS\s0 name of \*(L"www.example.com\*(R", +but would not match a peer certificate with a \s-1DNS\s0 name of +\&\*(L"www.sub.example.com\*(R"; this flag only applies to \fBX509_check_host\fR. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +The functions return 1 for a successful match, 0 for a failed match +and \-1 for an internal error: typically a memory allocation failure +or an \s-1ASN.1\s0 decoding error. +.PP +All functions can also return \-2 if the input is malformed. For example, +\&\fBX509_check_host()\fR returns \-2 if the provided \fBname\fR contains embedded +NULs. +.SH "NOTES" +.IX Header "NOTES" +Applications are encouraged to use \fBX509_VERIFY_PARAM_set1_host()\fR +rather than explicitly calling \fBX509_check_host\fR\|(3). Host name +checks may be out of scope with the \s-1\fBDANE\-EE\s0\fR\|(3) certificate usage, +and the internal checks will be suppressed as appropriate when +\&\s-1DANE\s0 support is enabled. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBSSL_get_verify_result\fR\|(3), +\&\fBX509_VERIFY_PARAM_set1_host\fR\|(3), +\&\fBX509_VERIFY_PARAM_add1_host\fR\|(3), +\&\fBX509_VERIFY_PARAM_set1_email\fR\|(3), +\&\fBX509_VERIFY_PARAM_set1_ip\fR\|(3), +\&\fBX509_VERIFY_PARAM_set1_ipasc\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +These functions were added in OpenSSL 1.0.2. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2012\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_check_issued.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_check_issued.3 new file mode 100644 index 00000000..a3f58496 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_check_issued.3 @@ -0,0 +1,175 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "X509_CHECK_ISSUED 3" +.TH X509_CHECK_ISSUED 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +X509_check_issued \- checks if certificate is issued by another certificate +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int X509_check_issued(X509 *issuer, X509 *subject); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +This function checks if certificate \fIsubject\fR was issued using \s-1CA\s0 +certificate \fIissuer\fR. This function takes into account not only +matching of issuer field of \fIsubject\fR with subject field of \fIissuer\fR, +but also compares \fBauthorityKeyIdentifier\fR extension of \fIsubject\fR with +\&\fBsubjectKeyIdentifier\fR of \fIissuer\fR if \fBauthorityKeyIdentifier\fR +present in the \fIsubject\fR certificate and checks \fBkeyUsage\fR field of +\&\fIissuer\fR. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +Function return \fBX509_V_OK\fR if certificate \fIsubject\fR is issued by +\&\fIissuer\fR or some \fBX509_V_ERR*\fR constant to indicate an error. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBX509_verify_cert\fR\|(3), +\&\fBX509_check_ca\fR\|(3), +\&\fBverify\fR\|(1) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2015\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_check_private_key.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_check_private_key.3 new file mode 100644 index 00000000..fe51bda3 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_check_private_key.3 @@ -0,0 +1,183 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "X509_CHECK_PRIVATE_KEY 3" +.TH X509_CHECK_PRIVATE_KEY 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +X509_check_private_key, X509_REQ_check_private_key \- check the consistency of a private key with the public key in an X509 certificate or certificate request +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int X509_check_private_key(X509 *x, EVP_PKEY *k); +\& +\& int X509_REQ_check_private_key(X509_REQ *x, EVP_PKEY *k); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBX509_check_private_key()\fR function checks the consistency of private +key \fBk\fR with the public key in \fBx\fR. +.PP +\&\fBX509_REQ_check_private_key()\fR is equivalent to \fBX509_check_private_key()\fR +except that \fBx\fR represents a certificate request of structure \fBX509_REQ\fR. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBX509_check_private_key()\fR and \fBX509_REQ_check_private_key()\fR return 1 if +the keys match each other, and 0 if not. +.PP +If the key is invalid or an error occurred, the reason code can be +obtained using \fBERR_get_error\fR\|(3). +.SH "BUGS" +.IX Header "BUGS" +The \fBcheck_private_key\fR functions don't check if \fBk\fR itself is indeed +a private key or not. It merely compares the public materials (e.g. exponent +and modulus of an \s-1RSA\s0 key) and/or key parameters (e.g. \s-1EC\s0 params of an \s-1EC\s0 key) +of a key pair. So if you pass a public key to these functions in \fBk\fR, it will +return success. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_get_error\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_check_purpose.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_check_purpose.3 new file mode 100644 index 00000000..754ab172 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_check_purpose.3 @@ -0,0 +1,204 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "X509_CHECK_PURPOSE 3" +.TH X509_CHECK_PURPOSE 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +X509_check_purpose \- Check the purpose of a certificate +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int X509_check_purpose(X509 *x, int id, int ca) +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +This function checks if certificate \fIx\fR was created with the purpose +represented by \fIid\fR. If \fIca\fR is nonzero, then certificate \fIx\fR is +checked to determine if it's a possible \s-1CA\s0 with various levels of certainty +possibly returned. +.PP +Below are the potential \s-1ID\s0's that can be checked: +.PP +.Vb 9 +\& # define X509_PURPOSE_SSL_CLIENT 1 +\& # define X509_PURPOSE_SSL_SERVER 2 +\& # define X509_PURPOSE_NS_SSL_SERVER 3 +\& # define X509_PURPOSE_SMIME_SIGN 4 +\& # define X509_PURPOSE_SMIME_ENCRYPT 5 +\& # define X509_PURPOSE_CRL_SIGN 6 +\& # define X509_PURPOSE_ANY 7 +\& # define X509_PURPOSE_OCSP_HELPER 8 +\& # define X509_PURPOSE_TIMESTAMP_SIGN 9 +.Ve +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +For non-CA checks +.IP "\-1 an error condition has occured" 4 +.IX Item "-1 an error condition has occured" +.PD 0 +.IP " 1 if the certificate was created to perform the purpose represented by \fIid\fR" 4 +.IX Item " 1 if the certificate was created to perform the purpose represented by id" +.IP " 0 if the certificate was not created to perform the purpose represented by \fIid\fR" 4 +.IX Item " 0 if the certificate was not created to perform the purpose represented by id" +.PD +.PP +For \s-1CA\s0 checks the below integers could be returned with the following meanings: +.IP "\-1 an error condition has occured" 4 +.IX Item "-1 an error condition has occured" +.PD 0 +.IP " 0 not a \s-1CA\s0 or does not have the purpose represented by \fIid\fR" 4 +.IX Item " 0 not a CA or does not have the purpose represented by id" +.IP " 1 is a \s-1CA.\s0" 4 +.IX Item " 1 is a CA." +.IP " 2 Only possible in old versions of openSSL when basicConstraints are absent. New versions will not return this value. May be a \s-1CA\s0" 4 +.IX Item " 2 Only possible in old versions of openSSL when basicConstraints are absent. New versions will not return this value. May be a CA" +.IP " 3 basicConstraints absent but self signed V1." 4 +.IX Item " 3 basicConstraints absent but self signed V1." +.IP " 4 basicConstraints absent but keyUsage present and keyCertSign asserted." 4 +.IX Item " 4 basicConstraints absent but keyUsage present and keyCertSign asserted." +.IP " 5 legacy Netscape specific \s-1CA\s0 Flags present" 4 +.IX Item " 5 legacy Netscape specific CA Flags present" +.PD +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2019\-2020 The OpenSSL Project Authors. All Rights Reserved. +Licensed under the Apache License 2.0 (the \*(L"License\*(R"). You may not use this +file except in compliance with the License. You can obtain a copy in the file +\&\s-1LICENSE\s0 in the source distribution or at . diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_cmp.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_cmp.3 new file mode 100644 index 00000000..b0dde283 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_cmp.3 @@ -0,0 +1,209 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "X509_CMP 3" +.TH X509_CMP 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +X509_cmp, X509_NAME_cmp, X509_issuer_and_serial_cmp, X509_issuer_name_cmp, X509_subject_name_cmp, X509_CRL_cmp, X509_CRL_match \&\- compare X509 certificates and related values +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int X509_cmp(const X509 *a, const X509 *b); +\& int X509_NAME_cmp(const X509_NAME *a, const X509_NAME *b); +\& int X509_issuer_and_serial_cmp(const X509 *a, const X509 *b); +\& int X509_issuer_name_cmp(const X509 *a, const X509 *b); +\& int X509_subject_name_cmp(const X509 *a, const X509 *b); +\& int X509_CRL_cmp(const X509_CRL *a, const X509_CRL *b); +\& int X509_CRL_match(const X509_CRL *a, const X509_CRL *b); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +This set of functions are used to compare X509 objects, including X509 +certificates, X509 \s-1CRL\s0 objects and various values in an X509 certificate. +.PP +The \fBX509_cmp()\fR function compares two \fBX509\fR objects indicated by parameters +\&\fBa\fR and \fBb\fR. The comparison is based on the \fBmemcmp\fR result of the hash +values of two \fBX509\fR objects and the canonical (\s-1DER\s0) encoding values. +.PP +The \fBX509_NAME_cmp()\fR function compares two \fBX509_NAME\fR objects indicated by +parameters \fBa\fR and \fBb\fR. The comparison is based on the \fBmemcmp\fR result of +the canonical (\s-1DER\s0) encoding values of the two objects. \fBi2d_X509_NAME\fR\|(3) +has a more detailed description of the \s-1DER\s0 encoding of the \fBX509_NAME\fR structure. +.PP +The \fBX509_issuer_and_serial_cmp()\fR function compares the serial number and issuer +values in the given \fBX509\fR objects \fBa\fR and \fBb\fR. +.PP +The \fBX509_issuer_name_cmp()\fR, \fBX509_subject_name_cmp()\fR and \fBX509_CRL_cmp()\fR functions +are effectively wrappers of the \fBX509_NAME_cmp()\fR function. These functions compare +issuer names and subject names of the objects, or issuers of \fBX509_CRL\fR +objects, respectively. +.IX Xref "509" +.PP +The \fBX509_CRL_match()\fR function compares two \fBX509_CRL\fR objects. Unlike the +\&\fBX509_CRL_cmp()\fR function, this function compares the whole \s-1CRL\s0 content instead +of just the issuer name. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +Like common memory comparison functions, the \fBX509\fR comparison functions return +an integer less than, equal to, or greater than zero if object \fBa\fR is found to +be less than, to match, or be greater than object \fBb\fR, respectively. +.PP +\&\fBX509_NAME_cmp()\fR, \fBX509_issuer_and_serial_cmp()\fR, \fBX509_issuer_name_cmp()\fR, +\&\fBX509_subject_name_cmp()\fR and \fBX509_CRL_cmp()\fR may return \fB\-2\fR to indicate an error. +.SH "NOTES" +.IX Header "NOTES" +These functions in fact utilize the underlying \fBmemcmp\fR of the C library to do +the comparison job. Data to be compared varies from \s-1DER\s0 encoding data, hash +value or \fB\s-1ASN1_STRING\s0\fR. The sign of the comparison can be used to order the +objects but it does not have a special meaning in some cases. +.PP +\&\fBX509_NAME_cmp()\fR and wrappers utilize the value \fB\-2\fR to indicate errors in some +circumstances, which could cause confusion for the applications. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBi2d_X509_NAME\fR\|(3), \fBi2d_X509\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the Apache License 2.0 (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_cmp_time.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_cmp_time.3 new file mode 100644 index 00000000..f9745c9c --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_cmp_time.3 @@ -0,0 +1,192 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "X509_CMP_TIME 3" +.TH X509_CMP_TIME 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +X509_cmp_time, X509_cmp_current_time, X509_time_adj, X509_time_adj_ex \&\- X509 time functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 5 +\& int X509_cmp_time(const ASN1_TIME *asn1_time, time_t *in_tm); +\& int X509_cmp_current_time(const ASN1_TIME *asn1_time); +\& ASN1_TIME *X509_time_adj(ASN1_TIME *asn1_time, long offset_sec, time_t *in_tm); +\& ASN1_TIME *X509_time_adj_ex(ASN1_TIME *asn1_time, int offset_day, long +\& offset_sec, time_t *in_tm); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBX509_cmp_time()\fR compares the \s-1ASN1_TIME\s0 in \fBasn1_time\fR with the time +in . \fBX509_cmp_current_time()\fR compares the \s-1ASN1_TIME\s0 in +\&\fBasn1_time\fR with the current time, expressed as time_t. \fBasn1_time\fR +must satisfy the \s-1ASN1_TIME\s0 format mandated by \s-1RFC 5280,\s0 i.e., its +format must be either \s-1YYMMDDHHMMSSZ\s0 or \s-1YYYYMMDDHHMMSSZ.\s0 +.PP +\&\fBX509_time_adj_ex()\fR sets the \s-1ASN1_TIME\s0 structure \fBasn1_time\fR to the time +\&\fBoffset_day\fR and \fBoffset_sec\fR after \fBin_tm\fR. +.PP +\&\fBX509_time_adj()\fR sets the \s-1ASN1_TIME\s0 structure \fBasn1_time\fR to the time +\&\fBoffset_sec\fR after \fBin_tm\fR. This method can only handle second +offsets up to the capacity of long, so the newer \fBX509_time_adj_ex()\fR +\&\s-1API\s0 should be preferred. +.PP +In both methods, if \fBasn1_time\fR is \s-1NULL,\s0 a new \s-1ASN1_TIME\s0 structure +is allocated and returned. +.PP +In all methods, if \fBin_tm\fR is \s-1NULL,\s0 the current time, expressed as +time_t, is used. +.SH "BUGS" +.IX Header "BUGS" +Unlike many standard comparison functions, \fBX509_cmp_time()\fR and +\&\fBX509_cmp_current_time()\fR return 0 on error. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBX509_cmp_time()\fR and \fBX509_cmp_current_time()\fR return \-1 if \fBasn1_time\fR +is earlier than, or equal to, \fBcmp_time\fR (resp. current time), and 1 +otherwise. These methods return 0 on error. +.PP +\&\fBX509_time_adj()\fR and \fBX509_time_adj_ex()\fR return a pointer to the updated +\&\s-1ASN1_TIME\s0 structure, and \s-1NULL\s0 on error. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_digest.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_digest.3 new file mode 100644 index 00000000..5a5ce8a0 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_digest.3 @@ -0,0 +1,194 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "X509_DIGEST 3" +.TH X509_DIGEST 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +X509_digest, X509_CRL_digest, X509_pubkey_digest, X509_NAME_digest, X509_REQ_digest, PKCS7_ISSUER_AND_SERIAL_digest \&\- get digest of various objects +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int X509_digest(const X509 *data, const EVP_MD *type, unsigned char *md, +\& unsigned int *len); +\& +\& int X509_CRL_digest(const X509_CRL *data, const EVP_MD *type, unsigned char *md, +\& unsigned int *len); +\& +\& int X509_pubkey_digest(const X509 *data, const EVP_MD *type, +\& unsigned char *md, unsigned int *len); +\& +\& int X509_REQ_digest(const X509_REQ *data, const EVP_MD *type, +\& unsigned char *md, unsigned int *len); +\& +\& int X509_NAME_digest(const X509_NAME *data, const EVP_MD *type, +\& unsigned char *md, unsigned int *len); +\& +\& #include +\& +\& int PKCS7_ISSUER_AND_SERIAL_digest(PKCS7_ISSUER_AND_SERIAL *data, +\& const EVP_MD *type, unsigned char *md, +\& unsigned int *len); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBX509_pubkey_digest()\fR returns a digest of the \s-1DER\s0 representation of the public +key in the specified X509 \fBdata\fR object. +All other functions described here return a digest of the \s-1DER\s0 representation +of their entire \fBdata\fR objects. +.PP +The \fBtype\fR parameter specifies the digest to +be used, such as \fBEVP_sha1()\fR. The \fBmd\fR is a pointer to the buffer where the +digest will be copied and is assumed to be large enough; the constant +\&\fB\s-1EVP_MAX_MD_SIZE\s0\fR is suggested. The \fBlen\fR parameter, if not \s-1NULL,\s0 points +to a place where the digest size will be stored. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +All functions described here return 1 for success and 0 for failure. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBEVP_sha1\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_dup.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_dup.3 new file mode 100644 index 00000000..6166bc98 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_dup.3 @@ -0,0 +1,202 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "X509_DUP 3" +.TH X509_DUP 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +DECLARE_ASN1_FUNCTIONS, IMPLEMENT_ASN1_FUNCTIONS, ASN1_ITEM, ACCESS_DESCRIPTION_free, ACCESS_DESCRIPTION_new, ADMISSIONS_free, ADMISSIONS_new, ADMISSION_SYNTAX_free, ADMISSION_SYNTAX_new, ASIdOrRange_free, ASIdOrRange_new, ASIdentifierChoice_free, ASIdentifierChoice_new, ASIdentifiers_free, ASIdentifiers_new, ASRange_free, ASRange_new, AUTHORITY_INFO_ACCESS_free, AUTHORITY_INFO_ACCESS_new, AUTHORITY_KEYID_free, AUTHORITY_KEYID_new, BASIC_CONSTRAINTS_free, BASIC_CONSTRAINTS_new, CERTIFICATEPOLICIES_free, CERTIFICATEPOLICIES_new, CMS_ContentInfo_free, CMS_ContentInfo_new, CMS_ContentInfo_print_ctx, CMS_ReceiptRequest_free, CMS_ReceiptRequest_new, CRL_DIST_POINTS_free, CRL_DIST_POINTS_new, DIRECTORYSTRING_free, DIRECTORYSTRING_new, DISPLAYTEXT_free, DISPLAYTEXT_new, DIST_POINT_NAME_free, DIST_POINT_NAME_new, DIST_POINT_free, DIST_POINT_new, DSAparams_dup, ECPARAMETERS_free, ECPARAMETERS_new, ECPKPARAMETERS_free, ECPKPARAMETERS_new, EDIPARTYNAME_free, EDIPARTYNAME_new, ESS_CERT_ID_dup, ESS_CERT_ID_free, ESS_CERT_ID_new, ESS_ISSUER_SERIAL_dup, ESS_ISSUER_SERIAL_free, ESS_ISSUER_SERIAL_new, ESS_SIGNING_CERT_dup, ESS_SIGNING_CERT_free, ESS_SIGNING_CERT_new, EXTENDED_KEY_USAGE_free, EXTENDED_KEY_USAGE_new, GENERAL_NAMES_free, GENERAL_NAMES_new, GENERAL_NAME_dup, GENERAL_NAME_free, GENERAL_NAME_new, GENERAL_SUBTREE_free, GENERAL_SUBTREE_new, IPAddressChoice_free, IPAddressChoice_new, IPAddressFamily_free, IPAddressFamily_new, IPAddressOrRange_free, IPAddressOrRange_new, IPAddressRange_free, IPAddressRange_new, ISSUING_DIST_POINT_free, ISSUING_DIST_POINT_new, NAME_CONSTRAINTS_free, NAME_CONSTRAINTS_new, NAMING_AUTHORITY_free, NAMING_AUTHORITY_new, NETSCAPE_CERT_SEQUENCE_free, NETSCAPE_CERT_SEQUENCE_new, NETSCAPE_SPKAC_free, NETSCAPE_SPKAC_new, NETSCAPE_SPKI_free, NETSCAPE_SPKI_new, NOTICEREF_free, NOTICEREF_new, OCSP_BASICRESP_free, OCSP_BASICRESP_new, OCSP_CERTID_dup, OCSP_CERTID_new, OCSP_CERTSTATUS_free, OCSP_CERTSTATUS_new, OCSP_CRLID_free, OCSP_CRLID_new, OCSP_ONEREQ_free, OCSP_ONEREQ_new, OCSP_REQINFO_free, OCSP_REQINFO_new, OCSP_RESPBYTES_free, OCSP_RESPBYTES_new, OCSP_RESPDATA_free, OCSP_RESPDATA_new, OCSP_RESPID_free, OCSP_RESPID_new, OCSP_RESPONSE_new, OCSP_REVOKEDINFO_free, OCSP_REVOKEDINFO_new, OCSP_SERVICELOC_free, OCSP_SERVICELOC_new, OCSP_SIGNATURE_free, OCSP_SIGNATURE_new, OCSP_SINGLERESP_free, OCSP_SINGLERESP_new, OTHERNAME_free, OTHERNAME_new, PBE2PARAM_free, PBE2PARAM_new, PBEPARAM_free, PBEPARAM_new, PBKDF2PARAM_free, PBKDF2PARAM_new, PKCS12_BAGS_free, PKCS12_BAGS_new, PKCS12_MAC_DATA_free, PKCS12_MAC_DATA_new, PKCS12_SAFEBAG_free, PKCS12_SAFEBAG_new, PKCS12_free, PKCS12_new, PKCS7_DIGEST_free, PKCS7_DIGEST_new, PKCS7_ENCRYPT_free, PKCS7_ENCRYPT_new, PKCS7_ENC_CONTENT_free, PKCS7_ENC_CONTENT_new, PKCS7_ENVELOPE_free, PKCS7_ENVELOPE_new, PKCS7_ISSUER_AND_SERIAL_free, PKCS7_ISSUER_AND_SERIAL_new, PKCS7_RECIP_INFO_free, PKCS7_RECIP_INFO_new, PKCS7_SIGNED_free, PKCS7_SIGNED_new, PKCS7_SIGNER_INFO_free, PKCS7_SIGNER_INFO_new, PKCS7_SIGN_ENVELOPE_free, PKCS7_SIGN_ENVELOPE_new, PKCS7_dup, PKCS7_free, PKCS7_new, PKCS7_print_ctx, PKCS8_PRIV_KEY_INFO_free, PKCS8_PRIV_KEY_INFO_new, PKEY_USAGE_PERIOD_free, PKEY_USAGE_PERIOD_new, POLICYINFO_free, POLICYINFO_new, POLICYQUALINFO_free, POLICYQUALINFO_new, POLICY_CONSTRAINTS_free, POLICY_CONSTRAINTS_new, POLICY_MAPPING_free, POLICY_MAPPING_new, PROFESSION_INFO_free, PROFESSION_INFO_new, PROFESSION_INFOS_free, PROFESSION_INFOS_new, PROXY_CERT_INFO_EXTENSION_free, PROXY_CERT_INFO_EXTENSION_new, PROXY_POLICY_free, PROXY_POLICY_new, RSAPrivateKey_dup, RSAPublicKey_dup, RSA_OAEP_PARAMS_free, RSA_OAEP_PARAMS_new, RSA_PSS_PARAMS_free, RSA_PSS_PARAMS_new, SCRYPT_PARAMS_free, SCRYPT_PARAMS_new, SXNETID_free, SXNETID_new, SXNET_free, SXNET_new, TLS_FEATURE_free, TLS_FEATURE_new, TS_ACCURACY_dup, TS_ACCURACY_free, TS_ACCURACY_new, TS_MSG_IMPRINT_dup, TS_MSG_IMPRINT_free, TS_MSG_IMPRINT_new, TS_REQ_dup, TS_REQ_free, TS_REQ_new, TS_RESP_dup, TS_RESP_free, TS_RESP_new, TS_STATUS_INFO_dup, TS_STATUS_INFO_free, TS_STATUS_INFO_new, TS_TST_INFO_dup, TS_TST_INFO_free, TS_TST_INFO_new, USERNOTICE_free, USERNOTICE_new, X509_ALGOR_free, X509_ALGOR_new, X509_ATTRIBUTE_dup, X509_ATTRIBUTE_free, X509_ATTRIBUTE_new, X509_CERT_AUX_free, X509_CERT_AUX_new, X509_CINF_free, X509_CINF_new, X509_CRL_INFO_free, X509_CRL_INFO_new, X509_CRL_dup, X509_CRL_free, X509_CRL_new, X509_EXTENSION_dup, X509_EXTENSION_free, X509_EXTENSION_new, X509_NAME_ENTRY_dup, X509_NAME_ENTRY_free, X509_NAME_ENTRY_new, X509_NAME_dup, X509_NAME_free, X509_NAME_new, X509_REQ_INFO_free, X509_REQ_INFO_new, X509_REQ_dup, X509_REQ_free, X509_REQ_new, X509_REVOKED_dup, X509_REVOKED_free, X509_REVOKED_new, X509_SIG_free, X509_SIG_new, X509_VAL_free, X509_VAL_new, X509_dup, \&\- ASN1 object utilities +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& DECLARE_ASN1_FUNCTIONS(type) +\& IMPLEMENT_ASN1_FUNCTIONS(stname) +\& +\& typedef struct ASN1_ITEM_st ASN1_ITEM; +\& +\& extern const ASN1_ITEM TYPE_it; +\& TYPE *TYPE_new(void); +\& TYPE *TYPE_dup(TYPE *a); +\& void TYPE_free(TYPE *a); +\& int TYPE_print_ctx(BIO *out, TYPE *a, int indent, const ASN1_PCTX *pctx); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +In the description below, \fI\s-1TYPE\s0\fR is used +as a placeholder for any of the OpenSSL datatypes, such as \fIX509\fR. +.PP +The OpenSSL \s-1ASN1\s0 parsing library templates are like a data-driven bytecode +interpreter. +Every \s-1ASN1\s0 object as a global variable, TYPE_it, that describes the item +such as its fields. (On systems which cannot export variables from shared +libraries, the global is instead a function which returns a pointer to a +static variable. +.PP +The macro \s-1\fBDECLARE_ASN1_FUNCTIONS\s0()\fR is typically used in header files +to generate the function declarations. +.PP +The macro \s-1\fBIMPLEMENT_ASN1_FUNCTIONS\s0()\fR is used once in a source file +to generate the function bodies. +.PP +\&\fBTYPE_new()\fR allocates an empty object of the indicated type. +The object returned must be released by calling \fBTYPE_free()\fR. +.PP +\&\fBTYPE_dup()\fR copies an existing object. +.PP +\&\fBTYPE_free()\fR releases the object and all pointers and sub-objects +within it. +.PP +\&\fBTYPE_print_ctx()\fR prints the object \fBa\fR on the specified \s-1BIO\s0 \fBout\fR. +Each line will be prefixed with \fBindent\fR spaces. +The \fBpctx\fR specifies the printing context and is for internal +use; use \s-1NULL\s0 to get the default behavior. If a print function is +user-defined, then pass in any \fBpctx\fR down to any nested calls. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBTYPE_new()\fR and \fBTYPE_dup()\fR return a pointer to the object or \s-1NULL\s0 on failure. +.PP +\&\fBTYPE_print_ctx()\fR returns 1 on success or zero on failure. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2016\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_get0_notBefore.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_get0_notBefore.3 new file mode 100644 index 00000000..ed8ed2e3 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_get0_notBefore.3 @@ -0,0 +1,231 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "X509_GET0_NOTBEFORE 3" +.TH X509_GET0_NOTBEFORE 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +X509_get0_notBefore, X509_getm_notBefore, X509_get0_notAfter, X509_getm_notAfter, X509_set1_notBefore, X509_set1_notAfter, X509_CRL_get0_lastUpdate, X509_CRL_get0_nextUpdate, X509_CRL_set1_lastUpdate, X509_CRL_set1_nextUpdate \- get or set certificate or CRL dates +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& const ASN1_TIME *X509_get0_notBefore(const X509 *x); +\& const ASN1_TIME *X509_get0_notAfter(const X509 *x); +\& +\& ASN1_TIME *X509_getm_notBefore(const X509 *x); +\& ASN1_TIME *X509_getm_notAfter(const X509 *x); +\& +\& int X509_set1_notBefore(X509 *x, const ASN1_TIME *tm); +\& int X509_set1_notAfter(X509 *x, const ASN1_TIME *tm); +\& +\& const ASN1_TIME *X509_CRL_get0_lastUpdate(const X509_CRL *crl); +\& const ASN1_TIME *X509_CRL_get0_nextUpdate(const X509_CRL *crl); +\& +\& int X509_CRL_set1_lastUpdate(X509_CRL *x, const ASN1_TIME *tm); +\& int X509_CRL_set1_nextUpdate(X509_CRL *x, const ASN1_TIME *tm); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBX509_get0_notBefore()\fR and \fBX509_get0_notAfter()\fR return the \fBnotBefore\fR +and \fBnotAfter\fR fields of certificate \fBx\fR respectively. The value +returned is an internal pointer which must not be freed up after +the call. +.PP +\&\fBX509_getm_notBefore()\fR and \fBX509_getm_notAfter()\fR are similar to +\&\fBX509_get0_notBefore()\fR and \fBX509_get0_notAfter()\fR except they return +non-constant mutable references to the associated date field of +the certificate. +.PP +\&\fBX509_set1_notBefore()\fR and \fBX509_set1_notAfter()\fR set the \fBnotBefore\fR +and \fBnotAfter\fR fields of \fBx\fR to \fBtm\fR. Ownership of the passed +parameter \fBtm\fR is not transferred by these functions so it must +be freed up after the call. +.PP +\&\fBX509_CRL_get0_lastUpdate()\fR and \fBX509_CRL_get0_nextUpdate()\fR return the +\&\fBlastUpdate\fR and \fBnextUpdate\fR fields of \fBcrl\fR. The value +returned is an internal pointer which must not be freed up after +the call. If the \fBnextUpdate\fR field is absent from \fBcrl\fR then +\&\fB\s-1NULL\s0\fR is returned. +.PP +\&\fBX509_CRL_set1_lastUpdate()\fR and \fBX509_CRL_set1_nextUpdate()\fR set the \fBlastUpdate\fR +and \fBnextUpdate\fR fields of \fBcrl\fR to \fBtm\fR. Ownership of the passed parameter +\&\fBtm\fR is not transferred by these functions so it must be freed up after the +call. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBX509_get0_notBefore()\fR, \fBX509_get0_notAfter()\fR and \fBX509_CRL_get0_lastUpdate()\fR +return a pointer to an \fB\s-1ASN1_TIME\s0\fR structure. +.PP +\&\fBX509_CRL_get0_lastUpdate()\fR return a pointer to an \fB\s-1ASN1_TIME\s0\fR structure +or \s-1NULL\s0 if the \fBlastUpdate\fR field is absent. +.PP +\&\fBX509_set1_notBefore()\fR, \fBX509_set1_notAfter()\fR, \fBX509_CRL_set1_lastUpdate()\fR and +\&\fBX509_CRL_set1_nextUpdate()\fR return 1 for success or 0 for failure. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBd2i_X509\fR\|(3), +\&\fBERR_get_error\fR\|(3), +\&\fBX509_CRL_get0_by_serial\fR\|(3), +\&\fBX509_get0_signature\fR\|(3), +\&\fBX509_get_ext_d2i\fR\|(3), +\&\fBX509_get_extension_flags\fR\|(3), +\&\fBX509_get_pubkey\fR\|(3), +\&\fBX509_get_subject_name\fR\|(3), +\&\fBX509_NAME_add_entry_by_txt\fR\|(3), +\&\fBX509_NAME_ENTRY_get_object\fR\|(3), +\&\fBX509_NAME_get_index_by_NID\fR\|(3), +\&\fBX509_NAME_print_ex\fR\|(3), +\&\fBX509_new\fR\|(3), +\&\fBX509_sign\fR\|(3), +\&\fBX509V3_get_d2i\fR\|(3), +\&\fBX509_verify_cert\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +These functions are available in all versions of OpenSSL. +.PP +\&\fBX509_get_notBefore()\fR and \fBX509_get_notAfter()\fR were deprecated in OpenSSL +1.1.0 +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_get0_signature.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_get0_signature.3 new file mode 100644 index 00000000..d1712b45 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_get0_signature.3 @@ -0,0 +1,257 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "X509_GET0_SIGNATURE 3" +.TH X509_GET0_SIGNATURE 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +X509_get0_signature, X509_get_signature_nid, X509_get0_tbs_sigalg, X509_REQ_get0_signature, X509_REQ_get_signature_nid, X509_CRL_get0_signature, X509_CRL_get_signature_nid, X509_get_signature_info, X509_SIG_INFO_get, X509_SIG_INFO_set \- signature information +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& void X509_get0_signature(const ASN1_BIT_STRING **psig, +\& const X509_ALGOR **palg, +\& const X509 *x); +\& int X509_get_signature_nid(const X509 *x); +\& const X509_ALGOR *X509_get0_tbs_sigalg(const X509 *x); +\& +\& void X509_REQ_get0_signature(const X509_REQ *crl, +\& const ASN1_BIT_STRING **psig, +\& const X509_ALGOR **palg); +\& int X509_REQ_get_signature_nid(const X509_REQ *crl); +\& +\& void X509_CRL_get0_signature(const X509_CRL *crl, +\& const ASN1_BIT_STRING **psig, +\& const X509_ALGOR **palg); +\& int X509_CRL_get_signature_nid(const X509_CRL *crl); +\& +\& int X509_get_signature_info(X509 *x, int *mdnid, int *pknid, int *secbits, +\& uint32_t *flags); +\& +\& int X509_SIG_INFO_get(const X509_SIG_INFO *siginf, int *mdnid, int *pknid, +\& int *secbits, uint32_t *flags); +\& void X509_SIG_INFO_set(X509_SIG_INFO *siginf, int mdnid, int pknid, +\& int secbits, uint32_t flags); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBX509_get0_signature()\fR sets \fB*psig\fR to the signature of \fBx\fR and \fB*palg\fR +to the signature algorithm of \fBx\fR. The values returned are internal +pointers which \fB\s-1MUST NOT\s0\fR be freed up after the call. +.PP +\&\fBX509_get0_tbs_sigalg()\fR returns the signature algorithm in the signed +portion of \fBx\fR. +.PP +\&\fBX509_get_signature_nid()\fR returns the \s-1NID\s0 corresponding to the signature +algorithm of \fBx\fR. +.PP +\&\fBX509_REQ_get0_signature()\fR, \fBX509_REQ_get_signature_nid()\fR +\&\fBX509_CRL_get0_signature()\fR and \fBX509_CRL_get_signature_nid()\fR perform the +same function for certificate requests and CRLs. +.PP +\&\fBX509_get_signature_info()\fR retrieves information about the signature of +certificate \fBx\fR. The \s-1NID\s0 of the signing digest is written to \fB*mdnid\fR, +the public key algorithm to \fB*pknid\fR, the effective security bits to +\&\fB*secbits\fR and flag details to \fB*flags\fR. Any of the parameters can +be set to \fB\s-1NULL\s0\fR if the information is not required. +.PP +\&\fBX509_SIG_INFO_get()\fR and \fBX509_SIG_INFO_set()\fR get and set information +about a signature in an \fBX509_SIG_INFO\fR structure. They are only +used by implementations of algorithms which need to set custom +signature information: most applications will never need to call +them. +.SH "NOTES" +.IX Header "NOTES" +These functions provide lower level access to signatures in certificates +where an application wishes to analyse or generate a signature in a form +where \fBX509_sign()\fR et al is not appropriate (for example a non standard +or unsupported format). +.PP +The security bits returned by \fBX509_get_signature_info()\fR refers to information +available from the certificate signature (such as the signing digest). In some +cases the actual security of the signature is less because the signing +key is less secure: for example a certificate signed using \s-1SHA\-512\s0 and a +1024 bit \s-1RSA\s0 key. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBX509_get_signature_nid()\fR, \fBX509_REQ_get_signature_nid()\fR and +\&\fBX509_CRL_get_signature_nid()\fR return a \s-1NID.\s0 +.PP +\&\fBX509_get0_signature()\fR, \fBX509_REQ_get0_signature()\fR and +\&\fBX509_CRL_get0_signature()\fR do not return values. +.PP +\&\fBX509_get_signature_info()\fR returns 1 if the signature information +returned is valid or 0 if the information is not available (e.g. +unknown algorithms or malformed parameters). +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBd2i_X509\fR\|(3), +\&\fBERR_get_error\fR\|(3), +\&\fBX509_CRL_get0_by_serial\fR\|(3), +\&\fBX509_get_ext_d2i\fR\|(3), +\&\fBX509_get_extension_flags\fR\|(3), +\&\fBX509_get_pubkey\fR\|(3), +\&\fBX509_get_subject_name\fR\|(3), +\&\fBX509_get_version\fR\|(3), +\&\fBX509_NAME_add_entry_by_txt\fR\|(3), +\&\fBX509_NAME_ENTRY_get_object\fR\|(3), +\&\fBX509_NAME_get_index_by_NID\fR\|(3), +\&\fBX509_NAME_print_ex\fR\|(3), +\&\fBX509_new\fR\|(3), +\&\fBX509_sign\fR\|(3), +\&\fBX509V3_get_d2i\fR\|(3), +\&\fBX509_verify_cert\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +The +\&\fBX509_get0_signature()\fR and \fBX509_get_signature_nid()\fR functions were +added in OpenSSL 1.0.2. +.PP +The +\&\fBX509_REQ_get0_signature()\fR, \fBX509_REQ_get_signature_nid()\fR, +\&\fBX509_CRL_get0_signature()\fR and \fBX509_CRL_get_signature_nid()\fR were +added in OpenSSL 1.1.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2015\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_get0_uids.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_get0_uids.3 new file mode 100644 index 00000000..07d33add --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_get0_uids.3 @@ -0,0 +1,188 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "X509_GET0_UIDS 3" +.TH X509_GET0_UIDS 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +X509_get0_uids \- get certificate unique identifiers +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& void X509_get0_uids(const X509 *x, const ASN1_BIT_STRING **piuid, +\& const ASN1_BIT_STRING **psuid); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBX509_get0_uids()\fR sets \fB*piuid\fR and \fB*psuid\fR to the issuer and subject unique +identifiers of certificate \fBx\fR or \s-1NULL\s0 if the fields are not present. +.SH "NOTES" +.IX Header "NOTES" +The issuer and subject unique identifier fields are very rarely encountered in +practice outside test cases. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBX509_get0_uids()\fR does not return a value. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBd2i_X509\fR\|(3), +\&\fBERR_get_error\fR\|(3), +\&\fBX509_CRL_get0_by_serial\fR\|(3), +\&\fBX509_get0_signature\fR\|(3), +\&\fBX509_get_ext_d2i\fR\|(3), +\&\fBX509_get_extension_flags\fR\|(3), +\&\fBX509_get_pubkey\fR\|(3), +\&\fBX509_get_subject_name\fR\|(3), +\&\fBX509_get_version\fR\|(3), +\&\fBX509_NAME_add_entry_by_txt\fR\|(3), +\&\fBX509_NAME_ENTRY_get_object\fR\|(3), +\&\fBX509_NAME_get_index_by_NID\fR\|(3), +\&\fBX509_NAME_print_ex\fR\|(3), +\&\fBX509_new\fR\|(3), +\&\fBX509_sign\fR\|(3), +\&\fBX509V3_get_d2i\fR\|(3), +\&\fBX509_verify_cert\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2015\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_get_extension_flags.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_get_extension_flags.3 new file mode 100644 index 00000000..de563373 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_get_extension_flags.3 @@ -0,0 +1,308 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "X509_GET_EXTENSION_FLAGS 3" +.TH X509_GET_EXTENSION_FLAGS 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +X509_get0_subject_key_id, X509_get0_authority_key_id, X509_get0_authority_issuer, X509_get0_authority_serial, X509_get_pathlen, X509_get_extension_flags, X509_get_key_usage, X509_get_extended_key_usage, X509_set_proxy_flag, X509_set_proxy_pathlen, X509_get_proxy_pathlen \- retrieve certificate extension data +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& long X509_get_pathlen(X509 *x); +\& uint32_t X509_get_extension_flags(X509 *x); +\& uint32_t X509_get_key_usage(X509 *x); +\& uint32_t X509_get_extended_key_usage(X509 *x); +\& const ASN1_OCTET_STRING *X509_get0_subject_key_id(X509 *x); +\& const ASN1_OCTET_STRING *X509_get0_authority_key_id(X509 *x); +\& const GENERAL_NAMES *X509_get0_authority_issuer(X509 *x); +\& const ASN1_INTEGER *X509_get0_authority_serial(X509 *x); +\& void X509_set_proxy_flag(X509 *x); +\& void X509_set_proxy_pathlen(int l); +\& long X509_get_proxy_pathlen(X509 *x); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +These functions retrieve information related to commonly used certificate extensions. +.PP +\&\fBX509_get_pathlen()\fR retrieves the path length extension from a certificate. +This extension is used to limit the length of a cert chain that may be +issued from that \s-1CA.\s0 +.PP +\&\fBX509_get_extension_flags()\fR retrieves general information about a certificate, +it will return one or more of the following flags ored together. +.IP "\fB\s-1EXFLAG_V1\s0\fR" 4 +.IX Item "EXFLAG_V1" +The certificate is an obsolete version 1 certificate. +.IP "\fB\s-1EXFLAG_BCONS\s0\fR" 4 +.IX Item "EXFLAG_BCONS" +The certificate contains a basic constraints extension. +.IP "\fB\s-1EXFLAG_CA\s0\fR" 4 +.IX Item "EXFLAG_CA" +The certificate contains basic constraints and asserts the \s-1CA\s0 flag. +.IP "\fB\s-1EXFLAG_PROXY\s0\fR" 4 +.IX Item "EXFLAG_PROXY" +The certificate is a valid proxy certificate. +.IP "\fB\s-1EXFLAG_SI\s0\fR" 4 +.IX Item "EXFLAG_SI" +The certificate is self issued (that is subject and issuer names match). +.IP "\fB\s-1EXFLAG_SS\s0\fR" 4 +.IX Item "EXFLAG_SS" +The subject and issuer names match and extension values imply it is self +signed. +.IP "\fB\s-1EXFLAG_FRESHEST\s0\fR" 4 +.IX Item "EXFLAG_FRESHEST" +The freshest \s-1CRL\s0 extension is present in the certificate. +.IP "\fB\s-1EXFLAG_CRITICAL\s0\fR" 4 +.IX Item "EXFLAG_CRITICAL" +The certificate contains an unhandled critical extension. +.IP "\fB\s-1EXFLAG_INVALID\s0\fR" 4 +.IX Item "EXFLAG_INVALID" +Some certificate extension values are invalid or inconsistent. The +certificate should be rejected. +This bit may also be raised after an out-of-memory error while +processing the X509 object, so it may not be related to the processed +\&\s-1ASN1\s0 object itself. +.IP "\fB\s-1EXFLAG_INVALID_POLICY\s0\fR" 4 +.IX Item "EXFLAG_INVALID_POLICY" +The NID_certificate_policies certificate extension is invalid or +inconsistent. The certificate should be rejected. +This bit may also be raised after an out-of-memory error while +processing the X509 object, so it may not be related to the processed +\&\s-1ASN1\s0 object itself. +.IP "\fB\s-1EXFLAG_KUSAGE\s0\fR" 4 +.IX Item "EXFLAG_KUSAGE" +The certificate contains a key usage extension. The value can be retrieved +using \fBX509_get_key_usage()\fR. +.IP "\fB\s-1EXFLAG_XKUSAGE\s0\fR" 4 +.IX Item "EXFLAG_XKUSAGE" +The certificate contains an extended key usage extension. The value can be +retrieved using \fBX509_get_extended_key_usage()\fR. +.PP +\&\fBX509_get_key_usage()\fR returns the value of the key usage extension. If key +usage is present will return zero or more of the flags: +\&\fB\s-1KU_DIGITAL_SIGNATURE\s0\fR, \fB\s-1KU_NON_REPUDIATION\s0\fR, \fB\s-1KU_KEY_ENCIPHERMENT\s0\fR, +\&\fB\s-1KU_DATA_ENCIPHERMENT\s0\fR, \fB\s-1KU_KEY_AGREEMENT\s0\fR, \fB\s-1KU_KEY_CERT_SIGN\s0\fR, +\&\fB\s-1KU_CRL_SIGN\s0\fR, \fB\s-1KU_ENCIPHER_ONLY\s0\fR or \fB\s-1KU_DECIPHER_ONLY\s0\fR corresponding to +individual key usage bits. If key usage is absent then \fB\s-1UINT32_MAX\s0\fR is +returned. +.PP +\&\fBX509_get_extended_key_usage()\fR returns the value of the extended key usage +extension. If extended key usage is present it will return zero or more of the +flags: \fB\s-1XKU_SSL_SERVER\s0\fR, \fB\s-1XKU_SSL_CLIENT\s0\fR, \fB\s-1XKU_SMIME\s0\fR, \fB\s-1XKU_CODE_SIGN\s0\fR +\&\fB\s-1XKU_OCSP_SIGN\s0\fR, \fB\s-1XKU_TIMESTAMP\s0\fR, \fB\s-1XKU_DVCS\s0\fR or \fB\s-1XKU_ANYEKU\s0\fR. These +correspond to the OIDs \fBid-kp-serverAuth\fR, \fBid-kp-clientAuth\fR, +\&\fBid-kp-emailProtection\fR, \fBid-kp-codeSigning\fR, \fBid-kp-OCSPSigning\fR, +\&\fBid-kp-timeStamping\fR, \fBid-kp-dvcs\fR and \fBanyExtendedKeyUsage\fR respectively. +Additionally \fB\s-1XKU_SGC\s0\fR is set if either Netscape or Microsoft \s-1SGC\s0 OIDs are +present. +.PP +\&\fBX509_get0_subject_key_id()\fR returns an internal pointer to the subject key +identifier of \fBx\fR as an \fB\s-1ASN1_OCTET_STRING\s0\fR or \fB\s-1NULL\s0\fR if the extension +is not present or cannot be parsed. +.PP +\&\fBX509_get0_authority_key_id()\fR returns an internal pointer to the authority key +identifier of \fBx\fR as an \fB\s-1ASN1_OCTET_STRING\s0\fR or \fB\s-1NULL\s0\fR if the extension +is not present or cannot be parsed. +.PP +\&\fBX509_get0_authority_issuer()\fR returns an internal pointer to the authority +certificate issuer of \fBx\fR as a stack of \fB\s-1GENERAL_NAME\s0\fR structures or +\&\fB\s-1NULL\s0\fR if the extension is not present or cannot be parsed. +.PP +\&\fBX509_get0_authority_serial()\fR returns an internal pointer to the authority +certificate serial number of \fBx\fR as an \fB\s-1ASN1_INTEGER\s0\fR or \fB\s-1NULL\s0\fR if the +extension is not present or cannot be parsed. +.PP +\&\fBX509_set_proxy_flag()\fR marks the certificate with the \fB\s-1EXFLAG_PROXY\s0\fR flag. +This is for the users who need to mark non\-RFC3820 proxy certificates as +such, as OpenSSL only detects \s-1RFC3820\s0 compliant ones. +.PP +\&\fBX509_set_proxy_pathlen()\fR sets the proxy certificate path length for the given +certificate \fBx\fR. This is for the users who need to mark non\-RFC3820 proxy +certificates as such, as OpenSSL only detects \s-1RFC3820\s0 compliant ones. +.PP +\&\fBX509_get_proxy_pathlen()\fR returns the proxy certificate path length for the +given certificate \fBx\fR if it is a proxy certificate. +.SH "NOTES" +.IX Header "NOTES" +The value of the flags correspond to extension values which are cached +in the \fBX509\fR structure. If the flags returned do not provide sufficient +information an application should examine extension values directly +for example using \fBX509_get_ext_d2i()\fR. +.PP +If the key usage or extended key usage extension is absent then typically usage +is unrestricted. For this reason \fBX509_get_key_usage()\fR and +\&\fBX509_get_extended_key_usage()\fR return \fB\s-1UINT32_MAX\s0\fR when the corresponding +extension is absent. Applications can additionally check the return value of +\&\fBX509_get_extension_flags()\fR and take appropriate action is an extension is +absent. +.PP +If \fBX509_get0_subject_key_id()\fR returns \fB\s-1NULL\s0\fR then the extension may be +absent or malformed. Applications can determine the precise reason using +\&\fBX509_get_ext_d2i()\fR. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBX509_get_pathlen()\fR returns the path length value, or \-1 if the extension +is not present. +.PP +\&\fBX509_get_extension_flags()\fR, \fBX509_get_key_usage()\fR and +\&\fBX509_get_extended_key_usage()\fR return sets of flags corresponding to the +certificate extension values. +.PP +\&\fBX509_get0_subject_key_id()\fR returns the subject key identifier as a +pointer to an \fB\s-1ASN1_OCTET_STRING\s0\fR structure or \fB\s-1NULL\s0\fR if the extension +is absent or an error occurred during parsing. +.PP +\&\fBX509_get_proxy_pathlen()\fR returns the path length value if the given +certificate is a proxy one and has a path length set, and \-1 otherwise. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBX509_check_purpose\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +\&\fBX509_get_pathlen()\fR, \fBX509_set_proxy_flag()\fR, \fBX509_set_proxy_pathlen()\fR and +\&\fBX509_get_proxy_pathlen()\fR were added in OpenSSL 1.1.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2015\-2020 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_get_pubkey.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_get_pubkey.3 new file mode 100644 index 00000000..27ccbb10 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_get_pubkey.3 @@ -0,0 +1,215 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "X509_GET_PUBKEY 3" +.TH X509_GET_PUBKEY 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +X509_get_pubkey, X509_get0_pubkey, X509_set_pubkey, X509_get_X509_PUBKEY, X509_REQ_get_pubkey, X509_REQ_get0_pubkey, X509_REQ_set_pubkey, X509_REQ_get_X509_PUBKEY \- get or set certificate or certificate request public key +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& EVP_PKEY *X509_get_pubkey(X509 *x); +\& EVP_PKEY *X509_get0_pubkey(const X509 *x); +\& int X509_set_pubkey(X509 *x, EVP_PKEY *pkey); +\& X509_PUBKEY *X509_get_X509_PUBKEY(X509 *x); +\& +\& EVP_PKEY *X509_REQ_get_pubkey(X509_REQ *req); +\& EVP_PKEY *X509_REQ_get0_pubkey(X509_REQ *req); +\& int X509_REQ_set_pubkey(X509_REQ *x, EVP_PKEY *pkey); +\& X509_PUBKEY *X509_REQ_get_X509_PUBKEY(X509_REQ *x); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBX509_get_pubkey()\fR attempts to decode the public key for certificate \fBx\fR. If +successful it returns the public key as an \fB\s-1EVP_PKEY\s0\fR pointer with its +reference count incremented: this means the returned key must be freed up +after use. \fBX509_get0_pubkey()\fR is similar except it does \fBnot\fR increment +the reference count of the returned \fB\s-1EVP_PKEY\s0\fR so it must not be freed up +after use. +.PP +\&\fBX509_get_X509_PUBKEY()\fR returns an internal pointer to the \fBX509_PUBKEY\fR +structure which encodes the certificate of \fBx\fR. The returned value +must not be freed up after use. +.PP +\&\fBX509_set_pubkey()\fR attempts to set the public key for certificate \fBx\fR to +\&\fBpkey\fR. The key \fBpkey\fR should be freed up after use. +.PP +\&\fBX509_REQ_get_pubkey()\fR, \fBX509_REQ_get0_pubkey()\fR, \fBX509_REQ_set_pubkey()\fR and +\&\fBX509_REQ_get_X509_PUBKEY()\fR are similar but operate on certificate request \fBreq\fR. +.SH "NOTES" +.IX Header "NOTES" +The first time a public key is decoded the \fB\s-1EVP_PKEY\s0\fR structure is +cached in the certificate or certificate request itself. Subsequent calls +return the cached structure with its reference count incremented to +improve performance. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBX509_get_pubkey()\fR, \fBX509_get0_pubkey()\fR, \fBX509_get_X509_PUBKEY()\fR, +\&\fBX509_REQ_get_pubkey()\fR and \fBX509_REQ_get_X509_PUBKEY()\fR return a public key or +\&\fB\s-1NULL\s0\fR if an error occurred. +.PP +\&\fBX509_set_pubkey()\fR and \fBX509_REQ_set_pubkey()\fR return 1 for success and 0 +for failure. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBd2i_X509\fR\|(3), +\&\fBERR_get_error\fR\|(3), +\&\fBX509_CRL_get0_by_serial\fR\|(3), +\&\fBX509_get0_signature\fR\|(3), +\&\fBX509_get_ext_d2i\fR\|(3), +\&\fBX509_get_extension_flags\fR\|(3), +\&\fBX509_get_subject_name\fR\|(3), +\&\fBX509_get_version\fR\|(3), +\&\fBX509_NAME_add_entry_by_txt\fR\|(3), +\&\fBX509_NAME_ENTRY_get_object\fR\|(3), +\&\fBX509_NAME_get_index_by_NID\fR\|(3), +\&\fBX509_NAME_print_ex\fR\|(3), +\&\fBX509_new\fR\|(3), +\&\fBX509_sign\fR\|(3), +\&\fBX509V3_get_d2i\fR\|(3), +\&\fBX509_verify_cert\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2015\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_get_serialNumber.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_get_serialNumber.3 new file mode 100644 index 00000000..7aecb0a6 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_get_serialNumber.3 @@ -0,0 +1,200 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "X509_GET_SERIALNUMBER 3" +.TH X509_GET_SERIALNUMBER 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +X509_get_serialNumber, X509_get0_serialNumber, X509_set_serialNumber \&\- get or set certificate serial number +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& ASN1_INTEGER *X509_get_serialNumber(X509 *x); +\& const ASN1_INTEGER *X509_get0_serialNumber(const X509 *x); +\& int X509_set_serialNumber(X509 *x, ASN1_INTEGER *serial); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBX509_get_serialNumber()\fR returns the serial number of certificate \fBx\fR as an +\&\fB\s-1ASN1_INTEGER\s0\fR structure which can be examined or initialised. The value +returned is an internal pointer which \fB\s-1MUST NOT\s0\fR be freed up after the call. +.PP +\&\fBX509_get0_serialNumber()\fR is the same as \fBX509_get_serialNumber()\fR except it +accepts a const parameter and returns a const result. +.PP +\&\fBX509_set_serialNumber()\fR sets the serial number of certificate \fBx\fR to +\&\fBserial\fR. A copy of the serial number is used internally so \fBserial\fR should +be freed up after use. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBX509_get_serialNumber()\fR and \fBX509_get0_serialNumber()\fR return an \fB\s-1ASN1_INTEGER\s0\fR +structure. +.PP +\&\fBX509_set_serialNumber()\fR returns 1 for success and 0 for failure. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBd2i_X509\fR\|(3), +\&\fBERR_get_error\fR\|(3), +\&\fBX509_CRL_get0_by_serial\fR\|(3), +\&\fBX509_get0_signature\fR\|(3), +\&\fBX509_get_ext_d2i\fR\|(3), +\&\fBX509_get_extension_flags\fR\|(3), +\&\fBX509_get_pubkey\fR\|(3), +\&\fBX509_get_subject_name\fR\|(3), +\&\fBX509_NAME_add_entry_by_txt\fR\|(3), +\&\fBX509_NAME_ENTRY_get_object\fR\|(3), +\&\fBX509_NAME_get_index_by_NID\fR\|(3), +\&\fBX509_NAME_print_ex\fR\|(3), +\&\fBX509_new\fR\|(3), +\&\fBX509_sign\fR\|(3), +\&\fBX509V3_get_d2i\fR\|(3), +\&\fBX509_verify_cert\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +The \fBX509_get_serialNumber()\fR and \fBX509_set_serialNumber()\fR functions are +available in all versions of OpenSSL. +The \fBX509_get0_serialNumber()\fR function was added in OpenSSL 1.1.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_get_subject_name.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_get_subject_name.3 new file mode 100644 index 00000000..971b7b21 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_get_subject_name.3 @@ -0,0 +1,214 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "X509_GET_SUBJECT_NAME 3" +.TH X509_GET_SUBJECT_NAME 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +X509_get_subject_name, X509_set_subject_name, X509_get_issuer_name, X509_set_issuer_name, X509_REQ_get_subject_name, X509_REQ_set_subject_name, X509_CRL_get_issuer, X509_CRL_set_issuer_name \- get and set issuer or subject names +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& X509_NAME *X509_get_subject_name(const X509 *x); +\& int X509_set_subject_name(X509 *x, X509_NAME *name); +\& +\& X509_NAME *X509_get_issuer_name(const X509 *x); +\& int X509_set_issuer_name(X509 *x, X509_NAME *name); +\& +\& X509_NAME *X509_REQ_get_subject_name(const X509_REQ *req); +\& int X509_REQ_set_subject_name(X509_REQ *req, X509_NAME *name); +\& +\& X509_NAME *X509_CRL_get_issuer(const X509_CRL *crl); +\& int X509_CRL_set_issuer_name(X509_CRL *x, X509_NAME *name); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBX509_get_subject_name()\fR returns the subject name of certificate \fBx\fR. The +returned value is an internal pointer which \fB\s-1MUST NOT\s0\fR be freed. +.PP +\&\fBX509_set_subject_name()\fR sets the issuer name of certificate \fBx\fR to +\&\fBname\fR. The \fBname\fR parameter is copied internally and should be freed +up when it is no longer needed. +.PP +\&\fBX509_get_issuer_name()\fR and \fBX509_set_issuer_name()\fR are identical to +\&\fBX509_get_subject_name()\fR and \fBX509_set_subject_name()\fR except the get and +set the issuer name of \fBx\fR. +.PP +Similarly \fBX509_REQ_get_subject_name()\fR, \fBX509_REQ_set_subject_name()\fR, +\&\fBX509_CRL_get_issuer()\fR and \fBX509_CRL_set_issuer_name()\fR get or set the subject +or issuer names of certificate requests of CRLs respectively. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBX509_get_subject_name()\fR, \fBX509_get_issuer_name()\fR, \fBX509_REQ_get_subject_name()\fR +and \fBX509_CRL_get_issuer()\fR return an \fBX509_NAME\fR pointer. +.PP +\&\fBX509_set_subject_name()\fR, \fBX509_set_issuer_name()\fR, \fBX509_REQ_set_subject_name()\fR +and \fBX509_CRL_set_issuer_name()\fR return 1 for success and 0 for failure. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBd2i_X509\fR\|(3), +\&\fBERR_get_error\fR\|(3), \fBd2i_X509\fR\|(3) +\&\fBX509_CRL_get0_by_serial\fR\|(3), +\&\fBX509_get0_signature\fR\|(3), +\&\fBX509_get_ext_d2i\fR\|(3), +\&\fBX509_get_extension_flags\fR\|(3), +\&\fBX509_get_pubkey\fR\|(3), +\&\fBX509_NAME_add_entry_by_txt\fR\|(3), +\&\fBX509_NAME_ENTRY_get_object\fR\|(3), +\&\fBX509_NAME_get_index_by_NID\fR\|(3), +\&\fBX509_NAME_print_ex\fR\|(3), +\&\fBX509_new\fR\|(3), +\&\fBX509_sign\fR\|(3), +\&\fBX509V3_get_d2i\fR\|(3), +\&\fBX509_verify_cert\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +\&\fBX509_REQ_get_subject_name()\fR is a function in OpenSSL 1.1.0 and a macro in +earlier versions. +.PP +\&\fBX509_CRL_get_issuer()\fR is a function in OpenSSL 1.1.0. It was previously +added in OpenSSL 1.0.0 as a macro. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2015\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_get_version.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_get_version.3 new file mode 100644 index 00000000..f62c7aa9 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_get_version.3 @@ -0,0 +1,211 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "X509_GET_VERSION 3" +.TH X509_GET_VERSION 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +X509_get_version, X509_set_version, X509_REQ_get_version, X509_REQ_set_version, X509_CRL_get_version, X509_CRL_set_version \- get or set certificate, certificate request or CRL version +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& long X509_get_version(const X509 *x); +\& int X509_set_version(X509 *x, long version); +\& +\& long X509_REQ_get_version(const X509_REQ *req); +\& int X509_REQ_set_version(X509_REQ *x, long version); +\& +\& long X509_CRL_get_version(const X509_CRL *crl); +\& int X509_CRL_set_version(X509_CRL *x, long version); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBX509_get_version()\fR returns the numerical value of the version field of +certificate \fBx\fR. Note: this is defined by standards (X.509 et al) to be one +less than the certificate version. So a version 3 certificate will return 2 and +a version 1 certificate will return 0. +.PP +\&\fBX509_set_version()\fR sets the numerical value of the version field of certificate +\&\fBx\fR to \fBversion\fR. +.PP +Similarly \fBX509_REQ_get_version()\fR, \fBX509_REQ_set_version()\fR, +\&\fBX509_CRL_get_version()\fR and \fBX509_CRL_set_version()\fR get and set the version +number of certificate requests and CRLs. +.SH "NOTES" +.IX Header "NOTES" +The version field of certificates, certificate requests and CRLs has a +\&\s-1DEFAULT\s0 value of \fB\fBv1\fB\|(0)\fR meaning the field should be omitted for version +1. This is handled transparently by these functions. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBX509_get_version()\fR, \fBX509_REQ_get_version()\fR and \fBX509_CRL_get_version()\fR +return the numerical value of the version field. +.PP +\&\fBX509_set_version()\fR, \fBX509_REQ_set_version()\fR and \fBX509_CRL_set_version()\fR +return 1 for success and 0 for failure. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBd2i_X509\fR\|(3), +\&\fBERR_get_error\fR\|(3), +\&\fBX509_CRL_get0_by_serial\fR\|(3), +\&\fBX509_get0_signature\fR\|(3), +\&\fBX509_get_ext_d2i\fR\|(3), +\&\fBX509_get_extension_flags\fR\|(3), +\&\fBX509_get_pubkey\fR\|(3), +\&\fBX509_get_subject_name\fR\|(3), +\&\fBX509_NAME_add_entry_by_txt\fR\|(3), +\&\fBX509_NAME_ENTRY_get_object\fR\|(3), +\&\fBX509_NAME_get_index_by_NID\fR\|(3), +\&\fBX509_NAME_print_ex\fR\|(3), +\&\fBX509_new\fR\|(3), +\&\fBX509_sign\fR\|(3), +\&\fBX509V3_get_d2i\fR\|(3), +\&\fBX509_verify_cert\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +\&\fBX509_get_version()\fR, \fBX509_REQ_get_version()\fR and \fBX509_CRL_get_version()\fR are +functions in OpenSSL 1.1.0, in previous versions they were macros. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2015\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_new.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_new.3 new file mode 100644 index 00000000..ca35a8cd --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_new.3 @@ -0,0 +1,213 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "X509_NEW 3" +.TH X509_NEW 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +X509_chain_up_ref, X509_new, X509_free, X509_up_ref \- X509 certificate ASN1 allocation functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& X509 *X509_new(void); +\& void X509_free(X509 *a); +\& int X509_up_ref(X509 *a); +\& STACK_OF(X509) *X509_chain_up_ref(STACK_OF(X509) *x); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The X509 \s-1ASN1\s0 allocation routines, allocate and free an +X509 structure, which represents an X509 certificate. +.PP +\&\fBX509_new()\fR allocates and initializes a X509 structure with reference count +\&\fB1\fR. +.PP +\&\fBX509_free()\fR decrements the reference count of \fBX509\fR structure \fBa\fR and +frees it up if the reference count is zero. If \fBa\fR is \s-1NULL\s0 nothing is done. +.PP +\&\fBX509_up_ref()\fR increments the reference count of \fBa\fR. +.PP +\&\fBX509_chain_up_ref()\fR increases the reference count of all certificates in +chain \fBx\fR and returns a copy of the stack. +.SH "NOTES" +.IX Header "NOTES" +The function \fBX509_up_ref()\fR if useful if a certificate structure is being +used by several different operations each of which will free it up after +use: this avoids the need to duplicate the entire certificate structure. +.PP +The function \fBX509_chain_up_ref()\fR doesn't just up the reference count of +each certificate it also returns a copy of the stack, using \fBsk_X509_dup()\fR, +but it serves a similar purpose: the returned chain persists after the +original has been freed. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +If the allocation fails, \fBX509_new()\fR returns \fB\s-1NULL\s0\fR and sets an error +code that can be obtained by \fBERR_get_error\fR\|(3). +Otherwise it returns a pointer to the newly allocated structure. +.PP +\&\fBX509_up_ref()\fR returns 1 for success and 0 for failure. +.PP +\&\fBX509_chain_up_ref()\fR returns a copy of the stack or \fB\s-1NULL\s0\fR if an error +occurred. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBd2i_X509\fR\|(3), +\&\fBERR_get_error\fR\|(3), +\&\fBX509_CRL_get0_by_serial\fR\|(3), +\&\fBX509_get0_signature\fR\|(3), +\&\fBX509_get_ext_d2i\fR\|(3), +\&\fBX509_get_extension_flags\fR\|(3), +\&\fBX509_get_pubkey\fR\|(3), +\&\fBX509_get_subject_name\fR\|(3), +\&\fBX509_get_version\fR\|(3), +\&\fBX509_NAME_add_entry_by_txt\fR\|(3), +\&\fBX509_NAME_ENTRY_get_object\fR\|(3), +\&\fBX509_NAME_get_index_by_NID\fR\|(3), +\&\fBX509_NAME_print_ex\fR\|(3), +\&\fBX509_sign\fR\|(3), +\&\fBX509V3_get_d2i\fR\|(3), +\&\fBX509_verify_cert\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2002\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_sign.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_sign.3 new file mode 100644 index 00000000..3944b6fa --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_sign.3 @@ -0,0 +1,227 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "X509_SIGN 3" +.TH X509_SIGN 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +X509_sign, X509_sign_ctx, X509_verify, X509_REQ_sign, X509_REQ_sign_ctx, X509_REQ_verify, X509_CRL_sign, X509_CRL_sign_ctx, X509_CRL_verify \- sign or verify certificate, certificate request or CRL signature +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int X509_sign(X509 *x, EVP_PKEY *pkey, const EVP_MD *md); +\& int X509_sign_ctx(X509 *x, EVP_MD_CTX *ctx); +\& int X509_verify(X509 *a, EVP_PKEY *r); +\& +\& int X509_REQ_sign(X509_REQ *x, EVP_PKEY *pkey, const EVP_MD *md); +\& int X509_REQ_sign_ctx(X509_REQ *x, EVP_MD_CTX *ctx); +\& int X509_REQ_verify(X509_REQ *a, EVP_PKEY *r); +\& +\& int X509_CRL_sign(X509_CRL *x, EVP_PKEY *pkey, const EVP_MD *md); +\& int X509_CRL_sign_ctx(X509_CRL *x, EVP_MD_CTX *ctx); +\& int X509_CRL_verify(X509_CRL *a, EVP_PKEY *r); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBX509_sign()\fR signs certificate \fBx\fR using private key \fBpkey\fR and message +digest \fBmd\fR and sets the signature in \fBx\fR. \fBX509_sign_ctx()\fR also signs +certificate \fBx\fR but uses the parameters contained in digest context \fBctx\fR. +.PP +\&\fBX509_verify()\fR verifies the signature of certificate \fBx\fR using public key +\&\fBpkey\fR. Only the signature is checked: no other checks (such as certificate +chain validity) are performed. +.PP +\&\fBX509_REQ_sign()\fR, \fBX509_REQ_sign_ctx()\fR, \fBX509_REQ_verify()\fR, +\&\fBX509_CRL_sign()\fR, \fBX509_CRL_sign_ctx()\fR and \fBX509_CRL_verify()\fR sign and verify +certificate requests and CRLs respectively. +.SH "NOTES" +.IX Header "NOTES" +\&\fBX509_sign_ctx()\fR is used where the default parameters for the corresponding +public key and digest are not suitable. It can be used to sign keys using +RSA-PSS for example. +.PP +For efficiency reasons and to work around \s-1ASN.1\s0 encoding issues the encoding +of the signed portion of a certificate, certificate request and \s-1CRL\s0 is cached +internally. If the signed portion of the structure is modified the encoding +is not always updated meaning a stale version is sometimes used. This is not +normally a problem because modifying the signed portion will invalidate the +signature and signing will always update the encoding. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBX509_sign()\fR, \fBX509_sign_ctx()\fR, \fBX509_REQ_sign()\fR, \fBX509_REQ_sign_ctx()\fR, +\&\fBX509_CRL_sign()\fR and \fBX509_CRL_sign_ctx()\fR return the size of the signature +in bytes for success and zero for failure. +.PP +\&\fBX509_verify()\fR, \fBX509_REQ_verify()\fR and \fBX509_CRL_verify()\fR return 1 if the +signature is valid and 0 if the signature check fails. If the signature +could not be checked at all because it was invalid or some other error +occurred then \-1 is returned. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBd2i_X509\fR\|(3), +\&\fBERR_get_error\fR\|(3), +\&\fBX509_CRL_get0_by_serial\fR\|(3), +\&\fBX509_get0_signature\fR\|(3), +\&\fBX509_get_ext_d2i\fR\|(3), +\&\fBX509_get_extension_flags\fR\|(3), +\&\fBX509_get_pubkey\fR\|(3), +\&\fBX509_get_subject_name\fR\|(3), +\&\fBX509_get_version\fR\|(3), +\&\fBX509_NAME_add_entry_by_txt\fR\|(3), +\&\fBX509_NAME_ENTRY_get_object\fR\|(3), +\&\fBX509_NAME_get_index_by_NID\fR\|(3), +\&\fBX509_NAME_print_ex\fR\|(3), +\&\fBX509_new\fR\|(3), +\&\fBX509V3_get_d2i\fR\|(3), +\&\fBX509_verify_cert\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +The \fBX509_sign()\fR, \fBX509_REQ_sign()\fR and \fBX509_CRL_sign()\fR functions are +available in all versions of OpenSSL. +.PP +The \fBX509_sign_ctx()\fR, \fBX509_REQ_sign_ctx()\fR +and \fBX509_CRL_sign_ctx()\fR functions were added OpenSSL 1.0.1. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2015\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_verify_cert.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_verify_cert.3 new file mode 100644 index 00000000..e8df16cc --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509_verify_cert.3 @@ -0,0 +1,190 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "X509_VERIFY_CERT 3" +.TH X509_VERIFY_CERT 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +X509_verify_cert \- discover and verify X509 certificate chain +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int X509_verify_cert(X509_STORE_CTX *ctx); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fBX509_verify_cert()\fR function attempts to discover and validate a +certificate chain based on parameters in \fBctx\fR. A complete description of +the process is contained in the \fBverify\fR\|(1) manual page. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +If a complete chain can be built and validated this function returns 1, +otherwise it return zero, in exceptional circumstances it can also +return a negative code. +.PP +If the function fails additional error information can be obtained by +examining \fBctx\fR using, for example \fBX509_STORE_CTX_get_error()\fR. +.SH "NOTES" +.IX Header "NOTES" +Applications rarely call this function directly but it is used by +OpenSSL internally for certificate validation, in both the S/MIME and +\&\s-1SSL/TLS\s0 code. +.PP +A negative return value from \fBX509_verify_cert()\fR can occur if it is invoked +incorrectly, such as with no certificate set in \fBctx\fR, or when it is called +twice in succession without reinitialising \fBctx\fR for the second call. +A negative return value can also happen due to internal resource problems or if +a retry operation is requested during internal lookups (which never happens +with standard lookup methods). +Applications must check for <= 0 return value on error. +.SH "BUGS" +.IX Header "BUGS" +This function uses the header \fBx509.h\fR as opposed to most chain verification +functions which use \fBx509_vfy.h\fR. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBX509_STORE_CTX_get_error\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2009\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509v3_get_ext_by_NID.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509v3_get_ext_by_NID.3 new file mode 100644 index 00000000..db05b485 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/X509v3_get_ext_by_NID.3 @@ -0,0 +1,264 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "X509V3_GET_EXT_BY_NID 3" +.TH X509V3_GET_EXT_BY_NID 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +X509v3_get_ext_count, X509v3_get_ext, X509v3_get_ext_by_NID, X509v3_get_ext_by_OBJ, X509v3_get_ext_by_critical, X509v3_delete_ext, X509v3_add_ext, X509_get_ext_count, X509_get_ext, X509_get_ext_by_NID, X509_get_ext_by_OBJ, X509_get_ext_by_critical, X509_delete_ext, X509_add_ext, X509_CRL_get_ext_count, X509_CRL_get_ext, X509_CRL_get_ext_by_NID, X509_CRL_get_ext_by_OBJ, X509_CRL_get_ext_by_critical, X509_CRL_delete_ext, X509_CRL_add_ext, X509_REVOKED_get_ext_count, X509_REVOKED_get_ext, X509_REVOKED_get_ext_by_NID, X509_REVOKED_get_ext_by_OBJ, X509_REVOKED_get_ext_by_critical, X509_REVOKED_delete_ext, X509_REVOKED_add_ext \- extension stack utility functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int X509v3_get_ext_count(const STACK_OF(X509_EXTENSION) *x); +\& X509_EXTENSION *X509v3_get_ext(const STACK_OF(X509_EXTENSION) *x, int loc); +\& +\& int X509v3_get_ext_by_NID(const STACK_OF(X509_EXTENSION) *x, +\& int nid, int lastpos); +\& int X509v3_get_ext_by_OBJ(const STACK_OF(X509_EXTENSION) *x, +\& const ASN1_OBJECT *obj, int lastpos); +\& int X509v3_get_ext_by_critical(const STACK_OF(X509_EXTENSION) *x, +\& int crit, int lastpos); +\& X509_EXTENSION *X509v3_delete_ext(STACK_OF(X509_EXTENSION) *x, int loc); +\& STACK_OF(X509_EXTENSION) *X509v3_add_ext(STACK_OF(X509_EXTENSION) **x, +\& X509_EXTENSION *ex, int loc); +\& +\& int X509_get_ext_count(const X509 *x); +\& X509_EXTENSION *X509_get_ext(const X509 *x, int loc); +\& int X509_get_ext_by_NID(const X509 *x, int nid, int lastpos); +\& int X509_get_ext_by_OBJ(const X509 *x, const ASN1_OBJECT *obj, int lastpos); +\& int X509_get_ext_by_critical(const X509 *x, int crit, int lastpos); +\& X509_EXTENSION *X509_delete_ext(X509 *x, int loc); +\& int X509_add_ext(X509 *x, X509_EXTENSION *ex, int loc); +\& +\& int X509_CRL_get_ext_count(const X509_CRL *x); +\& X509_EXTENSION *X509_CRL_get_ext(const X509_CRL *x, int loc); +\& int X509_CRL_get_ext_by_NID(const X509_CRL *x, int nid, int lastpos); +\& int X509_CRL_get_ext_by_OBJ(const X509_CRL *x, const ASN1_OBJECT *obj, int lastpos); +\& int X509_CRL_get_ext_by_critical(const X509_CRL *x, int crit, int lastpos); +\& X509_EXTENSION *X509_CRL_delete_ext(X509_CRL *x, int loc); +\& int X509_CRL_add_ext(X509_CRL *x, X509_EXTENSION *ex, int loc); +\& +\& int X509_REVOKED_get_ext_count(const X509_REVOKED *x); +\& X509_EXTENSION *X509_REVOKED_get_ext(const X509_REVOKED *x, int loc); +\& int X509_REVOKED_get_ext_by_NID(const X509_REVOKED *x, int nid, int lastpos); +\& int X509_REVOKED_get_ext_by_OBJ(const X509_REVOKED *x, const ASN1_OBJECT *obj, +\& int lastpos); +\& int X509_REVOKED_get_ext_by_critical(const X509_REVOKED *x, int crit, int lastpos); +\& X509_EXTENSION *X509_REVOKED_delete_ext(X509_REVOKED *x, int loc); +\& int X509_REVOKED_add_ext(X509_REVOKED *x, X509_EXTENSION *ex, int loc); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBX509v3_get_ext_count()\fR retrieves the number of extensions in \fBx\fR. +.PP +\&\fBX509v3_get_ext()\fR retrieves extension \fBloc\fR from \fBx\fR. The index \fBloc\fR +can take any value from \fB0\fR to X509_get_ext_count(x) \- 1. The returned +extension is an internal pointer which \fBmust not\fR be freed up by the +application. +.PP +\&\fBX509v3_get_ext_by_NID()\fR and \fBX509v3_get_ext_by_OBJ()\fR look for an extension +with \fBnid\fR or \fBobj\fR from extension stack \fBx\fR. The search starts from the +extension after \fBlastpos\fR or from the beginning if is \fB\-1\fR. If +the extension is found its index is returned otherwise \fB\-1\fR is returned. +.PP +\&\fBX509v3_get_ext_by_critical()\fR is similar to \fBX509v3_get_ext_by_NID()\fR except it +looks for an extension of criticality \fBcrit\fR. A zero value for \fBcrit\fR +looks for a non-critical extension a non-zero value looks for a critical +extension. +.PP +\&\fBX509v3_delete_ext()\fR deletes the extension with index \fBloc\fR from \fBx\fR. The +deleted extension is returned and must be freed by the caller. If \fBloc\fR +is in invalid index value \fB\s-1NULL\s0\fR is returned. +.PP +\&\fBX509v3_add_ext()\fR adds extension \fBex\fR to stack \fB*x\fR at position \fBloc\fR. If +\&\fBloc\fR is \fB\-1\fR the new extension is added to the end. If \fB*x\fR is \fB\s-1NULL\s0\fR +a new stack will be allocated. The passed extension \fBex\fR is duplicated +internally so it must be freed after use. +.PP +\&\fBX509_get_ext_count()\fR, \fBX509_get_ext()\fR, \fBX509_get_ext_by_NID()\fR, +\&\fBX509_get_ext_by_OBJ()\fR, \fBX509_get_ext_by_critical()\fR, \fBX509_delete_ext()\fR +and \fBX509_add_ext()\fR operate on the extensions of certificate \fBx\fR they are +otherwise identical to the X509v3 functions. +.PP +\&\fBX509_CRL_get_ext_count()\fR, \fBX509_CRL_get_ext()\fR, \fBX509_CRL_get_ext_by_NID()\fR, +\&\fBX509_CRL_get_ext_by_OBJ()\fR, \fBX509_CRL_get_ext_by_critical()\fR, +\&\fBX509_CRL_delete_ext()\fR and \fBX509_CRL_add_ext()\fR operate on the extensions of +\&\s-1CRL\s0 \fBx\fR they are otherwise identical to the X509v3 functions. +.PP +\&\fBX509_REVOKED_get_ext_count()\fR, \fBX509_REVOKED_get_ext()\fR, +\&\fBX509_REVOKED_get_ext_by_NID()\fR, \fBX509_REVOKED_get_ext_by_OBJ()\fR, +\&\fBX509_REVOKED_get_ext_by_critical()\fR, \fBX509_REVOKED_delete_ext()\fR and +\&\fBX509_REVOKED_add_ext()\fR operate on the extensions of \s-1CRL\s0 entry \fBx\fR +they are otherwise identical to the X509v3 functions. +.SH "NOTES" +.IX Header "NOTES" +These functions are used to examine stacks of extensions directly. Many +applications will want to parse or encode and add an extension: they should +use the extension encode and decode functions instead such as +\&\fBX509_add1_ext_i2d()\fR and \fBX509_get_ext_d2i()\fR. +.PP +Extension indices start from zero, so a zero index return value is \fBnot\fR an +error. These search functions start from the extension \fBafter\fR the \fBlastpos\fR +parameter so it should initially be set to \fB\-1\fR, if it is set to zero the +initial extension will not be checked. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBX509v3_get_ext_count()\fR returns the extension count. +.PP +\&\fBX509v3_get_ext()\fR, \fBX509v3_delete_ext()\fR and \fBX509_delete_ext()\fR return an +\&\fBX509_EXTENSION\fR pointer or \fB\s-1NULL\s0\fR if an error occurs. +.PP +\&\fBX509v3_get_ext_by_NID()\fR \fBX509v3_get_ext_by_OBJ()\fR and +\&\fBX509v3_get_ext_by_critical()\fR return the an extension index or \fB\-1\fR if an +error occurs. +.PP +\&\fBX509v3_add_ext()\fR returns a stack of extensions or \fB\s-1NULL\s0\fR on error. +.PP +\&\fBX509_add_ext()\fR returns 1 on success and 0 on error. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBX509V3_get_d2i\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2015\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/d2i_DHparams.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/d2i_DHparams.3 new file mode 100644 index 00000000..9638ab72 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/d2i_DHparams.3 @@ -0,0 +1,174 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "D2I_DHPARAMS 3" +.TH D2I_DHPARAMS 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +d2i_DHparams, i2d_DHparams \- PKCS#3 DH parameter functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& DH *d2i_DHparams(DH **a, unsigned char **pp, long length); +\& int i2d_DHparams(DH *a, unsigned char **pp); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +These functions decode and encode PKCS#3 \s-1DH\s0 parameters using the +DHparameter structure described in PKCS#3. +.PP +Otherwise these behave in a similar way to \fBd2i_X509()\fR and \fBi2d_X509()\fR +described in the \fBd2i_X509\fR\|(3) manual page. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBd2i_DHparams()\fR returns a valid \fB\s-1DH\s0\fR structure or \s-1NULL\s0 if an error occurred. +.PP +\&\fBi2d_DHparams()\fR returns the length of encoded data on success or a value which +is less than or equal to 0 on error. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBd2i_X509\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/d2i_PKCS8PrivateKey_bio.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/d2i_PKCS8PrivateKey_bio.3 new file mode 100644 index 00000000..da9f8399 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/d2i_PKCS8PrivateKey_bio.3 @@ -0,0 +1,203 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "D2I_PKCS8PRIVATEKEY_BIO 3" +.TH D2I_PKCS8PRIVATEKEY_BIO 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +d2i_PKCS8PrivateKey_bio, d2i_PKCS8PrivateKey_fp, i2d_PKCS8PrivateKey_bio, i2d_PKCS8PrivateKey_fp, i2d_PKCS8PrivateKey_nid_bio, i2d_PKCS8PrivateKey_nid_fp \- PKCS#8 format private key functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& EVP_PKEY *d2i_PKCS8PrivateKey_bio(BIO *bp, EVP_PKEY **x, pem_password_cb *cb, void *u); +\& EVP_PKEY *d2i_PKCS8PrivateKey_fp(FILE *fp, EVP_PKEY **x, pem_password_cb *cb, void *u); +\& +\& int i2d_PKCS8PrivateKey_bio(BIO *bp, EVP_PKEY *x, const EVP_CIPHER *enc, +\& char *kstr, int klen, +\& pem_password_cb *cb, void *u); +\& +\& int i2d_PKCS8PrivateKey_fp(FILE *fp, EVP_PKEY *x, const EVP_CIPHER *enc, +\& char *kstr, int klen, +\& pem_password_cb *cb, void *u); +\& +\& int i2d_PKCS8PrivateKey_nid_bio(BIO *bp, EVP_PKEY *x, int nid, +\& char *kstr, int klen, +\& pem_password_cb *cb, void *u); +\& +\& int i2d_PKCS8PrivateKey_nid_fp(FILE *fp, EVP_PKEY *x, int nid, +\& char *kstr, int klen, +\& pem_password_cb *cb, void *u); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The PKCS#8 functions encode and decode private keys in PKCS#8 format using both +PKCS#5 v1.5 and PKCS#5 v2.0 password based encryption algorithms. +.PP +Other than the use of \s-1DER\s0 as opposed to \s-1PEM\s0 these functions are identical to the +corresponding \fB\s-1PEM\s0\fR function as described in \fBPEM_read_PrivateKey\fR\|(3). +.SH "NOTES" +.IX Header "NOTES" +These functions are currently the only way to store encrypted private keys using \s-1DER\s0 format. +.PP +Currently all the functions use BIOs or \s-1FILE\s0 pointers, there are no functions which +work directly on memory: this can be readily worked around by converting the buffers +to memory BIOs, see \fBBIO_s_mem\fR\|(3) for details. +.PP +These functions make no assumption regarding the pass phrase received from the +password callback. +It will simply be treated as a byte sequence. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBd2i_PKCS8PrivateKey_bio()\fR and \fBd2i_PKCS8PrivateKey_fp()\fR return a valid \fB\s-1EVP_PKEY\s0\fR +structure or \s-1NULL\s0 if an error occurred. +.PP +\&\fBi2d_PKCS8PrivateKey_bio()\fR, \fBi2d_PKCS8PrivateKey_fp()\fR, \fBi2d_PKCS8PrivateKey_nid_bio()\fR +and \fBi2d_PKCS8PrivateKey_nid_fp()\fR return 1 on success or 0 on error. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBPEM_read_PrivateKey\fR\|(3), +\&\fBpassphrase\-encoding\fR\|(7) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2002\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/d2i_PrivateKey.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/d2i_PrivateKey.3 new file mode 100644 index 00000000..e09b748d --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/d2i_PrivateKey.3 @@ -0,0 +1,209 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "D2I_PRIVATEKEY 3" +.TH D2I_PRIVATEKEY 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +d2i_PrivateKey, d2i_PublicKey, d2i_AutoPrivateKey, i2d_PrivateKey, i2d_PublicKey, d2i_PrivateKey_bio, d2i_PrivateKey_fp \&\- decode and encode functions for reading and saving EVP_PKEY structures +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& EVP_PKEY *d2i_PrivateKey(int type, EVP_PKEY **a, const unsigned char **pp, +\& long length); +\& EVP_PKEY *d2i_PublicKey(int type, EVP_PKEY **a, const unsigned char **pp, +\& long length); +\& EVP_PKEY *d2i_AutoPrivateKey(EVP_PKEY **a, const unsigned char **pp, +\& long length); +\& int i2d_PrivateKey(EVP_PKEY *a, unsigned char **pp); +\& int i2d_PublicKey(EVP_PKEY *a, unsigned char **pp); +\& +\& EVP_PKEY *d2i_PrivateKey_bio(BIO *bp, EVP_PKEY **a); +\& EVP_PKEY *d2i_PrivateKey_fp(FILE *fp, EVP_PKEY **a) +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBd2i_PrivateKey()\fR decodes a private key using algorithm \fBtype\fR. It attempts to +use any key specific format or PKCS#8 unencrypted PrivateKeyInfo format. The +\&\fBtype\fR parameter should be a public key algorithm constant such as +\&\fB\s-1EVP_PKEY_RSA\s0\fR. An error occurs if the decoded key does not match \fBtype\fR. +\&\fBd2i_PublicKey()\fR does the same for public keys. +.PP +\&\fBd2i_AutoPrivateKey()\fR is similar to \fBd2i_PrivateKey()\fR except it attempts to +automatically detect the private key format. +.PP +\&\fBi2d_PrivateKey()\fR encodes \fBkey\fR. It uses a key specific format or, if none is +defined for that key type, PKCS#8 unencrypted PrivateKeyInfo format. +\&\fBi2d_PublicKey()\fR does the same for public keys. +.PP +These functions are similar to the \fBd2i_X509()\fR functions; see \fBd2i_X509\fR\|(3). +.SH "NOTES" +.IX Header "NOTES" +All these functions use \s-1DER\s0 format and unencrypted keys. Applications wishing +to encrypt or decrypt private keys should use other functions such as +\&\fBd2i_PKCS8PrivateKey()\fR instead. +.PP +If the \fB*a\fR is not \s-1NULL\s0 when calling \fBd2i_PrivateKey()\fR or \fBd2i_AutoPrivateKey()\fR +(i.e. an existing structure is being reused) and the key format is PKCS#8 +then \fB*a\fR will be freed and replaced on a successful call. +.PP +To decode a key with type \fB\s-1EVP_PKEY_EC\s0\fR, \fBd2i_PublicKey()\fR requires \fB*a\fR to be +a non-NULL \s-1EVP_PKEY\s0 structure assigned an \s-1EC_KEY\s0 structure referencing the proper +\&\s-1EC_GROUP.\s0 +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +The \fBd2i_PrivateKey()\fR, \fBd2i_AutoPrivateKey()\fR, \fBd2i_PrivateKey_bio()\fR, \fBd2i_PrivateKey_fp()\fR, +and \fBd2i_PublicKey()\fR functions return a valid \fB\s-1EVP_KEY\s0\fR structure or \fB\s-1NULL\s0\fR if an +error occurs. The error code can be obtained by calling \fBERR_get_error\fR\|(3). +.PP +\&\fBi2d_PrivateKey()\fR and \fBi2d_PublicKey()\fR return the number of bytes successfully +encoded or a negative value if an error occurs. The error code can be obtained +by calling \fBERR_get_error\fR\|(3). +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBcrypto\fR\|(7), +\&\fBd2i_PKCS8PrivateKey_bio\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/d2i_SSL_SESSION.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/d2i_SSL_SESSION.3 new file mode 100644 index 00000000..4f9aab76 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/d2i_SSL_SESSION.3 @@ -0,0 +1,182 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "D2I_SSL_SESSION 3" +.TH D2I_SSL_SESSION 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +d2i_SSL_SESSION, i2d_SSL_SESSION \- convert SSL_SESSION object from/to ASN1 representation +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& SSL_SESSION *d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, +\& long length); +\& int i2d_SSL_SESSION(SSL_SESSION *in, unsigned char **pp); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +These functions decode and encode an \s-1SSL_SESSION\s0 object. +For encoding details see \fBd2i_X509\fR\|(3). +.PP +\&\s-1SSL_SESSION\s0 objects keep internal link information about the session cache +list, when being inserted into one \s-1SSL_CTX\s0 object's session cache. +One \s-1SSL_SESSION\s0 object, regardless of its reference count, must therefore +only be used with one \s-1SSL_CTX\s0 object (and the \s-1SSL\s0 objects created +from this \s-1SSL_CTX\s0 object). +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBd2i_SSL_SESSION()\fR returns a pointer to the newly allocated \s-1SSL_SESSION\s0 +object. In case of failure the NULL-pointer is returned and the error message +can be retrieved from the error stack. +.PP +\&\fBi2d_SSL_SESSION()\fR returns the size of the \s-1ASN1\s0 representation in bytes. +When the session is not valid, \fB0\fR is returned and no operation is performed. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBssl\fR\|(7), \fBSSL_SESSION_free\fR\|(3), +\&\fBSSL_CTX_sess_set_get_cb\fR\|(3), +\&\fBd2i_X509\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2001\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/d2i_X509.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/d2i_X509.3 new file mode 100644 index 00000000..704c93b2 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/d2i_X509.3 @@ -0,0 +1,385 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "D2I_X509 3" +.TH D2I_X509 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +d2i_ACCESS_DESCRIPTION, d2i_ADMISSIONS, d2i_ADMISSION_SYNTAX, d2i_ASIdOrRange, d2i_ASIdentifierChoice, d2i_ASIdentifiers, d2i_ASN1_BIT_STRING, d2i_ASN1_BMPSTRING, d2i_ASN1_ENUMERATED, d2i_ASN1_GENERALIZEDTIME, d2i_ASN1_GENERALSTRING, d2i_ASN1_IA5STRING, d2i_ASN1_INTEGER, d2i_ASN1_NULL, d2i_ASN1_OBJECT, d2i_ASN1_OCTET_STRING, d2i_ASN1_PRINTABLE, d2i_ASN1_PRINTABLESTRING, d2i_ASN1_SEQUENCE_ANY, d2i_ASN1_SET_ANY, d2i_ASN1_T61STRING, d2i_ASN1_TIME, d2i_ASN1_TYPE, d2i_ASN1_UINTEGER, d2i_ASN1_UNIVERSALSTRING, d2i_ASN1_UTCTIME, d2i_ASN1_UTF8STRING, d2i_ASN1_VISIBLESTRING, d2i_ASRange, d2i_AUTHORITY_INFO_ACCESS, d2i_AUTHORITY_KEYID, d2i_BASIC_CONSTRAINTS, d2i_CERTIFICATEPOLICIES, d2i_CMS_ContentInfo, d2i_CMS_ReceiptRequest, d2i_CMS_bio, d2i_CRL_DIST_POINTS, d2i_DHxparams, d2i_DIRECTORYSTRING, d2i_DISPLAYTEXT, d2i_DIST_POINT, d2i_DIST_POINT_NAME, d2i_DSAPrivateKey, d2i_DSAPrivateKey_bio, d2i_DSAPrivateKey_fp, d2i_DSAPublicKey, d2i_DSA_PUBKEY, d2i_DSA_PUBKEY_bio, d2i_DSA_PUBKEY_fp, d2i_DSA_SIG, d2i_DSAparams, d2i_ECDSA_SIG, d2i_ECPKParameters, d2i_ECParameters, d2i_ECPrivateKey, d2i_ECPrivateKey_bio, d2i_ECPrivateKey_fp, d2i_EC_PUBKEY, d2i_EC_PUBKEY_bio, d2i_EC_PUBKEY_fp, d2i_EDIPARTYNAME, d2i_ESS_CERT_ID, d2i_ESS_ISSUER_SERIAL, d2i_ESS_SIGNING_CERT, d2i_EXTENDED_KEY_USAGE, d2i_GENERAL_NAME, d2i_GENERAL_NAMES, d2i_IPAddressChoice, d2i_IPAddressFamily, d2i_IPAddressOrRange, d2i_IPAddressRange, d2i_ISSUING_DIST_POINT, d2i_NAMING_AUTHORITY, d2i_NETSCAPE_CERT_SEQUENCE, d2i_NETSCAPE_SPKAC, d2i_NETSCAPE_SPKI, d2i_NOTICEREF, d2i_OCSP_BASICRESP, d2i_OCSP_CERTID, d2i_OCSP_CERTSTATUS, d2i_OCSP_CRLID, d2i_OCSP_ONEREQ, d2i_OCSP_REQINFO, d2i_OCSP_REQUEST, d2i_OCSP_RESPBYTES, d2i_OCSP_RESPDATA, d2i_OCSP_RESPID, d2i_OCSP_RESPONSE, d2i_OCSP_REVOKEDINFO, d2i_OCSP_SERVICELOC, d2i_OCSP_SIGNATURE, d2i_OCSP_SINGLERESP, d2i_OTHERNAME, d2i_PBE2PARAM, d2i_PBEPARAM, d2i_PBKDF2PARAM, d2i_PKCS12, d2i_PKCS12_BAGS, d2i_PKCS12_MAC_DATA, d2i_PKCS12_SAFEBAG, d2i_PKCS12_bio, d2i_PKCS12_fp, d2i_PKCS7, d2i_PKCS7_DIGEST, d2i_PKCS7_ENCRYPT, d2i_PKCS7_ENC_CONTENT, d2i_PKCS7_ENVELOPE, d2i_PKCS7_ISSUER_AND_SERIAL, d2i_PKCS7_RECIP_INFO, d2i_PKCS7_SIGNED, d2i_PKCS7_SIGNER_INFO, d2i_PKCS7_SIGN_ENVELOPE, d2i_PKCS7_bio, d2i_PKCS7_fp, d2i_PKCS8_PRIV_KEY_INFO, d2i_PKCS8_PRIV_KEY_INFO_bio, d2i_PKCS8_PRIV_KEY_INFO_fp, d2i_PKCS8_bio, d2i_PKCS8_fp, d2i_PKEY_USAGE_PERIOD, d2i_POLICYINFO, d2i_POLICYQUALINFO, d2i_PROFESSION_INFO, d2i_PROXY_CERT_INFO_EXTENSION, d2i_PROXY_POLICY, d2i_RSAPrivateKey, d2i_RSAPrivateKey_bio, d2i_RSAPrivateKey_fp, d2i_RSAPublicKey, d2i_RSAPublicKey_bio, d2i_RSAPublicKey_fp, d2i_RSA_OAEP_PARAMS, d2i_RSA_PSS_PARAMS, d2i_RSA_PUBKEY, d2i_RSA_PUBKEY_bio, d2i_RSA_PUBKEY_fp, d2i_SCRYPT_PARAMS, d2i_SCT_LIST, d2i_SXNET, d2i_SXNETID, d2i_TS_ACCURACY, d2i_TS_MSG_IMPRINT, d2i_TS_MSG_IMPRINT_bio, d2i_TS_MSG_IMPRINT_fp, d2i_TS_REQ, d2i_TS_REQ_bio, d2i_TS_REQ_fp, d2i_TS_RESP, d2i_TS_RESP_bio, d2i_TS_RESP_fp, d2i_TS_STATUS_INFO, d2i_TS_TST_INFO, d2i_TS_TST_INFO_bio, d2i_TS_TST_INFO_fp, d2i_USERNOTICE, d2i_X509, d2i_X509_ALGOR, d2i_X509_ALGORS, d2i_X509_ATTRIBUTE, d2i_X509_CERT_AUX, d2i_X509_CINF, d2i_X509_CRL, d2i_X509_CRL_INFO, d2i_X509_CRL_bio, d2i_X509_CRL_fp, d2i_X509_EXTENSION, d2i_X509_EXTENSIONS, d2i_X509_NAME, d2i_X509_NAME_ENTRY, d2i_X509_PUBKEY, d2i_X509_REQ, d2i_X509_REQ_INFO, d2i_X509_REQ_bio, d2i_X509_REQ_fp, d2i_X509_REVOKED, d2i_X509_SIG, d2i_X509_VAL, i2d_ACCESS_DESCRIPTION, i2d_ADMISSIONS, i2d_ADMISSION_SYNTAX, i2d_ASIdOrRange, i2d_ASIdentifierChoice, i2d_ASIdentifiers, i2d_ASN1_BIT_STRING, i2d_ASN1_BMPSTRING, i2d_ASN1_ENUMERATED, i2d_ASN1_GENERALIZEDTIME, i2d_ASN1_GENERALSTRING, i2d_ASN1_IA5STRING, i2d_ASN1_INTEGER, i2d_ASN1_NULL, i2d_ASN1_OBJECT, i2d_ASN1_OCTET_STRING, i2d_ASN1_PRINTABLE, i2d_ASN1_PRINTABLESTRING, i2d_ASN1_SEQUENCE_ANY, i2d_ASN1_SET_ANY, i2d_ASN1_T61STRING, i2d_ASN1_TIME, i2d_ASN1_TYPE, i2d_ASN1_UNIVERSALSTRING, i2d_ASN1_UTCTIME, i2d_ASN1_UTF8STRING, i2d_ASN1_VISIBLESTRING, i2d_ASN1_bio_stream, i2d_ASRange, i2d_AUTHORITY_INFO_ACCESS, i2d_AUTHORITY_KEYID, i2d_BASIC_CONSTRAINTS, i2d_CERTIFICATEPOLICIES, i2d_CMS_ContentInfo, i2d_CMS_ReceiptRequest, i2d_CMS_bio, i2d_CRL_DIST_POINTS, i2d_DHxparams, i2d_DIRECTORYSTRING, i2d_DISPLAYTEXT, i2d_DIST_POINT, i2d_DIST_POINT_NAME, i2d_DSAPrivateKey, i2d_DSAPrivateKey_bio, i2d_DSAPrivateKey_fp, i2d_DSAPublicKey, i2d_DSA_PUBKEY, i2d_DSA_PUBKEY_bio, i2d_DSA_PUBKEY_fp, i2d_DSA_SIG, i2d_DSAparams, i2d_ECDSA_SIG, i2d_ECPKParameters, i2d_ECParameters, i2d_ECPrivateKey, i2d_ECPrivateKey_bio, i2d_ECPrivateKey_fp, i2d_EC_PUBKEY, i2d_EC_PUBKEY_bio, i2d_EC_PUBKEY_fp, i2d_EDIPARTYNAME, i2d_ESS_CERT_ID, i2d_ESS_ISSUER_SERIAL, i2d_ESS_SIGNING_CERT, i2d_EXTENDED_KEY_USAGE, i2d_GENERAL_NAME, i2d_GENERAL_NAMES, i2d_IPAddressChoice, i2d_IPAddressFamily, i2d_IPAddressOrRange, i2d_IPAddressRange, i2d_ISSUING_DIST_POINT, i2d_NAMING_AUTHORITY, i2d_NETSCAPE_CERT_SEQUENCE, i2d_NETSCAPE_SPKAC, i2d_NETSCAPE_SPKI, i2d_NOTICEREF, i2d_OCSP_BASICRESP, i2d_OCSP_CERTID, i2d_OCSP_CERTSTATUS, i2d_OCSP_CRLID, i2d_OCSP_ONEREQ, i2d_OCSP_REQINFO, i2d_OCSP_REQUEST, i2d_OCSP_RESPBYTES, i2d_OCSP_RESPDATA, i2d_OCSP_RESPID, i2d_OCSP_RESPONSE, i2d_OCSP_REVOKEDINFO, i2d_OCSP_SERVICELOC, i2d_OCSP_SIGNATURE, i2d_OCSP_SINGLERESP, i2d_OTHERNAME, i2d_PBE2PARAM, i2d_PBEPARAM, i2d_PBKDF2PARAM, i2d_PKCS12, i2d_PKCS12_BAGS, i2d_PKCS12_MAC_DATA, i2d_PKCS12_SAFEBAG, i2d_PKCS12_bio, i2d_PKCS12_fp, i2d_PKCS7, i2d_PKCS7_DIGEST, i2d_PKCS7_ENCRYPT, i2d_PKCS7_ENC_CONTENT, i2d_PKCS7_ENVELOPE, i2d_PKCS7_ISSUER_AND_SERIAL, i2d_PKCS7_NDEF, i2d_PKCS7_RECIP_INFO, i2d_PKCS7_SIGNED, i2d_PKCS7_SIGNER_INFO, i2d_PKCS7_SIGN_ENVELOPE, i2d_PKCS7_bio, i2d_PKCS7_fp, i2d_PKCS8PrivateKeyInfo_bio, i2d_PKCS8PrivateKeyInfo_fp, i2d_PKCS8_PRIV_KEY_INFO, i2d_PKCS8_PRIV_KEY_INFO_bio, i2d_PKCS8_PRIV_KEY_INFO_fp, i2d_PKCS8_bio, i2d_PKCS8_fp, i2d_PKEY_USAGE_PERIOD, i2d_POLICYINFO, i2d_POLICYQUALINFO, i2d_PROFESSION_INFO, i2d_PROXY_CERT_INFO_EXTENSION, i2d_PROXY_POLICY, i2d_RSAPrivateKey, i2d_RSAPrivateKey_bio, i2d_RSAPrivateKey_fp, i2d_RSAPublicKey, i2d_RSAPublicKey_bio, i2d_RSAPublicKey_fp, i2d_RSA_OAEP_PARAMS, i2d_RSA_PSS_PARAMS, i2d_RSA_PUBKEY, i2d_RSA_PUBKEY_bio, i2d_RSA_PUBKEY_fp, i2d_SCRYPT_PARAMS, i2d_SCT_LIST, i2d_SXNET, i2d_SXNETID, i2d_TS_ACCURACY, i2d_TS_MSG_IMPRINT, i2d_TS_MSG_IMPRINT_bio, i2d_TS_MSG_IMPRINT_fp, i2d_TS_REQ, i2d_TS_REQ_bio, i2d_TS_REQ_fp, i2d_TS_RESP, i2d_TS_RESP_bio, i2d_TS_RESP_fp, i2d_TS_STATUS_INFO, i2d_TS_TST_INFO, i2d_TS_TST_INFO_bio, i2d_TS_TST_INFO_fp, i2d_USERNOTICE, i2d_X509, i2d_X509_ALGOR, i2d_X509_ALGORS, i2d_X509_ATTRIBUTE, i2d_X509_CERT_AUX, i2d_X509_CINF, i2d_X509_CRL, i2d_X509_CRL_INFO, i2d_X509_CRL_bio, i2d_X509_CRL_fp, i2d_X509_EXTENSION, i2d_X509_EXTENSIONS, i2d_X509_NAME, i2d_X509_NAME_ENTRY, i2d_X509_PUBKEY, i2d_X509_REQ, i2d_X509_REQ_INFO, i2d_X509_REQ_bio, i2d_X509_REQ_fp, i2d_X509_REVOKED, i2d_X509_SIG, i2d_X509_VAL, \&\- convert objects from/to ASN.1/DER representation +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 3 +\& TYPE *d2i_TYPE(TYPE **a, unsigned char **ppin, long length); +\& TYPE *d2i_TYPE_bio(BIO *bp, TYPE **a); +\& TYPE *d2i_TYPE_fp(FILE *fp, TYPE **a); +\& +\& int i2d_TYPE(TYPE *a, unsigned char **ppout); +\& int i2d_TYPE_fp(FILE *fp, TYPE *a); +\& int i2d_TYPE_bio(BIO *bp, TYPE *a); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +In the description here, \fI\s-1TYPE\s0\fR is used a placeholder +for any of the OpenSSL datatypes, such as \fIX509_CRL\fR. +The function parameters \fIppin\fR and \fIppout\fR are generally +either both named \fIpp\fR in the headers, or \fIin\fR and \fIout\fR. +.PP +These functions convert OpenSSL objects to and from their \s-1ASN.1/DER\s0 +encoding. Unlike the C structures which can have pointers to sub-objects +within, the \s-1DER\s0 is a serialized encoding, suitable for sending over the +network, writing to a file, and so on. +.PP +\&\fBd2i_TYPE()\fR attempts to decode \fBlen\fR bytes at \fB*ppin\fR. If successful a +pointer to the \fB\s-1TYPE\s0\fR structure is returned and \fB*ppin\fR is incremented to +the byte following the parsed data. If \fBa\fR is not \fB\s-1NULL\s0\fR then a pointer +to the returned structure is also written to \fB*a\fR. If an error occurred +then \fB\s-1NULL\s0\fR is returned. +.PP +On a successful return, if \fB*a\fR is not \fB\s-1NULL\s0\fR then it is assumed that \fB*a\fR +contains a valid \fB\s-1TYPE\s0\fR structure and an attempt is made to reuse it. This +\&\*(L"reuse\*(R" capability is present for historical compatibility but its use is +\&\fBstrongly discouraged\fR (see \s-1BUGS\s0 below, and the discussion in the \s-1RETURN +VALUES\s0 section). +.PP +\&\fBd2i_TYPE_bio()\fR is similar to \fBd2i_TYPE()\fR except it attempts +to parse data from \s-1BIO\s0 \fBbp\fR. +.PP +\&\fBd2i_TYPE_fp()\fR is similar to \fBd2i_TYPE()\fR except it attempts +to parse data from \s-1FILE\s0 pointer \fBfp\fR. +.PP +\&\fBi2d_TYPE()\fR encodes the structure pointed to by \fBa\fR into \s-1DER\s0 format. +If \fBppout\fR is not \fB\s-1NULL\s0\fR, it writes the \s-1DER\s0 encoded data to the buffer +at \fB*ppout\fR, and increments it to point after the data just written. +If the return value is negative an error occurred, otherwise it +returns the length of the encoded data. +.PP +If \fB*ppout\fR is \fB\s-1NULL\s0\fR memory will be allocated for a buffer and the encoded +data written to it. In this case \fB*ppout\fR is not incremented and it points +to the start of the data just written. +.PP +\&\fBi2d_TYPE_bio()\fR is similar to \fBi2d_TYPE()\fR except it writes +the encoding of the structure \fBa\fR to \s-1BIO\s0 \fBbp\fR and it +returns 1 for success and 0 for failure. +.PP +\&\fBi2d_TYPE_fp()\fR is similar to \fBi2d_TYPE()\fR except it writes +the encoding of the structure \fBa\fR to \s-1BIO\s0 \fBbp\fR and it +returns 1 for success and 0 for failure. +.PP +These routines do not encrypt private keys and therefore offer no +security; use \fBPEM_write_PrivateKey\fR\|(3) or similar for writing to files. +.SH "NOTES" +.IX Header "NOTES" +The letters \fBi\fR and \fBd\fR in \fBi2d_TYPE\fR stand for +\&\*(L"internal\*(R" (that is, an internal C structure) and \*(L"\s-1DER\*(R"\s0 respectively. +So \fBi2d_TYPE\fR converts from internal to \s-1DER.\s0 +.PP +The functions can also understand \fB\s-1BER\s0\fR forms. +.PP +The actual \s-1TYPE\s0 structure passed to \fBi2d_TYPE()\fR must be a valid +populated \fB\s-1TYPE\s0\fR structure \*(-- it \fBcannot\fR simply be fed with an +empty structure such as that returned by \fBTYPE_new()\fR. +.PP +The encoded data is in binary form and may contain embedded zeroes. +Therefore any \s-1FILE\s0 pointers or BIOs should be opened in binary mode. +Functions such as \fBstrlen()\fR will \fBnot\fR return the correct length +of the encoded structure. +.PP +The ways that \fB*ppin\fR and \fB*ppout\fR are incremented after the operation +can trap the unwary. See the \fB\s-1WARNINGS\s0\fR section for some common +errors. +The reason for this-auto increment behaviour is to reflect a typical +usage of \s-1ASN1\s0 functions: after one structure is encoded or decoded +another will be processed after it. +.PP +The following points about the data types might be useful: +.IP "\fB\s-1ASN1_OBJECT\s0\fR" 4 +.IX Item "ASN1_OBJECT" +Represents an \s-1ASN1 OBJECT IDENTIFIER.\s0 +.IP "\fBDHparams\fR" 4 +.IX Item "DHparams" +Represents a PKCS#3 \s-1DH\s0 parameters structure. +.IP "\fBDHxparams\fR" 4 +.IX Item "DHxparams" +Represents an \s-1ANSI X9.42 DH\s0 parameters structure. +.IP "\fB\s-1DSA_PUBKEY\s0\fR" 4 +.IX Item "DSA_PUBKEY" +Represents a \s-1DSA\s0 public key using a \fBSubjectPublicKeyInfo\fR structure. +.IP "\fBDSAPublicKey, DSAPrivateKey\fR" 4 +.IX Item "DSAPublicKey, DSAPrivateKey" +Use a non-standard OpenSSL format and should be avoided; use \fB\s-1DSA_PUBKEY\s0\fR, +\&\fB\fBPEM_write_PrivateKey\fB\|(3)\fR, or similar instead. +.IP "\fB\s-1ECDSA_SIG\s0\fR" 4 +.IX Item "ECDSA_SIG" +Represents an \s-1ECDSA\s0 signature. +.IP "\fBRSAPublicKey\fR" 4 +.IX Item "RSAPublicKey" +Represents a PKCS#1 \s-1RSA\s0 public key structure. +.IP "\fBX509_ALGOR\fR" 4 +.IX Item "X509_ALGOR" +Represents an \fBAlgorithmIdentifier\fR structure as used in \s-1IETF RFC 6960\s0 and +elsewhere. +.IP "\fBX509_Name\fR" 4 +.IX Item "X509_Name" +Represents a \fBName\fR type as used for subject and issuer names in +\&\s-1IETF RFC 6960\s0 and elsewhere. +.IP "\fBX509_REQ\fR" 4 +.IX Item "X509_REQ" +Represents a PKCS#10 certificate request. +.IP "\fBX509_SIG\fR" 4 +.IX Item "X509_SIG" +Represents the \fBDigestInfo\fR structure defined in PKCS#1 and PKCS#7. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBd2i_TYPE()\fR, \fBd2i_TYPE_bio()\fR and \fBd2i_TYPE_fp()\fR return a valid \fB\s-1TYPE\s0\fR structure +or \fB\s-1NULL\s0\fR if an error occurs. If the \*(L"reuse\*(R" capability has been used with +a valid structure being passed in via \fBa\fR, then the object is freed in +the event of error and \fB*a\fR is set to \s-1NULL.\s0 +.PP +\&\fBi2d_TYPE()\fR returns the number of bytes successfully encoded or a negative +value if an error occurs. +.PP +\&\fBi2d_TYPE_bio()\fR and \fBi2d_TYPE_fp()\fR return 1 for success and 0 if an error +occurs. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +Allocate and encode the \s-1DER\s0 encoding of an X509 structure: +.PP +.Vb 2 +\& int len; +\& unsigned char *buf; +\& +\& buf = NULL; +\& len = i2d_X509(x, &buf); +\& if (len < 0) +\& /* error */ +.Ve +.PP +Attempt to decode a buffer: +.PP +.Vb 3 +\& X509 *x; +\& unsigned char *buf, *p; +\& int len; +\& +\& /* Set up buf and len to point to the input buffer. */ +\& p = buf; +\& x = d2i_X509(NULL, &p, len); +\& if (x == NULL) +\& /* error */ +.Ve +.PP +Alternative technique: +.PP +.Vb 3 +\& X509 *x; +\& unsigned char *buf, *p; +\& int len; +\& +\& /* Set up buf and len to point to the input buffer. */ +\& p = buf; +\& x = NULL; +\& +\& if (d2i_X509(&x, &p, len) == NULL) +\& /* error */ +.Ve +.SH "WARNINGS" +.IX Header "WARNINGS" +Using a temporary variable is mandatory. A common +mistake is to attempt to use a buffer directly as follows: +.PP +.Vb 2 +\& int len; +\& unsigned char *buf; +\& +\& len = i2d_X509(x, NULL); +\& buf = OPENSSL_malloc(len); +\& ... +\& i2d_X509(x, &buf); +\& ... +\& OPENSSL_free(buf); +.Ve +.PP +This code will result in \fBbuf\fR apparently containing garbage because +it was incremented after the call to point after the data just written. +Also \fBbuf\fR will no longer contain the pointer allocated by \fBOPENSSL_malloc()\fR +and the subsequent call to \fBOPENSSL_free()\fR is likely to crash. +.PP +Another trap to avoid is misuse of the \fBa\fR argument to \fBd2i_TYPE()\fR: +.PP +.Vb 1 +\& X509 *x; +\& +\& if (d2i_X509(&x, &p, len) == NULL) +\& /* error */ +.Ve +.PP +This will probably crash somewhere in \fBd2i_X509()\fR. The reason for this +is that the variable \fBx\fR is uninitialized and an attempt will be made to +interpret its (invalid) value as an \fBX509\fR structure, typically causing +a segmentation violation. If \fBx\fR is set to \s-1NULL\s0 first then this will not +happen. +.SH "BUGS" +.IX Header "BUGS" +In some versions of OpenSSL the \*(L"reuse\*(R" behaviour of \fBd2i_TYPE()\fR when +\&\fB*a\fR is valid is broken and some parts of the reused structure may +persist if they are not present in the new one. Additionally, in versions of +OpenSSL prior to 1.1.0, when the \*(L"reuse\*(R" behaviour is used and an error occurs +the behaviour is inconsistent. Some functions behaved as described here, while +some did not free \fB*a\fR on error and did not set \fB*a\fR to \s-1NULL.\s0 +.PP +As a result of the above issues the \*(L"reuse\*(R" behaviour is strongly discouraged. +.PP +\&\fBi2d_TYPE()\fR will not return an error in many versions of OpenSSL, +if mandatory fields are not initialized due to a programming error +then the encoded structure may contain invalid data or omit the +fields entirely and will not be parsed by \fBd2i_TYPE()\fR. This may be +fixed in future so code should not assume that \fBi2d_TYPE()\fR will +always succeed. +.PP +Any function which encodes a structure (\fBi2d_TYPE()\fR, +\&\fBi2d_TYPE()\fR or \fBi2d_TYPE()\fR) may return a stale encoding if the +structure has been modified after deserialization or previous +serialization. This is because some objects cache the encoding for +efficiency reasons. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 1998\-2020 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/i2d_CMS_bio_stream.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/i2d_CMS_bio_stream.3 new file mode 100644 index 00000000..e0451405 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/i2d_CMS_bio_stream.3 @@ -0,0 +1,182 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "I2D_CMS_BIO_STREAM 3" +.TH I2D_CMS_BIO_STREAM 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +i2d_CMS_bio_stream \- output CMS_ContentInfo structure in BER format +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int i2d_CMS_bio_stream(BIO *out, CMS_ContentInfo *cms, BIO *data, int flags); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBi2d_CMS_bio_stream()\fR outputs a CMS_ContentInfo structure in \s-1BER\s0 format. +.PP +It is otherwise identical to the function \fBSMIME_write_CMS()\fR. +.SH "NOTES" +.IX Header "NOTES" +This function is effectively a version of the \fBi2d_CMS_bio()\fR supporting +streaming. +.SH "BUGS" +.IX Header "BUGS" +The prefix \*(L"i2d\*(R" is arguably wrong because the function outputs \s-1BER\s0 format. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBi2d_CMS_bio_stream()\fR returns 1 for success or 0 for failure. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_get_error\fR\|(3), \fBCMS_sign\fR\|(3), +\&\fBCMS_verify\fR\|(3), \fBCMS_encrypt\fR\|(3) +\&\fBCMS_decrypt\fR\|(3), +\&\fBSMIME_write_CMS\fR\|(3), +\&\fBPEM_write_bio_CMS_stream\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +The \fBi2d_CMS_bio_stream()\fR function was added in OpenSSL 1.0.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2008\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/i2d_PKCS7_bio_stream.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/i2d_PKCS7_bio_stream.3 new file mode 100644 index 00000000..657ed5d7 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/i2d_PKCS7_bio_stream.3 @@ -0,0 +1,182 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "I2D_PKCS7_BIO_STREAM 3" +.TH I2D_PKCS7_BIO_STREAM 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +i2d_PKCS7_bio_stream \- output PKCS7 structure in BER format +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& int i2d_PKCS7_bio_stream(BIO *out, PKCS7 *p7, BIO *data, int flags); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBi2d_PKCS7_bio_stream()\fR outputs a \s-1PKCS7\s0 structure in \s-1BER\s0 format. +.PP +It is otherwise identical to the function \fBSMIME_write_PKCS7()\fR. +.SH "NOTES" +.IX Header "NOTES" +This function is effectively a version of the \fBd2i_PKCS7_bio()\fR supporting +streaming. +.SH "BUGS" +.IX Header "BUGS" +The prefix \*(L"i2d\*(R" is arguably wrong because the function outputs \s-1BER\s0 format. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBi2d_PKCS7_bio_stream()\fR returns 1 for success or 0 for failure. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_get_error\fR\|(3), \fBPKCS7_sign\fR\|(3), +\&\fBPKCS7_verify\fR\|(3), \fBPKCS7_encrypt\fR\|(3) +\&\fBPKCS7_decrypt\fR\|(3), +\&\fBSMIME_write_PKCS7\fR\|(3), +\&\fBPEM_write_bio_PKCS7_stream\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +The \fBi2d_PKCS7_bio_stream()\fR function was added in OpenSSL 1.0.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2008\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/i2d_re_X509_tbs.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/i2d_re_X509_tbs.3 new file mode 100644 index 00000000..e9cb58d3 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/i2d_re_X509_tbs.3 @@ -0,0 +1,218 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "I2D_RE_X509_TBS 3" +.TH I2D_RE_X509_TBS 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +d2i_X509_AUX, i2d_X509_AUX, i2d_re_X509_tbs, i2d_re_X509_CRL_tbs, i2d_re_X509_REQ_tbs \&\- X509 encode and decode functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& X509 *d2i_X509_AUX(X509 **px, const unsigned char **in, long len); +\& int i2d_X509_AUX(X509 *x, unsigned char **out); +\& int i2d_re_X509_tbs(X509 *x, unsigned char **out); +\& int i2d_re_X509_CRL_tbs(X509_CRL *crl, unsigned char **pp); +\& int i2d_re_X509_REQ_tbs(X509_REQ *req, unsigned char **pp); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The X509 encode and decode routines encode and parse an +\&\fBX509\fR structure, which represents an X509 certificate. +.PP +\&\fBd2i_X509_AUX()\fR is similar to \fBd2i_X509\fR\|(3) but the input is expected to +consist of an X509 certificate followed by auxiliary trust information. +This is used by the \s-1PEM\s0 routines to read \*(L"\s-1TRUSTED CERTIFICATE\*(R"\s0 objects. +This function should not be called on untrusted input. +.PP +\&\fBi2d_X509_AUX()\fR is similar to \fBi2d_X509\fR\|(3), but the encoded output +contains both the certificate and any auxiliary trust information. +This is used by the \s-1PEM\s0 routines to write \*(L"\s-1TRUSTED CERTIFICATE\*(R"\s0 objects. +Note that this is a non-standard OpenSSL-specific data format. +.PP +\&\fBi2d_re_X509_tbs()\fR is similar to \fBi2d_X509\fR\|(3) except it encodes only +the TBSCertificate portion of the certificate. \fBi2d_re_X509_CRL_tbs()\fR +and \fBi2d_re_X509_REQ_tbs()\fR are analogous for \s-1CRL\s0 and certificate request, +respectively. The \*(L"re\*(R" in \fBi2d_re_X509_tbs\fR stands for \*(L"re-encode\*(R", +and ensures that a fresh encoding is generated in case the object has been +modified after creation (see the \s-1BUGS\s0 section). +.PP +The encoding of the TBSCertificate portion of a certificate is cached +in the \fBX509\fR structure internally to improve encoding performance +and to ensure certificate signatures are verified correctly in some +certificates with broken (non-DER) encodings. +.PP +If, after modification, the \fBX509\fR object is re-signed with \fBX509_sign()\fR, +the encoding is automatically renewed. Otherwise, the encoding of the +TBSCertificate portion of the \fBX509\fR can be manually renewed by calling +\&\fBi2d_re_X509_tbs()\fR. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBd2i_X509_AUX()\fR returns a valid \fBX509\fR structure or \s-1NULL\s0 if an error occurred. +.PP +\&\fBi2d_X509_AUX()\fR returns the length of encoded data or \-1 on error. +.PP +\&\fBi2d_re_X509_tbs()\fR, \fBi2d_re_X509_CRL_tbs()\fR and \fBi2d_re_X509_REQ_tbs()\fR return the +length of encoded data or 0 on error. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBERR_get_error\fR\|(3) +\&\fBX509_CRL_get0_by_serial\fR\|(3), +\&\fBX509_get0_signature\fR\|(3), +\&\fBX509_get_ext_d2i\fR\|(3), +\&\fBX509_get_extension_flags\fR\|(3), +\&\fBX509_get_pubkey\fR\|(3), +\&\fBX509_get_subject_name\fR\|(3), +\&\fBX509_get_version\fR\|(3), +\&\fBX509_NAME_add_entry_by_txt\fR\|(3), +\&\fBX509_NAME_ENTRY_get_object\fR\|(3), +\&\fBX509_NAME_get_index_by_NID\fR\|(3), +\&\fBX509_NAME_print_ex\fR\|(3), +\&\fBX509_new\fR\|(3), +\&\fBX509_sign\fR\|(3), +\&\fBX509V3_get_d2i\fR\|(3), +\&\fBX509_verify_cert\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2002\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/o2i_SCT_LIST.3 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/o2i_SCT_LIST.3 new file mode 100644 index 00000000..b1120f9b --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man3/o2i_SCT_LIST.3 @@ -0,0 +1,179 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "O2I_SCT_LIST 3" +.TH O2I_SCT_LIST 3 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +o2i_SCT_LIST, i2o_SCT_LIST, o2i_SCT, i2o_SCT \- decode and encode Signed Certificate Timestamp lists in TLS wire format +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +\& +\& STACK_OF(SCT) *o2i_SCT_LIST(STACK_OF(SCT) **a, const unsigned char **pp, +\& size_t len); +\& int i2o_SCT_LIST(const STACK_OF(SCT) *a, unsigned char **pp); +\& SCT *o2i_SCT(SCT **psct, const unsigned char **in, size_t len); +\& int i2o_SCT(const SCT *sct, unsigned char **out); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \s-1SCT_LIST\s0 and \s-1SCT\s0 functions are very similar to the i2d and d2i family of +functions, except that they convert to and from \s-1TLS\s0 wire format, as described in +\&\s-1RFC 6962.\s0 See d2i_SCT_LIST for more information about how the parameters are +treated and the return values. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +All of the functions have return values consistent with those stated for +d2i_SCT_LIST and i2d_SCT_LIST. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBct\fR\|(7), +\&\fBd2i_SCT_LIST\fR\|(3), +\&\fBi2d_SCT_LIST\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +These functions were added in OpenSSL 1.1.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man5/config.5 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man5/config.5 new file mode 100644 index 00000000..f9664b73 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man5/config.5 @@ -0,0 +1,600 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "CONFIG 5" +.TH CONFIG 5 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +config \- OpenSSL CONF library configuration files +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The OpenSSL \s-1CONF\s0 library can be used to read configuration files. +It is used for the OpenSSL master configuration file \fBopenssl.cnf\fR +and in a few other places like \fB\s-1SPKAC\s0\fR files and certificate extension +files for the \fBx509\fR utility. OpenSSL applications can also use the +\&\s-1CONF\s0 library for their own purposes. +.PP +A configuration file is divided into a number of sections. Each section +starts with a line \fB[ section_name ]\fR and ends when a new section is +started or end of file is reached. A section name can consist of +alphanumeric characters and underscores. +.PP +The first section of a configuration file is special and is referred +to as the \fBdefault\fR section. This section is usually unnamed and spans from the +start of file until the first named section. When a name is being looked up +it is first looked up in a named section (if any) and then the +default section. +.PP +The environment is mapped onto a section called \fB\s-1ENV\s0\fR. +.PP +Comments can be included by preceding them with the \fB#\fR character +.PP +Other files can be included using the \fB.include\fR directive followed +by a path. If the path points to a directory all files with +names ending with \fB.cnf\fR or \fB.conf\fR are included from the directory. +Recursive inclusion of directories from files in such directory is not +supported. That means the files in the included directory can also contain +\&\fB.include\fR directives but only inclusion of regular files is supported +there. The inclusion of directories is not supported on systems without +\&\s-1POSIX IO\s0 support. +.PP +It is strongly recommended to use absolute paths with the \fB.include\fR +directive. Relative paths are evaluated based on the application current +working directory so unless the configuration file containing the +\&\fB.include\fR directive is application specific the inclusion will not +work as expected. +.PP +There can be optional \fB=\fR character and whitespace characters between +\&\fB.include\fR directive and the path which can be useful in cases the +configuration file needs to be loaded by old OpenSSL versions which do +not support the \fB.include\fR syntax. They would bail out with error +if the \fB=\fR character is not present but with it they just ignore +the include. +.PP +Each section in a configuration file consists of a number of name and +value pairs of the form \fBname=value\fR +.PP +The \fBname\fR string can contain any alphanumeric characters as well as +a few punctuation symbols such as \fB.\fR \fB,\fR \fB;\fR and \fB_\fR. +.PP +The \fBvalue\fR string consists of the string following the \fB=\fR character +until end of line with any leading and trailing white space removed. +.PP +The value string undergoes variable expansion. This can be done by +including the form \fB\f(CB$var\fB\fR or \fB${var}\fR: this will substitute the value +of the named variable in the current section. It is also possible to +substitute a value from another section using the syntax \fB\f(CB$section::name\fB\fR +or \fB${section::name}\fR. By using the form \fB\f(CB$ENV::name\fB\fR environment +variables can be substituted. It is also possible to assign values to +environment variables by using the name \fBENV::name\fR, this will work +if the program looks up environment variables using the \fB\s-1CONF\s0\fR library +instead of calling \fBgetenv()\fR directly. The value string must not exceed 64k in +length after variable expansion. Otherwise an error will occur. +.PP +It is possible to escape certain characters by using any kind of quote +or the \fB\e\fR character. By making the last character of a line a \fB\e\fR +a \fBvalue\fR string can be spread across multiple lines. In addition +the sequences \fB\en\fR, \fB\er\fR, \fB\eb\fR and \fB\et\fR are recognized. +.PP +All expansion and escape rules as described above that apply to \fBvalue\fR +also apply to the path of the \fB.include\fR directive. +.SH "OPENSSL LIBRARY CONFIGURATION" +.IX Header "OPENSSL LIBRARY CONFIGURATION" +Applications can automatically configure certain +aspects of OpenSSL using the master OpenSSL configuration file, or optionally +an alternative configuration file. The \fBopenssl\fR utility includes this +functionality: any sub command uses the master OpenSSL configuration file +unless an option is used in the sub command to use an alternative configuration +file. +.PP +To enable library configuration the default section needs to contain an +appropriate line which points to the main configuration section. The default +name is \fBopenssl_conf\fR which is used by the \fBopenssl\fR utility. Other +applications may use an alternative name such as \fBmyapplication_conf\fR. +All library configuration lines appear in the default section at the start +of the configuration file. +.PP +The configuration section should consist of a set of name value pairs which +contain specific module configuration information. The \fBname\fR represents +the name of the \fIconfiguration module\fR. The meaning of the \fBvalue\fR is +module specific: it may, for example, represent a further configuration +section containing configuration module specific information. E.g.: +.PP +.Vb 2 +\& # This must be in the default section +\& openssl_conf = openssl_init +\& +\& [openssl_init] +\& +\& oid_section = new_oids +\& engines = engine_section +\& +\& [new_oids] +\& +\& ... new oids here ... +\& +\& [engine_section] +\& +\& ... engine stuff here ... +.Ve +.PP +The features of each configuration module are described below. +.SS "\s-1ASN1\s0 Object Configuration Module" +.IX Subsection "ASN1 Object Configuration Module" +This module has the name \fBoid_section\fR. The value of this variable points +to a section containing name value pairs of OIDs: the name is the \s-1OID\s0 short +and long name, the value is the numerical form of the \s-1OID.\s0 Although some of +the \fBopenssl\fR utility sub commands already have their own \s-1ASN1 OBJECT\s0 section +functionality not all do. By using the \s-1ASN1 OBJECT\s0 configuration module +\&\fBall\fR the \fBopenssl\fR utility sub commands can see the new objects as well +as any compliant applications. For example: +.PP +.Vb 1 +\& [new_oids] +\& +\& some_new_oid = 1.2.3.4 +\& some_other_oid = 1.2.3.5 +.Ve +.PP +It is also possible to set the value to the long name followed +by a comma and the numerical \s-1OID\s0 form. For example: +.PP +.Vb 1 +\& shortName = some object long name, 1.2.3.4 +.Ve +.SS "Engine Configuration Module" +.IX Subsection "Engine Configuration Module" +This \s-1ENGINE\s0 configuration module has the name \fBengines\fR. The value of this +variable points to a section containing further \s-1ENGINE\s0 configuration +information. +.PP +The section pointed to by \fBengines\fR is a table of engine names (though see +\&\fBengine_id\fR below) and further sections containing configuration information +specific to each \s-1ENGINE.\s0 +.PP +Each \s-1ENGINE\s0 specific section is used to set default algorithms, load +dynamic, perform initialization and send ctrls. The actual operation performed +depends on the \fIcommand\fR name which is the name of the name value pair. The +currently supported commands are listed below. +.PP +For example: +.PP +.Vb 1 +\& [engine_section] +\& +\& # Configure ENGINE named "foo" +\& foo = foo_section +\& # Configure ENGINE named "bar" +\& bar = bar_section +\& +\& [foo_section] +\& ... foo ENGINE specific commands ... +\& +\& [bar_section] +\& ... "bar" ENGINE specific commands ... +.Ve +.PP +The command \fBengine_id\fR is used to give the \s-1ENGINE\s0 name. If used this +command must be first. For example: +.PP +.Vb 3 +\& [engine_section] +\& # This would normally handle an ENGINE named "foo" +\& foo = foo_section +\& +\& [foo_section] +\& # Override default name and use "myfoo" instead. +\& engine_id = myfoo +.Ve +.PP +The command \fBdynamic_path\fR loads and adds an \s-1ENGINE\s0 from the given path. It +is equivalent to sending the ctrls \fB\s-1SO_PATH\s0\fR with the path argument followed +by \fB\s-1LIST_ADD\s0\fR with value 2 and \fB\s-1LOAD\s0\fR to the dynamic \s-1ENGINE.\s0 If this is +not the required behaviour then alternative ctrls can be sent directly +to the dynamic \s-1ENGINE\s0 using ctrl commands. +.PP +The command \fBinit\fR determines whether to initialize the \s-1ENGINE.\s0 If the value +is \fB0\fR the \s-1ENGINE\s0 will not be initialized, if \fB1\fR and attempt it made to +initialized the \s-1ENGINE\s0 immediately. If the \fBinit\fR command is not present +then an attempt will be made to initialize the \s-1ENGINE\s0 after all commands in +its section have been processed. +.PP +The command \fBdefault_algorithms\fR sets the default algorithms an \s-1ENGINE\s0 will +supply using the functions \fBENGINE_set_default_string()\fR. +.PP +If the name matches none of the above command names it is assumed to be a +ctrl command which is sent to the \s-1ENGINE.\s0 The value of the command is the +argument to the ctrl command. If the value is the string \fB\s-1EMPTY\s0\fR then no +value is sent to the command. +.PP +For example: +.PP +.Vb 1 +\& [engine_section] +\& +\& # Configure ENGINE named "foo" +\& foo = foo_section +\& +\& [foo_section] +\& # Load engine from DSO +\& dynamic_path = /some/path/fooengine.so +\& # A foo specific ctrl. +\& some_ctrl = some_value +\& # Another ctrl that doesn\*(Aqt take a value. +\& other_ctrl = EMPTY +\& # Supply all default algorithms +\& default_algorithms = ALL +.Ve +.SS "\s-1EVP\s0 Configuration Module" +.IX Subsection "EVP Configuration Module" +This modules has the name \fBalg_section\fR which points to a section containing +algorithm commands. +.PP +Currently the only algorithm command supported is \fBfips_mode\fR whose +value can only be the boolean string \fBoff\fR. If \fBfips_mode\fR is set to \fBon\fR, +an error occurs as this library version is not \s-1FIPS\s0 capable. +.SS "\s-1SSL\s0 Configuration Module" +.IX Subsection "SSL Configuration Module" +This module has the name \fBssl_conf\fR which points to a section containing +\&\s-1SSL\s0 configurations. +.PP +Each line in the \s-1SSL\s0 configuration section contains the name of the +configuration and the section containing it. +.PP +Each configuration section consists of command value pairs for \fB\s-1SSL_CONF\s0\fR. +Each pair will be passed to a \fB\s-1SSL_CTX\s0\fR or \fB\s-1SSL\s0\fR structure if it calls +\&\fBSSL_CTX_config()\fR or \fBSSL_config()\fR with the appropriate configuration name. +.PP +Note: any characters before an initial dot in the configuration section are +ignored so the same command can be used multiple times. +.PP +For example: +.PP +.Vb 1 +\& ssl_conf = ssl_sect +\& +\& [ssl_sect] +\& +\& server = server_section +\& +\& [server_section] +\& +\& RSA.Certificate = server\-rsa.pem +\& ECDSA.Certificate = server\-ecdsa.pem +\& Ciphers = ALL:!RC4 +.Ve +.PP +The system default configuration with name \fBsystem_default\fR if present will +be applied during any creation of the \fB\s-1SSL_CTX\s0\fR structure. +.PP +Example of a configuration with the system default: +.PP +.Vb 1 +\& ssl_conf = ssl_sect +\& +\& [ssl_sect] +\& +\& system_default = system_default_sect +\& +\& [system_default_sect] +\& +\& MinProtocol = TLSv1.2 +.Ve +.SH "NOTES" +.IX Header "NOTES" +If a configuration file attempts to expand a variable that doesn't exist +then an error is flagged and the file will not load. This can happen +if an attempt is made to expand an environment variable that doesn't +exist. For example in a previous version of OpenSSL the default OpenSSL +master configuration file used the value of \fB\s-1HOME\s0\fR which may not be +defined on non Unix systems and would cause an error. +.PP +This can be worked around by including a \fBdefault\fR section to provide +a default value: then if the environment lookup fails the default value +will be used instead. For this to work properly the default value must +be defined earlier in the configuration file than the expansion. See +the \fB\s-1EXAMPLES\s0\fR section for an example of how to do this. +.PP +If the same variable exists in the same section then all but the last +value will be silently ignored. In certain circumstances such as with +DNs the same field may occur multiple times. This is usually worked +around by ignoring any characters before an initial \fB.\fR e.g. +.PP +.Vb 2 +\& 1.OU="My first OU" +\& 2.OU="My Second OU" +.Ve +.SH "EXAMPLES" +.IX Header "EXAMPLES" +Here is a sample configuration file using some of the features +mentioned above. +.PP +.Vb 1 +\& # This is the default section. +\& +\& HOME=/temp +\& RANDFILE= ${ENV::HOME}/.rnd +\& configdir=$ENV::HOME/config +\& +\& [ section_one ] +\& +\& # We are now in section one. +\& +\& # Quotes permit leading and trailing whitespace +\& any = " any variable name " +\& +\& other = A string that can \e +\& cover several lines \e +\& by including \e\e characters +\& +\& message = Hello World\en +\& +\& [ section_two ] +\& +\& greeting = $section_one::message +.Ve +.PP +This next example shows how to expand environment variables safely. +.PP +Suppose you want a variable called \fBtmpfile\fR to refer to a +temporary filename. The directory it is placed in can determined by +the \fB\s-1TEMP\s0\fR or \fB\s-1TMP\s0\fR environment variables but they may not be +set to any value at all. If you just include the environment variable +names and the variable doesn't exist then this will cause an error when +an attempt is made to load the configuration file. By making use of the +default section both values can be looked up with \fB\s-1TEMP\s0\fR taking +priority and \fB/tmp\fR used if neither is defined: +.PP +.Vb 5 +\& TMP=/tmp +\& # The above value is used if TMP isn\*(Aqt in the environment +\& TEMP=$ENV::TMP +\& # The above value is used if TEMP isn\*(Aqt in the environment +\& tmpfile=${ENV::TEMP}/tmp.filename +.Ve +.PP +Simple OpenSSL library configuration example to enter \s-1FIPS\s0 mode: +.PP +.Vb 3 +\& # Default appname: should match "appname" parameter (if any) +\& # supplied to CONF_modules_load_file et al. +\& openssl_conf = openssl_conf_section +\& +\& [openssl_conf_section] +\& # Configuration module list +\& alg_section = evp_sect +\& +\& [evp_sect] +\& # Set to "yes" to enter FIPS mode if supported +\& fips_mode = yes +.Ve +.PP +Note: in the above example you will get an error in non \s-1FIPS\s0 capable versions +of OpenSSL. +.PP +Simple OpenSSL library configuration to make \s-1TLS 1.3\s0 the system-default +minimum \s-1TLS\s0 version: +.PP +.Vb 2 +\& # Toplevel section for openssl (including libssl) +\& openssl_conf = default_conf_section +\& +\& [default_conf_section] +\& # We only specify configuration for the "ssl module" +\& ssl_conf = ssl_section +\& +\& [ssl_section] +\& system_default = system_default_section +\& +\& [system_default_section] +\& MinProtocol = TLSv1.3 +.Ve +.PP +More complex OpenSSL library configuration. Add \s-1OID\s0 and don't enter \s-1FIPS\s0 mode: +.PP +.Vb 3 +\& # Default appname: should match "appname" parameter (if any) +\& # supplied to CONF_modules_load_file et al. +\& openssl_conf = openssl_conf_section +\& +\& [openssl_conf_section] +\& # Configuration module list +\& alg_section = evp_sect +\& oid_section = new_oids +\& +\& [evp_sect] +\& # This will have no effect as FIPS mode is off by default. +\& # Set to "yes" to enter FIPS mode, if supported +\& fips_mode = no +\& +\& [new_oids] +\& # New OID, just short name +\& newoid1 = 1.2.3.4.1 +\& # New OID shortname and long name +\& newoid2 = New OID 2 long name, 1.2.3.4.2 +.Ve +.PP +The above examples can be used with any application supporting library +configuration if \*(L"openssl_conf\*(R" is modified to match the appropriate \*(L"appname\*(R". +.PP +For example if the second sample file above is saved to \*(L"example.cnf\*(R" then +the command line: +.PP +.Vb 1 +\& OPENSSL_CONF=example.cnf openssl asn1parse \-genstr OID:1.2.3.4.1 +.Ve +.PP +will output: +.PP +.Vb 1 +\& 0:d=0 hl=2 l= 4 prim: OBJECT :newoid1 +.Ve +.PP +showing that the \s-1OID\s0 \*(L"newoid1\*(R" has been added as \*(L"1.2.3.4.1\*(R". +.SH "ENVIRONMENT" +.IX Header "ENVIRONMENT" +.IP "\fB\s-1OPENSSL_CONF\s0\fR" 4 +.IX Item "OPENSSL_CONF" +The path to the config file. +Ignored in set-user-ID and set-group-ID programs. +.IP "\fB\s-1OPENSSL_ENGINES\s0\fR" 4 +.IX Item "OPENSSL_ENGINES" +The path to the engines directory. +Ignored in set-user-ID and set-group-ID programs. +.SH "BUGS" +.IX Header "BUGS" +Currently there is no way to include characters using the octal \fB\ennn\fR +form. Strings are all null terminated so nulls cannot form part of +the value. +.PP +The escaping isn't quite right: if you want to use sequences like \fB\en\fR +you can't use any quote escaping on the same line. +.PP +Files are loaded in a single pass. This means that an variable expansion +will only work if the variables referenced are defined earlier in the +file. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBx509\fR\|(1), \fBreq\fR\|(1), \fBca\fR\|(1) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2020 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man5/x509v3_config.5 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man5/x509v3_config.5 new file mode 100644 index 00000000..17df7432 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man5/x509v3_config.5 @@ -0,0 +1,704 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "X509V3_CONFIG 5" +.TH X509V3_CONFIG 5 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +x509v3_config \- X509 V3 certificate extension configuration format +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +Several of the OpenSSL utilities can add extensions to a certificate or +certificate request based on the contents of a configuration file. +.PP +Typically the application will contain an option to point to an extension +section. Each line of the extension section takes the form: +.PP +.Vb 1 +\& extension_name=[critical,] extension_options +.Ve +.PP +If \fBcritical\fR is present then the extension will be critical. +.PP +The format of \fBextension_options\fR depends on the value of \fBextension_name\fR. +.PP +There are four main types of extension: \fIstring\fR extensions, \fImulti-valued\fR +extensions, \fIraw\fR and \fIarbitrary\fR extensions. +.PP +String extensions simply have a string which contains either the value itself +or how it is obtained. +.PP +For example: +.PP +.Vb 1 +\& nsComment="This is a Comment" +.Ve +.PP +Multi-valued extensions have a short form and a long form. The short form +is a list of names and values: +.PP +.Vb 1 +\& basicConstraints=critical,CA:true,pathlen:1 +.Ve +.PP +The long form allows the values to be placed in a separate section: +.PP +.Vb 1 +\& basicConstraints=critical,@bs_section +\& +\& [bs_section] +\& +\& CA=true +\& pathlen=1 +.Ve +.PP +Both forms are equivalent. +.PP +The syntax of raw extensions is governed by the extension code: it can +for example contain data in multiple sections. The correct syntax to +use is defined by the extension code itself: check out the certificate +policies extension for an example. +.PP +If an extension type is unsupported then the \fIarbitrary\fR extension syntax +must be used, see the \s-1ARBITRARY EXTENSIONS\s0 section for more details. +.SH "STANDARD EXTENSIONS" +.IX Header "STANDARD EXTENSIONS" +The following sections describe each supported extension in detail. +.SS "Basic Constraints." +.IX Subsection "Basic Constraints." +This is a multi valued extension which indicates whether a certificate is +a \s-1CA\s0 certificate. The first (mandatory) name is \fB\s-1CA\s0\fR followed by \fB\s-1TRUE\s0\fR or +\&\fB\s-1FALSE\s0\fR. If \fB\s-1CA\s0\fR is \fB\s-1TRUE\s0\fR then an optional \fBpathlen\fR name followed by an +non-negative value can be included. +.PP +For example: +.PP +.Vb 1 +\& basicConstraints=CA:TRUE +\& +\& basicConstraints=CA:FALSE +\& +\& basicConstraints=critical,CA:TRUE, pathlen:0 +.Ve +.PP +A \s-1CA\s0 certificate \fBmust\fR include the basicConstraints value with the \s-1CA\s0 field +set to \s-1TRUE.\s0 An end user certificate must either set \s-1CA\s0 to \s-1FALSE\s0 or exclude the +extension entirely. Some software may require the inclusion of basicConstraints +with \s-1CA\s0 set to \s-1FALSE\s0 for end entity certificates. +.PP +The pathlen parameter indicates the maximum number of CAs that can appear +below this one in a chain. So if you have a \s-1CA\s0 with a pathlen of zero it can +only be used to sign end user certificates and not further CAs. +.SS "Key Usage." +.IX Subsection "Key Usage." +Key usage is a multi valued extension consisting of a list of names of the +permitted key usages. +.PP +The supported names are: digitalSignature, nonRepudiation, keyEncipherment, +dataEncipherment, keyAgreement, keyCertSign, cRLSign, encipherOnly +and decipherOnly. +.PP +Examples: +.PP +.Vb 1 +\& keyUsage=digitalSignature, nonRepudiation +\& +\& keyUsage=critical, keyCertSign +.Ve +.SS "Extended Key Usage." +.IX Subsection "Extended Key Usage." +This extensions consists of a list of usages indicating purposes for which +the certificate public key can be used for, +.PP +These can either be object short names or the dotted numerical form of OIDs. +While any \s-1OID\s0 can be used only certain values make sense. In particular the +following \s-1PKIX, NS\s0 and \s-1MS\s0 values are meaningful: +.PP +.Vb 10 +\& Value Meaning +\& \-\-\-\-\- \-\-\-\-\-\-\- +\& serverAuth SSL/TLS Web Server Authentication. +\& clientAuth SSL/TLS Web Client Authentication. +\& codeSigning Code signing. +\& emailProtection E\-mail Protection (S/MIME). +\& timeStamping Trusted Timestamping +\& OCSPSigning OCSP Signing +\& ipsecIKE ipsec Internet Key Exchange +\& msCodeInd Microsoft Individual Code Signing (authenticode) +\& msCodeCom Microsoft Commercial Code Signing (authenticode) +\& msCTLSign Microsoft Trust List Signing +\& msEFS Microsoft Encrypted File System +.Ve +.PP +Examples: +.PP +.Vb 2 +\& extendedKeyUsage=critical,codeSigning,1.2.3.4 +\& extendedKeyUsage=serverAuth,clientAuth +.Ve +.SS "Subject Key Identifier." +.IX Subsection "Subject Key Identifier." +This is really a string extension and can take two possible values. Either +the word \fBhash\fR which will automatically follow the guidelines in \s-1RFC3280\s0 +or a hex string giving the extension value to include. The use of the hex +string is strongly discouraged. +.PP +Example: +.PP +.Vb 1 +\& subjectKeyIdentifier=hash +.Ve +.SS "Authority Key Identifier." +.IX Subsection "Authority Key Identifier." +The authority key identifier extension permits two options. keyid and issuer: +both can take the optional value \*(L"always\*(R". +.PP +If the keyid option is present an attempt is made to copy the subject key +identifier from the parent certificate. If the value \*(L"always\*(R" is present +then an error is returned if the option fails. +.PP +The issuer option copies the issuer and serial number from the issuer +certificate. This will only be done if the keyid option fails or +is not included unless the \*(L"always\*(R" flag will always include the value. +.PP +Example: +.PP +.Vb 1 +\& authorityKeyIdentifier=keyid,issuer +.Ve +.SS "Subject Alternative Name." +.IX Subsection "Subject Alternative Name." +The subject alternative name extension allows various literal values to be +included in the configuration file. These include \fBemail\fR (an email address) +\&\fB\s-1URI\s0\fR a uniform resource indicator, \fB\s-1DNS\s0\fR (a \s-1DNS\s0 domain name), \fB\s-1RID\s0\fR (a +registered \s-1ID: OBJECT IDENTIFIER\s0), \fB\s-1IP\s0\fR (an \s-1IP\s0 address), \fBdirName\fR +(a distinguished name) and otherName. +.PP +The email option include a special 'copy' value. This will automatically +include any email addresses contained in the certificate subject name in +the extension. +.PP +The \s-1IP\s0 address used in the \fB\s-1IP\s0\fR options can be in either IPv4 or IPv6 format. +.PP +The value of \fBdirName\fR should point to a section containing the distinguished +name to use as a set of name value pairs. Multi values AVAs can be formed by +prefacing the name with a \fB+\fR character. +.PP +otherName can include arbitrary data associated with an \s-1OID:\s0 the value +should be the \s-1OID\s0 followed by a semicolon and the content in standard +\&\fBASN1_generate_nconf\fR\|(3) format. +.PP +Examples: +.PP +.Vb 5 +\& subjectAltName=email:copy,email:my@other.address,URI:http://my.url.here/ +\& subjectAltName=IP:192.168.7.1 +\& subjectAltName=IP:13::17 +\& subjectAltName=email:my@other.address,RID:1.2.3.4 +\& subjectAltName=otherName:1.2.3.4;UTF8:some other identifier +\& +\& subjectAltName=dirName:dir_sect +\& +\& [dir_sect] +\& C=UK +\& O=My Organization +\& OU=My Unit +\& CN=My Name +.Ve +.SS "Issuer Alternative Name." +.IX Subsection "Issuer Alternative Name." +The issuer alternative name option supports all the literal options of +subject alternative name. It does \fBnot\fR support the email:copy option because +that would not make sense. It does support an additional issuer:copy option +that will copy all the subject alternative name values from the issuer +certificate (if possible). +.PP +Example: +.PP +.Vb 1 +\& issuerAltName = issuer:copy +.Ve +.SS "Authority Info Access." +.IX Subsection "Authority Info Access." +The authority information access extension gives details about how to access +certain information relating to the \s-1CA.\s0 Its syntax is accessOID;location +where \fIlocation\fR has the same syntax as subject alternative name (except +that email:copy is not supported). accessOID can be any valid \s-1OID\s0 but only +certain values are meaningful, for example \s-1OCSP\s0 and caIssuers. +.PP +Example: +.PP +.Vb 2 +\& authorityInfoAccess = OCSP;URI:http://ocsp.my.host/ +\& authorityInfoAccess = caIssuers;URI:http://my.ca/ca.html +.Ve +.SS "\s-1CRL\s0 distribution points" +.IX Subsection "CRL distribution points" +This is a multi-valued extension whose options can be either in name:value pair +using the same form as subject alternative name or a single value representing +a section name containing all the distribution point fields. +.PP +For a name:value pair a new DistributionPoint with the fullName field set to +the given value both the cRLissuer and reasons fields are omitted in this case. +.PP +In the single option case the section indicated contains values for each +field. In this section: +.PP +If the name is \*(L"fullname\*(R" the value field should contain the full name +of the distribution point in the same format as subject alternative name. +.PP +If the name is \*(L"relativename\*(R" then the value field should contain a section +name whose contents represent a \s-1DN\s0 fragment to be placed in this field. +.PP +The name \*(L"CRLIssuer\*(R" if present should contain a value for this field in +subject alternative name format. +.PP +If the name is \*(L"reasons\*(R" the value field should consist of a comma +separated field containing the reasons. Valid reasons are: \*(L"keyCompromise\*(R", +\&\*(L"CACompromise\*(R", \*(L"affiliationChanged\*(R", \*(L"superseded\*(R", \*(L"cessationOfOperation\*(R", +\&\*(L"certificateHold\*(R", \*(L"privilegeWithdrawn\*(R" and \*(L"AACompromise\*(R". +.PP +Simple examples: +.PP +.Vb 2 +\& crlDistributionPoints=URI:http://myhost.com/myca.crl +\& crlDistributionPoints=URI:http://my.com/my.crl,URI:http://oth.com/my.crl +.Ve +.PP +Full distribution point example: +.PP +.Vb 1 +\& crlDistributionPoints=crldp1_section +\& +\& [crldp1_section] +\& +\& fullname=URI:http://myhost.com/myca.crl +\& CRLissuer=dirName:issuer_sect +\& reasons=keyCompromise, CACompromise +\& +\& [issuer_sect] +\& C=UK +\& O=Organisation +\& CN=Some Name +.Ve +.SS "Issuing Distribution Point" +.IX Subsection "Issuing Distribution Point" +This extension should only appear in CRLs. It is a multi valued extension +whose syntax is similar to the \*(L"section\*(R" pointed to by the \s-1CRL\s0 distribution +points extension with a few differences. +.PP +The names \*(L"reasons\*(R" and \*(L"CRLissuer\*(R" are not recognized. +.PP +The name \*(L"onlysomereasons\*(R" is accepted which sets this field. The value is +in the same format as the \s-1CRL\s0 distribution point \*(L"reasons\*(R" field. +.PP +The names \*(L"onlyuser\*(R", \*(L"onlyCA\*(R", \*(L"onlyAA\*(R" and \*(L"indirectCRL\*(R" are also accepted +the values should be a boolean value (\s-1TRUE\s0 or \s-1FALSE\s0) to indicate the value of +the corresponding field. +.PP +Example: +.PP +.Vb 1 +\& issuingDistributionPoint=critical, @idp_section +\& +\& [idp_section] +\& +\& fullname=URI:http://myhost.com/myca.crl +\& indirectCRL=TRUE +\& onlysomereasons=keyCompromise, CACompromise +\& +\& [issuer_sect] +\& C=UK +\& O=Organisation +\& CN=Some Name +.Ve +.SS "Certificate Policies." +.IX Subsection "Certificate Policies." +This is a \fIraw\fR extension. All the fields of this extension can be set by +using the appropriate syntax. +.PP +If you follow the \s-1PKIX\s0 recommendations and just using one \s-1OID\s0 then you just +include the value of that \s-1OID.\s0 Multiple OIDs can be set separated by commas, +for example: +.PP +.Vb 1 +\& certificatePolicies= 1.2.4.5, 1.1.3.4 +.Ve +.PP +If you wish to include qualifiers then the policy \s-1OID\s0 and qualifiers need to +be specified in a separate section: this is done by using the \f(CW@section\fR syntax +instead of a literal \s-1OID\s0 value. +.PP +The section referred to must include the policy \s-1OID\s0 using the name +policyIdentifier, cPSuri qualifiers can be included using the syntax: +.PP +.Vb 1 +\& CPS.nnn=value +.Ve +.PP +userNotice qualifiers can be set using the syntax: +.PP +.Vb 1 +\& userNotice.nnn=@notice +.Ve +.PP +The value of the userNotice qualifier is specified in the relevant section. +This section can include explicitText, organization and noticeNumbers +options. explicitText and organization are text strings, noticeNumbers is a +comma separated list of numbers. The organization and noticeNumbers options +(if included) must \s-1BOTH\s0 be present. If you use the userNotice option with \s-1IE5\s0 +then you need the 'ia5org' option at the top level to modify the encoding: +otherwise it will not be interpreted properly. +.PP +Example: +.PP +.Vb 1 +\& certificatePolicies=ia5org,1.2.3.4,1.5.6.7.8,@polsect +\& +\& [polsect] +\& +\& policyIdentifier = 1.3.5.8 +\& CPS.1="http://my.host.name/" +\& CPS.2="http://my.your.name/" +\& userNotice.1=@notice +\& +\& [notice] +\& +\& explicitText="Explicit Text Here" +\& organization="Organisation Name" +\& noticeNumbers=1,2,3,4 +.Ve +.PP +The \fBia5org\fR option changes the type of the \fIorganization\fR field. In \s-1RFC2459\s0 +it can only be of type DisplayText. In \s-1RFC3280\s0 IA5String is also permissible. +Some software (for example some versions of \s-1MSIE\s0) may require ia5org. +.PP +\&\s-1ASN1\s0 type of explicitText can be specified by prepending \fB\s-1UTF8\s0\fR, +\&\fB\s-1BMP\s0\fR or \fB\s-1VISIBLE\s0\fR prefix followed by colon. For example: +.PP +.Vb 2 +\& [notice] +\& explicitText="UTF8:Explicit Text Here" +.Ve +.SS "Policy Constraints" +.IX Subsection "Policy Constraints" +This is a multi-valued extension which consisting of the names +\&\fBrequireExplicitPolicy\fR or \fBinhibitPolicyMapping\fR and a non negative integer +value. At least one component must be present. +.PP +Example: +.PP +.Vb 1 +\& policyConstraints = requireExplicitPolicy:3 +.Ve +.SS "Inhibit Any Policy" +.IX Subsection "Inhibit Any Policy" +This is a string extension whose value must be a non negative integer. +.PP +Example: +.PP +.Vb 1 +\& inhibitAnyPolicy = 2 +.Ve +.SS "Name Constraints" +.IX Subsection "Name Constraints" +The name constraints extension is a multi-valued extension. The name should +begin with the word \fBpermitted\fR or \fBexcluded\fR followed by a \fB;\fR. The rest of +the name and the value follows the syntax of subjectAltName except email:copy +is not supported and the \fB\s-1IP\s0\fR form should consist of an \s-1IP\s0 addresses and +subnet mask separated by a \fB/\fR. +.PP +Examples: +.PP +.Vb 1 +\& nameConstraints=permitted;IP:192.168.0.0/255.255.0.0 +\& +\& nameConstraints=permitted;email:.somedomain.com +\& +\& nameConstraints=excluded;email:.com +.Ve +.SS "\s-1OCSP\s0 No Check" +.IX Subsection "OCSP No Check" +The \s-1OCSP\s0 No Check extension is a string extension but its value is ignored. +.PP +Example: +.PP +.Vb 1 +\& noCheck = ignored +.Ve +.SS "\s-1TLS\s0 Feature (aka Must Staple)" +.IX Subsection "TLS Feature (aka Must Staple)" +This is a multi-valued extension consisting of a list of \s-1TLS\s0 extension +identifiers. Each identifier may be a number (0..65535) or a supported name. +When a \s-1TLS\s0 client sends a listed extension, the \s-1TLS\s0 server is expected to +include that extension in its reply. +.PP +The supported names are: \fBstatus_request\fR and \fBstatus_request_v2\fR. +.PP +Example: +.PP +.Vb 1 +\& tlsfeature = status_request +.Ve +.SH "DEPRECATED EXTENSIONS" +.IX Header "DEPRECATED EXTENSIONS" +The following extensions are non standard, Netscape specific and largely +obsolete. Their use in new applications is discouraged. +.SS "Netscape String extensions." +.IX Subsection "Netscape String extensions." +Netscape Comment (\fBnsComment\fR) is a string extension containing a comment +which will be displayed when the certificate is viewed in some browsers. +.PP +Example: +.PP +.Vb 1 +\& nsComment = "Some Random Comment" +.Ve +.PP +Other supported extensions in this category are: \fBnsBaseUrl\fR, +\&\fBnsRevocationUrl\fR, \fBnsCaRevocationUrl\fR, \fBnsRenewalUrl\fR, \fBnsCaPolicyUrl\fR +and \fBnsSslServerName\fR. +.SS "Netscape Certificate Type" +.IX Subsection "Netscape Certificate Type" +This is a multi-valued extensions which consists of a list of flags to be +included. It was used to indicate the purposes for which a certificate could +be used. The basicConstraints, keyUsage and extended key usage extensions are +now used instead. +.PP +Acceptable values for nsCertType are: \fBclient\fR, \fBserver\fR, \fBemail\fR, +\&\fBobjsign\fR, \fBreserved\fR, \fBsslCA\fR, \fBemailCA\fR, \fBobjCA\fR. +.SH "ARBITRARY EXTENSIONS" +.IX Header "ARBITRARY EXTENSIONS" +If an extension is not supported by the OpenSSL code then it must be encoded +using the arbitrary extension format. It is also possible to use the arbitrary +format for supported extensions. Extreme care should be taken to ensure that +the data is formatted correctly for the given extension type. +.PP +There are two ways to encode arbitrary extensions. +.PP +The first way is to use the word \s-1ASN1\s0 followed by the extension content +using the same syntax as \fBASN1_generate_nconf\fR\|(3). +For example: +.PP +.Vb 1 +\& 1.2.3.4=critical,ASN1:UTF8String:Some random data +\& +\& 1.2.3.4=ASN1:SEQUENCE:seq_sect +\& +\& [seq_sect] +\& +\& field1 = UTF8:field1 +\& field2 = UTF8:field2 +.Ve +.PP +It is also possible to use the word \s-1DER\s0 to include the raw encoded data in any +extension. +.PP +.Vb 2 +\& 1.2.3.4=critical,DER:01:02:03:04 +\& 1.2.3.4=DER:01020304 +.Ve +.PP +The value following \s-1DER\s0 is a hex dump of the \s-1DER\s0 encoding of the extension +Any extension can be placed in this form to override the default behaviour. +For example: +.PP +.Vb 1 +\& basicConstraints=critical,DER:00:01:02:03 +.Ve +.SH "WARNINGS" +.IX Header "WARNINGS" +There is no guarantee that a specific implementation will process a given +extension. It may therefore be sometimes possible to use certificates for +purposes prohibited by their extensions because a specific application does +not recognize or honour the values of the relevant extensions. +.PP +The \s-1DER\s0 and \s-1ASN1\s0 options should be used with caution. It is possible to create +totally invalid extensions if they are not used carefully. +.SH "NOTES" +.IX Header "NOTES" +If an extension is multi-value and a field value must contain a comma the long +form must be used otherwise the comma would be misinterpreted as a field +separator. For example: +.PP +.Vb 1 +\& subjectAltName=URI:ldap://somehost.com/CN=foo,OU=bar +.Ve +.PP +will produce an error but the equivalent form: +.PP +.Vb 1 +\& subjectAltName=@subject_alt_section +\& +\& [subject_alt_section] +\& subjectAltName=URI:ldap://somehost.com/CN=foo,OU=bar +.Ve +.PP +is valid. +.PP +Due to the behaviour of the OpenSSL \fBconf\fR library the same field name +can only occur once in a section. This means that: +.PP +.Vb 1 +\& subjectAltName=@alt_section +\& +\& [alt_section] +\& +\& email=steve@here +\& email=steve@there +.Ve +.PP +will only recognize the last value. This can be worked around by using the form: +.PP +.Vb 1 +\& [alt_section] +\& +\& email.1=steve@here +\& email.2=steve@there +.Ve +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBreq\fR\|(1), \fBca\fR\|(1), \fBx509\fR\|(1), +\&\fBASN1_generate_nconf\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2004\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man7/Ed25519.7 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man7/Ed25519.7 new file mode 100644 index 00000000..d61e6831 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man7/Ed25519.7 @@ -0,0 +1,221 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "ED25519 7" +.TH ED25519 7 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +Ed25519, Ed448 \&\- EVP_PKEY Ed25519 and Ed448 support +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fBEd25519\fR and \fBEd448\fR \s-1EVP_PKEY\s0 implementation supports key generation, +one-shot digest sign and digest verify using PureEdDSA and \fBEd25519\fR or \fBEd448\fR +(see \s-1RFC8032\s0). It has associated private and public key formats compatible with +\&\s-1RFC 8410.\s0 +.PP +No additional parameters can be set during key generation, one-shot signing or +verification. In particular, because PureEdDSA is used, a digest must \fB\s-1NOT\s0\fR be +specified when signing or verifying. +.SH "NOTES" +.IX Header "NOTES" +The PureEdDSA algorithm does not support the streaming mechanism +of other signature algorithms using, for example, \fBEVP_DigestUpdate()\fR. +The message to sign or verify must be passed using the one-shot +\&\fBEVP_DigestSign()\fR and \fBEVP_DigestVerify()\fR functions. +.PP +When calling \fBEVP_DigestSignInit()\fR or \fBEVP_DigestVerifyInit()\fR, the +digest \fBtype\fR parameter \fB\s-1MUST\s0\fR be set to \fB\s-1NULL\s0\fR. +.PP +Applications wishing to sign certificates (or other structures such as +CRLs or certificate requests) using Ed25519 or Ed448 can either use \fBX509_sign()\fR +or \fBX509_sign_ctx()\fR in the usual way. +.PP +A context for the \fBEd25519\fR algorithm can be obtained by calling: +.PP +.Vb 1 +\& EVP_PKEY_CTX *pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_ED25519, NULL); +.Ve +.PP +For the \fBEd448\fR algorithm a context can be obtained by calling: +.PP +.Vb 1 +\& EVP_PKEY_CTX *pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_ED448, NULL); +.Ve +.PP +Ed25519 or Ed448 private keys can be set directly using +\&\fBEVP_PKEY_new_raw_private_key\fR\|(3) or loaded from a PKCS#8 private key file +using \fBPEM_read_bio_PrivateKey\fR\|(3) (or similar function). Completely new keys +can also be generated (see the example below). Setting a private key also sets +the associated public key. +.PP +Ed25519 or Ed448 public keys can be set directly using +\&\fBEVP_PKEY_new_raw_public_key\fR\|(3) or loaded from a SubjectPublicKeyInfo +structure in a \s-1PEM\s0 file using \fBPEM_read_bio_PUBKEY\fR\|(3) (or similar function). +.PP +Ed25519 and Ed448 can be tested within \fBspeed\fR\|(1) application since version 1.1.1. +Valid algorithm names are \fBed25519\fR, \fBed448\fR and \fBeddsa\fR. If \fBeddsa\fR is +specified, then both Ed25519 and Ed448 are benchmarked. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +This example generates an \fB\s-1ED25519\s0\fR private key and writes it to standard +output in \s-1PEM\s0 format: +.PP +.Vb 9 +\& #include +\& #include +\& ... +\& EVP_PKEY *pkey = NULL; +\& EVP_PKEY_CTX *pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_ED25519, NULL); +\& EVP_PKEY_keygen_init(pctx); +\& EVP_PKEY_keygen(pctx, &pkey); +\& EVP_PKEY_CTX_free(pctx); +\& PEM_write_PrivateKey(stdout, pkey, NULL, NULL, 0, NULL, NULL); +.Ve +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBEVP_PKEY_CTX_new\fR\|(3), +\&\fBEVP_PKEY_keygen\fR\|(3), +\&\fBEVP_DigestSignInit\fR\|(3), +\&\fBEVP_DigestVerifyInit\fR\|(3), +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017\-2020 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man7/RAND.7 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man7/RAND.7 new file mode 100644 index 00000000..5c82830a --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man7/RAND.7 @@ -0,0 +1,210 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "RAND 7" +.TH RAND 7 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +RAND \&\- the OpenSSL random generator +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +Random numbers are a vital part of cryptography, they are needed to provide +unpredictability for tasks like key generation, creating salts, and many more. +Software-based generators must be seeded with external randomness before they +can be used as a cryptographically-secure pseudo-random number generator +(\s-1CSPRNG\s0). +The availability of common hardware with special instructions and +modern operating systems, which may use items such as interrupt jitter +and network packet timings, can be reasonable sources of seeding material. +.PP +OpenSSL comes with a default implementation of the \s-1RAND API\s0 which is based on +the deterministic random bit generator (\s-1DRBG\s0) model as described in +[\s-1NIST SP 800\-90A\s0 Rev. 1]. The default random generator will initialize +automatically on first use and will be fully functional without having +to be initialized ('seeded') explicitly. +It seeds and reseeds itself automatically using trusted random sources +provided by the operating system. +.PP +As a normal application developer, you do not have to worry about any details, +just use \fBRAND_bytes\fR\|(3) to obtain random data. +Having said that, there is one important rule to obey: Always check the error +return value of \fBRAND_bytes\fR\|(3) and do not take randomness for granted. +Although (re\-)seeding is automatic, it can fail because no trusted random source +is available or the trusted source(s) temporarily fail to provide sufficient +random seed material. +In this case the \s-1CSPRNG\s0 enters an error state and ceases to provide output, +until it is able to recover from the error by reseeding itself. +For more details on reseeding and error recovery, see \s-1\fBRAND_DRBG\s0\fR\|(7). +.PP +For values that should remain secret, you can use \fBRAND_priv_bytes\fR\|(3) +instead. +This method does not provide 'better' randomness, it uses the same type of \s-1CSPRNG.\s0 +The intention behind using a dedicated \s-1CSPRNG\s0 exclusively for private +values is that none of its output should be visible to an attacker (e.g., +used as salt value), in order to reveal as little information as +possible about its internal state, and that a compromise of the \*(L"public\*(R" +\&\s-1CSPRNG\s0 instance will not affect the secrecy of these private values. +.PP +In the rare case where the default implementation does not satisfy your special +requirements, there are two options: +.IP "\(bu" 2 +Replace the default \s-1RAND\s0 method by your own \s-1RAND\s0 method using +\&\fBRAND_set_rand_method\fR\|(3). +.IP "\(bu" 2 +Modify the default settings of the OpenSSL \s-1RAND\s0 method by modifying the security +parameters of the underlying \s-1DRBG,\s0 which is described in detail in \s-1\fBRAND_DRBG\s0\fR\|(7). +.PP +Changing the default random generator or its default parameters should be necessary +only in exceptional cases and is not recommended, unless you have a profound knowledge +of cryptographic principles and understand the implications of your changes. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBRAND_add\fR\|(3), +\&\fBRAND_bytes\fR\|(3), +\&\fBRAND_priv_bytes\fR\|(3), +\&\fBRAND_get_rand_method\fR\|(3), +\&\fBRAND_set_rand_method\fR\|(3), +\&\fBRAND_OpenSSL\fR\|(3), +\&\s-1\fBRAND_DRBG\s0\fR\|(7) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2018\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man7/RAND_DRBG.7 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man7/RAND_DRBG.7 new file mode 100644 index 00000000..c87fe511 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man7/RAND_DRBG.7 @@ -0,0 +1,396 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "RAND_DRBG 7" +.TH RAND_DRBG 7 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +RAND_DRBG \- the deterministic random bit generator +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The default OpenSSL \s-1RAND\s0 method is based on the \s-1RAND_DRBG\s0 class, +which implements a deterministic random bit generator (\s-1DRBG\s0). +A \s-1DRBG\s0 is a certain type of cryptographically-secure pseudo-random +number generator (\s-1CSPRNG\s0), which is described in +[\s-1NIST SP 800\-90A\s0 Rev. 1]. +.PP +While the \s-1RAND API\s0 is the 'frontend' which is intended to be used by +application developers for obtaining random bytes, the \s-1RAND_DRBG API\s0 +serves as the 'backend', connecting the former with the operating +systems's entropy sources and providing access to the \s-1DRBG\s0's +configuration parameters. +.SS "Disclaimer" +.IX Subsection "Disclaimer" +Unless you have very specific requirements for your random generator, +it is in general not necessary to utilize the \s-1RAND_DRBG API\s0 directly. +The usual way to obtain random bytes is to use \fBRAND_bytes\fR\|(3) or +\&\fBRAND_priv_bytes\fR\|(3), see also \s-1\fBRAND\s0\fR\|(7). +.SS "Typical Use Cases" +.IX Subsection "Typical Use Cases" +Typical examples for such special use cases are the following: +.IP "\(bu" 2 +You want to use your own private \s-1DRBG\s0 instances. +Multiple \s-1DRBG\s0 instances which are accessed only by a single thread provide +additional security (because their internal states are independent) and +better scalability in multithreaded applications (because they don't need +to be locked). +.IP "\(bu" 2 +You need to integrate a previously unsupported entropy source. +.IP "\(bu" 2 +You need to change the default settings of the standard OpenSSL \s-1RAND\s0 +implementation to meet specific requirements. +.SH "CHAINING" +.IX Header "CHAINING" +A \s-1DRBG\s0 instance can be used as the entropy source of another \s-1DRBG\s0 instance, +provided it has itself access to a valid entropy source. +The \s-1DRBG\s0 instance which acts as entropy source is called the \fIparent\fR \s-1DRBG,\s0 +the other instance the \fIchild\fR \s-1DRBG.\s0 +.PP +This is called chaining. A chained \s-1DRBG\s0 instance is created by passing +a pointer to the parent \s-1DRBG\s0 as argument to the \fBRAND_DRBG_new()\fR call. +It is possible to create chains of more than two \s-1DRBG\s0 in a row. +.SH "THE THREE SHARED DRBG INSTANCES" +.IX Header "THE THREE SHARED DRBG INSTANCES" +Currently, there are three shared \s-1DRBG\s0 instances, +the , , and \s-1DRBG.\s0 +While the \s-1DRBG\s0 is a single global instance, the and +\&\s-1DRBG\s0 are created per thread and accessed through thread-local storage. +.PP +By default, the functions \fBRAND_bytes\fR\|(3) and \fBRAND_priv_bytes\fR\|(3) use +the thread-local and \s-1DRBG\s0 instance, respectively. +.SS "The \s-1DRBG\s0 instance" +.IX Subsection "The DRBG instance" +The \s-1DRBG\s0 is not used directly by the application, only for reseeding +the two other two \s-1DRBG\s0 instances. It reseeds itself by obtaining randomness +either from os entropy sources or by consuming randomness which was added +previously by \fBRAND_add\fR\|(3). +.SS "The \s-1DRBG\s0 instance" +.IX Subsection "The DRBG instance" +This instance is used per default by \fBRAND_bytes\fR\|(3). +.SS "The \s-1DRBG\s0 instance" +.IX Subsection "The DRBG instance" +This instance is used per default by \fBRAND_priv_bytes\fR\|(3) +.SH "LOCKING" +.IX Header "LOCKING" +The \s-1DRBG\s0 is intended to be accessed concurrently for reseeding +by its child \s-1DRBG\s0 instances. The necessary locking is done internally. +It is \fInot\fR thread-safe to access the \s-1DRBG\s0 directly via the +\&\s-1RAND_DRBG\s0 interface. +The and \s-1DRBG\s0 are thread-local, i.e. there is an +instance of each per thread. So they can safely be accessed without +locking via the \s-1RAND_DRBG\s0 interface. +.PP +Pointers to these \s-1DRBG\s0 instances can be obtained using +\&\fBRAND_DRBG_get0_master()\fR, +\&\fBRAND_DRBG_get0_public()\fR, and +\&\fBRAND_DRBG_get0_private()\fR, respectively. +Note that it is not allowed to store a pointer to one of the thread-local +\&\s-1DRBG\s0 instances in a variable or other memory location where it will be +accessed and used by multiple threads. +.PP +All other \s-1DRBG\s0 instances created by an application don't support locking, +because they are intended to be used by a single thread. +Instead of accessing a single \s-1DRBG\s0 instance concurrently from different +threads, it is recommended to instantiate a separate \s-1DRBG\s0 instance per +thread. Using the \s-1DRBG\s0 as entropy source for multiple \s-1DRBG\s0 +instances on different threads is thread-safe, because the \s-1DRBG\s0 instance +will lock the \s-1DRBG\s0 automatically for obtaining random input. +.SH "THE OVERALL PICTURE" +.IX Header "THE OVERALL PICTURE" +The following picture gives an overview over how the \s-1DRBG\s0 instances work +together and are being used. +.PP +.Vb 10 +\& +\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ +\& | os entropy sources | +\& +\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ +\& | +\& v +\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ +\& RAND_add() ==> <\-| shared DRBG (with locking) | +\& / \e +\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ +\& / \e +\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ +\& <\- | per\-thread DRBG instances | +\& | | +\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ +\& v v +\& RAND_bytes() RAND_priv_bytes() +\& | ^ +\& | | +\& +\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ +\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ +\& | general purpose | | used for secrets like session keys | +\& | random generator | | and private keys for certificates | +\& +\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ +\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ +.Ve +.PP +The usual way to obtain random bytes is to call RAND_bytes(...) or +RAND_priv_bytes(...). These calls are roughly equivalent to calling +RAND_DRBG_bytes(, ...) and RAND_DRBG_bytes(, ...), +respectively. The method \fBRAND_DRBG_bytes\fR\|(3) is a convenience method +wrapping the \fBRAND_DRBG_generate\fR\|(3) function, which serves the actual +request for random data. +.SH "RESEEDING" +.IX Header "RESEEDING" +A \s-1DRBG\s0 instance seeds itself automatically, pulling random input from +its entropy source. The entropy source can be either a trusted operating +system entropy source, or another \s-1DRBG\s0 with access to such a source. +.PP +Automatic reseeding occurs after a predefined number of generate requests. +The selection of the trusted entropy sources is configured at build +time using the \-\-with\-rand\-seed option. The following sections explain +the reseeding process in more detail. +.SS "Automatic Reseeding" +.IX Subsection "Automatic Reseeding" +Before satisfying a generate request (\fBRAND_DRBG_generate\fR\|(3)), the \s-1DRBG\s0 +reseeds itself automatically, if one of the following conditions holds: +.PP +\&\- the \s-1DRBG\s0 was not instantiated (=seeded) yet or has been uninstantiated. +.PP +\&\- the number of generate requests since the last reseeding exceeds a +certain threshold, the so called \fIreseed_interval\fR. +This behaviour can be disabled by setting the \fIreseed_interval\fR to 0. +.PP +\&\- the time elapsed since the last reseeding exceeds a certain time +interval, the so called \fIreseed_time_interval\fR. +This can be disabled by setting the \fIreseed_time_interval\fR to 0. +.PP +\&\- the \s-1DRBG\s0 is in an error state. +.PP +\&\fBNote\fR: An error state is entered if the entropy source fails while +the \s-1DRBG\s0 is seeding or reseeding. +The last case ensures that the \s-1DRBG\s0 automatically recovers +from the error as soon as the entropy source is available again. +.SS "Manual Reseeding" +.IX Subsection "Manual Reseeding" +In addition to automatic reseeding, the caller can request an immediate +reseeding of the \s-1DRBG\s0 with fresh entropy by setting the +\&\fIprediction resistance\fR parameter to 1 when calling \fBRAND_DRBG_generate\fR\|(3). +.PP +The document [\s-1NIST SP 800\-90C\s0] describes prediction resistance requests +in detail and imposes strict conditions on the entropy sources that are +approved for providing prediction resistance. +Since the default \s-1DRBG\s0 implementation does not have access to such an approved +entropy source, a request for prediction resistance will currently always fail. +In other words, prediction resistance is currently not supported yet by the \s-1DRBG.\s0 +.PP +For the three shared DRBGs (and only for these) there is another way to +reseed them manually: +If \fBRAND_add\fR\|(3) is called with a positive \fIrandomness\fR argument +(or \fBRAND_seed\fR\|(3)), then this will immediately reseed the \s-1DRBG.\s0 +The and \s-1DRBG\s0 will detect this on their next generate +call and reseed, pulling randomness from . +.PP +The last feature has been added to support the common practice used with +previous OpenSSL versions to call \fBRAND_add()\fR before calling \fBRAND_bytes()\fR. +.SS "Entropy Input vs. Additional Data" +.IX Subsection "Entropy Input vs. Additional Data" +The \s-1DRBG\s0 distinguishes two different types of random input: \fIentropy\fR, +which comes from a trusted source, and \fIadditional input\fR', +which can optionally be added by the user and is considered untrusted. +It is possible to add \fIadditional input\fR not only during reseeding, +but also for every generate request. +This is in fact done automatically by \fBRAND_DRBG_bytes\fR\|(3). +.SS "Configuring the Random Seed Source" +.IX Subsection "Configuring the Random Seed Source" +In most cases OpenSSL will automatically choose a suitable seed source +for automatically seeding and reseeding its \s-1DRBG.\s0 In some cases +however, it will be necessary to explicitly specify a seed source during +configuration, using the \-\-with\-rand\-seed option. For more information, +see the \s-1INSTALL\s0 instructions. There are also operating systems where no +seed source is available and automatic reseeding is disabled by default. +.PP +The following two sections describe the reseeding process of the master +\&\s-1DRBG,\s0 depending on whether automatic reseeding is available or not. +.SS "Reseeding the master \s-1DRBG\s0 with automatic seeding enabled" +.IX Subsection "Reseeding the master DRBG with automatic seeding enabled" +Calling \fBRAND_poll()\fR or \fBRAND_add()\fR is not necessary, because the \s-1DRBG\s0 +pulls the necessary entropy from its source automatically. +However, both calls are permitted, and do reseed the \s-1RNG.\s0 +.PP +\&\fBRAND_add()\fR can be used to add both kinds of random input, depending on the +value of the \fBrandomness\fR argument: +.IP "randomness == 0:" 4 +.IX Item "randomness == 0:" +The random bytes are mixed as additional input into the current state of +the \s-1DRBG.\s0 +Mixing in additional input is not considered a full reseeding, hence the +reseed counter is not reset. +.IP "randomness > 0:" 4 +.IX Item "randomness > 0:" +The random bytes are used as entropy input for a full reseeding +(resp. reinstantiation) if the \s-1DRBG\s0 is instantiated +(resp. uninstantiated or in an error state). +The number of random bits required for reseeding is determined by the +security strength of the \s-1DRBG.\s0 Currently it defaults to 256 bits (32 bytes). +It is possible to provide less randomness than required. +In this case the missing randomness will be obtained by pulling random input +from the trusted entropy sources. +.SS "Reseeding the master \s-1DRBG\s0 with automatic seeding disabled" +.IX Subsection "Reseeding the master DRBG with automatic seeding disabled" +Calling \fBRAND_poll()\fR will always fail. +.PP +\&\fBRAND_add()\fR needs to be called for initial seeding and periodic reseeding. +At least 48 bytes (384 bits) of randomness have to be provided, otherwise +the (re\-)seeding of the \s-1DRBG\s0 will fail. This corresponds to one and a half +times the security strength of the \s-1DRBG.\s0 The extra half is used for the +nonce during instantiation. +.PP +More precisely, the number of bytes needed for seeding depend on the +\&\fIsecurity strength\fR of the \s-1DRBG,\s0 which is set to 256 by default. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBRAND_DRBG_bytes\fR\|(3), +\&\fBRAND_DRBG_generate\fR\|(3), +\&\fBRAND_DRBG_reseed\fR\|(3), +\&\fBRAND_DRBG_get0_master\fR\|(3), +\&\fBRAND_DRBG_get0_public\fR\|(3), +\&\fBRAND_DRBG_get0_private\fR\|(3), +\&\fBRAND_DRBG_set_reseed_interval\fR\|(3), +\&\fBRAND_DRBG_set_reseed_time_interval\fR\|(3), +\&\fBRAND_DRBG_set_reseed_defaults\fR\|(3), +\&\s-1\fBRAND\s0\fR\|(7), +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man7/RSA-PSS.7 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man7/RSA-PSS.7 new file mode 100644 index 00000000..1b6ddf10 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man7/RSA-PSS.7 @@ -0,0 +1,189 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "RSA-PSS 7" +.TH RSA-PSS 7 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +RSA\-PSS \- EVP_PKEY RSA\-PSS algorithm support +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fBRSA-PSS\fR \s-1EVP_PKEY\s0 implementation is a restricted version of the \s-1RSA\s0 +algorithm which only supports signing, verification and key generation +using \s-1PSS\s0 padding modes with optional parameter restrictions. +.PP +It has associated private key and public key formats. +.PP +This algorithm shares several control operations with the \fB\s-1RSA\s0\fR algorithm +but with some restrictions described below. +.SS "Signing and Verification" +.IX Subsection "Signing and Verification" +Signing and verification is similar to the \fB\s-1RSA\s0\fR algorithm except the +padding mode is always \s-1PSS.\s0 If the key in use has parameter restrictions then +the corresponding signature parameters are set to the restrictions: +for example, if the key can only be used with digest \s-1SHA256, MGF1 SHA256\s0 +and minimum salt length 32 then the digest, \s-1MGF1\s0 digest and salt length +will be set to \s-1SHA256, SHA256\s0 and 32 respectively. +.SS "Key Generation" +.IX Subsection "Key Generation" +By default no parameter restrictions are placed on the generated key. +.SH "NOTES" +.IX Header "NOTES" +The public key format is documented in \s-1RFC4055.\s0 +.PP +The PKCS#8 private key format used for RSA-PSS keys is similar to the \s-1RSA\s0 +format except it uses the \fBid-RSASSA-PSS\fR \s-1OID\s0 and the parameters field, if +present, restricts the key parameters in the same way as the public key. +.SH "CONFORMING TO" +.IX Header "CONFORMING TO" +\&\s-1RFC 4055\s0 +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBEVP_PKEY_CTX_set_rsa_pss_keygen_md\fR\|(3), +\&\fBEVP_PKEY_CTX_set_rsa_pss_keygen_mgf1_md\fR\|(3), +\&\fBEVP_PKEY_CTX_set_rsa_pss_keygen_saltlen\fR\|(3), +\&\fBEVP_PKEY_CTX_new\fR\|(3), +\&\fBEVP_PKEY_CTX_ctrl_str\fR\|(3), +\&\fBEVP_PKEY_derive\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man7/SM2.7 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man7/SM2.7 new file mode 100644 index 00000000..66122c0a --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man7/SM2.7 @@ -0,0 +1,217 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SM2 7" +.TH SM2 7 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +SM2 \- Chinese SM2 signature and encryption algorithm support +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fB\s-1SM2\s0\fR algorithm was first defined by the Chinese national standard \s-1GM/T +0003\-2012\s0 and was later standardized by \s-1ISO\s0 as \s-1ISO/IEC 14888.\s0 \fB\s-1SM2\s0\fR is actually +an elliptic curve based algorithm. The current implementation in OpenSSL supports +both signature and encryption schemes via the \s-1EVP\s0 interface. +.PP +When doing the \fB\s-1SM2\s0\fR signature algorithm, it requires a distinguishing identifier +to form the message prefix which is hashed before the real message is hashed. +.SH "NOTES" +.IX Header "NOTES" +\&\fB\s-1SM2\s0\fR signatures can be generated by using the 'DigestSign' series of APIs, for +instance, \fBEVP_DigestSignInit()\fR, \fBEVP_DigestSignUpdate()\fR and \fBEVP_DigestSignFinal()\fR. +Ditto for the verification process by calling the 'DigestVerify' series of APIs. +.PP +There are several special steps that need to be done before computing an \fB\s-1SM2\s0\fR +signature. +.PP +The \fB\s-1EVP_PKEY\s0\fR structure will default to using \s-1ECDSA\s0 for signatures when it is +created. It should be set to \fB\s-1EVP_PKEY_SM2\s0\fR by calling: +.PP +.Vb 1 +\& EVP_PKEY_set_alias_type(pkey, EVP_PKEY_SM2); +.Ve +.PP +Then an \s-1ID\s0 should be set by calling: +.PP +.Vb 1 +\& EVP_PKEY_CTX_set1_id(pctx, id, id_len); +.Ve +.PP +When calling the \fBEVP_DigestSignInit()\fR or \fBEVP_DigestVerifyInit()\fR functions, a +pre-allocated \fB\s-1EVP_PKEY_CTX\s0\fR should be assigned to the \fB\s-1EVP_MD_CTX\s0\fR. This is +done by calling: +.PP +.Vb 1 +\& EVP_MD_CTX_set_pkey_ctx(mctx, pctx); +.Ve +.PP +And normally there is no need to pass a \fBpctx\fR parameter to \fBEVP_DigestSignInit()\fR +or \fBEVP_DigestVerifyInit()\fR in such a scenario. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +This example demonstrates the calling sequence for using an \fB\s-1EVP_PKEY\s0\fR to verify +a message with the \s-1SM2\s0 signature algorithm and the \s-1SM3\s0 hash algorithm: +.PP +.Vb 1 +\& #include +\& +\& /* obtain an EVP_PKEY using whatever methods... */ +\& EVP_PKEY_set_alias_type(pkey, EVP_PKEY_SM2); +\& mctx = EVP_MD_CTX_new(); +\& pctx = EVP_PKEY_CTX_new(pkey, NULL); +\& EVP_PKEY_CTX_set1_id(pctx, id, id_len); +\& EVP_MD_CTX_set_pkey_ctx(mctx, pctx);; +\& EVP_DigestVerifyInit(mctx, NULL, EVP_sm3(), NULL, pkey); +\& EVP_DigestVerifyUpdate(mctx, msg, msg_len); +\& EVP_DigestVerifyFinal(mctx, sig, sig_len) +.Ve +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBEVP_PKEY_CTX_new\fR\|(3), +\&\fBEVP_PKEY_set_alias_type\fR\|(3), +\&\fBEVP_DigestSignInit\fR\|(3), +\&\fBEVP_DigestVerifyInit\fR\|(3), +\&\fBEVP_PKEY_CTX_set1_id\fR\|(3), +\&\fBEVP_MD_CTX_set_pkey_ctx\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2018\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man7/X25519.7 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man7/X25519.7 new file mode 100644 index 00000000..d3802985 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man7/X25519.7 @@ -0,0 +1,208 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "X25519 7" +.TH X25519 7 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +X25519, X448 \&\- EVP_PKEY X25519 and X448 support +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \fBX25519\fR and \fBX448\fR \s-1EVP_PKEY\s0 implementation supports key generation and +key derivation using \fBX25519\fR and \fBX448\fR. It has associated private and public +key formats compatible with \s-1RFC 8410.\s0 +.PP +No additional parameters can be set during key generation. +.PP +The peer public key must be set using \fBEVP_PKEY_derive_set_peer()\fR when +performing key derivation. +.SH "NOTES" +.IX Header "NOTES" +A context for the \fBX25519\fR algorithm can be obtained by calling: +.PP +.Vb 1 +\& EVP_PKEY_CTX *pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_X25519, NULL); +.Ve +.PP +For the \fBX448\fR algorithm a context can be obtained by calling: +.PP +.Vb 1 +\& EVP_PKEY_CTX *pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_X448, NULL); +.Ve +.PP +X25519 or X448 private keys can be set directly using +\&\fBEVP_PKEY_new_raw_private_key\fR\|(3) or loaded from a PKCS#8 private key file +using \fBPEM_read_bio_PrivateKey\fR\|(3) (or similar function). Completely new keys +can also be generated (see the example below). Setting a private key also sets +the associated public key. +.PP +X25519 or X448 public keys can be set directly using +\&\fBEVP_PKEY_new_raw_public_key\fR\|(3) or loaded from a SubjectPublicKeyInfo +structure in a \s-1PEM\s0 file using \fBPEM_read_bio_PUBKEY\fR\|(3) (or similar function). +.SH "EXAMPLES" +.IX Header "EXAMPLES" +This example generates an \fBX25519\fR private key and writes it to standard +output in \s-1PEM\s0 format: +.PP +.Vb 9 +\& #include +\& #include +\& ... +\& EVP_PKEY *pkey = NULL; +\& EVP_PKEY_CTX *pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_X25519, NULL); +\& EVP_PKEY_keygen_init(pctx); +\& EVP_PKEY_keygen(pctx, &pkey); +\& EVP_PKEY_CTX_free(pctx); +\& PEM_write_PrivateKey(stdout, pkey, NULL, NULL, 0, NULL, NULL); +.Ve +.PP +The key derivation example in \fBEVP_PKEY_derive\fR\|(3) can be used with +\&\fBX25519\fR and \fBX448\fR. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBEVP_PKEY_CTX_new\fR\|(3), +\&\fBEVP_PKEY_keygen\fR\|(3), +\&\fBEVP_PKEY_derive\fR\|(3), +\&\fBEVP_PKEY_derive_set_peer\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017\-2020 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man7/bio.7 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man7/bio.7 new file mode 100644 index 00000000..02d835cb --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man7/bio.7 @@ -0,0 +1,217 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "BIO 7" +.TH BIO 7 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +bio \- Basic I/O abstraction +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +A \s-1BIO\s0 is an I/O abstraction, it hides many of the underlying I/O +details from an application. If an application uses a \s-1BIO\s0 for its +I/O it can transparently handle \s-1SSL\s0 connections, unencrypted network +connections and file I/O. +.PP +There are two type of \s-1BIO,\s0 a source/sink \s-1BIO\s0 and a filter \s-1BIO.\s0 +.PP +As its name implies a source/sink \s-1BIO\s0 is a source and/or sink of data, +examples include a socket \s-1BIO\s0 and a file \s-1BIO.\s0 +.PP +A filter \s-1BIO\s0 takes data from one \s-1BIO\s0 and passes it through to +another, or the application. The data may be left unmodified (for +example a message digest \s-1BIO\s0) or translated (for example an +encryption \s-1BIO\s0). The effect of a filter \s-1BIO\s0 may change according +to the I/O operation it is performing: for example an encryption +\&\s-1BIO\s0 will encrypt data if it is being written to and decrypt data +if it is being read from. +.PP +BIOs can be joined together to form a chain (a single \s-1BIO\s0 is a chain +with one component). A chain normally consist of one source/sink +\&\s-1BIO\s0 and one or more filter BIOs. Data read from or written to the +first \s-1BIO\s0 then traverses the chain to the end (normally a source/sink +\&\s-1BIO\s0). +.PP +Some BIOs (such as memory BIOs) can be used immediately after calling +\&\fBBIO_new()\fR. Others (such as file BIOs) need some additional initialization, +and frequently a utility function exists to create and initialize such BIOs. +.PP +If \fBBIO_free()\fR is called on a \s-1BIO\s0 chain it will only free one \s-1BIO\s0 resulting +in a memory leak. +.PP +Calling \fBBIO_free_all()\fR on a single \s-1BIO\s0 has the same effect as calling +\&\fBBIO_free()\fR on it other than the discarded return value. +.PP +Normally the \fBtype\fR argument is supplied by a function which returns a +pointer to a \s-1BIO_METHOD.\s0 There is a naming convention for such functions: +a source/sink \s-1BIO\s0 is normally called BIO_s_*() and a filter \s-1BIO\s0 +BIO_f_*(); +.SH "EXAMPLES" +.IX Header "EXAMPLES" +Create a memory \s-1BIO:\s0 +.PP +.Vb 1 +\& BIO *mem = BIO_new(BIO_s_mem()); +.Ve +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBBIO_ctrl\fR\|(3), +\&\fBBIO_f_base64\fR\|(3), \fBBIO_f_buffer\fR\|(3), +\&\fBBIO_f_cipher\fR\|(3), \fBBIO_f_md\fR\|(3), +\&\fBBIO_f_null\fR\|(3), \fBBIO_f_ssl\fR\|(3), +\&\fBBIO_find_type\fR\|(3), \fBBIO_new\fR\|(3), +\&\fBBIO_new_bio_pair\fR\|(3), +\&\fBBIO_push\fR\|(3), \fBBIO_read_ex\fR\|(3), +\&\fBBIO_s_accept\fR\|(3), \fBBIO_s_bio\fR\|(3), +\&\fBBIO_s_connect\fR\|(3), \fBBIO_s_fd\fR\|(3), +\&\fBBIO_s_file\fR\|(3), \fBBIO_s_mem\fR\|(3), +\&\fBBIO_s_null\fR\|(3), \fBBIO_s_socket\fR\|(3), +\&\fBBIO_set_callback\fR\|(3), +\&\fBBIO_should_retry\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man7/crypto.7 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man7/crypto.7 new file mode 100644 index 00000000..be52881c --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man7/crypto.7 @@ -0,0 +1,191 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "CRYPTO 7" +.TH CRYPTO 7 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +crypto \- OpenSSL cryptographic library +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +See the individual manual pages for details. +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The OpenSSL \fBcrypto\fR library implements a wide range of cryptographic +algorithms used in various Internet standards. The services provided +by this library are used by the OpenSSL implementations of \s-1SSL, TLS\s0 +and S/MIME, and they have also been used to implement \s-1SSH,\s0 OpenPGP, and +other cryptographic standards. +.PP +\&\fBlibcrypto\fR consists of a number of sub-libraries that implement the +individual algorithms. +.PP +The functionality includes symmetric encryption, public key +cryptography and key agreement, certificate handling, cryptographic +hash functions, cryptographic pseudo-random number generator, and +various utilities. +.SH "NOTES" +.IX Header "NOTES" +Some of the newer functions follow a naming convention using the numbers +\&\fB0\fR and \fB1\fR. For example the functions: +.PP +.Vb 2 +\& int X509_CRL_add0_revoked(X509_CRL *crl, X509_REVOKED *rev); +\& int X509_add1_trust_object(X509 *x, const ASN1_OBJECT *obj); +.Ve +.PP +The \fB0\fR version uses the supplied structure pointer directly +in the parent and it will be freed up when the parent is freed. +In the above example \fBcrl\fR would be freed but \fBrev\fR would not. +.PP +The \fB1\fR function uses a copy of the supplied structure pointer +(or in some cases increases its link count) in the parent and +so both (\fBx\fR and \fBobj\fR above) should be freed up. +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +See the individual manual pages for details. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBopenssl\fR\|(1), \fBssl\fR\|(7) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2016 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man7/ct.7 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man7/ct.7 new file mode 100644 index 00000000..173906df --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man7/ct.7 @@ -0,0 +1,185 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "CT 7" +.TH CT 7 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +ct \- Certificate Transparency +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +This library implements Certificate Transparency (\s-1CT\s0) verification for \s-1TLS\s0 +clients, as defined in \s-1RFC 6962.\s0 This verification can provide some confidence +that a certificate has been publicly logged in a set of \s-1CT\s0 logs. +.PP +By default, these checks are disabled. They can be enabled using +\&\fBSSL_CTX_enable_ct\fR\|(3) or \fBSSL_enable_ct\fR\|(3). +.PP +This library can also be used to parse and examine \s-1CT\s0 data structures, such as +Signed Certificate Timestamps (SCTs), or to read a list of \s-1CT\s0 logs. There are +functions for: +\&\- decoding and encoding SCTs in \s-1DER\s0 and \s-1TLS\s0 wire format. +\&\- printing SCTs. +\&\- verifying the authenticity of SCTs. +\&\- loading a \s-1CT\s0 log list from a \s-1CONF\s0 file. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBd2i_SCT_LIST\fR\|(3), +\&\fBCTLOG_STORE_new\fR\|(3), +\&\fBCTLOG_STORE_get0_log_by_id\fR\|(3), +\&\fBSCT_new\fR\|(3), +\&\fBSCT_print\fR\|(3), +\&\fBSCT_validate\fR\|(3), +\&\fBSCT_validate\fR\|(3), +\&\fBCT_POLICY_EVAL_CTX_new\fR\|(3), +\&\fBSSL_CTX_set_ct_validation_callback\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +The ct library was added in OpenSSL 1.1.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2016\-2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man7/des_modes.7 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man7/des_modes.7 new file mode 100644 index 00000000..3fd9a7c2 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man7/des_modes.7 @@ -0,0 +1,295 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "DES_MODES 7" +.TH DES_MODES 7 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +des_modes \- the variants of DES and other crypto algorithms of OpenSSL +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +Several crypto algorithms for OpenSSL can be used in a number of modes. Those +are used for using block ciphers in a way similar to stream ciphers, among +other things. +.SH "OVERVIEW" +.IX Header "OVERVIEW" +.SS "Electronic Codebook Mode (\s-1ECB\s0)" +.IX Subsection "Electronic Codebook Mode (ECB)" +Normally, this is found as the function \fIalgorithm\fR\fB_ecb_encrypt()\fR. +.IP "\(bu" 2 +64 bits are enciphered at a time. +.IP "\(bu" 2 +The order of the blocks can be rearranged without detection. +.IP "\(bu" 2 +The same plaintext block always produces the same ciphertext block +(for the same key) making it vulnerable to a 'dictionary attack'. +.IP "\(bu" 2 +An error will only affect one ciphertext block. +.SS "Cipher Block Chaining Mode (\s-1CBC\s0)" +.IX Subsection "Cipher Block Chaining Mode (CBC)" +Normally, this is found as the function \fIalgorithm\fR\fB_cbc_encrypt()\fR. +Be aware that \fBdes_cbc_encrypt()\fR is not really \s-1DES CBC\s0 (it does +not update the \s-1IV\s0); use \fBdes_ncbc_encrypt()\fR instead. +.IP "\(bu" 2 +a multiple of 64 bits are enciphered at a time. +.IP "\(bu" 2 +The \s-1CBC\s0 mode produces the same ciphertext whenever the same +plaintext is encrypted using the same key and starting variable. +.IP "\(bu" 2 +The chaining operation makes the ciphertext blocks dependent on the +current and all preceding plaintext blocks and therefore blocks can not +be rearranged. +.IP "\(bu" 2 +The use of different starting variables prevents the same plaintext +enciphering to the same ciphertext. +.IP "\(bu" 2 +An error will affect the current and the following ciphertext blocks. +.SS "Cipher Feedback Mode (\s-1CFB\s0)" +.IX Subsection "Cipher Feedback Mode (CFB)" +Normally, this is found as the function \fIalgorithm\fR\fB_cfb_encrypt()\fR. +.IP "\(bu" 2 +a number of bits (j) <= 64 are enciphered at a time. +.IP "\(bu" 2 +The \s-1CFB\s0 mode produces the same ciphertext whenever the same +plaintext is encrypted using the same key and starting variable. +.IP "\(bu" 2 +The chaining operation makes the ciphertext variables dependent on the +current and all preceding variables and therefore j\-bit variables are +chained together and can not be rearranged. +.IP "\(bu" 2 +The use of different starting variables prevents the same plaintext +enciphering to the same ciphertext. +.IP "\(bu" 2 +The strength of the \s-1CFB\s0 mode depends on the size of k (maximal if +j == k). In my implementation this is always the case. +.IP "\(bu" 2 +Selection of a small value for j will require more cycles through +the encipherment algorithm per unit of plaintext and thus cause +greater processing overheads. +.IP "\(bu" 2 +Only multiples of j bits can be enciphered. +.IP "\(bu" 2 +An error will affect the current and the following ciphertext variables. +.SS "Output Feedback Mode (\s-1OFB\s0)" +.IX Subsection "Output Feedback Mode (OFB)" +Normally, this is found as the function \fIalgorithm\fR\fB_ofb_encrypt()\fR. +.IP "\(bu" 2 +a number of bits (j) <= 64 are enciphered at a time. +.IP "\(bu" 2 +The \s-1OFB\s0 mode produces the same ciphertext whenever the same +plaintext enciphered using the same key and starting variable. More +over, in the \s-1OFB\s0 mode the same key stream is produced when the same +key and start variable are used. Consequently, for security reasons +a specific start variable should be used only once for a given key. +.IP "\(bu" 2 +The absence of chaining makes the \s-1OFB\s0 more vulnerable to specific attacks. +.IP "\(bu" 2 +The use of different start variables values prevents the same +plaintext enciphering to the same ciphertext, by producing different +key streams. +.IP "\(bu" 2 +Selection of a small value for j will require more cycles through +the encipherment algorithm per unit of plaintext and thus cause +greater processing overheads. +.IP "\(bu" 2 +Only multiples of j bits can be enciphered. +.IP "\(bu" 2 +\&\s-1OFB\s0 mode of operation does not extend ciphertext errors in the +resultant plaintext output. Every bit error in the ciphertext causes +only one bit to be in error in the deciphered plaintext. +.IP "\(bu" 2 +\&\s-1OFB\s0 mode is not self-synchronizing. If the two operation of +encipherment and decipherment get out of synchronism, the system needs +to be re-initialized. +.IP "\(bu" 2 +Each re-initialization should use a value of the start variable +different from the start variable values used before with the same +key. The reason for this is that an identical bit stream would be +produced each time from the same parameters. This would be +susceptible to a 'known plaintext' attack. +.SS "Triple \s-1ECB\s0 Mode" +.IX Subsection "Triple ECB Mode" +Normally, this is found as the function \fIalgorithm\fR\fB_ecb3_encrypt()\fR. +.IP "\(bu" 2 +Encrypt with key1, decrypt with key2 and encrypt with key3 again. +.IP "\(bu" 2 +As for \s-1ECB\s0 encryption but increases the key length to 168 bits. +There are theoretic attacks that can be used that make the effective +key length 112 bits, but this attack also requires 2^56 blocks of +memory, not very likely, even for the \s-1NSA.\s0 +.IP "\(bu" 2 +If both keys are the same it is equivalent to encrypting once with +just one key. +.IP "\(bu" 2 +If the first and last key are the same, the key length is 112 bits. +There are attacks that could reduce the effective key strength +to only slightly more than 56 bits, but these require a lot of memory. +.IP "\(bu" 2 +If all 3 keys are the same, this is effectively the same as normal +ecb mode. +.SS "Triple \s-1CBC\s0 Mode" +.IX Subsection "Triple CBC Mode" +Normally, this is found as the function \fIalgorithm\fR\fB_ede3_cbc_encrypt()\fR. +.IP "\(bu" 2 +Encrypt with key1, decrypt with key2 and then encrypt with key3. +.IP "\(bu" 2 +As for \s-1CBC\s0 encryption but increases the key length to 168 bits with +the same restrictions as for triple ecb mode. +.SH "NOTES" +.IX Header "NOTES" +This text was been written in large parts by Eric Young in his original +documentation for SSLeay, the predecessor of OpenSSL. In turn, he attributed +it to: +.PP +.Vb 5 +\& AS 2805.5.2 +\& Australian Standard +\& Electronic funds transfer \- Requirements for interfaces, +\& Part 5.2: Modes of operation for an n\-bit block cipher algorithm +\& Appendix A +.Ve +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBBF_encrypt\fR\|(3), \fBDES_crypt\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man7/evp.7 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man7/evp.7 new file mode 100644 index 00000000..13122df3 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man7/evp.7 @@ -0,0 +1,236 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "EVP 7" +.TH EVP 7 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +evp \- high\-level cryptographic functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \s-1EVP\s0 library provides a high-level interface to cryptographic +functions. +.PP +The \fBEVP_Seal\fR\fI\s-1XXX\s0\fR and \fBEVP_Open\fR\fI\s-1XXX\s0\fR +functions provide public key encryption and decryption to implement digital \*(L"envelopes\*(R". +.PP +The \fBEVP_DigestSign\fR\fI\s-1XXX\s0\fR and +\&\fBEVP_DigestVerify\fR\fI\s-1XXX\s0\fR functions implement +digital signatures and Message Authentication Codes (MACs). Also see the older +\&\fBEVP_Sign\fR\fI\s-1XXX\s0\fR and \fBEVP_Verify\fR\fI\s-1XXX\s0\fR +functions. +.PP +Symmetric encryption is available with the \fBEVP_Encrypt\fR\fI\s-1XXX\s0\fR +functions. The \fBEVP_Digest\fR\fI\s-1XXX\s0\fR functions provide message digests. +.PP +The \fB\s-1EVP_PKEY\s0\fR\fI\s-1XXX\s0\fR functions provide a high level interface to +asymmetric algorithms. To create a new \s-1EVP_PKEY\s0 see +\&\fBEVP_PKEY_new\fR\|(3). EVP_PKEYs can be associated +with a private key of a particular algorithm by using the functions +described on the \fBEVP_PKEY_set1_RSA\fR\|(3) page, or +new keys can be generated using \fBEVP_PKEY_keygen\fR\|(3). +EVP_PKEYs can be compared using \fBEVP_PKEY_cmp\fR\|(3), or printed using +\&\fBEVP_PKEY_print_private\fR\|(3). +.PP +The \s-1EVP_PKEY\s0 functions support the full range of asymmetric algorithm operations: +.IP "For key agreement see \fBEVP_PKEY_derive\fR\|(3)" 4 +.IX Item "For key agreement see EVP_PKEY_derive" +.PD 0 +.IP "For signing and verifying see \fBEVP_PKEY_sign\fR\|(3), \fBEVP_PKEY_verify\fR\|(3) and \fBEVP_PKEY_verify_recover\fR\|(3). However, note that these functions do not perform a digest of the data to be signed. Therefore normally you would use the \fBEVP_DigestSignInit\fR\|(3) functions for this purpose." 4 +.IX Item "For signing and verifying see EVP_PKEY_sign, EVP_PKEY_verify and EVP_PKEY_verify_recover. However, note that these functions do not perform a digest of the data to be signed. Therefore normally you would use the EVP_DigestSignInit functions for this purpose." +.ie n .IP "For encryption and decryption see \fBEVP_PKEY_encrypt\fR\|(3) and \fBEVP_PKEY_decrypt\fR\|(3) respectively. However, note that these functions perform encryption and decryption only. As public key encryption is an expensive operation, normally you would wrap an encrypted message in a ""digital envelope"" using the \fBEVP_SealInit\fR\|(3) and \fBEVP_OpenInit\fR\|(3) functions." 4 +.el .IP "For encryption and decryption see \fBEVP_PKEY_encrypt\fR\|(3) and \fBEVP_PKEY_decrypt\fR\|(3) respectively. However, note that these functions perform encryption and decryption only. As public key encryption is an expensive operation, normally you would wrap an encrypted message in a ``digital envelope'' using the \fBEVP_SealInit\fR\|(3) and \fBEVP_OpenInit\fR\|(3) functions." 4 +.IX Item "For encryption and decryption see EVP_PKEY_encrypt and EVP_PKEY_decrypt respectively. However, note that these functions perform encryption and decryption only. As public key encryption is an expensive operation, normally you would wrap an encrypted message in a digital envelope using the EVP_SealInit and EVP_OpenInit functions." +.PD +.PP +The \fBEVP_BytesToKey\fR\|(3) function provides some limited support for password +based encryption. Careful selection of the parameters will provide a PKCS#5 \s-1PBKDF1\s0 compatible +implementation. However, new applications should not typically use this (preferring, for example, +\&\s-1PBKDF2\s0 from PCKS#5). +.PP +The \fBEVP_Encode\fR\fI\s-1XXX\s0\fR and +\&\fBEVP_Decode\fR\fI\s-1XXX\s0\fR functions implement base 64 encoding +and decoding. +.PP +All the symmetric algorithms (ciphers), digests and asymmetric algorithms +(public key algorithms) can be replaced by \s-1ENGINE\s0 modules providing alternative +implementations. If \s-1ENGINE\s0 implementations of ciphers or digests are registered +as defaults, then the various \s-1EVP\s0 functions will automatically use those +implementations automatically in preference to built in software +implementations. For more information, consult the \fBengine\fR\|(3) man page. +.PP +Although low level algorithm specific functions exist for many algorithms +their use is discouraged. They cannot be used with an \s-1ENGINE\s0 and \s-1ENGINE\s0 +versions of new algorithms cannot be accessed using the low level functions. +Also makes code harder to adapt to new algorithms and some options are not +cleanly supported at the low level and some operations are more efficient +using the high level interface. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBEVP_DigestInit\fR\|(3), +\&\fBEVP_EncryptInit\fR\|(3), +\&\fBEVP_OpenInit\fR\|(3), +\&\fBEVP_SealInit\fR\|(3), +\&\fBEVP_DigestSignInit\fR\|(3), +\&\fBEVP_SignInit\fR\|(3), +\&\fBEVP_VerifyInit\fR\|(3), +\&\fBEVP_EncodeInit\fR\|(3), +\&\fBEVP_PKEY_new\fR\|(3), +\&\fBEVP_PKEY_set1_RSA\fR\|(3), +\&\fBEVP_PKEY_keygen\fR\|(3), +\&\fBEVP_PKEY_print_private\fR\|(3), +\&\fBEVP_PKEY_decrypt\fR\|(3), +\&\fBEVP_PKEY_encrypt\fR\|(3), +\&\fBEVP_PKEY_sign\fR\|(3), +\&\fBEVP_PKEY_verify\fR\|(3), +\&\fBEVP_PKEY_verify_recover\fR\|(3), +\&\fBEVP_PKEY_derive\fR\|(3), +\&\fBEVP_BytesToKey\fR\|(3), +\&\fBENGINE_by_id\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man7/ossl_store-file.7 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man7/ossl_store-file.7 new file mode 100644 index 00000000..3aec5be5 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man7/ossl_store-file.7 @@ -0,0 +1,191 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "OSSL_STORE-FILE 7" +.TH OSSL_STORE-FILE 7 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +ossl_store\-file \- The store 'file' scheme loader +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +#include +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +Support for the 'file' scheme is built into \f(CW\*(C`libcrypto\*(C'\fR. +Since files come in all kinds of formats and content types, the 'file' +scheme has its own layer of functionality called \*(L"file handlers\*(R", +which are used to try to decode diverse types of file contents. +.PP +In case a file is formatted as \s-1PEM,\s0 each called file handler receives +the \s-1PEM\s0 name (everything following any '\f(CW\*(C`\-\-\-\-\-BEGIN \*(C'\fR') as well as +possible \s-1PEM\s0 headers, together with the decoded \s-1PEM\s0 body. Since \s-1PEM\s0 +formatted files can contain more than one object, the file handlers +are called upon for each such object. +.PP +If the file isn't determined to be formatted as \s-1PEM,\s0 the content is +loaded in raw form in its entirety and passed to the available file +handlers as is, with no \s-1PEM\s0 name or headers. +.PP +Each file handler is expected to handle \s-1PEM\s0 and non-PEM content as +appropriate. Some may refuse non-PEM content for the sake of +determinism (for example, there are keys out in the wild that are +represented as an \s-1ASN.1 OCTET STRING.\s0 In raw form, it's not easily +possible to distinguish those from any other data coming as an \s-1ASN.1 +OCTET STRING,\s0 so such keys would naturally be accepted as \s-1PEM\s0 files +only). +.SH "NOTES" +.IX Header "NOTES" +When needed, the 'file' scheme loader will require a pass phrase by +using the \f(CW\*(C`UI_METHOD\*(C'\fR that was passed via \fBOSSL_STORE_open()\fR. +This pass phrase is expected to be \s-1UTF\-8\s0 encoded, anything else will +give an undefined result. +The files made accessible through this loader are expected to be +standard compliant with regards to pass phrase encoding. +Files that aren't should be re-generated with a correctly encoded pass +phrase. +See \fBpassphrase\-encoding\fR\|(7) for more information. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBossl_store\fR\|(7), \fBpassphrase\-encoding\fR\|(7) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man7/ossl_store.7 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man7/ossl_store.7 new file mode 100644 index 00000000..e66149bd --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man7/ossl_store.7 @@ -0,0 +1,215 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "OSSL_STORE 7" +.TH OSSL_STORE 7 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +ossl_store \- Store retrieval functions +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +#include +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +.SS "General" +.IX Subsection "General" +A \s-1STORE\s0 is a layer of functionality to retrieve a number of supported +objects from a repository of any kind, addressable as a file name or +as a \s-1URI.\s0 +.PP +The functionality supports the pattern \*(L"open a channel to the +repository\*(R", \*(L"loop and retrieve one object at a time\*(R", and \*(L"finish up +by closing the channel\*(R". +.PP +The retrieved objects are returned as a wrapper type \fB\s-1OSSL_STORE_INFO\s0\fR, +from which an OpenSSL type can be retrieved. +.SS "\s-1URI\s0 schemes and loaders" +.IX Subsection "URI schemes and loaders" +Support for a \s-1URI\s0 scheme is called a \s-1STORE\s0 \*(L"loader\*(R", and can be added +dynamically from the calling application or from a loadable engine. +.PP +Support for the 'file' scheme is built into \f(CW\*(C`libcrypto\*(C'\fR. +See \fBossl_store\-file\fR\|(7) for more information. +.SS "\s-1UI_METHOD\s0 and pass phrases" +.IX Subsection "UI_METHOD and pass phrases" +The \fB\s-1OSS_STORE\s0\fR \s-1API\s0 does nothing to enforce any specific format or +encoding on the pass phrase that the \fB\s-1UI_METHOD\s0\fR provides. However, +the pass phrase is expected to be \s-1UTF\-8\s0 encoded. The result of any +other encoding is undefined. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +.SS "A generic call" +.IX Subsection "A generic call" +.Vb 1 +\& OSSL_STORE_CTX *ctx = OSSL_STORE_open("file:/foo/bar/data.pem"); +\& +\& /* +\& * OSSL_STORE_eof() simulates file semantics for any repository to signal +\& * that no more data can be expected +\& */ +\& while (!OSSL_STORE_eof(ctx)) { +\& OSSL_STORE_INFO *info = OSSL_STORE_load(ctx); +\& +\& /* +\& * Do whatever is necessary with the OSSL_STORE_INFO, +\& * here just one example +\& */ +\& switch (OSSL_STORE_INFO_get_type(info)) { +\& case OSSL_STORE_INFO_X509: +\& /* Print the X.509 certificate text */ +\& X509_print_fp(stdout, OSSL_STORE_INFO_get0_CERT(info)); +\& /* Print the X.509 certificate PEM output */ +\& PEM_write_X509(stdout, OSSL_STORE_INFO_get0_CERT(info)); +\& break; +\& } +\& } +\& +\& OSSL_STORE_close(ctx); +.Ve +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\s-1\fBOSSL_STORE_INFO\s0\fR\|(3), \s-1\fBOSSL_STORE_LOADER\s0\fR\|(3), +\&\fBOSSL_STORE_open\fR\|(3), \fBOSSL_STORE_expect\fR\|(3), +\&\s-1\fBOSSL_STORE_SEARCH\s0\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2016\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man7/passphrase-encoding.7 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man7/passphrase-encoding.7 new file mode 100644 index 00000000..a9b5de4c --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man7/passphrase-encoding.7 @@ -0,0 +1,287 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "PASSPHRASE-ENCODING 7" +.TH PASSPHRASE-ENCODING 7 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +passphrase\-encoding \&\- How diverse parts of OpenSSL treat pass phrases character encoding +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +In a modern world with all sorts of character encodings, the treatment of pass +phrases has become increasingly complex. +This manual page attempts to give an overview over how this problem is +currently addressed in different parts of the OpenSSL library. +.SS "The general case" +.IX Subsection "The general case" +The OpenSSL library doesn't treat pass phrases in any special way as a general +rule, and trusts the application or user to choose a suitable character set +and stick to that throughout the lifetime of affected objects. +This means that for an object that was encrypted using a pass phrase encoded in +\&\s-1ISO\-8859\-1,\s0 that object needs to be decrypted using a pass phrase encoded in +\&\s-1ISO\-8859\-1.\s0 +Using the wrong encoding is expected to cause a decryption failure. +.SS "PKCS#12" +.IX Subsection "PKCS#12" +PKCS#12 is a bit different regarding pass phrase encoding. +The standard stipulates that the pass phrase shall be encoded as an \s-1ASN.1\s0 +BMPString, which consists of the code points of the basic multilingual plane, +encoded in big endian (\s-1UCS\-2 BE\s0). +.PP +OpenSSL tries to adapt to this requirements in one of the following manners: +.IP "1." 4 +Treats the received pass phrase as \s-1UTF\-8\s0 encoded and tries to re-encode it to +\&\s-1UTF\-16\s0 (which is the same as \s-1UCS\-2\s0 for characters U+0000 to U+D7FF and U+E000 +to U+FFFF, but becomes an expansion for any other character), or failing that, +proceeds with step 2. +.IP "2." 4 +Assumes that the pass phrase is encoded in \s-1ASCII\s0 or \s-1ISO\-8859\-1\s0 and +opportunistically prepends each byte with a zero byte to obtain the \s-1UCS\-2\s0 +encoding of the characters, which it stores as a BMPString. +.Sp +Note that since there is no check of your locale, this may produce \s-1UCS\-2 / +UTF\-16\s0 characters that do not correspond to the original pass phrase characters +for other character sets, such as any \s-1ISO\-8859\-X\s0 encoding other than +\&\s-1ISO\-8859\-1\s0 (or for Windows, \s-1CP 1252\s0 with exception for the extra \*(L"graphical\*(R" +characters in the 0x80\-0x9F range). +.PP +OpenSSL versions older than 1.1.0 do variant 2 only, and that is the reason why +OpenSSL still does this, to be able to read files produced with older versions. +.PP +It should be noted that this approach isn't entirely fault free. +.PP +A pass phrase encoded in \s-1ISO\-8859\-2\s0 could very well have a sequence such as +0xC3 0xAF (which is the two characters \*(L"\s-1LATIN CAPITAL LETTER A WITH BREVE\*(R"\s0 +and \*(L"\s-1LATIN CAPITAL LETTER Z WITH DOT ABOVE\*(R"\s0 in \s-1ISO\-8859\-2\s0 encoding), but would +be misinterpreted as the perfectly valid \s-1UTF\-8\s0 encoded code point U+00EF (\s-1LATIN +SMALL LETTER I WITH DIAERESIS\s0) \fIif the pass phrase doesn't contain anything that +would be invalid \s-1UTF\-8\s0\fR. +A pass phrase that contains this kind of byte sequence will give a different +outcome in OpenSSL 1.1.0 and newer than in OpenSSL older than 1.1.0. +.PP +.Vb 2 +\& 0x00 0xC3 0x00 0xAF # OpenSSL older than 1.1.0 +\& 0x00 0xEF # OpenSSL 1.1.0 and newer +.Ve +.PP +On the same accord, anything encoded in \s-1UTF\-8\s0 that was given to OpenSSL older +than 1.1.0 was misinterpreted as \s-1ISO\-8859\-1\s0 sequences. +.SS "\s-1OSSL_STORE\s0" +.IX Subsection "OSSL_STORE" +\&\fBossl_store\fR\|(7) acts as a general interface to access all kinds of objects, +potentially protected with a pass phrase, a \s-1PIN\s0 or something else. +This \s-1API\s0 stipulates that pass phrases should be \s-1UTF\-8\s0 encoded, and that any +other pass phrase encoding may give undefined results. +This \s-1API\s0 relies on the application to ensure \s-1UTF\-8\s0 encoding, and doesn't check +that this is the case, so what it gets, it will also pass to the underlying +loader. +.SH "RECOMMENDATIONS" +.IX Header "RECOMMENDATIONS" +This section assumes that you know what pass phrase was used for encryption, +but that it may have been encoded in a different character encoding than the +one used by your current input method. +For example, the pass phrase may have been used at a time when your default +encoding was \s-1ISO\-8859\-1\s0 (i.e. \*(L"nai\*:ve\*(R" resulting in the byte sequence 0x6E 0x61 +0xEF 0x76 0x65), and you're now in an environment where your default encoding +is \s-1UTF\-8\s0 (i.e. \*(L"nai\*:ve\*(R" resulting in the byte sequence 0x6E 0x61 0xC3 0xAF 0x76 +0x65). +Whenever it's mentioned that you should use a certain character encoding, it +should be understood that you either change the input method to use the +mentioned encoding when you type in your pass phrase, or use some suitable tool +to convert your pass phrase from your default encoding to the target encoding. +.PP +Also note that the sub-sections below discuss human readable pass phrases. +This is particularly relevant for PKCS#12 objects, where human readable pass +phrases are assumed. +For other objects, it's as legitimate to use any byte sequence (such as a +sequence of bytes from `/dev/urandom` that's been saved away), which makes any +character encoding discussion irrelevant; in such cases, simply use the same +byte sequence as it is. +.SS "Creating new objects" +.IX Subsection "Creating new objects" +For creating new pass phrase protected objects, make sure the pass phrase is +encoded using \s-1UTF\-8.\s0 +This is default on most modern Unixes, but may involve an effort on other +platforms. +Specifically for Windows, setting the environment variable +\&\f(CW\*(C`OPENSSL_WIN32_UTF8\*(C'\fR will have anything entered on [Windows] console prompt +converted to \s-1UTF\-8\s0 (command line and separately prompted pass phrases alike). +.SS "Opening existing objects" +.IX Subsection "Opening existing objects" +For opening pass phrase protected objects where you know what character +encoding was used for the encryption pass phrase, make sure to use the same +encoding again. +.PP +For opening pass phrase protected objects where the character encoding that was +used is unknown, or where the producing application is unknown, try one of the +following: +.IP "1." 4 +Try the pass phrase that you have as it is in the character encoding of your +environment. +It's possible that its byte sequence is exactly right. +.IP "2." 4 +Convert the pass phrase to \s-1UTF\-8\s0 and try with the result. +Specifically with PKCS#12, this should open up any object that was created +according to the specification. +.IP "3." 4 +Do a nai\*:ve (i.e. purely mathematical) \s-1ISO\-8859\-1\s0 to \s-1UTF\-8\s0 conversion and try +with the result. +This differs from the previous attempt because \s-1ISO\-8859\-1\s0 maps directly to +U+0000 to U+00FF, which other non\-UTF\-8 character sets do not. +.Sp +This also takes care of the case when a \s-1UTF\-8\s0 encoded string was used with +OpenSSL older than 1.1.0. +(for example, \f(CW\*(C`i\*:\*(C'\fR, which is 0xC3 0xAF when encoded in \s-1UTF\-8,\s0 would become 0xC3 +0x83 0xC2 0xAF when re-encoded in the nai\*:ve manner. +The conversion to BMPString would then yield 0x00 0xC3 0x00 0xA4 0x00 0x00, the +erroneous/non\-compliant encoding used by OpenSSL older than 1.1.0) +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBevp\fR\|(7), +\&\fBossl_store\fR\|(7), +\&\fBEVP_BytesToKey\fR\|(3), \fBEVP_DecryptInit\fR\|(3), +\&\fBPEM_do_header\fR\|(3), +\&\fBPKCS12_parse\fR\|(3), \fBPKCS12_newpass\fR\|(3), +\&\fBd2i_PKCS8PrivateKey_bio\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2018\-2020 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man7/proxy-certificates.7 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man7/proxy-certificates.7 new file mode 100644 index 00000000..23823c56 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man7/proxy-certificates.7 @@ -0,0 +1,478 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "PROXY-CERTIFICATES 7" +.TH PROXY-CERTIFICATES 7 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +proxy\-certificates \- Proxy certificates in OpenSSL +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +Proxy certificates are defined in \s-1RFC 3820.\s0 They are used to +extend rights to some other entity (a computer process, typically, or +sometimes to the user itself). This allows the entity to perform +operations on behalf of the owner of the \s-1EE\s0 (End Entity) certificate. +.PP +The requirements for a valid proxy certificate are: +.IP "\(bu" 4 +They are issued by an End Entity, either a normal \s-1EE\s0 certificate, or +another proxy certificate. +.IP "\(bu" 4 +They must not have the \fBsubjectAltName\fR or \fBissuerAltName\fR +extensions. +.IP "\(bu" 4 +They must have the \fBproxyCertInfo\fR extension. +.IP "\(bu" 4 +They must have the subject of their issuer, with one \fBcommonName\fR +added. +.SS "Enabling proxy certificate verification" +.IX Subsection "Enabling proxy certificate verification" +OpenSSL expects applications that want to use proxy certificates to be +specially aware of them, and make that explicit. This is done by +setting an X509 verification flag: +.PP +.Vb 1 +\& X509_STORE_CTX_set_flags(ctx, X509_V_FLAG_ALLOW_PROXY_CERTS); +.Ve +.PP +or +.PP +.Vb 1 +\& X509_VERIFY_PARAM_set_flags(param, X509_V_FLAG_ALLOW_PROXY_CERTS); +.Ve +.PP +See \*(L"\s-1NOTES\*(R"\s0 for a discussion on this requirement. +.SS "Creating proxy certificates" +.IX Subsection "Creating proxy certificates" +Creating proxy certificates can be done using the \fBopenssl\-x509\fR\|(1) +command, with some extra extensions: +.PP +.Vb 3 +\& [ v3_proxy ] +\& # A proxy certificate MUST NEVER be a CA certificate. +\& basicConstraints=CA:FALSE +\& +\& # Usual authority key ID +\& authorityKeyIdentifier=keyid,issuer:always +\& +\& # The extension which marks this certificate as a proxy +\& proxyCertInfo=critical,language:id\-ppl\-anyLanguage,pathlen:1,policy:text:AB +.Ve +.PP +It's also possible to specify the proxy extension in a separate section: +.PP +.Vb 1 +\& proxyCertInfo=critical,@proxy_ext +\& +\& [ proxy_ext ] +\& language=id\-ppl\-anyLanguage +\& pathlen=0 +\& policy=text:BC +.Ve +.PP +The policy value has a specific syntax, \fIsyntag\fR:\fIstring\fR, where the +\&\fIsyntag\fR determines what will be done with the string. The following +\&\fIsyntag\fRs are recognised: +.IP "\fBtext\fR" 4 +.IX Item "text" +indicates that the string is a byte sequence, without any encoding: +.Sp +.Vb 1 +\& policy=text:ra\*:ksmo\*:rga\*os +.Ve +.IP "\fBhex\fR" 4 +.IX Item "hex" +indicates the string is encoded hexadecimal encoded binary data, with +colons between each byte (every second hex digit): +.Sp +.Vb 1 +\& policy=hex:72:E4:6B:73:6D:F6:72:67:E5:73 +.Ve +.IP "\fBfile\fR" 4 +.IX Item "file" +indicates that the text of the policy should be taken from a file. +The string is then a filename. This is useful for policies that are +large (more than a few lines, e.g. \s-1XML\s0 documents). +.PP +\&\fI\s-1NOTE:\s0 The proxy policy value is what determines the rights granted +to the process during the proxy certificate. It's up to the +application to interpret and combine these policies.\fR +.PP +With a proxy extension, creating a proxy certificate is a matter of +two commands: +.PP +.Vb 3 +\& openssl req \-new \-config proxy.cnf \e +\& \-out proxy.req \-keyout proxy.key \e +\& \-subj "/DC=org/DC=openssl/DC=users/CN=proxy 1" +\& +\& openssl x509 \-req \-CAcreateserial \-in proxy.req \-out proxy.crt \e +\& \-CA user.crt \-CAkey user.key \-days 7 \e +\& \-extfile proxy.cnf \-extensions v3_proxy1 +.Ve +.PP +You can also create a proxy certificate using another proxy +certificate as issuer (note: using a different configuration +section for the proxy extensions): +.PP +.Vb 3 +\& openssl req \-new \-config proxy.cnf \e +\& \-out proxy2.req \-keyout proxy2.key \e +\& \-subj "/DC=org/DC=openssl/DC=users/CN=proxy 1/CN=proxy 2" +\& +\& openssl x509 \-req \-CAcreateserial \-in proxy2.req \-out proxy2.crt \e +\& \-CA proxy.crt \-CAkey proxy.key \-days 7 \e +\& \-extfile proxy.cnf \-extensions v3_proxy2 +.Ve +.SS "Using proxy certs in applications" +.IX Subsection "Using proxy certs in applications" +To interpret proxy policies, the application would normally start with +some default rights (perhaps none at all), then compute the resulting +rights by checking the rights against the chain of proxy certificates, +user certificate and \s-1CA\s0 certificates. +.PP +The complicated part is figuring out how to pass data between your +application and the certificate validation procedure. +.PP +The following ingredients are needed for such processing: +.IP "\(bu" 4 +a callback function that will be called for every certificate being +validated. The callback is called several times for each certificate, +so you must be careful to do the proxy policy interpretation at the +right time. You also need to fill in the defaults when the \s-1EE\s0 +certificate is checked. +.IP "\(bu" 4 +a data structure that is shared between your application code and the +callback. +.IP "\(bu" 4 +a wrapper function that sets it all up. +.IP "\(bu" 4 +an ex_data index function that creates an index into the generic +ex_data store that is attached to an X509 validation context. +.PP +The following skeleton code can be used as a starting point: +.PP +.Vb 4 +\& #include +\& #include +\& #include +\& #include +\& +\& #define total_rights 25 +\& +\& /* +\& * In this example, I will use a view of granted rights as a bit +\& * array, one bit for each possible right. +\& */ +\& typedef struct your_rights { +\& unsigned char rights[(total_rights + 7) / 8]; +\& } YOUR_RIGHTS; +\& +\& /* +\& * The following procedure will create an index for the ex_data +\& * store in the X509 validation context the first time it\*(Aqs +\& * called. Subsequent calls will return the same index. +\& */ +\& static int get_proxy_auth_ex_data_idx(X509_STORE_CTX *ctx) +\& { +\& static volatile int idx = \-1; +\& +\& if (idx < 0) { +\& X509_STORE_lock(X509_STORE_CTX_get0_store(ctx)); +\& if (idx < 0) { +\& idx = X509_STORE_CTX_get_ex_new_index(0, +\& "for verify callback", +\& NULL,NULL,NULL); +\& } +\& X509_STORE_unlock(X509_STORE_CTX_get0_store(ctx)); +\& } +\& return idx; +\& } +\& +\& /* Callback to be given to the X509 validation procedure. */ +\& static int verify_callback(int ok, X509_STORE_CTX *ctx) +\& { +\& if (ok == 1) { +\& /* +\& * It\*(Aqs REALLY important you keep the proxy policy check +\& * within this section. It\*(Aqs important to know that when +\& * ok is 1, the certificates are checked from top to +\& * bottom. You get the CA root first, followed by the +\& * possible chain of intermediate CAs, followed by the EE +\& * certificate, followed by the possible proxy +\& * certificates. +\& */ +\& X509 *xs = X509_STORE_CTX_get_current_cert(ctx); +\& +\& if (X509_get_extension_flags(xs) & EXFLAG_PROXY) { +\& YOUR_RIGHTS *rights = +\& (YOUR_RIGHTS *)X509_STORE_CTX_get_ex_data(ctx, +\& get_proxy_auth_ex_data_idx(ctx)); +\& PROXY_CERT_INFO_EXTENSION *pci = +\& X509_get_ext_d2i(xs, NID_proxyCertInfo, NULL, NULL); +\& +\& switch (OBJ_obj2nid(pci\->proxyPolicy\->policyLanguage)) { +\& case NID_Independent: +\& /* +\& * Do whatever you need to grant explicit rights +\& * to this particular proxy certificate, usually +\& * by pulling them from some database. If there +\& * are none to be found, clear all rights (making +\& * this and any subsequent proxy certificate void +\& * of any rights). +\& */ +\& memset(rights\->rights, 0, sizeof(rights\->rights)); +\& break; +\& case NID_id_ppl_inheritAll: +\& /* +\& * This is basically a NOP, we simply let the +\& * current rights stand as they are. +\& */ +\& break; +\& default: +\& /* +\& * This is usually the most complex section of +\& * code. You really do whatever you want as long +\& * as you follow RFC 3820. In the example we use +\& * here, the simplest thing to do is to build +\& * another, temporary bit array and fill it with +\& * the rights granted by the current proxy +\& * certificate, then use it as a mask on the +\& * accumulated rights bit array, and voila\*`, you +\& * now have a new accumulated rights bit array. +\& */ +\& { +\& int i; +\& YOUR_RIGHTS tmp_rights; +\& memset(tmp_rights.rights, 0, +\& sizeof(tmp_rights.rights)); +\& +\& /* +\& * process_rights() is supposed to be a +\& * procedure that takes a string and its +\& * length, interprets it and sets the bits +\& * in the YOUR_RIGHTS pointed at by the +\& * third argument. +\& */ +\& process_rights((char *) pci\->proxyPolicy\->policy\->data, +\& pci\->proxyPolicy\->policy\->length, +\& &tmp_rights); +\& +\& for(i = 0; i < total_rights / 8; i++) +\& rights\->rights[i] &= tmp_rights.rights[i]; +\& } +\& break; +\& } +\& PROXY_CERT_INFO_EXTENSION_free(pci); +\& } else if (!(X509_get_extension_flags(xs) & EXFLAG_CA)) { +\& /* We have an EE certificate, let\*(Aqs use it to set default! */ +\& YOUR_RIGHTS *rights = +\& (YOUR_RIGHTS *)X509_STORE_CTX_get_ex_data(ctx, +\& get_proxy_auth_ex_data_idx(ctx)); +\& +\& /* +\& * The following procedure finds out what rights the +\& * owner of the current certificate has, and sets them +\& * in the YOUR_RIGHTS structure pointed at by the +\& * second argument. +\& */ +\& set_default_rights(xs, rights); +\& } +\& } +\& return ok; +\& } +\& +\& static int my_X509_verify_cert(X509_STORE_CTX *ctx, +\& YOUR_RIGHTS *needed_rights) +\& { +\& int ok; +\& int (*save_verify_cb)(int ok,X509_STORE_CTX *ctx) = +\& X509_STORE_CTX_get_verify_cb(ctx); +\& YOUR_RIGHTS rights; +\& +\& X509_STORE_CTX_set_verify_cb(ctx, verify_callback); +\& X509_STORE_CTX_set_ex_data(ctx, get_proxy_auth_ex_data_idx(ctx), +\& &rights); +\& X509_STORE_CTX_set_flags(ctx, X509_V_FLAG_ALLOW_PROXY_CERTS); +\& ok = X509_verify_cert(ctx); +\& +\& if (ok == 1) { +\& ok = check_needed_rights(rights, needed_rights); +\& } +\& +\& X509_STORE_CTX_set_verify_cb(ctx, save_verify_cb); +\& +\& return ok; +\& } +.Ve +.PP +If you use \s-1SSL\s0 or \s-1TLS,\s0 you can easily set up a callback to have the +certificates checked properly, using the code above: +.PP +.Vb 2 +\& SSL_CTX_set_cert_verify_callback(s_ctx, my_X509_verify_cert, +\& &needed_rights); +.Ve +.SH "NOTES" +.IX Header "NOTES" +To this date, it seems that proxy certificates have only been used in +environments that are aware of them, and no one seems to have +investigated how they can be used or misused outside of such an +environment. +.PP +For that reason, OpenSSL requires that applications aware of proxy +certificates must also make that explicit. +.PP +\&\fBsubjectAltName\fR and \fBissuerAltName\fR are forbidden in proxy +certificates, and this is enforced in OpenSSL. The subject must be +the same as the issuer, with one commonName added on. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBX509_STORE_CTX_set_flags\fR\|(3), +\&\fBX509_STORE_CTX_set_verify_cb\fR\|(3), +\&\fBX509_VERIFY_PARAM_set_flags\fR\|(3), +\&\fBSSL_CTX_set_cert_verify_callback\fR\|(3), +\&\fBopenssl\-req\fR\|(1), \fBopenssl\-x509\fR\|(1), +\&\s-1RFC 3820\s0 +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the Apache License 2.0 (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man7/scrypt.7 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man7/scrypt.7 new file mode 100644 index 00000000..7819d7d1 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man7/scrypt.7 @@ -0,0 +1,248 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SCRYPT 7" +.TH SCRYPT 7 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +scrypt \- EVP_PKEY scrypt KDF support +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \s-1EVP_PKEY_SCRYPT\s0 algorithm implements the scrypt password based key +derivation function, as described in \s-1RFC 7914.\s0 It is memory-hard in the sense +that it deliberately requires a significant amount of \s-1RAM\s0 for efficient +computation. The intention of this is to render brute forcing of passwords on +systems that lack large amounts of main memory (such as GPUs or ASICs) +computationally infeasible. +.PP +scrypt provides three work factors that can be customized: N, r and p. N, which +has to be a positive power of two, is the general work factor and scales \s-1CPU\s0 +time in an approximately linear fashion. r is the block size of the internally +used hash function and p is the parallelization factor. Both r and p need to be +greater than zero. The amount of \s-1RAM\s0 that scrypt requires for its computation +is roughly (128 * N * r * p) bytes. +.PP +In the original paper of Colin Percival (\*(L"Stronger Key Derivation via +Sequential Memory-Hard Functions\*(R", 2009), the suggested values that give a +computation time of less than 5 seconds on a 2.5 GHz Intel Core 2 Duo are N = +2^20 = 1048576, r = 8, p = 1. Consequently, the required amount of memory for +this computation is roughly 1 GiB. On a more recent \s-1CPU\s0 (Intel i7\-5930K at 3.5 +GHz), this computation takes about 3 seconds. When N, r or p are not specified, +they default to 1048576, 8, and 1, respectively. The default amount of \s-1RAM\s0 that +may be used by scrypt defaults to 1025 MiB. +.SH "NOTES" +.IX Header "NOTES" +A context for scrypt can be obtained by calling: +.PP +.Vb 1 +\& EVP_PKEY_CTX *pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_SCRYPT, NULL); +.Ve +.PP +The output length of an scrypt key derivation is specified via the +length parameter to the \fBEVP_PKEY_derive\fR\|(3) function. +.SH "EXAMPLES" +.IX Header "EXAMPLES" +This example derives a 64\-byte long test vector using scrypt using the password +\&\*(L"password\*(R", salt \*(L"NaCl\*(R" and N = 1024, r = 8, p = 16. +.PP +.Vb 2 +\& EVP_PKEY_CTX *pctx; +\& unsigned char out[64]; +\& +\& size_t outlen = sizeof(out); +\& pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_SCRYPT, NULL); +\& +\& if (EVP_PKEY_derive_init(pctx) <= 0) { +\& error("EVP_PKEY_derive_init"); +\& } +\& if (EVP_PKEY_CTX_set1_pbe_pass(pctx, "password", 8) <= 0) { +\& error("EVP_PKEY_CTX_set1_pbe_pass"); +\& } +\& if (EVP_PKEY_CTX_set1_scrypt_salt(pctx, "NaCl", 4) <= 0) { +\& error("EVP_PKEY_CTX_set1_scrypt_salt"); +\& } +\& if (EVP_PKEY_CTX_set_scrypt_N(pctx, 1024) <= 0) { +\& error("EVP_PKEY_CTX_set_scrypt_N"); +\& } +\& if (EVP_PKEY_CTX_set_scrypt_r(pctx, 8) <= 0) { +\& error("EVP_PKEY_CTX_set_scrypt_r"); +\& } +\& if (EVP_PKEY_CTX_set_scrypt_p(pctx, 16) <= 0) { +\& error("EVP_PKEY_CTX_set_scrypt_p"); +\& } +\& if (EVP_PKEY_derive(pctx, out, &outlen) <= 0) { +\& error("EVP_PKEY_derive"); +\& } +\& +\& { +\& const unsigned char expected[sizeof(out)] = { +\& 0xfd, 0xba, 0xbe, 0x1c, 0x9d, 0x34, 0x72, 0x00, +\& 0x78, 0x56, 0xe7, 0x19, 0x0d, 0x01, 0xe9, 0xfe, +\& 0x7c, 0x6a, 0xd7, 0xcb, 0xc8, 0x23, 0x78, 0x30, +\& 0xe7, 0x73, 0x76, 0x63, 0x4b, 0x37, 0x31, 0x62, +\& 0x2e, 0xaf, 0x30, 0xd9, 0x2e, 0x22, 0xa3, 0x88, +\& 0x6f, 0xf1, 0x09, 0x27, 0x9d, 0x98, 0x30, 0xda, +\& 0xc7, 0x27, 0xaf, 0xb9, 0x4a, 0x83, 0xee, 0x6d, +\& 0x83, 0x60, 0xcb, 0xdf, 0xa2, 0xcc, 0x06, 0x40 +\& }; +\& +\& assert(!memcmp(out, expected, sizeof(out))); +\& } +\& +\& EVP_PKEY_CTX_free(pctx); +.Ve +.SH "CONFORMING TO" +.IX Header "CONFORMING TO" +\&\s-1RFC 7914\s0 +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBEVP_PKEY_CTX_set1_scrypt_salt\fR\|(3), +\&\fBEVP_PKEY_CTX_set_scrypt_N\fR\|(3), +\&\fBEVP_PKEY_CTX_set_scrypt_r\fR\|(3), +\&\fBEVP_PKEY_CTX_set_scrypt_p\fR\|(3), +\&\fBEVP_PKEY_CTX_set_scrypt_maxmem_bytes\fR\|(3), +\&\fBEVP_PKEY_CTX_new\fR\|(3), +\&\fBEVP_PKEY_CTX_ctrl_str\fR\|(3), +\&\fBEVP_PKEY_derive\fR\|(3) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2017\-2019 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man7/ssl.7 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man7/ssl.7 new file mode 100644 index 00000000..95f18f7b --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man7/ssl.7 @@ -0,0 +1,914 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SSL 7" +.TH SSL 7 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +ssl \- OpenSSL SSL/TLS library +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +See the individual manual pages for details. +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The OpenSSL \fBssl\fR library implements the Secure Sockets Layer (\s-1SSL\s0 v2/v3) and +Transport Layer Security (\s-1TLS\s0 v1) protocols. It provides a rich \s-1API\s0 which is +documented here. +.PP +An \fB\s-1SSL_CTX\s0\fR object is created as a framework to establish +\&\s-1TLS/SSL\s0 enabled connections (see \fBSSL_CTX_new\fR\|(3)). +Various options regarding certificates, algorithms etc. can be set +in this object. +.PP +When a network connection has been created, it can be assigned to an +\&\fB\s-1SSL\s0\fR object. After the \fB\s-1SSL\s0\fR object has been created using +\&\fBSSL_new\fR\|(3), \fBSSL_set_fd\fR\|(3) or +\&\fBSSL_set_bio\fR\|(3) can be used to associate the network +connection with the object. +.PP +When the \s-1TLS/SSL\s0 handshake is performed using +\&\fBSSL_accept\fR\|(3) or \fBSSL_connect\fR\|(3) +respectively. +\&\fBSSL_read_ex\fR\|(3), \fBSSL_read\fR\|(3), \fBSSL_write_ex\fR\|(3) and \fBSSL_write\fR\|(3) are +used to read and write data on the \s-1TLS/SSL\s0 connection. +\&\fBSSL_shutdown\fR\|(3) can be used to shut down the +\&\s-1TLS/SSL\s0 connection. +.SH "DATA STRUCTURES" +.IX Header "DATA STRUCTURES" +Currently the OpenSSL \fBssl\fR library functions deals with the following data +structures: +.IP "\fB\s-1SSL_METHOD\s0\fR (\s-1SSL\s0 Method)" 4 +.IX Item "SSL_METHOD (SSL Method)" +This is a dispatch structure describing the internal \fBssl\fR library +methods/functions which implement the various protocol versions (SSLv3 +TLSv1, ...). It's needed to create an \fB\s-1SSL_CTX\s0\fR. +.IP "\fB\s-1SSL_CIPHER\s0\fR (\s-1SSL\s0 Cipher)" 4 +.IX Item "SSL_CIPHER (SSL Cipher)" +This structure holds the algorithm information for a particular cipher which +are a core part of the \s-1SSL/TLS\s0 protocol. The available ciphers are configured +on a \fB\s-1SSL_CTX\s0\fR basis and the actual ones used are then part of the +\&\fB\s-1SSL_SESSION\s0\fR. +.IP "\fB\s-1SSL_CTX\s0\fR (\s-1SSL\s0 Context)" 4 +.IX Item "SSL_CTX (SSL Context)" +This is the global context structure which is created by a server or client +once per program life-time and which holds mainly default values for the +\&\fB\s-1SSL\s0\fR structures which are later created for the connections. +.IP "\fB\s-1SSL_SESSION\s0\fR (\s-1SSL\s0 Session)" 4 +.IX Item "SSL_SESSION (SSL Session)" +This is a structure containing the current \s-1TLS/SSL\s0 session details for a +connection: \fB\s-1SSL_CIPHER\s0\fRs, client and server certificates, keys, etc. +.IP "\fB\s-1SSL\s0\fR (\s-1SSL\s0 Connection)" 4 +.IX Item "SSL (SSL Connection)" +This is the main \s-1SSL/TLS\s0 structure which is created by a server or client per +established connection. This actually is the core structure in the \s-1SSL API.\s0 +At run-time the application usually deals with this structure which has +links to mostly all other structures. +.SH "HEADER FILES" +.IX Header "HEADER FILES" +Currently the OpenSSL \fBssl\fR library provides the following C header files +containing the prototypes for the data structures and functions: +.IP "\fBssl.h\fR" 4 +.IX Item "ssl.h" +This is the common header file for the \s-1SSL/TLS API.\s0 Include it into your +program to make the \s-1API\s0 of the \fBssl\fR library available. It internally +includes both more private \s-1SSL\s0 headers and headers from the \fBcrypto\fR library. +Whenever you need hard-core details on the internals of the \s-1SSL API,\s0 look +inside this header file. +.IP "\fBssl2.h\fR" 4 +.IX Item "ssl2.h" +Unused. Present for backwards compatibility only. +.IP "\fBssl3.h\fR" 4 +.IX Item "ssl3.h" +This is the sub header file dealing with the SSLv3 protocol only. +\&\fIUsually you don't have to include it explicitly because +it's already included by ssl.h\fR. +.IP "\fBtls1.h\fR" 4 +.IX Item "tls1.h" +This is the sub header file dealing with the TLSv1 protocol only. +\&\fIUsually you don't have to include it explicitly because +it's already included by ssl.h\fR. +.SH "API FUNCTIONS" +.IX Header "API FUNCTIONS" +Currently the OpenSSL \fBssl\fR library exports 214 \s-1API\s0 functions. +They are documented in the following: +.SS "Dealing with Protocol Methods" +.IX Subsection "Dealing with Protocol Methods" +Here we document the various \s-1API\s0 functions which deal with the \s-1SSL/TLS\s0 +protocol methods defined in \fB\s-1SSL_METHOD\s0\fR structures. +.IP "const \s-1SSL_METHOD\s0 *\fBTLS_method\fR(void);" 4 +.IX Item "const SSL_METHOD *TLS_method(void);" +Constructor for the \fIversion-flexible\fR \s-1SSL_METHOD\s0 structure for clients, +servers or both. +See \fBSSL_CTX_new\fR\|(3) for details. +.IP "const \s-1SSL_METHOD\s0 *\fBTLS_client_method\fR(void);" 4 +.IX Item "const SSL_METHOD *TLS_client_method(void);" +Constructor for the \fIversion-flexible\fR \s-1SSL_METHOD\s0 structure for clients. +Must be used to support the TLSv1.3 protocol. +.IP "const \s-1SSL_METHOD\s0 *\fBTLS_server_method\fR(void);" 4 +.IX Item "const SSL_METHOD *TLS_server_method(void);" +Constructor for the \fIversion-flexible\fR \s-1SSL_METHOD\s0 structure for servers. +Must be used to support the TLSv1.3 protocol. +.IP "const \s-1SSL_METHOD\s0 *\fBTLSv1_2_method\fR(void);" 4 +.IX Item "const SSL_METHOD *TLSv1_2_method(void);" +Constructor for the TLSv1.2 \s-1SSL_METHOD\s0 structure for clients, servers or both. +.IP "const \s-1SSL_METHOD\s0 *\fBTLSv1_2_client_method\fR(void);" 4 +.IX Item "const SSL_METHOD *TLSv1_2_client_method(void);" +Constructor for the TLSv1.2 \s-1SSL_METHOD\s0 structure for clients. +.IP "const \s-1SSL_METHOD\s0 *\fBTLSv1_2_server_method\fR(void);" 4 +.IX Item "const SSL_METHOD *TLSv1_2_server_method(void);" +Constructor for the TLSv1.2 \s-1SSL_METHOD\s0 structure for servers. +.IP "const \s-1SSL_METHOD\s0 *\fBTLSv1_1_method\fR(void);" 4 +.IX Item "const SSL_METHOD *TLSv1_1_method(void);" +Constructor for the TLSv1.1 \s-1SSL_METHOD\s0 structure for clients, servers or both. +.IP "const \s-1SSL_METHOD\s0 *\fBTLSv1_1_client_method\fR(void);" 4 +.IX Item "const SSL_METHOD *TLSv1_1_client_method(void);" +Constructor for the TLSv1.1 \s-1SSL_METHOD\s0 structure for clients. +.IP "const \s-1SSL_METHOD\s0 *\fBTLSv1_1_server_method\fR(void);" 4 +.IX Item "const SSL_METHOD *TLSv1_1_server_method(void);" +Constructor for the TLSv1.1 \s-1SSL_METHOD\s0 structure for servers. +.IP "const \s-1SSL_METHOD\s0 *\fBTLSv1_method\fR(void);" 4 +.IX Item "const SSL_METHOD *TLSv1_method(void);" +Constructor for the TLSv1 \s-1SSL_METHOD\s0 structure for clients, servers or both. +.IP "const \s-1SSL_METHOD\s0 *\fBTLSv1_client_method\fR(void);" 4 +.IX Item "const SSL_METHOD *TLSv1_client_method(void);" +Constructor for the TLSv1 \s-1SSL_METHOD\s0 structure for clients. +.IP "const \s-1SSL_METHOD\s0 *\fBTLSv1_server_method\fR(void);" 4 +.IX Item "const SSL_METHOD *TLSv1_server_method(void);" +Constructor for the TLSv1 \s-1SSL_METHOD\s0 structure for servers. +.IP "const \s-1SSL_METHOD\s0 *\fBSSLv3_method\fR(void);" 4 +.IX Item "const SSL_METHOD *SSLv3_method(void);" +Constructor for the SSLv3 \s-1SSL_METHOD\s0 structure for clients, servers or both. +.IP "const \s-1SSL_METHOD\s0 *\fBSSLv3_client_method\fR(void);" 4 +.IX Item "const SSL_METHOD *SSLv3_client_method(void);" +Constructor for the SSLv3 \s-1SSL_METHOD\s0 structure for clients. +.IP "const \s-1SSL_METHOD\s0 *\fBSSLv3_server_method\fR(void);" 4 +.IX Item "const SSL_METHOD *SSLv3_server_method(void);" +Constructor for the SSLv3 \s-1SSL_METHOD\s0 structure for servers. +.SS "Dealing with Ciphers" +.IX Subsection "Dealing with Ciphers" +Here we document the various \s-1API\s0 functions which deal with the \s-1SSL/TLS\s0 +ciphers defined in \fB\s-1SSL_CIPHER\s0\fR structures. +.IP "char *\fBSSL_CIPHER_description\fR(\s-1SSL_CIPHER\s0 *cipher, char *buf, int len);" 4 +.IX Item "char *SSL_CIPHER_description(SSL_CIPHER *cipher, char *buf, int len);" +Write a string to \fIbuf\fR (with a maximum size of \fIlen\fR) containing a human +readable description of \fIcipher\fR. Returns \fIbuf\fR. +.IP "int \fBSSL_CIPHER_get_bits\fR(\s-1SSL_CIPHER\s0 *cipher, int *alg_bits);" 4 +.IX Item "int SSL_CIPHER_get_bits(SSL_CIPHER *cipher, int *alg_bits);" +Determine the number of bits in \fIcipher\fR. Because of export crippled ciphers +there are two bits: The bits the algorithm supports in general (stored to +\&\fIalg_bits\fR) and the bits which are actually used (the return value). +.IP "const char *\fBSSL_CIPHER_get_name\fR(\s-1SSL_CIPHER\s0 *cipher);" 4 +.IX Item "const char *SSL_CIPHER_get_name(SSL_CIPHER *cipher);" +Return the internal name of \fIcipher\fR as a string. These are the various +strings defined by the \fISSL3_TXT_xxx\fR and \fITLS1_TXT_xxx\fR +definitions in the header files. +.IP "const char *\fBSSL_CIPHER_get_version\fR(\s-1SSL_CIPHER\s0 *cipher);" 4 +.IX Item "const char *SSL_CIPHER_get_version(SSL_CIPHER *cipher);" +Returns a string like "\f(CW\*(C`SSLv3\*(C'\fR\*(L" or \*(R"\f(CW\*(C`TLSv1.2\*(C'\fR" which indicates the +\&\s-1SSL/TLS\s0 protocol version to which \fIcipher\fR belongs (i.e. where it was defined +in the specification the first time). +.SS "Dealing with Protocol Contexts" +.IX Subsection "Dealing with Protocol Contexts" +Here we document the various \s-1API\s0 functions which deal with the \s-1SSL/TLS\s0 +protocol context defined in the \fB\s-1SSL_CTX\s0\fR structure. +.IP "int \fBSSL_CTX_add_client_CA\fR(\s-1SSL_CTX\s0 *ctx, X509 *x);" 4 +.IX Item "int SSL_CTX_add_client_CA(SSL_CTX *ctx, X509 *x);" +.PD 0 +.IP "long \fBSSL_CTX_add_extra_chain_cert\fR(\s-1SSL_CTX\s0 *ctx, X509 *x509);" 4 +.IX Item "long SSL_CTX_add_extra_chain_cert(SSL_CTX *ctx, X509 *x509);" +.IP "int \fBSSL_CTX_add_session\fR(\s-1SSL_CTX\s0 *ctx, \s-1SSL_SESSION\s0 *c);" 4 +.IX Item "int SSL_CTX_add_session(SSL_CTX *ctx, SSL_SESSION *c);" +.IP "int \fBSSL_CTX_check_private_key\fR(const \s-1SSL_CTX\s0 *ctx);" 4 +.IX Item "int SSL_CTX_check_private_key(const SSL_CTX *ctx);" +.IP "long \fBSSL_CTX_ctrl\fR(\s-1SSL_CTX\s0 *ctx, int cmd, long larg, char *parg);" 4 +.IX Item "long SSL_CTX_ctrl(SSL_CTX *ctx, int cmd, long larg, char *parg);" +.IP "void \fBSSL_CTX_flush_sessions\fR(\s-1SSL_CTX\s0 *s, long t);" 4 +.IX Item "void SSL_CTX_flush_sessions(SSL_CTX *s, long t);" +.IP "void \fBSSL_CTX_free\fR(\s-1SSL_CTX\s0 *a);" 4 +.IX Item "void SSL_CTX_free(SSL_CTX *a);" +.IP "char *\fBSSL_CTX_get_app_data\fR(\s-1SSL_CTX\s0 *ctx);" 4 +.IX Item "char *SSL_CTX_get_app_data(SSL_CTX *ctx);" +.IP "X509_STORE *\fBSSL_CTX_get_cert_store\fR(\s-1SSL_CTX\s0 *ctx);" 4 +.IX Item "X509_STORE *SSL_CTX_get_cert_store(SSL_CTX *ctx);" +.IP "\s-1STACK\s0 *\fBSSL_CTX_get_ciphers\fR(const \s-1SSL_CTX\s0 *ctx);" 4 +.IX Item "STACK *SSL_CTX_get_ciphers(const SSL_CTX *ctx);" +.IP "\s-1STACK\s0 *\fBSSL_CTX_get_client_CA_list\fR(const \s-1SSL_CTX\s0 *ctx);" 4 +.IX Item "STACK *SSL_CTX_get_client_CA_list(const SSL_CTX *ctx);" +.IP "int (*\fBSSL_CTX_get_client_cert_cb\fR(\s-1SSL_CTX\s0 *ctx))(\s-1SSL\s0 *ssl, X509 **x509, \s-1EVP_PKEY\s0 **pkey);" 4 +.IX Item "int (*SSL_CTX_get_client_cert_cb(SSL_CTX *ctx))(SSL *ssl, X509 **x509, EVP_PKEY **pkey);" +.IP "void \fBSSL_CTX_get_default_read_ahead\fR(\s-1SSL_CTX\s0 *ctx);" 4 +.IX Item "void SSL_CTX_get_default_read_ahead(SSL_CTX *ctx);" +.IP "char *\fBSSL_CTX_get_ex_data\fR(const \s-1SSL_CTX\s0 *s, int idx);" 4 +.IX Item "char *SSL_CTX_get_ex_data(const SSL_CTX *s, int idx);" +.IP "int \fBSSL_CTX_get_ex_new_index\fR(long argl, char *argp, int (*new_func);(void), int (*dup_func)(void), void (*free_func)(void))" 4 +.IX Item "int SSL_CTX_get_ex_new_index(long argl, char *argp, int (*new_func);(void), int (*dup_func)(void), void (*free_func)(void))" +.IP "void (*\fBSSL_CTX_get_info_callback\fR(\s-1SSL_CTX\s0 *ctx))(\s-1SSL\s0 *ssl, int cb, int ret);" 4 +.IX Item "void (*SSL_CTX_get_info_callback(SSL_CTX *ctx))(SSL *ssl, int cb, int ret);" +.IP "int \fBSSL_CTX_get_quiet_shutdown\fR(const \s-1SSL_CTX\s0 *ctx);" 4 +.IX Item "int SSL_CTX_get_quiet_shutdown(const SSL_CTX *ctx);" +.IP "void \fBSSL_CTX_get_read_ahead\fR(\s-1SSL_CTX\s0 *ctx);" 4 +.IX Item "void SSL_CTX_get_read_ahead(SSL_CTX *ctx);" +.IP "int \fBSSL_CTX_get_session_cache_mode\fR(\s-1SSL_CTX\s0 *ctx);" 4 +.IX Item "int SSL_CTX_get_session_cache_mode(SSL_CTX *ctx);" +.IP "long \fBSSL_CTX_get_timeout\fR(const \s-1SSL_CTX\s0 *ctx);" 4 +.IX Item "long SSL_CTX_get_timeout(const SSL_CTX *ctx);" +.IP "int (*\fBSSL_CTX_get_verify_callback\fR(const \s-1SSL_CTX\s0 *ctx))(int ok, X509_STORE_CTX *ctx);" 4 +.IX Item "int (*SSL_CTX_get_verify_callback(const SSL_CTX *ctx))(int ok, X509_STORE_CTX *ctx);" +.IP "int \fBSSL_CTX_get_verify_mode\fR(\s-1SSL_CTX\s0 *ctx);" 4 +.IX Item "int SSL_CTX_get_verify_mode(SSL_CTX *ctx);" +.IP "int \fBSSL_CTX_load_verify_locations\fR(\s-1SSL_CTX\s0 *ctx, const char *CAfile, const char *CApath);" 4 +.IX Item "int SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile, const char *CApath);" +.IP "\s-1SSL_CTX\s0 *\fBSSL_CTX_new\fR(const \s-1SSL_METHOD\s0 *meth);" 4 +.IX Item "SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth);" +.IP "int SSL_CTX_up_ref(\s-1SSL_CTX\s0 *ctx);" 4 +.IX Item "int SSL_CTX_up_ref(SSL_CTX *ctx);" +.IP "int \fBSSL_CTX_remove_session\fR(\s-1SSL_CTX\s0 *ctx, \s-1SSL_SESSION\s0 *c);" 4 +.IX Item "int SSL_CTX_remove_session(SSL_CTX *ctx, SSL_SESSION *c);" +.IP "int \fBSSL_CTX_sess_accept\fR(\s-1SSL_CTX\s0 *ctx);" 4 +.IX Item "int SSL_CTX_sess_accept(SSL_CTX *ctx);" +.IP "int \fBSSL_CTX_sess_accept_good\fR(\s-1SSL_CTX\s0 *ctx);" 4 +.IX Item "int SSL_CTX_sess_accept_good(SSL_CTX *ctx);" +.IP "int \fBSSL_CTX_sess_accept_renegotiate\fR(\s-1SSL_CTX\s0 *ctx);" 4 +.IX Item "int SSL_CTX_sess_accept_renegotiate(SSL_CTX *ctx);" +.IP "int \fBSSL_CTX_sess_cache_full\fR(\s-1SSL_CTX\s0 *ctx);" 4 +.IX Item "int SSL_CTX_sess_cache_full(SSL_CTX *ctx);" +.IP "int \fBSSL_CTX_sess_cb_hits\fR(\s-1SSL_CTX\s0 *ctx);" 4 +.IX Item "int SSL_CTX_sess_cb_hits(SSL_CTX *ctx);" +.IP "int \fBSSL_CTX_sess_connect\fR(\s-1SSL_CTX\s0 *ctx);" 4 +.IX Item "int SSL_CTX_sess_connect(SSL_CTX *ctx);" +.IP "int \fBSSL_CTX_sess_connect_good\fR(\s-1SSL_CTX\s0 *ctx);" 4 +.IX Item "int SSL_CTX_sess_connect_good(SSL_CTX *ctx);" +.IP "int \fBSSL_CTX_sess_connect_renegotiate\fR(\s-1SSL_CTX\s0 *ctx);" 4 +.IX Item "int SSL_CTX_sess_connect_renegotiate(SSL_CTX *ctx);" +.IP "int \fBSSL_CTX_sess_get_cache_size\fR(\s-1SSL_CTX\s0 *ctx);" 4 +.IX Item "int SSL_CTX_sess_get_cache_size(SSL_CTX *ctx);" +.IP "\s-1SSL_SESSION\s0 *(*\fBSSL_CTX_sess_get_get_cb\fR(\s-1SSL_CTX\s0 *ctx))(\s-1SSL\s0 *ssl, unsigned char *data, int len, int *copy);" 4 +.IX Item "SSL_SESSION *(*SSL_CTX_sess_get_get_cb(SSL_CTX *ctx))(SSL *ssl, unsigned char *data, int len, int *copy);" +.IP "int (*\fBSSL_CTX_sess_get_new_cb\fR(\s-1SSL_CTX\s0 *ctx)(\s-1SSL\s0 *ssl, \s-1SSL_SESSION\s0 *sess);" 4 +.IX Item "int (*SSL_CTX_sess_get_new_cb(SSL_CTX *ctx)(SSL *ssl, SSL_SESSION *sess);" +.IP "void (*\fBSSL_CTX_sess_get_remove_cb\fR(\s-1SSL_CTX\s0 *ctx)(\s-1SSL_CTX\s0 *ctx, \s-1SSL_SESSION\s0 *sess);" 4 +.IX Item "void (*SSL_CTX_sess_get_remove_cb(SSL_CTX *ctx)(SSL_CTX *ctx, SSL_SESSION *sess);" +.IP "int \fBSSL_CTX_sess_hits\fR(\s-1SSL_CTX\s0 *ctx);" 4 +.IX Item "int SSL_CTX_sess_hits(SSL_CTX *ctx);" +.IP "int \fBSSL_CTX_sess_misses\fR(\s-1SSL_CTX\s0 *ctx);" 4 +.IX Item "int SSL_CTX_sess_misses(SSL_CTX *ctx);" +.IP "int \fBSSL_CTX_sess_number\fR(\s-1SSL_CTX\s0 *ctx);" 4 +.IX Item "int SSL_CTX_sess_number(SSL_CTX *ctx);" +.IP "void \fBSSL_CTX_sess_set_cache_size\fR(\s-1SSL_CTX\s0 *ctx, t);" 4 +.IX Item "void SSL_CTX_sess_set_cache_size(SSL_CTX *ctx, t);" +.IP "void \fBSSL_CTX_sess_set_get_cb\fR(\s-1SSL_CTX\s0 *ctx, \s-1SSL_SESSION\s0 *(*cb)(\s-1SSL\s0 *ssl, unsigned char *data, int len, int *copy));" 4 +.IX Item "void SSL_CTX_sess_set_get_cb(SSL_CTX *ctx, SSL_SESSION *(*cb)(SSL *ssl, unsigned char *data, int len, int *copy));" +.IP "void \fBSSL_CTX_sess_set_new_cb\fR(\s-1SSL_CTX\s0 *ctx, int (*cb)(\s-1SSL\s0 *ssl, \s-1SSL_SESSION\s0 *sess));" 4 +.IX Item "void SSL_CTX_sess_set_new_cb(SSL_CTX *ctx, int (*cb)(SSL *ssl, SSL_SESSION *sess));" +.IP "void \fBSSL_CTX_sess_set_remove_cb\fR(\s-1SSL_CTX\s0 *ctx, void (*cb)(\s-1SSL_CTX\s0 *ctx, \s-1SSL_SESSION\s0 *sess));" 4 +.IX Item "void SSL_CTX_sess_set_remove_cb(SSL_CTX *ctx, void (*cb)(SSL_CTX *ctx, SSL_SESSION *sess));" +.IP "int \fBSSL_CTX_sess_timeouts\fR(\s-1SSL_CTX\s0 *ctx);" 4 +.IX Item "int SSL_CTX_sess_timeouts(SSL_CTX *ctx);" +.IP "\s-1LHASH\s0 *\fBSSL_CTX_sessions\fR(\s-1SSL_CTX\s0 *ctx);" 4 +.IX Item "LHASH *SSL_CTX_sessions(SSL_CTX *ctx);" +.IP "int \fBSSL_CTX_set_app_data\fR(\s-1SSL_CTX\s0 *ctx, void *arg);" 4 +.IX Item "int SSL_CTX_set_app_data(SSL_CTX *ctx, void *arg);" +.IP "void \fBSSL_CTX_set_cert_store\fR(\s-1SSL_CTX\s0 *ctx, X509_STORE *cs);" 4 +.IX Item "void SSL_CTX_set_cert_store(SSL_CTX *ctx, X509_STORE *cs);" +.IP "void \fBSSL_CTX_set1_cert_store\fR(\s-1SSL_CTX\s0 *ctx, X509_STORE *cs);" 4 +.IX Item "void SSL_CTX_set1_cert_store(SSL_CTX *ctx, X509_STORE *cs);" +.IP "void \fBSSL_CTX_set_cert_verify_cb\fR(\s-1SSL_CTX\s0 *ctx, int (*cb)(), char *arg)" 4 +.IX Item "void SSL_CTX_set_cert_verify_cb(SSL_CTX *ctx, int (*cb)(), char *arg)" +.IP "int \fBSSL_CTX_set_cipher_list\fR(\s-1SSL_CTX\s0 *ctx, char *str);" 4 +.IX Item "int SSL_CTX_set_cipher_list(SSL_CTX *ctx, char *str);" +.IP "void \fBSSL_CTX_set_client_CA_list\fR(\s-1SSL_CTX\s0 *ctx, \s-1STACK\s0 *list);" 4 +.IX Item "void SSL_CTX_set_client_CA_list(SSL_CTX *ctx, STACK *list);" +.IP "void \fBSSL_CTX_set_client_cert_cb\fR(\s-1SSL_CTX\s0 *ctx, int (*cb)(\s-1SSL\s0 *ssl, X509 **x509, \s-1EVP_PKEY\s0 **pkey));" 4 +.IX Item "void SSL_CTX_set_client_cert_cb(SSL_CTX *ctx, int (*cb)(SSL *ssl, X509 **x509, EVP_PKEY **pkey));" +.IP "int \fBSSL_CTX_set_ct_validation_callback\fR(\s-1SSL_CTX\s0 *ctx, ssl_ct_validation_cb callback, void *arg);" 4 +.IX Item "int SSL_CTX_set_ct_validation_callback(SSL_CTX *ctx, ssl_ct_validation_cb callback, void *arg);" +.IP "void \fBSSL_CTX_set_default_passwd_cb\fR(\s-1SSL_CTX\s0 *ctx, int (*cb);(void))" 4 +.IX Item "void SSL_CTX_set_default_passwd_cb(SSL_CTX *ctx, int (*cb);(void))" +.IP "void \fBSSL_CTX_set_default_read_ahead\fR(\s-1SSL_CTX\s0 *ctx, int m);" 4 +.IX Item "void SSL_CTX_set_default_read_ahead(SSL_CTX *ctx, int m);" +.IP "int \fBSSL_CTX_set_default_verify_paths\fR(\s-1SSL_CTX\s0 *ctx);" 4 +.IX Item "int SSL_CTX_set_default_verify_paths(SSL_CTX *ctx);" +.PD +Use the default paths to locate trusted \s-1CA\s0 certificates. There is one default +directory path and one default file path. Both are set via this call. +.IP "int \fBSSL_CTX_set_default_verify_dir\fR(\s-1SSL_CTX\s0 *ctx)" 4 +.IX Item "int SSL_CTX_set_default_verify_dir(SSL_CTX *ctx)" +Use the default directory path to locate trusted \s-1CA\s0 certificates. +.IP "int \fBSSL_CTX_set_default_verify_file\fR(\s-1SSL_CTX\s0 *ctx)" 4 +.IX Item "int SSL_CTX_set_default_verify_file(SSL_CTX *ctx)" +Use the file path to locate trusted \s-1CA\s0 certificates. +.IP "int \fBSSL_CTX_set_ex_data\fR(\s-1SSL_CTX\s0 *s, int idx, char *arg);" 4 +.IX Item "int SSL_CTX_set_ex_data(SSL_CTX *s, int idx, char *arg);" +.PD 0 +.IP "void \fBSSL_CTX_set_info_callback\fR(\s-1SSL_CTX\s0 *ctx, void (*cb)(\s-1SSL\s0 *ssl, int cb, int ret));" 4 +.IX Item "void SSL_CTX_set_info_callback(SSL_CTX *ctx, void (*cb)(SSL *ssl, int cb, int ret));" +.IP "void \fBSSL_CTX_set_msg_callback\fR(\s-1SSL_CTX\s0 *ctx, void (*cb)(int write_p, int version, int content_type, const void *buf, size_t len, \s-1SSL\s0 *ssl, void *arg));" 4 +.IX Item "void SSL_CTX_set_msg_callback(SSL_CTX *ctx, void (*cb)(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg));" +.IP "void \fBSSL_CTX_set_msg_callback_arg\fR(\s-1SSL_CTX\s0 *ctx, void *arg);" 4 +.IX Item "void SSL_CTX_set_msg_callback_arg(SSL_CTX *ctx, void *arg);" +.IP "unsigned long \fBSSL_CTX_clear_options\fR(\s-1SSL_CTX\s0 *ctx, unsigned long op);" 4 +.IX Item "unsigned long SSL_CTX_clear_options(SSL_CTX *ctx, unsigned long op);" +.IP "unsigned long \fBSSL_CTX_get_options\fR(\s-1SSL_CTX\s0 *ctx);" 4 +.IX Item "unsigned long SSL_CTX_get_options(SSL_CTX *ctx);" +.IP "unsigned long \fBSSL_CTX_set_options\fR(\s-1SSL_CTX\s0 *ctx, unsigned long op);" 4 +.IX Item "unsigned long SSL_CTX_set_options(SSL_CTX *ctx, unsigned long op);" +.IP "void \fBSSL_CTX_set_quiet_shutdown\fR(\s-1SSL_CTX\s0 *ctx, int mode);" 4 +.IX Item "void SSL_CTX_set_quiet_shutdown(SSL_CTX *ctx, int mode);" +.IP "void \fBSSL_CTX_set_read_ahead\fR(\s-1SSL_CTX\s0 *ctx, int m);" 4 +.IX Item "void SSL_CTX_set_read_ahead(SSL_CTX *ctx, int m);" +.IP "void \fBSSL_CTX_set_session_cache_mode\fR(\s-1SSL_CTX\s0 *ctx, int mode);" 4 +.IX Item "void SSL_CTX_set_session_cache_mode(SSL_CTX *ctx, int mode);" +.IP "int \fBSSL_CTX_set_ssl_version\fR(\s-1SSL_CTX\s0 *ctx, const \s-1SSL_METHOD\s0 *meth);" 4 +.IX Item "int SSL_CTX_set_ssl_version(SSL_CTX *ctx, const SSL_METHOD *meth);" +.IP "void \fBSSL_CTX_set_timeout\fR(\s-1SSL_CTX\s0 *ctx, long t);" 4 +.IX Item "void SSL_CTX_set_timeout(SSL_CTX *ctx, long t);" +.IP "long \fBSSL_CTX_set_tmp_dh\fR(SSL_CTX* ctx, \s-1DH\s0 *dh);" 4 +.IX Item "long SSL_CTX_set_tmp_dh(SSL_CTX* ctx, DH *dh);" +.IP "long \fBSSL_CTX_set_tmp_dh_callback\fR(\s-1SSL_CTX\s0 *ctx, \s-1DH\s0 *(*cb)(void));" 4 +.IX Item "long SSL_CTX_set_tmp_dh_callback(SSL_CTX *ctx, DH *(*cb)(void));" +.IP "void \fBSSL_CTX_set_verify\fR(\s-1SSL_CTX\s0 *ctx, int mode, int (*cb);(void))" 4 +.IX Item "void SSL_CTX_set_verify(SSL_CTX *ctx, int mode, int (*cb);(void))" +.IP "int \fBSSL_CTX_use_PrivateKey\fR(\s-1SSL_CTX\s0 *ctx, \s-1EVP_PKEY\s0 *pkey);" 4 +.IX Item "int SSL_CTX_use_PrivateKey(SSL_CTX *ctx, EVP_PKEY *pkey);" +.IP "int \fBSSL_CTX_use_PrivateKey_ASN1\fR(int type, \s-1SSL_CTX\s0 *ctx, unsigned char *d, long len);" 4 +.IX Item "int SSL_CTX_use_PrivateKey_ASN1(int type, SSL_CTX *ctx, unsigned char *d, long len);" +.IP "int \fBSSL_CTX_use_PrivateKey_file\fR(\s-1SSL_CTX\s0 *ctx, const char *file, int type);" 4 +.IX Item "int SSL_CTX_use_PrivateKey_file(SSL_CTX *ctx, const char *file, int type);" +.IP "int \fBSSL_CTX_use_RSAPrivateKey\fR(\s-1SSL_CTX\s0 *ctx, \s-1RSA\s0 *rsa);" 4 +.IX Item "int SSL_CTX_use_RSAPrivateKey(SSL_CTX *ctx, RSA *rsa);" +.IP "int \fBSSL_CTX_use_RSAPrivateKey_ASN1\fR(\s-1SSL_CTX\s0 *ctx, unsigned char *d, long len);" 4 +.IX Item "int SSL_CTX_use_RSAPrivateKey_ASN1(SSL_CTX *ctx, unsigned char *d, long len);" +.IP "int \fBSSL_CTX_use_RSAPrivateKey_file\fR(\s-1SSL_CTX\s0 *ctx, const char *file, int type);" 4 +.IX Item "int SSL_CTX_use_RSAPrivateKey_file(SSL_CTX *ctx, const char *file, int type);" +.IP "int \fBSSL_CTX_use_certificate\fR(\s-1SSL_CTX\s0 *ctx, X509 *x);" 4 +.IX Item "int SSL_CTX_use_certificate(SSL_CTX *ctx, X509 *x);" +.IP "int \fBSSL_CTX_use_certificate_ASN1\fR(\s-1SSL_CTX\s0 *ctx, int len, unsigned char *d);" 4 +.IX Item "int SSL_CTX_use_certificate_ASN1(SSL_CTX *ctx, int len, unsigned char *d);" +.IP "int \fBSSL_CTX_use_certificate_file\fR(\s-1SSL_CTX\s0 *ctx, const char *file, int type);" 4 +.IX Item "int SSL_CTX_use_certificate_file(SSL_CTX *ctx, const char *file, int type);" +.IP "int \fBSSL_CTX_use_cert_and_key\fR(\s-1SSL_CTX\s0 *ctx, X509 *x, \s-1EVP_PKEY\s0 *pkey, \s-1STACK_OF\s0(X509) *chain, int override);" 4 +.IX Item "int SSL_CTX_use_cert_and_key(SSL_CTX *ctx, X509 *x, EVP_PKEY *pkey, STACK_OF(X509) *chain, int override);" +.IP "X509 *\fBSSL_CTX_get0_certificate\fR(const \s-1SSL_CTX\s0 *ctx);" 4 +.IX Item "X509 *SSL_CTX_get0_certificate(const SSL_CTX *ctx);" +.IP "\s-1EVP_PKEY\s0 *\fBSSL_CTX_get0_privatekey\fR(const \s-1SSL_CTX\s0 *ctx);" 4 +.IX Item "EVP_PKEY *SSL_CTX_get0_privatekey(const SSL_CTX *ctx);" +.IP "void \fBSSL_CTX_set_psk_client_callback\fR(\s-1SSL_CTX\s0 *ctx, unsigned int (*callback)(\s-1SSL\s0 *ssl, const char *hint, char *identity, unsigned int max_identity_len, unsigned char *psk, unsigned int max_psk_len));" 4 +.IX Item "void SSL_CTX_set_psk_client_callback(SSL_CTX *ctx, unsigned int (*callback)(SSL *ssl, const char *hint, char *identity, unsigned int max_identity_len, unsigned char *psk, unsigned int max_psk_len));" +.IP "int \fBSSL_CTX_use_psk_identity_hint\fR(\s-1SSL_CTX\s0 *ctx, const char *hint);" 4 +.IX Item "int SSL_CTX_use_psk_identity_hint(SSL_CTX *ctx, const char *hint);" +.IP "void \fBSSL_CTX_set_psk_server_callback\fR(\s-1SSL_CTX\s0 *ctx, unsigned int (*callback)(\s-1SSL\s0 *ssl, const char *identity, unsigned char *psk, int max_psk_len));" 4 +.IX Item "void SSL_CTX_set_psk_server_callback(SSL_CTX *ctx, unsigned int (*callback)(SSL *ssl, const char *identity, unsigned char *psk, int max_psk_len));" +.PD +.SS "Dealing with Sessions" +.IX Subsection "Dealing with Sessions" +Here we document the various \s-1API\s0 functions which deal with the \s-1SSL/TLS\s0 +sessions defined in the \fB\s-1SSL_SESSION\s0\fR structures. +.IP "int \fBSSL_SESSION_cmp\fR(const \s-1SSL_SESSION\s0 *a, const \s-1SSL_SESSION\s0 *b);" 4 +.IX Item "int SSL_SESSION_cmp(const SSL_SESSION *a, const SSL_SESSION *b);" +.PD 0 +.IP "void \fBSSL_SESSION_free\fR(\s-1SSL_SESSION\s0 *ss);" 4 +.IX Item "void SSL_SESSION_free(SSL_SESSION *ss);" +.IP "char *\fBSSL_SESSION_get_app_data\fR(\s-1SSL_SESSION\s0 *s);" 4 +.IX Item "char *SSL_SESSION_get_app_data(SSL_SESSION *s);" +.IP "char *\fBSSL_SESSION_get_ex_data\fR(const \s-1SSL_SESSION\s0 *s, int idx);" 4 +.IX Item "char *SSL_SESSION_get_ex_data(const SSL_SESSION *s, int idx);" +.IP "int \fBSSL_SESSION_get_ex_new_index\fR(long argl, char *argp, int (*new_func);(void), int (*dup_func)(void), void (*free_func)(void))" 4 +.IX Item "int SSL_SESSION_get_ex_new_index(long argl, char *argp, int (*new_func);(void), int (*dup_func)(void), void (*free_func)(void))" +.IP "long \fBSSL_SESSION_get_time\fR(const \s-1SSL_SESSION\s0 *s);" 4 +.IX Item "long SSL_SESSION_get_time(const SSL_SESSION *s);" +.IP "long \fBSSL_SESSION_get_timeout\fR(const \s-1SSL_SESSION\s0 *s);" 4 +.IX Item "long SSL_SESSION_get_timeout(const SSL_SESSION *s);" +.IP "unsigned long \fBSSL_SESSION_hash\fR(const \s-1SSL_SESSION\s0 *a);" 4 +.IX Item "unsigned long SSL_SESSION_hash(const SSL_SESSION *a);" +.IP "\s-1SSL_SESSION\s0 *\fBSSL_SESSION_new\fR(void);" 4 +.IX Item "SSL_SESSION *SSL_SESSION_new(void);" +.IP "int \fBSSL_SESSION_print\fR(\s-1BIO\s0 *bp, const \s-1SSL_SESSION\s0 *x);" 4 +.IX Item "int SSL_SESSION_print(BIO *bp, const SSL_SESSION *x);" +.IP "int \fBSSL_SESSION_print_fp\fR(\s-1FILE\s0 *fp, const \s-1SSL_SESSION\s0 *x);" 4 +.IX Item "int SSL_SESSION_print_fp(FILE *fp, const SSL_SESSION *x);" +.IP "int \fBSSL_SESSION_set_app_data\fR(\s-1SSL_SESSION\s0 *s, char *a);" 4 +.IX Item "int SSL_SESSION_set_app_data(SSL_SESSION *s, char *a);" +.IP "int \fBSSL_SESSION_set_ex_data\fR(\s-1SSL_SESSION\s0 *s, int idx, char *arg);" 4 +.IX Item "int SSL_SESSION_set_ex_data(SSL_SESSION *s, int idx, char *arg);" +.IP "long \fBSSL_SESSION_set_time\fR(\s-1SSL_SESSION\s0 *s, long t);" 4 +.IX Item "long SSL_SESSION_set_time(SSL_SESSION *s, long t);" +.IP "long \fBSSL_SESSION_set_timeout\fR(\s-1SSL_SESSION\s0 *s, long t);" 4 +.IX Item "long SSL_SESSION_set_timeout(SSL_SESSION *s, long t);" +.PD +.SS "Dealing with Connections" +.IX Subsection "Dealing with Connections" +Here we document the various \s-1API\s0 functions which deal with the \s-1SSL/TLS\s0 +connection defined in the \fB\s-1SSL\s0\fR structure. +.IP "int \fBSSL_accept\fR(\s-1SSL\s0 *ssl);" 4 +.IX Item "int SSL_accept(SSL *ssl);" +.PD 0 +.IP "int \fBSSL_add_dir_cert_subjects_to_stack\fR(\s-1STACK\s0 *stack, const char *dir);" 4 +.IX Item "int SSL_add_dir_cert_subjects_to_stack(STACK *stack, const char *dir);" +.IP "int \fBSSL_add_file_cert_subjects_to_stack\fR(\s-1STACK\s0 *stack, const char *file);" 4 +.IX Item "int SSL_add_file_cert_subjects_to_stack(STACK *stack, const char *file);" +.IP "int \fBSSL_add_client_CA\fR(\s-1SSL\s0 *ssl, X509 *x);" 4 +.IX Item "int SSL_add_client_CA(SSL *ssl, X509 *x);" +.IP "char *\fBSSL_alert_desc_string\fR(int value);" 4 +.IX Item "char *SSL_alert_desc_string(int value);" +.IP "char *\fBSSL_alert_desc_string_long\fR(int value);" 4 +.IX Item "char *SSL_alert_desc_string_long(int value);" +.IP "char *\fBSSL_alert_type_string\fR(int value);" 4 +.IX Item "char *SSL_alert_type_string(int value);" +.IP "char *\fBSSL_alert_type_string_long\fR(int value);" 4 +.IX Item "char *SSL_alert_type_string_long(int value);" +.IP "int \fBSSL_check_private_key\fR(const \s-1SSL\s0 *ssl);" 4 +.IX Item "int SSL_check_private_key(const SSL *ssl);" +.IP "void \fBSSL_clear\fR(\s-1SSL\s0 *ssl);" 4 +.IX Item "void SSL_clear(SSL *ssl);" +.IP "long \fBSSL_clear_num_renegotiations\fR(\s-1SSL\s0 *ssl);" 4 +.IX Item "long SSL_clear_num_renegotiations(SSL *ssl);" +.IP "int \fBSSL_connect\fR(\s-1SSL\s0 *ssl);" 4 +.IX Item "int SSL_connect(SSL *ssl);" +.IP "int \fBSSL_copy_session_id\fR(\s-1SSL\s0 *t, const \s-1SSL\s0 *f);" 4 +.IX Item "int SSL_copy_session_id(SSL *t, const SSL *f);" +.PD +Sets the session details for \fBt\fR to be the same as in \fBf\fR. Returns 1 on +success or 0 on failure. +.IP "long \fBSSL_ctrl\fR(\s-1SSL\s0 *ssl, int cmd, long larg, char *parg);" 4 +.IX Item "long SSL_ctrl(SSL *ssl, int cmd, long larg, char *parg);" +.PD 0 +.IP "int \fBSSL_do_handshake\fR(\s-1SSL\s0 *ssl);" 4 +.IX Item "int SSL_do_handshake(SSL *ssl);" +.IP "\s-1SSL\s0 *\fBSSL_dup\fR(\s-1SSL\s0 *ssl);" 4 +.IX Item "SSL *SSL_dup(SSL *ssl);" +.PD +\&\fBSSL_dup()\fR allows applications to configure an \s-1SSL\s0 handle for use +in multiple \s-1SSL\s0 connections, and then duplicate it prior to initiating +each connection with the duplicated handle. +Use of \fBSSL_dup()\fR avoids the need to repeat the configuration of the +handles for each connection. +.Sp +For \fBSSL_dup()\fR to work, the connection \s-1MUST\s0 be in its initial state +and \s-1MUST NOT\s0 have not yet have started the \s-1SSL\s0 handshake. +For connections that are not in their initial state \fBSSL_dup()\fR just +increments an internal reference count and returns the \fIsame\fR +handle. +It may be possible to use \fBSSL_clear\fR\|(3) to recycle an \s-1SSL\s0 handle +that is not in its initial state for re-use, but this is best +avoided. +Instead, save and restore the session, if desired, and construct a +fresh handle for each connection. +.IP "\s-1STACK\s0 *\fBSSL_dup_CA_list\fR(\s-1STACK\s0 *sk);" 4 +.IX Item "STACK *SSL_dup_CA_list(STACK *sk);" +.PD 0 +.IP "void \fBSSL_free\fR(\s-1SSL\s0 *ssl);" 4 +.IX Item "void SSL_free(SSL *ssl);" +.IP "\s-1SSL_CTX\s0 *\fBSSL_get_SSL_CTX\fR(const \s-1SSL\s0 *ssl);" 4 +.IX Item "SSL_CTX *SSL_get_SSL_CTX(const SSL *ssl);" +.IP "char *\fBSSL_get_app_data\fR(\s-1SSL\s0 *ssl);" 4 +.IX Item "char *SSL_get_app_data(SSL *ssl);" +.IP "X509 *\fBSSL_get_certificate\fR(const \s-1SSL\s0 *ssl);" 4 +.IX Item "X509 *SSL_get_certificate(const SSL *ssl);" +.IP "const char *\fBSSL_get_cipher\fR(const \s-1SSL\s0 *ssl);" 4 +.IX Item "const char *SSL_get_cipher(const SSL *ssl);" +.IP "int \fBSSL_is_dtls\fR(const \s-1SSL\s0 *ssl);" 4 +.IX Item "int SSL_is_dtls(const SSL *ssl);" +.IP "int \fBSSL_get_cipher_bits\fR(const \s-1SSL\s0 *ssl, int *alg_bits);" 4 +.IX Item "int SSL_get_cipher_bits(const SSL *ssl, int *alg_bits);" +.IP "char *\fBSSL_get_cipher_list\fR(const \s-1SSL\s0 *ssl, int n);" 4 +.IX Item "char *SSL_get_cipher_list(const SSL *ssl, int n);" +.IP "char *\fBSSL_get_cipher_name\fR(const \s-1SSL\s0 *ssl);" 4 +.IX Item "char *SSL_get_cipher_name(const SSL *ssl);" +.IP "char *\fBSSL_get_cipher_version\fR(const \s-1SSL\s0 *ssl);" 4 +.IX Item "char *SSL_get_cipher_version(const SSL *ssl);" +.IP "\s-1STACK\s0 *\fBSSL_get_ciphers\fR(const \s-1SSL\s0 *ssl);" 4 +.IX Item "STACK *SSL_get_ciphers(const SSL *ssl);" +.IP "\s-1STACK\s0 *\fBSSL_get_client_CA_list\fR(const \s-1SSL\s0 *ssl);" 4 +.IX Item "STACK *SSL_get_client_CA_list(const SSL *ssl);" +.IP "\s-1SSL_CIPHER\s0 *\fBSSL_get_current_cipher\fR(\s-1SSL\s0 *ssl);" 4 +.IX Item "SSL_CIPHER *SSL_get_current_cipher(SSL *ssl);" +.IP "long \fBSSL_get_default_timeout\fR(const \s-1SSL\s0 *ssl);" 4 +.IX Item "long SSL_get_default_timeout(const SSL *ssl);" +.IP "int \fBSSL_get_error\fR(const \s-1SSL\s0 *ssl, int i);" 4 +.IX Item "int SSL_get_error(const SSL *ssl, int i);" +.IP "char *\fBSSL_get_ex_data\fR(const \s-1SSL\s0 *ssl, int idx);" 4 +.IX Item "char *SSL_get_ex_data(const SSL *ssl, int idx);" +.IP "int \fBSSL_get_ex_data_X509_STORE_CTX_idx\fR(void);" 4 +.IX Item "int SSL_get_ex_data_X509_STORE_CTX_idx(void);" +.IP "int \fBSSL_get_ex_new_index\fR(long argl, char *argp, int (*new_func);(void), int (*dup_func)(void), void (*free_func)(void))" 4 +.IX Item "int SSL_get_ex_new_index(long argl, char *argp, int (*new_func);(void), int (*dup_func)(void), void (*free_func)(void))" +.IP "int \fBSSL_get_fd\fR(const \s-1SSL\s0 *ssl);" 4 +.IX Item "int SSL_get_fd(const SSL *ssl);" +.IP "void (*\fBSSL_get_info_callback\fR(const \s-1SSL\s0 *ssl);)()" 4 +.IX Item "void (*SSL_get_info_callback(const SSL *ssl);)()" +.IP "int \fBSSL_get_key_update_type\fR(\s-1SSL\s0 *s);" 4 +.IX Item "int SSL_get_key_update_type(SSL *s);" +.IP "\s-1STACK\s0 *\fBSSL_get_peer_cert_chain\fR(const \s-1SSL\s0 *ssl);" 4 +.IX Item "STACK *SSL_get_peer_cert_chain(const SSL *ssl);" +.IP "X509 *\fBSSL_get_peer_certificate\fR(const \s-1SSL\s0 *ssl);" 4 +.IX Item "X509 *SSL_get_peer_certificate(const SSL *ssl);" +.IP "const \s-1STACK_OF\s0(\s-1SCT\s0) *\fBSSL_get0_peer_scts\fR(\s-1SSL\s0 *s);" 4 +.IX Item "const STACK_OF(SCT) *SSL_get0_peer_scts(SSL *s);" +.IP "\s-1EVP_PKEY\s0 *\fBSSL_get_privatekey\fR(const \s-1SSL\s0 *ssl);" 4 +.IX Item "EVP_PKEY *SSL_get_privatekey(const SSL *ssl);" +.IP "int \fBSSL_get_quiet_shutdown\fR(const \s-1SSL\s0 *ssl);" 4 +.IX Item "int SSL_get_quiet_shutdown(const SSL *ssl);" +.IP "\s-1BIO\s0 *\fBSSL_get_rbio\fR(const \s-1SSL\s0 *ssl);" 4 +.IX Item "BIO *SSL_get_rbio(const SSL *ssl);" +.IP "int \fBSSL_get_read_ahead\fR(const \s-1SSL\s0 *ssl);" 4 +.IX Item "int SSL_get_read_ahead(const SSL *ssl);" +.IP "\s-1SSL_SESSION\s0 *\fBSSL_get_session\fR(const \s-1SSL\s0 *ssl);" 4 +.IX Item "SSL_SESSION *SSL_get_session(const SSL *ssl);" +.IP "char *\fBSSL_get_shared_ciphers\fR(const \s-1SSL\s0 *ssl, char *buf, int size);" 4 +.IX Item "char *SSL_get_shared_ciphers(const SSL *ssl, char *buf, int size);" +.IP "int \fBSSL_get_shutdown\fR(const \s-1SSL\s0 *ssl);" 4 +.IX Item "int SSL_get_shutdown(const SSL *ssl);" +.IP "const \s-1SSL_METHOD\s0 *\fBSSL_get_ssl_method\fR(\s-1SSL\s0 *ssl);" 4 +.IX Item "const SSL_METHOD *SSL_get_ssl_method(SSL *ssl);" +.IP "int \fBSSL_get_state\fR(const \s-1SSL\s0 *ssl);" 4 +.IX Item "int SSL_get_state(const SSL *ssl);" +.IP "long \fBSSL_get_time\fR(const \s-1SSL\s0 *ssl);" 4 +.IX Item "long SSL_get_time(const SSL *ssl);" +.IP "long \fBSSL_get_timeout\fR(const \s-1SSL\s0 *ssl);" 4 +.IX Item "long SSL_get_timeout(const SSL *ssl);" +.IP "int (*\fBSSL_get_verify_callback\fR(const \s-1SSL\s0 *ssl))(int, X509_STORE_CTX *)" 4 +.IX Item "int (*SSL_get_verify_callback(const SSL *ssl))(int, X509_STORE_CTX *)" +.IP "int \fBSSL_get_verify_mode\fR(const \s-1SSL\s0 *ssl);" 4 +.IX Item "int SSL_get_verify_mode(const SSL *ssl);" +.IP "long \fBSSL_get_verify_result\fR(const \s-1SSL\s0 *ssl);" 4 +.IX Item "long SSL_get_verify_result(const SSL *ssl);" +.IP "char *\fBSSL_get_version\fR(const \s-1SSL\s0 *ssl);" 4 +.IX Item "char *SSL_get_version(const SSL *ssl);" +.IP "\s-1BIO\s0 *\fBSSL_get_wbio\fR(const \s-1SSL\s0 *ssl);" 4 +.IX Item "BIO *SSL_get_wbio(const SSL *ssl);" +.IP "int \fBSSL_in_accept_init\fR(\s-1SSL\s0 *ssl);" 4 +.IX Item "int SSL_in_accept_init(SSL *ssl);" +.IP "int \fBSSL_in_before\fR(\s-1SSL\s0 *ssl);" 4 +.IX Item "int SSL_in_before(SSL *ssl);" +.IP "int \fBSSL_in_connect_init\fR(\s-1SSL\s0 *ssl);" 4 +.IX Item "int SSL_in_connect_init(SSL *ssl);" +.IP "int \fBSSL_in_init\fR(\s-1SSL\s0 *ssl);" 4 +.IX Item "int SSL_in_init(SSL *ssl);" +.IP "int \fBSSL_is_init_finished\fR(\s-1SSL\s0 *ssl);" 4 +.IX Item "int SSL_is_init_finished(SSL *ssl);" +.IP "int \fBSSL_key_update\fR(\s-1SSL\s0 *s, int updatetype);" 4 +.IX Item "int SSL_key_update(SSL *s, int updatetype);" +.IP "\s-1STACK\s0 *\fBSSL_load_client_CA_file\fR(const char *file);" 4 +.IX Item "STACK *SSL_load_client_CA_file(const char *file);" +.IP "\s-1SSL\s0 *\fBSSL_new\fR(\s-1SSL_CTX\s0 *ctx);" 4 +.IX Item "SSL *SSL_new(SSL_CTX *ctx);" +.IP "int SSL_up_ref(\s-1SSL\s0 *s);" 4 +.IX Item "int SSL_up_ref(SSL *s);" +.IP "long \fBSSL_num_renegotiations\fR(\s-1SSL\s0 *ssl);" 4 +.IX Item "long SSL_num_renegotiations(SSL *ssl);" +.IP "int \fBSSL_peek\fR(\s-1SSL\s0 *ssl, void *buf, int num);" 4 +.IX Item "int SSL_peek(SSL *ssl, void *buf, int num);" +.IP "int \fBSSL_pending\fR(const \s-1SSL\s0 *ssl);" 4 +.IX Item "int SSL_pending(const SSL *ssl);" +.IP "int \fBSSL_read\fR(\s-1SSL\s0 *ssl, void *buf, int num);" 4 +.IX Item "int SSL_read(SSL *ssl, void *buf, int num);" +.IP "int \fBSSL_renegotiate\fR(\s-1SSL\s0 *ssl);" 4 +.IX Item "int SSL_renegotiate(SSL *ssl);" +.IP "char *\fBSSL_rstate_string\fR(\s-1SSL\s0 *ssl);" 4 +.IX Item "char *SSL_rstate_string(SSL *ssl);" +.IP "char *\fBSSL_rstate_string_long\fR(\s-1SSL\s0 *ssl);" 4 +.IX Item "char *SSL_rstate_string_long(SSL *ssl);" +.IP "long \fBSSL_session_reused\fR(\s-1SSL\s0 *ssl);" 4 +.IX Item "long SSL_session_reused(SSL *ssl);" +.IP "void \fBSSL_set_accept_state\fR(\s-1SSL\s0 *ssl);" 4 +.IX Item "void SSL_set_accept_state(SSL *ssl);" +.IP "void \fBSSL_set_app_data\fR(\s-1SSL\s0 *ssl, char *arg);" 4 +.IX Item "void SSL_set_app_data(SSL *ssl, char *arg);" +.IP "void \fBSSL_set_bio\fR(\s-1SSL\s0 *ssl, \s-1BIO\s0 *rbio, \s-1BIO\s0 *wbio);" 4 +.IX Item "void SSL_set_bio(SSL *ssl, BIO *rbio, BIO *wbio);" +.IP "int \fBSSL_set_cipher_list\fR(\s-1SSL\s0 *ssl, char *str);" 4 +.IX Item "int SSL_set_cipher_list(SSL *ssl, char *str);" +.IP "void \fBSSL_set_client_CA_list\fR(\s-1SSL\s0 *ssl, \s-1STACK\s0 *list);" 4 +.IX Item "void SSL_set_client_CA_list(SSL *ssl, STACK *list);" +.IP "void \fBSSL_set_connect_state\fR(\s-1SSL\s0 *ssl);" 4 +.IX Item "void SSL_set_connect_state(SSL *ssl);" +.IP "int \fBSSL_set_ct_validation_callback\fR(\s-1SSL\s0 *ssl, ssl_ct_validation_cb callback, void *arg);" 4 +.IX Item "int SSL_set_ct_validation_callback(SSL *ssl, ssl_ct_validation_cb callback, void *arg);" +.IP "int \fBSSL_set_ex_data\fR(\s-1SSL\s0 *ssl, int idx, char *arg);" 4 +.IX Item "int SSL_set_ex_data(SSL *ssl, int idx, char *arg);" +.IP "int \fBSSL_set_fd\fR(\s-1SSL\s0 *ssl, int fd);" 4 +.IX Item "int SSL_set_fd(SSL *ssl, int fd);" +.IP "void \fBSSL_set_info_callback\fR(\s-1SSL\s0 *ssl, void (*cb);(void))" 4 +.IX Item "void SSL_set_info_callback(SSL *ssl, void (*cb);(void))" +.IP "void \fBSSL_set_msg_callback\fR(\s-1SSL\s0 *ctx, void (*cb)(int write_p, int version, int content_type, const void *buf, size_t len, \s-1SSL\s0 *ssl, void *arg));" 4 +.IX Item "void SSL_set_msg_callback(SSL *ctx, void (*cb)(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg));" +.IP "void \fBSSL_set_msg_callback_arg\fR(\s-1SSL\s0 *ctx, void *arg);" 4 +.IX Item "void SSL_set_msg_callback_arg(SSL *ctx, void *arg);" +.IP "unsigned long \fBSSL_clear_options\fR(\s-1SSL\s0 *ssl, unsigned long op);" 4 +.IX Item "unsigned long SSL_clear_options(SSL *ssl, unsigned long op);" +.IP "unsigned long \fBSSL_get_options\fR(\s-1SSL\s0 *ssl);" 4 +.IX Item "unsigned long SSL_get_options(SSL *ssl);" +.IP "unsigned long \fBSSL_set_options\fR(\s-1SSL\s0 *ssl, unsigned long op);" 4 +.IX Item "unsigned long SSL_set_options(SSL *ssl, unsigned long op);" +.IP "void \fBSSL_set_quiet_shutdown\fR(\s-1SSL\s0 *ssl, int mode);" 4 +.IX Item "void SSL_set_quiet_shutdown(SSL *ssl, int mode);" +.IP "void \fBSSL_set_read_ahead\fR(\s-1SSL\s0 *ssl, int yes);" 4 +.IX Item "void SSL_set_read_ahead(SSL *ssl, int yes);" +.IP "int \fBSSL_set_rfd\fR(\s-1SSL\s0 *ssl, int fd);" 4 +.IX Item "int SSL_set_rfd(SSL *ssl, int fd);" +.IP "int \fBSSL_set_session\fR(\s-1SSL\s0 *ssl, \s-1SSL_SESSION\s0 *session);" 4 +.IX Item "int SSL_set_session(SSL *ssl, SSL_SESSION *session);" +.IP "void \fBSSL_set_shutdown\fR(\s-1SSL\s0 *ssl, int mode);" 4 +.IX Item "void SSL_set_shutdown(SSL *ssl, int mode);" +.IP "int \fBSSL_set_ssl_method\fR(\s-1SSL\s0 *ssl, const \s-1SSL_METHOD\s0 *meth);" 4 +.IX Item "int SSL_set_ssl_method(SSL *ssl, const SSL_METHOD *meth);" +.IP "void \fBSSL_set_time\fR(\s-1SSL\s0 *ssl, long t);" 4 +.IX Item "void SSL_set_time(SSL *ssl, long t);" +.IP "void \fBSSL_set_timeout\fR(\s-1SSL\s0 *ssl, long t);" 4 +.IX Item "void SSL_set_timeout(SSL *ssl, long t);" +.IP "void \fBSSL_set_verify\fR(\s-1SSL\s0 *ssl, int mode, int (*callback);(void))" 4 +.IX Item "void SSL_set_verify(SSL *ssl, int mode, int (*callback);(void))" +.IP "void \fBSSL_set_verify_result\fR(\s-1SSL\s0 *ssl, long arg);" 4 +.IX Item "void SSL_set_verify_result(SSL *ssl, long arg);" +.IP "int \fBSSL_set_wfd\fR(\s-1SSL\s0 *ssl, int fd);" 4 +.IX Item "int SSL_set_wfd(SSL *ssl, int fd);" +.IP "int \fBSSL_shutdown\fR(\s-1SSL\s0 *ssl);" 4 +.IX Item "int SSL_shutdown(SSL *ssl);" +.IP "\s-1OSSL_HANDSHAKE_STATE\s0 \fBSSL_get_state\fR(const \s-1SSL\s0 *ssl);" 4 +.IX Item "OSSL_HANDSHAKE_STATE SSL_get_state(const SSL *ssl);" +.PD +Returns the current handshake state. +.IP "char *\fBSSL_state_string\fR(const \s-1SSL\s0 *ssl);" 4 +.IX Item "char *SSL_state_string(const SSL *ssl);" +.PD 0 +.IP "char *\fBSSL_state_string_long\fR(const \s-1SSL\s0 *ssl);" 4 +.IX Item "char *SSL_state_string_long(const SSL *ssl);" +.IP "long \fBSSL_total_renegotiations\fR(\s-1SSL\s0 *ssl);" 4 +.IX Item "long SSL_total_renegotiations(SSL *ssl);" +.IP "int \fBSSL_use_PrivateKey\fR(\s-1SSL\s0 *ssl, \s-1EVP_PKEY\s0 *pkey);" 4 +.IX Item "int SSL_use_PrivateKey(SSL *ssl, EVP_PKEY *pkey);" +.IP "int \fBSSL_use_PrivateKey_ASN1\fR(int type, \s-1SSL\s0 *ssl, unsigned char *d, long len);" 4 +.IX Item "int SSL_use_PrivateKey_ASN1(int type, SSL *ssl, unsigned char *d, long len);" +.IP "int \fBSSL_use_PrivateKey_file\fR(\s-1SSL\s0 *ssl, const char *file, int type);" 4 +.IX Item "int SSL_use_PrivateKey_file(SSL *ssl, const char *file, int type);" +.IP "int \fBSSL_use_RSAPrivateKey\fR(\s-1SSL\s0 *ssl, \s-1RSA\s0 *rsa);" 4 +.IX Item "int SSL_use_RSAPrivateKey(SSL *ssl, RSA *rsa);" +.IP "int \fBSSL_use_RSAPrivateKey_ASN1\fR(\s-1SSL\s0 *ssl, unsigned char *d, long len);" 4 +.IX Item "int SSL_use_RSAPrivateKey_ASN1(SSL *ssl, unsigned char *d, long len);" +.IP "int \fBSSL_use_RSAPrivateKey_file\fR(\s-1SSL\s0 *ssl, const char *file, int type);" 4 +.IX Item "int SSL_use_RSAPrivateKey_file(SSL *ssl, const char *file, int type);" +.IP "int \fBSSL_use_certificate\fR(\s-1SSL\s0 *ssl, X509 *x);" 4 +.IX Item "int SSL_use_certificate(SSL *ssl, X509 *x);" +.IP "int \fBSSL_use_certificate_ASN1\fR(\s-1SSL\s0 *ssl, int len, unsigned char *d);" 4 +.IX Item "int SSL_use_certificate_ASN1(SSL *ssl, int len, unsigned char *d);" +.IP "int \fBSSL_use_certificate_file\fR(\s-1SSL\s0 *ssl, const char *file, int type);" 4 +.IX Item "int SSL_use_certificate_file(SSL *ssl, const char *file, int type);" +.IP "int \fBSSL_use_cert_and_key\fR(\s-1SSL\s0 *ssl, X509 *x, \s-1EVP_PKEY\s0 *pkey, \s-1STACK_OF\s0(X509) *chain, int override);" 4 +.IX Item "int SSL_use_cert_and_key(SSL *ssl, X509 *x, EVP_PKEY *pkey, STACK_OF(X509) *chain, int override);" +.IP "int \fBSSL_version\fR(const \s-1SSL\s0 *ssl);" 4 +.IX Item "int SSL_version(const SSL *ssl);" +.IP "int \fBSSL_want\fR(const \s-1SSL\s0 *ssl);" 4 +.IX Item "int SSL_want(const SSL *ssl);" +.IP "int \fBSSL_want_nothing\fR(const \s-1SSL\s0 *ssl);" 4 +.IX Item "int SSL_want_nothing(const SSL *ssl);" +.IP "int \fBSSL_want_read\fR(const \s-1SSL\s0 *ssl);" 4 +.IX Item "int SSL_want_read(const SSL *ssl);" +.IP "int \fBSSL_want_write\fR(const \s-1SSL\s0 *ssl);" 4 +.IX Item "int SSL_want_write(const SSL *ssl);" +.IP "int \fBSSL_want_x509_lookup\fR(const \s-1SSL\s0 *ssl);" 4 +.IX Item "int SSL_want_x509_lookup(const SSL *ssl);" +.IP "int \fBSSL_write\fR(\s-1SSL\s0 *ssl, const void *buf, int num);" 4 +.IX Item "int SSL_write(SSL *ssl, const void *buf, int num);" +.IP "void \fBSSL_set_psk_client_callback\fR(\s-1SSL\s0 *ssl, unsigned int (*callback)(\s-1SSL\s0 *ssl, const char *hint, char *identity, unsigned int max_identity_len, unsigned char *psk, unsigned int max_psk_len));" 4 +.IX Item "void SSL_set_psk_client_callback(SSL *ssl, unsigned int (*callback)(SSL *ssl, const char *hint, char *identity, unsigned int max_identity_len, unsigned char *psk, unsigned int max_psk_len));" +.IP "int \fBSSL_use_psk_identity_hint\fR(\s-1SSL\s0 *ssl, const char *hint);" 4 +.IX Item "int SSL_use_psk_identity_hint(SSL *ssl, const char *hint);" +.IP "void \fBSSL_set_psk_server_callback\fR(\s-1SSL\s0 *ssl, unsigned int (*callback)(\s-1SSL\s0 *ssl, const char *identity, unsigned char *psk, int max_psk_len));" 4 +.IX Item "void SSL_set_psk_server_callback(SSL *ssl, unsigned int (*callback)(SSL *ssl, const char *identity, unsigned char *psk, int max_psk_len));" +.IP "const char *\fBSSL_get_psk_identity_hint\fR(\s-1SSL\s0 *ssl);" 4 +.IX Item "const char *SSL_get_psk_identity_hint(SSL *ssl);" +.IP "const char *\fBSSL_get_psk_identity\fR(\s-1SSL\s0 *ssl);" 4 +.IX Item "const char *SSL_get_psk_identity(SSL *ssl);" +.PD +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +See the individual manual pages for details. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBopenssl\fR\|(1), \fBcrypto\fR\|(7), +\&\fBCRYPTO_get_ex_new_index\fR\|(3), +\&\fBSSL_accept\fR\|(3), \fBSSL_clear\fR\|(3), +\&\fBSSL_connect\fR\|(3), +\&\fBSSL_CIPHER_get_name\fR\|(3), +\&\fBSSL_COMP_add_compression_method\fR\|(3), +\&\fBSSL_CTX_add_extra_chain_cert\fR\|(3), +\&\fBSSL_CTX_add_session\fR\|(3), +\&\fBSSL_CTX_ctrl\fR\|(3), +\&\fBSSL_CTX_flush_sessions\fR\|(3), +\&\fBSSL_CTX_get_verify_mode\fR\|(3), +\&\fBSSL_CTX_load_verify_locations\fR\|(3) +\&\fBSSL_CTX_new\fR\|(3), +\&\fBSSL_CTX_sess_number\fR\|(3), +\&\fBSSL_CTX_sess_set_cache_size\fR\|(3), +\&\fBSSL_CTX_sess_set_get_cb\fR\|(3), +\&\fBSSL_CTX_sessions\fR\|(3), +\&\fBSSL_CTX_set_cert_store\fR\|(3), +\&\fBSSL_CTX_set_cert_verify_callback\fR\|(3), +\&\fBSSL_CTX_set_cipher_list\fR\|(3), +\&\fBSSL_CTX_set_client_CA_list\fR\|(3), +\&\fBSSL_CTX_set_client_cert_cb\fR\|(3), +\&\fBSSL_CTX_set_default_passwd_cb\fR\|(3), +\&\fBSSL_CTX_set_generate_session_id\fR\|(3), +\&\fBSSL_CTX_set_info_callback\fR\|(3), +\&\fBSSL_CTX_set_max_cert_list\fR\|(3), +\&\fBSSL_CTX_set_mode\fR\|(3), +\&\fBSSL_CTX_set_msg_callback\fR\|(3), +\&\fBSSL_CTX_set_options\fR\|(3), +\&\fBSSL_CTX_set_quiet_shutdown\fR\|(3), +\&\fBSSL_CTX_set_read_ahead\fR\|(3), +\&\fBSSL_CTX_set_security_level\fR\|(3), +\&\fBSSL_CTX_set_session_cache_mode\fR\|(3), +\&\fBSSL_CTX_set_session_id_context\fR\|(3), +\&\fBSSL_CTX_set_ssl_version\fR\|(3), +\&\fBSSL_CTX_set_timeout\fR\|(3), +\&\fBSSL_CTX_set_tmp_dh_callback\fR\|(3), +\&\fBSSL_CTX_set_verify\fR\|(3), +\&\fBSSL_CTX_use_certificate\fR\|(3), +\&\fBSSL_alert_type_string\fR\|(3), +\&\fBSSL_do_handshake\fR\|(3), +\&\fBSSL_enable_ct\fR\|(3), +\&\fBSSL_get_SSL_CTX\fR\|(3), +\&\fBSSL_get_ciphers\fR\|(3), +\&\fBSSL_get_client_CA_list\fR\|(3), +\&\fBSSL_get_default_timeout\fR\|(3), +\&\fBSSL_get_error\fR\|(3), +\&\fBSSL_get_ex_data_X509_STORE_CTX_idx\fR\|(3), +\&\fBSSL_get_fd\fR\|(3), +\&\fBSSL_get_peer_cert_chain\fR\|(3), +\&\fBSSL_get_rbio\fR\|(3), +\&\fBSSL_get_session\fR\|(3), +\&\fBSSL_get_verify_result\fR\|(3), +\&\fBSSL_get_version\fR\|(3), +\&\fBSSL_load_client_CA_file\fR\|(3), +\&\fBSSL_new\fR\|(3), +\&\fBSSL_pending\fR\|(3), +\&\fBSSL_read_ex\fR\|(3), +\&\fBSSL_read\fR\|(3), +\&\fBSSL_rstate_string\fR\|(3), +\&\fBSSL_session_reused\fR\|(3), +\&\fBSSL_set_bio\fR\|(3), +\&\fBSSL_set_connect_state\fR\|(3), +\&\fBSSL_set_fd\fR\|(3), +\&\fBSSL_set_session\fR\|(3), +\&\fBSSL_set_shutdown\fR\|(3), +\&\fBSSL_shutdown\fR\|(3), +\&\fBSSL_state_string\fR\|(3), +\&\fBSSL_want\fR\|(3), +\&\fBSSL_write_ex\fR\|(3), +\&\fBSSL_write\fR\|(3), +\&\fBSSL_SESSION_free\fR\|(3), +\&\fBSSL_SESSION_get_time\fR\|(3), +\&\fBd2i_SSL_SESSION\fR\|(3), +\&\fBSSL_CTX_set_psk_client_callback\fR\|(3), +\&\fBSSL_CTX_use_psk_identity_hint\fR\|(3), +\&\fBSSL_get_psk_identity\fR\|(3), +\&\fBDTLSv1_listen\fR\|(3) +.SH "HISTORY" +.IX Header "HISTORY" +\&\fBSSLv2_client_method\fR, \fBSSLv2_server_method\fR and \fBSSLv2_method\fR were removed +in OpenSSL 1.1.0. +.PP +The return type of \fBSSL_copy_session_id\fR was changed from void to int in +OpenSSL 1.1.0. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2000\-2018 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/share/man/man7/x509.7 b/deps/openssl/android/arm64-v8a/usr/local/share/man/man7/x509.7 new file mode 100644 index 00000000..6823b768 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/share/man/man7/x509.7 @@ -0,0 +1,206 @@ +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "X509 7" +.TH X509 7 "2020-04-21" "1.1.1g" "OpenSSL" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +x509 \- X.509 certificate handling +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& #include +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +An X.509 certificate is a structured grouping of information about +an individual, a device, or anything one can imagine. A X.509 \s-1CRL\s0 +(certificate revocation list) is a tool to help determine if a +certificate is still valid. The exact definition of those can be +found in the X.509 document from ITU-T, or in \s-1RFC3280\s0 from \s-1PKIX.\s0 +In OpenSSL, the type X509 is used to express such a certificate, and +the type X509_CRL is used to express a \s-1CRL.\s0 +.PP +A related structure is a certificate request, defined in PKCS#10 from +\&\s-1RSA\s0 Security, Inc, also reflected in \s-1RFC2896.\s0 In OpenSSL, the type +X509_REQ is used to express such a certificate request. +.PP +To handle some complex parts of a certificate, there are the types +X509_NAME (to express a certificate name), X509_ATTRIBUTE (to express +a certificate attributes), X509_EXTENSION (to express a certificate +extension) and a few more. +.PP +Finally, there's the supertype X509_INFO, which can contain a \s-1CRL,\s0 a +certificate and a corresponding private key. +.PP +\&\fBX509_\fR\fI\s-1XXX\s0\fR, \fBd2i_X509_\fR\fI\s-1XXX\s0\fR, and \fBi2d_X509_\fR\fI\s-1XXX\s0\fR functions +handle X.509 certificates, with some exceptions, shown below. +.PP +\&\fBX509_CRL_\fR\fI\s-1XXX\s0\fR, \fBd2i_X509_CRL_\fR\fI\s-1XXX\s0\fR, and \fBi2d_X509_CRL_\fR\fI\s-1XXX\s0\fR +functions handle X.509 CRLs. +.PP +\&\fBX509_REQ_\fR\fI\s-1XXX\s0\fR, \fBd2i_X509_REQ_\fR\fI\s-1XXX\s0\fR, and \fBi2d_X509_REQ_\fR\fI\s-1XXX\s0\fR +functions handle PKCS#10 certificate requests. +.PP +\&\fBX509_NAME_\fR\fI\s-1XXX\s0\fR functions handle certificate names. +.PP +\&\fBX509_ATTRIBUTE_\fR\fI\s-1XXX\s0\fR functions handle certificate attributes. +.PP +\&\fBX509_EXTENSION_\fR\fI\s-1XXX\s0\fR functions handle certificate extensions. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBX509_NAME_ENTRY_get_object\fR\|(3), +\&\fBX509_NAME_add_entry_by_txt\fR\|(3), +\&\fBX509_NAME_add_entry_by_NID\fR\|(3), +\&\fBX509_NAME_print_ex\fR\|(3), +\&\fBX509_NAME_new\fR\|(3), +\&\fBd2i_X509\fR\|(3), +\&\fBd2i_X509_ALGOR\fR\|(3), +\&\fBd2i_X509_CRL\fR\|(3), +\&\fBd2i_X509_NAME\fR\|(3), +\&\fBd2i_X509_REQ\fR\|(3), +\&\fBd2i_X509_SIG\fR\|(3), +\&\fBX509v3\fR\|(3), +\&\fBcrypto\fR\|(7) +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright 2003\-2017 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the OpenSSL license (the \*(L"License\*(R"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file \s-1LICENSE\s0 in the source distribution or at +. diff --git a/deps/openssl/android/arm64-v8a/usr/local/ssl/ct_log_list.cnf b/deps/openssl/android/arm64-v8a/usr/local/ssl/ct_log_list.cnf new file mode 100644 index 00000000..e643cfdb --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/ssl/ct_log_list.cnf @@ -0,0 +1,9 @@ +# This file specifies the Certificate Transparency logs +# that are to be trusted. + +# Google's list of logs can be found here: +# www.certificate-transparency.org/known-logs +# A Python program to convert the log list to OpenSSL's format can be +# found here: +# https://github.com/google/certificate-transparency/blob/master/python/utilities/log_list/print_log_list.py +# Use the "--openssl_output" flag. diff --git a/deps/openssl/android/arm64-v8a/usr/local/ssl/ct_log_list.cnf.dist b/deps/openssl/android/arm64-v8a/usr/local/ssl/ct_log_list.cnf.dist new file mode 100644 index 00000000..e643cfdb --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/ssl/ct_log_list.cnf.dist @@ -0,0 +1,9 @@ +# This file specifies the Certificate Transparency logs +# that are to be trusted. + +# Google's list of logs can be found here: +# www.certificate-transparency.org/known-logs +# A Python program to convert the log list to OpenSSL's format can be +# found here: +# https://github.com/google/certificate-transparency/blob/master/python/utilities/log_list/print_log_list.py +# Use the "--openssl_output" flag. diff --git a/deps/openssl/android/arm64-v8a/usr/local/ssl/misc/CA.pl b/deps/openssl/android/arm64-v8a/usr/local/ssl/misc/CA.pl new file mode 100755 index 00000000..a9dca559 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/ssl/misc/CA.pl @@ -0,0 +1,215 @@ +#!/usr/bin/env perl +# Copyright 2000-2018 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 +# in the file LICENSE in the source distribution or at +# https://www.openssl.org/source/license.html + +# +# Wrapper around the ca to make it easier to use +# +# WARNING: do not edit! +# Generated by Makefile from apps/CA.pl.in + +use strict; +use warnings; + +my $openssl = "openssl"; +if(defined $ENV{'OPENSSL'}) { + $openssl = $ENV{'OPENSSL'}; +} else { + $ENV{'OPENSSL'} = $openssl; +} + +my $verbose = 1; + +my $OPENSSL_CONFIG = $ENV{"OPENSSL_CONFIG"} || ""; +my $DAYS = "-days 365"; +my $CADAYS = "-days 1095"; # 3 years +my $REQ = "$openssl req $OPENSSL_CONFIG"; +my $CA = "$openssl ca $OPENSSL_CONFIG"; +my $VERIFY = "$openssl verify"; +my $X509 = "$openssl x509"; +my $PKCS12 = "$openssl pkcs12"; + +# default openssl.cnf file has setup as per the following +my $CATOP = "./demoCA"; +my $CAKEY = "cakey.pem"; +my $CAREQ = "careq.pem"; +my $CACERT = "cacert.pem"; +my $CACRL = "crl.pem"; +my $DIRMODE = 0777; + +my $NEWKEY = "newkey.pem"; +my $NEWREQ = "newreq.pem"; +my $NEWCERT = "newcert.pem"; +my $NEWP12 = "newcert.p12"; +my $RET = 0; +my $WHAT = shift @ARGV || ""; +my @OPENSSL_CMDS = ("req", "ca", "pkcs12", "x509", "verify"); +my %EXTRA = extra_args(\@ARGV, "-extra-"); +my $FILE; + +sub extra_args { + my ($args_ref, $arg_prefix) = @_; + my %eargs = map { + if ($_ < $#$args_ref) { + my ($arg, $value) = splice(@$args_ref, $_, 2); + $arg =~ s/$arg_prefix//; + ($arg, $value); + } else { + (); + } + } reverse grep($$args_ref[$_] =~ /$arg_prefix/, 0..$#$args_ref); + my %empty = map { ($_, "") } @OPENSSL_CMDS; + return (%empty, %eargs); +} + +# See if reason for a CRL entry is valid; exit if not. +sub crl_reason_ok +{ + my $r = shift; + + if ($r eq 'unspecified' || $r eq 'keyCompromise' + || $r eq 'CACompromise' || $r eq 'affiliationChanged' + || $r eq 'superseded' || $r eq 'cessationOfOperation' + || $r eq 'certificateHold' || $r eq 'removeFromCRL') { + return 1; + } + print STDERR "Invalid CRL reason; must be one of:\n"; + print STDERR " unspecified, keyCompromise, CACompromise,\n"; + print STDERR " affiliationChanged, superseded, cessationOfOperation\n"; + print STDERR " certificateHold, removeFromCRL"; + exit 1; +} + +# Copy a PEM-format file; return like exit status (zero means ok) +sub copy_pemfile +{ + my ($infile, $outfile, $bound) = @_; + my $found = 0; + + open IN, $infile || die "Cannot open $infile, $!"; + open OUT, ">$outfile" || die "Cannot write to $outfile, $!"; + while () { + $found = 1 if /^-----BEGIN.*$bound/; + print OUT $_ if $found; + $found = 2, last if /^-----END.*$bound/; + } + close IN; + close OUT; + return $found == 2 ? 0 : 1; +} + +# Wrapper around system; useful for debugging. Returns just the exit status +sub run +{ + my $cmd = shift; + print "====\n$cmd\n" if $verbose; + my $status = system($cmd); + print "==> $status\n====\n" if $verbose; + return $status >> 8; +} + + +if ( $WHAT =~ /^(-\?|-h|-help)$/ ) { + print STDERR "usage: CA.pl -newcert | -newreq | -newreq-nodes | -xsign | -sign | -signCA | -signcert | -crl | -newca [-extra-cmd extra-params]\n"; + print STDERR " CA.pl -pkcs12 [-extra-pkcs12 extra-params] [certname]\n"; + print STDERR " CA.pl -verify [-extra-verify extra-params] certfile ...\n"; + print STDERR " CA.pl -revoke [-extra-ca extra-params] certfile [reason]\n"; + exit 0; +} +if ($WHAT eq '-newcert' ) { + # create a certificate + $RET = run("$REQ -new -x509 -keyout $NEWKEY -out $NEWCERT $DAYS $EXTRA{req}"); + print "Cert is in $NEWCERT, private key is in $NEWKEY\n" if $RET == 0; +} elsif ($WHAT eq '-precert' ) { + # create a pre-certificate + $RET = run("$REQ -x509 -precert -keyout $NEWKEY -out $NEWCERT $DAYS"); + print "Pre-cert is in $NEWCERT, private key is in $NEWKEY\n" if $RET == 0; +} elsif ($WHAT =~ /^\-newreq(\-nodes)?$/ ) { + # create a certificate request + $RET = run("$REQ -new $1 -keyout $NEWKEY -out $NEWREQ $DAYS $EXTRA{req}"); + print "Request is in $NEWREQ, private key is in $NEWKEY\n" if $RET == 0; +} elsif ($WHAT eq '-newca' ) { + # create the directory hierarchy + mkdir ${CATOP}, $DIRMODE; + mkdir "${CATOP}/certs", $DIRMODE; + mkdir "${CATOP}/crl", $DIRMODE ; + mkdir "${CATOP}/newcerts", $DIRMODE; + mkdir "${CATOP}/private", $DIRMODE; + open OUT, ">${CATOP}/index.txt"; + close OUT; + open OUT, ">${CATOP}/crlnumber"; + print OUT "01\n"; + close OUT; + # ask user for existing CA certificate + print "CA certificate filename (or enter to create)\n"; + $FILE = "" unless defined($FILE = ); + $FILE =~ s{\R$}{}; + if ($FILE ne "") { + copy_pemfile($FILE,"${CATOP}/private/$CAKEY", "PRIVATE"); + copy_pemfile($FILE,"${CATOP}/$CACERT", "CERTIFICATE"); + } else { + print "Making CA certificate ...\n"; + $RET = run("$REQ -new -keyout" + . " ${CATOP}/private/$CAKEY" + . " -out ${CATOP}/$CAREQ $EXTRA{req}"); + $RET = run("$CA -create_serial" + . " -out ${CATOP}/$CACERT $CADAYS -batch" + . " -keyfile ${CATOP}/private/$CAKEY -selfsign" + . " -extensions v3_ca $EXTRA{ca}" + . " -infiles ${CATOP}/$CAREQ") if $RET == 0; + print "CA certificate is in ${CATOP}/$CACERT\n" if $RET == 0; + } +} elsif ($WHAT eq '-pkcs12' ) { + my $cname = $ARGV[0]; + $cname = "My Certificate" unless defined $cname; + $RET = run("$PKCS12 -in $NEWCERT -inkey $NEWKEY" + . " -certfile ${CATOP}/$CACERT" + . " -out $NEWP12" + . " -export -name \"$cname\" $EXTRA{pkcs12}"); + print "PKCS #12 file is in $NEWP12\n" if $RET == 0; +} elsif ($WHAT eq '-xsign' ) { + $RET = run("$CA -policy policy_anything $EXTRA{ca} -infiles $NEWREQ"); +} elsif ($WHAT eq '-sign' ) { + $RET = run("$CA -policy policy_anything -out $NEWCERT $EXTRA{ca} -infiles $NEWREQ"); + print "Signed certificate is in $NEWCERT\n" if $RET == 0; +} elsif ($WHAT eq '-signCA' ) { + $RET = run("$CA -policy policy_anything -out $NEWCERT" + . " -extensions v3_ca $EXTRA{ca} -infiles $NEWREQ"); + print "Signed CA certificate is in $NEWCERT\n" if $RET == 0; +} elsif ($WHAT eq '-signcert' ) { + $RET = run("$X509 -x509toreq -in $NEWREQ -signkey $NEWREQ" + . " -out tmp.pem $EXTRA{x509}"); + $RET = run("$CA -policy policy_anything -out $NEWCERT" + . "$EXTRA{ca} -infiles tmp.pem") if $RET == 0; + print "Signed certificate is in $NEWCERT\n" if $RET == 0; +} elsif ($WHAT eq '-verify' ) { + my @files = @ARGV ? @ARGV : ( $NEWCERT ); + my $file; + foreach $file (@files) { + my $status = run("$VERIFY \"-CAfile\" ${CATOP}/$CACERT $file $EXTRA{verify}"); + $RET = $status if $status != 0; + } +} elsif ($WHAT eq '-crl' ) { + $RET = run("$CA -gencrl -out ${CATOP}/crl/$CACRL $EXTRA{ca}"); + print "Generated CRL is in ${CATOP}/crl/$CACRL\n" if $RET == 0; +} elsif ($WHAT eq '-revoke' ) { + my $cname = $ARGV[0]; + if (!defined $cname) { + print "Certificate filename is required; reason optional.\n"; + exit 1; + } + my $reason = $ARGV[1]; + $reason = " -crl_reason $reason" + if defined $reason && crl_reason_ok($reason); + $RET = run("$CA -revoke \"$cname\"" . $reason . $EXTRA{ca}); +} else { + print STDERR "Unknown arg \"$WHAT\"\n"; + print STDERR "Use -help for help.\n"; + exit 1; +} + +exit $RET; diff --git a/deps/openssl/android/arm64-v8a/usr/local/ssl/misc/tsget.pl b/deps/openssl/android/arm64-v8a/usr/local/ssl/misc/tsget.pl new file mode 100755 index 00000000..9ae48d19 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/ssl/misc/tsget.pl @@ -0,0 +1,200 @@ +#!/usr/bin/env perl +# Copyright 2002-2018 The OpenSSL Project Authors. All Rights Reserved. +# Copyright (c) 2002 The OpenTSA Project. 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 + +use strict; +use IO::Handle; +use Getopt::Std; +use File::Basename; +use WWW::Curl::Easy; + +use vars qw(%options); + +# Callback for reading the body. +sub read_body { + my ($maxlength, $state) = @_; + my $return_data = ""; + my $data_len = length ${$state->{data}}; + if ($state->{bytes} < $data_len) { + $data_len = $data_len - $state->{bytes}; + $data_len = $maxlength if $data_len > $maxlength; + $return_data = substr ${$state->{data}}, $state->{bytes}, $data_len; + $state->{bytes} += $data_len; + } + return $return_data; +} + +# Callback for writing the body into a variable. +sub write_body { + my ($data, $pointer) = @_; + ${$pointer} .= $data; + return length($data); +} + +# Initialise a new Curl object. +sub create_curl { + my $url = shift; + + # Create Curl object. + my $curl = WWW::Curl::Easy::new(); + + # Error-handling related options. + $curl->setopt(CURLOPT_VERBOSE, 1) if $options{d}; + $curl->setopt(CURLOPT_FAILONERROR, 1); + $curl->setopt(CURLOPT_USERAGENT, + "OpenTSA tsget.pl/openssl-1.1.1g"); + + # Options for POST method. + $curl->setopt(CURLOPT_UPLOAD, 1); + $curl->setopt(CURLOPT_CUSTOMREQUEST, "POST"); + $curl->setopt(CURLOPT_HTTPHEADER, + ["Content-Type: application/timestamp-query", + "Accept: application/timestamp-reply,application/timestamp-response"]); + $curl->setopt(CURLOPT_READFUNCTION, \&read_body); + $curl->setopt(CURLOPT_HEADERFUNCTION, sub { return length($_[0]); }); + + # Options for getting the result. + $curl->setopt(CURLOPT_WRITEFUNCTION, \&write_body); + + # SSL related options. + $curl->setopt(CURLOPT_SSLKEYTYPE, "PEM"); + $curl->setopt(CURLOPT_SSL_VERIFYPEER, 1); # Verify server's certificate. + $curl->setopt(CURLOPT_SSL_VERIFYHOST, 2); # Check server's CN. + $curl->setopt(CURLOPT_SSLKEY, $options{k}) if defined($options{k}); + $curl->setopt(CURLOPT_SSLKEYPASSWD, $options{p}) if defined($options{p}); + $curl->setopt(CURLOPT_SSLCERT, $options{c}) if defined($options{c}); + $curl->setopt(CURLOPT_CAINFO, $options{C}) if defined($options{C}); + $curl->setopt(CURLOPT_CAPATH, $options{P}) if defined($options{P}); + $curl->setopt(CURLOPT_RANDOM_FILE, $options{r}) if defined($options{r}); + $curl->setopt(CURLOPT_EGDSOCKET, $options{g}) if defined($options{g}); + + # Setting destination. + $curl->setopt(CURLOPT_URL, $url); + + return $curl; +} + +# Send a request and returns the body back. +sub get_timestamp { + my $curl = shift; + my $body = shift; + my $ts_body; + local $::error_buf; + + # Error-handling related options. + $curl->setopt(CURLOPT_ERRORBUFFER, "::error_buf"); + + # Options for POST method. + $curl->setopt(CURLOPT_INFILE, {data => $body, bytes => 0}); + $curl->setopt(CURLOPT_INFILESIZE, length(${$body})); + + # Options for getting the result. + $curl->setopt(CURLOPT_FILE, \$ts_body); + + # Send the request... + my $error_code = $curl->perform(); + my $error_string; + if ($error_code != 0) { + my $http_code = $curl->getinfo(CURLINFO_HTTP_CODE); + $error_string = "could not get timestamp"; + $error_string .= ", http code: $http_code" unless $http_code == 0; + $error_string .= ", curl code: $error_code"; + $error_string .= " ($::error_buf)" if defined($::error_buf); + } else { + my $ct = $curl->getinfo(CURLINFO_CONTENT_TYPE); + if (lc($ct) ne "application/timestamp-reply" + && lc($ct) ne "application/timestamp-response") { + $error_string = "unexpected content type returned: $ct"; + } + } + return ($ts_body, $error_string); + +} + +# Print usage information and exists. +sub usage { + + print STDERR "usage: $0 -h [-e ] [-o ] "; + print STDERR "[-v] [-d] [-k ] [-p ] "; + print STDERR "[-c ] [-C ] [-P ] "; + print STDERR "[-r ] [-g ] []...\n"; + exit 1; +} + +# ---------------------------------------------------------------------- +# Main program +# ---------------------------------------------------------------------- + +# Getting command-line options (default comes from TSGET environment variable). +my $getopt_arg = "h:e:o:vdk:p:c:C:P:r:g:"; +if (exists $ENV{TSGET}) { + my @old_argv = @ARGV; + @ARGV = split /\s+/, $ENV{TSGET}; + getopts($getopt_arg, \%options) or usage; + @ARGV = @old_argv; +} +getopts($getopt_arg, \%options) or usage; + +# Checking argument consistency. +if (!exists($options{h}) || (@ARGV == 0 && !exists($options{o})) + || (@ARGV > 1 && exists($options{o}))) { + print STDERR "Inconsistent command line options.\n"; + usage; +} +# Setting defaults. +@ARGV = ("-") unless @ARGV != 0; +$options{e} = ".tsr" unless defined($options{e}); + +# Processing requests. +my $curl = create_curl $options{h}; +undef $/; # For reading whole files. +REQUEST: foreach (@ARGV) { + my $input = $_; + my ($base, $path) = fileparse($input, '\.[^.]*'); + my $output_base = $base . $options{e}; + my $output = defined($options{o}) ? $options{o} : $path . $output_base; + + STDERR->printflush("$input: ") if $options{v}; + # Read request. + my $body; + if ($input eq "-") { + # Read the request from STDIN; + $body = ; + } else { + # Read the request from file. + open INPUT, "<" . $input + or warn("$input: could not open input file: $!\n"), next REQUEST; + $body = ; + close INPUT + or warn("$input: could not close input file: $!\n"), next REQUEST; + } + + # Send request. + STDERR->printflush("sending request") if $options{v}; + + my ($ts_body, $error) = get_timestamp $curl, \$body; + if (defined($error)) { + die "$input: fatal error: $error\n"; + } + STDERR->printflush(", reply received") if $options{v}; + + # Write response. + if ($output eq "-") { + # Write to STDOUT. + print $ts_body; + } else { + # Write to file. + open OUTPUT, ">", $output + or warn("$output: could not open output file: $!\n"), next REQUEST; + print OUTPUT $ts_body; + close OUTPUT + or warn("$output: could not close output file: $!\n"), next REQUEST; + } + STDERR->printflush(", $output written.\n") if $options{v}; +} +$curl->cleanup(); diff --git a/deps/openssl/android/arm64-v8a/usr/local/ssl/openssl.cnf b/deps/openssl/android/arm64-v8a/usr/local/ssl/openssl.cnf new file mode 100644 index 00000000..4acca4b0 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/ssl/openssl.cnf @@ -0,0 +1,350 @@ +# +# OpenSSL example configuration file. +# This is mostly being used for generation of certificate requests. +# + +# Note that you can include other files from the main configuration +# file using the .include directive. +#.include filename + +# This definition stops the following lines choking if HOME isn't +# defined. +HOME = . + +# Extra OBJECT IDENTIFIER info: +#oid_file = $ENV::HOME/.oid +oid_section = new_oids + +# To use this configuration file with the "-extfile" option of the +# "openssl x509" utility, name here the section containing the +# X.509v3 extensions to use: +# extensions = +# (Alternatively, use a configuration file that has only +# X.509v3 extensions in its main [= default] section.) + +[ new_oids ] + +# We can add new OIDs in here for use by 'ca', 'req' and 'ts'. +# Add a simple OID like this: +# testoid1=1.2.3.4 +# Or use config file substitution like this: +# testoid2=${testoid1}.5.6 + +# Policies used by the TSA examples. +tsa_policy1 = 1.2.3.4.1 +tsa_policy2 = 1.2.3.4.5.6 +tsa_policy3 = 1.2.3.4.5.7 + +#################################################################### +[ ca ] +default_ca = CA_default # The default ca section + +#################################################################### +[ CA_default ] + +dir = ./demoCA # Where everything is kept +certs = $dir/certs # Where the issued certs are kept +crl_dir = $dir/crl # Where the issued crl are kept +database = $dir/index.txt # database index file. +#unique_subject = no # Set to 'no' to allow creation of + # several certs with same subject. +new_certs_dir = $dir/newcerts # default place for new certs. + +certificate = $dir/cacert.pem # The CA certificate +serial = $dir/serial # The current serial number +crlnumber = $dir/crlnumber # the current crl number + # must be commented out to leave a V1 CRL +crl = $dir/crl.pem # The current CRL +private_key = $dir/private/cakey.pem# The private key + +x509_extensions = usr_cert # The extensions to add to the cert + +# Comment out the following two lines for the "traditional" +# (and highly broken) format. +name_opt = ca_default # Subject Name options +cert_opt = ca_default # Certificate field options + +# Extension copying option: use with caution. +# copy_extensions = copy + +# Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs +# so this is commented out by default to leave a V1 CRL. +# crlnumber must also be commented out to leave a V1 CRL. +# crl_extensions = crl_ext + +default_days = 365 # how long to certify for +default_crl_days= 30 # how long before next CRL +default_md = default # use public key default MD +preserve = no # keep passed DN ordering + +# A few difference way of specifying how similar the request should look +# For type CA, the listed attributes must be the same, and the optional +# and supplied fields are just that :-) +policy = policy_match + +# For the CA policy +[ policy_match ] +countryName = match +stateOrProvinceName = match +organizationName = match +organizationalUnitName = optional +commonName = supplied +emailAddress = optional + +# For the 'anything' policy +# At this point in time, you must list all acceptable 'object' +# types. +[ policy_anything ] +countryName = optional +stateOrProvinceName = optional +localityName = optional +organizationName = optional +organizationalUnitName = optional +commonName = supplied +emailAddress = optional + +#################################################################### +[ req ] +default_bits = 2048 +default_keyfile = privkey.pem +distinguished_name = req_distinguished_name +attributes = req_attributes +x509_extensions = v3_ca # The extensions to add to the self signed cert + +# Passwords for private keys if not present they will be prompted for +# input_password = secret +# output_password = secret + +# This sets a mask for permitted string types. There are several options. +# default: PrintableString, T61String, BMPString. +# pkix : PrintableString, BMPString (PKIX recommendation before 2004) +# utf8only: only UTF8Strings (PKIX recommendation after 2004). +# nombstr : PrintableString, T61String (no BMPStrings or UTF8Strings). +# MASK:XXXX a literal mask value. +# WARNING: ancient versions of Netscape crash on BMPStrings or UTF8Strings. +string_mask = utf8only + +# req_extensions = v3_req # The extensions to add to a certificate request + +[ req_distinguished_name ] +countryName = Country Name (2 letter code) +countryName_default = AU +countryName_min = 2 +countryName_max = 2 + +stateOrProvinceName = State or Province Name (full name) +stateOrProvinceName_default = Some-State + +localityName = Locality Name (eg, city) + +0.organizationName = Organization Name (eg, company) +0.organizationName_default = Internet Widgits Pty Ltd + +# we can do this but it is not needed normally :-) +#1.organizationName = Second Organization Name (eg, company) +#1.organizationName_default = World Wide Web Pty Ltd + +organizationalUnitName = Organizational Unit Name (eg, section) +#organizationalUnitName_default = + +commonName = Common Name (e.g. server FQDN or YOUR name) +commonName_max = 64 + +emailAddress = Email Address +emailAddress_max = 64 + +# SET-ex3 = SET extension number 3 + +[ req_attributes ] +challengePassword = A challenge password +challengePassword_min = 4 +challengePassword_max = 20 + +unstructuredName = An optional company name + +[ usr_cert ] + +# These extensions are added when 'ca' signs a request. + +# This goes against PKIX guidelines but some CAs do it and some software +# requires this to avoid interpreting an end user certificate as a CA. + +basicConstraints=CA:FALSE + +# Here are some examples of the usage of nsCertType. If it is omitted +# the certificate can be used for anything *except* object signing. + +# This is OK for an SSL server. +# nsCertType = server + +# For an object signing certificate this would be used. +# nsCertType = objsign + +# For normal client use this is typical +# nsCertType = client, email + +# and for everything including object signing: +# nsCertType = client, email, objsign + +# This is typical in keyUsage for a client certificate. +# keyUsage = nonRepudiation, digitalSignature, keyEncipherment + +# This will be displayed in Netscape's comment listbox. +nsComment = "OpenSSL Generated Certificate" + +# PKIX recommendations harmless if included in all certificates. +subjectKeyIdentifier=hash +authorityKeyIdentifier=keyid,issuer + +# This stuff is for subjectAltName and issuerAltname. +# Import the email address. +# subjectAltName=email:copy +# An alternative to produce certificates that aren't +# deprecated according to PKIX. +# subjectAltName=email:move + +# Copy subject details +# issuerAltName=issuer:copy + +#nsCaRevocationUrl = http://www.domain.dom/ca-crl.pem +#nsBaseUrl +#nsRevocationUrl +#nsRenewalUrl +#nsCaPolicyUrl +#nsSslServerName + +# This is required for TSA certificates. +# extendedKeyUsage = critical,timeStamping + +[ v3_req ] + +# Extensions to add to a certificate request + +basicConstraints = CA:FALSE +keyUsage = nonRepudiation, digitalSignature, keyEncipherment + +[ v3_ca ] + + +# Extensions for a typical CA + + +# PKIX recommendation. + +subjectKeyIdentifier=hash + +authorityKeyIdentifier=keyid:always,issuer + +basicConstraints = critical,CA:true + +# Key usage: this is typical for a CA certificate. However since it will +# prevent it being used as an test self-signed certificate it is best +# left out by default. +# keyUsage = cRLSign, keyCertSign + +# Some might want this also +# nsCertType = sslCA, emailCA + +# Include email address in subject alt name: another PKIX recommendation +# subjectAltName=email:copy +# Copy issuer details +# issuerAltName=issuer:copy + +# DER hex encoding of an extension: beware experts only! +# obj=DER:02:03 +# Where 'obj' is a standard or added object +# You can even override a supported extension: +# basicConstraints= critical, DER:30:03:01:01:FF + +[ crl_ext ] + +# CRL extensions. +# Only issuerAltName and authorityKeyIdentifier make any sense in a CRL. + +# issuerAltName=issuer:copy +authorityKeyIdentifier=keyid:always + +[ proxy_cert_ext ] +# These extensions should be added when creating a proxy certificate + +# This goes against PKIX guidelines but some CAs do it and some software +# requires this to avoid interpreting an end user certificate as a CA. + +basicConstraints=CA:FALSE + +# Here are some examples of the usage of nsCertType. If it is omitted +# the certificate can be used for anything *except* object signing. + +# This is OK for an SSL server. +# nsCertType = server + +# For an object signing certificate this would be used. +# nsCertType = objsign + +# For normal client use this is typical +# nsCertType = client, email + +# and for everything including object signing: +# nsCertType = client, email, objsign + +# This is typical in keyUsage for a client certificate. +# keyUsage = nonRepudiation, digitalSignature, keyEncipherment + +# This will be displayed in Netscape's comment listbox. +nsComment = "OpenSSL Generated Certificate" + +# PKIX recommendations harmless if included in all certificates. +subjectKeyIdentifier=hash +authorityKeyIdentifier=keyid,issuer + +# This stuff is for subjectAltName and issuerAltname. +# Import the email address. +# subjectAltName=email:copy +# An alternative to produce certificates that aren't +# deprecated according to PKIX. +# subjectAltName=email:move + +# Copy subject details +# issuerAltName=issuer:copy + +#nsCaRevocationUrl = http://www.domain.dom/ca-crl.pem +#nsBaseUrl +#nsRevocationUrl +#nsRenewalUrl +#nsCaPolicyUrl +#nsSslServerName + +# This really needs to be in place for it to be a proxy certificate. +proxyCertInfo=critical,language:id-ppl-anyLanguage,pathlen:3,policy:foo + +#################################################################### +[ tsa ] + +default_tsa = tsa_config1 # the default TSA section + +[ tsa_config1 ] + +# These are used by the TSA reply generation only. +dir = ./demoCA # TSA root directory +serial = $dir/tsaserial # The current serial number (mandatory) +crypto_device = builtin # OpenSSL engine to use for signing +signer_cert = $dir/tsacert.pem # The TSA signing certificate + # (optional) +certs = $dir/cacert.pem # Certificate chain to include in reply + # (optional) +signer_key = $dir/private/tsakey.pem # The TSA private key (optional) +signer_digest = sha256 # Signing digest to use. (Optional) +default_policy = tsa_policy1 # Policy if request did not specify it + # (optional) +other_policies = tsa_policy2, tsa_policy3 # acceptable policies (optional) +digests = sha1, sha256, sha384, sha512 # Acceptable message digests (mandatory) +accuracy = secs:1, millisecs:500, microsecs:100 # (optional) +clock_precision_digits = 0 # number of digits after dot. (optional) +ordering = yes # Is ordering defined for timestamps? + # (optional, default: no) +tsa_name = yes # Must the TSA name be included in the reply? + # (optional, default: no) +ess_cert_id_chain = no # Must the ESS cert id chain be included? + # (optional, default: no) +ess_cert_id_alg = sha1 # algorithm to compute certificate + # identifier (optional, default: sha1) diff --git a/deps/openssl/android/arm64-v8a/usr/local/ssl/openssl.cnf.dist b/deps/openssl/android/arm64-v8a/usr/local/ssl/openssl.cnf.dist new file mode 100644 index 00000000..4acca4b0 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/ssl/openssl.cnf.dist @@ -0,0 +1,350 @@ +# +# OpenSSL example configuration file. +# This is mostly being used for generation of certificate requests. +# + +# Note that you can include other files from the main configuration +# file using the .include directive. +#.include filename + +# This definition stops the following lines choking if HOME isn't +# defined. +HOME = . + +# Extra OBJECT IDENTIFIER info: +#oid_file = $ENV::HOME/.oid +oid_section = new_oids + +# To use this configuration file with the "-extfile" option of the +# "openssl x509" utility, name here the section containing the +# X.509v3 extensions to use: +# extensions = +# (Alternatively, use a configuration file that has only +# X.509v3 extensions in its main [= default] section.) + +[ new_oids ] + +# We can add new OIDs in here for use by 'ca', 'req' and 'ts'. +# Add a simple OID like this: +# testoid1=1.2.3.4 +# Or use config file substitution like this: +# testoid2=${testoid1}.5.6 + +# Policies used by the TSA examples. +tsa_policy1 = 1.2.3.4.1 +tsa_policy2 = 1.2.3.4.5.6 +tsa_policy3 = 1.2.3.4.5.7 + +#################################################################### +[ ca ] +default_ca = CA_default # The default ca section + +#################################################################### +[ CA_default ] + +dir = ./demoCA # Where everything is kept +certs = $dir/certs # Where the issued certs are kept +crl_dir = $dir/crl # Where the issued crl are kept +database = $dir/index.txt # database index file. +#unique_subject = no # Set to 'no' to allow creation of + # several certs with same subject. +new_certs_dir = $dir/newcerts # default place for new certs. + +certificate = $dir/cacert.pem # The CA certificate +serial = $dir/serial # The current serial number +crlnumber = $dir/crlnumber # the current crl number + # must be commented out to leave a V1 CRL +crl = $dir/crl.pem # The current CRL +private_key = $dir/private/cakey.pem# The private key + +x509_extensions = usr_cert # The extensions to add to the cert + +# Comment out the following two lines for the "traditional" +# (and highly broken) format. +name_opt = ca_default # Subject Name options +cert_opt = ca_default # Certificate field options + +# Extension copying option: use with caution. +# copy_extensions = copy + +# Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs +# so this is commented out by default to leave a V1 CRL. +# crlnumber must also be commented out to leave a V1 CRL. +# crl_extensions = crl_ext + +default_days = 365 # how long to certify for +default_crl_days= 30 # how long before next CRL +default_md = default # use public key default MD +preserve = no # keep passed DN ordering + +# A few difference way of specifying how similar the request should look +# For type CA, the listed attributes must be the same, and the optional +# and supplied fields are just that :-) +policy = policy_match + +# For the CA policy +[ policy_match ] +countryName = match +stateOrProvinceName = match +organizationName = match +organizationalUnitName = optional +commonName = supplied +emailAddress = optional + +# For the 'anything' policy +# At this point in time, you must list all acceptable 'object' +# types. +[ policy_anything ] +countryName = optional +stateOrProvinceName = optional +localityName = optional +organizationName = optional +organizationalUnitName = optional +commonName = supplied +emailAddress = optional + +#################################################################### +[ req ] +default_bits = 2048 +default_keyfile = privkey.pem +distinguished_name = req_distinguished_name +attributes = req_attributes +x509_extensions = v3_ca # The extensions to add to the self signed cert + +# Passwords for private keys if not present they will be prompted for +# input_password = secret +# output_password = secret + +# This sets a mask for permitted string types. There are several options. +# default: PrintableString, T61String, BMPString. +# pkix : PrintableString, BMPString (PKIX recommendation before 2004) +# utf8only: only UTF8Strings (PKIX recommendation after 2004). +# nombstr : PrintableString, T61String (no BMPStrings or UTF8Strings). +# MASK:XXXX a literal mask value. +# WARNING: ancient versions of Netscape crash on BMPStrings or UTF8Strings. +string_mask = utf8only + +# req_extensions = v3_req # The extensions to add to a certificate request + +[ req_distinguished_name ] +countryName = Country Name (2 letter code) +countryName_default = AU +countryName_min = 2 +countryName_max = 2 + +stateOrProvinceName = State or Province Name (full name) +stateOrProvinceName_default = Some-State + +localityName = Locality Name (eg, city) + +0.organizationName = Organization Name (eg, company) +0.organizationName_default = Internet Widgits Pty Ltd + +# we can do this but it is not needed normally :-) +#1.organizationName = Second Organization Name (eg, company) +#1.organizationName_default = World Wide Web Pty Ltd + +organizationalUnitName = Organizational Unit Name (eg, section) +#organizationalUnitName_default = + +commonName = Common Name (e.g. server FQDN or YOUR name) +commonName_max = 64 + +emailAddress = Email Address +emailAddress_max = 64 + +# SET-ex3 = SET extension number 3 + +[ req_attributes ] +challengePassword = A challenge password +challengePassword_min = 4 +challengePassword_max = 20 + +unstructuredName = An optional company name + +[ usr_cert ] + +# These extensions are added when 'ca' signs a request. + +# This goes against PKIX guidelines but some CAs do it and some software +# requires this to avoid interpreting an end user certificate as a CA. + +basicConstraints=CA:FALSE + +# Here are some examples of the usage of nsCertType. If it is omitted +# the certificate can be used for anything *except* object signing. + +# This is OK for an SSL server. +# nsCertType = server + +# For an object signing certificate this would be used. +# nsCertType = objsign + +# For normal client use this is typical +# nsCertType = client, email + +# and for everything including object signing: +# nsCertType = client, email, objsign + +# This is typical in keyUsage for a client certificate. +# keyUsage = nonRepudiation, digitalSignature, keyEncipherment + +# This will be displayed in Netscape's comment listbox. +nsComment = "OpenSSL Generated Certificate" + +# PKIX recommendations harmless if included in all certificates. +subjectKeyIdentifier=hash +authorityKeyIdentifier=keyid,issuer + +# This stuff is for subjectAltName and issuerAltname. +# Import the email address. +# subjectAltName=email:copy +# An alternative to produce certificates that aren't +# deprecated according to PKIX. +# subjectAltName=email:move + +# Copy subject details +# issuerAltName=issuer:copy + +#nsCaRevocationUrl = http://www.domain.dom/ca-crl.pem +#nsBaseUrl +#nsRevocationUrl +#nsRenewalUrl +#nsCaPolicyUrl +#nsSslServerName + +# This is required for TSA certificates. +# extendedKeyUsage = critical,timeStamping + +[ v3_req ] + +# Extensions to add to a certificate request + +basicConstraints = CA:FALSE +keyUsage = nonRepudiation, digitalSignature, keyEncipherment + +[ v3_ca ] + + +# Extensions for a typical CA + + +# PKIX recommendation. + +subjectKeyIdentifier=hash + +authorityKeyIdentifier=keyid:always,issuer + +basicConstraints = critical,CA:true + +# Key usage: this is typical for a CA certificate. However since it will +# prevent it being used as an test self-signed certificate it is best +# left out by default. +# keyUsage = cRLSign, keyCertSign + +# Some might want this also +# nsCertType = sslCA, emailCA + +# Include email address in subject alt name: another PKIX recommendation +# subjectAltName=email:copy +# Copy issuer details +# issuerAltName=issuer:copy + +# DER hex encoding of an extension: beware experts only! +# obj=DER:02:03 +# Where 'obj' is a standard or added object +# You can even override a supported extension: +# basicConstraints= critical, DER:30:03:01:01:FF + +[ crl_ext ] + +# CRL extensions. +# Only issuerAltName and authorityKeyIdentifier make any sense in a CRL. + +# issuerAltName=issuer:copy +authorityKeyIdentifier=keyid:always + +[ proxy_cert_ext ] +# These extensions should be added when creating a proxy certificate + +# This goes against PKIX guidelines but some CAs do it and some software +# requires this to avoid interpreting an end user certificate as a CA. + +basicConstraints=CA:FALSE + +# Here are some examples of the usage of nsCertType. If it is omitted +# the certificate can be used for anything *except* object signing. + +# This is OK for an SSL server. +# nsCertType = server + +# For an object signing certificate this would be used. +# nsCertType = objsign + +# For normal client use this is typical +# nsCertType = client, email + +# and for everything including object signing: +# nsCertType = client, email, objsign + +# This is typical in keyUsage for a client certificate. +# keyUsage = nonRepudiation, digitalSignature, keyEncipherment + +# This will be displayed in Netscape's comment listbox. +nsComment = "OpenSSL Generated Certificate" + +# PKIX recommendations harmless if included in all certificates. +subjectKeyIdentifier=hash +authorityKeyIdentifier=keyid,issuer + +# This stuff is for subjectAltName and issuerAltname. +# Import the email address. +# subjectAltName=email:copy +# An alternative to produce certificates that aren't +# deprecated according to PKIX. +# subjectAltName=email:move + +# Copy subject details +# issuerAltName=issuer:copy + +#nsCaRevocationUrl = http://www.domain.dom/ca-crl.pem +#nsBaseUrl +#nsRevocationUrl +#nsRenewalUrl +#nsCaPolicyUrl +#nsSslServerName + +# This really needs to be in place for it to be a proxy certificate. +proxyCertInfo=critical,language:id-ppl-anyLanguage,pathlen:3,policy:foo + +#################################################################### +[ tsa ] + +default_tsa = tsa_config1 # the default TSA section + +[ tsa_config1 ] + +# These are used by the TSA reply generation only. +dir = ./demoCA # TSA root directory +serial = $dir/tsaserial # The current serial number (mandatory) +crypto_device = builtin # OpenSSL engine to use for signing +signer_cert = $dir/tsacert.pem # The TSA signing certificate + # (optional) +certs = $dir/cacert.pem # Certificate chain to include in reply + # (optional) +signer_key = $dir/private/tsakey.pem # The TSA private key (optional) +signer_digest = sha256 # Signing digest to use. (Optional) +default_policy = tsa_policy1 # Policy if request did not specify it + # (optional) +other_policies = tsa_policy2, tsa_policy3 # acceptable policies (optional) +digests = sha1, sha256, sha384, sha512 # Acceptable message digests (mandatory) +accuracy = secs:1, millisecs:500, microsecs:100 # (optional) +clock_precision_digits = 0 # number of digits after dot. (optional) +ordering = yes # Is ordering defined for timestamps? + # (optional, default: no) +tsa_name = yes # Must the TSA name be included in the reply? + # (optional, default: no) +ess_cert_id_chain = no # Must the ESS cert id chain be included? + # (optional, default: no) +ess_cert_id_alg = sha1 # algorithm to compute certificate + # identifier (optional, default: sha1) diff --git a/deps/openssl/mingw64/bin/c_rehash b/deps/openssl/mingw64/bin/c_rehash new file mode 100755 index 00000000..d4356967 --- /dev/null +++ b/deps/openssl/mingw64/bin/c_rehash @@ -0,0 +1,232 @@ +#!/usr/bin/env perl + +# WARNING: do not edit! +# Generated by Makefile from tools/c_rehash.in +# Copyright 1999-2018 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 +# in the file LICENSE in the source distribution or at +# https://www.openssl.org/source/license.html + +# Perl c_rehash script, scan all files in a directory +# and add symbolic links to their hash values. + +my $dir = ""; +my $prefix = "/home/cory/src/tildefriends/deps/openssl/mingw64"; + +my $errorcount = 0; +my $openssl = $ENV{OPENSSL} || "openssl"; +my $pwd; +my $x509hash = "-subject_hash"; +my $crlhash = "-hash"; +my $verbose = 0; +my $symlink_exists=eval {symlink("",""); 1}; +my $removelinks = 1; + +## Parse flags. +while ( $ARGV[0] =~ /^-/ ) { + my $flag = shift @ARGV; + last if ( $flag eq '--'); + if ( $flag eq '-old') { + $x509hash = "-subject_hash_old"; + $crlhash = "-hash_old"; + } elsif ( $flag eq '-h' || $flag eq '-help' ) { + help(); + } elsif ( $flag eq '-n' ) { + $removelinks = 0; + } elsif ( $flag eq '-v' ) { + $verbose++; + } + else { + print STDERR "Usage error; try -h.\n"; + exit 1; + } +} + +sub help { + print "Usage: c_rehash [-old] [-h] [-help] [-v] [dirs...]\n"; + print " -old use old-style digest\n"; + print " -h or -help print this help text\n"; + print " -v print files removed and linked\n"; + exit 0; +} + +eval "require Cwd"; +if (defined(&Cwd::getcwd)) { + $pwd=Cwd::getcwd(); +} else { + $pwd=`pwd`; + chomp($pwd); +} + +# DOS/Win32 or Unix delimiter? Prefix our installdir, then search. +my $path_delim = ($pwd =~ /^[a-z]\:/i) ? ';' : ':'; +$ENV{PATH} = "$prefix/bin" . ($ENV{PATH} ? $path_delim . $ENV{PATH} : ""); + +if (! -x $openssl) { + my $found = 0; + foreach (split /$path_delim/, $ENV{PATH}) { + if (-x "$_/$openssl") { + $found = 1; + $openssl = "$_/$openssl"; + last; + } + } + if ($found == 0) { + print STDERR "c_rehash: rehashing skipped ('openssl' program not available)\n"; + exit 0; + } +} + +if (@ARGV) { + @dirlist = @ARGV; +} elsif ($ENV{SSL_CERT_DIR}) { + @dirlist = split /$path_delim/, $ENV{SSL_CERT_DIR}; +} else { + $dirlist[0] = "$dir/certs"; +} + +if (-d $dirlist[0]) { + chdir $dirlist[0]; + $openssl="$pwd/$openssl" if (!-x $openssl); + chdir $pwd; +} + +foreach (@dirlist) { + if (-d $_ ) { + if ( -w $_) { + hash_dir($_); + } else { + print "Skipping $_, can't write\n"; + $errorcount++; + } + } +} +exit($errorcount); + +sub hash_dir { + my %hashlist; + print "Doing $_[0]\n"; + chdir $_[0]; + opendir(DIR, "."); + my @flist = sort readdir(DIR); + closedir DIR; + if ( $removelinks ) { + # Delete any existing symbolic links + foreach (grep {/^[\da-f]+\.r{0,1}\d+$/} @flist) { + if (-l $_) { + print "unlink $_" if $verbose; + unlink $_ || warn "Can't unlink $_, $!\n"; + } + } + } + FILE: foreach $fname (grep {/\.(pem)|(crt)|(cer)|(crl)$/} @flist) { + # Check to see if certificates and/or CRLs present. + my ($cert, $crl) = check_file($fname); + if (!$cert && !$crl) { + print STDERR "WARNING: $fname does not contain a certificate or CRL: skipping\n"; + next; + } + link_hash_cert($fname) if ($cert); + link_hash_crl($fname) if ($crl); + } +} + +sub check_file { + my ($is_cert, $is_crl) = (0,0); + my $fname = $_[0]; + open IN, $fname; + while() { + if (/^-----BEGIN (.*)-----/) { + my $hdr = $1; + if ($hdr =~ /^(X509 |TRUSTED |)CERTIFICATE$/) { + $is_cert = 1; + last if ($is_crl); + } elsif ($hdr eq "X509 CRL") { + $is_crl = 1; + last if ($is_cert); + } + } + } + close IN; + return ($is_cert, $is_crl); +} + + +# Link a certificate to its subject name hash value, each hash is of +# the form . where n is an integer. If the hash value already exists +# then we need to up the value of n, unless its a duplicate in which +# case we skip the link. We check for duplicates by comparing the +# certificate fingerprints + +sub link_hash_cert { + my $fname = $_[0]; + $fname =~ s/'/'\\''/g; + my ($hash, $fprint) = `"$openssl" x509 $x509hash -fingerprint -noout -in "$fname"`; + chomp $hash; + chomp $fprint; + $fprint =~ s/^.*=//; + $fprint =~ tr/://d; + my $suffix = 0; + # Search for an unused hash filename + while(exists $hashlist{"$hash.$suffix"}) { + # Hash matches: if fingerprint matches its a duplicate cert + if ($hashlist{"$hash.$suffix"} eq $fprint) { + print STDERR "WARNING: Skipping duplicate certificate $fname\n"; + return; + } + $suffix++; + } + $hash .= ".$suffix"; + if ($symlink_exists) { + print "link $fname -> $hash\n" if $verbose; + symlink $fname, $hash || warn "Can't symlink, $!"; + } else { + print "copy $fname -> $hash\n" if $verbose; + if (open($in, "<", $fname)) { + if (open($out,">", $hash)) { + print $out $_ while (<$in>); + close $out; + } else { + warn "can't open $hash for write, $!"; + } + close $in; + } else { + warn "can't open $fname for read, $!"; + } + } + $hashlist{$hash} = $fprint; +} + +# Same as above except for a CRL. CRL links are of the form .r + +sub link_hash_crl { + my $fname = $_[0]; + $fname =~ s/'/'\\''/g; + my ($hash, $fprint) = `"$openssl" crl $crlhash -fingerprint -noout -in '$fname'`; + chomp $hash; + chomp $fprint; + $fprint =~ s/^.*=//; + $fprint =~ tr/://d; + my $suffix = 0; + # Search for an unused hash filename + while(exists $hashlist{"$hash.r$suffix"}) { + # Hash matches: if fingerprint matches its a duplicate cert + if ($hashlist{"$hash.r$suffix"} eq $fprint) { + print STDERR "WARNING: Skipping duplicate CRL $fname\n"; + return; + } + $suffix++; + } + $hash .= ".r$suffix"; + if ($symlink_exists) { + print "link $fname -> $hash\n" if $verbose; + symlink $fname, $hash || warn "Can't symlink, $!"; + } else { + print "cp $fname -> $hash\n" if $verbose; + system ("cp", $fname, $hash); + warn "Can't copy, $!" if ($? >> 8) != 0; + } + $hashlist{$hash} = $fprint; +} diff --git a/deps/openssl/mingw64/bin/openssl.exe b/deps/openssl/mingw64/bin/openssl.exe new file mode 100755 index 0000000000000000000000000000000000000000..37ea95b5eabed9fad756373dac1e8bb8fe3060c2 GIT binary patch literal 4872751 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 z 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

Q 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

h{bhq?wGS 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

ATq~P^Q_Z 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

sjEnXZ>2^`Qe3BUBOQVWpp7Bz2gm+aO4>ud&7bJ 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�h{ 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 z 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%0D4OC~n1U+T%AH_4%; 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�t37J&jf@Qm>t7W$e2tu&i&b@kk)a0OeXRy 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�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 z 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 %wpzxBLH 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 z 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 z zZf<;K%mB=rQg0XaaX-*TGla`dYN)RmI~1@uNQOT-7RoeYlFeK4I~AHlIXyS|ZpGQO zuaq7}hf%A!A~K?c{{8toEQ(ZVt;ieCjz-BADy6%K*f&@x z*5m)=uqHRd>MO4#6Y;4fWO0r2jj|vCG|Ivj85dhEL#_SI1nQp1c^)C68=E(C?bh>} zaD6D$-`KBHIg531kjl{dUH0AQMqL#N6KGvOm=L{T zf8@QtFrcdH7JRzOjrEi*@!RQZhK|(9j`dJCH4#%@&$a=^_e!Hu=tFtkHt=kYG)*>$ zr-Y~+?0U6ZkEcK0j^M{Y5>;Hn_FK2yyOS}tiBoC2v40WqB#x4!r$lxaP7>xMEIY7r znyK8Zm1i%$L+v5@$nFvrT!!+g%V*j2_j!wiOj8xe1GaC8srA@uk|xD|Wp*%y z`!mz>=w9`?W`!7$kta9!I%Db|RG1g5Nwn1RTYCD)BET(WNJ4^WDeYCF+M=M1KFjwB zPpPe9k8GRwn|(xF?QofAHnSNJeygsE>d`%NWJ6UZgiBte=>`i{4}@4OS%OC9I9CyuccqR&`*P=y+4cwxEK^S4gB9Cgvp`*)<&E>F%oAphVhtE8=(O{>aDGIz_ zzy(JIvo1F-eE4o!N4BGZB_$IzGVg59)t$#a?bI1dv_6VpmjQF8Dok3AOc@ zY7$fTKO3W7sVTGdnS#+wY#lU%qr7|URB0*CWOPFo8*}gdiuQOg!GpLLZ=b%rr7a_g z(E|%diHq}^ODjzj2TM1M!(ahU8Bs2bAfoD?c>P)F$o@HY2OK4F7E`kBzCpJ4_!}`1b9kt zJTCBlAK)oLKMV+j4(h=HCBgnzf1CSvn@{M^cpxjY{OC>q9uD|I;NgL91Rfaxdx1xQ z`FX(4z#{_x6?i1z4}eF9`MJU?-t(Ww#{ixkcue4L1CIr~5%AbBKUaix2ObCbSZF`? z&;DF!Kk#+Hr zeO_>w|C4Ue4}D?Y`#6i4}IUCbOi8W0pJVp@W5|D`@sM%q5Z%UhJ$#( zfEa*>2VM-?4+f|V?FZf*cm!|)y9191d<5`Fz`q0@8TcaLQGl-i9u@d^z@q^_20S|O zUxDA;{F$L6;J3DZden%YVfhPn!d*Gqxe;Gy-)1s+^Sci`bUp1$;Gy-xj{Z4bXnkmbht}gJ z@X$q8rGS?L2~r0B0-CV@qWWNe=x$cPL-XqeJam4?01u7-CGgPrYk-Hw-wFJ6aDZvx z8G+vco*8)9n4jZ^&M#8nA&*)=HV)vS^Gh0dcF=zxc<6ky2A&i2y8;iLe?h==gZ_Bn zq4PZlcoEQF54jfENYc7I+Qd?SQuh z-X8d1;2nT31l|$&4&a@D{{;MF;QuMRpdSXDP$$5{0uLMab3AasqXG{PJPz;(z>@%f z2_`5t@X+Une;%I;^h4*P5b)6RT?%-Bhfx6@dcNxeF9E<0ftLi{1^8RQ2LlhCzj45C zf&PEW)!!)i=WDu*0xH2ma36%rIQC4YO{ zANz~}52`Tt{v8iG?#F=V2^8`={8isoqXc?&gdg(;^5S>M{J82vh2Cf(KVNNEuU&1i zfRhRoG9Uhf_hWwigNFlo-=BD|0Ot)*$o1p@coLBJ{f>8a4Zh;}K=i6zZP56p0A~j% z94m_qX`m z04D$_-!J*|fiQnJUTAzjk_Hk7&0iMa)B}Ya`~ULyCmuAu-|;2^X9uX@FZufu?{D$p zH2$myB~YPX^7kj+-{O-597UkQzvPb+1_tKp`Qhr^xN2AD##Q^Az}M z8#F$ICQuKc7JzrvF9B(Pi_Ztrf7PxwC{G%241rqy5}yxbzu)no@%?VR0f3VU)asY` z{=|dU<9EDvz?lGQ4S3M=_iyoC9q+1LZP4+a0}l3^pLv8lfBdM&70(CK{>J-Ve7t~j z8)zzocXg~E$AiEmAV2?eK3|O&0dhbeh+eg;4I1A=!0`c^_A8I_&pgDd2mSv$@c+-t z1e_M2>0rG7Hoir`focAkKgf5P|L^(?^Dp9~1sn;WF98n@GMuYoNI>MD`Ma8bf6AXJ z;P?Q|{*_1hXWpOkmjgI0K=S|(Qoer`-y-0^y#1NK{9k$hB0gHc;Q*T2^2_{_`2BdV zekb`;{%!+~I?%LVc|L#V{ciqQ1CBS)bO`UNwm;_IzlbjtaLR#Z{L1?m@$~}E1klW1 z#|w!P65{_e|NfT0J;1pHn)M$%xWDp#mp{^$pYwzh=*wTn`!C{C2AqdLv;TwlzsDB@ zI0-;=AiS$*`m5{c)nFn2{7?BS2b^Z0xxey!{?7Yd{>A}k4QL*OceUTYjSso?XFW)P z=Ksq37xCQ$966u`zmE4`)Ylkr9Dx@82k(EcZ#XnAphdrq_g}>K9&qM>7XJtDe~<4H zaERM})};i(ySg_2_`Oo%@ACyxuK(x$D+o9$Kudq+LEZpC{&7D4ZvHs{P886xUwQu` ze^r1p2(jC;_5cUv-Ov0X{lcS!j1>;ju08{~x(8p4@4r2d(*uqKP}E;|5`W-9 zpZ|Oy{a5X3`*DAOs2Sk+07d(S=L6~gU3^g9@9L2YIQ2lW0q^Q~lz-s;?e~unz}W$c z_X|(r4?JjmK9K&acC|sri`V|M4vawYf8qH+_WNJQdk1iIfD!=S)j2}>2j1Vt>kK%- zK#70hN&JB)0D1jSzwZ|VP76?yUwA(Mh4;JqegPbqj-Pp?0lcg0fdr&oUHAX_Jb6`* zKRpjI0?uuqw7>9tAn&7uwBPam^gL+~IKe;}0Pm{)5|H-4##aV7AAmCc!t;UfC?V~C ziEj&VuseU|j|K34Tu&jvN&JELr~C;3jy6!%UwM$={>1xJ{(Jx@6DY?o-H)OJ0%@ayU z`(Jr_fMWxc9m11k2qgK+AvO`9OG-koM2#$t&KUuJ;vy(*m^O7v2@?s?Pu9{q1@> z2{>PYR{n!`#rz%bM|_Yz==P(25ChlqvksI%UqN`#`6mJC|6P24%bzsh7y_;Oh35m| zQ9{~3Av1}Sj*5i%*6 zWb)OfX;Nk~Gik;qlQEODp&w4}%-qS`=FZ&Pd+#KZQeafXfXF{+!3wC+KVT^ZBNi#lwFUT1%mM_SF&H&^++O?2KT_>l&B&C)kl`TZZ!IU%@uCc0=^>FNOF_|YuCKRU~L-bJ5M zdltMVLvQ*l^sLfYad-rxF45T~cx{GW2f{Tgzq#u74We_u;F=7*Y0!(|n&o#k{_>bbPfr=PxP3E3!(Q{qH|L4{h&u$>}MB3@5esl z<<>6vAm~kl(uLByU38`dKLC0x=L@Cx+oCfg_(9O?K>FC~eou6c2>yxau}z11IiLLg zljzL*te4*m=rL`UK4f~X^0Pn|Fw|cZwTaFq!B1q%?*i!EB{~NMAI+BE1u_{->@+5X7yo0Z=R(difb1*OmE;NSVu+bcQ;1rLZ` zsNeIY_XnbLRPc?WXYKC-()VwoGw*X=ex0Dlv|0M_Z?5!BBODzc3lDg;=xh?~&X(T= z(3=pQ1A;x-^1A?f9~7M^GQ+^Ud!m(V73(UVfFC%=!`N&DDRWQC@U>5Y(Oy z(b*+f&C)~SVuWhOUuKg}e@S!>3+@#?``!hl?~9`Il;FNBy$eX+mB+l?It1?py=44V z`Wof&(0`{<7Ib_pKY)4BnHGFomY&krjNWYJ_a4!i5qvx7@nfvl0GrX9O`iOg=*&Cr z`To@`y$eX+a?$A*ybts`JZTq{zWsrY;IC!rT|oLiE;=U!-vN5lNZ*B)-?KmO<<=_r z&MdtPNZ)|ylm&k#iY{W>Vz}rTl!#D_Vf>&U9{N2Un?YIs=28&dD>{b-e=b8WMmUf> zgC5B|9cj-#^yBk{=r|TdKY!ZOcgQ?Ijmc<|zGps@FAzwC1fqXzp!W+IdNG1eGfD$J z#x;6?;R*Df@ddAs=LtRw`QY!aqWYWQPu0C21GwBQ8jb)ft%w0_?sIx~W$I(p}yzHf+5fKR)Gvp+p3 z#18!A9;>j=if>r|>_gLX0Lo7keP8qfe0r8%JUhJ~2}HbL5_*?>#p^Y|i?Z~Pk`Bb1 zEqz9$fnK}l1^A3CJrHX~ua)0`o0bDe(s!fi1^6RbdI;5lu#M?!MvpYJ&)N2W-GVv^ zj`6~8!hrj)=KqgA?O7cxnnQxqk>h3I9fI=(n^Q@BPbmIj!Su~}{<^^ZVCVXk(@~~< zpKGLM;o@eVso%`*b}QfGV-BbPqRsH>PdmKtsKdjbad_l$hbKPkFnZGAq4zDdcqe|| z@##^g*YQc=eg3{@k?C*5EEc}$hh3^J9E&sy`7YiQV;PKmozvzW{ z0iNpia8XY^JSu#?;EdpOhOrrMvjjWi_1Wrg=0vO2*BKGz@%w+}-|b&D-@^5; za2N}oTJCrx+!)|&#G3ebe0A>czwq<^{loX@JJSx!HQ^03JLKOV-jgBE@jNB^yWZyX z+JDtyd~ZGd6Tj?u`JMItfpq^t_n&!7!~6B>Zy{gA_# z-wKcQ{yV}i7yfU;uMi#$c>Z24{Mo`e2J(5KaMqz^5JG6!3$NZw>e%$8QbzVaJC8KI8aUz>hj!3-}4g zrvrY<@m~yhxcDBEJ8N6gQS}JjL7i{_80Y z)7mKd=M--zemcdmRX&O?z9q^3O5!g{@m0iIQ`}h6>J(qi_uVN@bk^tXXg#ce7>@Ai z^LOEY6qR3kiM8~jmpC*}{A;(?7qAqb__6wM;my6GPul+z^#5R%^v5@PdOFtCr)$?N z>7RdXeYlYRhh|Cte;57lfj&EU4EG$k@^jkpKZ*|jtfyz@wGO9++sh{ZcI|7P{$CM& zmOY<&_9cAhu!leV{`z>WVF35w$^Z8E)rU)7RNJkcOmAIo@X${=?6`V`;nDlO9Ut20 z{!vBY`y8MCpua!yy9(DUxXEGs0f)PGdA#U=!$UVJ+(w7fZ`AuFVg93WetPJsOD$dT ze>glUoOQsbG5hZi0*=2vq+_f8W{QA9uL_#s>e64eo!F{HFu`F8A+m@Q-@je@BD=3HgWgHo}g7n7e#C ze%teR_}eeGa_bNbbawr-`yc*$hr$0`;Q`U#bHdcV=Y7fXvf!@&^m3m5Yxj@;&GB8Iad?ljxoj-KQLOC|%Ph9B+TzVHDDTlk>Uz1?O*eeEPpU-1Os~j!;kRf1z*DZ>Hm= zR_{B%=i!G1LwJS_eT;qwJ3aik!c8@VXV`4`>FYiG&nn#88^W_+hQ4X^Z}9NHt#H5B z5T5-r8~)IG5C4e5eX1cm`)S}gq`zyOhyQ}YeX}8a=&uZGkJA4gh5KGZc=p>Y{rO7I ze<@sx+N-EVoIHiTPQU3_dU{@JHNrOu zf35JH!e1x6B79o-0pVdBd!KN?Lb&j&JgEIP|Zv@y$qZ`Uj5h5}f~Ej+gbm zLvUAs7hmr28@~7D2KqDKbvplD^k+Wf>7V(QL-LY_BpBM?zp!cgf`9ug@28s)%lMu8 zpwm4pIP-qTXAU}i^ncfnR~^GIw{%R83GQ$h7aShF)8Q%M2lc)~{+UnP&js%m{o6fW zxGe<}P+f*a!$p43h ze@rms|IdU!CK&SnxbP8p1c=j-8$lck0Ix7VZe#VYvI?7QnHbqwYerT+Ho{ zYh%c+3Op)Ip!mlDkSx~3c&-+=#ifZn3!}Sd8%q>#LjV+Qggk_*_Uu@R$E^WzBKStG zxG%TAN-B$^0w|2+Cu%6NG0?VRh$c#;HByQvO0~FLDUD1H=i}VO{_x%lG*Y=1CTb=7 zR8-7Q?5>RoFrn4_u(dGMDr-L~6-FZd;Jf@(t&)r36Qea0CQuKhiE1=5IbMz?)z(IG zwOow2WBDm7gJ`5!7%w1~3}p!(EmW$tI9J&n5ACnz(OO31StFyhSo=UBdCISkb4X#O z;PH@uw4LGHL_Cy_C#!7IrFhXuVfP}e4>F76Xt9Md65lz{w>%yymWJYe6|@YrpK7!_ zKLPro{PB~m3X$NSujFcqlr-3Qv{D*pq~X%UXyj#bw$QC@-YDXDU!hoJDhsyWTQC`?h0h3bQJZv*2>*eg zt3^T_Mmm2a|KozTXpZnFg}>+- z{{8u)^HSkJ&+FNf-@m;uo{z>##gSe%Xs}mw%c!d}yfIEVoC6PRZ;$2}O8m2(BgXxE zCTbXQ_7!Sl*57i)cw%yVC|@y7U5dLm*jPhGdvjDN?E`Bl53=tEMqr+0bT5un-Z3Z3 z2#}8%imkgP+P-u9APD7c*a_r|BVg&~&P7l*r4B!7!^P*?#rW8UWI4NmhSFNo3?Bj7`U}1V!AZM z`xl}mY7IV&g0p6VfQe3yb0k16_vR{v+z?n@u~gbK2~ohyoe}|Lgtbg)-;T|jqn3h_ z%h7*H+)aMX>hNknbuurJ6+(U_>X|ARz^+iM;P{r3?HF?gCM~OrFd!AG9E>Lm)iGqJ zk1_^Ft15B|VPzja+L9kfO3PP(78Ez>l7BQ7{ObJH4BHM+uNrWwy)S3{WN~-L7|3WOBHYV zpfFS}6$``r7sVVX3cDvUmY_qnM5Quet{7DzffWlVRX)rnq#v}G;)s=ucNP>)2!>&N zB;JQI9WPWVL$yTK7nBahA4iB>jUr+~sV@8(-${B^ehL-H@tP&q)fo?`ZGK4${gTX} zTJimmr9676KXvIxppnApXug6*iQ290%jYLr>dD5f3#*GQOC(>(-!+*>3h3z+QLfn* z%CseE2wzu$S^|3Z<}3RlhoQrQ(d8lRg_gBvNj!{BWWpkgu!^yl!T8-wK9!LklWpq0 zU;+@@6&iowNpa5EBP1b64-|ixz#ucRlMPG`52K}zP8N%h*hfZCoteOtA&e~8i9hEM z-V+tlX}qyXI*hc+6Jc2|Rqv-R`!^|_vHY-cIVtmw7M~44DC0>9YU)Bt?DEgu)Y%6BqT-$N0O|Dm?rY2Wfb>v#X*xn zEqSF%WzxD5Mi8=&9m{5!(G<0s! zW~fnD&$jKo8+*GtxA(-i^lsi9_if!CZ|I5T-_yM|?p?MuaBrmJY~eA;_;`&H&fD*5 zIX9eV9{8}`7=K|`K{p0dVcoIQI8Ueli02%n8YYdIewFlXbP%--((h6YgL{)^U;y?> z4E6M5N6q;hvA$eGVD@Hk6^OcfIXFYmi6uT8nU=^!ipdFN%o=!katJJ$0h9K|vbT@K zU?4usqdRlzgh6z?x)hIvO~Z{~j87#ICbUUzy;7ZUX%ATS>{Iu^<}w31tHcURtUjhx z2M&{nbuCed)m+*L@rFy|$O$lxCXhVRc#UuDbAhO&8k=*l&cdX>Rzj1Fz?x^*HQ4OF zfqjzMWylN;=OX-J{%F0~ra%+B2gh?&EK2rDEZL1o8aRhWe!c^Htr-(1sma>tnrMH% z3W=nEp<_@iE(+|z8?>>ED(YnY^5*_)5XtA+gF7&=HqrZ))bB&h@Af-bJ0%CA^hy`seu zVuAd#N!Uz^;>IYY^8Uee@bieFo)dqFNoA-hjH8E-P2~3tl5ll!q@Wo(`Wr@|tmtSu z2-HLlGDiiHH{~A=5Qv;DC$VDaYlacHFyT5gvZA@OlOy^j~6-pKeVbG*TBm~u^gW)Oo#_bEC-B>tm z8n-$E{Qg478Q|8`j1)^bwonrY$fiQyXrcCkstvYF>X4?OBjluvI10pAp3PId_eHC& zW3NyrXog((3+1w!XHV@*>FuDcH1*Skv*r02*kSq=q;+ZW`SXO8lJ=mn|$)?bMg?MO=Mrx%^B4Os#T1^k_`@5idn`{&o`)2YR)?l&HIDW(X8JvcIY&LBk*(9 zf3qIoEYKW#e$MF6%!lSF95t->kuuqnP1dM*aLw4Z%|XTvvY90TIq>YZL~LH{((p%j zEur(+st9^J%7XKj2#!P${JIj!9HLtW$&I2_6-=|yHO7^*5$cJc>B?g)kEl|xcUwod!qa}j zGf_}(;s9I0Tw`y3BcyJWdPvj9U+jA3PYHfe@TA~>3O@5P5BFlhR|vK~)BR(?HG;FR zgF*HkDpkXT@@B`h4i%3~+A<3!C(IIBNaS;d2x6?M%WPyfk<@dr9ZeCd8@0mlWDznD zWLq?7tvzwz!LknuYUs|8UoM7nafy>AsD{aR#5JL=46_9U?zIM)Q7BTExMTaqHF2wY z3^a*dy}gUkaiK)QOv47EsF(EWhAXnns&q~Gwy_mT4w(EX4%61@D|k)}q3S|hAB6NO zq*&-#YLTs6*%;JTfxrSijE`$n3S#xvMzb``NW87Puj(>|$pKwx8XQ?RIB8xC<2gquxT=l5o9rc#%*y9 zwRL@15*;5|u_PWJSq&xp7*-Xray^z?Zu$pQa-#D?6)Vr|J>vdHWtv6Rf=)2rFq1r)Wml5UGYO9G!Wd0Y%O zs#a|xjWu2h+W3Soq;M6zh{b+1#?YEj3f4-i=F+0e2Du^1jp{0mM6fa? z4Low^F=vV_K$Txtc5%izhIPB0nBeVQnF?c8n$Y8uxz;AD(Ez4C zF0w+%r%&wJVO4g>~M8QDh>VZGk#t8hXgN@|BUdj3O)n=(dH$Yu75wf_ z`TwjS?K9|qQ20GB@bFxZrvDN7|GOaVHt0X^r3xp=`4hi;jqvS)w9labF5zzx4E7oK z3I7wpixvKe@UQ)Zf9J>Ke@gz(ewq8z-h%Wm5&kkk+FNiXyH$9<;PVvz7U7eE&zJwS z@ZS@>1pc%~`2*p9DtIaUSPn;pe_!wg3LnLuzLyKW5dO5MX&2rv_~Y>76#5q7WkK3| zGG9}|?-P6x{P^8N!v9?GC*=Pr;a?SevHZU+{OOl_x-OIdeBrAEUn2kOg}>_g9{#2B z@0b4@1z!e#+TYwK{0{|V`OgSHA$Ym`PYQ3j!s%ZDf97j}@K*|62|t$qCgFDpUM2r2 z;U5rODF26qKQ8!k__I8Z3y;;#VM1p93$FBZ{G?#3=Ev8b z64VUaHxKMxzI3GmRwu!!p-=EI9Pd4T5k?KLJc-ugqY+ng{c$6XB@SSkY5A!0)VoX& zsKq_tq3y8$ggd+gwxDna;HKcl;C8}of?EUE3bz1m9$W{)uYr3CZjSk~r6bIfnRY5p zXc&W`6s58ZnGP9-wG|8=CLq9KD1m@#6YXlWbpnHorb(3NtQe|Mtysl`YV*Ky3cPtk z2i*e}GO5=J3$t`Z#%rZ}t#q$yZG_q`lYJ=lz}ln|zG9UHDV}S1d}TQ&g>hF`Ombz_$Jf(i^gK+ z$8Cn+Cj6%b!?>LnewSbvx2J@^UXcBmblxodcLc+@eOUNs1vzdr{Bhy`DM)#Q{9s<2 z=d)cfjOQJ~5#*d6c1?8Ei(yMJ1apG9xP;LQ>xY~&x3bC8k}9t4gHW~DSVlGgm9ct) zHx}{djE46XD};x*Ja+^J$bLuWXt4Zc5;>>fG^Wj_P8C}Cp@kMO!!h~aXQ42y;KT$= zX^fHxmMzpnQ2CV`$J!&!s*o218t_@$w)}9uP=+*)A5N0F)k}QFUzW%kxNx@*#bh%a zOG;8MTY`zSClFRL6{bRKqaKfe@m&v5m+nkjRn7?4Jc~{@n>&k<4Nvi$N(hw-(K9}P z@TH&u)v9sa+9vhOJ#Em_P!DsDW%8aju#Cd!{(G>pnIV;|(x18d&Rl{5wjQwP3sl>u z>G4`pK2^ZY3dJgug+)G2I+)wPnBpg`q5H7zdVZ>D|&3YpoK- z0k-*qZ*3~iRz%v?{`P4Y3=0uVxJ_Q!I6Wc?j`pM0GSY}mQ>0Lh2}-KIJCoU`r0-b`gI}k)VjnrX8Sq;M*K`ED;uULwG{-EO=daG$9h$Bct2^@Cuz;0 z!OjsbqreOKYf3LQ%0QhrrI$(9&1`8>DPbrMMu0G=&AyqnRlhJ%|AcL`*ypfGfkDx&y!AV*H*5w+p``xD%8YZwF1dQ^><{ zxEZ+n;SR#>LONKWJ7~4Q0*-H!xy>EcdzNA=Nw8UCIM`Bx0m!$3C38i)LR~UhB|4+5 zzJvV^&8ktsvrDYn>BP?jMY>n*fU&EvfUuSRb+61YQ}bM@QX0AcWjv5EM6!*y*gR)%if3X8cjf%qo$smyV_oGlo@Tsa|&EF_=`jFi76|8T#KEDdXZEWwz3Cjf9~-J$#sbIMKQY@xC#Pl6-;D1+lRsi*i?e zJet0!3i-YO)3AIMfoT|vbq*>4OXVCEIWmN*<1oa8jfkgYE9@M6hQ}i6%9V3NSpTij zek-9E4HYJ^mD3{l_p$$OqFTfvQD}9hjYL6HRD@QYAJ!tLBpC31lmtY_i4qcARX$W+ zp?sMYTkJt7=wxlg2(1S`Oi)14^76UyupFtj2p<*}ZOTTY0ZbLK#siVpgR-vakG&#h zno}Q#%^_bZTFRjV-^iFfTQ{TiR6x^Zh0I!R*ETF47WX5aZ1Z?Fsu#9-C&>thG6_bw zuoMQNg$A+p9Z3Bheb3gU25lva%ZV5?8M0yQjT*y4wm!qp_BckBVdr>(f{AM6fw@}5 zHfdtvRsntw^t^yjty}y6+@E%)YN_*05zfTNAY1rA%9WmAjyb9)r~kaK)PUoie1c!65TRT#lpQG{|i|=eBBGD?upY z&J5$JG`}?2DDer_2a=K^V<43v?PUtpCk$w4g))Yd?0nIscC;bXTNu5qE!hCkl{S(@ z=HeL1Mfh&FbIcWYm$1GuhAK0yM;*6gZTKkWy_qHC3*{)=#MHhOi{5NPo_vp^G%h9^ zVhay)K{lSZ{4*Bh5rYfPSdqe#buiQSSuYozZ8sTLoy`>Q%$~+lZtRk%h^UhsI@#)u z^r4$Y$*K-)jebb$LT*tSMQ9eVGO(RtVFf9NNkSRBTrh#t3#d7x@?-_;MtQ4MjbSwZ zg?2N%appZ}>Mr{orX8Y^zSxg(x(p`a@$EOv9=RVoH(47SEavy-i|UXbgx(x6WZaDI z0ehX={@6oe9N<>dx^L#oB@EoD|9&h&R%@07EOcUN7Jay!2a8L*m3&*&$D(XDjQc47 z8h`!U-u|R3VZ4F{bZ{7nLt2>!=ma>TPEPnzJ~*b{rK_sgGfg|T${-la@SbV}IThj$ zvdaC~w$4faq&&D2shH1=W_d5VM_4mWV+?W#Fq$#9eW|uGA-!JwvrH&^LR=XgUcF*X zd#HM)2|312l|pUM<3QKOe&Nj~+2YBe3bxg4A#j@l7beCELx>CMq-i|8Z^Qe>DC0pc zY4*Jk&p*?Ku-ri(nJqL1dF*4y{(g<_SvE%b5+k??Hc*9?Dtp>;7248PQL|vKuw+3M z79qo1CkTEt8jMGwC%{Y@Vrn&yR$Q#*>?egwtid7#bk0^R8nB)FtE5u%GT3+L&{m*R zABG7B>vs?)5nx@auu2J>tg91RpW>+LjPz9vtJtW5(+b!mB%zu=#Bb`~{Un2AwiDTM z#D>A;E7lB}j50vwcf28nM;of8%~Wxwc27fM9IOju3U}Anp@`$<*R5bwc!+Jo$cqv1 zmFrfdaXnP#1CVrT+%;#t+FG*}OP zi`HFpI)-@}T7NgX-V^Kkh#7d0Ygj1LJ))9IQ~P~SheeCb+vEmRFjqS)M3xTb3;8O` zjz>0_eAwAD0G#ZTUKDUG2y$N+g(x$JcPT} zzfb!CuAlyh@cDvVhu}KkrNU#uuny5Ge2rjOhv*P~t6*4%7!+O<4C@Wk!XFT%PK)ae zzbE{Yf?QXi|54%J6b$PwcxBJO%Ku_u%vX4xvBvWo)?J=0JQk##0O^NkvHWQ#ko8|J zf7%IT{k!B(JAthKPs#t12LD^-e`$k%UjDQb$kKVW{AnkU^?$4UX(y2N|4sSRPJsUR z3x7;7*a_g3J%26#U?*@w`26d<+=87zEWA@N*a`Ftf1O~k6F4CJLBU`r@L}Oc1ZgM0 zbRHM}1HoAS^VWJgS_Lnc|5D+-g27IpUwBFIN`(io=V#YbWX+JvDV9$Hx{|aE)^gkm1 zCGg(}_X*+01R0k7;)L+01eePHwD1?L^K{bogf15TO2OsuBdvbncMG=5|A6pM3a)@Z zzk6JG%X+83QsL(d-!8Zc{#;)S&ri#rmtti7@09;F4gOQ|zqY~u4f0JhlPJtaD&316#m>-`uDr!4`9z#^6v(gE$3_He+rDA^}a^< z7QtXovQzk*1cN=veZpr1KLa|Xe?<5{2|h0W{}6sjho|$i@_(7|HG)sTAL_%XNBAv* z{~-S{;cpiF9Q?N+{I3Xqzu;es{v*O47d$5auL%Da!Q=A(f$$f0dOAN3f0j?H@GXL0 zkpFGM#{|D9|0&_`5PVYp_X~ei@JsUljPQRH{IdL`4W5oAf?tvU8sUS2C*)ri{!YQK z%Kv`h#{|D7|E~*wT9<$4Z{+_R;V%~ay8K&(Zx;N9{9h$}pWrv;e?a*A1^-t5j|l&q z;7R$P5dOSwPtUjHf0^)W1piL{n}okk@bBdx>gAW@|84mn68>?)@5ukS@b3%upw3zE z^LjiTFB2pWrvEF1ZxFmu{@9DqL0K*@xJmvc;RghJ;m`hZP&j^`*K;<53SWq{4K=XK zwslmRK>HLYSw{^k<(!%MBswdpQ+9JYO~R#0offTYq&tXxrXO#;37d;SmNOoHftn@$ zhJcTy>w1sI<>6#Lh$9YccE6qzbKjk^K3dnewXf#}*q1D9UsJ?(XIjkr7Pa*eP4>fY z2IJBaCnA1i1GkA|RTNh36`NYF2ZarQ-5 zBRj}l8EDJ=esKiKmHp^?ty{WRFUGcj%nopg%Yw97#B*XD<069SUtZ5j=(`LgnoQ0@|8!3@0yOw_jqG zP5v&Jw>5i5N{pB3XRwG$zvP2%dCze5TAjGq5)LLHgmcpz7zUZ%Pf|4xstl5jX7tD zEsDY~#@xv98bgM!)9?p^`Q|iN+HxG}ygr)1%ux3eZn6S4E*C^;g1TEf3UqD75;s}z(3~Q>ghv}rVsXDMmU`@YFpU0 zVs#agT#O}A*pvmi)tZ$JTC@YEBcIqKwn_|IFl)7q)NCm*XbtwcE<&Jnd62cVY_~p`E^cVV3Z{=i zWDhIfWXO27bavT(zEBj9>e#lp@H>!*R)`utRK065mIY~MuUJs0H=*bCZB&z*SST8Ri@ zyvy2H>Xq1Hvz$C$;Am+emWIbO$vT?48}@xQ*ciSVya;Y5TnF5y*Fe^XYlWK!cj_L< z`Ed8c9e|sH8-v>kw+ZfHggFFv0B#pt48N10)66dLHftP9m)?OojV&jz5Hx6v!*idW zcYxZlX#k8pXXlpOpAyk*R3|54RgJ}vk&s2!Y|X2AR)Z=A2aHrPKKSGEkV%Rg!oOIn68rvn3}VnPXMAOxRYSAdYZBuoBD*q49HTMkOrd>Zyhok*^JRT z5oUg<`-so7&gcu1gN5<3i5Q*5svGvWzjmi%nHPH`xI@`&Db?;1UYu3}Kl<$<>e|7}6a8}z?l_)$U18}vUe{0D+T-k3M2^axU} zV0Kmu9}uJ*LjRq@_X={pLjP&u?-t~Ih5m9YBj*8M5&i=~&Pzt&=I!$IvU;hzxXyoBjLBK&UzFOmOA;Vn5&FXtZ& zzd-mJLC!zu-yysx80Hh>!hcpUtOpzr{!ziO9&kkXDM8NLNdGC}mk)V*E`}e=r(HOH zHho$eo~JcDb4gqzC?NwJU>p~En0Nyv56=L>c@^;O9>77f;RF;2fjU%#LP`BAOmJXM z0b30_M+<`qPhE}b!f(n@st;bxjoQI7r<3Cm zF-&c<00lq%HS_Y$GfL#VxPK z`MP6eI8zbEco=A8EMAWvgE)t-b@BBr^xn{WW8aP~@zv!epmBYR`N0OWl|k3XJk@`( z`7tc4StlzK=6Sv4iJoPU+|W0O!GFcj1frD(7xLGc+li&z8TFK`T zL}kMG$dY-MoA~X{_|=sOBfbVDL&$V01+azWML3oQoC$gMk2fPqn(`kRyS@dV@hRh& zwGzx4@ubbxH5qm74e2_u5Ayt8$o*5;|AXKCfE{p$;qD`ZUk6;YA9DrZC*Y34&A=^v z#nm{`HQgXITFmXP-VxtMeRQE##Wdh%tnpw!mhJk171&w#`GoB~oZ4yEPj+nq_eY#X zP0|=5Y+|v=qIKNlL~tDTl;^k~XbxeI#t}Q*&X3o^*-y3twt`zAnsBp-CJL0K=XGy_X{H}*WA=BFAkWF}%|3>IjdJ4hJ0-6**v0k9 ze@HOMkGqB6BN+5guM_?z!Jx-_tMCT|FG3oq$NG@)#{`4?cvSe4f|MUAcYICw_XLAp zJKE#vUnCgx+U>%(3I;i7r|>rk207?H;WL6kul=XOKP?#a+Q&ng$?fj?xSy87`dGKB_%^P75 zM4~`j95LR$d~Of&qVqZz-2${(EDJlqo>$?tO6%^N9B|sXaOCoMGtSe6o|Rm{yg5-G z%8%vt;@C^hqU_{;+v$^>tU>F3uE3y=KuW){r>|>6vRdb(MkWLqh+k)d#v-{Wu>Ev? zRX54Q4=M4^N=*qs}!%5~Qc+8^p%2R) zye22i=RnUVbk$tlj1IC^1cB=={^P`s#Y$pV1Lw?cpmVmV-CdgAd9z?Vo8&RtS!a3K z`3%00PN}Ln%&F?9aY$j^JkIejkz1ky;rC~G?rNlWR|7rb=RvPwnu&62pqHI!+RRMl z%Ji{7eQH?EW#)Wy%?orF( zcRK{Q3+@EmQMehnez;v&Cu)Zb5yM4rHm5r;A)$WpI*|Zu#)VPwOp&2J0te2_pqZ5g zI4^X1Xi{Y7m`;d#jre8m_{g+_^vjbf4Lgp_&GF3l* zwg`WjV3>EjTzH3In5T3J?-S&>x)JVX;dcp!@pDr6&j@nd;JEh&;r9xLapvv9-z^x% zr3ZvRBpAlAM}+^CV3?;I7v8ep^Bd+V3xszFl09(z+$0=7=X~ZGzviAl^mMVwWak8D zojxGSOz_nlyy|Bm-~Y_9(~rSD z2=^|yH^bcnSA@GAZZq6ExFv9x!96*R`vu@QFSr+w^8Z}j`79cjx%=ulbno*K`XOyY zZD6O1WaRyPv4~^Gpwq_hY^L1=9GDL-!{ohZ2dOr{Ebi>Lp$ z!5^xPDpsx`zVAQpiA07aBFks2DSJtQa!B8Rj3Zo?gWJ1JrIR1dl$Tv!YI6x58xOV1 zpz&s>P#?d{^HQXmp}C?@fg2YrHG2sx&j_V_?_72(hSaC3wB<&^qLjEwgzvw(JApvruM#PNb_Ny)qZ zt+<65%U8z3vhTveR&BgIxV$b__RWe}->gjD@OV0(FSQ0@>4FzBP&eZd9%d+u&zxWF zE@9rBuT-!aR!5gfsiT|A&Qw5`_yy2qM(XGeHP9t~o^-9AK{r$mr=8ya2XEY1_F`HR zv$Svx3&Bb)0nS+-ULeb^MguDpN5XU(>j_sc^Ojy$UaZu*e4$}A)?y?#`I( zW-3GNFSI0N&Dz%B(8LP!Yqd;^R#-_qb6wNcC%rW`&aCS{7TP=339Z1+sDJAr4LJ&a z%F~Lo=ZQVLuH4RO51|7#d@AFuudO`W*TQ!$Puc~P1?=#7nA4Rip#-fs>zl{obd@Zh*-B6EXuK%MVT&?put|aJk92|^6}U{O zMGy10uquL~xUmpy*HZWn<^RS2RbMen7s4_r#jb<8naDZKLo&0U`tWC;_n=cyF?3_N zs|mG9JW&+=u-56rr0IO;OFIwL&yVg9UJ(rXp=sgw3x@g5Vd0Mn2EEazh5x-^&=38i z@aMeIzZ>*J3xuy14D+TA;p2i~-c%L-7QrxYIwbs)f@D;jHysx~|4shgFmHOH@Ku6g z9@HVcA{gdD)56~)80JBTg`W@%>oI>T{NDwGzAE}fPsa+ups(r>J|-B}fy%-|zc^P& zQ)-@Z1!jTekZ|88F6!k8WG2r~(NH-IBe0xr3~yWjlW&{=$M9x5eRsYBld}ET<;fKq zw>{!LnGDbasae z9*hqq2kjZro!gW9DjMHnTEZoy^|Wk6sRE7id&^%S&5~{&;RT z)L*{K7y8MYx&~Gc_HVeUd*g~hGmj6`IJU8?uf95#$z!}0170|B&JJ$u*)T1p=$Hy{=p4wKif+;vEs1JiH3(b zKPIdP7WP`%P835YCqE;k!4+*=%{3?vqru)Yvu@$m<9)k8kSm3s-Ck zkCOFG@)3fsC$;rfTBowavsY%$7W;hH-qgC{Eidb!}~%7O{%UfJHPx9F1eP`AwM zz0k)#2d?%;=vNOMJN<3AC*dB2dl2r;a3ep5J74ks>u^uNJqq^_+`HlKg?l~RJqSlS zkNv{2(;tJo4DK0l-+cqv6 z^@7nEb{fob)Q^AlmsIA%vCY`Y(e2#=H!h`eQDN^gR7BK&hL`Q@%1_}G$i3X&!aHQb z%FP5$Ep`zloYtFM_cDYP-93SeMeIjr6J{NXLKg%S^ni>p1Ww&!AZ-jsJA|b$I$s)A z+f6*hnO!J3_8VTFe9bB>+0blm8QKuQ680agYqL+H%cN`}rln(Y@UWXV#%;N%)9fa~ zy%)DR7riHU2br!*KUm5354pmGi`hA>a!>5W?k!#r9*JW`8|(rOTL6#tWNIVYV+(8B zXz|2~QXSb|PJ44xv@N%fy&Yr51bI+2fRq+%30l}2_1+xb@u*gN$jDOxO&d0lY^kDh z#y{*UEcx`y5qSqFxE$tMXL>o8!BRN{MqJ>-;Q`hrtQE+t&b%V$HtF|Cm0Y!rWi-;r zu@Y%|1qZIwj>Q=CEUM{5towg({qOwr;J@|Odin0X!XFW&d`J0cM);>1{68oB8-hW; zJ1P8M1cQ9{@4_$oey?EI=kj*pza_|hF5K7iJHkIM$bBxP^9kXf6%70DKPUWa zg4}=4@ZS*rkAgg3kN!^yUw*IWgXim&;noN*3SI_3mfMu@_Xvh_5gri!uwXcM?<2zh zN-)UF$A!1N&A%JuT*!H%>;)# z)`HQ28%^N0P>d`XP@p#|;m(oU2K>qt1fVdH2~S%lGAvWf2l*QjHu}zPMWAjcj@C`^ zrsgV+{xu8t8%%m2Cv7GYd$uTFKnkWjJzkiyfrQ7Sj$m}L?Q%AIhrq>bSkgEl&5x{& z6A$iAhkZi?Yw2yBece%f+d`V!FRVtl#ksvmr5$bypW7f_)p=N!RC1YQ2XS}_FUDf} zSR%Y?rPT~uJ&lX8T)^y_jsFcG-m7xGBaX0Jq-R@iS9A|*U>i2|M15Nad;9u#Y>(FQ zy1P|7Z;0Y}T|qZh8HLNaCU@^!A?qB3d;@qD+>78Yg?j?-V{k07%=Q9pBe+9FWw(#S zDH8Ws3Hl5Ng*Ml&;=R75coB3Du(N~$#VftKDBcJ$IFF;?GlQX~>U;MxJ+|KwhYy#F zSYow+ii_*sGi4g>_23>JQ!x`*GUaLWrEGl0z!!`@rf~bxhMS3{&Cf{3W~zTU6c5AL zKDo*PV{1ByE8TAD+QqYo5dm9y8$)oSnY5Fr=HVfac^2(-4b09kdSeW)Yf}CJyHY#a zHi;E2b)DSq9GA{4d43N%?Dr5EA`a@sW;ob7jYE==kF&(f*~RdgXkDr)(_0k_*qe66 zz}CV3&h4AlE-My>=teNf!K9^Hx`Gwf@HFlZIQS0dPmTV+EC0s?gFWkKgnv_z@)P;y zN#Q^7PN$cbe=K~H;Hdojh2Jf>TmI9+e^W4w_xB5bTriBs$Av%bUH)B;_e{?`;j0A0 zy7?O61wra_$bZYiuhu>Zcty zR*F(~S{c;^!&nRwHgAST6}F~aV}Hi4VXk{0c=$UopN0D_@F(a8m*L}3^I(@4;#dJ- z=RdbYm=gS)cZyLv?~m+c$O)-6z>I}IQx<1)B2Fw6Md9gfvzWMklABBzIP4lJhWsDg zf3IwWxwU-~N#$-b)7)`OS)%TeLM0MsXI!>LN6&4Z(bzwB9%|k{rsV%-!O%b6D*U~I z!?$n% zUT$I$R&RJeVm%iy*^3$R?*@%vlR!-pR+lQ6$D%{n(KtzOfLuxbWh8UPell5%Q!tt>Mykw93Fprb)J;2|SPLQT}L zw;m@bO*39)F37Pu%r9`FGBC2D=s0-JZ^G?-7xu5hEr6Q`_tZPFrxor1Tr1o>xTnCY zcEZg*xR7~dI0sc`Ofn&Rs*+!~KuMm1bYx;R<2P13#-sYv)?#>ahzK?vfK?@@zoe&& zM9i!mI)d*EU{#o$uUSB`RVtehe649#X*6vgPnW{ds`5Qhpq{nHCUvcL;(J}Li3Pu% z1P20;cFYpNnBr0A%AdAYpq!>|NK(EXkAO|^+;&&N70|WI<9HzNYl|bLVOu9K9h0pR zAVGS*|8D0ifnPoCJ&wOnkbHyu>L-N1T#)=~BivHqy@Ek*>K9%Tq};^$`+nhX6b$p( zUlIPGAoV0{4-X6fmSE76{Il@qzSq+m^dXlDf4N}LhqMas6(k=f{eIzDKF_k4l0SaV z`OGEXFyj9W`2-VJcGmyq{Xes;90gwE>jpuySa+TV(*rINE}9B*jURQPeTSHKL(j_1 zKUEx4bq7wO@ygHh9dvfZO4^;YNM~zv0%wT?Y4E_|48|R@!*J z(%2vSTaPb;L>pIyN@IW8xQZ!Q-rnB6eDN7UM^|MP`XqufPZiKSwa)m9B%L3YoD)Q_ zv+%?JX*tNNGSOE1w1R9$FQSq6)$@;n@Yf24`Pj7Zw+oVgP)<1{{NuCuKPrFn74o4Y z!oMXL@Wg)!74Odx>=j&+fY)tgrv~3IAikQ2&n#e^QY3&+*_Z!v9V%j5psA?q8Yx zKg$JbIA>oF=x{EXZ)@z`8f#=r9>fNm<)J`vTN_rgM&cdYHd9|1 z#hbQo?_aij>1^Tnny1WhGl4~zogO6#+wN@Px@;-h%ny8zXFgd$E7*f#*xx+wTw{&;&^>BQN&msx3lK6r_|bMt-7!e%?aZEnPF0aI%L9* zy`$8e%{*ld<*A!LGU7poKF%YBtV+J7@`vEHE%`ccT(f3{EA#5k?_R=!T4KunuFlYM_T~J{2}~ip zPKJvGSek@xjP6o}LJai_TRudst2d4PP~Rpe>tQC#!yfCCM{ZMJ4rhi*;$^dZW-#2{ zY?C;?IkOpI%ELk-Q!)dQweiqI)ZQK?GYjV_@f8cJSIkoVtivkwL1}r~2ibioi$Ulz zK1AE$Yz-(`p=)~$l1_5`7uGJYY>eRr?KXYgXI`*M;Q6+BW-WXga+bWc@{@T1M#k_w z{a5F6q5BQsRj^e$=*=``r-W{y*Bs^Wsxf2zNW& zX1H~555m0*?#*!bzE;{5Ei1%d-d+q?Rg;X=@GtLR$J zN*P(hEq-D}qf(3d59lyi?nfpWny9f0d<2{h zw|j#syB!Q5yb0mCm`o zYfLKpL`YZoawZPb;Q3DDkqKs!ZLxTJZW0i`b-eDG zq>T(`?SU>VuxYkQ7K*XgUsI@SQb7DtFzB}UF@>bygHvohjhq158SXmzT}_4Fyo=QD z^B%MjEt3v~%BCed+Tqi_tRB*>+e$M9;W|=e9>Z3K%k!q&C!5xz3mVUw((L*OAyF{c+R=jy+s9@cCb~XHS>OKu zmHXyxK*ue#gSc?HPy(m(XG?CXFg`g>Jx&27y&uPz!(If(lw(skJB9`#JLhGxI+)v? zk3tj(xD+VhRTmId0cINLqxl8})*S5uZB#?z*7QIwiH|svZTN!gi5eQXaj(c{3Yd^)=OP?+?dI$P=2la65mjXN!kc?nXEZU6 zZr6u1DP6$~3!?c8VGsU{AX+o?5g`0+#pLGdMLc$%)u!gYf&GWd>dtxNFAFMo$ zN4(ibF!`i_t_s{{Y>hHPhIuA68Q7KYpouDJ#i#M$H*5HmuWvnL&caBUE*?G=Rm>(- zbGUR_EUi_hU&G~SsN%p2@y=HyRQ2wk;o0d_0PQ0jhz_G>7&%oUWW^_vVP=VsVhmzY zb=Iwe%04w&BZ*t9W4Yx^@DH1;m&Ckw0H>qbecdW&kb&90`7q-g|GYBIT1qc4-Nd01 z6_}>vqil8fB`D#IxSt7|_B&i(FDmJa{kTcI47Tj??KiA^ac_LYi|=s;?B0A)>GL4; zrhKH^M8F&-VX3~~4}ObsP-a8Gt@~!aT!OJu>c4+5h^X9lZ>MC%#VU+56NPkaQ1!~PB;2`ufY_dzu4 z`+hM!t};n?CoGO|NsTV7_X2V0rI^q8%`=*4WBlH02YulNtt19+3@@UHY2P$D$=z_2 zzp^2{UPK-VHNl`VI=p(tn)c8pEI#jv_oE61Jr34XplnmU?!}c{)>_CBFu89Ffg3Nk zhcw(YUbxpD?;E4wj(g8{v+sp?o{lzzg&?szn!>$_gWM}LjL8m$6-!%Pv&C@>P-mHS z*nVv4sO)LWVZ%J;J;*021=0zs5RG8Mq6R;^jBON(uu0T)1Xhk#T&(5nCv4pClObUC zWxWYktwR=!?0+aJ+^x<{N|cRp%{$sk70m=Ucd(8It5pi*sxZo+xJL-XU~x3PGN$Tc zDUxS*-m_#RMA&`tFy*8%nZ3(w00=kLuUIo!nkep1udBzM?l_M)b6tHJvN4b^cJma3 zeM~*hfnd~h&9xeZxYw;n<9evf2f*cO(4P4{_ExbPIjn8c;1gReE0Cx#`7ucvhh-FO z3n;}MoCV4Jb#+!L zk)`AF68lKz-@Omj>&Jgh_y+}pJ;;ZI|EVDL<80zbg+KGdPKWw&eyK(HUwpv*!@BDN z`Cl){^$ybM5dJE`u--8y{Jny~KK*xvKPDK~T^|?zZNaea`jqemf8gm!)?I}U2nIX! zUBV9vUW_!_dXVtX2nIX!lfqm6(CG)e_*i&{;C#{P6`mIi_UTi?9}s-L!apqhl;9=u zj~@2#Efl;|{_Vo|2+}^?>~4hrpOrs$^XxUe^rq7=?s5L_`;8RdR{93HNx|PyceF~i^AU^ z7|Z{l@ZS}@9R4hy8R35?c!m6*5`Nty{@p9#KMB__d`j>t__00zobcZgTnIn*i^IbI zTJYuaKOubH$DIBm`Og=AonWi{ZxDW~AZ_HC-<YWZ&xzE|)X`M*Z^+XTaX<@X8yOTlpe_;KM+`xF0e zxPSadgh z+|##CFx)@BNq9*x+&?}o{QZLA{_%%}|E*xSfBd_`pZBN!opAs7Wx`(}815fmBm8#3 zaQ}Eg_%8^C`^WDS{)k|>fBY|ne?u_bKYmL1<)85Mg!{*r2;V69cNhrS_jU^ZUxMNO z@lY?nF8^;U{9)mr5e)Z_pA-&~=k#zr1JZE~5+?o)?awP#Sf34h1QsoGU`@*X?VEZ! zw{73h)46>BcMW#0zFYAmLAZSTkbfz2yhqFXojZs3xSB?17~XAl{-{8XB5fWHrG zCr3UCJH?N|PVo_(-wJmGZUI~bcM9*0!yQGqr?4*5f!_x|a_n@QZ9z)6&mak~q8rIo zFf-E@3agoxEfCbHV$y^^yu^%J)^@vi1?8d;%c{wacOJpTlejw%D{_2VWDwXSJ`|yI zMyDBUwOU*{JTV$=^-JAuh@-9jJ$)#(!LF@+8{N<<2^V2KWVEo`6g-@4hYd_2N_WqO z9XAec>DjV%+p7{fye2NPyW(ttw$7dv4Q^xS_D+~GppYuK+1u7HG5z7}!uGYJb#Rd$ z(=B`73cD*?;Z*KnJ9yUk5W#mtZC8~^1?PWKJKl;hxhDDW>#CX|I6A9l8^k_r=8z4`X846p9|8)kl`N_KHC?T zN49ebnL>X>qbg30V=5n7q`kvr1jXFYR$b%Mc1B37rdsorMksl&@M#BCg2ERX;$_0Q z)$^HOk~MVl1%=DR473$8^Tw@m+o0cS%lL-y&1`lty*86yiv!#2u@YwOO(KL>n*Wa^ zVS-1T%;d+Re!-;H8H16M4<_~O%HU_#jGWU|BQ-KFIRCUR@-bC@xQ#V%1`jt|d)Rf< z+flHe8WKJ!80_a>EBrn|&JWqH?iYSUkn=$LpAi1^&p7=s4}8Axs|CY6aGmg*1;aeB zDEv)=VIKJF!XFk4^T3Y_|Ds@+2c8V!9{2Pl^H||Xa?>YQomg%>AR5jk=Qa$FLump9 z4crR5f;u8E<~3e47Uz-gbdKbQadM)5PT;p~h9nC?b<)_Ifobzi6*3_2IWF=n2v}R( z718zxRvOrTKLV@r;p*}g2ClXLYs}Ex{yBZpn5-44^MN|j3`r|EpC1?6Lo*hUG8_X` z2i=+lKcLBnUJ*Y`DN#kQ<#KR!oD^X8kAteJ5#Z`@vMW58~JlMqt`4jQwC3_X)2U2KlidgbZQ0{KNZe zRwY4JwcF33(Eu2S7@`0$28(93z4l)WA;08p2xq~n<4&K@5=k6Ei8G+RM+0j1m@%dE zGMH1kzI*+`Nyv~mvUhoO4em9wgJHB0UL=xz4bU)8=qi!0Yk&(z3n#g*fNjv2cR(70 z-2S7K%G}L9=Rg44?+*zNf&=a;!r1_jeQ1gREid*$Pp9i>0qA-EWR5uEZrhd_wQ6D-X9G#RD?b^?{s zxUZfjc1Ey21Pcy^EOzi@u-i=1@2A6X9f%V%Oaif*2D><&5Cxq+=Sv+W)$ z+_|SXjzhZcf)qKqci+_hyBAiYB{8%!$zD*-TrnV%E#81v3#)Ya(F-3eKEikn_nR(> z`?qbRKVI-KDjh)xZ3

L5yqd!vP}}aD$!u#Z&uQE5WZHpTOxMkXOfB%kJ6u1?Ysx zi=FwK1WQ}`_7ywhXx)xXYHK-c;2psMCS=U(z@9p5SV0}4MM&`M882hWz0RLg>?a{1F_avi2@UV1RcrcX4C!L=A=` zq=`r45*F6e6308!oPi1t1H3lw&ed{$FyOT~1;scAJ_QS~oYG9*+3ZZ3zO8*d*dF5N zI`(hqNflbCtYD$txXYKr9~3oKw{5k3IKmCrQw;l=HZb?cdSW;Mjc>r{{b)fAYnH3? zh)+!cPbN&F_weAEcuQwj+%Lbi(xGrfN<3RI_TUggEaGDH9x1^v9@CXzDg`?o7!jrR zZrE*#Q6~=zku*$8)&xX@BBPiUU5{D8LwOep#};;>NAlG5OqqRfnn3sNwau(a64yq^ z1!}0Fvsei+e|`j^`i03X86TD7mfUa{l}%m51CMM0I2kKmX(1E=ws+9I%^La83 zidxtw;G?tcuE1Q6>(x*jrp1L8kj2k zw+U_yTr1oHxOs3-oj@G8<8Vjd9)`Og?jYP0+yb}*UpaQV47U@m1FjWr9^5H>^EliQ zxQF5HhdT&21vdt_6Rv~5p*xG9yS0OD?0`xgSc+wKW>Yr15=}Bqp-Rgnn3@g17-Y+U znI_{t7+AVMZ^|9^d`+8%%=^?x$^uNlAfkflteX$(3w32UT=WnuOgvj*!4QXV+7gnf z0Eo{XJR7d7ZW{~D1wg>b)qfZUDAqOVY=R?R04n=g{)}_HCo?98xpMgmsN^b>!!!wj z|9N)QCEU_g+3y@9bYv!PJU2|GfENmW(Jma}ImKb_ zm~^qTP!wiiyAs!fByvx@t!o8lVXz=VjPg)eZ|F)33&#y+8Czn!7b3!phnD+WT_R>Es%X-tX= zQu6Y}Y~}wKd+!2X*HN7f?}PwG5HKXAp#-{fF_sg{mT$4+#9&2|V_{nsmK-~fpd9HO zS&Ahcp(ELH2*p79;SXpr{nHXI9~cOYThi8q6kJNdK%n7P5(q?rKn(;i5QqZ-TpFtX zeb;(tUyhC(hqmeWKY#Y4(K>7P%R<&W!;5-Oq4O&fuF6}3h&WZDvMzg7x|thyrWX>lAgxs*oS zt6bMG5i|RhDPpF?TX{zTg;cpT=UGaN`e@ZauKiw|;dxF$|V*QT_Kl2A(&)}c4UieD{!@6y&@HYsC zb=wWX4+#dnsLu*NEJ(d5uA6@({67SrtNJ|QhhC5837)C=vxF}V_Z7cdcv&#$MU4u7 zjUe@+=%?V1h5xx=ta9Ed{G)_9 z7Nq_Y``cB*-yk?g@iz#+M=hkm?;wZZ9dv{O03gPDO!(TYyb%0|CMT9Pd7KEh;=Q7-PJbt#uS?>9h9CNb?T_KRP zC-aVz`34$>aPh^nR5-I_<`i%ljLEUHU^dL)iR;ef>=ewzux2*BY$*(IR>)FtuFD`h z)8*+=Hr6JCmK zxS|L!r8548RtVM*VbOYGj>W)9TZY^cAz8(ztCq}4-d6r$5diT5Di9C<;Qkkp?qdiyBh0)Wu0=m`-pw#TYfy|_l4&F+M?c2OBimPm z7!K?ef$K}wQH!`ckSwIIe*$0fpgS%Y=eWhN2G2@YCF8^TAP_xa@F!xP#GT_~=Kp=i zVp~7(jm}vX?^wK`(S;}GE-l)zD0g?!f@Qh8i$_NLG}g|F00m8=QRrnVKx!z&?UBZ7N$n_569}ANODeh>#(-~r!OYvtqYjMzI8a8Mao=~2Xpp3zK=~!H|9C> zDCUU+2*>Wneli1o9|Ampuoq!B!U#eK!fJ#@gcxBq!qJ~VKNaB)guOrh@19>C9Z7ox zdX`L9Y+p=nVP-P11~l<-->*%!Ri1j|v`ugK(4I)k@NF`54~D4Yl%#ro)gx8;b6=ZE zZ)`J99?!{t)5KIFfP)=K)5cVKUAZ$h0_XzYXBgUOZKQb;v(n_1^3x;d0VH#G_Y3l#%IJ1&+qiu$- zaprIH3Af61-44ZSsjHpV*6!nzH1Tv-~hL_OPlU;k7Nx#MN7(>|n~cSSZ$JA22wy zAX*2)-{CVCe>SHQcf3~@W(KbtPgSFXHa=Wu)#J_CPX2(LFLcmv_HI0cFUVp&Q8Gxw zdy@;{m6j8h-mtbX2L)&iB;kEuDRYx6X&tK(y_55PXX1dub{XcN9n#-M;B41#uoFdI-NX7B);oh+cCxvfZAQA8>FrS zgZn#tMC_$lpP}}S+qu|tZUm3F6#U@nKZWl%{Jsm}KE?sR4X_Ka1>yRiL3W8ShEPQ4 zLTEu)icm)Wa{*6Bco=E#XI_MBk^eftBJLLfk0+bR(Ar0Ts597#gxNz6FJwHX+vcD+ zy*AsGvjh}Y`jR`BIMvuse%XrMo7l8(pmjM>93L8q)|Mt>{s`^Qu9JSZY>%*|eTKSF z^BvpbJUEfN<9<6~KXn(|adZgB5^JZM54n>ify@Mlz0$duNok>V>D7Q1B?{mg9vu|> zf*8yax_WPwvaF;m$kXbwvFTM$>n5p|KR_o&PEVha)>yB@!G7#~IKu<#w&?BffdZ$s z5vZ~8n50gLWRS6-(NQi^Z7l7X2u*EFyxub%Cq@YB@z!kDgsQ?UX>b?!WkHVA&oW=b zWmKZwR-(~8q_sQA<~bwMF%+HHQU#>aWNK-VK@K0bHYtcl(UwZ@6NtN2p;r3rApyvv z34qCE-$O5^h2K=wtfohyMO^8%Z zKQbBF8LmAipSPN_{UG1}6XEX_408PU3qK?nwjlwqzQclG9D}-Mo$o<_`gx3jwk0AGV8Gk_doq}QC`mpfmNnW2IN1G*lrC^Yw ztrb2ZNdB4inGpVNLGsW1jt7L}XU&WJ3}vUav^ilEJzC3%SUeEu7;I$|ZV48_8G*6< zJcH=N-wlpvpa3LgmVuL#06B&PI?++G0*yBeyeOXlPLymbd`pHi3(3+B!58m9B~yxg z1aYkf$EG~p(0GhJ58OTV4Dbe90oNj|K!_1$BQzpDbB>hg*Ol?hyz=n+1iO6o z+3%h%{5gW5Kb|doi6H48$Lk8=8wE-KSk6}Adjv`UnEuVe@$m&UWd9}|J}ewRPw0YDd3sppMYbE)+wIn`G4`Nv z5Ntw%PN=-iG%R8_!vA9#+#Qa*CMNown;tRrqv0ZQO5Il%o>s zz!1_422|yt22X`aQ;AP=X#L*CU2U!(O56v>8DX}o-3O1GCf-OY8Ct=`0rWN|qdIV& zpnViYx!^zz;OTO*h3b@^B!~^dX+og8w4syy&#NT|^H9&{*|;kqG>GYMBw1*?t;o*O z0IcqOeY3Km-fQf}@05LTRgQyLM|pDkn2BM`1t=Hjv|oWqBMeF4z>U5{xq7dapYhYO zL)>HzG;kOzjAQaebkkR9_fTOXg44ae!Z_^Sx^0GZ$;V7Hze`NQS77^!`{ftTdrzeq z3G~S^lkXhpMbqhOqen+}kp}uLy~uii<|xJ%vMM`4)KO!nYO^{0!^eexj&a%l*cM6X zYMuaoBonX0)6>eu0$gPdqk`oDx&Z{WRfBZHKPm0Z&HW){Pr=PF#)RLIwx!r zs8Otlc0peoZv=PV>C5Eng}X2}qI++p$h}WTM!**u$+!>H1>8i?hR}*Q-?u{tI9?YA zf8)DUFwhF=6MK?2s8&0{pon2;$lOYjP2{31-_P+3uExU1T~J4}D!VR+sJx&Uh*wo^OaO83i91TD?KmvtztE+#MieN%@{U_?B^G%O`KG~zL*QM!Mh#2mz z&E)UG7s(w*R)|5SayPvXWC{S0PI_-Q$YVyZ5l%=PF73<~!VdvsSoBx8lW~zvH=Hvt zbAt1C1Fx)#qA6%^g@;kh9oF~M!n?}jMhmTAtsjgLPTvWfJuK+xk(8=c;{%m`IPwe{ z@~MubQ7a?MV3wU?WGevT;zU~`7fXy_@xXbz#Oa5Qev$41zl{{1r!UipGqo2bP!~96W{Zgj2;&$w2QN5`Ux3qiThTxb5A<(-Pe!;KH zPQ0J#N5Xv3o`uPnGZTepWx7QgEDUegcUyzfEK*q@=R;ZH4GWM~*=*y>vH5jTTc4Ha z6`s3b?tGIBTIM9zUd}p{>9)w8LkyYXF8GQCknMpY$1xZrLIVsJD4Hr()ak-}*VPhJN z$z+}gaKkhYn#AKrwq!OW4Y2gp2>I-w|ali%#dO6WY=$!B=u`_g%$R~hE zJw6$eRv1fXJ=V~sh!Yxk3?m_k2M+Gv%%if^3Y=OnVj|8WLQSlWjI1)EN>=ob)p{Q7 zz~%^|IPf&I7hP%WTUK=cNOF5@b3h&jyUS#6G+h&6K1@9A_t4N8<3aXR<@I^AN?_Mu$VV%1>|54BnK=ICUdKLfoED(#8m_!_*;NXe`sb3TaH?qYJYd`Q7Xp zH15BO4^lf8VlHD+<61OnWsE9j5XAbLD;Xj692>B_|$W!8xsj zN{R3W0vsO7wp9{LEg{hm7MtKqA&qSqEe3Tr?DLr?7C9d<{yj}tj5oEk!#|Rpd|}O( z5m?&!7i>oIIVcy0N1`<%Os;eW2Jh&oG(iy5Vqjy*5Mi1|!&RRrlg^=}9y%mqq%bfV z*ZZnK8$aoSg9p3Ki;@Ksc}8B%tWXl0ETihVe>w`+GLlE!8GuBg0Yh$Hm71RWGz8zyjV+aPg7Q2x8dme&Y1Tk+ zBqwlo3+?ZkCP+??Gw+eE9jD71Lh2Je0^r8<7pArmm%~{X$_g^U(NBG|fa^H{Td_;KpG_Mcs92tMR;(sm}>>Q&%^mJzlo{6+&s{568-Dt?dfFAL65{9)n0f0jSz1&WV_zf^E8;@J-U!r%5xPhYS2KUMtu z1Sv;neGUk}Taa>e#vc)mpEa-J?%(7W8sNU9-;R>Zj|G+yL5yG?Ww`jZeJ`%N#R09$ zFrfS$))d$Pl3*z=W6>Lao1DPCHispEZut_X)k-#)lfg@9#lu67 z#eX=9n~^&pg7?Tj8R ztjF)W0B_@cgwqk0BHV{OA>0c5Muh7Tu0tpyJgW7*-Jr3jEIs*V`nuv%{9UWl z#%R6h`0E9*{H9UW>V{gF@{%-~XoW>&0|Di9SxmN%0Y|HzK*a4pESG}}x3+uTlznaeK*8H^vW4OtNm zph_5G7%Cv^&QgIg?2vB@&|0}HEq$)b2Dk)|G4K|VD?iJroFJbP-8R?hQ`j&3obYc8 zlE2_Q|NVg1dwTL0jGrxhv0$KE%Y?5Md=k=fK5r4;AsG0Dt-`Mn4E(}tg#Wo9`32I& zeZoH>NOHmW&kDa!FzDqxB>dEQUjLw%^L*he1Udhce!o!oCPB{sjNc-BNRabCS|HU{Ex^rKxCmk72%8aUsakV14mt41ZXMJRp){pKi+Fu1wK45()b%E3<9T>Y2X zQw2ktk_M17IEZk(`5>c9%NNShS5S7ormv*=3n7^qK(fMAZS$uInt~9S(+J4< zbkZv7AKB{K)|g&8392o*ArK!O-DPrGqs7W#?Ts@6Oa&CD0>H2qgxv(XP{P=0(bx(I zQFLLgUPiiOma>cD9W=L9k_^!+7fK^mfRb%&YVDxb=&;FB#0;cw`v?lTi7v37zX|6+ ztD}t32jI4TY&*!+x2X?6joY8mASns7IBMz)Ph7aft%sZ1JKN%|7cN+`D7+1pr@xyX zZ>zL;tJR8w>Tb~5ou-w1Li21QOha2dR`Rs4!adRXMxQAGcQxeapL>M=Opx;o*M|=Z ze^`)oj`K;hK=fRYbeDbcS;Eg04El%l!rKG`UEe6YPcYE+5#jF;40@sO7JiFhn8!XW z{4;`_mpDJ%A^hipVSf9y@Fy?K&r44eezsts_w$6W7UX=(@;ijTR*>^8o{1@Jf(eARQHr^_-FM`?#J!siU1pA*caq>k~;;pyx9KVRwhw~n8-L%Y_-9K*(kQh zrsp3maU09_qJDJ6kth*1D;!ea*&r&Bje}>((xu z3e&c+9eOj~{2im^u`-Sk!30tS0UaBl2#W$zJ8!_8YeplL?K+5{ySGOz*uHuFdVHDQ z5=;$HfzEX?gn!uPg6CIw*@Mmx7;S8Njr&xzYiB{GHk)S5V!PGUEW&XO=G`qV(RR6E zsIY2IvVYuM9tSJIcE*EPajOGn*r2H-ci`cJ;~f-3(J;4-dkVeVDOxo>C8)E4k)Kn< zxinaWvY2|PP(Yd*#bQD(misU9}7DJle)7L zm?$8;kK*=?U6DDHr5XWctl_{`a|?-9S&VJVl@XLZ23Atpz_gO^+F3cfJ(;sOZN`j4 z=;J}S*y~O=3oS1h03I`I$1>1Z3Lg@^XwKE+QpcjZQm*!~OiE+xJa2OswJb`uvs^!C z08NAwnp{5ZTmLwF2FGr@$e_-u%756anjhoi!dXG>Kt&5tWFo7!ZgbRNzR?7uDGuP2}EEZ8|@98W3 zJ4a3HJK*giiKItciwX~NU4_m~T^(_2qBfM?#BTR!nWBnS)I(}5jKayG*`)16d$M0T zwW_)i2KTfae!eN6d71Al!)RxGl!_Qdo~(tw?ke8vO2*w`W738H(BOfJU1=1QiJCy` z3q7U5l^RMGfeC%AA0-UU8;e)7=fXz9`= zOVIOHl8;PP@-ehwloeI@Z;1c=V!Af!SPTtJfUt%B5u4I;Tt7}P@*EzZanR$$D-_{{ z6`M}3eeYU^$H|{$V;NRhRetF=n3mzL*tUxBvQ_oKNYAJ1fvaY$0CKgpYR+xI3Ah(C z{)O11Ki=XHqmWx)e#kb+qDU>XY$#z{Xcrxd>Fnrmycg=>{UEFnMGJWhH>4!oW-&L? zs2XTp*r-bM1=!-8&Y-hNdxD@}M+)5TWWcMup)e7z87*vsZroVBo-}EkxAi&w$ z8-zxff5%72?fHjrMzN6yd>0d4rH6B>QN-0Oq4vT~~P;lW58y$m0Fg z4Ca}2+C=L2oy)IvKVL87RxsLq3&rmxeY-F?0+00?#Nky#1eI@EOT((6SP8n@) zZSHDqsh`uhVk?-TE-VM($1(K3az2W{xuoUYUs z#2Yw;=1fVrE=wDL-2++bqV;RnZ;aXKN!$9iuFG+M zL7d6cw7F|7zYgMYU5qWKQekMNgLqa4P5GsXZ}^Hp=f7|(qnpMw)v!Lfua_)aTv(p29{pA=T2q?LH| z#L&n{1Cnw7n^$$dvmYTJ_v?98=bQTo`Q|P}9YMi*c}Sdk6~12_c>7c9yuH|u85f5% z-sCVA!a*;6Sop&4JiUeb=kp`EoDHhSI+A8XWe8cua(w#?!pxM-6PliZ5^L=otBb{p8p)O? z>vGEgN-iNy-vCtkG^~_kL9FL0Iu%N&mMG3oTB)vn_C}`uDkrIU(h8mHQ9?2n+gds5 zmaJHuwrglhwDsAc&CZTCu8Z1vfO0oEg6^Jyax$`gE(2*J)57&RWN+A)h=OgDX9GRM zk;kSL8c0G@XZs?oZ~d5xZtNrv_a%jH20KrGtRS50TbeqOj>1J0R$+EhZ(EBmsZ1sT z&qkZn#XXkU5Cc_2|E$qqu`tqIofd{y6rF}Du>r$7D{{V9z>C7EN+yIDNR}VQuar`m zN0#3RGJ*6qvibBt!DB0)bjkX*&b6(0ktiyTmPaVUVDtKoovkhLC6~u8eDy*zPwE}S;u7z%skOcJ(v4khO*bp}TAI30 zi>|f}ts6IYfkZ+01&viS)S+`Gr}jQ?a_YhJCa11`!Q|9#gtsI765+BrlT+_TcmQD! z(tY9F$*Je!_X>nd5q^%i74s&i#?POedOG0SfuD)rD-kvzd>8n4Q0_+%?nG!u*n@Bb z!hVF0HcU=^9)ZvQ2H=kop1Q#C^8i;OycpqfgaL$I2yZ}`M7R;p`wBvYaysTtPF;(z zAK}voUqd*G@YMRrsTUwLAq*hggurKgAMlq5uSXpZB77dN| zLFhv0L)d|^2jT4qHzRx;VF&8GAE6C(xg22t;gtw)LSUPnj5cdVxB_7u;ZG56Lih)S zt!U$sGyiA8Y&>^=j6LnM@C^~RB8(vHLAU|o0K#E}V+cpK;$1gRPW|d~ybFGB+A=vc zSn@DhoSgdKSE1dy(bn5MZAUx4$&2vKUkd%GODCs3vu1MYJqSlz@$C?1}DLAxs>{x34t#Ak~UmW-a zj-wC=Px-D~_i)uSZ4<_lXoVZ4itO3F9?qg{8_4Hy;A88Cpcn#i69jKX%SFK(pOedn zIIL9bnFVbGMZ|fQJ@6u2PGRlFY>C}Pc7Mp$$iBFLjI*##%Mp&YYy= z&&{5T#GVpVa5C+~H9Vwsmi52xJS7>BgmaxTpF6FvOP|;!OgyK~tbUwIBfPIhsW^j9 zPP8!rG=kmeN4+)Ds^KAfjvYHbVB|Cmt0ui@mn0+!;sCwKq`oL z8d_WHm(0t_Ai!d25L-zth#i-4gAGz6hG>lb4H+)>+bmKBeAC$1t$1oaA6>-b7#33LZ zS0=JJ?u8H9))eR!CDtCument(jTt3#>Ad^WUl{gDt|jEuZYv-_22XWa-rW_nVTJ$9oX zBu16KD&f|8kXXX9(o#W9X5K zw`Ii29<{=X+DjIx;9FVYm8b_NH-cm&=|uC8!0tfIGc;7dt}yyVhFqHv(GIf)e^#0p zaHa!KbmA6}ky3ykb3dZSD1i5X^wCcPj?sy``*`cad= zC@Jl<xssV|9f!LyD0ROhp*iQUa-#|cDmbAu`0W^VCcAc368aCR%iK=8j2 zW{g4XpFx0)-Vio(yt)|wW1K!RJ5p(qxW2Q!Z63;to9*P^wK&b8oJ@3_+|slvF4%KB zpG9`V<*7zOytrf&i3PL2W(toWDaU>9s#fG$=sUQ_Vi+QWEy>lD3RkW<$7vMWQmI{R zw(b3%QxUI^+JVDI73X@o5`!@UIfNe$sNZF(m9|a=XQ#5&GZTk{%0GJ@@E zrDy+7mt=k`afroUi}?mBLc{QFg;^&G^Gt9fY2Oidz{tfB4y+!aK2b=_M_5AiI`hbB z30!-N{aB8E;$%X>J?&ey%&1U&@i8ZPX%vF~$)fg0sHu zx|2-k5O^C?iD;AuK6j&?mP9Y+<``P|Lq{YevYcNT<4 z`bg(!piJD~4t6_q_5;d;T_iC5nHd-T#dAQdg-(%*W$tH&jgL)jUIon7c6@kudDtry z%H{X4qC;!pV<;_IiCh&~l-gxlC6jV~mnvEfxXvv0m*83p;+d#znBS0^Otw+HGsZS@ zLw%`t9+F^xodcKradM2j)iu-{yvG2%@r}V58s|a$k^fLk+}vNlpFTQWNrCX zuB?F$V;qvVRIBXs#5HBfv{t{E`JsyDJ#P%tTVb?FGZ=VuPzh>YnbST&y)*%+765un;yCi!TYuj z4#JlwoYhzaMOy9|p|!bXZEIZb{ilI*i%HNh z87*QX&W*65OQ<1{%m9eCj>PWoDcM;TM8;rr`<7^~`ZzztoZlO-QGxu`*3fAM2Fmcz z1rp{`RLLEnbq%*{82B96Lj%R)V5z6f!G|l*>CleJZBchx*p?vah1RyoJ@Fps|Aw-e zO%%}ETN-h-cin(iMxKM8A*?#6 zQ3P5A^IU%&CCMuqfpGd714=$j3D;)yN1bC`OC#l8@a{?cu5Jn|tP06qt;u?mXlKg1 zOH@{l@@YIy2?j>0?m|2+QFr9hmTvgNrBW2%!L?kWGR!@4y1WbbGCW>106}qS6eO?I zyS)-&It5vy1wawQ3+q&iPuc@%sN9r0OcUAP(0e#yKM1_#?U8JC$tB847f4R1Dhc5@%pYi;5x{711YLDgv1R>JTTl3redrc zYE3os>3#$5S7+hgkX^N&7xMXIAci!pHg}L3=76I3mK@>F@;NayLbo>*KsLFuF%}xT z^Z1151ip3+aV{Ewi3IAs{8iB^DssUWWTno#LC4)lJ8WFgWJr80KwgrK7aHKE_m$42o5> z6xpS9C7J*SL+P6dr&_66$&;!wk3te+ERgWH>C_TFILQUfR3H;#2?9w3%XN`N=9%7v z_9)gq>9m<7suqWN#DCyA!E)Dn-i&)vvAw*Nz*@lfz;Vj~kIr_Qafd5i`>?fb&f=1M zQCRdOu~_g}yjDAD{9=#SGAE5+5*3lbmJ8IT44eSow*`-h*aavB4(kFgG8bxbZ~X%| z$wxDBhHJ;h!q~XUFxbXWAp$8b>;m@)oke?~7Hg~rvtk*?YAou`)Z62^M8gh)Rgf%l zqG{Q-(d_nuRbE8x;sk*;oJS0sVMaY=%dBbR1e{pF+E0rCe3zW$nq^FrUROp(P)(c? z3`>rx`4t~Ep39qaBc!tJz7FZmTL(+;b<=^U6=S^t{FuxfIn#0obCrWt52R-qk&d=$ zSa>%jd>Q_=t2_u{5;h@V8H08;U*T+Px60fG0~41xFR;v@@}}|@ZOEIVV4eeca;B*r zUi?yH3sp0G_jcHl*-#;$_@5M;_*SVNuo*qTBVcgm4t8LP1EamsBGibvU%3Nr$X$M7 zEtBz4#v%e=>t$p(VEX{RyvUNAR3?M@1pPYrYvUH3YmLF&57MNfQ$?RHYWo-IYcx< zKp<|*C=+Cw##y&1mxOL>av-eCQe`yF#@!=W6ynl)o*E$yiTYtfz8^DPxbA3A^*w?rvVLc~>|3HxXDU3fN{8xh1D=}87!|VM5LF$vxZog6Z6@s+4UxUyu{CYv^ zqp&{vgnv@7Rq?kA|CJzZ|9LNZi9dI~;ER-gh43o`n-EW>p`-Oi&@G#=7orRy>>E*M{ z7~d#-K#=;@jGqwx9zpt1WBg6RZxuXC@dt%}S@3McvrQ+3KeNl9Td(xb6~0Vxp5iYO z-XR$L(rp#~O2Ocl?lr=%7ksYD*(dy;11{`AYd{Mm@(_kFhTrGlM^v*!x`Bf&1k?-l+b!Oe*0 zc)4BpzX@(p{H!hhyq5}2sz3A#f3@IcDu0jgdj(HLJnMN__)$UXZ?Qi_TfO`j2-435 z`&OgyErO>Zj_F5)zg6&b#qSsXIlPXKOy`bf}d3Ue&M$ZeoFC&g+Jpef9}^59}B-o@Y9OlD*Vp` zZ&UmM;olPcjN*?8Usmw)Kdbn)!vB}xKP&zQ;a?QIUGbB`pWfr;d=ByKZ)XVKDEN8B zUnTsX1izs8+lBu^@QYRPzft^`6hEuipLe0)zbJmS@K*?aS@FAt?-%^4;tvWxB6yeL zj|s0Y`g873{0iYO7rYbk9H$e)KP>ol#osRcXCXZpFSgGy;b)b+{I4i}p73VDuPT0{ z@P5I&5Kqa(xbW8t{#5Zd2>+Pi*AUM!|7qdh6#Tl%|B3LE`@BAPEB+b6&k>wde1q^c zg7+Yv?XXq&s|3HH_%{l_LGYW3-!J_0g7+$ZQusrH-%|WZ+q`~%DEMu~HwwQ(@Lv_* zFZ|7dhZVn1_!k7fqxebTPww~Ud{^}X zKPdd0fxK6T{#fx7!v9Y2CyEc><)0LPzvAx@{-EH` z6hG@~ug84BAA!;5Jh({sM!_E|eyi}Ef8aFOEo2){*;JQv&H6Tw-i5H_;SH-BcAQhBz%kD6^J80 z-y{55!7CBR^sg8GUcv9E`~$*~q~>+n$)}yup{qIk5ln zd!8K4Sqcp=2q=asK}{%ZtoLFcI^#Ei>4NyhxB4Mffp9Hs{MXMjmoiqK(xsd6&}ylX zmX*k+mzDqoBvcH5iL)Ig#TCBN`7UhivU3&bh@PHLH~slliDxLc>hV^^T&uuk*chBF z)VMK(Ev-`RTN1s7n~6&=YiE@h+JjB+n^!!ipby*0cw0JEGU+|`$LgZ`b{GI+6>P4! zyeDMkVzAEj^VGGW3>#~hHMVuEh1X~3X%cIPceRd98@o0#BJyU29P@tkf9U+m0xD-blxtg6TK$#*Dc0eF6pXM~c?QOApXNu#Y_uxznbaF4s+so70Be=mt zX?3bBgGT*b{RpJ~CEO!i3|s%;LxVb8d{`=E#GTYQR@(veas@NqG!b|9&3#@jHQk4$ zUc%~HA$P@QLz=5Da!b`<$*R$d6HTb)gl-BFQY?2Tvdp;Qg=RIo##|Cm0PGq%kfBN_ z3nvL1H?G@Eb7QJ8g=1_?p*^_=wIcWIrL^vZ2s`|h3O0ptUYki}%_KLjZ=#YP##AN} z@3?8x#!Uh^RLQ+Sr1-dRlA?b4Ug@L#SRL)~aiq1hu5Y?LIfKg-mTf%Nd=Gvd7~A51 zTvfd^E@z?a2E6E-uobr6M*VK~B#y~TE}5LVqY3_n0Ye}@0G#(2-i5%p`n9ls1^g6j zD;Yj;vE!?7pT8L%L_E{Pc{gjR%RG&cojZ3zw~lIp5nm`y?2s>Q?TRD*TS#?L5FYz& zpVIaY*&i~5J9LNYZc;xl-c%aHo`@WO`8djYEl4IIcc~x(75p;L=Nb+UIJK^s<8gSb z!H!|FQNFN$Y-lj}ZMb-C*M{{ky!euhEtkiaT-v;G{l-nJ&OWEluCrfQN8b-6fENso zT@<}w8~?%E+eOgJcE^c9UkX$LdozK^V3TGTy6Bie8Wt_8ten%Zco`bPE;eMy3-!Sv z(3YOk*v=B|8t60)?SO3z>}{B0zP#wsao+SRn(n=jrTcT>cQMT784dD`=f#T`^35(@ z$TtVDX0S%F?-iX$JK~hRfnm#Io;^tU5P`FK7c7{|ot3#O=fbUl-NPIJXZ!;?M3wsI z**nxMhi)O9x*>K{zKv+pPb$Xzh+fmSzSRcR0)D<|!ASo|#Glcq5r)+MKJ9O8i5gEg z{c!H%p;Yx|D365RoUxo=)6}+p^CsB8*Br+_{&OQW=S#qbt?iS;M@V8a1rdRGgInM4{_=94DP(iI9lauC zVl&$<5Y^c@PLK%i>|5KkBuE_D+9yR%ah1s;7z+9B%saKk3C4173#~Hxp-uME&HX3r zTd*~r_;pfgA&V7hCzkG{LWMkhm>(J&E=d$IOq(pLx`;mN72!KPR(@~$N@zq-S=Png zc$(ka(7GC98UQ)3svtr+r^4KT_ZNfHn)z|w1uHuNeSFa44b1q;+s8)`WBf2jGC6oG z6F?kl-r_=`E`q<6kVjMv+T1wP4Wm^><F_zMo)k>BS31N<)$Vwx8zLR3wc0-qgP0 z8FY`0zfdPTm=oz=5=)B2vs`>!$Bvd>tX%L#H)9Uhl$2s8S6RujNJ^sFTl4Yu&>3(O zxww!eclacH?s5E>`ez`e=65$bjq^33J2#W((l$-4rbS}96f{UNHr+H3G#sMo=`i!| z;0g8l#QE=-_d{uxpQZ(r`t@`Y4~iK#kad_JH;_XF6VR|_%NDnqrh-tY20iMTqP3}` zHBh?(9FP_4$@2GUY74I!7=4LTQI(WF_r&~brs*5f#v$(pW{g~$IsLJE@CEQ1s6PJt zJMneEDqxXN^W-a5DNvzwZsSrj?|-vK8q*i45uYd&O53PLl4-@;NSHajJ<4Ao@hdsA zM^BZLnX9M24<9)5^ZXV3fiwFBP3EcrD51md1#XQoz~~hWh5_4nP!-4t*L*lfF(G8( zxN9jQL7G*v4-=N*s~F3MPf(2B4H;W~u# zcfrRL!ghpLA-oyk-3T8<_$0zt5x$S`ON5W1UQfIRat4I+5iUa5fN&*38R0budlCK$ z;UL04BYYj<`v|{8cn0da7@>^tZwPNh;CmiJJ!bt8%0;M0SdOp;VF=+>2!Dd`E`$RJ zPs2MuA7MShH3)A&_!08og7nK z@DSSe39p5pGKBLGE<|`S!W9UE2!DjI7va4Kw<3HN;ckQn5KclFx1b*PB3yws3Snkn zMdp#nMx^`@8OMS?s)-O%0qUxv$I1^K#KU1sfh@XTBIjB(u2qhE&4JW}<{!3DdvqnA zC!a^|ln7zrnXndI3#MqPL+{ses!)C-3jBV*F%+o! zuR&_M$YE5qwS=)NHVgGSF~3HaJvu)~V%ho&Sfo0`X6sBgadT!uw?T_m0Jn2dLhA5Y zoG2MDO!0!bI11-VXD3k8ArAhHhI5}W>Y}HAupy{GA2|K^92oRw`$6OnNi44E1R#xa zdSYECt*^ZU;)bTZhwHe{sKpMtoA^P3+&->ywKUVaBU^Y{M0r2EGIjEE{+C+YFKxsA zM$RvkDP*&fxH_tsCQLKa{4W*RsGc1Ch4WRG$@aGJ&xC^#D&v?d+_a&kvuR#b?6;XQ z%FSTeJdqV2-lSIf>1&bEo#y7M$o5mdY9@_?h|F@0dgYogy91KmC_sQX4y-KOpx;fDeo5*!*8W!ygCkosheu zMDO1es68Xs$B*pq$W{(=_rX`8fYsvQ^`yyo;na_Ye|{7z*IkrTMw#1*n39jSH2?Sb z?}Cy$M}vDuV%MU1NQUZQ25I7FY*{-mt zNS|~cC5l^P-?kkMZkP&hk&?Z=#S;w+S zY{If9CljugCLRsb0Nh+W(|lmlc3QbCiS$^PnqW9D_KG(ILbr}1Tu#0C`S=!TLDjU^ z%!42cN<4g=sDBSGWclRv1MqETYx5pRn!HuPrS=Yv7qOYoRItP;K&V?u7f#G~DfZ;d zjs@e$944fbG&fbbaD!|KW^NFsWF29xhd&~-!sR>GSLh7|B#;A=rwYQAzZ_S{6ER$K znpi(Ma?rQ#l-8WxD|_mc!v-^27T?o%m091`$I9OnOeE<>Dft4yC4Ws)~NyWNn>A9le<^!MY&dd*E)I^(qyqn7#) zI-&BkWX%^Cfh?J@GoeMH%XutDf$sBr2YQ9>m64Oq$50xB{Fc;}6X1i2+J>G_pcVQocIN=k!hV! zPKGV><~&Ye?vM@DbH8n>0;uu{`eTD274?UIE&3<}Gk`Nf=x&y+>+>Ewp$uSRzS=Cn zu_q4S`#d5s;Rk}cif!uS%V7MF^KdUu8)5g)RTRE*&c&0tiO6_&0^e$96d7aK-Q2Ym z^nu^OwuW-&7tMueeXjZ0Agk~@x_Nrs&y(*PJnrXd^l?8=kNbHtju~^iv&_B~{kWf} z5i_Aqw(1}E^TbJ24*R%K8{8;y{tx!_oUd@toZE)`WFD*iL}Ai=+|SeFex9WBW1gZO z_w)3)pC>GAANTY0xSuBx#>f3UsUaT8&(ouKbwok9YwVf!Cv_9t^O4j!p;PGE3J_B< zh2MNcw@AtUNTRV|`y8&WXiIte72089hc2)RCTmI*5GWjiS^|^cu~s{l_U&u;q&Ny;183T5Jq1rjXofH#YQ%B5w;8NCO z+Gr+@g6_J%F`Q$1j!M>Nmc1dLQ0+7;bAw*9%-d`tzf3n)TGrNb^aL#&lTjpGGE4^K z{!>0R@s)F4pl0%ljjx!T_VAxQ@4;MmThBS6`sKZQ&s4$R#s3tx0Up^uQ(o!OJ3I$R z;Ghcz>ELRr3~?~sd}6!Yb@ihH z4nu~p8wMZdTouo7t#+Em@gB4ydC$5aRHpOJv(d9>&ff=j^fe36dtCcgx67qnEA5A0 zBm6G}pM*Ht3GWmBO~EH3jzZ%j!k6FR<-jc6;#Uj5O7IDYXZbzCM+9kN%lJ{@y9H@) z%lJLQ4+x%$I6n8F@GlEe>x}*vCWZfpApKY|e%9N(eyatajyT#6uNA&i5az>H{%+y# z5u|@2w!;D8cM8%U7VC3Z_$hDq=R6B>w3DAL{9?h=lzz4FiXi>+aI=56@S6qcm&e{$ z_`QO(KWF`q1pFQT+}~IHS;8+8r2i(?XRYv83ZAL-yM=#Hkapcne@OT*1fPpI)+c(W zKks}&+NJY*tq^{NAZ@o9-!J@)g268REyCX?80`6P68>>P+UK*Z+l8O>fBgBh=V$p( z7JjB6{adkp&Jli*ApP>t_Wcs!-Gb*Kj^&I9f4g9;`2E6vB=~&A9~J(4@ACT4e;Lbp zuJHMS!SC2=;S+){R{Gt-_Y1C5`~l&23lF@UE_9%TUe3M`=;@J*ch5v;h z84$+r6Ml~%x6N7qBf@9z^YZBzfbnMtZx*}?ajZ{=@K*^2zg>HTe^fB|?Ydp~QNezd z6TQcucaGoy;yLbC1YD4QzF7Yu;ja>$jX2hGuka5G(vKC>-!A;8g7mY-_~^a<-1&lM zA&UKEh42YM`dMTA9^s!BJO^=n?iYoBSMXfL9~D05ef}K!&*J!M6uw391xi06{H=m> z6~ABjzX%5ZZr>38bHVeG-rnm*f8P0m^A*2B_|<}ZC)R&L_`3xg75~@5KP9+C@plOS zwP5hmG3)*Q+zSQi*MoF;t?&Us`T=48856!&kbXm0|9!$gF9_36tLI_ir~aishiO^= zdf_h>T&?)4guh*|P4WAL|6Fi`;*Sacy_>xJcEq!uvG5MTjfi9ae7W#fhWm=&EBxbv z^drXfcL;y-elLHM;%5tQ5e)ve)(h_z4F0yZ3BN`#_}jWp_}c`7zpeKPKPVXdZGB4k z-Gag2*1f`iBN+T`&H5{^_X5G-Z)=J0mk0)bTUQBxonY{{wO9B7!QgM}cHzGk4F0xe z{k1>$9KqmkYqjue1cSe=8-#x*KuqxLCx?YU?*m?5@VC_{d{{8}+uAMsR>9zJ>yYqY z2?l>#(am1&a>3wlYpwA23kH8%2ZVo9F!V;n}82oMZ z3*Rdk{B7+MeurT2w{=+f?7#K$gTJj<_!`0BZ|f@I?-C6Dwhjb5qz8k@adcStQ~u7& z5B|2EDg1oF;BRZW@D9P?Z|h3oWx?QYYq#(l1%tn>4+#IXVDPu~RpCDt4F0x$E&Qnm zyq>||*6#^lAQ=2@trlJq4F0w%!gmV>e_MNn-y#_NZ5;}@VDPu~BjHc}pw}n(+d4yd zi(v4#)ggSRVDPuKNBD;XgTJjq!XFR}{wMU9>L&m>jvTfA{hK_O$vYJ z-}`fezpYsK%LPf>7$zR{D+Mo8{A-0@FSuFp?-2esf?bNgRrqHG=?9bLe?j+=`F|4Oh) z@dt!|Mv!{9{9cp7&pzn&*{1kL;lqM`ik}evX~B~fe~0j23to+QuBT4^2QT+b!R?46 zpVlb6A_!Gpi{B&s6M{pC=X-r#`1b`_2E#GoYd-4FDJ%U};ja^9+q0Y-gyUz;%cY2U zpI!9NMfnAs>@TQ|K+7dx`Cz!XkIYvC~_M4n8A*jF>Z!pV*_oDTzA;d!-S0^ zO^ub`kEDSfBQ2NB^x3R*?I^CSy(O&t;HJghNqJqG%kWqM$qt0Tl7dpmLqRA6sW|Mz zo;e4CV$(NG?G5Yd5SivMFJyBTEbgmZ6cc1`Ep&Nusdv7Pcr`H>ykb#yQlk{O%R-95 z@W}Zw9ca0v&T>KnEK@uS!Btn+jIRk_g@LyFoZ86d<@}cgm)rzAuL7yhY@Z> znAu(|2%e*8OZ9>EJm!nt!0fydoppTTd=E(uwDM+%Tq5}2cb*khEBUBqs?wVVD&&@E z-I@ovl(`$b+-pNIL91%lXOX(UL~95m`gO9+{IhX$<13r(=*{ zSKzr&6`29t{3WN`q_3pU9~Ays!DN0BUiUAa9&C}#UuOt!5~RGB^IC`S3Be~Kj(o*# z;qMoGlF}a#ey1SVG)q4z{NykDb165bEaNG{Um!^NEz55Z-a144dc|XzXz#mK_-h48 znAi?`h2JSiIWyzGCj0@xQx*S9;j{1XdOlt8zbAZ&;4=`V+|bR>_Iy~m(8Z8XC_N}RXkWY8K*k^iyQR2CQc@SCm2rPnx!P3U z+`6ps!n)|4S4>V_j_|bZ$*F4r@55Yj7s71_w<6q#a6Q6(xHt3M;b&Wi25d8hd{_C0 z*Sla;Ov+bJ-E&kKzvo4)H{OSSXsE$oI|EYAH;r}VYVYiv7vbH{yK4k&4uc2Ef{AR65LV_}VGR^a> zVvt39R@kKsH#3&TYOo_;&C{2k3P1TSk0*WMnq#)`6@sKMl;=oC3zvap>CH?(bN z4F}J|dtMJ+>tF~N3vB%yFK*ln-C9g!uATBS z8r_F8GArY$PtKk4`auH7tf32lGi2Rz`T8*2?YUiLI-{FYiPpflML#>od#(mYAcZCAh$Z?8~Z$@Q!F#%-WI@mysy)Z4k9l`0|>O| z^IC*TSv6n;H(Ek6RWO$>45Z9+kdhclzFnSP2ENJ2%Vh9#r&$t)CUSGe?d`X7{K_K* zSiM;$zlVcqM{AZ#n{%rSJXs^n0Bnm(uv#>4sM&gq!H~DYBleP41P!nmnKd$6xe=3h z&SVk21WZHZ?`j_{f8TE#^~Iw$)g<~x2T4%_0fPsV9M1xbqL;T7gQm&^?Fcz#^=IoW(7U%@Mf9A#89PsF_hZ`X}EKJ9oF z)|{a4*XfS>P&@XlQ8-Payn`Ndt#^7az=+{nco!TiM_oLHy9hS864B()NOKZXapH{A zQjJJEQ-}66({eTgRE^n*U0{3@AX(D_FkAbZ*sSH*kJkvL^|9`Cf2hcA{jv~}@JTp|pi*BQ(YI0C8)$;HG za#YmEJij{|E@~oi#Big(d&orne0d!u9br6CkjLZ8SrosoI|i~7sC5IK-AhN805sOg?9>`s&cLp zew`rY#4LZW@B@NpA&&Cze-M7BV9@8C6n<3jOr<|2{OoUey?%j)U^#PyHwr$4c&_hP z2rmdy-ILGQ5;ja}8^1eO7Zx%d?=W?Inpzyl|&qf^E=i9=M2|kGQ{4TTp z)$6@j@aKwOE&MftlvgtS9^v~0!@k6R;U^vT^0;rn^s|L86XgB?<1ZHe62a3HzeV^q z!P6CA7XHVA)I(=Edxd{OFzET-F8nuwLC<&Acf5X$g49pvcUdlcvmo_w8NXHd8w8(^ zI6n7{!uJW@iFRZ9{Q(yYdSv$q|Ak=CBbyR_#&^A5L62;X@a2L*k8G{*LBXI$RuTS2 z!JtR>4&k>520gM*2>+^J&?Ebn@LvfAJ+fKf^ZGRi20gNigs&A0dSqLLUn3aw$o2@o zQ84I{eNgz91%n>hVc}1^&z~Rk$j%V{BEg_X)*<|rfU81%><7XIuX`16Av zS-tRX!JtPLzRQr}gC5y#;qMU)dSnNM-z!M{boS>X!twKjE*|p)!BtqZUR~~Skzg10 z-G(SG>chGR3)-g6%iEi~w=}hN(FqUEN9t^{rE;7If*B*ZSP}i$BQ=O`{d3rjJ zo0hUzBc;Vvr#!!qYR4=XhNh(4N+&aA;$7Sw zZj^S6bo&C7n=g`qV~f8C8944m=Whz{)`#7nqQ3;bl4s&WHtIRdg1hOq^Y-}|1IoHmiVvhXM!Df+1cHzNw5l?8Ee#%iCM{|}-uLtKT zEnZrQ;yH^J;c?r;j~Mk`v=Z7sRvFwu+ff%Ne1#xgLl45Y$h^j;#Z|eg@{RXkJswZb zw#2iI+gtmG%04gjq5QL!PS1q)s?Mi=maXKnS{bwX(*B)35l7UVzv+VMIj85V@xz-V0i&8Zvl_#gtVz8FQ0NS?cca)x?lD#cHOX>d9P zd8A3U{FCI$td-6yiF!8iC_lIlhMZb;NIs2M78T(8RPAR{o@P@_jL!^#Nf}237Dh*5 zvI-rq!7_F@M!EYkbH2>flq0b=7C_A42{JB3StU0xpdE%9C`YvPC#$o7Uxg$k#{ z(qLhPB3o)qfhr}kPlypmK4 z_HG{Ekxbuy(*&Vy!vka8rHS+&KL)PE->l7L4It%ctnk*@0Kp))zQHJyu&eL|ag43} zBsQEBQp6D=Xj07xD4!|vb96uWoOUEw{hASbuSFKVES#B;LlzndI~D|48*=&#g&WGVxV?!S7Ue zEPvc|3YCekDhIUX4bb-+pPahvO*p><;h6|0BmClx9)BO;!?=GvU<<+k(lgwMxSs-k z4B>i&D-iVAVIYcMs}Xi1nAG!R428wZmMyvva49&D{B`cbzP@}B1d_kSt<}0cU-7FE zfBQ-3kBY}sII`%1#!)!Tnr_Y=WSt4St5&kx`*&*Ps6aG2eKMed$!rzVi{5*dy{0q3h z8~D3~e-Zdo5N;BFCw{*VSq=#QI`AI>{|Djs0Dms>e@gf_fwK-@5dJOT7a`mw{HyrQ z^1dbfZs08M2g1JroaH?r{9fQJ@0jp!17~?B{nq=>yD8|#{bvf_C;Tko?*q>FTO|BO z;Z4Hd&-5toCBpwwctLob`e(oJrvg8O@|Y*W?}&m@URj(%Z3?6*#G_CYS64sSO8gbb zR*^w^gzH&LFPnJ#$G&}3;8~76YpF%z=1liPu`}KOUGu*X?|c>B@g}_U53yO$fDM3C zpNV~kv%(YeFn(M8YBtlMzi=4+ncy20{~Cw;Mg-d(mP9j3Ml-m~;IOy#h7Ed);h^^) z81(jogWi5{(DR24di%j~>_0G$?FYxP{opv}4;%FMBP6y#Z!saU4SI_i9q|#LA{eeh ze5|KPddEk(?)VTVGU3DAerAVyU*!8op;gPm*`~ZEgtOc6dW~>)UtVtz&MwO9{}E34 zIPp3<@vmRC7i>E*Aq_i_CS}jYqoI8`FTB0_-T$t=Lx4=pVxBXl;`tm5l;CduZ_Yf zr{{$aQYnP4$6uImJWibtap(q$Q};uh`d_6GIv{?jQ}LH~LHts;!Y_5gN+I+@{7Q0! zeu%gvN9c)&%XGznd5<$J>5Ku(+)KKn-ShtFZ|?u!_6w)4A#R`W(Es)e5B=|e@X-Gb z3J?A7knqs|ZWkW<-%zo4aWqt1im)u|A1d@xu(62$*vbH?Vg$$Sql27tqtOBAffl3D zp(3e+WA>|eDbzD74ZS_R21~`#k_hsPhDD24Sfu^FaB=b*r6<3c2J#zEk2K*o)A09b zujd2A;U%SlW#kWNOO%R+nTxxgKKl)U#Lm8fN`KVT2k}W|%p&>2uw~J<{sL|$nn(_oGN^N6~0h-pl>Ux@KsfKvvBSY@@f-KmV(z% zaj^}PdW;twI##O0>hiI5dG<<+F)xd}g-&Y`qrJ--mMmVl$g$8z?H2o{{m_6(e_!aS z8IQrB#4Zrz$f}A^>L4;qvV>y8xB^X$!*3SL-!=8VO_EbFweLr#!R>m15EV7h6f`Ku znX)JzhLIRlxuY)1e^Tw;tlTVBAdlGiReG2mY zESz?P>X_iuH)NtzfNb3*JkO$C%t`N)W_FwrPN$yzD79wJ$4Wmk=-iy3zKvv@{(W~s z4B61jO{-}#Pl`KD?rFkM=!O;tb_`T-3X}=_@P?fxm`?RDD)kuG+07y!P!T{^Q!fXw$5^TR~U;p_8J4|Y@&7Ey`G)E52>GAl&-orE9>&iSzDh9Ym8=%NLy+?Z)9)6(PmuI^ z1mS@2KnH{V#Sz8-L7hK0=wH+e?-1lX$og*;{%S$ar+n@n;fDkdBLkm%yYQoe-%`l4_@97xsKv975ZqQ{x7VSPsg4h_uqih9mC6A1eSl7(kC zg0~lXu@P)VuA(5*Ez0_!;vHKgc6eZ(SB!aZF~qmI9SKVS{}C7yW-kzLT$jbx1iLQ0 zz^zj_TNk10yc+>YoMI=_B68z zZg=zY-FLl?ANiAQ2qbgsijIs$N3b4&3^`-lYNoTn5*7!QkH*1d{R(gTWSeknY9hNmaLOFg_(gwGZv-D3JPgfAC76>)tCtA$@H z$ZGAL{#E#cf*jv`uVcdNW_$euJ$|O}dO`BR zEWc6sh#=`M<0pjU=LucLhvCxxh4om1>88?`Zfee(b?Zgyv*n1U|7m1>({yThmh zWW%=H+-!1m#Ed3U6U4)EE9}vfiYx5_p|tp{RdM^~_3LRTrE~dw#|UR?4d66K>da)% zMF+{Dc8t|JQ|Id1;JH=hVIQ_uX;HMTeV_hqXap0aoRVqX&CyjwmsPz~=sT zoczfB7`&D57_Y=W90xwGs`8QFoa9^KqH*34!X3{B`?OrWvYpqhtvy!@PMPf~KsTLR zo&)IY*zm7|L8{d__TzNhStK^Ag~ez=?8maEw5gg<-_vuG0wI)u3I;N@BN^u^^!xHK zK2oP#6gfXF1uKpuu0^P9#rEU}Rl)Rx4?Ctoiwn&XB?+)^ibX4XpdHvgAFID%*z^|{ z#OS$cDtsNx2s=1ASVsZNz&th{(R1;+lF`ODOEO}@w3GTsInYu#3YHdbC}Kx63P(*N zZc+<7L;rs02je3k7*?cxsk*3ZYgc#6CE9`xiV*HK3i6WhqSM|ZeQtOoc8N57VURs; zm!5|aR5OE5r)*M=2Xa*Q<&t95%|NGoVAM{PEj(!jG(tzsGUM`gYh!ka|5Q7pl%%33 z&_2~)d`Ee^`oU(la_DOKl2Wtig2VdqXkip~Z(&?{hhQHm4;FE-!A=fYA9DU-dCQ8k z2?CRi_a_dp#8wckZLXhssRm>T(&1RuJ=joZKH;9J>%cS42Tyq>!qX5Q1}{ne@=WlP z+3+-^eTcj#!d(crBFxNdqEGigttaZ@sTT!k<>1Wpe!4a(ni}XBkIaTnmJ#!)Nvx6^ zDjO5$`jSvSf(y0r!2;AGF;GCyj9Q=_+1*(@sCj+}@flVEXnWLD1i5BH9L_;uL1wT; zPVC`#!)6@Q)yUo#duKyC&;<}w&QeZrTHILI3b*4$(_u_&Y))X2Q4pr6M9D(96Z%j& zf@ZFuf^Hc}05yR^Vb%>v#`rEEl;vT#{vgg4;OvCb0@;W-gmO%NEfY;9B7-bG*k)43 z#UuTrq{p~93JFgl)&0LzeiF4jC(j?Z34gg@;5++-UnfYulYHfj|C+@MD7H?^#atT(93B3I_Q@z3`U`2Kht3@V$bR6SJHfgtN%wUUSZ?z?sze zVA1>zLBZ3ff6j5E1I8*_cJhN{${<04>R+X|zeG7ErdDQ?3Zo_1hIJko8=UUZ+mGoJ z#(X%Pj8x1o^9Kpm(%eUNZQRt_O;y19d0>xt6gB2f^4Ufn$(-@zWmLtPZLkwuzF~AF z(|qKbHF2`-J)ESq+OY7_DAY5-(DN0@H(4;e?*C=)T>#^{s&nC!I0VN$;y?gH0-Qih z~rRfBpc^m=+D?&>#V)kUi3r+inHjWIoABq~(Ul zQ(-#H9zn7R*+M$YCC(sh%=TSPA3>Fy=BM}cAe@AGO;;7&l4thvT0iCR7H7~}fDn3a+X|_U-;bM1TTsHyIT+{p#v@ti5VRni+ zWtxF5^jK>rDkE;SR~=9D9COs{mH1(9yS;mp7TI!6B{?jzXCEj=Dq=El-^Xsy?PiJ0cFgp0XHS>jl_W zDnrwwbXBAvF0D3z#)pIpR6dwXq#i`Q^-(8+L@Ce$wfGxXID6%+#f&A07QIY>)Xv2s zn?BL-0UU9 zGr^9iGBjSC*gYh(JQ>(5V^Sb}PO$3&9sh1M==RlaGyDSvIX~e3*&iGJw+7w(;ERTT z&!C$JJZAWFUlh+9IIh3Y@U;fr{Gi$J>kYbjK%e3J404nouIDQ~_wgB@g4y3_kn=6l-(vX347z#G z#|;O`ynb3)+`TO6Y%67Sv(zi8ZqRG&)Ec|~E!qfzzBdbHM}C}IMlcw1E+Xr7-Zs(6 z2zImBJh`3)&2lUi*a0V6#oDk@<`}UiN)G*Qtdg0(?3rknY9ihV4xXI$ieR5hd>ox} z9vj$69~c72RC{%{kZkqU?ua3Mc7efl*6pL>@IX$K0f~qTMrqlRD2`#(Q9-~QfwpaG zTZFCIh6DJrRxW_QVBhO=BEEk}|$n&Hk()-lX8o~mqY*|en{@rQ1q66SQ#jTjS{mz|i% zjr&D?1=I-N73+ZKJUBCrv8`jtgELED7Q!^Zlwg1Cxev}9fjI*09Y#Y`~PKMXkb1^0r7PEru zf$O?iY=~mpC$9+n*}N414k9DK{#o;y#1&+TDAPeDAdW}qq#%Va%Afl5`Sbapk7xdp zgmY*2&0+O=5aKji2H1e3RAwR9LTizF5!s9c2ik7uLtxtLQ*GiD8^CU>w&3BI(kv zrk4s9g>yZXic0Cica*@Yd{Me~TeS2iHh}_H zlGtkH6=;#+_7ta9odhdAC)e9lcV3kbnNOP|zr#8XAW-^;jAR#(DipPg>YA1eN|IXJ z*spsfH?QfuX%^Iqxsf}5vgv6JpObAH)fpA-D{87mR3&pU6YE-9u_r0&=d?oWNQN90{uKzUC8@bxt!Ey?0!fS*5pbIJqi|G8JFJ8$|H*Gw1Y~kN3)vjj+411 zjH9>R5TTk~zt5s=rZm*%NL6iiZ3vMEsf&`a*gyTX-ZfcBX%)y7Msd;-=o8i0O%lET zYG(w$*1Ps=y=w)uX*?S(%GTr)hZZB4opG6Ott%({QIsyiK7`H1+zF9Pa`QMxl&50? zY=-vl$(74F^h%0^<3;qe=$*=ikwKXUiIhqi$F(@GE^t~uj)MpM%DR3Rd)r(Uw=mMy z8k8qgBU;m%9Cs9-$47&Y_ zLxvwU$o&e&^BabL#~}ABn6Cdcd{Mo|^J%c-KFre%f1W|^SCIZf!`B&fdbC;$-(k@0 zS6pxS4F)Nv&-lE`@OK!bygt+WZo@xi@R??R*ziXU@_r8Ke`xrVS7`isPlx=UX81)0 zd0&U|UtxHwLEdXv3G;Hp`wjAb1Nr=>;lE>$_Z(>dR>MDNkoOD7|Bns-OM`BI=CI-E z{juX_|E!f7f2XG_G<=gmr>E-`hVL=x^mOere7`}br|aE@f6SoM({;%3M+`bWUEei) zL4(G}>FIi=;TIcpdb(a}_-2DnPuF(C#|%0>UDJmDp+Tpo>rV_nWYFp9I%4>L7<78N zf<}$s`39Yyu4RT_WzgyA+G+UB2A!U+{f2+SpwrWJ*zo@}==5|2O&ab>gHBJ^I>WCq z==5|A7+yB$^mI)dez!rVr|aW}f61WJ({;@71*E8cq1 z7K2Vt*8#)-*`U+Y<;vw-X8%2OaIEK#8UEbW8Xu>ptHJPeJ-_=UN(ZmA{;tK4js1tp z(Dk7RAuq)a9TkjV&k+(}_^VIGsT7r-{{^4KK8`cr!roEZ&@F98-1({H?)>=f{^HkVC&hK6oT8dgnQmWl zL#~x;DLhpmdA6Qsra@R2Ep(PKh?u`jr|mp8!HG+qtc_5d3>2YCnwJkIsQ9~#kj{cO ziH7o7+!6Ggb*8RI2N4mUAhPLGayZYl#1R{|o@72JIm7cglQrVRpx$|s1)tl+LA|lf z9m&t$^B$ZTz<%KE&jW<%g=vF147=5UtIvlUz8?qO_h62~WSyt6gt-xP5*Le*6C$8v zuL|kOq9-p0nKSGF=)stiL*qUvCwahmaE5JEw**E`w0PUIJW+PSIX-Tsedt(kc68i1+NZ zCO{R5TOHm);y#79>A~ZBR10iBZNy~ z2+raKl5tUj<5SShN!7YNgkSF;U=jE0{ewM$^%mjyVE?5}YZ}~=SJq`^?x)~10xGWD z*3+-`w*Pwn;Qz1t2hpZ3h8j+G=CiM>qf+(X^t|`rI-U2X?f=2-zh%(vSA56t8H14? z?DfiLqe1RtaNXKvc*P+1F}OaRHvGK?oxH?B!yhu}_BS3ieAyKm4)-z0XN}?4805Z$ z&p&VW+?Swz$?!im==LS*D`3JZRB)xpnbk!& zh~Ymm=+?yxH)uRo8FcI7X2XjH-MaWD!{2Gpt&8tA{7($Jb@3sG8+7a99~pjjtA_8^ z#i8M?2Hm>2$M8{uZe2WS_y-NTb@9E1f6<^@7aueHIc*xQTNk@>S!(ufUA)HdYYe(| zamn!84Z3}y1BSCH%;zU^i8U5v?P)nhCwC|U8j!w$kZ#zx0{?c0VN+w+QW_7N8k!m) z6dBfS8HOgZ@hL8;m&M8h!;p@Ui0Q!{EG|M+PJL|<7R&YSNQ?142>HY>LpJdiz)6^0 zFdZ;!VCrBN!#ws3$Zo(K2VLzu4Edl3Q)VuS<%Q;;Pw~EqVaO5js!cGUHkj4N7d_); zP*6~3?Zy2^y6{XCIa3QGRt4kX;7EQq)JozCR8VwzFBIh>Cf2gwO}T#_Ym2C_U0}n# zY@x!vCO*fm5yPZj-#;5yN6L<1p+hwq%r@tBuey$CX7j#587l`DIN-vUYdv%0!P5+X zkwLfrd!gY?23eojpRP8%%^=4K+HW+x-yp{c+7}GJ$)Fn#UTygA8+7Bx0mJV%$Z>*v zK5O_l4Z42+Uk#rz=;ZKD+pOt?*Ax2beudt)iC0-%mO%*H7Dw2Ss1M6SA|NG~HAV(S zV~E!(mf^!i?iX_Iu-4p_7%&Xgj6)e=SQfsxw3D#-<~R^Z+GWP7U^M8 zq)hF09Rre|Pd8rRtD@C}5);#$97!dk-8#Xov|Jh_vx>M}G9cHkEw{&brxLlQZJ0;w ztt~vkAI1V(r17}eZ{-!CQ7D#X#!cc8K2}za&Q34!784PR98ux*BDPD=4%`cp>zhtM zNaO?#8@fczehGYqD$ibP5s3FloTVgtOsoLUjG2(n<)<=8dYV7!Cxzz zxQ5TLxCiggs;uw&pf#>c*e?lvvmbwILQ(cBurb%LW@Hlka&cf`X=1#DD_h(=Llr}3i%q&~3h0nc zGcHPCpn$zQbjqE@MRbC0*47qYpqdz&D6fZr0EOtRH}kFMByM?8>~q2}aONZDC=REfKpSMc>^{4FR%sbRCr6*C zKT^~$cEXz2eaY#aOB9Jb7Yx2$F35d2Sm6|!!gA6U28waDT@~p9WV!BD4+T$On`mpB``xUlyAKQ<{%9B zsvm$k4ijL{dI?MeOb5&^m`RxZF!#V5hT**IQNY^sE!~N9<*34Hx~G{|Dk6KQgA_R9 z7Ap2kmjwxtH;-PALeQkiiM&m0ZQhLGHS)tcUUdTnHQezgf7ec=QOHiN=LJ!9H&%Q) zO1-hQuH;93@*<`-Y_f&8h$2q-98F?^vKcad=S0rY$kYn@^~*y#uG^5{6WLu6k48B3 zOhL$SYE<@+>l3^UaZ#}_+B%K5*&AC}t8kRYNWR@mxOIgx^ilCPzRaR|BR1-YvAbRv z8NeNp0pCq}W^=M}ih0eS@@JpzHMD3j3&^D$Y~aNx?dhfGQ-10O0T+&6#)z{GD$Qc? zITv)r?8dC-kRtA!1MfEqSxmuk#VsOTA?$8*91o*GB@8K4SH;gwnylvFz(X%Agr=fAH57UksD}@m_^Ex z)71ld(n%~%17$AjGtcsXZD=hH)=r;TZ3ptW;3dBfEaXNw$Ege>aWY`Y+ZlPA=_fo( z=Mk=Iz)}wWWeXfNUHG(8PKmGNqI7tAqxHu|AQ=#8H-?Ph6--WVMV(taUaSZkIa@9l zmxm4fKwA>2SJv4ch>7V8mub*p5Z+}LMVYA^;^K=F$s;5;w(H^mV!bzLaxoG|Ld3BT zs_zpiFS7)5!eHXItu1;F z#X8PbT<)P(jKso7j_{CG$h)K#4}@+0denm);h{3%;sWQ=$WZ^PDwYpewFe>(ZSmFq z$d#Wve@FD>d|gHgsqIQfZ7h6Jf>XJxy=gs!hrOPyRp#DuFvt@VeFxsclXFFx-c<46 zvI-Snh1)3HzPSfeNA_+V(`G zR|BX`uj80_fQWBxy5SOg8Pp&tWYlxQv_>?o+>QdZI-3fMQcHWhu8ddMs7+&Q_lnN| ztomiWV{K+5aVhA{V2(_e=86R~G=g}!0SzOQQKe=M;2rvLT)oF61J^9a1$v7^t^GFf zV2^FRDfFzcW9RK?^z3M=kcu1{h6E_)+~|gt3g0MsTyxcnwtg%yt42~8ers`jd;;g% zBUG(Kt&=48NTp-Z1-59m#IRmjmU=qeWaIr=OOD!9__KM!$N+>zr!bGJ+uC+18i8Jz z^(H}TBNHX@o9)jHpPolMyxBg#bDI)w5fsMvLR45LC^)Y$3-tI<9m3rQaY?+JE(x(e zlRe4(x!*GU_Y86$ZV={x;a@WNG}!TcmI`#TK(q(REZvYs3^{09czdzz0K{=%Ia zAIis)zRvI~400cu`_>(Xzs}%t*lmT`Z}`QpRz9b}j^=O8{_6%QKTQ7rX86wyUI06m z*TQSm{|bX{e|nAKLk1~tEa#7g-)WHY#^isG;SU<2Mjtn;rAK-NrO&K`>^5PHR$BVj~o7?Yc-xuZoI+p zPi|FvcMpB1*-sjz+_J>S@INr<-hDo3_&*qA-jM#7;WGwTnEm4GG`t3bJc}m%8pE$K zcqZ&N!t649(jd@8{k^Z>hOJ1q;mz#Z^;jb{rI5Pe_4S$V6_T>_; z;XpHg-7TGM8*z==blg(-44Z8_YwYg43ay4 zGyKeOyh#;>6oa8k1y7c8yEA$*65GG+y+H>j)5&h;8=4JZ7l{?rEbY^%ci4VZ^hHSeov|E;8JLZFWqI8U_I|6)VOp(({g; zc@e!ub&=XBxJDNX*byp~=VPguMh5;mMDNzL@ypb)d#7-OkT2@MAEa8m-&fG5v?01Lrga@(**4*9L_eU zur3^iYVB>gu9n`8V9U0aw!rC&(3!QhPn>q;w)eDm=Qefrws&uAX>G@ABVI z3&i816-&!d^HIgemQe8C($l%3k#z~HL*~9bdjNZ^x+qACHU`8hVc8wZ8$a%5FjmIR zA}9J#*W#`0f#qg!N~gb+KM5g|e5%0va*ThzQWh zaa4FyCcy_agmgW7hD#;#aqmyF#tq|P>4G(K(40vp1GU?ZYdz+UeS6FA&s9*dB1sJa&Pwoc1L1y@RO?GsT_hv5QdB;h)W*H7V$ zoP$-++12R=uds7lFV-0*)*ZqZ_YMK{px+x-*$~>fw=@?K=r(oDPSguk#@IT=+sM?F zFgP)SZlVmW&Peh&p5zcQe`L>Y=!AoYG3XS*jG{b+yTGI9@H+6QZF^5oPP8I+b+>Qa zw38DgZrkHkV`%8f2mAVhI#tR_VI$E%w@kMF5E`dvC_jE>=rQNb;Bfu=@S^-h;Y~N` zMPQ=iNpv4quzG$fqphpk-oBwtY~p@K#`8pmjum+%Bg0MPkqU~exA%{pF&wadyBVu= z+-^*mGaj-dhgq55FB>PQI*ND1utCc!-4`tj2004XU4#v_ePP>%RKMuveLCIH_kZ2Y zMvj*X+H1}kFU>k!1*wV{;=%gHcIC}uILl#9hn$b20Cmn%DdONEKr_uXHC?*OecBAjOE4)dr{nj?7@Pv{2h_M zIFEsDUCg!uVV1)|g+#}?mY{oMtE3h4D`6Eg?a$+$zUUj53Yz-!(~_>QxL3g688;{% zaN`TVry0(DHvXP%xH$(eFr4d1{^|_p{s4dVhKGU$!R3ZG8{TU8wBcI}m(2^7nz1)q*^puqns z!b8CiM|dDH{9=SRi~E-&d>T03SB!8?;iHB>XTdqAF+Il(f8m1HO8Oo%{LJ9))9HTt zxR#H@g{k*P>*Fxy=%_}yA*?S^N%7?*AMvSkDq3LR4^(B5NjQI_^I2({Ib(w zd|^l3Nu~h<4^~8yNtxB*KJaiYq{jd+=*@n|Q9U4D#Q{1V?@3X-44%T^y@?Wg~3 zhX2&uUHyGhMd@9AU2M3kug^2w)z_tlhZbz3;mwAxGu+kZjfPK~dzay^zP{4o7J*@h zTLelDw+Ou2;ll6i;EfTk_4)P)*ZTaP2-o^-(TG6D$3Fe8|M=${x&0wO*}mu-grWy% z6`#cRLzjGTNsdVr-Wh>TOR9)MJ?S4F#mQg8&Y&THj@@EEPKN#dR!U5l8PF?*`G8K! zWj0)!4$7P+M*FBj82(40|9N;E3my(|6hISr30BIms{~wG1QYTX$D}tw?&T(ZN+&Qh z&`BJLNAr`xghABZVCXfF33~OfmT_?oP9pB1`DvcTZynqg&f>m!7B}YQk~!Sxliyu6 zc*~!xY44t(3vZg1V01exDDCMl0}C#E9rRgGpBi%) z_}uI9`l|Qs!uT=l&i!o-@AC%f_Q-1=oVh83-uaskJQd-yY_^Y$$Jf*;@Glulm#gJj z6Q{y7%6hrGPIo8!sEe1#o3l1K8nL%}uqpYL5H>$#&%mej8H+$OUJ%sH2lQJ5Z^Hd^ zn00T(n-DNZ--0*BU~YyPfN6ud5azc*a|YleZ^m0>Fn7b;3^M@J26G|I88DCB3U`>h zVQz*QfN6ud5auX&RA7D#b3Y8jcJ+Cis4NTX(WgdY8kIaAqRi{M&=d^BRFv?hYCl;u zs%s~f0{Qq-hG}Zh_R@*x3?cK32{JUW+E&Vo+{787x_PzB>KY`{qWlc?+MvwAja5Wv z>2j-Im0(~p5n$JC56=7#;$;2h!ZpToTtUq4L$+owNbyeBPw4*E0; zKvRbe0mxYR?_luwRel-z5i)g+qb^w!g1C13)|D7cgYqa9Kj|7V!18CL*rzf*+~N-E z>+4}$I1XNU<&}YLnL*?QD?8|qavSy#T)$c`)L?Hnzz%P)bbvK(c?ih}?Dr1f+wm#q z`ukS&uf%{`@V?G^Y}-x-sKI>i75tV%*20u)k-I&a0P*`hW6%ds$4%bV zlgk3^h`4CEK(+2W4;F>Zg{hI^?kMVzh``Q}JYXZzVwj7tHDNQGQxa^^vyxJ!2R1|G z1w)aC!2(lcHMsSIeI+RPSY*32$O_U!9|w9e8A`-oaF*!;gF6@Nl;+^(jke3BH%`=x z2#AXKV`~h%tGwjIO)|{M@O-H}sjwSM&ZdUOrW_vM4cc4VdRl_^0X{;{FGz6)O3=_q zq`nJ-So?rJS0DN0tK2=X+QY!^v9Lhm+5baeso57xT9^GlF>m*{?aq|_t~)?q(_ zdj!}#vOZPj^=r{@Q0WPiuj_{OlIrTK2j)wktXPYCKR6e@3v$ym?>6Xg4-UNta}v)z zjYm8@KTm{R2jcO5gh8_b@p0d2c#LuN+|ziP{)xixL>#6OSDI$;+u1pIHr)R5&X_ih zJGv(t77@>QlZ@Mf-j0+W%-Jrkf6hU=l6TKTHpC)2$TxX6Kni*gs5_czA;wrl*j<%! zGYc;oX(umaHg7u@$?&LshtR}ya;MStE>4(IIvL#9z|}U0tF^|Pa$zsF%h^tshr#yF z&7IqJbcS`fv9vtsDim-6j8#2(X;-SciHwnIW|vaT$Ovho9Q=eEvv3a_Gv3Hkb1h<+c|=ohgw zh%*9=OL%^-!$Z)Y62*8ExhD`75`J=0uV=!g@YyhIl6Ltu`{t7vQ<)AdObD5k; zseAwuxO5)me9Q-1r(-xF3HYr_A(3O)xWm36L|d_sqk^g!n52UR*(!{Xs1%4hY{U}4 z-pS+Wgp|TU55^3?;)*MRb?erl;_TD+0`SEVemN9Sak;-7ca)=Z=r*dCULLj%<#8>n zRo-^*!66Qb7%pH3L?WPDe@`J0E|_!3jk;_3o^53)#0Whyc|EOUg(XL<0c@MFbl1v& zjZzjBBrRFTna_BH9ZYbP;V%BkM755OccOyhNy;&Np!I07T>CP4-G03FI7}gEoIc~o z(KPPkFag`ie0Uh6A9@L0B(SB3xO^G0gD?V{7j+5=*;)p~B;eiB2JG<)Tc2QL2|tWGOE5=Z9);NjJGx01hjjNQ?!^Um5}xY%0!Q86?svIR;8rbt!J={RWyIYvCMLjAe@1iu>^XTLT^cuC^ z@LkKj3nVLgK)cE@azP(3T$VSJ&`D4j92M3i5$xE5hen*~J7j z-jld#iGdCsEgBDsBf|l?NCz2jFL}AJhg&289;nXA z9$Zcyb}94^@WqXxd}Gput0i+Q^p}8*HmLIW{fZ=v|X&TO*C@z_B;Cm}-6qK)WA`pcABTyxQS4>a}Qvqdw za>c(7!p8;BrI2Td& zgHY2hG;!xHWSDdWaT&)}}aN{krnR zAZk083KU6|jl=-fXh6^#U=&v-%jS8G+EIel*pusF;!~8X%Icc#~-SuL%Rhnbw6{ppJbZ#l@+NLJ^}As@mL;W zUQx!P`R5=YHdf(DeIgp{Z>6v}5m>dNL3*yn2sRqtWN=l`#+-|PmW3~QNm$1TJN-7$k3$kZ7(5+fKT%ii{P`9Mzs^DYGX5&F1i@NfFR*o| z9GY->%;ix_YioN~FC1khZ`id<%hwBj%F>VecH$WjdvfWDa?ZEN&H?dk$>Gv{N?9ML?fPq+ zpTO*gxd-Nu;j}vj6Wot;I+*)m*8RGs%yRLmw^J&fz@W3@m{K(EEK7GC7i;eEsb&BsdI@aHT z#vByXp`X)jFm#(-?_-d{h=mzIjCyJ*SoY| zs#Sh7D8K*K>6>T!3$5L`cKF||{r#$@Z@%^OmoH_|VW|^9zH!47z@EuJkqMbly-ke|gyEDPL4LU9$N|o5B;Fzl0XA=APv; zkE%8PogSx8MEHNz(s!tP_Vg`4`s^q3vtPCJHP4a0Gvf4xOy{p!`VPHf_VQCLEmnfR zg6W&9{N~%gxbeaDGqvVtzpDMqFKhZvRsZtKn!dT}=Y0E@U)J=Us{ZAdHGOlH---4w z!5s7JU-kawmo0s#x_|j)OW$1e^F;fXU$*p}>i*@IEq!y9ANQB}PKG;&6dWQH69qk& zB(A6R1UV7;$PF~YaVeh7!C9=z=-QPk%B#x}xylm{P^v*Bi~EWLQ~G6Bw!7Pc?hQeA zN01pnc~z|dsDF~b7bpm*Pmn+Ao#T&s>G-2wJpSD7we1lGZo2L6OGB-m{HRxsKX-EH z?oYe@c_%+ey?XpnFCKqSQxH(UCV%eS!QH1mN38?u0p#zQ3Igh%{?1bn zoNv&}9(=CKsa&a+4N21OT2^p}=C3g5!bvoQI@?>?@VywK<@pnJHemlRX#5} z!Jo@l2Os05cl;b=Ik~)G0NLrwRYuB_}@(Z=)b(m&Y!?<-8&wd`S-U!G_z*^ zLoP0{#}5SHX;=+#Jm>8~ohu8uuR|U9-jQ8*u*|%zZG=`u&Gy7QkE#^A7Vr zo8P(ICcvW?=9_POXy#Kecfbt8`2MZ~zRk0{1mBBbzVLew%{0P17v?OOZ{7CL%wd=T z82WED=y-h?cpc3BaQmp0n{&&8cW2PN4t5)1Chh{ScO&k|hweKS@;l1}bGT>u`M+uR zgLft4J%Du3q~kCEy6zNhnkEZ>Dg11H=R-3`0r$du8N4q5o~Hfz9S_Ys3`6@r1H9e7 zeY)R;-Ho384t&4V@cWU^2VoAt{MH_bisvJD&94y=iA549a2)c_N`sL*W|j}JKL|?*1M^t zchj~`sO5u9kz5}j#m1H`TQ;<`ZdRMl?OV3gQ>K|tkeqMI5G!C;cbFPQ}#=8|Rr#2>2%DmWrPba1P)1*W zRsI+jsOXPW%v-N)5@F6-KE{J#dpv-;cxxQAey7SeBMx3ql8A%zpD5o{+Eewz{3pXt z_)mrJm2V>KIQ<#r?4{o;=S0{w{inm%@@|FjPgQYAQ-FhYXPGo)M+dJQ;H}=#!aAdQ zCF#MUHofC-y$txSsTtAS8ZW9DWX20*)v=|dr7Q15d$deQda@{+cxI-*IIyms&2IE? z*#fK7$bl>|I^!*|NzfTbiF^i6W_5zz6(19u!Mlpy@lW#Be9U5uEJ?D>AdPdui-lE? zNVt{x#{d{3nJ%EPMI;T`W%-^Ch}ApFp@hFUM9N;b*NdFCpa1Gl9CPAW6(%LPeVUk&ocdIr`e6(l229sWJ<=lR4PbDn%0)TRsN!~v8h_urmb&*S-6iit%bIgV@o;IEs~r^=Dk z$|qSijEYNt)=-d+MY3q(aa6;vRX%a(5<}PAQzL2|k5oF?{=6|&(-CoEek8`$ntVX% z_{1^t@}p*a66wl}jh8QpxFpLt!6y|PcA<$T#x6Hrov|IU*Q+99?^;dD_*9WH_-ay; zS#!X`M|ub5U__X13r5duuSw6e`KzdmFyisNW=Jl*h(S8EM56Cf?(&1J4^Hb=h&aXn5xd;L`FZVJsQD>_BF)Z`Pdh2BiljjG?>L%^EDt}V7*5kpX zR)t^XKNSZrtE%F__*dmuDtym>X82Y9Q{j7AZp8}%Nqs!;NX}K_p3KX4^BebLaEs>~ z4AW{cDd^9&P==N$CpW&(!6&50Ou~$kOr?b0s>*@+XmMgtsdB7JPnG{vnwTDvbzc=i$~HJSO7;omF4nt_96KH-zBRunXk8Iif;k<15|by*%=R(ruZ za*1<|@SL|~gq=@|YDPSrKT_asKF7KGL>am8;K*({Zu?$46Q8UXnZ7lDoPSo6tbRv$ z*hWS=28_4!pV*5?$ARG^2V5&)-1+nUM`44`^%IHs&*482|1=L5{}c~D{6zeH|LixI zhping_}|n}-?eSaHI1tpF4g$6`-sAJG&x7(Mog`%HQ0F7ZN8kqFFQ(6zH0juIxW|l zabpkQ9KFO@`M`A!|C+YiTr%6C3$QAuTsQ3q{1~yk65X{Us^Y?&t{o%tVNTDTw$_%d z?OV2NYGKnuD?`0-^)@akBhih8c(7(dSno1exO7By&e3G?U{aiWG8$5ElJ&1fT)3H+ z!9(NWtpXiQIv&oR?I+F#3BNiYyvD=)O6P;eqjo-I@bL4&|@iYqUj#o5jznqs#~xFQM`G zS6smUCRaRt$;cpyn&foMZ`Pcm2aTG~&5PJ zgnsF0Dc6iqT+VaGsG5@(r`hNRI*jik2RMYklL&5i}u}A#nsTL^O2@CjjLap zYwhgKZQ8o2SM;9<1DRWs`f_(%DCJ${UuM|Ow$c1IHd)BtN9+`_hN7=cZS5GBy=^CE zyi8*0;xaqvX>V_fcBUc{+D0Uii zh&!odeqb9rD9C_zEce82jFwx{A4}c*v6o=dnU)$MyLOu7!8YNA?ej>*A=`gO95_$Q zh=cPV6+~9rUGZh)LAL)?_^9LBi14>YR*;X-_~SuVT&%sM`K7W&+Cw(KRNRzNM$TwJ zalB?Np_of5BDMUdV!?hYGY<40^-x*);e2LAS6dn|$qPd3P+6Y)%5iy*!f3m&YhH4vFzx51ullh#B5bZ4~)z z%1SqXQ{~#0_@427pWz?-hPp#vjOZu>-$-*>zv#Smx)7m24C)@Kbub5YgH$<~!)e8kC$>(*(RL%kPI|UYIwo`n)Gr|qeaD)zQVoyNNEhZ;YQ@G zQRjg)PPt_c$}Mwz(h+H;RDTZ2;zU(nDqkbi396gLam(lFwx`OyJI_^{{Qf}Q4m zUD`kFdFNo#+($CpnYYvC{_3u`&?e=_Y3kGuo1-`qc&4j=Bk8!=?=pEvhIE`D(5orycl{aD%^_8#OZR4j_{{tvH7g}?=tJ2*_d*Q#D!km?)84wJ z{p$8D>qXVBD1fDgU4CHeIew9ameJcS5kmF5-L0$ZsWDe1h5cP`vBcI@BPF?_z38MZ zM|#faoh^pAOlsOErdTz^6w^e>nZ(-JS)^Q(euJLvn|j+fz;avXmTO|H75cZFi~G8~ zDQIio*s^^~ZvcVnwHLH*+uF6IeQSGX@3xKRu=auimp0KoD$ETe?p(!lj;=tH!*A^Q z%c2PCqo;UGM!Qa4yF#Sl71L#LhRS5FuTU&)?LBpuUIsmwt*h%0X?`^62Nz5F)r!#$ zuVv&FLn%cckk*R6F%yZtDYF+LbU?u@lOWezuHSA(veNCxtMw|zr|~kxgTaU|&K|3H zi%S$QrEBkDbmW_hCkx+vi?u1<#eQ+uUaPm?()y-VqLqL1G^4)?(9N7w=E2%TA+!kxW?;T-Oct`{c>-b8` zGA`}*QUNWRI_}-YEj^99E@2Pb`kr=Zm)(PgjxY8*0Nn8m_OM}-LZH~mmvsqy*bnSs zlV`)vOHY#5o*+;1JSor@2t*?g806`h;W8i%RRb0O*tJ00WK`Hz*>AARkWCla zQVF!fLi0s;!dA@I20(*mOn_!;V2!_Z9evY>+xH7xM1w(hRq3Zwj_-+YxMSZ`-teYtXUjs*YgerY<}jhAkLmO+8Y=@nx0l2hkFlmb7#o zfx-8GN9VOEYeBz(`-@rjv)TR8Ed0XRJl1gg#4P-3c#(NSEw{hV;K%vL$^MRH@Z&t@ zWPks7iuwKc->S>^7m43P8S%qZ?4*C+JjMJT$w==n62C_?;>Y>t$^O2d!LRvbnZe)x z%-}cu3-FuC;5XM?ezxGA{N3vM7tZEk4!5Uf@Z&n_WPi`d;7493+b2Ay2EUVSb1(dM zb^bAaC(G~r8u2^XHu9nx{7$xwJhw)APnO@Z8u2^XI*m{cjy&{7j+s4VpZ^tR-cYOvw<^zAB{5`Qh z$1=uC_I)SY|Mg|WkL7!^{mWnmKk_2<75rq91& z7Jes_hZD2#JDEOuY8HMc(?`F07JjmE=rVJj@O88B3+KthC%gR7?D1S^&N%TBdBZI6 zYwkMnioJgpe$xj|yaxXMEc^}~$ENNH{_dQGUvyY<0zBV08^1#*9={LH#xK&+H2(;G zd^Ub3UcA9)X5)9_#T)$HZ2V3<`+_ge#_uE=@WZq6YnXpQ80E23%6;C7-_@TxiZooE$&Y}WLi_&TY1j`*Eu5B>NY@mqL;8Tg_(;&-AoX4xG4 zPPE2coG~BrE8Vn@%;Wpa@69q^I{zoo&pdS={HU9BzP~%O_DfQpPlVqy<`F+ncX%qK zYV>*Y;FtC_TN`}AN${Jk%`80$ezVOpFP?>8t^MrT+RVxfe#{@=r1Nh{+QP%zYVcz> z;COoE@|net^v_1dGB2J3$TTbgB#-9;hJeoloCZ7(uo>`tK>QD$&p-Ip8B{F!m;9e* z^iKyQ-?IUy0T%PR2Ep$THp4IBbP&9r5DWwd1I5n> zz9jYwgZ~n^IOu1jz@PxgAQ=puXq`64us_0|gCS^qL;t>sHJkoJ>iPk9vM zBm7@u_VjG_!iRqN+h*>H#qoDjd>3!m_q+J=T?_tPJY8Sz;^*`ZyLj;(6aHL$+`C@M z7k%4DOO>gO_6~G8*f0U9yVm&OS-dLF2kE-T3xfqbp4wkPedvZPAbjEV+HGUq{`1N> zE$zXx$#@l&hoknneXN`xENsEUvHf^i*nbh(UJmZXbIOn$5XQc93*Ii?*IC2~?B@2J zLD%?jaeTNkd}9IcsN;XIb$DQ4q|jHKWNh*7a|@nG?Jks{j#rai^KZCN>le#L%BNXL zSC~Czv&7y?ZN1sEa4GlIyD*pr2sW5KWyQ3drP>9ZX3t8cESm8Z1Ua*(K3lbCs|$ix znLX_+NU^`!>?y0}+rQQ9sn=I^?n<=_K4|t){LR;WW>1+irDu;51c%L@aTj}K6a16e zGyX~+;tShVReYq`1V1r*##8e_x)XWyK5$Pv6XLPjU>mEDS$08Cs>3~5Eta52T1vpF zKesH>@?&(*K$dGR2Em)np6z;}XaDw;y)~oY-5wv(vtQxweP(|yzG?6D9e*Na@AMvv zr{o{_lAqma=#TXKC^+xmf4vW7=a|M0ngg_#uZSRojoFFAV#oh9 z%QFFZ78zasssIq;wv7(v;;*L2ZdK674g#e8XmujF8x;BnhH_dXwo^ zyYj?vg$#wjkS_O7{np{J=zDZ{EazVA4YuYdV+V*xM-JPhJ1?7X=2i+zx5m$c%d7M3 zf%oElZM>3B333}4HjNDyHx8r6N0&T2*4omQuM7pqWqzYq9&+|VWA=ljzq&Av7u3xI zMi@cFhjS4x&PDuKztP$vPUHHnyC|FO->Sb^33b!~g5&@PFGJ{y#8>|4+~1{|j^Ye`F5#pUuJl=}*)8Q7eB!bFWo@ zE}FxA^&I@0Q|{BpR4?*2v+s}i>!{IS?t9GscT(<$zN`LkH~TwN?#I5N?(Z}E52oA? zd|TZQn*CoITxg?Lm%0DF**}o-ADH_$%>H{R_wZZF|9?mJu1;$DO6Gq0)3sclZqUs% z8os0c&oldrQtn3{QTNr6eUksQxv#6`{;%r)Ds%5K7|JRy2tsq;Y4-go_v8Pf{&$}XK{C7zXLRTVctIvTIc6v;4w?=5{zi%6K zJbd^QxCbbs#V{Ab)WfWW@oD(o3cGDEr3|+;?Ww>&@&ttQH{kiu6TsJ{_ebEp40*i; zW^XFbuS7X*hKc%^xO)j!zZ~{3*KK}y<_?3;z&CN<+-^9bd!I;!^H-U)xb5$m9C;fZ z8&+H%@9rrzF3-pZJCrru56{%WEP+`Fa~$Rv%n_JFFciW^RPAl0+(;2O%T^3wKde+3 z!~S2`xB~xnhhbA=*isq~n;M!Lq@U8=OHZD>S**SFF>q&xPlf@L8||0<%kmU1zK-Sw z3WIsxVCC{^J$4{v>#>YAC$_PO<3j9uaD`R12+npMq` zPDD|PIy2ui^?qd2<)itlbkz}$dlcGJuhI}}lSTX__Ew-?ZrFWb>|4quE*EZX!c=}FD-hC< z$%olG!Rz^jl)G-Ig&FSYQZet5e?L7L-V6Ehk*UyA2;ky{VTs#8VN4LhCLM2Bg~dUS zC>d_GbDS+&#EE`>$3qX#^urWkUIp{JFt2;~;hDDqz87XQ%)1|ac%}k#Gt7s8Uj(xX z=1Q2`VYd(T1Aq&FpAB;!%m;vf4CYfXe+%;!m~X&*7v?80p8$>H`PcaV5)65f&%^ls zHq3v*%)mSa{GS8!VwjaMFN3)XrUxbmvj=8-=jI)qVbHsyeOr4Qd*=4;ZeXoFL2tMG z!L7XB9i3f4*QU-*c!UoW+cuNFwF4AA@~4$wo7?FFe!F|x=nTspt+d?HdbQx-xMSm{ zPErYD`QFh%ALO-zyms`^oABB}UOUJO^!%d%TphH59Dfl3@@;3Z@~4O4bR(v{-DC8-wkegVxSq10F%y z7<6n5I$MJct-Z9$BLN!P6d7W0Srjobq}FGAsE2tC=QEst~Qt-9+|*lA!afI*f!Zy z2%XJX(VzAT7jKAyih%M&sZ<>2FzDNR-w1VYaZh1D&NSRSyf9h9(PPriRsG=+o-~bw za#Fw}8b+2wEoYUC7yMaDiWsN|asK2~6@;kxd6`>>1BJ0+5Hg(ug-|E_#>X(k0TD;^ z^n8kwc6U6(p;uJ=3?qGmSUU_C#wsBeFB4b@Oa)N8L!~(*#)v9(!u~uCS{XIuSn@>8 z&!cFnkjRaRv0`5ZCph^&oYPE$-caPU45ie?@bou8px=S-9t@e<}7g><2WL;3QM z3VcNQf{WMTFtVh==p%;E$TPwf5wp}K8pOyF(dv^MMa6*npCI6vboT>uo4e*ocPr>P zj@~o}J;%oRggXK{j+xiN^ula`X@gk@vl?bO%!M%L!<-8<7tg28gN8iL0NvyB$d@0_ zgNFRRH&41p=1F%HbYF$}Jk0$tpN6>?hGF^U!@ym`6Tzb?9CD7y!n5AwR@N>GLj1by zurmzThD)Jwf_8c|$}iY8TsE>(t<7Worna?VK-VPQYDbr_21{(c?hF>uL(HKbT5P~Y zY-2f?5Ea_lZWTpa^_vS*&c?6puv=PI@4j_N-C2$vx(7n12g})EQi=xeFJ(igP|N%- z9T^Dg&?gkpXD-tasy!j|BKOG@^5~j+p}h;#BOo{auz>C`WRO@( z@XG>b*wu2Ni$0+;F+LWu&tt+FL-3@a2!5n%=UQa|J&UR*W1j{;;ASO?1M9F|Cg^RL zdBA>RQM4aZndEjkc9k%F)SO`n2hc)7O=nU75>EP$?C)@IW^`rL|8Zjn9az{mjM$h^ zARH68<8vA`8&KDf`-QJr*i7_zufhW#P`GQQ!b8tcNcw3AnH*T6c*C^9V>=Wc{3Ek( zP`LPM3dx)P-0#q9)jlwP)AuM|YBc-jDx~brewflz6+ieob9amkHZ&#eDc7>!OW(np z)xG%|gLR4xUN4|{Lt#8{fjNU(phT1`1K0IYZV^*kiz|! zDRlgpCDX5fo-@nO>08vj`8tIMK5YIjPx`B@()8`O@TT9S?u&B@k9|bp!IvfdQQC>= zJM!y{jU1kZ?J2P;tn2PtoSAH zceC|9ju+u^OW*YWr*y|HeU7FcA9uqXbM?i_!MQuwutEJh9Mvqi+Y7H@zq%jXt?>WJ#sU*F#zZf3}E_4`V zq^;b;5vAY%X$$Wvg~y+%a3%dUBVQJoyV*}049q@)7R0jvr|o+-5N=hzj%FD??mpdN zL9pxH>fSY~@X%)rb|(GBKJ+WI|IhW0jG0!um9lX^x^l&es-p^Fz^>8j9(6oQk0%h| zD$8ju#)|f%Gc@}>lg8=h=zQqxedxX&9r5{^tZ>u(e7=s}hjmvSouLUmlg8=h=zQqx zedxX&9r5{^tZ>u(e7=s}htKagIzuzGDK=@GZjR1}&fbUa+tCr9ugMBG&CloS=zVw` zX`xwyaGgoxw0CqqboM@U-;R#>d`(ukX?{LmNAE+nwIg1G%Wl8r@x9}i#CeXj+OJ2V zEgjzYTOfbqyA%wPcFvfyAB6gMeTNZrVvj<_GO=IGHS~a}(}YS|oV2;!32b=EA)8y- z!|yeJc66rezN0gQ_k7~$%wm`jW(&+?u%rDg_&x^1@4#sJ?VJ0|-M4!pzZ(#bTmSUv z%me{Ocf z|I_;>PP4>l9sWeYuOsXuF#mz@j=>Nf|0L=~%G~4OhyMKN%mXloU^fKwW|$7z0UiKM z`#n|ok__HMpF%x={RV^l_RWXP{szR2_BR{;JcH-M{>SFW(fIyP^|uSd!9m1>;dgxc z=*%vdX_x~rhhQFqS@Id=C*Tul)}+GN3A_YzzL|A^x56xkxe#WHebb%zbubkeNB=}a z#)aW#g>w_^y}mcIdp`f)j?O&tt)nwvg(3W~;WvLgE_daY8 z1j)>43!Z%T3$J|5%+DWx?D(-m(@EbZ52N#4^RJSMty?xhZEvo-rL%1t4{%O)9OSMQ z?h`^pM^D;Y3>t+S0wnaPC)-?*_xKG{}7u(m%~0 z@2?T(J`5o*g%a|PGyS*2biq6ihHL$17`mSWLwnwrBi%C%ZUm$~?{AXs41?IJ5uEcr z(qCYZOHbmw7e>f+EFtHKT`>Hufceq|AE|unUHNnV;`z6p{({1NxBb=o&UyBYpStyx zPkzr?|8n@ARd-dlzxmBwyWaS<8JZhTp~>QR$D6)3^8m~}2n-cik^%muM9pJ6NKLhgx7>1J-##2F84|5mX+W-du{{nG205fz7%u(`qtMWVy z-j4xa26(xJlNH7!+};VZ5auAv5%?KE-0HxG@Kl()!IymgfpIgw`)A?*0O$+meih)e zU@r3Fa=!8Fu(&#SG4O++eF%o|7d5vSkH-KT_RpW+E=TL&JmPW)G^^kCwV8FdeQl-} z@OJwqz8vN{7=CA&o6Y`=-$OpbWYIhh`_JDFzA%r#obmRr&0Gl61~UM2GYs9b%-wLi zALbF5^WOpfFplmz`@YGuquX7;?}r(vVQz>0-7xpURA5G6ZicBvpJh)!YyRdAqJ)AU|@SL2F=qkzB~0Yrhu)9zwoHYJZv6f0RqDQHa>GcmFDRDs zkfxPSb)WCw1`DTa#ZzUz#PIoZTi7qH;qK@-9{azUAo$V zw}$-=M~6b9{u<7+9o_k$`@GS8#OR)E4U<)nZ{l#i?*IPO=oWf(&7gDb*{9_<*Dcha zvk2cV+~>kB{aXN_+Lj_!c#1Yq|m3-=5J$nV@s| zl129uqdO}Vt`{|l!lKREE*7Q2P18N!=$?`aH%-@Ibfyn5j1-s92rJ36o29Nl|8x{9NNT{Ggr_&d55e5Ze>d+Fev46=H0M){rYrNhys zc@aO|OUJBqUOHx_^U~qyZpaAu2R~4KQA{h}kYc;b`mryi9w`*FyfNkSCQbYO?*{?( zQ!zjIHWjid@mp}lfEHi8CkxNVl;H)KGGIN-F2CmQAK=LKD$DcB-uG9$@2`5_|LA@H z6TVC4_n*D*2fXhG@jY!c4|(4Y%Q5S9x{9BFBuv9-iz{@mM`>i_&#Lce~531Fu)=d z=rkZ$1W&>DG5el#o&mb7-;o#V{pRo|x-Zo5`-_?xokO=PJZ^aScExXbh4xF_AK~wg z6n^0S=HH;Jr{R?vPS@aB!vFXciXZ=}hU>yVev$g$Rd3WFY*5I3 zBL4ngg>Oas|15k>eeLv9r}$##4@@&m`X{qMDC${dQ{bNV?yK9obG_Xy8#iuh#ap7S z-R-@(hQRDQupf(?=9}A76oKv6R{1mgx%{=abZ@yP%~LJgcXn;-#;r(;OOVDjMJn*@ zr0oJs-bHeoQ%?C+#`BbQ=5-*!;cjAr>P~q*6&qB%3^C%+Jkh2c4wZepKjq$^a)(%U zB82|1;CqMcHWc7MqB>eA4DS_1I8>UnD%3cfioaIAIXs6doASg5FjaT&$r3NS!p{mY zT3dMQmvhfGTW|fcOxG_L*VS?PA;0KjCT+*{OYCaowBt|LFD=1_4M8ie)g*sYS8M|{7r(?l8qN{6Lrld_CX%7`L zg&UMwMC7aQVT!eg28fWn+&QD2q*7&N5pLfUr1wWg`ttpIl+3>yp*BvQUOW%)#+3mi zVQe?lEzu^vu%>8#zsTzwQY!M9UZHar1qF+;(PtG~%2AIJ@+vU0R`1@D(a^ZO7AjX1 zh;vbnwG?h}ILz+k5mmii(Uk_ZisD{EstX!D{q$qwt_C>IA@nizp#vcgygTe*e6@fM zb~mFkRnq8SQ3$yVxxpbGprT9ldnq7RxH4k##hn~!Fd{>)>2#%I4tS|nZkSAr<@e$?j$B&Nsh8e3)hDDy zRUJl*G9qrNW~xS*Z~oPzf#I@<>?ADR?IVe9!etnDVvx7{pcW3@1$52r<+c8Cxy0_X zMY)XU$FWr8)#su0)wzREAJ8 zSBBnI3}zMS8b{D~=0|u5b_!h@nlbJ(;UW^*J8Kt=rca!#((p#pIBx2MqY_c72vDy~ zweuz(kj?p!HJt@*_o_U8S zR8ab8I5aQB^kYb1DE+d;qpwieS74^2-eZ)BR3^X&#-(&Us=gN{8Bk>%qRM(bliYtB zN;N$A92g2M>e5%Z;G*VkZKZ#xfd0TPqVXg@wA)hBZ2N|H2Lls&y9z2Jyi0a?aJ^t7 zgH$*^`OLnM*F34xQF?gZiWBKIQ8C!3qg$a+9a+SegD(30*?PkG_IWz*q+xK#jk*_W z-qM3gJ}L>iz={;K);A3A15h$NJcj9GKgMlN2`5AM^g9xCV?kVSb7n7UvECzd)^<-` zlJCL=HRg~~2N)f9^Ng*@;vBU!&2!E(sB9z5m#4=10~a*%%@%;t4dHocP_P1prlcd! zS``dcDy1@qi^(a;aH_MQU4%r}4>@f61sFINH}lZ?5a8Zk3H;C(u`3#MGl}6b^e$x# zN4z@d)dSFb4)N3hokMA?rek?*IOR53fnLm7_Y+Zp(NpHp6;(i^7~7P~-N-KPJJ?8| zV>2c%j*g-U`gn9-6m+VY({mjgM9q)*LY4LK?ul`|VJNp4J*Nr^HzviP%h)QZbSI9K z(;A(~XgA~RS>xi2i#SPN0yQ&wYtj*yId8(12=j>_iOacAsRO~ZSW4zD5wH9#F2pO zMRd~X9Ay7L+et5#JHqImZ8>7fDVsm6I8tva$FNC~@MGOs(!o@+a(q-Z8IhL+IR?Os zDr~OGPy(Mq~mj!W_z9iBv|5zn|e;EZ94 z5ZlPW#E}=aHm&U|PK*s;W)aX@6xjB=tZ;)cT{QY2%D!sLf{dFU=XkughiO960bLyP zsM?H7pME>3b{s+GgBr*BOn@iq6n7? zGShMjS3u<^f$S~({Nn1M*k8o>oXCdcf_n7 zkVIuMdr+sdnBHt`=0b$mY9Wt4T;X(A#&cb<1qu5MPIT8Eyxd zl50GD&cZse{=PtT;`pmdv8dR6UhIR3It1%u(&L3$$E(D+4s#EUJ1@4fiXFJtNhC7q z6eZKP6+%4RKEZQ$V@~8Eva_TJBDtf$vT|Al3R#e2RF~cfE)2>gN8@ zWQiFY#hz_H9?rAU7wguD=HLkqzLF516++?SfirP5Nl~5{%DRuft6W&^v`1nbgrYKu zu1{u;rjRkDHM(rsJmhy~!nv^}8z`x1Cq1C)VzQ3aU0lU7;^tx-$BBNuTI9wpx0Fsh zV+nz61k5L@9k_sqTT05EG3IJN5j!`h&-P{6!7fWX|8fNd9(5d6pcuUN;^0B6yH`l) z&2$ElMQ6RBH%ApV#wDq&#&=x`|$?ehEO znC{n1g(wnW+IJj3zd|Gw`e<;~YJHr2d`B@}AxR8MGB0vF)2u2uWEsN3x6)V0VSDV_R&}!Yiu%uT0DVIV_judT-~UHMW4e(dxBfX? zL5?oOqaN6q!o=EsS#+3VL-nI0^m<``H^j59Rv+j&y4@4cN-HFy=+8e~P1K%3wltiT zUrUk>x)6&Nf{_QcPtv+Qj)=(iY8-AW8HaLZ&EMJ>RwrEV}ZCf8iMRem>(Rqq8wZIZ%o;Ny2>kNhvt@UvTHVhqLI9ijJ zT6`xj&M`el1=of6#5`An_AE^_4=Xv#;vnT_r068vc)%twG`xE#VL^Rka{l9w`O43% zQ$=aE5^epCXPP!hrLAQfHEk(THcKyYYU848Cv=mSHeAjzoH;GuaM%3_E)1|tpOE7- zv`_3J&hdNkX>tW8IArI@=tR$@mq!d=Z0^AhJ$HVqxi=X89>aGUzT5EE8UE*nzsvB~ z8^1p^{5Q@0qlWJ>{PTtn8vb>|i-v#K@P9Y_XNETz|EKQM_%<2-T*JqVeyQPG%zc&N z-!u0P!-oyO&hRH2{g~nCY$d;5ZTO9b-)i`UMt`T_XB+-e!;c&NCk;n|3BUUd#}rBM ze=_`G!~er@2zZG5e;NKM z)bKZ3d|qbwTMXY~`0p6~wT8dm@G--ujQ$qGf7jgKVfaIaA2j?8hJVTMHyZw^;s0Xz zf@?MYw;KLz!*^JCjfTJ3+&3D&%G`Gu{uXn;#qj-xzt8YLGW^e-yZQf$;j0b*q2XUN z`rtZ^--iufYWPPCZ#Mj6hVL@`Uc+xN{653?8~z!?4;p^R@Xr~3*zkWd{O=4u{d$eh z=L|p3@V_^_$?)3@-)Q*n89re6+YFyF{JEC?{f58M@Ourv-RKV+{&vG3HN4a4A2<9` z!_Rr8#`g-tFE)Iy;jM|8~%HS zzr*mG4gaX&-(H~nK5KZv+#fW&!|)#%-fsAreH!2QTKE?je!ICh8h*gsTMU1Oxpy1> z2j>1t!~f9m3B!NO=-*;^VE6|Of05yzF#I0#|2e}yX!ySv{>O&@-0+g&&*|6ne9iDi z!v~H3M#KNX+=mSRkl}AK{G~?!9>bR!exKogX7t}M`~q|TUxuG=_~HSL&v%Xf|8RB| za8W$}8$VmI&cKc{P%H#2M8Ts}6yYQktfK`bPC~%M#>Q^MZpCiJZpCiEZpFsr|IE&3 zj^o6y|JM&+>+Cb1nc3NT@3VDVopcK67Nob5b|Sr|$Bt4zK>7%k zzeIW=#WP9AlFlaGpLFFw-oF58}_`lKzW{Z^!}Q@ji5#uWD3h`PY0|+I ze@l7*>EZ+U^aqkQB^^TAlk{_HFP3x%iZ3CpB%MmSDd`8K@eO$Cc=Da}PdXk{8px-Q zZ^27(3)1*Tyrexz<6HKUjwM}`^nB8C()&nPCVh)EzC|z9|3dl$O}|PApFX}#&!EWaYlYUHkKItc<_mh4~`ZDP#S{|=SkD$0Lluti_ba~RvsJt<06VjbXmm}>> zx;g21((_3tk-kFh?;?%I5v2LOO1clt|8vqFq~&3}e^p60CtZ!SBk5nXJbg)5r+7T+ z`lORdTa!*D-JJAu(iWr*!uj-_NE?whA#F?gH%(tnx(daIlC~v1lXNfADWttf-y+?U zv`oXN?@78g=^mupkPfBg?MXU}bS&v`(hEs1q2<4a^jOk2N#i{yY5lw=y^`Vu2J!w_ zQoIW3cNDiE{eiSM>5rrnNEfC0>q&2;_z}{dNT-wjO!__Pid4T)1n)sq)U<>NxBs2*`!O8P9}{@b9w*pU1fZlJC41j z&0Z0R!-uTZQTU>`be&QyUF?@0YE|=xPV)w&LQ+7D=NQ0=#daLuH#aEP^elw7h2U5lWw9%eS2LT!>n_uFbx6 z&)<%b+Uk$>fu7@mr%J$Tc3_5GxtC z1gKE%P0|3$;ZJ5rJD$i1?ytrT6MWnrGtKTUi6w&lPwJ>F44Vih7ZToI&0a)uQ8_rX zZJyn*VjCu&2gCo^W3bbO;+Iv~r%v#yBVT9Iy2gVw;cQj?Sx(I!to{8o^-F$kNw|{&={d+!Wf&Ozobj!trM+{^$pxb{D|JQs{xqr?lmHT5p zC2r-iSA+X%q0+Xh!S){=AdO0mOY2jOr)}__On?mZqE$=#l>~HYEwJZ|G-|x*5`d?* zK|g5&Kt=XV2ZCFE<*0*s%dwVdhZGCMC&DL`J;BjJ%^z0P?$^>SL<-=A3cl?!g67`- zh){ImJw^pU_WO;Xy?_=FgX#H4UfS`$sXEP5Lp##@$F9!I5AThbJhZre#m z8lA52OkPbos_=GrHj!5+pK_Q7;01Yxcwzw4WCu6CHniQ!&4O)+p;rdkH{_&%e{cjZ z9~tdC0M95%<^tOvUZ<4)L^<{l+}{ea>EekDpjvw7Sd!7fA$dB&+R4|vu+q|YKpU6j zXrxTWL(GmT+a7|$q=~b+=DomcI=O=JUK_!}qbkx&@*^`nCCZjRFUj5mVlNF#hQdzT zZ#qj~Z58_qn-CQm9HGX`KYY5hky9h#c*|Dob#xO~ny8(lsxyv5{sEDG5$wh{5G?gC z*R(MYr`=M-ekBfX5z+8eQ4zXzAf?w2)sgHS1GY5%@E)%89bC}?eo({~jGucFkLyP= zm&G3ArrF}XbLpnyTSe}Td$ICZ%XTi#9o2XjgHIn@Cqqka*ZI`hzAP1X_oM}-yNpGI zdok?!ye&W=6kjM~M;-oDr6|YNpcuyr1V=PstW;EZWS)H8ZfLhpJ9L3nBK%1QQY2Sh`CkR0j;f5(=!61J|1Y2 zwj=Sn!C&&#Hg3*l+P3v7soA2-6IAh6DZ66h)@?91`_J}tVt+J;2cGydFBV9RYV&iqAj*$o2X}0w z(xZ&pJnWl;^JHo}!OxdipQR&E44yt$^OFIozihJfmN@Gjd$dYy{phu{FmyP^+#~yS zFWNs?WpSn_bp`M2131!@q}Bya*~eD-PAK*pzS-f~wt-SXHo{g4>!&o1ZAJRHo)l$= zHSLJ5$7WrYj(Jp78rQ3;eV~V0&}y}huP+uGdtZ+ON-S%!(&>Cqa#L(dLTm887(6}S zGDIe@VTNs8nuuOro_$}RNo(3^JhYAdgI%nV7%^?}LIs;JUiVTn{<6)KF9`Pa zGqv=3r+NT>DUmHHyk>#dKJY4(Ixsp+dJbAIdvG{dtBtXC^_VC1Q!g(UYWe{!T3A32 zR(Z4Xwvk&jm$9sT{y=1rKVkSsZr(}cslcbgmJl76aB$#Dk&L)>DC16!Rv240BFNpo zbo!$OhqRz1TbMhhzwdF^NIM@F+PyFDsRz5>VJ;5uc%oH}hu>iF*;BYIKU{ycCN1p@{ykFMRy|cBHP~!@wTvO1NIDx+?cc6zs?8y6(Ol-tWR)atR7x6!7(4; z3&z)erP|WzJbPr2Ka0y6RJnHKF{w+@X01u(H*vPJ(c5ZLb4*A0;P9cds3nNddD@@( z>{_9JKIL;8z#K~El~yS0O@7A*evv>rX_iXhWksAMVCLy{&`7}%9@Sn3%6*|i&0g7J zuhj)h5BvVToVW_aTl}+}bd@7IQtcb=AIH0!d(|oT(#c=?lXtUZXOwyqfGPD43dkpy zJ^7qpet%p&!NmS-hQR^{b{}^6DxWY8#QEgnOeEj==DWDggU9-Hc>&4#OAYAthlkn5 ztv%xFm4L&R+_rwhET6xmm|sNaidnw>X0-$ITtv%fvh4BI{Ia7$^UG#4A>O+DW4W{G z>0O4)r{yq>^tu8&vWx4LtRj9FhP_Uh-|~~f>^hkiu+sLNU;nV)(Lz2`WgEo60G#>Y zoshrnFKjxxR}AxM2A9Y4Z=Wc@-wMmGB6pqQ5`BIp#C6F0VtmWYFCsmRt-X5t*X=<2 zShs*0E16$=;&E|tc9rke!H%!&v2Q*(y>>un_I?f6r%$N7)5Dtr>Tn!a*eehGLaSap zmv4Ck;!=>_bor?_yS$!zH9K!bw)K)@mwKKzs&jIX|7yy$;`z=uZ32Ji1QqxjCn)?M zoWSwcFF#I5`NRpAiqimJnCpOp_jAR{j_CKkB&T7c7{(o_V*Z+efJo^uhNZJ3z z5vhP4NB9EIXTEaR3C=b0oiUCCseydz>+bLQ&G&!o*HS<8ntI;NeB1f=e#+a^?teP3 z%IDMX-2IuZg6Qw3Qfv9_r+huNWJ|CaPB;?@2-KF-xa$wsGp$%5$XB3+isJdLi8{^^cHr$wQZFI(>lq#Dc{Q zF#TGT&oBDw2XREw&(d4FoI|=3(%-iA8qjX7x%tvothd&syg$~ul$-Bb=aD~r5bu~2 z%x@J-0lihM*Dv8@bXv;0KBYGDUu9B=xe2{C^Iwa+^q&?&XUh8f7DJJK+uG%yhZ#DJ z0wJ#AKmct0X5jQf6zhq04@<#nhz?c(|{Hv z`td)`Qp7cVR+-M+waZ7eoB!E~wx-UxiEdu*nTc+$bY7CDSL}Mb{yB+m4RJ=Io0sQ& zL>tKeY(y`d%W}Oyo>ipV!+c#^-U9jAHPL(?PbMCl(_PuRlVjJia4wHi zZ1yWtYP`wbKZy1gT4R5m6&BF7d3m<8zqmZn zBJi#L z4Ut_v=2yJggB0wqr^?2zD}JFFjKThco0K?evmZTWH&)bYyvvE3==}Kyod5CrW&=sz7dpPKq+bi2$aRj;sSTxgwTU#n zG_G3;ol-}Ny9k}hN)zLT6Tx%G(Gn=UTh`v-tA#5^-61seHK5 z@zo@qD70KI=`BJlxIQklDWAXVLVNT1c_wr!FE5)+{g?CQRbA*zUcZ^prj@1XDTS8v z_JV{~@c0z1=J9nxr||W8OlX;r)ZT5Om3;lb5;~Q(AE8yXr1J79)L(C|>kF-^EyYcQ zPUH2hg*N5o-Gt8M@c^Oaync+(sr9Ay#tW_F@ufn0^X0QyXrqg$OO<>vyQoa<0b-t^q0{*KcrLV(#|@^7 zuKk5h$ zTA{PJ-Yaw}=hJziv-EhC#`mWT5l`mrYqxI|Up`uGs#jmb*GIOfAJ4U71}%>iz4pBI z+EePaCo_V=Oc6?Uq8`8 zEBN-M<$;Em*J@ckX?`Y&^6@;rL}*jKzityck;jh+t>DLJZF{C%XNq_{pMTjrvAyv6 za-mgx`c;HZ)#Fd5p7z$`PnuplOHXU`%4hQJ-Be6Z#*dF}g-+)4>mYO%U!FaMmh1OuOBb8lIxj5EBN|bF0@Q<{mAunD&PJNiSlWD`CSw`lk0S$HJn!;g^uU* zUu?eE-gtZUgwEpi+X$V;kGJ+hXYu9brPX|WYJ`@RlD41eLd&^cD71p>HA0(myob$C0juKSMvJxgqCqWHWxaP&u@F7RlL95w3^rV5n9R57h;9>=JDA= zYq(x3bUfEbgihr8j?l?mzY#ix>mm!O|8mZ&nnI`YcpIV9xb7x&Cf7ki%Qzp#2%W{_ zvxJW4>n}xU8DGAah0f&L<6WV%xYq8!a=txhiFhiH{}Nix{iA#l%}*NNUTX=h;`>Ky zq2qabjzY_M|NMkb_7dA?id z6kh(8&`Q4iz6q`3x@;2l$D8YhLTk8I3Z2NcTIgi1qlH%T{v-;m;d-mk@m!|~oyfIz z{VHloeEJ~brhIv6;~Ktv43<)V6olR$xc(q? zCf8+_(e$&pHWpgOm%mDAIoGj5E4WS)+FNh=r10%GRm9`@`gksM7LONSPSe-$`gMd> z@$Fl?elz*XI*~7r zAfZ+Kcrr!kEY9y`LYs0wuuEtKKfYWL+LY`2LVI(aEwr3ZU%P#2c)Z$bvA%hKO@xl; zaeJW?x$Y-)GS@?e&f@J)6FP;**9e`;+dnOIB47Tmgiht!|;UT(=Th z$(NU>(3!k{LxfJ|``b*RWqf-~5jvjp?3U09-d?uQi9D`YPt#A<<7XDnxxOKE7S|tzmT`U-+d%zG<(PNw6D9+LSMk=RzyF{wcJI>++kZf8Ja-7dn~GkDbs8J^rNfxQB?Ra{n1D zbRzeUV}(xUI$5jv_Ip@p?TxCxjub$oAcn#iier#tP+(AEh{sSJLu(BA{<)SIaNV@^ zDvQI)6-lE$-uyA_QQOgrn&(VtInB=gc>0TT?n7sruRdDO>aEk9lD6NEITtrs7HE9C z{bQ@feMobTFxkE^%rUY}~;U)v&~ z*eSEE<>g)t<6o=2yN_H~b!V5-&7KTdI_u2hcgdOUx@~U!Ipy@L{q4uNE%2$_r0|G+ zF*h1K2(IYoQK!`K?y5DPMz{soR6Dk^vgO=<4cna?xS{rYhb0>~cz*9XtI#8b$9L0B zUqS~b%ou$BvyoFlm!CJEoVa_)`@a#6r4HD{`8sX0TYjY zijAALV4$^U!~28w9@^#dAgl7GgfoE~6~lK}Ui7QdCF99xvug9aTXgqz80oe(Gsb`a z*v$if*GL}qZFZC58qc84)2se+m^~pR-F0{N&<*vjMn*g=*!5A*>9qqJZ}8Yw%=lIF zLPvLwUpVx{)m6pYn0}aGTyNW|!v*&ZDD$V0U?#^|wiN z=2{iKe}8ik>uwznKAo|1s{5cKeUBFozgE;c$52(Z{*U=L=Dj#L@w}a~e@xQtl!La< zizQ5+_{^er)wsKFPcQ3aFl^Y1vbNc0YK>(ZXo)f7|tL zVKL6C*7eP;8@6p`;D5VpP@UC%7F~AlUEk8Ab*ZiW4Q7>n)^o>|xo@i{%~%xgaw64d zx#C{0;I1(>Dpf20&|u%J)F+LT+uLQ=XHa@_FxU9MzX?cZF^{M)I}WsPcfZJu=Rqv^KNuU*H-q&+&)B&5>z zbqn@t%6;!VyHj2N7i*7C`I%g;LspMlO^4Tgm)K&$DQCyqM=o1T`Mvz?{MIF}t-dts z^D5)?A$J-~+udO$DDZfRrKJ-0p;N8>bhWl+qM?N-S-3V_1sWmTfB=o7L-Z(scH!R;hu@quLyB z{<-?>=**O~#1@9P*1YdBzp%~MJFiEUQC+Cq{L75NQ*U&$>z4BFynDCxk24C-O?tHR zvQzbh0Y~=KZrX8V_kbmZU-m1|x7C#Ikx>(VnAnuu-m7N+nXXsvzG%@y9$KN(jfGQu zZnhaxYMIxxirKFwwy$vUZNqiDTb=QF@a9R4A?>$zTI`i^#iK*yhbnOwD@Gn}bIR@I zg|F(~>wjfb47Z9Mf7kx(sE=FrS|1OxXxg&=QMGbKrHErS50o-`Xgt}meU8nX(rpJ7 zSX(@Od#PKCAMfx_Jkn#R&)9R|E_09*wCrUL*o z0f0~dz!d;E1OP+<0GR;5835oY05A;z@B{$%0ss#HfCKC(C0B8aLlmh^I0RUwHfN=o8W&ofW08kbH=mP-s1^`+E00sa+PXOR80I&!ENCg1y z0RS-oKzRUQ766b80MrElssjKe0D#E=z%Brw769-b0Eh+v761Sv0e}JkKm-5~2mt&5 z0PFyOdH}#10N^nIUt^)u@0Ki57pb7x67yxJo05kvqya0fO0DubsFb4q00RRpF z0EPg-GXNkQ09XnDqyPXb0e}twz$yS>IRM}c0E`9z5&?iU06<{?;57hn0RWf*0CWQY z-T?sX0f4yxz-0hn007Vw00;m8`T+n_0DuVqKuG|gKLBtS0FVO!HvoW}0KhT;AR7Rv z006850DJ&|8UR2i0N@G$@Bsj*2mqV{0KNhMzW@L$0Kgsq*a83q0RZ&@fE55hO#t8_ z0MH%)C=CFt1prC`06PGH9ss~O0Kgmo2mt{0003(MfB*nsB>>P502l}WH~;{i06-xC z;5z^i3IGfS0Gt4Tn*hK$0KgsqSOEa^0syK50A&DxQ~)3v0LTIW<^cfT001=ruowUs z0swdc0Am1vIsia00B{-rm`?Z z0Gk1TWB{NE01yNK`~m<%0Dx=&;3@!65CE7C0BisNi~)e70KiZHpf~_90RUJ901N;C zMgssf0Dv6;zy|=}Apr0R05}8y_yPdG0RT4uzykny006uK0A2$C?*M?M0Dv3-m;?Y6 z1ptZw00#kpsQ^G<0N@$`UH+}e0D$@cfE55>4gf3z0Ga~;rT~B|0PqL^s00A)1pqn& z0R8~L6ab(D0MHZwNCW_!0f5T@z;XbfBmgi907wS_rU3wl0e~d{z)S$(JOI!U0H^=} z>;VA20svb8fOr64768x;04NUtEC2w80|0&izq>0Ki26pbY?U0RUJJ0E7bocL9Kp0Kjnopd|pH1OSc!07d|S zBLFZ504M+eYzF`y0{}+=fUy9;E&!kp0MHWvfc@_d`#%EqzZ&enCG3AY*#FwF{~KZd zyTbk}VE;G4{wKixe}?^cf&D)L``-Zee<$pJI_$p@?7su-e_z=DW3d0DVE?DW{ttxx zF9iE<2>X8+_J0oS|25cuPuPD)*#Bv;|Ix7jpJ4wN!2UOc{XYczp9TAW2KIkA?7tuE z{}b5%d9eS!u>V_O|M$cG|Azhl2K%pp{hto|KO6Sn750Av?0*F8|0CG{K-m9nu>Z|r z|Hs4rUxocQh5fGw`(F_D{|)T_B-sBou>T)n|D9p~17QD)!v0@|{XY)--xBtJIqZKC z*#DKV|0QAnm9YQ)VE+%o{#(QT&xQTJ5BuK@_J0QK{~*}^!m$6|u>VzI|8KzlPlWyN z5Br}2`(F(9{~7Fm9PIxx*#BX$|M=-bnGE*71nj>#?0+rT{}9;!U$FmWVgIdQ|69ZU z8^Hbt!Tv9T{jU%EUkdhr7VQ5H*#GLV|M9T@KCu72VE=2t{y&8MPlf$&5Bpyp_P-45 z{|DIrX0ZPiVgGx={%?W(e+&D+0`~ta?0+BFe|y;f-mw3ZVgJv;{_leQ-vj%96ZYR0 z_P+w`|5(`naj^eaVE;G6{-1*VuL=8q5B9$_?0*dGe-qgMb+G^CVE;S8{;!4oPlo;P z0sCJU_J0EG|83a+DX{e-qgM z(XjtZVgG|+|HEPbFTwtwhW(er{y&HPzYF_+0ro!(_Ww2P{}|Z+r?CI)VgKvE{=b9$ z-v|5O1@`|X?0+NJe>2$s#<2e*#E(> z|8}td=VAXJ!~Q41{yV|`AA$Yv2>ZVT_P+q^|99B`AF%)1VgF~s{=b0z4~6|-2>ag# z_TLNk{}t^2McDt{u>TKW|A)Z-FNXd1fc>um`yUDW?*{v?hW*cg{f~wHKMVW67xv!* z_WvmCeU!*|7~Iai^Klkg8lc0{T~YZe;xL}Gwgrb$yI)S*<*(dd%GYe z=F8NfLvu=h_;BOkz=7#o!^3B|pE%*IGBqt&s6c^>>-zWaF}z8WXH|dy-syYuX1Avs zHoRUqc<^+GvuA5B89jQU^30j<6NV3eXZZd5wpU(W)6R72^rK`}md)!;o3{7Ac1`_j z`ErMsTej3Yym+zO*Oe6rL<8*A5LBFty{kbNz20Iuy~hZQI%DUAoM_=H!&}+|zShmrIxS4@^rt(fHjv zmnZAjzp3=&$M_R=b_;KI>lWzIqD8scg+G7x%Q$c#=E$yH zTcYpWvGuD{M`0?LKdF|J^Q+9qkB39ATp8tb;X;*)rAjquRiVPM=C5BLdZ1RfT0U=H z!g+gpleU#B&+2*nxW|VzYkrO%F=9w3E34BR{r&en>)Y47N!6-P=R`)PCVP8Voj+<+ z(q$Ky6(jH6vk$CW*L_6e#_cvFCYBtNkTB(J$Bw5Oy?s0I>YhEu?JHJX6PKQT;9qOxoPm-yLa1VX8QLqH;;0*w5(Xmz+mQGN5@hIMT>S0sb7E3<34?s_C0#^VA$2G zcJDTBJigl3x9!>)Gt5@bnRB(x~yULARA$Bud3Po6wi@A>m(!|vaIzBnq%x=!udbMJTU>T~bl z!P4U=PcA!d(xl8pjb@mwwe_ImJ9nO69~hW;t8?d~MG6)ATHwo<8s*EBIl98fXMnm@ ztIgkf_6$zjySMU;@#7bG9ywy!ux8DMdy|rGTReF1szP>llkM~8*KJX*+?D;o!Rs`) zZx@?5ZCZ;pvu8KkwP;cMy0vN<&YUpejN-+M362*puFvuCP{kS>uNsn(QE2**zX5=o0Kf(S zU@!o1762Fx0Gt5;h64cK0RS%mpc4R)1psUU0ImT5%K?Bb0Kj4ZU?l($0RW@|0J{Nz zUjV=?0H6T?&>8^f004Xi0L}vdEdhX40KgLf;5`5^2mrVR0GI&)h5$fe0N@k=P!9k& z1^`q60OkS!MF4<>06;MSpgaH&4*)y_0A2wA4FP~{06;VVPyzrL0{}Dy0IC51)d7Go z0H7BDkPHC00s!p*fExh7b^xFe0PqL^Xbu331pwRtfXe^?+yCDH015!$CjhV&0O$<> z3;+Pm0RV>pfVKcY7XZKs0Pq9=E&%{(0Khu{U_Aiv0|2lC0J;GHEdYRV0DuDk@C^Vc z2mp)(08{`#djMc50I(JS=nep^005K#z;pm$CIGMm0I&c6J_7&;0DxTpz#Raf4geqr z0CE6;j{v|G0N?@uPznI3006uO0Mr1$JOIER0H_QA90vf_001KZ04o5%9{}hJ08|A4 zA^`wz0ALgV-~s^L0|4p*0F42FL;xTG0O$w+yafRE000#MfOG($9{^Ai0JsYPWC8%@ z0DvU`U;qF(0sut;fcgMH9{}Je0B{um*a!gl0su1rfH?rbV*nry0C)xfoCW~e005x? zz*GR>Iso7d0IUN5LI8js0Kg{z;3WVM000aD05$^v#Q}hQ06;7NU<3e|001=rfYkuN z4glaJ0Pq|DxDNnC0RXiDfUW?*K>%Pf05Ayv&;S6|0KiTFAP@lP3;+}Y0KNbKWdHyl z0H75B&=UaI3jmA<0FD3vH35Jm0N?=tkPQIL2LQ?e0KovjZ2({z05BT>SOfsn0stle z051T5ivWNJ0ALINWB>qD0Dxrxz(fF`GyrfI0C)-j*a84S0DuhuumAvP1^|==08#(| zcK~2N08j}4@B;vb0RS-oz)%3-0{}1(00;*FP5=O=06+l%pg#c61OWIA0NexsHUI#F z0f4grz-R#A3;-}30Qe37cmV*N0Dvq2U=sjv4FFgU0BivO76Sk)0e}bqAQb@E4FLQC z0A>LI4FG`F06+%-;41)d9sp0B{KaNCN=g0RZa(fFA&W9RSb`0B8XKi~|510Dx}*KtTXt zBmkfS0NMipO96nj06=#DU;d00Pq?Jx0N^bEum=FB2mqu50Q~@fk^sP603Z_pFb4oE z0RRI4z!3l_3INmx0Qvv`M*)DV0Ki57z!w0R0RYSa03HJXaR9(G0N^wL&;|eq1puZ3 z0M`KkX8>Rw01yHI^Z)=p0RS%nfB*ns2mr7d04NRs>;nK|0RSTazytuO0RXH90CoTX zCjo%x0Kk0!APNAe4FGfn01g5GlL3H90DuMnum%8j0sw&kKxY7;5CHH604M_h_y7Q{ z0DztVz+M1gJOFS60H_H7Bmn>q0Dx=&U_Jm)4gd%S0B!>S(*S_k0Kg&upcViy0RVUb z09*tBJOBV=03ZVZm;wMS0{|uh0Hpzd!vMfj0KgUi2m%0X0DuJmKr;ZKEC7%K0JsAH z`vHJT008X&N!b5v*#Eb%|6gGLb722(!2YMh{?CB@_lEs12>X8#_P+=0|1;SCov{Di zVEJ- z2=+f3_WuFwzZLAi6YPHo?EeVZ|Ie`hV_^S-VE?Tpb{}*8Yonik+!v4R6{Vxyu zUlaD<6ZXF)?0;+6|9i0iJ7E8N!~U;?{T~ebzZ>>{IPAYG?Eih(|9-Il6=45Y!~Wwl zLoylc{}I@KCG7tr*#9`#|6Q>E*I@sr!v6P%{f~hCpAGvzAND^5_J17g|9;s26R`g- zu>Wsh|Hs4rFNFOMg#9lE`#%Zx{{`%SVc7rQu>Z-h|FN+DMzH@~VgHxI{`ZCbkB9v) z0{h5j z5bS>|*#89Be-qgMS+M^eu>U_{|A)Z-pN9S42m5ah`~MX7KNa@BD(rs}?Eebbe|y+} zci8`Su>U1t|EIwIpMw1#2>Wjg`@aVE{{ZZNCD{K>u>W^q|NUYAqhS9l!v4>M{VxUk z-x>CQ5A6R^*#CpD|8}td$6^25!v34V{$GXt{{Z`c9rk}R?0*>S{~g%>0bsL_Wu&>|5@1oPq6=;VE^T?|KYIzS+M_IVE_BT{#(HQ_k{hAg#Dif z`+pAhe;MrmbJ%}t*#Eh(|30w)rD6Ze!v1H%{ttuw9|Ze<9`-*G_P;3X|5w=m8nFLI zVgCof{%?l;4~G4(4Ew(T_TLirzai}ZZP@=;u>Vb9|Lem3UxEE!2m42$s z_OSnku>WUZ|0lryuZR6t!Tzs;{VxRj?*;o`0`|We?0*34|4rEcv9SMXu>YfB{~N*n z_k#Ve1^Yh~_J1wxe<&tf)AxjrSmIqY~$djc5t?H^-{SjtgIAxi@lLz*f52ZZ|{&NKi~TNr(qRF z3f7RVlZ#zfwVPuvheoV1Q`SfJhfW*gM-15e=#7{b^Aj0n*4#(UzJU;^;d8{I`te|M z{H)@C#lxa>EB{eHT>4FD6mj-&a+0-obnao}3(lRhe8VS3u|YCo6$}a%sThI{(8Trpcc6k^cUN>g)+2>963QDGtGcY(-79AC65gry2C&O=b`b39B@fJ!WVGkfFF%+f6PzK{{N$U<} zp;@_j45A$ChJIc-%2Vo;E1ypu+W|yf)()GN8RfCnUWxj`9(-cubo1KilL|r{CUr zD#r?oat90L_Cd7w8hI!pD@D_1`EMvstUs3bmhwvKl(WTlhHPmN?b+$%v36O$J@VKe z>!VD;^O)B3PtRG4VLk@a!1Nqr47UQ(a}uCI27f@|kD-?=zg(8rOK*E+A5_8Cs_4|s zT_&@|_v2ZH0zZ}-&DIn9Gm2CgnfohPWlQaUMkbAs?QayBf0&1OefEEC4DB%V!oc?T zc^L5BMcFkB_}-HY-w2c8yVEjfwlMVmSlt>JSjrx7&`ov6MGQsq{P{t#fvr1MzA^^Z z7dEgwmi~YKSl9CDo>Z0nn7G>Av719a4HaQ|srdvbs|ux$v*>wAy`o)w!eku-d}ZD6 zTl6-X2&8ecF418aLS#1hxi_}}jm*U_O6D9sSY|H{raEopIi9f(2;eujeX+{5e|ZYv zsK>r`fjF>*pKP>}O_-IQ(|b;Oj_vI9oE;cv!#?Pe7+6dUEY8M1&CJacF_F(=BF@s8 zsKbW8#S5doTZkVLnnL#l*nkY;wvO&jj&9gjWQP}}=iFVKo-+?ayCvy4uP|6(d==8=NNrtQoMh}j z2ODR8ba!-imtk<|v&C%A$A+M6DFd=uF+a)-7K5Zay0~_evHxt` zW!WG2e#P+0_TOKmi;*t!F*nZkRRhwD*^J9&NVD=xSJEkO09~Cl8)riUo%%(g8C>cH z|0-a(rBk2jhoo8mDq?u56K6V$G;5#f-#WTFbg55#eY54mbOq9E`phR)C(Y_J-H0?S zh~yE>NweuQ&(K;&Gw)@oqYGk-v(~B4bSIs70qCweai-l#v;Gu;?xUlNLi_9JV$dNv zx-fJUX|_I#L&uS3^UJjGK)S~=-EkDl^Osn(mXgKg+iOaxf>KjTRVJmRd{uLvYRq}+ z-IAv=%8w@hpXugtZzS9=*`A)e&^KZ@jWlCv$I?qo$Tt;d?l~P3(SvzsO*(~AjVSkp$Ky%IQ#%UM$&{wj z{HYG`{;8;+$)uGBDoOpy+Q-v0N=+$WzMtnSC{6jwbteCJqcoAy zWJl_s>F%y{ZeX;w3?lPT3WRgvZ^p3+Q86DiF)!lxti z;`QW|ri$sbrR|bZxtz9(4m?e6%Tq-;o@%P{G^GZ`DK)K0abun;OsJd%PnFb;oZ3;+ z_M@TgC$k+dmqy#0#-6r2N>eCJr8JS!WJ=R0&7|}Xd#Z0=@l)fL3K>2=5{kq)I&5HA zcuZI$nXQez0^cn3aAn`FRM+utOiYWYSp8``dz*QMb)>HC+(zq~A#wSxL*@vc5707dx%_6b0dq6y&ue?4`eP6D%$_J6A`Qy9=DEr@Moz zvyGF?)dBzMOoz{*nVGfZjHzMDY+)^t?Ae#q?b=@3VPZYaKT{_*YYDzZ^p8Xi6thI)~Ebl&+z4 zGo`7No}u(2rMD@4MCn^fvneh3n@_hCrG}JNrL-ZXZ78*&R7GhoN_{DfpfsM+X_PLe zbR(s^C^c$kX2E_;UvK}DejV~}r;qGvsU|`)yJL)zZ$bOnKZ#`i`oNpw$za&#Airj=Ub%dW?$Y#mfKt~T9JQp{g`fxPo4 z8WHo?isF$zxUz`f?2Hfv^imC#6MjmB#r#E6T==m+`#0EJ>S0&=j^?71qLF-3(f{Ov zy#LIX>i#K6+@$GZ*7Gzg>MINV_xzhu`?>RvTMV4MI5-6APVzs;HPnvqwW6?g`A}Re zAJ#wiC)UG|zr@9Lp0N}+rQA-3W@$1>&5lfAHJ7} zj|E@_0`R!6qL$X6n`k7TRJ;5O^W`sH&(bMpOyl!uy3+FZ!_P~r*vCx+*oG*5_Qx%F zNPrACTJTXoe6?qY54$y#TLeqNN&5VvPRsd^X3=#1w*7vlxL7};6|sH_(R}E~#ri3& z7Z>YSK@By~i>tcYxmn=rLykSvT^+pCj?Nuj#3ZFuEI;oedAI*e(xTl=YL|Y#8@CJs z;@FpZ#4TX>A(I=sa^f~6WfOc#r3xzv3!&i7t41tO;9W!2Z{@S`M3Va z$rt}EF7iE`yE?n{#3izTs7OB_O@P8p)z#4wx2+VaXy1@vKSfvEDYOac&%SUJ1dC@B z$zmSTC&(31;R^O?K81!C#Uf)tT)M+XhR5P`xJSU!1D22XK-V*$3(^aq7ro^%A^ z#}QVQUl$-=DUlH`lPQoWF~nog9&p$OgSJy&r{`$irst%+!Tcg+dM#2pG#eKKi{HaA z1+h{XD!${oD$3l0W-&3ac*6VioY)WPISLGHJPSiAhKX6YmWsL|$e)5C1bNpmti<4t z*dOZy;AHDV{QVIRjF9d~-}!~< zdP?LiN1hyMB2t#OqhLnP*a8_jKatlS={4xtl&65Uz__MRMh+WiLo77Q8-}3<26w~? zBY!c*`%vCxSzdjl2asMvx()gENDEWmUzaz2 zgq^LAtdbcyduT{SdK$x8(uGTB814${YEunaJ;JX54SOYxxyv<%vl^3Ef_ z55}WW?*+!$;1A96QZR0g@>ei^0pp2CJ7ZvZ8|9b=hEnCR94cU*kRB+<^AahRhCDf9 z$w-qa7KK<8#&;lZ0mj)d7MkVFM_E}#42BswqcMI9;~L5vhO{8`6vP5CegNa{l;@2! zk(EWP3&z=CL3wPMDvXUH8_94gD|2`CaFBJxC42{*Oxe2O(!aHVbSHtGHL{aL1qTrCxm0qk3II3ezBn69Nf{nh18kNK+NtP$g_{Rj{5hUL1o8 z<1Ft(wTzteI>S_q53P=MO#_R4z_@N17T48coVBIjo`~H-okJMd-2?5J0xcwmZYp;# zHeXm;E*-HLXf}-^aj-#ld!tA!UM&B7{@8l?+n;pr4--_|ID7rA47=u2vm z--7T(DcbsODkmE+T(Dqw3E4G#nM@^2vXqneKT$tRxBuF!A-sNND>0XO>oO(ko0ip? zf9=N4%L{M!XYJe^jc$FtZTTlHqukPej-}|jY#6ubBEufHta`qCw-+#34l9J!I) zF;ltD{O8`xlnSu>PXGGT=+@W2F!Ybg?7rE*{!(RE%YXf)>DJGC8SY>f@RNKh>s74f^w!LgmEu18sTf;ts#ylc!^PB9rQi`@7=E zCazDsq_|jq1~NNa$4=~VnZN((&l4+|nQp9PZHxA8Y5wzTEWi4S3|?PMHIeEIEmGa} z8;i@>f#G89@)G*-sMak}z-R!Rw9$ZQ{KrO+_VU0^(YmE*Hcy&g|GcSxV*ZRP^Yz;+ zpJx86zS#FQqCV?K3-f>) zJAJYIMB5swpU>>)TVM2FOg|-e`g%(*?h_(Vcv}>Bs{D?wxM25 zE_l+5{fRb29hPS5ZNI&$^5vtgq*M66>H|F^SyDzZPO9x+b>2U* zy^10V8cC*hb=$MC%bmYWs;|GS1%I=sexzog51zi{-{%aEU}OBErI_G9Qd63ac&>xP zpZ~BWtJ<34`pZXnKqbYs&+|n4Vx7wT#5L7_OkS2s^~G}oqP$rCrzkF-`;oQ}y!9Z; z>8E1(C)fDz?L$HFu<$6`fWYvG06csjWfS=K8)5nrBCVlzyy?tX(P`)H>y>6!{}DHFbxE_! z8+T^RzZ>zZ`RYbX*fV!Tg8>eS!}cv0+4Oy<1DB9K+v}!_D|mlsTrcJF ziL7zn##Q2M&c3s_yC>yd+_W-PEWIa}NeZ!^R4e63jN#3OUCj>OX}%@ayN|cWM@quu^z9-f- z`C?Wjs*-h|i?wD=Skz+QjV*mH)ejlvWdy}!pH;^=@O+6| zJ~P(U`Qg2BSZDM2*M0l;9s6!;^tcxV>ovHSP(9$)DC>#!PHdce^<#Kw*|xTy#*DTv zX;N4*c4e2W)4}}~)lRYvI$397$cryNi%a#-O1Qe=N^{uG^aBS7s;fMN7Zg(p> zJTp>pWZY8wYRc6Ej`Z+df7Q8YOo!GH8NaJr6sQ;_RtSIX+OBr@pP^0Xm@cw+7u> z)Ur{h9oni(Ub*|@>fVE?aUKTd-qlXZmfeVpXsY~ew6y>E6}5k4zgRUbyRP}&j7rh% z4F~%CI$cZEe1mI|P2YD~nR`#D_p9?zGq=$hGVA?4`y?e#2|sJnV?wpN!Id+I=@18{_N8G>g8r}kKGmq zIArfS;5h9{;=CVS?|iubpv8!DD{U(L@O^&r@x?o574Hf-#kBsNG$L(B?e|T(-MKqw z{*1)UgQjhInS6cLz_iQL(lU)sZE4=S{j}Y)qo@6N_+`3(lky+R?@36gkySb|x!)$2 z8poyw&3J$5@}?tew^ym#ym?IJGKYRQi+;JRcEQPI&nG{59u>ax#>b6S7CfAIG1F!3 zj@_9RevN8(eAw-^o2~>dS63<$Gbg@csM!ZO|&}_ zJJPM!?d83PD^BcvQgCpg24mJ;n&TT(^>jI#E|Jb>n|0dWWnIOguCngc4I8;F?9j99 zjmIY!9T>dQyNN97>8PFI`-<0oQN8ED*K@2P zWYGAB$*x7*7VmCTOtrqo*kaawHm8q#Z9jb4o)49Jwz*@OQo58Xt8ncaSvlKf1*?57 zwRv0A&i0-|#uy!}Q{vvY3NtQ$X})e)WGD041v-7MJL<_3%X@c@wrM$d=jk=~KQ8R( zW52FUp|rBrr%u1NsTI9)!3B$l&C9%Ow`_mBx!HE>Di)L7or~`cbtzQZHvDj5gD;8Y z_cVGTiZf4ra9^zgo6>?}?9nXM*^EU*Q zU3KwoyE)D8ZW{is@z~~Jy^VL(G1T}JYZTq-{%g76QXkW`=PS%T=<}-9@0Nuw`4w89 z*e7yl+vOUkl1WL|E2ghMcVPVaw`-dEdT;2nVR6{lkK4A?n(Tiz>tNNr!S#|=`+EhL z_X<*O-_f}J^%qHIU-#5WtyN&^8ESlT#Xth@c+b_7Anz%jge0#dF*@4h^ zA6|LB%sJW8=Z*32$o9kD-mciC@1x!R&nxzo+h$glt9sme_q^4-+dk{p z1g|?}Fl?js%*ZeuB z+m;zS=U%=4N#oEwIq-Ff1Bb`WJ6I?!bmPdvxFN{dqJ|`&No-4mI-=0by>sZzdN{0*)-vK(ab43cis3jWLT|> z>tCzeTwSmt_M&a$fy!1%zZHAOeZ0NlX4|)uoy)iT`u$AJ9#ulSngymr>ut zEY0nD-~al|Cg_JE_N?<~gCFy@|Gu@chti?poX-0!E!{jOOdX@xy>8&|u5;$59q7N- z!*ikGGQURa&bPSxU_p;AjaPp&GV4%d#HW74%o-&Ye4hPF)4XBfK8E|_A2l^D(%JCH zoVuYWA9tv5r1QP;Wlz05^Q~Cf+J$Xa#&uFw4om3!s=M0!a_XY%(~lhZ;NPm8P0QG! zM&64Xd#`w&ol!l+ulCU$<;x_QKPY(FC2))3sLN+F=hPecV5W5o-;(v))!lpOZJFiU z#w{ql@9C6M5$VQXmp5~WEuZ#l_U<{p#fST6eLnvze1)U?_s+v7H2k&XSgonnA8q_P z8ARonEZ7hhZrSEn_9yRq<=1B4f3?i%LG=Zt2Zr61dkj6u>7a{czmup|5VV8@%15 zZJRi+a_8qgY!Khf%;eLWO}0VpnhZF3-YL3#jrS(8ZEVXAc-DR9?x*{g6;=8D=vqZS zu-f-GXUp9>Xk>Nf*n@{&m2B;4CecTt~?9-KJg*tbBpsA=0zdwhuAvG?}Rjy?@u z4H=tJb8=jn0b?J|QO}s>71mMHbBAJv$Mq>r=>^X`*jRFJT9MKFJNvFJm$WV_dRNtv zyGz_#m$|G&v%nS|&5swX-Rt?3Ls=z^k{5K5{|>8J(`s+EjFqcOmi;h(S@8QH<1u%3 z-}_y(ZO=s)A1-qpdBLSXzjCVYV~VahzO!I*!?dTR8&1hyXfwV;Oi?HAV>^qk^)Vh& zIV*Gg=hXF{-ZJ0e_e^glJuT<=(xTq%`$yecRyumL$J=xJ({~+6TsHjYtHCwBE|z#) zBs`(Ou&!1H5pC-an>kD!@o4ela_ zs#f+>pRKnmj$7WoLidnor>=(|cYe_0;^D@v+nhdmzoq%Yo8?FQ&7AhVO#e)ox3bN} zww9MZf4|x$=IDm%%}(@6>Yvibw#^C`Wy8@|4=p;dV9B&{*9{}f9v)Gn*^QycWv2#K zpR(H_aao;1Tf?^P2x~o{`G(Ft@6H~vK)VEt-sMe~LX&)Bv z^GO}kZNQ5~D#It!Z}j%x_icFt;|G?OYsSx6*Y$<3$GfZVnxDG!)%9y|c;OCS2H#^0 z*FBCeFg|6%rl%zq&3afr@$SYNtq+-&%; zOGZm;FWU2AQ^bxNy_`NL^cu9WQRdTCRWpBWOzE`f`>Z!pk6(R$zGpk*MuFF}jZG@V z%_yLb_3(~qp??&s9I(YhZl4MfB%i9$QDZ>``cc`+bwj#dJ5$zHM-{fA{kn)H64o z?_T+Nw`uoGEqpzfw3+cuG3#jJke3&STL19BSf{)BA(xmDk9Mu?Xw~Rguv>cP_@@>8 z<;6EIufHwy{;y`^f&=RmD`C)a;r9Ef4*r+YLp(R1R@Auv^-yo+RL|-o3tTzB|IvZWV`uc?(2i9JE8L@w?|M$)11E+QhZ-3bD@uDk9eVe;ik2$(oRPi}f$WA64Yzt5`rPX<>sgaH%l!w999lkTn~>Z!?qc`dXUvxB|NA)iUGmh^^M2p&d;iyWz3+Wp>#V)^ zT6^ua*B5)&2JdLs#**%l-bcDMn-087jlt#B(6)Q7>OMIifKkZl!-}*=E z75-KJP?;;z@>es7x*u6N#lE{ZFL)tr~e?H=U+lKkIP8jN{(~D+I!^i$cd4wl@03Q*_jiWtXx5O@lcDHEInGZ~B zF*`JtDZMM-iMfDQst@I3&qcunBUoc{Y@;t(M%R!;(!1MyZJAllZj?e5!voFncN zxN#sacyQd}hQhYuOpwm8h0g$R>jLSY2lD@a3!*&;X>0rkbT|g&=ilZ-9w_%&AnkYn zDgn>|)5nKxmth9*CIPYo01VOO0sG_K_;5TP1LEP`9RTig{_le{Fg-MgUjlV{d-@P< zd-ztr2M}Ko(EpUf|2+r-bjPPJ^B>URz0beThX~LHrU3phApOe#D1hnX!?xRF5C}W( zJ%Mut;y^SJz;<{yJ{*tx02z4qkN)nRCf@DZ-K~wsz4XqT_}FmvCI(J-YvIFTT4@BF z)JDLEK5gQdW0D}BfR=Wt!HwieunSd)n zKgG5OxGCwU=V$x)0`E1zKE8gw5}T(YfFp=#LlZQxu|F8?=IQ;5e=BG~{h8!{)<5PR zK@Uj(-Zp~Y;VuDdK^P401^qD~MuQlr9GlN~gKcx@7@F8({Oy1ZsXGE)U4hp)egi&m zjL}6H<06jn4iVW5Lc0McD1m>n|3;vIg#jD)U4O~^cM1i}KO{Ivm>`n^<_??*0QR(k zX#iVKg9E*{`thlu16_eF{orZJO^H8+;6?ltfKTA30KCwj0tf~G3JUEEoFi~@boK(W z2%ak?Y=Z@I18l7Y?h?oV_7nr4mk#U;2H+k5F9F~L;C34DzYPHM07wCl4**{B*81S- z2VTa4##0E-Hah;smVa!3Tls^6>>ZsqPxkTnVJ%C3Ez~?|W-v4i*k{JqNrJPGna^lkPB&I99jL;u?T3-^J2;2jes0{jjD_6KN_0EPkd|AbCkW&D33bF2J+W~IC#ebH z@92J}Z>vAROBjD#$WaXD2n!U0g~5R1i?Cprkhl=c&ClP}S6B!pBm#4D^9}+2vd8~l zUpWDsb(oyM2?L-70N%e9_5ooYVE80JTLwUG3OJJjz-}P?DB%B3!Qd}sQ2}Y}Fx;(= z_V)wk(pyJH1Pc*?8~l!`OZ;Ttd=7%0zPDd?f*%cr(}I3ePD1!38v(xq>5%=m+1JMv z-#USZb{?=903HAw1_1Bh3g-a-RRGWcWX%yE$kiEtdJmA{7Z{G-KGK6y{24>{Jnq(z z_$hz>LIi!G{F(9-{4K%+Oe;XZS{MR$;3MElFdRzdPs%{)PyWA5A13na^zmKeKXi|q z2ZkVBe}zfG@{iG!_{l!+L<#9Z_L&6zQet2@h+z=^m2e>J%Hjkr@DK2Bczz}0Pw{?7 z$A`ZKpy3bjZ+Lzs<4^H^N5_ZnemjAq_yhbKo?prMQ@r2N@!<~uxcvwCH$1jN(XVT zIDrqML-V&z)JP$($6dL5_nlH=o^$qz5bYs9;r=L?h_dO5Dnl-x*)H<%Q*tC@OId8y z-72~qQeqT7@9h~CO{V01e9Z3Zzf7nJbvhVz|HE#bS637ly(n=9ZhauFU3{zLwZ1<& zulTP#0lK3`JhO(vZf0*@+N$4$9lc%P+>AIkVxYijIdI;SS@Y_KK#zUAs~!LIqVltx zPAgXEguM-yhD6Bx&z|*hr;^{Z>kjbot6*>PhpfCuWzrAskW_fAI(;cjoR#J{ajsB& z;Ty8Tw3>FicYeF~c8-g6eaza&!m6BQc=UDFp&6!rLDq9$5VTBzr}m$?c2A;QmW7(c z^oZj@1MeRhJ}zSXm;_R1H%s)<+!eyu*-5E%ncKydZyJ zk{>)%CapVa`*m`I_LNavAG(y69L^r7MqiRRJDe17p0=^xRxqbci1pBi7i#QhJmhXM zQI25ZUp*8Z+&w?qaCeks{M2X3Q(qZ*njT&eK5Dabk5`Lb&W*Ds`RQ$i{Hg`V&1~lu zc^pOjAHNu`xXm#Z%Ij~y*-M%sG*r32H1p=`bE#=#t;cb-&(p88q#1vZ@024tc3PqB z%gz3y{(`N8&u=&g?ilY3;SN==S8V(QoboNdWKJ_Ps)W^+g8x-{$b2zf=&3YIwov8q z{mHB&8lww6xr~c?kG<<34>oX&MlrYxSFe4(&?0(mu%)bqnkSBSNKbhL@7K`8 z*W&i=Z#NnwyCJ4+aqUr>PgJwP)KkVs2m4VmijyVTOmE-kP79M345iezkA$w8UQ<88 z)BJ9M?NL<`!_a{dtIju)@6XC8Mb8iWs*!k*Xr#Gm8aTYAZaxPwPQD|7>vNd_o84kmLDdj#W7M2+(3cgjHtwE65Bc;R9~KhxPHQ1` zQw%u0hm+33B!}KAiFLA3U-?SpyEALw%biwXudZE^GJO$hb!OrLkJWrkoo|3cXUy2S z#eoT^-9z|)+yDQz|Nk-V|B;peRPQ1DzxDrrQ2i&B&VkAu!v9$JB0s7 z+5h@A4=CRd{{L0}`GbTYy&?SHs{gEcER-&U|D)-vD4-#^(E5`v*2&l2IT-(?l+6df zW`aL^^%LFo@K4`z!886u-*)#Xp8mTBT9f%?N|^U;U8mW42J9#KK7RObhy3(xqyO@n zM7(UgOkx1=%Q;(NYgzyarnF}g_rQ1(XKF&gcsCwsO$k^Fz;DbaabL|Qae5X6jCbSV z&Rzn(0EFXZ;h&%M!{5TXdD{|!hW{l3v_inhV3aUw7#(nI64D1zb3APMdhr!`waB4UT&ID(JbHFihS-2ux8LkdDf}6o@;dXFG zxI5er9s-YmN5d1~sqhSV4!j6n46lG!!E50S@K$&yyc^yFAAnE5=im$Q75Ex_1CAu3 zB;q3CCz2qNB~m6*CDJA`A~GYgCbA*2Cvqk7B=RB(BZ?)8CrTtrCCVhqA}Sy%CMqMU zCTb*VC+Z;@CK@A}CYmE!B3dQ-Oav!J5Hk>S5sMIu5z7-R5~~uc6YnIpB(@>8CAKH_ zAr2r8A`T-?AxenNE%66NjgZnNqR_z zNTx^@NH$1tB*X|Lf)YW8U_!7UI1oYz5d;=thOkE1AzTq*h*(4#A`_8?$U)>GN)Tm; zazr(v8PSR8Li8Z|5JQMj#2jJ;v5p`kr6#2#Wg+DuT0~k-T1VPI+D_U{Izal2bb@r5bd7YKbb}O0#z4kHCPb!4 zrcY)>WI4wY>{k@ z3_*?}XCmh%=O-5;7a^A=*Cf{_HzPMEw;{J9wi;7!r$=N9rOCk;X_9q$Sb@X^-?m1|Y+b3CLt* z8ZsAIge*mtBRi1KkkiNoSnM0XNSxZ?**+$t#*+V%-IYs%3a+PwOl8lOy zijE3Hg{6|F(x$SdvZr#S@}UZ%3ZsgrN~X%7%A&eRRZUexRY%o8)j>5)HAA&PwM?}} zwN3@6CZ}b4b0%$^LB54w7 z(rB`1a%rk)YH8|d+GzS{hG<4<7HO7fKGTq)C{ffX78C|0f|5q*qIRN;Q6?yJlnu%j z<&N?~MWeD%1*jra391}bjjBO4p!!e)sAs5Gs3p`oY6C?~i=ySB<)y{YiqR_5s?%!H zn$ddF2GNGoM$jhECemimX3}1yEut-^t)Q)W^Q7~mi=~UFOQp-DE1)Z;E1@f+YolwY>!TZ{o1pv$1oV8~#?V9j91;LhO5;KLBX5X+Frkiw9`kjZe7A&;Sgp@E@| zVTj=w!vw~9!)FE@0|z57BbHH?QI%1j(U{SO(TmZKF@Q0IF_kfgF^{o;v5K*l zv5~Qhafor6agGteM9D+Z8fIE!B4b7}qnH_(nV8v_IhZlbvdqfN>dgAgCd`)1p3FYX ze#{}vnatVDdCaBE70flvjm&M#Jg>sVV^J6QWzhgqMoPO#3fF0ih$ zZm=@3aj;3V$+GFQ8M2wN*|LSR#j<6xWwYh56|t4Fm9bT^)v$H2^{|byEwXK}5wj!M z>DXD=dD;2dCD^g-^6Z-I#_VS7p6p)i5$uudiR{Vjnd~L(W$fkbRqS=_o$NjAL+r!s z)9fqk>+Cpo1P4C{h6BqX&7sJl%Aw7%lf#6=lEa3>mBWi8h$EUKo+E?fB1Z{FGev11B4&5T_WY1g9*gI;TFT5vK{KC1((4EN2R5DrXL75oa-H4QDN9 zC+8IB3g>4|Bo_x4FBd%a z#a+N%&fUP>%H7W0!QI6@#y!ow#J$G7!42o3=0Wjr@F?>b@)+@$@woGZ@I>$=@MQ30 z^W^Yc~z#_mVAR?eH zpe>*)U@TxS;4a`L5H1iY5G{}(kSkCiP$5tw&>+w*&?V38s;+wAxJ5R z5@Zq-5)=`X7gQD06f_bv7qk&{74#JJ6O0gy6^s{56U-IN6D$|37Hkvj6zmcl5*!m; z5?mEz5n>aP7g7{57BUyI6tWlc67mrW5(*QF7RnOJ6}l)?B2*z%EmSAeD%392Cp0az zBt$GsCQL2NAj~1mBg`u-EvzoADQqZgCTuHgC+sNfE*v5pE1WHyC)^<1DBLPMB>YTx zRCq#oQFu+5SOg(LC&DYjFQO^3Q^ZchRm4-oPb5SnUL;W@O(a*OK%_*ZOr%+)O=L)9 zSY%q{mB^yViU?ekL6l1rBZ?I@5w#Sx7j+f&67>-c5{(y47EKY&7QHB1C)yy|F4`?R zCOR#;Ai6BNF3KP#Bql8;E2b`{DP|;QB4#P(Ddr>QCl(==DwZvlBUU6b`N-9b!OKM75OWI2MNrp>COD0HWN@h!5lq`}gmaLMjm28!4 zlkAopkeriTkVIgSSV}A%RtPJC)yC>$jj+a8Gpse%4;zAw#KvOdvBlUjY&EtG+k@@H zj$+5KbJ#`fD)uuLE=4WHFC`+SD5WZ8DP<#NE9EW~AQdhZDU~3VA(bUnBvmR^C)F&~ zA=M?-Cp9cJAvGhlB(*NJAw?{WlxCCWl@^kgkXDw~mDZOwlD3m}ly;Z)kq(lMmd=pQ zk_lwOm@Nh4*LWLRXlWJF}-Wo%^ZWSnKZWc*}8WWr=3WKv~v zWb$N6WXff#Wol(QWx8Z~Wcp-Y$t=pO$b6O|lf}r2$zo;YWwm8@%G%1>%eu>Y$p*=W z%SOw_%NEEM$(GC3$+pUN$qvXa$S%un$in4Natv~8avXAsa{6+Xa@KOra-MQNa`8N3>`7!x9`6YRT0+|Ax0>6T^0`S>P1yu!O1rr5x1serN z1uq33g%pJ}g>r=og*t@>g>HpDg=vLX3Tp~*MPfxVMGi$xMSVp>MH59kMMuRD#c0J; z#UjO0#WKZC#UaHB#bw16#Wh8Q5~UKalB|-vlD5)LB_kzsC2J*nC08Xsr2wT!r8K1+ zr4prDrFNxGr5>drrD3Hpr75LpC7cpmnM;{p8KW$sj8#@w)>bxFwpI304p)v;j#o}m z&QQ)$&Q&f@E>W&fu2ybPZdUGA9#fuCUQk|AURNeoVNhXG;ZYG%5mS*?F;X#8u~l(a zaaZwC30Fx}DOM>}sa5G#8B&>2nNe9#Sy91vT~)=Y!quqN=+s!$c+^DHb=CdUgVaOR!__0y6Vx-*v(+!Em#J5%*QhtBx2kul_o%O^BQ%g2C=EIdE)9MS z5e=+{tcJFRwT82Xt45ectVW_nfkvH1qeinvn?}1vr^c|xsK%7WoW_y{PJ>dDT2oO| zRa0G4Thm6+hZe6EMoUafT1!() zS4&^ZPRmitUCT!+Q7c2MNUKz0@QEOCdLTf>5P3yB3QkznnPMb-aS6fzFURzaL zQ`<({RohEDOgln5Q@c#NR=ZKVS-VSnPJ2mvMfq!XzVualsYtdpUWt#eVQMyFk;OJ_i5OlMkWS%*v)rOTs>(G}8_)m7A0)-}(Nopa)YI29 z(lgUD*R#=c)$`Mf*GtnY&@0v}(<|3&)N9u3)Em|t)%&csu7}X4(`V2Z)0fuQ);H8Q z*SFMn)DP2-)Q{Fr(=XC5*RRlT(C^USzCHk+=fQY;hX99vq?Pel0_Nl^j5!h_4#4)S zHh-M)`Stf|f07^Q=(~LZ0rwFAn*ulx zz#0IS1wb4CYANOyUvXm%jUx*sSurm1wV#s1IOtnvVax(FHS^+#%AQg>I&9VqMb6xt z;J)LToS8bJbg|Q+DoYYoU&qE2tH#fdi?>lxi1@QLX(98Ep;QDKdKCL^z6;-Tb7S!m ziCqB`rH3@N!T#}v6rIJ3ZqoB_I_9#{G&$HN0;y$VLdPJmBopROZ5~b&X;W zUj49dj_5BgYxBZ5=_7B(uF~7dUfY=0^_u^zyePOmh0{>|Kd- z&t7-iLwTDif2S>%-{i*b+xJf0^$nc2{(AU`i=N%_oXnvV2Vxqu_ecBZ%0)0ryZ05& zf5|*aiK045>u+c}&_FVAPDJzr)wzrhKDp*&QI`x7GDyjyy7oyf1*=x!uzMeo@9ggu zisH28UAX+Be_2iG$W1oZP!kG;>XT zV(%s;zwaMlA$w3_zv1{GY43d(@%t@zs;PU`<ES$#K;Va_Pq)9? z$G>m=;FDFgdiLu(ijCb2-zwF8OkcdF&o#lkXL|1!#9t_U?`B@OVK3$rLx)^qtmD0N zzDHhv_3bgCYCv&m>ef?uWe!F zdhJIh>#@UfOMZ^-?_YKqv>uGzn_h;}KIkfN;^yV(5y_WY5%b6LPraIYmAvn3`oNOy z0NL0XD}&J+Gs8-7c%b#2ahf0oX%}0QsEjl9ST)l)dOw$4{rn+WXTv7bj z_I6^Qv5KI`1eIBR-q8=Si_UcAt~L>`eFI_ar=_&$!hA+xj$>52h^4L$fnJlqxRu(!M?$G&OgF+vPZlkxxVA)3bgC$QXKq;mxx+Zmh%kEYjt~*E zh>J0-?F(yM%Cae4*A4Llb22yHXDJwslO^8xc*j2fRjhV56|d=3qn*(A`MkhMO81YwI>CalKW`(7aG`y2&k@{6qQM`ktoa^lV+PZ^7<52)=A|4LQOi z;8ObBAkMA4y6w0FgYeafrx!)PDBx>22WjR?Ul-$E(6>ct#~qhFx&G?-=% zF&@CFMC{>k*R@xi{CFY$daU7NHyznp?aY%c7EgPVyj8kHgzxNBtjFvW>pygbo9D@q zFZBng$d(oLoO0%FF+c6sNuobX;oDL?<$fucft~zo;F@w@mA>M>&-*6WdaTyknxyJ| zTLd_G$wZRw>PJf-?4)Zyb?4QNJ4%dSX7BIXH($Tw&YtoV)3hD-x*~^FSp}B!>bc@R zpgvak>=A$Ma(bFMWtYY2Hj`Y~;>jyzhy6OwpRX+@_4Q4-Q3~7ykaRr0=@kh%jaAdK zrK-ZroZb6^>V$@IVDS6RQPwG#S$H?GS}>K*heuuqMudq1p&tE(6MHV(< zSJ`~(J#AavYRui&`A0(Q$SeDw6|v|Hgr^3u6CIMhf8Jq(PH5URM)xXt4(YwcX!RvA zpSaLt3wtm>lGR}Pi*d;%wL%^#p)o-4RA@&08( zzlP_z9qGYiG-A80LPJar%PQNM@XHj~amuKlnObdwX9^l&iSjz4qH@$ovP=#(u7A;_ zDPIfykm)Ak_n1e$NuT?^Tv^RP?PsyI7C90Q_nN>x>P4q5;hB6j(O3I>+-v`G@KR!A zRd2f^71@%n^q!P?BiGEiEq&nPzS&RV7CWEZ<}7vG$o^mx_WGi^wM5Up^H$}~d*%;w zNbZRG6ywSm9=r0vawKC#s!&Tl?Ob0!>-4QVre8F9-)X7;)!5Ru`|du&8wzP={sUFV z;vX-fMn+N-JHiX!&vQ(kG4cyYFFIkAbusPB$0_gY;_e1TyN^c8zL+B)&AO@U0l#x# z@y&H}OBn}bUi0FMf{BaP@8au@FFN18a*JKL>EO7`TH1(@*wrEf9URH;PSrqw)$Ob7b0UzI&i4Sglw> z(LgVHx7J|INE=PPPYIhc`Lnn6d6hk*hUQf6d*Bz;4`|mlx*T$*5$}E$S)UZ-_u8q0 za&Gked->F{-3Lyl4!(O~9(&vETmkum*Du(UD|QR>$DO`r-XxdV%&Ve0ZKTUgs{H!A zZ`=IRv+ndyfBEpm6kXP8LtcoQAiH|z%AG#cO1i~`ruw?lU1w4 zwNxjQ_Jga|O%!}Dnte0+vur!|w6wh!$g%6w$&aS)#tHdGygTvyDru{J5SE|&!*PCQ zdBNn@vu7%0W#8YAVyXxhQ+yeO@icf^`YM@-d4+4qNk!>JVoB)7;uUiPgi6cZ`AE&WW!&v_jr*F?P@}9r}hFxlp+@wFAY)a%LO-k!b%AR&| zIC83IXZ+p=x7M%URSWfO(cDXvw#Qidsmrv#(uj?P8}~bMWNR_6lv%BZt#|$jY@9|n znbgvyfZ$lc#OH%rvSiP&x>4G94^nvxBaQvDf!wQ4UJ1|CtU4F6iu=k8g zx>}!$?phqVU~S@m=kuKQh|0kJyT|fBSRgE;tD26=+dN=uTr6wPj;`t0Utcl)@s`Sk zohq0SBJ)F0>aK>Vf)=mCE}Pj7v6v>=^$&-7Gw40INLV@Y1SNy3l}uf%DYLloYrEkT2KLu((35;+JcoI))T^C(Q)|!qty2Qu zIO|i1a!a*IC@k5#T+{03K9~h!ScSt7qA+ZDXNH|dM}?~P1NMb*O{;L zB&LvIqTjYAxFv_zafo|2XY3KzER@#P`xG-AgwaN zUJLcCGeKl^qz9K=t;7{rF5NA>Fe4;!>x#3^p;;c7>x3J!o#u|^*n}nNxXAe+?u?M+ z3Kq_c4jGR#pORxUHN)F{H2AtQeIo8pnA z^})5dC!LY&9TQ)jrN)z2Z;fb+yvcHVDahtxRolK~@v(MaYA@X4v_W)NeJjcmH)AM8 zervwB#&*BtaN?Bjp|ZzrDtz55V)s8MkYC!V(dB`Hdy}K*xeCWUQ~JWJKdyXiBl^-d z5~XE2RNZAvp2<>AGh8`zxSE1$-Rzmw$nf~f1_5m=%7_gL-f3jDa->g?B(rJZJe%G^zNqH376%TilHdakJwj+CW@D&4$0pV z4@!th(E5~NNc7jcP~&-3^7EWJ!lY*m^ltC=4Wbo6w%)hzO!;u(c%+}B2}3GfnBHnh}3}`x=U?32P?eKWP>6;hJdW4tuyTQfzHiNnL^GD%FWy6?0Sl9wfU~K7B;_M_SY z{i6{kyR1)^yXcabCG^n{eZd_Oj&i<*nk|sGN1~S(!gVhqHmYi~U7UGbRwj0F3)n|9 z3U}WwG|__TcB1*(sH7+dHcS+YTb{urxR@ds1=#6~-@2PUMD0$;1$?t-ldyL|uz&l; zK=qKEgPa%60(|1$Jm%X$jrmU>&R>TM%|+Y4z1{DqGeLSH_fiAqb!H%Nvi>nVDPWbv z=!v?jpkE>E*kIJ`LX<`RZXdnXCoA3)Wrl*Q9r=H?o|IL{jM6l9M28JbDczzYrZEj{ zxIyzt(sZ(HJS_E1EO)l`4tJ9&n1yU-nl#!or-6&Sn4}GdV3jwXKA;|b-|fMb(nq#- zul?SPWcZ!V!}9IOi`PEGPHBA^7JPJ)v<5>Vu|kxB43BMi{gPjmURbGo+>`lXFq0EU;zX?$C-3J=?8Om^ zjIakMxJih$=#c#{Z5oHH`lg3M=S{SVGO*+G5tbz{U&G$qouRtYaMKvqXf=1;Q+7XvT0Nh*B! z>5I!n^fEJ%ez&4F_Q76p_uj>o3$&whKD1w>%g&16g7weM#C;4pM|)Pv5yqP((T3wK zC}%pBE)t#H5ItIbsX}zIQ^fW1iv!{-QYG`6*LpKr4xE@1zcg5C@sjFzH^mb+HhVa6 z23gogmHhF8R#y*CSWS;N9eBr^I31E=M%rGz)K+}E|JK{5VNLuqBKk~sCzd?1>qllQ zZrt<#V7oB65_;~@6RI6Am6Z}kc(Cz_Z0tfApUIdWhr^GqDD*-tk_W=e0Z{uHm{HPacIU$7z4;7Rxkl zv%VGAKe2~OWafyMd7aufGL%mHzoZDd=SzkM#Dr%|UoG)VE)$o&rxtR!^)i$w z*mdK~jfC*iU8A9Kp|N2^sTmcYF0C2tnecH;qd9i*MSLXo*n=4=xwu;mXAP=uW|pZ* zEeThcoXf4q0~UpzpGI>V^CewVJa+cENaXVYE1|bX(^Itid1|JQw#*gWbelQo_^Rz9 z`jgsp-x&w(q6^(LJ3`%}wZ^*1-zQ_X0UT-GBVc_ay;p2flq=?8H$c85MijWNC`4D}$s zT$h$*clrxX+33|@%Jq~3xXY@UYhU<}8~S{?qsFEm;v{tB!-2T`lt#xs9qzslB;}7! z7e&$6rs~iJmIlUMz2|?Lawd}gL4mEX$pS?HP*@#bpvL=tp z?Ant;E3d#J;IN1@{UI>xPe~1*FTr(^am6k=lSIx5V$VhcJvp-9j$;db#r`6<_i;Q@ z;hxwz)4#yebN9iLV*uv*@?GV)N4IzLy7$G;R5@upuYKG|8?AJJ;3htm#^*%pQ#+VuVuhWm<>JwFT+i}TeZ-`> z#av+fr7k4R-r0L%A2G+!QvKS6MICLr1JakY4V8(bZHw(&PB;2)h04nF~plW~5&O!SI1#`&u#S1ELA^>uV3$On~c>S>8lb&s$@%5*>U}KTW7`@|m1U#~x3Uq^}e6#u`a5nx#}18~Kw;`X}6U zW4JbQxq$mIj~B~2W9I4O_8dDGlS+S6bKu()h4ACz+$o{GcdraJT4cW*vwYI-;_tR# zOnEE}e)U#Cso>}_M)#V@THSZN4*Pm%j!C_<2>jqjYF@xzWV!SCNVA<&%`AtN#~H7O z@v8m45~J{*H}$;(R}QGh+(MRwRqQUhDf{F>gmRYHi-RQQH1>{ui?J@cbLhhi2XE#& zvySr>a3=K$y4TH@7{)}5)be2@EDtL72kzy}>JQ(YOnsl|=1BwFZ62k$GxRw(dV6(7q+;mCgPkYGN=9as05eq@x3IbD+zAg_u+CY zS>lCKrsO5k45&;8mSdlTY|aT5=pAr*QyTVQ?-f~Gw>FDde&MtFqkhCOyyO?2nK~M1 zcDW9F-7WiA-b%j|Adgxw>=OS=_0X}T z!)s|D9qir)S*;xzJurrCm1Zu`_4_Dg@#ahQm*HrpN8t%e`^NY79o)cC&(SzTbkxOiyVzt zuip6r+!LE48OL|izdbH_&$Fj@QfBTuEr@;-F=3`u~s_=92 z{U1kk&t*@oVQbk!FXwWmMm&Dz?Sg(y3xr&2c`JW zll;^tqLjQ1`)4Vr9FE=K3X*@i^M2Ly*H*i)SI0JLRF={3C*DzV`BGK$uDbAGn$8Z^ zuSdLyDH@Y2O_GZ*x*XKjFXE3UK2WD>rxBPntb4TACyIMwf^_Mgx3_Y!Lx6u%a}Xjl zF@E_Czy6@sx)dcYKM&je#_PyQj3!o-mwUh%c0p@~*uk(fuSck2u(_tOAt_yp_(jOs z-gA@r&c6MQZA@Hlb9YbS2KoF{J%nv~qgx(?^W$Ea+J_Bjwdqcwx{^qCDWzFYI-IfC5Z>k$zrx%wvEqNS2g-saSuXsnM>p-Y1) zt)W}LMC?pcI-hK99+T=Tx|gSJ+R5RJwC?I}Xl6^7OZI-e=NkLfvixDy&|ebQ3w&w^ z3r(qVTi;2dx2neWF?8s+Cpg<> zqUeTBm|JI(C?A?sRG+Q>Xd!AJd03?;Kh$aB>lL;`Xq_WNgP%n*SUEl(6bfu`k2SrP zL7T3$fT+2Dva915YX7jP5aX^yugt!}isSvF8U0q*9CVY1sY4Fv2wtkr>^v60Dp3vd zW^8y7q;{t%KU~qtqU@5sOI(VKW?TXRwEw_2Ez)nbOAtUpnZR+DIV|YahK1U*py^f*`)Fr%8>%5> zox|*${G)Y~Lp>=qcPMzKc71DarhP+ELSe0Z9jiy8X?h+gapfg^Dj@4s`k?Rcs+`Yb$*=FQ-1y`8}_oK=^)1jZUIIHNx6(Y>pp5$NBj z4moS7c)h4X=;)xa{R6YJA?a4LObx~FNQn0>i<3Njt;h}^z1Ez%OQT*sA15e}G>&L{ z<|}o_O|bYJX3fCrqSZlMuk#{R&kg6JQ~H$t%cie~0)iUBp)~rTf7SeWd>KDC*7wqdfcPDg z8I8XBR_CeE%FhGZfs36-#LnW*&Q6h+X;;-HKRg;g=gF>X@Q5h9eXTI^!zG;y%n>?< z?>hIxP-$b$uCWL3XP~wM58&Sly1>78FcaYBBXjfJXuJoweka(&&js4A5Ct4M!UOcQ zBoNL!wSyQ6|F2@&Dw@svX#T75e#ejg56k;qI@`m+{Tt3cj?P&8&(^&g+j)QG{~kXG zhz{KE7vw7qh|o1Qw>S5240Lrd1im=C%4JJYZL&b${jy3V(D9P@ zx;ndhf;Z|x@nfG}aTk@*I1R$VB4Eiivj`Nx2MsQhV9 z{K%iKpO1f_YY_06`#)q3&;gR459+bK{L!GErd#Ce`);p1;H!atfq&{92zQ5V_7BB`_>lcUvuxH4 zyxV_^{O|VJT98nLZ5Xn@7ASwaeUw1{-k;=$x_Se*?fr}5{cfKY&_3XGOW(B+23=Ao zx7Y`09)Un7=jrbWRm1Q6+Z|B<5p(IE?UTMm{=XExnG|I2{EGznkp5a=dQkm;w?)3G zV^C0-U!cpsNe9v&mPe4kz5Ymn88%J*VIL!XBSRN_2jb@W_X`8J83>ZEl~0Jjy?npd z|DWam8`U>cg5>A_L4Vp)KlI;H|G#I$B+v->jOE`S$o{axU+WLq-+zmIK$5mQa2xW! z$pobTBxoO~d}9g->3y&NTjc-H-!#O@+tc~iniKK@$&Uf`|DGQ(tC0RuX+P}qcm2Pc z>2C&taR8LrUtmbS*5!Y;PvsW*fM^R~t9sCPJN-j94atuI`~rO(e>IeY^6yacYyF`5M|=85{(ly&>){97guPX#t?uvj`495_ zx5(ejf8d{L9w8M-zSeK-3+dncclnzmdno^tpnlM}s^uynzx%+ex1;x-5Fe-CzK0CpG3@pQZmpnP85Mh|rj3e5Ymqtq*oGiZ>}G>NCKDmn*{Fg z3=9gkzz=6!Btb29d*bJgNnk`sehe5Nvd>8%gZMfI(KEKm$IoZ9EiCpL>R4Lnn?u(4 zfvEr|-48Ep5{yqv%eATB_Wp7^eM{6$=ikZ)P;PVn2{Jqs2n**bHC@|Kp&#*?GE%1!5%(9=LQS_{`BSt1w#!7 z^!}-TZ~)VX`adw*_x2wG(ksF8_|a!=cCSF&`!VYZf&mL+KeQ%Pt{;AUZNd-1HrZey zzCZj>qImoV{gXjn$bK+zodX8e1L*w(i9vz%NstaD1@&*-ARWqo62O4(AJ8D9*fu&C z3=;+&+wGGAgyVIP0_m#1iLV6G^+7t+|Kj80tCSWVD9fy87%bg=&;6#B0c2E(9;p!ZMd|IYr9nC74iE}7KPZR) zjG^}70Ioxz!SaLZH$-;_>FHbO`1%XceL;HV7COFuLiA9O-m-;`e}_Z#NRZwO(toFQ z`nLBMkkQSt6M+A5OymKrtAOJheBH!9Q2PEL9qM0!@uD6u3Ju+ysr=}hfM8&j6&UW1 zpTPVG{@&VvDIP)Yf3^O!fayd13n=BgnBm{hq5At4q(k-B%hk)%1rqWr3^fdp_NVq0 z1Fpm5Zz~^2%zs_Kty6el4B`qSy!d{lD-ebT*HNJSZ7)AbkRBsVct1jPNIzMSE(PlU z*@lOVkg)=azpZ>AIS@_<#~F~{Mbh(^vo2sj7~*sYcvS#)*fQhY>{-A?<{xz(67~xW z<^L+U?&S}T50XG$h~5Iyq4LGk@%Dk}!%%!Me~#Y=J^p`OE5j${0IoA_Z(or7Lm=H0 zOQ=7A|J-`;B7b^Xp!nPD56R!&K7We5#pCd|^1-i28UD5@L-PM*UjuL*ObgWSm!-Q! zkL}KUFg{d1Q2T6e4_Nszv6P#;8C+}QkMijWkf7?{ZR@`1+Z zkbD@p&IsiX(hU-`eS8P$50%gF^hbk&w(Ae2FAUP@!1P<7{7C{vgOvCO4Cy}!#`k9< z%>R>sI9vNSXnxlV%HMn$0t=e>*%P>qw>9W*DQbc1guiPa<{%wvA3;F>Mws#wW&(Kk z=E~BKLCyCdU=FsGm5?@Mcu>w2POorhk<2A7hrYqr_fMoeCgxE0G3dh?;a@iAMf87a2QiAo9_2~F8bu;lfkMUxB{{~&ZG1qX6tRNM6{s(Tz2|qz3igUTY#Hr-9rPvU9X>fE!>bHn5+yym4 z_v-M9uY5culzD|VTq#6?NMa{L8N*iT*6>|t0^mh>6OM!@y!+dSa3_L@ z7qm1sasLZwII({W53G4A6>bC`bZLW=WxDClX!AY$F znHUm}hby(3Gt(6mWsa9rqp;MV_@pT4%kT(pSPDE3h`y$Ri*&fV91CV+HY7M`DUhlT?@)92n^1hYzllHKf@>%sBSQM=k;0t= zIH$#5G~t5(T4F6r^b~p00)MS|=ueubLeW+{mBnpZ{!tQ0MjGW7wrT#G)aK9r1ZtFC z(5Cq>2i}GLCx47ShZ>L}=^-)k=$PR@NNr*We=rJ6O-S416w=h#)R;(y=QSeXF$fzn z0e0A6nihIw>In&M7HbM%jSMpRYYZbZmrkKO_Z6R*+mE1wumSJeU_!Y{*P2%OFd018A55Rh^ls zK~z{6X^>!PP8tNjx3r{zmlELSX30Y?D_ja`x;OxEqTpfbE>;?;zx!RhU z2Ko3nnhKQJc?Q|~cm#QPdHRYkwP;!F>|~k%r9LjUCPM*@M|6-lrG}52 zl7Xf|8VmV&piw}>f%*V-h14Gsp`ZYl{|W@`q@<`kMS=@`K*k?zn$dxBR4MY2svPA(nD!aU=sXQkexiz~ zjiShRFa`2Z#@Ix**gQ6e662u{(rgawIcy$ec?5?*Wsqmnt8MRt%3>_87BQJzvkYIGT+he}YDlxnOUnm9S8}5iJYWz@a41UILNYukgampd zA44{gELDauI*-aIJt%?=aM&XZY$6*_7fQ$`iSkg6^Av{cA$gF6azJ4tK?ce=fPoH= z#;7u6i$@ue0y!!AXqT}A3JQcBBzj}XAPmWHC>eyYs63P*4DtlhLAsO*l1IU}qsm!O zPU%1yl0mX8s1I#4hU}t*$~cf1j4osJ0iZEt8`%Omsy@mGl(z%h*ar3ml~J;cf7mbD ze+~*3k0gjmBo9{#Mj_7w<2<0KoZ3i`fl?_*6h-AwhIE-SD4}#I9VkcJB(x(z4(Wmp zlIKAYa+0x4^RNdTl_3o2pbgc9{E#9+2PhAf0Yz5O9+gcZ5eEtKNRRRlN{|j!1{l(z ze1SZw2l+w!4IeJ`;*%1i^bsOvGc*!?1Guw`>tHu`4^J=eAwzw9{rm$0hYb%24TCG& zsOXs3xcG#`q~tO1v|n0!MrPL7Yu9hwymkA|-Fx>RJgj_FRsHzM(`V0XUevyP_4>`* zcXjVSe60WU`ODXD-+wgxY-}P}QqnTAa`Fm_O06(y-9}l3t=d+tU3>Ko9W^?2?$Whe zce013R!?nuucND{->Y{Y13^b^`t=_$a1aN*v7BiV3o_yo!o`)NGG@b5I0=+Q($ra# zU;)n}(F{dRxC#Ub6nMZP0R^5#f&%qy5m3??5()aokbnZuB1zCUh6I!Z3OwMDfCA3~ zHMmAWmB6$L6nI786@ga-UJ>d899{n?01k;z02~rf;1!`h1*i`UgDz0u6@ga-UJ-b} zLDv`(P^b@Z&^3kx6nL;tZ&IKDPNKm{Wq=1tl2S5I3`t4`SV+K=z(YCUkfaa@Ns8zR zv?own5O`4N337l#l9B-&67ZlW1Lc52LI(p1e_JrihSU}+Mcn{AP?Bs5>TF1DL5&Rw zcoKLh2OLscsGAL`E!5411U%@;KzUD~JwXm|NNu5RHYDId4{)d(c#wmQg?3&0v^g`fXc9_0we^HVWDWjJOv<>gFYlFz@#Bb0VWLzcoy(b z4*HNlQvr6+!7@N)fD($pLkG(Ml~Dv$1*lH}>H{hRlu!g7%4LAcC_;S-P#;|Vf<7eR z6@iCx(1!%|DL{R2VGR0^fL8<_%0V9z)CU`c9C^aRBN2GYDc})AuwjQDvQ>q0$SMG@ z0K5Y5u+d$Fg2!T`20#Le8UsA&LjtM_R29mB2YngPhlIKoS_IvOB1*8@qJ}^MiW&tx z!G>}+P*tF+P!7BT@Cv{y08a%Tx|Iq(t1SuuB%ml5z=J*{psGMsp&WS7hq{3Rj~W0Q zG=vTSDiCZCup}g7z=5)i0V5#+WdUVDIf_AZfJ7S%80fJ zv!QH~HB*3KrmjYZ0aF7Q*NPq(m6zZlLK((H}1Z6>kP?KN} zBN$++YakSCz=3B059NRX4#NRTAQ5^%ArT~?kO)1XdLRd3XF&p-4LIHwS#2Rs|1!v-997VuCG7~s@pfHVnuP`5NBDX3c-k`&mMhB~C6 zZot`qvjGPl^dJEaJorg%&|B~iGc$4r5>TomV5)@z5*QM25^&%l0R0+4_L4)U77Ljnpo@MwfV0t)sOz&;8A8fEkVkU?RE1Qc*Rz)=%{mjWJ= z3<>g(fP#I{*90CCP_Pd?3G$GD0uJ(;z(WEGIPfq@!#PP_UO}N%t2S+vmDy}Hwf61R z)ipFab?VZkdv}u5($dz}(b3oM)vHe*BO?-0H)Tq&;LqbAB!^5MZqNC&D5)u*Z-^xpLL2HEW8B)~(yPanq)) zTeolDv7@+n&z^nz_U}J*=dBL5&z?W8t$q3O_3L-<-oO9wp}zjhm#<%c{P_8^vC+YW^rjxaj4*)b zpWt@34XLLcPKL&$>MIej-Yh(r8DRk5O4tze^ItfR7NWHwq9PI_Qqb?9Z3uYIiTWmu zgx}4=-NG9-)^h=>S>yZD3+EK6gW3AfGRCpl^Gn;eiu8$1{YUu;lcof|OK#>1`B z)M&VgPx-@DVs3_qM;nDl2Zf*)Wx#h8s0GxcX;cFc7m|W7_^yBmv^F$1B^_M&H-?!4 z{#!QkqzM8gX6tr={+*UCro7f{4hulzRx}M(rm43oO{?HTIKsW@~~ZROn)aY5HoK#dmk+`h$25|0?J(= zj}o&5meKJWf$9IW_%VL|Q~FQi$Joc;-{2ujzg+~rBn%3VPESVTRP=c;MvtLrY@u^d zaQUx)Ke+cIjnlR>t<6oL3eaQp3op^QEMpi`m=39pjd2GTVYe9l5?nuXsF0Uwd%0NO z8|x>->e6F~SVB_kaq5 z+b>!!$_tI(u;_@eIH9kHg{NdV9|)uT?=R``59blUneWPBLh%rK*Ac2)s6PJFFrr>H z^GXDK^+l2doVQ?)&Kx$xFHUG_q41TiHzhlS+B;KwrdDo6<$^blDxT!lr^ z5Va?9o{ihVT%Rx^%=Je{2{=onlKNK<4&yH6^#W;7nBqV}2g$BN)0 z$1i;a83hD8B7(QLA{4=s=*MIEmzXUs+C=1&Q$(&<`FIjs2_}g?O-vAO@HFjEc%Ie~ zo^nOc(HasCkV8+rifCrUB$}DR)vkR?1l&ULO-hQ7j)+e-GxbS?cLzl$r4k<0!@*{z z)T=Z2oG1K%0PeyVhR4UFXAAWSZdL+%v{#RagvY$-910E7LS3pJU6M<^t&)WJq=cko zHD9S>uOh;XBEtCBwVza zU(jQmFay~r315RlA-XW9Z?+=uo43Vq;N-z1hvvEe-I^od*!)&lM|-mQSD4KbbPmN1 zC1$&GpFXeL$252sJ!~oZLb4987cf(0n1r*=uN? zjrn3MSA38zXZ+$|xxym4oWynrT+Yae(u&=*d|e?;d6*ZKlf(;;fBNcx8qfGFi$X_D z;Z=0pB%NQ)AJVv^eUSH1SASbyM>oe|pv&mwD5^YJD$=!BOhoTWN8Xdhda7ExH>=~<3C4K4=XVB z8&}eHXnlLXq5h7P1fyT_SiJwtbwM)Lhi5SbTHjoM6>dLseZ=@{j5EbppD7ol%((@X zmEiU=apXJ`*M55!aKavX0Gl!#uq3-~w8-VovbC}D2^L|AB zjXUfo2OkHLu76xG&ip=b0oG&2nGeQ^Q}pqUa13k~7I`xnqRByi7>{$_+RAc-=8!T9guTZrqg5b=*OvkBu>A~+M@9T;c& zhjELu204#Pu-8(H04ETd*7x$E_0N_F}nQk#WxihN)LHesLy5 zoGB4!#>lmxj3Net@jT9tAI6#Mf-ng<(|?g7xX|^BdzH@1eoMPC!bjY8ch6!w6+QK%b*dK;Knn-bmz@HIEuTUf&0%nIc#Oify}o@oD^ zKJQ(}aqo=z+nDcx`Fohx#ry-z8(_W?^JbX8ig|0y-@^PL%-_YlBj)d8-VO5)F+T+J z`S|z>!2AV_kHY+FjE7VoZvWvow|3ZfRAL3*w_9w*O4b zD6^sPs(QF1fX5{25^>|gjE;w}u-JYv5i81%vpD0H;yeN4;_Zu-=GzyEu~=d8cCE#E z!M7{MZqi_iM_J#e1Sy#Mi3Gy&||08*r=f%s58GmrDXeldBt}lH+ z3N=uioVA#`#mJc&(-Yk9?1>GmID38Rqw{z6%#7)|;BWosto+PngXczrBFZWrY5K!^wEVL=#*5iIlo@3f1%!? zPWGgQCCtder+2Y2M7~Op7dQ1&O%pFKKK7FBOF9ck^2f|n+%L`trquRBj-yu?HpFU0sMjFTdGDaKD@oM$Yo z&){b;US%YV*J1s$jC~3CIgAGz3hQ@#LHmCm<0S^dxC_QhF;0l!$rxv@V~Kvk`gs^H zWBltQjF)1Zxy~)L7RKu^&Rq9a^%cg+TH1f+y1GiFes7E~$DKxs=+D6T3XBI^3fpJ! z0*v!4gz;jmzY^nx=Hl^H7%wpsk2BZ(C3t)lA5^8r*&S@ZoarBZVSR;{bo(!3oFf6h zg7HE(59beJy zyUF<9Q#{UmE-TRz#yMD@`5aiKDIUMWv|j|z#QMzVJferNej&!0&y@rz9%num7IqWH zE3iKEIh4~?JkETMhr7za8VG1bhd^gFA@V--+=O zbzwXZ+b_mAA%gQTz6;}=_QLuMz8mAbcH;4UO#N!Y_$F+BKgO%t3gZ*#GAkCq!`eTROfq z7?(6Zyui4m`Joo$oL<89TVeZeFiwiZHyGn@G0syI*1v=CeEfw=m4Yzt{f_p3ImS5> z@D&&@lo!_LVf_M(6B6*1jD0y_{bH=Y3gbLk@%U<{ei>oB3hNhQyhK_&zJ|f2gmHEq z-Top5XNkwxVw^_^;~cEN4&$6A+8%R#$KdNRUiecOPsaKiFitdx$IM_F|XPUXEozlS($XCIQX&(m) zQTw($TzT+*?U~twZam*%cA-K3qVe24doEm4z7=yB+0gdOcsu zd#;z$WMnYu+*G|S!Ty0ZE+79x{kri-j(&6K^8G+!$K0pUQ(ivl@uhXEi>^6CGnaY0 zy&h<}p?CRrEtzEzoX?KL)DQQn9ZzZd?2SmboY_&iD4=7M-N10=%Ol%nPVaE&+-i`Y`nGDCj86V4?&NU#plL3Zw2l+&6vc zq=L=x$~=+nZ}(58@miDF!Tn}FHXY-*P0Ri4;)@UG4)~_d-ehiD_A)Q*sKJ|2!#8Q$ ztWh$2e_{6W(tQ(EJ8bOz;ryYRliNHp8WxxR6WIp}1Ecad-Umh>e)dpL@mLs7{fk!4 zj;F`&7~TyZ-ow_uW-Lxwl{F+xiN{c}@MgXFjgDG1vQQ^teTbCIpR7 z@OI|Jj*gyfp{aQE&{xd~l~$wt!%Sb7ygae_N~Y$|4~k!ip6kbTDkRR1n9)5)b@zix z*TF$9qeqmv-I=8uw&QA9Z=+3hzH*u6-BfJuC@lQ9`o|a_KXVRso3z#{K~H5=QnvSV z+eht<#wfn=_21ie*FBAi2UNATUEipm+qKh}>CS|jiTrDye<<%gamcFe8;@=3d`IX0 z2ImDTbKDj=y_r*f&eN^aG1at$%U#LTEjs;X@J7B#wis@8_p_zfDGa;}x6z zJL4vvX7`(6Dpe~J(c+s#W_}_-7mCUB|4>d3A=`eJ*^*&$qI*0K_2PRa@Ke)ERaE9{wfv-Yuj^Ar7 zwdDSV#Wn|~E&cB8uG+OrcwO`r$EKnUHaQ1Q4vL%MytXF$z1Nfb6U!P~A7j6Gp;KjU zdCO_byXm_hJKxyZZPxLwY2>$4>qhQ+HE+q4n?pknw9;>U9T;9+AnWyQfxe!ylT(k3 z1v#pAlca5R`unv1Tk+GwkjcGzaDuFJp^ zkz?+^8+*j~)msJ6z{28;?RM)6^Hz4N>D+lmiDOXlwbNq!TfcvP+qDKRhUec-3#^^C zz;A@Z*+r_%`1z;pANZt||NO(nUngIBbt7R=zk@{^Ez~}}%DNY+p@7amxA6R{_Dk)^|ubJMh7khpFdG^k^ZLA;5skZxB;ph0eOX*h5qMj2o zbVtkEH@#6EGwJ2#^O+f2w#A;mKGgAQjN!cMf7*T$_y6V}0r%Iu-F$Rlq*Ct6$#YW@ z`+e5BsYB|KYA#*7C;DXk22YLb6LQA*j_10@$c@|qtx+*gv@aYNsejBI>#=M1g>3ke+f8}WG8g}i&0c5`(e;Ulev9@^ z7_OMs(8oC7?dLRO+p$eGKX`s8bsmh2uN~~>@X>hRUBUd3+v86xnWC;g@=NvQxJwT@ zHqDXWKl|E_Ll?6HF7|PAF>1&;u=7x*ZuOI6TBmFre2y)@Y#QpD{ng_1y)!?TeRb;8 zE~M*)QyGqG25;v1j_m4t-bf~9nTUUX+&=UhSk%7TC(XC$*hfz5)zMfx?dt96#jE85 zmff5ADZ8|!=@(doo7sd#wld}8-syJ!-1<$oYi-uJE9^NE{(e^QjJdJ9o;Y0AZn9cx z=Q**lUAo~#*RKm_m7EXO-+PlMom%^;-9Z02*9Hyp7~jUNn{DZ(HeF(m1$A<|?=Dnd z#gDwJ>POuYDvz#Rzj4uOaFyDa{`nLCqt`$0v-xs-7yUfx4JUnC4e{*Q>rSyuuVH1^ zR@-ayKKH-!)YfXcyxOkKS}{)s_OQ4Xd4EreRXnFvn_T_veX>W^n=5GT-ZbIdoK@~m zI=FXB{Q0(R$%Mcy{$El`Qj&U}JGjcTd|OWow^jLNYd>F4Zzom$Py9#EFQNFKma6Z% zsF!8=#}T+F#oc1LiMK5WfIC4tKCfc{yH|S%Ee$d7~4zZu>Lvr*Lv-|i*ozk?)?X|DWVI?u;z_UG-<1eu;2-r7T zwQ51!h!^jrmY>;nl8Nu{{EJ=Cfs?+gs=5F!avP^jJy}-8d3J8O-a98qs z#>-*p(X#CNc1b6+FO(F9XK&fRZn{sg+1dEwx?ClrkuE-cgKo9kpF1t~*ocF(gIx4Z zx)M^)GX@oX*IzOJcmB1*@v9v@IEb4(>_PCO^V^r~xudqEeW;3GzShD}PtN73S|wT4#qJekHr@R78_j=Js1-W{)4Q5mJ}mc}h?Fj2=TT zRBdmzH*CQTZ+*_H;0E;i5V0E*zhC)ht~~B>5${#%4f_TtNFqFdndsY~q4 z+p2kOF*x>mN$H)a(SgTr?o@v{DAp@<(Htj}SHr&?J9_`LdelYdv7P3fw)*C58(FX{ zO#NP1kALDH^V}BdUv#Sh-)>;qLgEY>n*U(yRx3f6c}!0fZX@^s_RY8P4)<60Bo8-i z9L@NL;)gy;GtU_z101xY4;wo7tG&G0d@=C2mSwC`sV&TQ{^R)>ohzoz-xS|cjxJ&R zQvtR`{Lq_S1UFHZ6`7T_uGP9_&u*Sd&Xnsw)VmFS|N2yzvO?y_SC`r|A^CY?!On!2 z5`MnI)Ncv(1nUw6Pq03Tc~M6?P0FrobE`pF%YCOzeC()MQ>{m6#h=;U=VPzd+mBs% z_?awzl`mJZWMX{M%kmK4=tpdi$4krSv+wR*dsk+{?DqDSb_`aZl+ zc`vV5)bimAR)i*adT)Bj?aUsVA8OTo-yQiAIvv}pl#J>hwRvTA$hCS!9nHqFXfTR%TQR_vT9y*X)aP|+#B)KUE% zI~(^|H<`Vz4POE+2 zCp$B_-{^C5Ev7e~Yop%fr0dD;gPBKqspv8BH3BXf-t;XJIk6EY`K9ti)wQ?UibLf- zJzn?ijppj^+KE|(kN5g5Ycsdav=MimGtZ{qGEzD)q@cW4r`*^lZHR`p9d4K^R$6{|9$yUL-#M9pf+mGI!E3p>!arW zItojtr}hrhuaVUu|JskO^TuN~v+JvV7ZJjjf040yW3;IXRl zaLyQ+W2~Keab=x8Ogp+pFmvI@{J5!S{b%+eH@;fxRWoK)YJG0n+8CdR~dO~=neo~26j%_+)=-3su zvFy=2omRf9A9P+=0u5xbZu$rG+PaO`oRKmZx!_@kLG$;8+>6dvcd(c3O2>g|Ke}-! z_v_;iADXR*1%(Uh`UM>xy!%ppf#*X_m14ay26o5OdiUWddK@m_H|+;WjEQ=8q4(}5 zm&ecA(qvxUtH3W=`u2I7q@Bc|{Lh!BOnS!oLWC$BKGNsy(J#|wXUWDNZ`~MbkfBvH zvuc+74z+h}*jL9qoJ+9J#{{TP?e;Ei%fd&ACIu;_>gv+p9k-0jpQS!-ez(viJ%syPlw*#cZUCU)pRJNl@_^UB zN2i4hNvrO*`eDX5(v~Nx#PH~#VX?HPr$)v`r6)wDf608FzCR|vLuBOh>5&Q3BhSUI zj$N#gad>sC{gC`^4MXIzZ%+TDarX5-+k;PSRV%x4l0Vm0c<2>)&Ro#{iBGGawbIKb z*zIzz|rDwrH!{N$16GyAb9wIz0k5sw(K=>+7^M@Xt2=>*Wm^!ceRjsIjDU?%-=Avb z`L9R~)4t)Owo^V*Cp_zbzwh%P@4hc1Y?ofCE1$IcAtsxkOCq1Lwl2=8fss4iN`#zccxiyqaw7UL@-uW#;a<^W(n4e%n{x9^Gfm=0&0Y z6MTKXd{5NOE;VcKC$#lX(wnMXVDhBlQG2JJL(z0cZG!DXxB9QUE$8=N*_cD*iFd`L zc(iECJ=H!_mO_C1cwdvYHckf>a-;k|+1m}At2;d{vu!};w)89+g%5A-?&nfo;6^!ZfJ&6~%BuRgyyButhR_D99TuBqC!m+PYUWw#=qIx`@1 ze0GKc7cuiw^YxlMqau!$hOD|VJoI@FL)BpORlUDYaj^d0&}-1uu=%TqnLmF#-CDiq z(UM`W>&BK`&h+!to$_iV@6F)&BTji8asW{xiTed=DT-u_YV6Uw)n1!>GnbG zU-TX2{@AP1-eG3tbf=mQ(^%e$&l9aS>pb)wZrvedX~3wwVfmJcvDe+JHjcmDcAVUC z!4VeHx|K$B+Y|fsW(`~`=#HTOXnZM*d1v&l`TTmk>h8$)JV6D1UW&zG>t%RkWSl<` znV=T=(w-cn>ov29Rnt+9l$on{^qBPio(1_Gdyk)Ubs2Fw^h_+vN^$prOP%#D4WGU+ zcKhU?dYP+o9$$EJg5AO1ep+ZkyN~zlIt1VCVKcDH$FZ;NCq&L7`E|kj#k}VnTpgj; zvnnn}=t@@5e{}uqsaEEz>%hd{&q#OqoGCm3JIz@smR_XKxTvV1VX@JlB7CcLIJ$A+ ztG)~kjWTq67to!^Oo}R2=)8Ez+Pl7?pDLBsOnq&+=ib*MQ@L+vKIGrt-KoHGLEjIh zgR8f+Ngq*TZno#!Xfu7&8s#F#vYs7ZDu3g3{K09ijF2f(&OMzQRl4ZNq4fgA)b$PG z(Yo@9;?7Uh0U%F2eSTkmiQGuegq79@E0&I1n(Vfz_ChOS)IDdVs-_RbT=i4aqVo0=-|A-X-Si^(qyC(#!2x+h(mJ04gY6G*9p0xtA!M&*_1)gP zV*UG|bId{??y}eGKDP_Vztvkw;$E@~se$wly|2}2uFLE97UgbZw`kB=E+X$D&S1!KVy`{c= z9XCF}qgCaVS(?v>I;VY`Q+e#7>>-O`t=o_8@Y3bgppRo_&m8b+xom|r|69w(PH)?( zs46urRg?J1nf680f1ez8**5&~5!ia&vnu1vE`{TFbKWS=R8}27q)T0j zT-3H#Ry#di=5SKYns#_~$x*j@L=ru95d|>vzXo8?O)^nB8NnOr+?AUpd zDH2Z^|6Kq^2ToVEu)dK%bG6EdH23NZqwz#%R6qL(zNy1yzj%zde>}^^52lCKlo?I;h9Zs zw+vPGsIfj=)_P)N(?os0l(Ev%L|5~J{`&FiB{$mizn!ME=<2m4L7SA;*Q=D?AJ^;H zv1iua^(EI9mETrfJ0j{wyZjx&($m_#w;p_A?cP%FySmji=>_v%8)!(6`@prk7q%kd zQd8rB0Wr7d#OrP#3XYU%@V@$3_js{kirql_!^N`#LKp0u@6>tsraeAgjbx^tT%rE> z{g6bhhy6Rb=*R>$;m1FYT4bJwT<+N9m&a9*UC}XGYihUi4-3|)cdZ>TB=uI} z})DyTsll+%4b%&d%J<}&#y(t((g94j^5Spmxn#wvtZNx1ru$p z_8Z@Edv?p(s@sCfy(1el=7)`EvzX)49E>5Gocw+30>0f^oz-K2qPttUhh1ooR)10# zAZLzZ&VbJgwh2=eUWt>G{%@;(37Hr>+AYnJU! znPe1ybFAMMFYg^D8;@zsWd&~W@|{sJ z-)e|g_eXACoNFCBTjrb&KP<&PFDJP{tjAk!ZD{+^O#XP#y7B#2$r?@02`}$^w@8(` zPGOD@6kl|F{2z+tpTt{KhD8L|1x3tk3W_S)r6m0lb%vBk853mSta@4oSpT zRw_L>EMfh+owGCwjR%!2`P232l8Ya` zHhiOf&@X#i0q=2j-q-Tu<C~_;=g)P#=hx@rBy|XY=nLwN+gEMax*S(me)c zmO0EA)Tv)i==&MZe9Co#v`+euRi7TCR(xt(&p=l_OV*`(Rw`Xqnas`oHcI}PUDAte z$C4Kvo${Uz3$^q#R}IN{s5y+)VmQ?9Fsw++&>7VN!hHg?4cqRtJS8~7|n{&lG8Zha)aLb{ZhpEQ6)ZDSwU z%Urh)>07!csp6g{tmGhegS(qyABPX=d+PGQ4R5AJX|!r}W?*^DvJ9!@6~u)jt7hun zxaHnAyVvfiu_M%z&?v+>K1-pqge5-$F!dLCmjkozXX`fp7KWN8!{-?i;iD!2$ zcxNopf1<TTP%jO{k!==hVT zp4~BVp3#m~pK~-w#WQF>q+$lL*O=v&K|B&0a?WK<|SJ`yBIAF{ILZ=no%r4AVjlPlZ)c1w?Kuh9g_oMM+3KhMI%5OUE>N2u*7Psen z{-7nK7B*(ov~Igj%U#S{6qxb0+cmFzB-~{8cW&g}m1smDAD}+OUxIgl*rJ95*K$cXaT8YoNqpI7s$lqR6>6tKk zM;K@=>AWX$lblOk!n7>Tddq}WI-_b|^;BW}W5xIunaQl!JfH89 zP)5{0{;@+jdJp;cxP^c6YdR}#jPvi|U_1X~(;V&OgHjzz{Mj?y!VaA~udkl@?Yb?I zbNE~LM|oyvR0=w(*@sQem!FfEy><@Kom;Br*4gu0wKwCRl!?|7o5kV#JcQihGmL*K zP(sa5E$=Uk5<0%&JL%~Bj`v?@4{vkpQOOp+^Td+c&97JJkGpZgvT9gIFV_08vEy{g zMt?FYKdA1!jM%gNg6Gx7D0jK%OAa6IijP*7LgtE|OLs16KELtnuhH7tj_E%C#uM`| zx(dG{1?o4Rq1}2z&H2Xgf)|107vjb7r`I3r$UAhLT~&Kti&)7GNwTQl+D`tqMd(Qt zV!fWRZdTyiDOXKKU+*}LnJw;KdOgefSrS1o&sQ+d|A=0S@B;-SS_Bh(PQ7ujtkTrh zGJCduvNiShb|^k@`^25Yx~;73wfvg)9#C$5EN<_KiKc3~hXzZZyzYNWRny#*cT06- z*B;0EhRxXbMeB#V=A-B3_GyK~<(r*ePI#@SQ?V-No$dSGH3$`=< zqxpksoUjsb4Lk`$Q=n-~R+`BOQYL1CWz?cGxPVoDVOG`S%7DQq#LRDuf2e<3`1i9$ z$fhVG;*E$OFc7GX_4=h>r#pQmJTb!5Pl7B`Xc3;~0_e{MBg*7|eJ7uFJTm*+gCpDg z3PYD%p597cYDL3+gUfn%hkeKyq5ic)o{P=B44t)SB1WzI(V(oVu<2)qy)GN3`f3z7 zSIqyxzHzYG9V*v&c*le1J6#I)r z8pjc49(DPTj2raU#H@>|eVUxMStUC{dH;cRBZ+K<)o&&qHn*Ep_T$!9m>%og_uS2Gk)omV=zIxY}=HrifK8*2KfP(99`~I=3w4n5TulLF& z0ku1HiYG|%4%C}>U4M1g%c}SZD~ya13jFmpPO%NEXn%Z~IcL(A8Fxn;trV$M8?mGY%6&9~7JG+o)!D_j=#i_>0C$6Nk$QMB~oJ4^K=!EUg;zz0J40K8+i1 z3^EjmrA4=zX`4EJT(c(b*O3wRpY2orv=4uR_38KVtC^#yt4$Lj8sZ8Yh%U>HH~1bK zJ3C_A*VQ>UZfrjr@!gRaymVjmyiZ&`r|_7W(Whr0QoGnNiO|}h=VubVc*3v;7uw2b z4e2}f><`ms|5^2=-*k6eFH6%5_`Ux~f{DMVTXd{{ZKD~LC;GWt^?5RO&BAr8Rq4i- z^`9PkWFH|G&G}|wGXKGwxKop+`E)QlUDx01t$?owzpFpmy1Yz%|DI+`Opb{!`l^*W zJPZST~Xn>0M{H=`b+`BPwgHQkcd$h*4dNaKlNmsXtkwxfFV+lIBg3Vn?SeIf#n zB+ME$E_VH$(E<9CpZ_r3SpMoHM|b~%*qI(SZ^y_r@`6sgISc}06CoWZdZx&!?GySw zkMWD4g8orWQf|Zduyu)z1GmC53rq?5C&D+pNXt6O&Z-}9r)PfuK5s`~SMUC1=@R@ahB4S&m)!V`V6UjpEGLTo79HW z?o)3ox~)~(_hRAR>hP5n3#Zv{FL(Mh!?3S&<;TP&iOVb>Deb&-@b<9rYh=j^H^w2s z`l|C{ z@NDPwo+U*Cl~ul^5m+x>@6oo1kh7xolTd)_KeN(OVOovMqS(mHYPFR*2Xah;9#abu^6E9TX_8a!TQm3r^XW&v>~ zqc30F&x!7PV#p`t2h`8^>FD$C+c$PtHRa=>vQrIV+CvZ~X=CD#?r)$5PT;1h&u=sz zvtMay`m{BR)2^Q=qQ*MY)`?VxN13DZ^qwllk^*Rhc7W{nUdEBWyXr4W-`eQCwzW1( z>PFu54tEc?-s~t5#oJ{#;$e5;R4i1;1{6L&(If(WU|MM;dRo$*=2KFz9XIA-6*5Ib&bA z&zWr0$7-kI-RZi?L&ys~j*MQVqaWMLW#fxs_8B+Ym00yS8c2pw9RNGg_C4*lH@NO#>ynb< zw5)lHdBI;zJ5La_MCbp!eQ~V#eh=Qyw5_=1yRcna*_h4ujdoAy+BYj?>Z!$jlvKVi z?f+m?PW&aagWF@d zz1(~D;J5QM=XYFcwOK_ojN8}D&Go_l*o4w=%Vw3OyKJ^E7OZ7#XoX4XAiKq%Ij_|i z-w|c{hwjU$42!&*h^u+ zhY!V5Ce$YHu52$*L1WOajXfXmY^S;0d1xZee>*5d^Fzg|8H9e9gFZ_yMRl+?owB9y zUie|r4`u>(|1kR>TWBDLEE#wxWL}r$-4`zJQMi99=WWrwlo9!R+J8K_cjkh5?-i^4 zHLQoc&R#T5eQ3$Ce!EV{TW}xE7|_T3{X56*H{!ep5yZKv^W+Z5$kdjv8h9~MYsp@_ zg76$`*+KhyeAU|-9Op6M@EW(#8SiR_={0sesaw>vsnX14&&jE=b}PPRXPcaQb}W+B z(ON$?b9uiKnUS-C_V$_3`EK4P2iJfV4$&QU9_yexFtX3Gw<-Cf>vcG1y$`VlZI=(R z=$|~TDCHDq#_`4JtFK0S|27WahfJG3`GnEZxQUloE?*SaSM=L=;o!^y=N(6q4s=^! z72e`$3}*Zp}ETXyfC7 zHBa;A$;LhTYM{}vYe8aTj%{1%b_(;o)usyDihpG>^}g z?K^MR`EDP{?Wu`f`-RTlxFT=Z7u%{yzP+scq&|!~;in&O<2%|aC0*%&WrxbaOLh7r zjarp=V&TFE`d{n29@AUiZhY-M6SaMH2TPQKcU|t9owIVReb@21FO`ENwc&i2M^1fT zgGYg#+U#~I-Z=L4YmL}TXZ5*E+r?2PzRdlLV`I#n^KYJSc;L8i_1Z&Q=f^IdeO9zS z0Xw1{E_m$!x82ha@UO-EW$d^ksnpIW{7t|Tz3VyT%jzCWZ;G@}unmF`Q{E8XLssKi z0k1}7W9`) z%rLgN`X66=_eXXo*?d%;Kofv0; z3fhB3Qt^5y%>qI=EOjR;Ac}KiqJ&mR5yjI}B86Hch{pxtyx#b+fZCB%fpgDGmoK5u#jT04qyX4au4 z^^3CfLoHehE;DP^HU|>t z1lyY&l#oRAkAM_9XQMfam`9Hr64PW%3m4GkC7Aa>&S>wf*8 zG(Tkq;p-=~3|D_wPk&o?R|nGD&(7V|o`egjfl3I_<_fHr4r_8j5xr!WkP^Mdk+2qC z4Ib8r!D^Bg^VBGuaKkLS@Pr8$G@b0XUdiSf7*UynZMJ1M+b9rEBIe!#Rs9*;vMnsORwyh4HIiU1)_%K$X3=nT75H-#@t5OQ zr;5i7)8YR``n&NLC_MaVR!j`h{3bZZ1$xr)3&QmO)%fwdg}DGvjEYH&Fp5Zw3JOb2 zp)bPsTzt}W2~rWH0!R}e`9K;BiP5)pcPECzYSw5)YX=tsmIWPZ>*+w)yL!8z^&=fz zogICAeF$%~8YS8V*$*A&?dwJ7(Onn*9ie6iB16zkByMU7JVn*gy_m!pfxA#Gap9X> z;&85jzEN~iLWEIRQc9K)Hzmv{H6}hhA~Gc=A~Bq66dsYxHA+g3NQ6aujS}Ej`5Bhx zMqnOA34+BnFbOgt!n0s;znCz>3)WQh@o^7w^mKOhbo3!y9SBos{?H(IFIxvHW9#5R zm=Nx8Ybgk2sq&a`{*z*KL|gisEOb{=7*7oi3gIRuq(<{UG_}CPVv?gHQuw&w=Q&hk z3;FPvC|LeNqWo|5ljE3+e5ygB@}fM1Q%^fSO`nK_J707T79{2-CDQqbl$4|t8*O8& z_&^(2)tCAwpwLD;K2tCeX^C-(Ng0X!_N1g3ffzKy)0QCmd-}P%4}_(Pxv3EeXbob* z&XXcAaw+QILJ>!QZyNP;qNtbMV2XM>dQcPwIYk34V7VJ)hPrKtGOz|NW!BY;qTX)y zK7IM3{$^B`9vM{D&y^xRzFtEeX$&o4Oyyu)rACC4(5)sU)p{Z!hRcP)hl`T91RNhB z@kByMe0)+E85t52pOz9qj~?hxC`IZdiYHpdgv?4xgVmRl(%=SWA}o1=1YikGbO#co z64T=2N&Z@t1l+!jNJ$Kd$2Ftz(ZXJ8bVw?h5yBBT~{s(E$`eaFfE~B2tMMxJ3|;^RNI; zI1vxGv_L5&EG!~9l?d>$<)((Dq^2b!+lk>ZDMTcUmvCe(Bs?7MKSw5^JTgh;xljpM zP6Az2pKz9{7>c8lxT)BU$jJCKZZu__2#ZgGSV1ErCo)N=rpk1(CuHX=WT^B4ITd1DA;S_=J$e=5jdpU_Ba$eqwq=JhZPF zNr*^*DT)kDi;Rp&X)aC*jfF^(G2s!3sWD(u077GyUwgPxB`V8|FfZQCM znlXA_;M+%Q)bJVRK*tp3PG({ZhfIql%$fN;J=rKUCMhV?(wv^!(F6b^0J;txnGxYO zWLRpZ!9W;bK}nI3WPef*<^p|g%-D#eNIeG9Cx~C@!Se59{{a#df1@{WfKdHns)<3i zVIKI6-~X`w)P&?9?6(=wn)9@&i|x}UbD$_MDb)k!3uzFfGmubM{Kl`|B=|2OG-%OX zOLI8r>ElkggP9-qY7L{WTaDk+>-H8dq_4A+F;5iGeBpAD>+d|8=d7S<1;&H1KB^6! zlbIx3JFJ`Q`LyYd$I~WnpeQdXB?CryJ#ESbS_MgD+(F}D+|kz}LRBc?A1|~SF5Et1 zJ?$^kzTzz+?ZQ@yH{f<{rl~ikCF`2yMXxyo9Y}!h;zFV#;ADm_djt_WuYmn46!EWa zH*KHs&l~fMh2mW_UbvH{!I-kK9Eo{>I0;>ONf=MGjKRQ!@E~+-qGJLsT7o=m1A{yq zV9EI5j*J7C3fPYb3W?yNqknJG)21oENDY9QCrg&O1X%wuPn#A)dJT!O^&o}LyK|e% z80>en0P0*k8IHMMq#Jfe9Eeh#*e;{R{hR~Lv6iqqeYPkVv*{2TV$3B>2$ zus;p#qai^;LgPQ9i!tnhuc60J@MGb5B~a4%c_b`H8G)T7`Z{b^SAw%WdCpZzYzP+fxbp<7}Jg(AiUdj|FSEE$3;g;=dTiBIWR?SlI&OA z{X6y-2#o)K!+%Nk|Caw#1^h?HZ#q7HdH3n~ym+RF#R3za;w=5B`q* zN!Wkp`2E}dOS1pB{GW*ZXO7>$?Y|`Zf6M<_0^){^$7x zZ_d5vo;h>p&Yjz)cw!&(-e_#FILgD+$Urqu)TmG}2 z>RbMM^KbLtSN}H$^1osr|NZ)y|K9xD{P)%WjpSdl9F{`ow_G6qbDr#5`S<4E=D+Bt zzWKk&lYhzj@`3!%dh~zBzs>)`$NT30WKaJkSzp%eXK()9{P(eaJ44$a>3=2v%ewvS z&A-imU)#@9myrLywr{=pxB2g@{~NUZamzng|NGef^yc5@zpw4*^@02^>-MuZ|2F@9 zZ9lKo_D9NJe#^T3?9IQ;e_z|r>pc0Fs-MuZ|2F@9Z9lKn_D73-nYW+4`M3G+Yx{YXC;xH`%ewvS&A-imU)#?M zFW{c-g$owVL@vB&!J_FGJK?!Vb0Ns0vHVmH4E!bqe$yXj`$rZmnuuKZDE=OE!gG;c zKTGS+fB!O*jB*1r{s#9a7sJh@eYu$Q)81UL=r=g{tp$r71nX<|+fI0|ck()$wj?>4 z{Vn(qpNnDp1q&AC7L$H3>36{oAbyTe+p8D1%@Wd{Al;OEFaNY~(?r_8FnHJRi{k4K z6@7YwBMF+{bWs-g^*h*aXHBB&->%Qu_335hf1>)AYwv#||A|2P*!8(N2Rg?)f1Doo z{*LVJ{%V7!+j6lo9w?t>?LQVMpJnZTkf(g)9N6*K+#07m(hXWZdceB8Zx4Tovcyw9 z{}cWrp7Qyh@V|GUeC+tbme0gKmd{>+@(KEH=%fEV1LYI+AFA)$`Q2j)<+HG^Z~liY zp?v1|(f{Bjlux?0Z}~69ztqdHUMaTuwe=_5R@nc{A65UoKRtNC4Gfe&QS-C@C-##6 zrS)GP@Nefg*8lub{`}eYVQKxBdCEu1iRp+h|8rXV=6`_tcjxy3|8x83zgWx1uHO*# z<-ehi^rV{AcyCeEO?@@h!h#{U56RjFZZ@K-FMr>(6dlKH^^> zYJRqUF6?9Z>>BVNEdQDN^{syH;whg(UpYL#^Cn%JO?C2 z9tPRJ?f)B6&VDC$`S-uGJ%QLR&F^;? zXY(KGqkkz7Z~5E#zx6+JQs46b1NoOMhb7be?E0ql->;AUzxDW+{n+`l^*=P(xBNe? zx4pTBDPTmQ?te*Sw2{`*=#e+>GU1L0@ehrYI-e+2w5>-zZ}{%zSy zzL$0T`HjcF>}OfmPk;a49*wm}ONu6>`QBM^X;HZ|5ZM091&eO}qIVu7?eN9e%qDHc zuXvXxU~@3KZx-Wsar;~mUsB%xzyE&K_9aX~Nc||%0+~6*=~riE{r&57P5*C%tiJ_+ zXX*7N%g4eB#N{{icxS)iQ~dis$w>|c$L~W=_1mdgXx0+^&pFAz-JkU@f49NrUG}+L zF#mn@FMmi}#&32XD+c^8JfUy-x8Loy{)6Q|Q_q7OoBaN4`E1QL*0;#z1Nom7IB$Q} zzpwp?C$goUxrgNUC*8m8|JT#^7v`Pel-sNe1LgN8=O5>2{SyCjd@HQSKm4r!x#umN z|Aq_vc8-@&=u*SVMb&+qG!$S>IcINF~7 z4nXBAe>JiGXI|Df|Jw!p+wr^gKj+fE`QH}*Qg7Vy59EK=?7sOIcTzsVU%x9HzhRZZ z^rema`iD%c#C8uo-=FP}mu2;Z_T*GvWjDVT{*~jGd6&rj!2GUu@;CoV|M9P=2Q%|J zM?X>XzwlbWopp090r6{D*8X=?-?n|Ju{+lMrvv%=v-#f{f8P2%I^e(P8vk+sS^ql) z{JVenMf2aF((d-p`rm;KrR;6}Ue@Iw)%@FeyX;GT^R9QwWtK`uOJ3{(vsElXieFp) zV!EvT2Oj4b7b&y-C5iQnovKe79;^Ka`vd{^K6 zuMzNX?_XN~3-vf`mS@_)Qp(jle{cIHABae31J|>CGau>TTNZ7( z_JW_`;1diJ;(R&CwtUV3y5IDjzi`o_Z{3(1nD2%Ne7DcOOn_Ecaix`4S#>qy@)w0x zUt`U+)?TOIy6dgK!G;@cyve4UZN9~pTWuZQX4~zYEw|rc$DMZWzss(>MF#Ai|1SI< zd+xQjlWzZA^8WW(^xdL;ozKea=Cc2MhJrb9Jm>Qh%!x_QXUX|g{fLn@`;8i1TUXz( ze`8bgn6cx=A8=r_CB{d=+S-$oCUZG@ROifR4zO#W{&-&3~I>25&>r%kp)FZZF3RcG4E#aQSb^Eq_;d_J#7 zFUJ)uhZ|HMEQcG>OSugNTMkloSAqB+inKq`uZd&PdxsdJUrY5vtua#cTlQkVmFllr zKEHw3Z>{<{0ex8YR|NFisQ$`;eizmEN7|qGe_Qqc4Cvoc{l5bG8#quo-r=4D7C$$t zeuPIaStwM0ME|1t7hiLpTEneBB>C=tbN%bb81r>|Id*s&NZ&8Nxhp&8d#1{XDxK8) zze5Se^U+>IatJc!v;K=#(fXuvejoj3@GWc)=C`Wjf1>)IYxifZ=^*gVR z{^c4w6vFC%uKJs(vak7^hrz+XC?>Cg#bf2bh zMB32H!RCLi`kSe8VjulWJ}N-!r>Q^cZ=u%9@M8S8v&}@U4+IPTJpFqoNa;^;XWBK+T&Fzxo#)7j=PbT_`Yj>7x4q6h zTm4$uo8eOG8_sh4&Hpd+<1fFcd<{XP2khGQ8VY&y=s2kkBDo0a=dl-cK$KhJABiR7tMw>H~V-|8L|U9 zS$YXok8f_QsO0nAbyX9p$2Z7_&aJAxZu9{}L^r{Nv(b*6R1qUR)x~_37`>5<+3DNl zH|OvE`Y``_f84S9-~YEk^VRUIlfSu7IrAUqRm2YQsI$ubh&@v;(rdh5T-ua;j&doTFPz$3(k~cSf70A!cW;Yz7MBcm9I69fdMefuOuzPk17wLIbglk&5A8xsaDM*L z$|8IIQxo`e3%(uM4ZQ2UGC_7$StV5X=cL=M7x$+?jg20U^C5Ho+QJ0+CcF7ct>*VA zmUw5n?s^1*+qX=Tfe}YCfG=aK_1(ymsrcu@@tlhj;10s~pg#y(*J^-023h!Ef9k^B%l@ApdFGh2_{1abV3)TAPrL>16jzy zE$lA_3HY6S{tUMg?j~(2OoQn#0}h45;Bfc@yID}dF%E-DsDkB4Yh?Q-XofK`7RJGN zI2~?fyEBld0e?U;v;thrakddZ0KOo6Ao48ijuai~U!psk_&FfYT*-4q^6Zj4AGH$j z2P#9?!I7jN1vBAjI0lY|<3Qe3Jr&l+=R}aTh|k&P4E(Qxly5t)2CIX7XM0Up3)Y5p zpdYLY>%sc40c;2x!NwrpBHR=MTp$Lkh1WKU{%3&Z3g26BZ_JBQMFW4LQfqh{pRKPH(ges_p;V=S5LJjN(qhK`D zLLJmY1MClt&;-pe2FAiT7!L=)fp8EU42Qs9paVLg3sNuvCPEZiAO>+rKr6ICJ0xKe zOoqc@CL9e%z>#nibW`tk;2iDI@D3y6OX_ml0-;Q^2}F1aC!Iwb4vn3;PRS0Uw|h1{PA z!!{uI2IM|~+_zZ?oB!xpd>y0u{)=m+baGMzAq#0-M5S zusLi2w{sj@BDaFAAq?BVwy+&+52wQ!Z~=MyjeTCtHrK!o=#EAn1INN~up_#iK;F$e zp7>qRpYR`Sw+N)5mxJYD1y~VQf|X%1bigjy?+Uv?1O~wFPz1$L0;Ny}ge zK87IofJ&%>Y8Vb9U?kMQelQ9~LoL)nJv6}n&%hu{SAo;WtIT66 z;5d%?0@BWe>tGhlMt3P(2A6}Z*ULQtS@V{AzpKObAon?Mges_pE8t4l5H^C1VH4OC zHiIH4h7u@+GAM_EFbD?2&2Sw&2(#f*xPd&}2sgnMEXb2A9JexB{+(tKe$52Cjwc;TE_O zA6LQEa1CsL?kJcEN5i$~u7m602G|hYF>ov#2REX-32ug4U?X(L!wGOA%#kvHE8!}T z`zdnIW+c?WelQ9~LoL)nJv6}nuq{5egGRzl&ER2KkZ~z<#2f@K`2>b;mzzE8G zB-FruAkX)WhFYkDdN>uHBk#|{3-BWR9sU9H;3aq&UV&HPHTWm|3tope;7xc7-iCMJ zM0gk8gZc12d;lN90{93%hEL#A_zXUWR`T)%@=N#%zJ_mLA$$wp!T0b3{0Kk6{qO)h z2oJ&E;9+V4s&1@ zoCRmYIdCqV2RFe9a3Y)pC&MWc=KP-w_i{e}3irYN@C~|!@GYE5{4_WnjwUb1z_D-w zJb{lV;VF0;o`GlKId~pkfEVHK@DG>=FTu<33ap3EZSk`mtWS7*8`>@|{k>A1h@B{n^ zKf%v%gh2lOjr8p<@H_kgiy*{#J0EcYTnHDz#c&C13lHGqL3jwl>~kA95l(`W z;S@L(PJ`3o3^)^J!C4?b=~vDJX@}0hkMupaqn9>nOSqG;^f|U4mh&m+R?e}U-($rI zzN8u;Q?8@8kut{I1?G~c zTj4gi9c11i^Enx#?nrzm*coJP=N|HYFUT5?^zYKop9r#k@o#L7gQGzD6}i6Ty0X`s z^fPj;$#rI~JLJjOoeLw;OS`upjDS5r+CFImhrpgN3Ti;w##7-AkbXz{A?bspPm(_9 zF7#iquPcz!k6sBf&o~NsAo{D3*TB)(R->0OAVD*K3AWGDZ(avqv)!>6ErCAvEJu1H@2MNp>64`o{u^9PSjKVJA_f*a)_O40$|=@;w9&hQB}RBcuLrZ8opaeaR&ahM zb1^&bk~x=mzUG~y$(&5)V^i=ceZBN;j}eyn^1tC%c!K!jAam(Qk$)hi|9gtC%$@%O zzri!ap9Yy%KZ%sNwe*qC5te!MFYr6OK>T@-IkwELLm=aU4uW0K2`P|1;u>sLf-E+_ z!Y?oo{RP;c3NuJM65U$pmLpt(EQeu~aV4xxSo)b9Hao%&AY&03TgW)&4mbf0L%%h4 zGT+?_ISY9fY)Lo_yTV?u4{QUw!QOB-Hs`>;gd;E++VItYyc2l`Y(ZGYuD8N%Fc)qI z8PnbXH^NPDGpvE_q2y;8;ltrp;#C}njE`je_A1C2PR3D>f*so(PWVK40&;9q3BzCt z42Ny;CF9cIc+`$l`?KA~q|ZTairfq~hb>?e2##Be@Hw61?j~(8;TZDoY}-m++n^ni zFbSSSFJr~o*iB=b-w7Xpj1iy5cHhDP_y>Fs-@(uDZ}<^@fd9ZxuqOV-iG;NvIR4%e z-BtMA3b{3eVH>!C?QVpR*|&^;UxpdzWh{CG3?@7T_JBR16!wO_U>_)hK`;_(U_TfI zqhSOLg$fu3l~4uMFdX)UTBw71Xn=uG4y&{87_>kf&V&TC!d#AH18k0l4MFBF8^MXN zGU-PkE0M#Y8miz_bf>}TuqN>&OoDdUAAhozvkKulI1u)O2B?Q7XoQha1N*~xkhOqu zPzz&VEHuMt7y+YTefGCK<$EFF-{4nR5eC36FbH;s-C!V;K`9J|2$aLFPz)u|4}V3- zndEsB#$qcxCiumTK$yH3@CQ5uPr#G#96S%tfXs28 zhNs{$_yzt0f5-oOFdyEBm*8Fa3@&897s16K>zsC7<^$4RgHPdeuxp)f5q=pygxBE` zwz&*s?PfMy3fr>J?O=Nt09SKf&qn_u$C4nPV7ouyEA(H(-RM%t;N^e8LS8Uz`n3K6v03!g(hf*GAM^Jupf+q z9bqTf8Ad}b)IopP1$Kpc7zArWF{}=&z-q86>;@5712%v)VJ#R8LtuT_5E`Kb4u*r^ z5a`c&9ST{ffUD454s&2OjO3cDf&E|(vX2HbV3UHvF*9|`;KkDg+r->lOT?MBC-Xd@H}Zdz$Em)6Tgvd zj$-?}(8;eArlTK(EQU1Umq>dKQiQva*RsuZ@E&{upTcJ_AKr%#;6qpdAHm14J=@0N zXSTl#zjNRS=A$}wAN02uo&qn^=oHH-YJoz9B>kv2?{sMN6yf)!) zIEKf_^N+}X!>{lJ@yFpi!jB^VKrV!*2>*oq5Bvtt5PurJC;TLG5%ODjj_}XOU*LCm zf%xy0>hya`lGjNhcV*8dC(E0Z;O6A*dAoO^CkI{F-?x^K-TB(C44;j zIsyL7I7Y@USaqW8WvkxiAD>7gEL=cfein6*e*kk#WaY?E7o5 z;|n{suwx1tOPmWbwx|LbZ^#(q3aExF;V6(Xi;M$W2ww|-rr(zSTKZ-gXUP~###Ixc z9i$(ZwyOf9EtED;+CORQq+OGCPTDwWw`_kN>?3VkDs8B=pM}~^+ipsmY1>KLCN8c$ ze2_d{2XXkCGLZK1Opta}+C6E{fMW@lKsj6lZ7?2kY_lWm0QbXR z;a<28e!$1$@D1DnC%|cJa~Nrp#Ru|ExC6EzehczexDDpQ?QlKZ05`%-a5G#8N8)Q5 z@^HA7ZI@=9=p?pz0=8wF?O-OybqpLW#|Ov5iEsjJO!^#bH$`p+o5L2c2^6uvBO_bUX~2vZW8DO~9&89(z`C$GtPdN&X0Q=#44cBLa3I?sgj@|K zLKF^$32+G9hTl~H2;v_h--dVKEqEC|gxBE> zcoPb(eO=9Yl(jCoZ~G$W`b**o%KAi+Y;y+T9nt?mcqin}Fc#fH;>*LA#2-RF01v|X zq&2}i=--A*3C~Afi~sB3YVfXSy+GPm@Cy8s?f(V+VKUsqwxw_sY5#^_;6LywoP_>F zH~~(9o8V+PiF}_7mF(wz>||~0V&YQ>p93R_kB0qV52%L`PzQU$D5!x`p%!jnTUitP zf^EHPVV@D73TbS1Mk5za34Gfe}$*vAy^f^s{yX`<{yJ1#J5V@jGEFcorUmR?=o6 zJCTnd{{btr&2iYzAk6;-*QqW?e~@g0-J|drJPuF5lkgNg4bQ-{@Ekl3FTk>1qgqbN z7>*&cUF7K$h81B2NRr>9Axqj6@~{G|3`fEda5x+VN5e5N6IO!dV0l;(CO{fG zU>c+#2UDRNI^i&w4m03T$U+9XU^28pJ4}Kk#2^Y2p#>7q3USy1hQc1O5v&7y!d|d3 zYy$nD0=9&8VJjF0m9RDJ4V%Jv7yu2hJM0hRU@TNYHH2Xs*cOJv2p9?5!S=8N)WBx2 z9_$1A!sbu}1ECa}pc%@b9LB(YFbZ~ronU7e4Yg1Q{b3i_73yIStPRDmI;;Y#!K$zu zL|_fr0M>-HU@#1U^Pr>GALLDr&WBG?+AYjhZ3FyXA_=?Y=I~|PkaYB9{Wk~8@e0uH4UAtKb-_8!zpkooCbxSUAhbV zR<@tc_JfeckS6>R`V_Joc`bgggZJPQ_!K^a`S3n`03X5v_y|6R?b$XCKePR1_?!dP zrPK6(~zO2oSPNWhHU!Zls70ipEdShlys zaKos|rciBFNvJbkf-FathZ-x(LYWw3qt#vJt+QmROI$?MavYx^Alf6*Y~C}mVOX_n z8L6sn3h~t>F(6ve6-N=N999`}49fimwrE%K&}fb$c2r}0x@gCku4K-nPykXwrhErE|3>7aa~hNnEF|J`LR69H znwscHrF}Zbhy$%Ikm!5}!RNu843CG>P`sV*Jyf)15{b@4S1u$aT3tCT#4DANM6AWc zD~CJrSgXbK0#2ovoYR8_}zRmVk)%X<$@kD8;rmDKaoFsX@+-&1$aO!CAYBaK2 zqmlhKR+gBJ_)MwUM&e>1aW@?oCLIrwUa#>K@ura#p=^89R5}g!tXG;@vm?!~_n=C> z38ij|>_)6*HzwnvFc}w(TrERFiOy)Uqaq&9BzO&*uWaNp-LYJECJ{GhK9=grQP|Bh z(uojnaAu=ziK=8ghR}43BBvWtg-?S5~g;uB=osb1<$`(S(i4En_V;>O{m=q-rWk#MUmUEZ!7zI_+7J zlC@RKn^0=b0w=gw&UUdq-A=5)38x8?+7Qo1B~gM^s8StqQRSN>qmf2MJV&H%4J@-Q zkEpodYz1u?HmYiPiE(3$)t9<2HlCc)^p}v7uTw%@*52vn3zh# zBj?6vkyoo-Wi+qySyonr^C_;=uEaE&BJVyM6GrE{Ye@0sm>E73Tsc}bYRYyr(UK-I zrdGQrzo}_7eTeA8CV|7Jj!Em{nplNXGEIpo-3i)IPr9e3xv5lu@%ECOZZ5}UJi=Dl z?v_b3?6hMwarQ!`Ph?DsKD9L5ZJ~A;zE<0-`$&MoJd<6%Ei8mxN$y8jf z0>)Ex61enyC&$?)tVWuTiVmlJxAry*=o1+(<>b_aQ!dGDwmXq=&8>ZnQHOh&w?wna zSS8nJE)z|5<+9eE%94z6-R2WwnU1>d&X#;BR5p$dt0tB&S#vIvGzxlPo)*J7&yp7H z<`XzF8lXfx1?VY{3TqK8I7yd7leiq%fun1Ng%0J*PGQDoY3Wa;_-rRu9w4qo>l9WCsT}Bb!Tf(wT`n zw+|@fEuQGeMQN?<`K*$7Seh?6bk0sH6C&1_h-N8N+isEUXv|S^kxyl$9;eM>7?KFp zxKWwjBtlK&$wEz4s4168b+ySrCKK&SP`FiQ9$|WMX=C_YNTAP0Gc1{t*^OsxU|J!a zmB_YSe`Q5Mvr_u5fV0vFmA9Ges3RdG8#|3LyDt&*fPKkg?4=RxJ-g0G+LL8zCIj9z z%Z};f#EfClHZznR+|-^)b#q0LSXMyxPbcljQ<+XP>I`dQ zePvSv{f#p?$(6r*Cd*mdfJS zRrS>Al(&a%)!51=t;s$1>7-@TjBFGB#Awv!++GFlL6JnGWY(`nM_Upd`J9o`*-_0G z(YoRz>E&1l@}+4GM>3}K={a@OZk?Zdcf*V&n${-I%h4m%N#iG5n z*!Xwq4pEv@lM`J&zfx`S?bNCoXQ1MBEa?o`I+Hn>_?hA0sajStrecw^Ow-b%ipHnLvJw9A?6;#WQr%QFavEzR zX2godu=WS6J>1L=)D8%f{x3{ok6nv-BX2>5A|b-7IM`>9Bi zAzFYX`Kin#OxMgzu8etdnH+U`a&o%u^rn~wENT8lZ_W!J{uQ%Wr#an>on@Q2Y2%|Y zBc`y*FBVQ`DgKHhd_R&ARx&5uiteO1lI$#?bS;OJ7O-@brti#jwu*t%kDAO#a5787 z9DFOY1>ILr>v6#qtsbW6$WNAmGB%g8WgsEHanvq_nk}rKoNX#36S-6@Wx5Syax05lG-rU{QMHlHLYQ!YSC|T7eC|z;L9zXRV7Hy!Q z=s2Vel`=smEsgX+(PT#28dFrL>6{8^naR_Wu^`?wqqDQZshq|ywqvN6Ii|nPutK!m zSawNUsJrrfx4OQj%I=BvH+O->GcJ&<`BIz_g}R#Te4Z1A7r`t2E z&#I-p8aRQi$xNqe>4GFSE}G0qv#eSM*KI6E)G}U_wMU9AlW42VG23y1_K;O8scz3} zbuv1mEOaiMcOfl+^R;i&HUwRfTH$mP^=1Lel$rI(nzfuqW@lc1dL_u{fRp0MVx&9Q zI#^D#bs{@6*OL|?jZK8bE+(1ylSo&J&RXwcs4Ctr6(%AxJ7*CpuTQ5;fzwt+=)ZH_ zS$i;|N$QA7S8CWQugx(4qD7azijrEyqByrsOlv0^ndxVvW<`cEi<)Ikvs{;w1!z?< zEKa6n3CO37#^dfR%N)A6qF8wFMx;9hF)C;WGrDro>5-|$rl6Q5#hjW>*BIgQwFj?Ja%oOMC>o#O_9IgC6;)xm z_Vden6;%^VI~t9LO;c(X^kv5Ex^R~A%_Q2@IaSc;oM2_9gDcf2%)(d|eTg|wEgjSr zCo@duU0vAcFB|GgRkkPSSkz_MiRmD+l8&ae)k)I^Bdj{Q1i5K$#_KG@nayPl4_(+Q z>3`%r$EDxv&W6n8BFnLkv7=;!!}K^ErM_@mG@ENorE(!>_0a@rFk}^?y;JUv=i3by z`-S`MhwXFPx@RP`} zWtNVy+7ph)obUOD;<0*j8!J@B-Srf!#a*o4QnT1l_ZDOZGZ;lvOpN(#X?d$x1ctF@vD#Go%XZ9WA-ibQ#Fr z%o0^#g-9Nz z(^8tiAtho?uPR-j*`|0%2`z&gR8OKUb+jd=L#%-W)j)#QpnM<(i5Rz>BQn);?#9p# zn7gIf@$?~AI0kBUW(Pr{T8d2+iylc z#CgEN=n1?23A_FYyZ#Bg{t3JO#oqcCd-Y#ZKG4m-gsp!GTmKTa{v~YvOW681_Uhl* z*s)y^K&oX?a8>))7i4J7@^azwV`LChdNe(>pnKPK#05!JyPpjF6sqR3=dqNHM;(;W1(EWy`G8;vyI}W6l?6Ard!Ck$L|a%%yR~|NSd8nyjomi<+&Y-(WX|IrFA!I zx=TrKXZF}kgUw#M5}E_L6aJt;l=TF&%w_Yli2 zJQxOM(RCz7CwOkoRdu)IGKoYj4+3;{cLuf5>0YfpwEP$(Uenx|aE2Y+L5U|*?in?m zM3z-axxrP$Gk*Rj3!Hlr?b(pIpHw@tDP%Q~_C!?jp3Q5xQ6g6toezIhB9i9H;s$O+ z9~86d&hCy}QqtT6M%amrnf#fxMF`GNRzT=5`glrN+>f>m^ z&05%dT#RLW%^!u4M$wHq6JR%5-_^l+HKxq`J(e|g6TenW#xMYoXDQWUWPMdlSGt>r z?Tj0_G#NH?&$3M>sJzObxXMb|U9z#CO#{1Zkl8T%^c1VAJcTeU znv1np#56+pz zzv@gTmC0|^P*cUSsx*3ZG{dTGeXX&VQC{a(T5IH1+MWtqzG9-4)*5l*d)K(z`6_KN z56+3T4!u>hpl+BRl&Nx5cx&Xw?Ou(7GWQwycV849!c{AFT3p23xl!AJpJalj7?=RhoyQBfG4N8wc{R-SVWxOjfEqI>%=R? zf&5J)nkBC)M%kG0yR|V{v`vWF$}FFAEq1dCVY(-y&6!ns#ssc+JXF(%T1QCf;#*xs z!-#PQ#JmrwSW9zVc}A-M%$)<~!8y{KGFK$=oC&RYUAdMEA~;&J39< zgxeTDPK(Y62XkbMeY-IlcEdh+QbeAH?Xi(5W+vaw?L5&cyX5JWxU+cRX2AH2RM(CT zXoeLv$SmL0I(v##j;#%xH*9KE zIPbc-#H_*OWH=;?F;ahf8l@)JR8}%#2_eF%OgJYu-@`J5G52xZTv4B^5>uUgvhI`! z#}j5P&Sx1hgR4kQMRP?2WMfrT@$L_+GkCDyM zDY@I5UuJO=SjCi-&g__mI#0TJVvLH^#XSL<1K)}aD;>q&rIccKEhV4gEP^;Gx_aSk zqste%4Qo1VGuZ2Gu-BWWINqET_2#6gx4}-SOTOgg36@`qt!A**I5zg}3&+sDe&JZ# zG-nf=Hkg;5m^^Xi8(}BeX)_@-t1ir0(rK15WC2my2wBWyos?KuqILq{UE^~$iA1}Y z*>|;d%NU%7Iox3*nx5=pa+S*@22Yf_VObI7VLZxEo`6R5To+Z7(!ph7g6P$xyqHVAJ&Nenq@=`nLG(2759221k6QVkB070y^m4%;Ec-k{j3R%}y_L0LXnPLN%c6b+uH z9-Q@5vzfD=>IT(=Xw`!Rt%pG+#skhui^{CC(sEgxHM=Ms=K}b`FxH>|PuB6m%K}fftz|>30U^jKJO)V?3sf2Wk@hi+sfrZtB3abYfRu3txE-vat-^&4UrPFZfa75c4 zX}whAj1+65X?e)sZJeCMu&btNOSaIo1s&1Oi9YOcSRb9-k(j|kdP!ZRG-MvtC=Gd) zWsb6p2Xt$zM~|+lFgFWifjvf(*wK-U8ilN~=PhK(-e)15jMqZ?7N3PEd=~chgl{j- z3oJGtICb7_vH3vZvk<2~3sLwiWG`}a!M7K=!{9#_pM@NY*TNi&*TNi&*FyI~GvO;T z=}Ck8@!B{$^4RE}JT|&3kB#nYaF2Zr?y)bgjk7P0jqb~1qx!~L5Gtvs)l0|NCh_Chu1xpKJ&;WsnSHKo%sYHE(sy2Q8xz)&n{o@_R6eY!E6I*%F4!wmWwmEJ*- zK>%~AY%G~^(Zy*nG$0g*R~H&0Ytd7|QnyRZ|canuuZV_%%D zr?n?D9qAO01UhREjBPccN*6f8%lp5Z2MSFjul*cB|t z0(J$JHqa@ zAT8dIGR%#ow7gO;^$lC;WyC-Z#BU-RkC8W1h58{f?&QeRR`%L&{0YCNgvIlc{RVRE zD_7&j7KzEJ>rb0`r@&aE&xC1FJvo$a%yjD^d9b2`R$E%!{0g7ZnpeVEw&cxJnsl0G zhB=`LtLHo$ zJTb%5Z({DUh5x15sAM$d7K22_4zILD6x4EuO z@X{zxolt@lma(=Dvfb%)ibd`?FShU+iAiIvPFB73ozPHf8jH~8Nx}M9teaQ!cqD@3bJ8!VC506F0gdDNnPraL)~- z7!R*{&M2cj^FD}o#WF6B39?kl`;huUALmOF&U>vq(?ixhrzKwu_QBRH3$eV{9>`O? z)A>3O^-rFeZy48D6B$)KDpV=8J0{~LNpZ&HBPwg%h2l2ejm@W2dQxJ(6d9@WG>Lic zUB~jS8^-k>H^f{wggtI_{O@ria{%i`!g)6mvu-4ucOx-3H||4;&5iCM@mxxN>D%fh zC#pBDRc~CQrwHuC);nu)b((droy~`=;Z*CB%QPO&cOzug#VS3Ylc*gryqIT&Tg|tI znpie&Xljz%8obicz)cf-G~=6_+@qP!y0qwJcUCW9(aVPh-1(z?(nMw_5t&0;PfSN0 z3p1bO#MuQL&$|=GmIEwcE2Y*F3)srud)kWDZ!1p*H$~)*jT~YkTOUoN`C?dFUIvbJ z=_h7}3@9s+fi!oTl3g-UYT&aVEDZYMIbVE;EV6pihm`ozSv2*f6ZfZ=5A>&(5A>y% zmiYHi+@EfiUGw{AR_IG-TIlmnob-mKhU&_i;WgD&p>&fwou!M9w>QxobePX_@y1HL zYNVO*PmZ@nvaxoaCU=Gbz1YbLvEQ<=KhDll*>NySWye7+&MuasJ7FoIz`^+P=eO&5 zFv0Q(*!MW7#oPBhxW(K14^rMa%JH&cyp?moLWpyOCSK@jqr}~7*n3@wzR(rt+6S&V zYmf9@b=F?=LI1Jb1iI81UEYLjjCP{3nQzCKxV?wgRN2g$Pu?t@;x1`d0Ylc&B*9}U zcZlhB3;1*rF!k-()7OU0ZYS~VY?dK`JRvbUPO54^jWgmv8B)Q+(w+G& z=#cyt^h$mU)06uam8DzH+mK~{PEh!Bg2JB@6#krug)b*!;me6w_;VsAzMM!Q`Enu( zUrt2f%ZVs_IWZRAoEQslPK<>wC&ol_LT}Eyobu$43KY3m$w1FK66eWXN|LZz$l%F& zf5=SSWFzxxs!pPcOD3=r(;~a`3z=_~6cv{^D`+H#<+cm2|8{rq6oWJQVmlg>#cfBj zZ#$bG=QEskA+GTLiwo>u9x3u{W%nMKXXW#4_iwhdJC{pc))_SuCjW)g%(|N{sTG&V zV8s~oPcP-h)}rh0Y`IkX$sg9A*pD7+fA^eAm2o3x2qkANVpb8Qgv{Z{I4f*& z?JRDZqSGu(j%|JmZ7h@-I#|&*_c9I!u z#53AVG3C(*tC3Sq=VsOU{n{eYz2U`Y<~k@~m*xejPA1i|l2+h6?X0EHKb$j@#$ZVt%92fV<@OW^VWgql&+P9W?&9LBN{6Fla1?1vBO(qE@}eu4RQC2!&H z&SZaTQeI~WkE>`1>l=@b$++eQ$A;Si9vfYSF)vQCJ95?3&b>P4V}YTjrjcO{dJ^TG zSy~85)S$e9-e|t%5NaYA*08AA-E{7nc~e#8wW>GEC}vwH=-JehX18=yR8YPO!1L#P zNJ}0=cXDbTrsXZ?x|(LqyZPp!+Kl4mR9o!`^TMUR{5-y-yu5fwXna}O;Lu3Eh#P8` zQTC|m%pgOPr$?AQ5~;4N8d)t-?&h^8P-xVNm{g|Iqg;zfIy>31vT7_BC4Yv!iP9{nE(CzZRt(>wXjp1suEYpyAo9w|eQEIpaX zQPV5x4v?~AmBi#(qUIosqEVkQkta8z8GXJ)nvx2eA~)3C6lodqDcnZSr_e^YDRRr* zO_A2cO_9N^n_?D(%zhZc=5s(Kp92~0x;c=MuA2i%arYxB?tX~mb3i1Y1KGySfowxd zX!6F{$>%^KZVn{k=0GBD4or&8fl0ABkcgWDiMTm1+t?hKZEOzoSrRIvJq;WX)zOxZ z^GK>mlZ?A*#-n+VRnm-0H%)!=h^faXPoH{x+BC`D{E$q)A{5iD|zy2j`Q_c zCmZryYAcKN&Qt!L1zvgRng=qH*)Z?8hx3~?nTIbUta0e$ohE3tT%1|+(5D&3p)IwR zPQcMPR%i$qjXaUScBK&s7>!)~Mk4_)r z%sDRa4xM85n-$1cX(X64N5f7%52ComYjo~IByRqCn3A6!rcNG%rjn^e%uskeQb&}H|EZRY$FjjMVd2nx59dpH4WEWJ_T=Xia2mnBqAxT ztqesM*?~@IU~yTQ6B^8OQ{2IcRaS5_r_%Q%yo>>4wPJ>(H#+IO zi^Ux#=T+Wt-k_ z$Ql;kowu&c0H>fWLxZ5Ld9bgb@nmLDCRLh$IUQB(pp<9mi=8Es{6eZH7ZJAeFX0_#BZMoGB^lArM?I5pqkk#@^PCgHVt#*i4 zJ0z4$B=}Sn|1fOIPBYJ>N&Tv+uC8V($x+dc@ctuToJwVQk0v}Wm0^O{7B*i6;o4?g z(MiW(uNPg(B(+$QrU}HXu75!rBb$$ zzrQ%MUy<3~Zg+vE&sNEwbTfaq{DgqreVYD|$`!C%6;2P>J*w$Xs$5a+&I{N*tLZPQ zTuJRN4cNV;=~l`ytOnNv?A}wmPgJg=cDDxXe$(_7KXb}ajzRq08?f6{(|1rQHo_wT zyFE00xXRVl?%9CdL7F~M(@Ie9r?cbKMIxh6JpPF@Mv%~ZQ%Rj!4NoRilAc4uh% zER}1k-Rl9n*_wWt%5~K4t$^K4ntrRweroq_!0s_ke?sNDYWIG??lnz+UFCXew;*8m zji!IEa((QiZhaE4`&rYi+yEOn$6o~OepfpyH^fHH@Am<_RX^8yqH-g(`z>I%sis@G zvD&S)uK#+AsGXIYsNLEDyZzM8%1za7tUY8MXJrPR*K&9Rem=^wD`Ry!-@ zZ^lcx6bI~%Q@hhtZi$Ut!+Qkm&einUDz{R*eFJt^Yx>P9w^qBVfZbi1{-DaR+SLT? zp3w9cRc?b_q2E6>{XLc2VkFmQUBKU`n*OcI?Fubuv_6vr`}m9 z@9~J;)d9P8)Xqv7Ad1~B0lTo;St$b(vAZW=SE6=S@+U-$-NOO9;c924EZ2&^X99L{ zwd+(l1RLqoUkccrs_7T1l)ud__2u<|-MyOrm`eGZ-C{RCVE3A)zprvHYzqCp()3?c z?p??T-6~%>=VN`9`}AVBwWjZ;a^GI;hFCu;hhit!<)?w;sMPe)Dl4#&a{ek{*P`i@ zR5J87{(cJBb!++&Dj8B6yI%u#XKMQ8DrHbD`wgw+o2=C1iVl;2-^v0GKs*HSqFI~m`f5y;1*y*Xg_qNZD!RDZVz?A}y6D<`SlT>-oKYG>tSwYxW9 z_odqXq*6Y>E%o&NfL-W2r#`K&(ku>Q7yNCY>07DfPw*7{?X2k~DpLimLZQ7h-Aehx zPm;gK1Nm!IyMt6t!A8a}F9ht`G(D{{gH55|3{5{yrF@)T&f6;if3r0GT$S=%ob31Y zfZdgvezVGM_4i)D4)s#~?omHasGP=DvR1Po;O{j}e@EqXY-AkvdBE-?P5(-z`-hLP z_5Oa;^xst;>P_^7SNh(mFKekh%#-%t1UFPao2fhkCo*sRE^r*XYWiL(kHkjWjo$-y zV>R8%qp*?k3$5=THyxyQR?fsk&hN?ryQtcAs5}}QDd)8UcBg3ic`A=lyA1<&cWU~> zDvwpWEdzEhX!_eKk5juH0(M_(`mZXFSG!2SZnYnr^R|h~6R?x^uRLJ4ho+BId7|3w z8?c+C={c1rsa;LL?kr8eK;_A5*A%e3Thkv=d5YQ{60n=E=^v{+6+3A++5&bf{OBC- znkrAjM(RsCV7HT|7ppv7?Xm&8k(xeEHDK4K=_!?GVkhm(jDX!SntqPTS=h+= zI5J>&lcqnQ@+`GGDPZ@qrq5S-w%VN?uv_jYr(F7}JV)(j2keS9eVEE~)$ZDW-Cs1l zOXYcLH#cB+vZh;kK6Y}Q-yg7>rFK?cpmt9N?5Lc>%kd)y~R`)b6c--JNP@ z<;80Ealq~&wX^aPwfi<;_oCWaIU75vr@sa4-c&m)FIBshHt@GsAE}*{mtiOMW$l37 zk7{S-tD*hzc3 zPrz;`wJTP6wb~62*bUe8W|h~dU0uL#il!f~@>=W){Z7>MvsGS)ksR;XfWK=s{ce@l ztKEcv-E*4$hRPe%u03G)wWj~7@z;2@2S$P|F(yyKquxnL2E9a`+#R0nxwVSE(cI>3S zToJIlRMV}zL+x$|*j=f1H>)AUzW-i=+M-|L#bK;=Cc zEeDSV{QaQmzpA_!8#y131?<-Tk5dmeQ2AGEq@Q^*V7Hm3Z>{n^Y-Bw2T)=J@O}FxX zY^0p$1?-B{&dLYW?)8A(K(*UT<%8JCbu>Ru+YPUnc?h>`L z@(JvuzuY}wceC1A`J~$I5wLqm?W}xC?WzNIe^)yzpH{nufZeBRXXP_$cTm7?)nA-? zYUQ(P*BY?fS?#QRPVJ@y>_)1cmCvi);Q_lgwX^aCwL39jcbM8)`J&pL9k83Fc2@pf z?Jf=2U9Wal{zL7q57<4Zc2>?)yE_AR^VH7Dm(=cW0lQDt&dQh7?%9CdioZJN!^&6G z?$vc2>TncDn`azE?Xd-&VUp0lR*`Ip@R5chqiJ zz%HV8R=%rtwE?@4YG>tpYBxS$*QRz>&R4rw!0vdpv+{kl>k8P-Q9CO?P`eocyGPW{ z$`94})KUTYI0(OJd&dN{JZf?MCqS{&c zsoFgdu$!rNR(_^-PX+8QS34^|SG$)2c8{o?m0zgc+X1`x)y~Q<)$WskUFZ*|T&(;` z?Y;}x?W}hHhrKrsuc|uVzt5DB0AU^jhdB_2gh2)w5|Th70YZ|aplA}3K#)K}5)d52 zjDix7Dk^9MtW;4^v_-`>3@R#M_g>fg$9vkn z@3r^yS@T-YT6>>E6#W;upA?r$PV@_Mq3s&Z-#l`nwd7hUZV5TjFUfUL+$M6OUy=io2DZXj5>ee|sqIesZGC$i*mbFFDcXmxJ#a&HKv^}{S6jw%0v;(;nio2bhXh(AE6n76f(N5&u3>iS{7( zrsDdO6YWXveZ`F@C)$hLCyJX)ZYH%ixz80hpZ2BHKIG0TZZ++d)M#=)DDFPmtEhd+ zxjQuUlMm4@+K*fl#XU<-G=^L&#hoN4+Miq}#eGUnbO5;?iu;M2=sCe! zkQ2Rx+&sm-NKSM(xiZDQPfm0Mxf>K$OHOnoxfP20ft=_la_bZq?6Lb-^ipuqt&?G`X#c8$wQW47rCCH;tU=SaOdmZUH&bapeA_xE16?&1TTlqgrwIlM_uK_ln~7 zk`oq1U6g`B%%L%%kZoMPBe{N55=t@Cpwv2jN!~glUt#8=aFlrxEk8eQj5rSQd}+Vu28$5 z=YuorU=PK$rM)wC0lEH)>qGkhYB9NCiW^D$WNHbyv5K1`=};Gvo2a;(XkSMyC6}(a z2WWqsT1IY$;ttXN2DO~rEX93ByXYcv^Az__a-xgLl`HNmaz9e9BX^VHLc;9+5?un$ zgMM4BxEAC@mx43j6W^w|F63gV*MoC`+n~5~+Ow!PfW!YC8x=R5_LVe#+^e*|PF+FnQN^92U34Y6ClvPqxqnbsfiwNPS8?Ca{xfwoI5W@pDJ~@39#`Si zHQ>zm@dp&wk@jxXwd7t?Tr};Xw}NZzGl1L#>TTf6ICxv7mrc9qI&fwjoKoCeato>J z!I}D=R@`dZMQ;aZ_Tzt7+$M56sdte3r{exXyXXdT-ze?`InhdRroKNZ?k#ekQa6%w zbZ)qQIGWh~){?r3oLh0dX&*tolU%Ukq`yQrgKO+_1=E>D{T(6m-Dee<;q7RVERNTMFiB^F#{c)AzekKo@nlJ?2e$H5tY^{(RbXupp71UNIU-c#J|v_DMUL+&HR9j5&~>XYQoD()-V zMV|tP|2w`=+`q|*?geD(QLDHg$caA9e9tTHB014#z#0GYz2btJ+5I8MB_eU@C5;w~d6`W!g3?)O&QmE=U9Cl{-@a&n^k$&FH6 z1v$|d$R#OmJvq@olbfQr&E!P?LT`2gr#Y zB3Gff*T{(;CU=|SJ|rjlBDu|q`+}V4OXTiXoTs@xPDNiPw@Yzt$%!5z_mtwgk`sM} z+wH*OL7_d9Z;Z;)%NxO>TozDdrjxb5Ub-y+vfanFzweVg1+ z#T_Ci`VP6VihGls=)2@n6!$SX(Np9y6nCDS=wHdrR9r};J?=%{BR5-dEy#(!Pp(99 zUC4=^CU?E!29Xo}fZR&OjU^}gH*$9~SjkIk`y1wIe5bj$B8@^&}_yPjWpKHUyvK2xM}1>YsrmQTs}F`FUh4T?s{^fUy-|9ah2pm&y&kh+;(!JUz595 zagUP|{f1n*;+`fa`YpMe755T3(SL(8`_r|Gd!O7H>IHD-xqF@B{z<#&ci_yw|EN^l zMRKCwleM8^{Ry0@?<0!KBq#baxyKZTsQ=OD zYNl66H7`5O`_4Toy*0FNq&fka@;#-v2WWqU>LT}y;$EO#)J<-m;$9*r>LK^M;$A2B z0X2x+pB48t?V`ct4k+$ta-t#N%=@*&ii>Dvj|0(Aaz_-`iJWK{xuc5fOHMSL+)2e< zLQb>^xwjNIj+|%&xl@WuBPZIF+-b$-k`rx4u10YseU;mYir?at?39^(~||_hHm_ zk{Sb#kJE$mJ{UALK-1$rUQ@B014G zaz%=3)7BmbqJznmD6TI#(IMo@6?Z8)(V^s)C@zhh=rD3OD()I`qL+}XP+TcF(c$D) zDsCA$(Gld{klU@eL~^3z$?Z|x734${$vv&OB66Zh zc5{2kaz_+*n4D-Txuc4Emz?Njy< zHM!1;TTX60^%`2TY;$9{vnoF*~;!cqhokcEIasNY3G>_a+ z#W_0K{U(}EZiM1mk`pZ;H(GJs$cfG-7q7U%Ej!u$ zD_R21yuT_`Tn}=h3(3t_TpT&kQgWq=OC%>+M(#Sr%^)XQPVPp<6_FENL~fblZYC$X znA~c`Z6x;)^*V6oecd|6Jxlw`)FtFLD(!+4-+HOelKuJacgM5oq8*|j}`YQ?fa;=1t{N(w7)@J z7l8Ya_H)$r0l4pI5AI^O&+P%YR?9Pfqj?;LJE!q`1xGL?0n{v*Nar6MdB28pZ7-C%T*E zt5n<*W#bpC=cpxGZv_`^iNrE}NX_3*_1>?pku9e2krO>YZkXaWlM_8iZj|EgCntJ{+&IPUA}4y7T$19RA}9JH zxm3mNCnx$6xhaZ!iJa)m-LJUWkw?lCyV#9wv!Y6fZPGa?ItJsH*zm2 z?vLa|KP2~>;*OCMts!?(ac9VhenjqV#r;4|^kZ`GDXwJ?d%lT&LheJw^(7~IhTIv& z#gh~LJGp--?h10EpOX8R;ueq-{fyjs#jPeMdY0S;#obR%^dIDYQrsWORa5^5oOxg3 z>e+DpeS`LosGox~``uv0U7$Uzr`_J?$b~7c2kmjxe}Zf5GlKRB)PDuwCewZm^$T$3 z@2W+pe2ZzXpw^OWr?`!@Z>N4quDjy)(teow6*#jWAE3CmY5$aZp4>3S{hRjCUUvI^ zO>T_hI?&#a`VF~c#a&8!8ueRplNEP0?F*>?Cg)S!Ewpc>UI5qFX9w-iP`?Yny-fRG zsow|SKBxUB>JI_9=DqE9>qh-C05^p8Wa>`=xGQKcr2Y)f^zYTGU6#^*8}%Z&0>#}& z`);b4MAq}0;$EQr6x9jN%(q2~`;qqcee8O>$SqOaDB9DgZgMv$uCcys?A~mqGmjdC z^vwI>oBzx78q1@xdnL?oDK!-Nn)X|%@?B2*I%*iX^@`g}`!;Ggxy_3EJ?&3Wn~>Y8 zxP7!Aphl3}skm2Ze~a3b+-}AFjrOmo&A^%G_@@;Y6m9o^D{6CcFDR}*?V^#)_a()R zBbP>PLGHNXuB2VGB{<`E-%;Ema-yxseWbYC$%(cGXX<-Saa+lWwjuY8;vOX@+LqkU zihGWnXghG`Jz+?%hU?(#AU9iacaanA3C{SnV#QUF6YT}gJjX9m+#}>fdy~6far?;CQ2Q|7TND@C z&mIS{)M#?66z8Koo7$J$I>i;!zJl71+(yOSMf(HP7;<+j?n&DBQTvnIrnn=tpP&vP zw?lCs&@MUA7R<_G?XzCHI8lqG=yZjU)Gr;-=A_M;%P=dBrWE zU33UI<6jOau8N%KP;y5US4~cI7`YRQt052S4vKFGP&y%x00Ob6mmB!?jCZYQ^~DT+@s_~)5)z@Ts65<)M?<%{^d@^ zeMh@1)^48+a`!2&BkjGYndEjTE}r&6Y8JUi6}N@ZYMd>LUKPV zZa+EEx#XOE8m@yU$%$S|&ZD?<bL2#qkQ=DDm&u7PB^Rf-cgcxfPj0B zPiPliL#|SB-;#3;v-@u?xW+!sXzxh9H2~L}_QBNK0&rt#7hMO=jF)><`7+3ft|zxs zakI&Z-cIfb#a&PC4pDIC`T6ko%*`~+-%x!q}~;P+eG^|>fPW> z`_-s=JWTr^sawFA=lFjp?k}{9-ox~26?cN1=)L5=Q{0E-MDHW#if*``e?d-kE4e0$ zyGTxS8@bksYd+lWFVXwSMJcW;Inf8m^;X;UPV^~ojeUy9iS7-+-AHaT_2~fIZrTr1 zp9#R7ru}Q`9|Ld^qwIF+O#Kr$^Ske)wiL)ucZA!>OpehihGLoL!#tbD()@XKcyZf*HLj7Xb&50 zx8sZCx+|_D?J?As$n{g)Xxb-JUnVzLao5mZLOnuml;W1tekb)6a^n@ZllEt*uadh= zaWB#SF7-8X8Hzhg`}fqN6SRxI z&3tcH+~3I6Qr}^En-$l3tlb~c)OX2kRa_eFqNkYePQ?|H+d};-(|c5LCuw(#v-5wC z++M{EpqPuPcyxPimRZ#iuwV$R~7dH?V^8UzHcb*C^^v&$^BJvHRSxt zd}|aJ8gI9U=ttzvDsBKd(T~BIaayamapXilVfnsQ+;noHXPEC#imM>Ei~4tPX8s2C zYv`YAXb(-W>+>nOW{QiYeLD3sa_tm%3+V*M{!S*6a61>W?l|d z+;MWX)X!PIOBB~)yj@Sxb4+iX;@XfC{U_W(K3Zvt>nkQ4nj0QVPiqW=!S zoggQAAprLwInnO|a9@yfCfeiX`v6=k+B;K!2*CBCJ(l_-I5VEFQvExc_GIc$0n(d7 z`xVrmnO>esuZ;E^sTax3Q`}v&S5eK&98$gNP^ceHzw z>~?mOTc@~4+PhOddxJk6nqz04Qp}1n&MMJ1BWkrQn~?x5n1kUK_=0N2>(4cbppn+D)Mr2R8$ zvjAKz?cY+H2jG69JuKNC2ay4|wzPYxEdp>cv=5`U48XkGp16FY-0d@h_@*)PeS%)NbTXDsB+%qTR{8ueizN zM0=3?RB`jjiS{J-rQ#NmyP4VxTw|X#v~QsH4#3?_`!;Hy0NhU6cT=MSaL>?wklGiV z*`NNX>T!bh)6{x6~MN%@pUJNWVhuPp+NfqG<0&9YD^jxZ$)XQ3sOi ztGH>jUqc;4Zm{C!(Y}NlOYTy|t)hJsHI7`8;vS%VH+3+%$%=cH_Lrzb$X%|uH)*e- z4keeZxPQ|AJ#`qlLdAuo*!|I(dI`COit9%EK-$uPO0QV^E&r(MR;9jQvZR(f++*#U1$AUBdYK3Z-uvEL9MaO|N`-nRf z*MgjAJh_dEYe!Brf!t=r4I~#w9Z&9V#f=j?HIdxCic6P0c#Z4zyLQMu|p5Lkz zS4I1y)Cu5>A9_e}f292Ybt1XP6?c^Ox2Y-Q{-n6S(f%1Vm0Y#rYH9zDdKtM_6z96k z?%yWVN#x#8Tx;5+sA=ThS6pw}2T>=JJEOP}k`8qWxqm9|O4=7tr;__taW~RlNlhnr zQE~Uv{uFf@xzPR%*M(}@-=t=cYoWMLX#bX)Nv@;ff+yMS+=-e+u7~0V&_15(BiCPX zS+vikUQTY9;%=b5l6nQXv5MPH`?J*P7o82R zvCkjLiOvbYRg)7f48XlgPIPVn?k#en*9PGJM(zxC9ys&f;zd>8pK13@vByCXxnqj! zN_!vbd~$CqZV>ImsSC(`pty0gPox%;`@7<%(mtJ9Lhhf6%cXrTbs@QL6t|G}>#3#W zep1{D+SgIb$OR2(=uhvY{a$K0IJ1vvs<_8!7hMF-tiO?p+e=P#F*x&HrH$fVAa{Uz z9n05AaWB$-jJkwe55;{<`P z)y%g_abDVEsB6GAMSUMtTr%xbsB6jXQ`}Xw=TmPb_oCt!(tbVlHgaz$ZVl~~)OF-O zRNOY&e@|Uc?wsQG(!QU1JGt)^_X_QAQ12iYJg}kP_>lIq)D7fXDefEEf2LNF^D3@M zhTUJSsT;`+P+T|KMK^&n|CD}|;(C)CLA?{4@mHf2mrZ*fbu&1#&Lk+Vkap4EkxNxv zB{|W%z!^U@O>x!aMDHedrQ$A-6Wzjm^As1IX}6!~Jxp(&;&RA|-b=1rad(pwy$_u6 zFE=S}7dg?bEZ<7Sog^o^jrp!uoFmJwhv@xG?{|ueCMWs;)7z%F>EtS?RpfrJxLvfL zq&`UQ3B_HY-RrZowEAhP3^PO7MF_}WUJdlvy*_+Ny6zA zQ;?W~+&-Vj=W+Wy!9Guj&lBqNg!?>Ae4+lxAxteqqJ&6lA#O2AvLP&jGbETMLEO%m zW^PxoIfa>1h&i>033hs%%SMOzOXzl)`z_6>xt)UBB14&6n5YycObQbwIfY4K!lW=^ zQkXEQOPD{su$q0v-v3 zNFY=K5fW(1fGfxs<%??Oi)!wRiu6Ub@I|%sMYZxpwf04MeNjEEX1m+xbooNv1vv73 zo_;=U!aq18q@2zOrwo7y|0s`e$`FWf${2_UuZtXB z7dyNzdU##@@VW%T{V9aCW--FrNT98hEUc}6Jhqd2K{8!~n%O)CztxIpXUC|BsKbPLhwmtab^VVUhlT z!yghTEYe@#NNM!2NJ%OzQW`xhQc52d>8OkBsEh5Wi|(k4k00?^UJj*j)JwrXc_STl zgVNubVUhmMM6fPhe`n%uUAlFh8R@J`*IAdYtFFA_Ur`)aUAnHi^1ABMb=8&ERhO=- zUb=n{7U{BP;=h}kbj6(@C@uy;88`^~J3Ueyqls46ORg6FHgmPC3%05Y`bTY~%Rg=- zU2W@tc6Gt_b-@mGLGg#kxKrKT&UHcKMX)-dWbV4=bJumZyRP~Cixk+p=5yCIpS!O4 z{PP||t1jK3x^#o`dFk8&j z#8nepB5ZMR<~ca?9Q29~$&3j*n6iUOJD9eEi949OgULH2{ie*P8MQez(pD$)buwQk z^TlFjmDb68oy^zCe4WhKC0?Aon>^NIE54iM^01yB=7;sfvU`}Hhw(j(?_qoo^Ybu2 zkEF+XdRR{n>*--VJ*;OC^9^FYK~A|LH4l=i2T9$7r1C*h`ylbbK`y2f%w&S)n)L~0 zeL`ptp*@855V5nqA*^o*>l?!Q%Ag5heP!5$uwEhTzYw!I!l(*qNo_?nYpA(zR#2nu zsO@bHW%!dgg_8>>7fvpmToZB;qU0mU$BHsutn^2$^hd1pN38Tm ztn^2$^hc}=$5V~wg#Qnx_mW~te#p*h>2U0jQ+!c9eNn@GQP%P~1~HD0v6di+@jS=J zSPRGTF>ccq6066&W>t$f$8bMvcEaK87V-KD>psl`L?3oc@5dr!;r0J*5d) z`y>-+V>XT^&{hKNB+y<0eI?LO0x=T6Zqa!E<0I_SkFb_JT)D&0NNgu*E>Wih+!F9e zAY1}&|1Ecr-1F4&eygX>8tmsn{2@~cYg_AS<_|UZhg$eUE&ZWZ{!nXwsEt3=RzgmH zC7dq*J%9O}{_;8f<#YPW=k%A)8S0PgFR9bt2F@maYlJ`4)F1NK$my?<(_dz%zs%0M zGPm=`ZSN0t^oKh6L!JGhD1WGnKh)J9>g5kfSLZwX`0qvgLw)_Be*RG11IGaWy@CGF zAb%* zoPLfu{hV|9x##o?n$s_2PQOsx!7T^wIb1kkaCmUQ>IlXG#9^2)9N{>c;E2G{6h|{0 zkvLl5Xo;g0j@CHZ;Ao4Z9gg-mI^gJtqZ5wKIHGWL!O<0m7e_Z7-Es85(Gy269KCV$ z!4Zw4FAh`k7##g^48SoE#~>WBIO1>&#xVrPP#nW>T!LdbjuALU;uwYFQXHdkjKMJ$ z$2c7EIM6PR@i-E3B;iQLF#*R!94R|_%gjdFI5-i7~rcv#!`H2h@MVUTScMi;DGhg+;`Av@$C9x!71w zROUVx8;8BvxUB~%bKg9b7&R?o)KtN!^^O2)Dqyb7V~A1nplZ}SfEYDTA4biihf(v~ zVYD@>f*meSA?DQCoTAJr%$!2asf#&vH7Bn*bu*`MbLwtRJ)|}dzlhd4B z=G5Gr+M81cbLwbLoy^H?PLbx+!kl`VQ!jJsZBBjAz#gYLxy=bJ?(_ti69$9R6Jk!G z<`ia5;pWuDoFecF#^Ha<>JnLS02Y!f<2V1U)V9(x#i?7`;Y@bp*@eAvlwaC+oXPo9nC zY1qZQYgvq;Qa=2a5CxYFM;r&**u_M7L%nG@!v&TBycfzf3E9>0aI=8XTZLM=V z>paUk=UL}wPFoz7bfMTcyV_S>d1dA6>T2iN)y}kQkQJ|Muq`2$cuK9sQ*5NQjkLCM2y@~Y*ffwc$hr;Xee{BL zAH86y^?YC)Tnm>kitmm>;p*@*skzS+>GQPod0P2At$m(0K2KYpr=8E!-skDy^K|ri zI{7@EeV!o?$-EB^Wh)Jz%|dHDfDShLrVI)ZDS&ikd)2G5H5#XSp*_0)r$F>z{TQeli(R zcYn}>mzVM?%m1DSTl`|z`b-DrimiShZaK)Y_PbCQ=92YN)C64S?WhU3CE$@jkOYDy z5F&w434}=?Tmnrb5Fvr45|EcZcm!G&6uCNOoaOMGO&suFPCSsAvvGmWCUA8&V0@ml znFTbnfMyoZ%z7$vzO&S2J*RuDP~AQAyky@q&clq3(Jsq>Fle?`42p9KrgI9RhEc<* z9jTqDQPeKffz(0NIO;P2$$2W03N3aidV+VJ7?WnLucJfL1$-ceOZ9HAOXxYtVg(GFGUF0 zYY_rLVzO5y+zF98p%Ms_K)3{&NFYK2O(oDw0`iU=Zy^W86qLjiEcAJDeV$o9PoB?{ zAJa3`?cYhs!sQY#;}S395-;NtPvi=xEAcNwF6(O1iDM0hXi_Zgmj{I z?zgP-37@mjNp(@()F7&d8cYp=T0#5TKCfs&T|#f~ln!%7Vwjuh!s%cJ66X(g5IymK zn6SmQq(KN?S#BEAVEACy!l2)7USHVvtoJYeU|q7fk7-*6HHcwed-&s+ZFk)THqvz$ z{+vx}*izS7ux!*_;H`h%MOaL+wZ_=3vwVP6bthc|)NTs|Y~O*YOM=b?H+aWvH{heh zHzLRzV)wfvzo()zM8lZ}0<6LEErZMa#;5)#uXJfidGVm)S=Scim6sXKE}A=QV4g6I z*q4+R%=QBnvG(s`)>Gf2ZlUg>?xdch?x)sJBjfCJ&Qg00wy%%Seu3(ty)(6nT0(U& z-e_tx@83v`;QbWpP~KllZO{8z)OgOt=af58VPa|ENCzp;-)PKz$5nLe1Y|Gapkn^LL%%q2})inZMm+%45Qh;4tMeVe>bbOnFS$ z{GBCJ9us~Hhly+c#*q1YNhYodo4<)<;+nAeyGJIj37fxdWa65z`8yTnZ)CiQ!~87@ z^LH@J-{3I+p2d8O#xrcx{Jz}$8w^us^BZ#W?<`E%{7&5bTM84-hMIpbVZu`rGt;v( zlQS+)O-xRknut3MKWI)zB#!D!?D>XbHTW2t`BZaUTInTbq@^a=_a(k}xE&uwZ}4f) ztH>d?-HJaxAu}~GBRMnO{%?I+`7=I>-QWYn`lQ#7Z=xn8WF^2N`B#jv(>K3ytN)4R zMP>c?nW8&_$TYfPfX6p%FIg0@?|=tz2ZkTUVl?J^NAcXL`&JGgZd#RnjTT=3tcCZ!#l(OwZ}+skK_ zWfYW^6fY<%NXjkGb(GDWvmm#8QE5R!(VXJax#flP>ux#n3QEh(B3Az+3G-fsxAlv>s-cO-EMtjYrcKa?aC@q^?yueXvRU*HjG&SE* zQd*q9D6b$tp`5qN3d;PUF1>Vr2NvpDYTbJ{a7yX!&$UT`^tFq zlFO#Oit$bTO#emGK3D9W?fRJ}N0p3ZmZM|J9OZ>`%X}sIx#b0p1qDmW87!N-U`|ni zsvOg-FJAiLSXF+hUmw~lm0h}dFzr%5X+Np|7-g6Gd0B`Q+N)T<#koa`3I@(8F3xw@ z!P0`o#q$c}YSDsu3yQB>P`?HZ!)tjd<#*7JR}Z$wkFnREA5CblVEv5U%nym*LB%)4 z!Boe1u_k8SWkx}68OELdR7v`rU(!C3{u8u2IKJ&l&ssVq7t>xYCKW7|bSn|4Uw#Mu zy!aPmuV4PAwC8aC+w-EVfP+Ua$1g3%oM_~e!}wA@UH)Q8pY10JW-To#@XxVE(v@4) zj2}6q;ry5OIVS0|{FZ-OxTv74+)-R&x*@kHQ(TmlrVLDG;N?1$&hkn5y|l;B?)8`7 zO1!w#>VVP$>nd$7vSau+rj(@5|77<>Kxt6=^$F5CZ$e~@b2L3=#QXXcOTUzuO` z(k}A{rA&lxfRi@!Kf^Bnuar5S>!i$o@vqYUDYQ%ag}G&gbxVQ0`kAIm!F`8)iP36Z zl@*lE%{9x|EG&@zk5r5|sw98$|FjGCIPEfi#s5Y#{tE%@@wC52yY}BSI|8jgl7FD} zN7`SnKl1#ZS5`8p7^m#KBLB0y$@3R>xa|7CFYJZJJjl^B+%d}QNS}&bT4Hg2!5Bw> z+u@8sn!kVj?-zf@k^cq`sMO79uQD(GpOTf8J}7QrEK>Q6Ph#-`tcT?T%={hY%`GV@ znrpi|t2P5T37UormsYS~PI=)dZ?F8O;U@K8l;3{4F(TG6bm$OAVR?Cpbt*%Z8vpd_ zS7rwA+}S4I0&i;4sBj1FnGxmn4?HwQIBup|n=h{!e_jJLyp3^K|8Ax=9KH5LU~j3rGn|)N_i8?<(A}E#x^s(=dCN8ol6!rDPDVPQWsBFQm@jDC|n%InwCMy6oi)Fmio@HW=YY|nZPy=XyMNkJZl81@zO3YI1o&&L*V{@k(x zM_xj`i`?0>=N8Si7W>4)+y!$$mn|y6kSNGUFt4Dj%(6|LJry^tptUdK&`l{W%EzKH zzj$%M1f-5oIyt@)h33 z?oS^UJJM^$LHeY`%;AoDh$AC2!JD3udbvqvQt}M@+BZHeHPO0EuL~wA(z;H_NSK_Q zm7J03NKW*oH@vEsYEnvllf9og?Zw(tL@0j z@MUHtC)KaA!(UZhFm#Eco~D2-!$LehY&8R^LmxU4)bXG8nJ+aXhO@K-$y1WNj^rh9ALVfAa9RmdW;CdQzXT2L z)~{o|{%NcW8g|GpTDyK%1R7}d82_Mbtd}?rCudqC(%WOWHxq9{(3O1Ihk@>IEDm~q z^>|&^y3$a#!D>OPvFcs3MH$r+&PN$<#pQ+dXQO{VA@-7aBVhLzB48W)v(VjBzatt? zMwO@p3k0&nDqBBly*@OSx*4Z>udylSFPjO}>niJhW8G9gLjBS$o;Q2GY#zIO`OF@} ziG5yPS=``3C2@nZbMy1-HL2-x+)VIgrDP^dFmDWh`MHQs#U$JR|I%vT$w{^COwXh> zK4GGroQYrc8}aurexUT_enpy{kNEM5$qmcZFn{~m%Iw{1n7^zKlAi3_V=rr%j@Y$& zr`VjNQ^jlHn7_a7W<59gSFxP3UJ5VI6?>RJ<4;aV%(f<-#II5LN_;7QZG-q?t*d{| z)Q062LgL2;=pWf%2rvCyalUQ5DVw%SKSn-p+s)R}ky~C~I(L>N@vBPBk%<{U z63O3BOkesz+VMq+AIbNB*83yO*;%=B`2M7EKX>u6k}CVBc#gyL zSDIMuaCZQ1GP(Fv`+dfJDwd;OMrHDbqGt6xih{-Sd83MVajVnX7K?1^{- zlWjX~E6HD`S2CiYF1bePQwGme2mCU=ot>0dtI2wJc0yKGM)u{&8L1OyXaLv7f5!WM zeSPyzv+ecLGkZTPH4{JQH{zExh@X@?k>4Mhb=r)bD#q9Ah1bdf-~Tm;&z%@-5nqLHgEXN5+5B0Fu7< zO1pgi{=3S)j+grXGW{fDlKRJ!H`nz)vAjsnveThrT?V- zdVEQGQhsS)8UJ?sI@q>C2i6MudHMcXNXdTW!_Ai!SkxKuHO8+>xZuo`#OVs=oyJ&@K z-~55rDw99Z`~b?4Kd@lI;)0^$5`0Tx-zvb$03THUHixWXtzEtPM#Ijj4Kv)x0qW)T zTGm7ST-yNL2H{wrb^*A%$W@b*_R{%oCs#|ZLxA+2B^Swd>KK4KNX|hne_-9a1rx>m z{=s~_)*1i3W$u^K`F^3^^U&}?CG&=7=NDU#cOxG7^kVe(PcKg2@#)11Xejjb)1O{U zd*;)NU*jl$>eGv@as7+<{B`|^!-$JxEsi5NY7QX{sNSFbB7WI?d^w5dHA}Ot(Gc*< zAk-;+YTAsrA+f_8_)c&^W@egKZg}Sx;ES$&Ry&~d!iL@)@~OVY-cPk)TqQFrEkC5WXbzn1qe+yx>0Cy6hOC2R3iXC$h&P5nMGjim?mIJlsc$Cq1jqvXa%7C-x>*iKh9ki-#gT-6!;$JpbC`Ds zDUPX*$yUgRyplnrIUzdD$xWfm}{4@F=KP|ni>eRNEZXUiOW^v{nv(oa{ zCawEnd%JsQe6wcn)KY6MpRc0s+rK%{eWAt6-&TGx z_OswaZx1>$yUV+wXaDDK6&e5f_sT~~cMqFlXs1VqT-@_~N<{XvPaYfi;`#R{{{5k?*M?|+hLu3wSAO^*%`bnP6kxfcAR}nMZ~v@nRuD(mET##E^)*St(S0C zX)eZbsdvKMf+GA%2j=mK_00JCeE{lYeox>iSu_hj=E8T^#S8F!JIXO1zltteR5r?d zoy}X54+2?qd9EW5A?>rK7yjz4E=Y=9c%zuf4n_rC1lsQ2BH#*#-da!ffKz zC2jF>ql{sG!QfGj0%nR^62#rS;sX5WCeJ*86YZ5>2bgd@!dy;2jd_Hl5=RXVa~=PI ztu@ffzkPO5d>R|$S65>5Z~^YR`{?%DGsd?6x9!)8?c&rO_5WWtXaUU8?5PRK>DiWp{pHUSO#2z9 zUop=fPx5}fhSy$6?ONMz(t`u^Cnxdai)_1$(`sJJb9;JSeA~gn0h**GzGJ=}U*5OG z^Lh{SudEl}c7=8V62FSP{2;exft{YjKUo()8$UdmoXnTw65m^F^HP7Qwv<1T?NNxI z#ZFkXAP>LJE1Ng5V1X4b$t+$}npa?jB_dUx&*XMG(~Hj0{B0Yt*Drq`+U5O~ zslRD+d7d7u?2@n6cvZgz*rWd1N76sb^u1#n{`&|oBmYkTyH2}uQp5I@_x$+RQTR8> z`SVNSa9SAWn7eR(iM>W!FS*NfI?}N+Zwfh%OOhIv?|)l<8OJ3|KUUR0mIW&fU>`wy zc>sGn?TZ80Q)s^-fIXe|3S|%C{pr+Iv{$J1r`a#MfAD)*zwOroq4Wc~ePn(HYCoBu z;VQn`Kj#(B!=qBYkG41Xavz+s&nZ~&tMMEB?E{mIia)=kVRUUTE-N!%&dct^yv^wm z=QX=sepGrT^Ws#30tVpu{9v9XO7KfM{N^(o`{n{iiTQz@1Gz6AJjAg8+h<2{L2iko zIJcn0v1H_sI7dkt{*9rDRaTa5ycHfc<%_iWxl7E;?_$f27ZqrvY;3D-p4Zr{V_RIG zus7V+9rLu1jc@2AeZ~oN`xl^;$HX@!mb9#JQSPjQB1d}c*^AMG&R$H3JA1JZM+L$o zc+Z6Q4Lp0XmKqKFE*#TwZzY(+(5HE9hnoAM`u@GJ)$anc_qP1+Hrrp-{NC28tquKG z{WvCE^^k3^WW35p8eV(%{Ca$y-hX?2@&P-a$h-f${LJ3@e^Y-cx71&*b^U7|`+rux z+J_tR@qcJ|E&2R!>;JQPd5@2zr&Z7A(qH#4n0*cByNX|yTig)PcD(&>kbt&Z?x$WM zmEE|42Jv@2cx&I4%T@)w^~OtWPriAmRaSaZ>&`8jM(wUz-@j+Kpk6blO^%9BOmw%8 z3~k@JWwS2n(-K=j0{!i1vm?C&eduyk3WQ>&DxoYHF&zH6I`Bex&+H zXzNxX?RGx6s@M7z8=5=tw>y`VO}cd7-gTEowsN;R`NqMP=RQ6@u%skDc74VAh|xou zkK0wXHad2&Yw+pUk41g`)k~L@mn026S97%g=8db`gu0tF$;zDAZf1H~=joY~I_-b* z_A&UQB+i~*PtVSg5uHoQ5{GQ5T-!b}(h+&I`e;P$R|f~5di|9S{k;+W&wTQ7pOVt? zgDY07aBsPDU8j?;A84_1`Rd>!2VM!w$%*%-r^iQD?O4&{>?g0qL^zu^efp`@mu%g1 zN0+q3sm-6>yJq=a`%o6gWh`m#Wp#)3Eip>9dbXt zXXViNgal`L#`u;uE}T4O{j%GehB`t+JGW}yb<4(Et*&HO&DpImZ&FPDtO>mxE|=@;FJBy1xoLUJ zwaae{k8ngp?Ag0w$c?2_#-2P`9l50RvQbHi6GJv{THW@{M=$p3**&;-MMZ^U_k*_& zIQ`~{u2l~%>lPd9h#fj4Wccpwci>-e1Ygp+MNk`WcUSijv7sZru01?-=Z-afk`j`G z(&E!1DwZvCp8e>RzAGzMdN$v=rrprEpkYT2z1HOD!Q;(F$3~1US(p$P*}~c4@S&GO z)-Jm>tbAeeunXs3yY$o>uXempdt}7s%9X9BPfP7kv3$AfaP?u&kLOQ}OG!u#8xa>a zGCyx(pX%yr$I(M4n!okt%kB2o&mfU828D#Nky{72b0n9UG7|enRlmPp%pk-J?lNer|HF3tzoDs^*hJJ@!3$>&QJ% zE{ofG=Z3B`Gp2O8@Z~Eb&wTt+?>$c~9~>L!j63`BtNn^{Cl8pJIkoGVn!`P7YpY|A z9yr!?ZN=Kq)-8kEju;$1YI=G~`?pRWZk;o0eD~;XVSPRBkdW9R?jdJujzqU_)ua>t zs%OxWg{dPeD=Q)kXI<7Wx_fxPEt_uZh%Oodg ze{^{*TtW$kMLe4AElk~b44rDYkrE7}e7L{en1*XHO~1xa-;E((fvMaXZtn+*T2W^j5gf>2Sxja50r|Q?;0`DR8Ar;HHnlRkX(RzJO(*1XH~n zQ|LyxgrRWbkytVuaAElv`bBWRhp`-#!{xpOSNk-k#98A4;X2FVR@=kf{fOxr57!)N zmLMz-`!VD_m|_>OOgJ!QYBA)aF}-GD$=ijgnT2I79!uX!xXadXHEXdnY=QgT12=aD z?jQxzWeHr=W-NCBVxj9#g74rsGUZ?{X}eS(vJOuxxh5lGzi>hV_F) zO!p*A`*WC@)3Ge1V|h6Xw|XO7*(oeNN8tK@gzJpO^0pc7ARq2;G?t#HF~!edncN3A ze_ui+fBpLSAk`CJ>2Y3xU3OyPbpa1o<>tVh$dKusr3e?>YJ!aI;znE!@mku>4xDv z4b7B@;T(x3Xo;aT4b4%DX>bt3AP>{e3zra&A?h_l5KUi$ssAyCMKz{!D@?}+k?jg} zr5nSj4At6;DbNbj<_%1lkJ0TVXwC{u>miu_RjA%z4B6K)oxehNmtZK?pm{c8in%eB zGBFI(;dV07y-%WBov5}KE+rDvwhZo|62m4E!>Ss??JHFMbxc(+n&%Tt^-|LW=;Avu zrC!JMTaGR`0N0j-=1n(K0^Rco+=dff@DzshCUj#WnrJVEZw7|nK@8avxXA4oVlCko zcVH;Kj_H;Q7kCImat~Zc0=hW^(|IAL&oWGT2V6!gOiSxE7KUjHOkD@MClhYvJY3pG z7y@5n2$#YoS*{7gZx7tg3Us>*Q*;NW+;&W(S?KCJG2If-?YS5hB^dfnbg>IlbT3@! zCzw{};a(1)%U57HM`AjBg{hMRSN;a3V|TdPL`?6NaKSDN;cjr>d2ord;8I+0IbULG zZi3rcj_K=w>)(rES_=1Y5-zh8t|1X_U=yarM;LOjN^to`*Y0!1RcN+s=av zuf`H~2=4MtEMI%z+T2(wmcz}Dhs)}LrD!9TnjE;yH!)qR;KF0E6nu&49*?Ewpjq0m zyu@KS>;`ud4_EpWmX*O+vi875AAsB64%hY+mYnfe5~pD*4S`!d33r?W*Hs2LScxU) zB&OGRxR?yMhcYaORd53z!5xgp68R*SqaK*Wx%-lC*dmZgnP=s^7SR$ z_s4K4Phm-jgRA=(E-)AFCKIlq2Cl3YOUMB%n-y3lTf*%QhKotZGIkP6@hmLC-LNdU zu_O<{(q02s)e5fA33s*-%RnWTmRWFx-LVvGLKlSsIfCjo#n4`jraOTla~wlp1)6Uy zhWQ3FMNrjbbjiz@>Pcv#sTe+H8cxE{KZGpDBP%zmwhCE?p}G}t0SD3TYv582p~;t_ zOPv^c!I-KMXv*~%CczkzlQ48opc-q@C25%cYvD3N(5;72tzZnD!|0NO7&^(ADhJ@A zUV@uwZn_6udIzTaTDYH3bj1|7it#{)NZ5U!~ST-k99>sR0|Cu4}Ngu4vIa6JN-H4)R|4!D9)OwSkL`rPQcV{kvK z(e1Zl_@02fn2e!y0A20GRD2QB@HTYOWf&66;HnP5wK_1IU&d55)5_)XI6N3`DVQn= z=;ja%<=5bPZ-<+?749ejL-q~~pO-LAQsGLE!DT0)+bb|kkD|+OgR5Hs*Rl@NyBgDR z8Ky{cO!0|u58)V&hv0IL!hPKi*RlcAel^_oB)Hu)xT58l?#tlz6ET(Ca7UBj=8wQt z-hpAi9>Xvk?jr*3rWvNlZE#ytFr+uYeO?B4d=M^XIo#ACOxIMn(iFJqqi_{LnBK2p z8HmSJPsS9Q3YQQBH;(t(ZZ}+55{CZdU_5|fIY@%beG#s9C8oryaDicPofF_z!{F|Y zW4gw}HM_6`RbzR$9Ya0{Q|whN6HZK-YP0FZ^qPVt?^aCB30T$=vGlEiyY#@-+=``P z9o%mP+}w+B2Pv2?sc=ziu-qNR($@?wXE|J_6U)_lOsOWAj#DwcCt}G=!c<+3WwR-k z%pfcq*5CERbf17}e+*MI1x-d4dKB*XnhVCh+n zDSp^ID8tRCVHs$K4gt(_%46v)bIa1=hLujS3N%G`O@O;3=G@G`*FzCKV|GJ`U zhhsHYZJ(Ug;mGhY>)(0n^sTe+`KWC9){BE5|I_zTCmt9yz4hDM=IomM)(vxG<~JXI z>tRn>@h8_Exg_e^U8}Z@dvMb`8z1|$WeW#Boz01#{{N2oadWr0?g#VJj_kdanUuKDvL`&RY;@g8T)_Wmy}J3Zh} z%}g?0re(y`@9J&Ozh>&#ukXFHOg*o3&e&+`dg|PuHm1IFdJman>b&N%r|&TJZaOgH zeN*?SlxM8p9Lc+WlV0d6`_G#;x%A;zSDJQ-xv=?X(>7mT5|wS*=k?{EK4#jeYth&k z(@yhVNch3D)zWS^w=(Tz(ug;w0H4g%^pu25{Pu^xgW|RSJMZ53;=>&BsaS1)54V;o z_eHCp?HKQri(k>&eg7HvD@imkRY<;~4Xppg#d8hI7a1U3zW*wlTVlS!8$|X0I?w)% zY#ILCM}QydnYJ~}oBn4zzmwF+7aHcTYp`ekuiG^**EP@E@hYft|G(7=wo}D#ls8cN z(th&?4=VdV?7atAR7dv*JZr32g1yAD7OZqp5k;vgiii}uQWr&OvJ^EI)L3FH*kU(W zVmD&%im}8l_O95ws8M6x`~A+nGt2G*n&f+*@BNLK`x>p^ zCZl}@!Kr!CQ!Xp%e7SGSebbt`AmHzO(TlB+qTRlsoYzISIu%*r30HR6#;#oDXjh@* z^GSDnN_|Wh<%^HA(ZXLfKToPTrl1(!kNX8M5ZS8ppL{2G)r{^KDcS(@#!ljAtzWVsq$A}-kkEpYx=_Y zmWB=uH?p#3+OU2a+U2P{WGjsMirs%&=8JD<%)sCnGqKZTm>2yHo~ZD94fo@?pUC}@ z+&4`p-g$Ww`o(KP!nHxkk;ddDnhvJn6SP4g+8FwJ;EDY!bV3qVl!M4#NKhAhfi9O% zvWC9x2B#|JEMO8teD^IkNr4k?8K;+rj8>%2;OX%>&gc=}_2UfE8}suWh>&-e;{UyeV(KS;J~EvhQgtEU;)FPOiJ z_Dj!6uUNJ=+251F#pERCc>^~APfqx~3i}PV3y%?vzad;drUw-9J`J3ez`3pb4{6+ap^Z(lU zK-2Q2@o^;Vn~Hn|{^cAl_E$mVz^Jj(jR`RPo7EVaCjQG|0~Kb`hNz83;Wk% z-#+b`%{M6%|Qd zSbVJECOVNnPtGzppB4Fw^UtDv59a|V9HM&Xd=QMa6~<2#O{6H7t7SZL6B$v<(=KaUcvSx}y<2%3zDmSM%p) zeq&^_)48%HOS5Y5_UJf(Tsfn}Pc z*u(^NY=k;AHW4hqjKkF78f{p7q-?Al@roI@P#Zop~(N0=xSh1$t$|zRX5VT}WUkcKj zXig4^kI{$Wss?Lb#5}#Yc}h74bAKlHf8qWL?(gEhDH3D;0Q>5Eg~pR?45Qsi-@#xe z%kyf52dJ_9#mzHYvp|F4p(i41CbI?8u9oZJ77{K9g_F8GK$MP^%>i38!#G?&)3<>? z8H|pIN{mg^VhtGx zqZ;QGkJ?PW)FpRJBYb*;;f779AoSCZ;e5s~Z-I`+bv9s03Tx1hcOE}i|C;dsTyQiv zEHgt!LnIlPXcjil!)UX%flLC2RaAR5srKNw{Egzt{Fe__H3eu95*iYYV<+VCD$`Fg z5#NS0KCnA*Wmi3mgUJ$@#E!#oQRE_W7Xh9^`(|KC)Kf+Y6>h-=0`Inby{QY0`NwSj zF8Ie1{$7e>SkK=D|M;E13;uDIzYG5HfWHg=@sYpxRrm$tepj4g#i3EUPKQ_o*ab^g zSOh`@hv=#>2!jyRThCvNtC;qSQm+-<-^Tslxqp=V*SK$-+C+a)Xd@^rVG!s8=A=pQ z0OO}F*5I%#!qqjM)jomV-g!VFZS>HbTm=0MN(c%MwMmdYAlE+}o)~G97|B;>G5WRr zXc|UKelmN)f#VpmDisw=*K~kgY2`bMV)4z%@I4v#Eg8m#k$SSVjv$r{#Zm)ZA)Jw% zVclaB)zOLC1lh7bgdDUOXmXeYVj0wM_F-_oAC*=Idg;q8egrR4+F!i?r~PCyD+WEO z4o>UiS7b~bC5KKpUGIq#`2P6kjhhp@;vBvYYs~ENI}qpU+c283nekChtzrd@Q4D%M zXrT~^?{-{cS0|#=(I9Ath!7~~Lcb)7qc)*~p%}}yCF7xWS%g{GIz|n$#xF2e?^rN? zSzA{}zU^Y`5sIq*UuLOMs8g|K|n8*dn|MWEJGu{q3&xSL+QE* zb$zToH^40l%)(I%ZbmeLizmW!u6Hm97yPY0BH*|+wk&`e9QlnHU|YB}!%^!U0<1Z= zE+EAC+5{h5yhaP&YP~4b%7Pt2Ty0QLy4eBe=Bc=*5a^(kHCMWG?$)3{dJL)vo=F^5 z&MpR*0T^b=M~&Qu2|+NlrXNz!oD*;pNR(;I$r>cTae}xpe&)0e6!pBD%}E`oTp)#` z?D}@2a{4FA7qU88grVi=p+I^#K&>1CRd>LhBE+~UJ3D)=K`4ZTqHLp%cnBI8Lpm=F z&?us&oXB!nU1cN5iMV%(BMY&0vb9z48j)#25Lgi!M9rK?mT;8HHxb3sGLXn9bA+;9 z(hzcG-eO_b6s!Q37vSQQfOs$qbaEhAj}zUbLK6?5XsAU$8v@b42o(CCL3|~u5kQIS ziW@T^H)%SAIC6W@?I9RdvY~yYRrSp(Uui-!c|DC3 z(4XwLs2T`LvAK#Rl}rTcqi#w5m(VQ@EeaZ+PLK48qBi3G^>8^}O0 z)PnLG5{V2CGd?2d?qq{2380-s!z2b+whiuci3T54USN>P1_OsIQ^>6WuJX0`e>a|u zEG)i`PmX7e`wSQgqkMYv@bb%fY2)SX$@3&HSAC-r^}I1pIBt|i1fNc7YTY0o+zVoW z4fkH!**A7*(zKalb5}Qa56?D6K)k3-T(0~TUZhW!3!V^9t2JS`QU^ngru<|C%RP!L zddNQ^Dxj7zf18dt)UMVKZ>BsSo%6u|%@-`rvVCcD(Q%iAytRzLJpt6ces z_z-|!i-)O)C|aCsT}2IcCmSIZRn%vrUtA!$nmg36{Cs{p7}bKI^+>wGD5uS6Q3o4B zZhT*(f*kraD2<9E`%1xgUz5RkSEkaonhd zrM9qs)IMbFlk}s(YAlh_Vj@i!iL4FQCb9CWPhcFMwokS`&n5y|t*g^J*M#aqF~ z^gW4Bc2>r{sjg4M4`I^VmXf~Q%U>*~{BZ!}s^=a#cnv6mujEEW z#U^XQE!A;RxbGB8>1aG!3dKc%@v)Gs5UlEmDBP+cC=!cu=m!uUZOH-Q8DKQ3{NIVs zSDJF#EG8B>luc}W8JT%RMnq`hDJQx4!!W1Ld(lrFp^=xsc*Fa(aaT8P)~vZ2f=5}q zCTa(rQVp@DkBxLd3YI3|*m0m=GDoz8c#TG#6d8*v&S((?<4aznCk!SaB|}nZ3?fy$_l zCkP}*Am)7E$Q{em-CeD0dE^z%g-1{A251cPlT#~SFBF=mD=V@C&N1>M)mzDZNoE>@c$H>I9ed6L4T#_}KNh&r7!JTKqeVVH`^?2{HdJY0P| z)dAkne&};gJQmzMJ&l@<_z;PRWKGBbX2Lj(V7xsLC8q`Wf^^Q}tR55d;*!OroAj%9 zM8onX367U*|Ax_{Vq*s+#&HsGH|TEIuEWPd8dzb2Q7`36KudKfzM^4dD}?Cp9-u|b z6m3pnsZ@_^fP z@QJh(ZU$TeTsT|+oCn-%xVv!Y;10lf9DX7>z}0~(2Uig8^&f}>cMk3V+$OlCa5Lb3 zfJ=Z2hYNu7fOCMW16K~NAUWWDjdI+DI|p}w$^^F*ZU&qK;C0~2QT~VU4p#@R99%)T z*C@kXxN~p^;5NZ6g_{BQ16%@JI9veS0mR<~w-jy$+z)UGaN%$P^iE}ge;4i?y(9kw zxNtaX;9T>Cq{d&K&nVkd`EnkPw|7%2E`5<{g?hM=G z?_je-8ileZ|F!nJV& zA`J(KJgcYcf8^^xC>P_0+KayFq-;0-J|tohj2<$4sd}gKo<))Hoa1;!TCu}bq)*}Tizv}q z@Gd1i@dtX$Iet04pJ$g&9dIWo9+5tS#~1k%j2^Ks%$KLNRSuV5b}l_POzP7W>mg`9=TdDnCzIiTl1hz3KfBY7Xzp;lcjOy?RtHdc^*( zP!o6|1cI;pts?pfc4|mU88GQf@(~j~F~g zKAuVckLPrzZ$F+)w9iZq7xfqQQ}cLvm48GE2j=0)^zPXWH&yw2b@K7gBZk74vUV%u zCC>;5bm4Ggd^zJsy~lX`3Ou6UQh9p)hX@{lWLs;rvLF4u>tF`nsC;aNK;D2F?pQonw7j@So#E-1K#^v?p?>Xh8dUx0J&orLDkOu;n zpzBl&PzUGGKcZis^2xLksaD4QYzi0eazhxM zC=n3F7xmBh-I)KV_bcz+M05@p_;TqFJieZu4k+n`T=C`UF)da0{X_WwEhWHYaHVoQ z>5jbq94_*i!{Mgw>%!}?h{H|Wm)fBnoG*`O>IwPJr^`eEpfr9nFMV`2O00_IG*uRG$7ehv!8<+YrZv*Ee0@=jrtHBQLpgJ%}rl^2!XB^2K^T zErN4JGtkRJgwjs~#ggNl%6;LD=k2JcFJ6AZUsCgdt2qKuKhyDJ%i#-ndOdw|{Ei&H zRKVLC+b^cEMbBCRuW!u1d=)U;%;AE*>HG#Yso+D~Ib5_q!HKqm;po|K0w?{I<|O?H zi034S3;jq5Rd9&khJGA>AsvApLm2&5=$Q_Yx(13e8paXhBa73s&__iaF>Zr7T>c&e z1zDa&;;UkamZ$+A7mcrd63LkJc^=Wubp zgYXj$HHRPJa6vx?{3EHcO&m@XhSAO~{S;hj)tq+C9X}kqk@V3G*Sk1A`W%o0=f%)_ z*q_tWBD^x7jrMAHF>H64X5rz+>4e+xg zZXeOV@NgTWz>dD&{uDDHF(yV6MZdc65Vy9z>W&@(G8zQIDom(`Hn(^2^`S74t-q3Q z18g&jjKMYHkqOvwByav`)9Z*t$6yo+$**ZK-v#LLfb zfb_=wl+-wgmf+D1a%198Q~8$_Rfc{wReo901c1)^$Xi>Tn5C>2Ix%%IeBhGnipZ|O zgiIwG$vUpc1AWJu{8)dK>l^z07}ic9pE17vPB4l1DPKt+XPUlKyk7{;>gOtuNr1qg^%eZ- zruaE_!Jk}Cez|_;`Lus6&OlOo81r+JVt(~CbE=ZwCFGys(d(N$2SEoZygdBN5bxp0 zI3li`-pQj_yd4F96EOt;EXCn*9DkyKm_#h#bW9xtLIgNT0#e3;AeT{!9Vq`0<$(w?PaN(Z1@dIi2K(zm5sqH87xE zCqJ)%?m?J}L4z@U1pTp73jLX`9}2mX!tpA?kSk8gqLL{}qj%B|44+JnNA$0dU!wgk zaJV?1D)b96&aZR0(64gy!6@2a*V5p-ZYxE06YFE$9Bggnskdi%B&=p643=M%U0XEM z4)pWFC--ITnD^miW=KD#zXN$d`Zv{u>Teq5i|;9m6n>Yv z^2>a$%YP`JxYb|I=Nmo%|KHZsHZmLoNd{X%Taz^)3)+6|imM)C zVx#Elo7$ub5sS= zPh9;CQRr)+=U?Z)EI+-@DsV$ITt(31%Ik-a@4;WepK5^LP<0ULGrp4kg+9HpU=j6G zU-)wUY|klh(>m1V`ho4nFVmfAI@5RCKa}+5oAbs4(>}P4Fg`reB%$g2_#rQ+nwN** zR7Ao5pPRsqN3ezf6DgdAY(ul=cvRIr)iK_JYR~_7MbJv|pG>{krm$=_m50J3Zojeq``;<|qGM z`dp2QHYE!Rim2k!&yr85AiMbS9!uuo>E{Hd<%9bmEotvhqTXbeQAwerf@`|_`sg+%?wpxbVyC90anbE z{fv|+3k+!EDF5-7PYg1*j=ms0m;qy5y!^e~a8Q8zJQNw|YtFEL5ltdQjk`EU1@i@J z{fjKEaM2UtQ`#4g;e?%TBJbfm&k0s!OKTY6pk$>Dk8aLr0`B(ico?fgEQU_4` zh=ih_(s=&R!Q!;A0>HwpX;dlI5s~39HTX?GMLAtKJ*3(y^W0zaiRZ=RW$5$Ed!bX{ zP3Q4_`S)dI4>KA-ZU^EY`SqMqfGnO~)L*Qh3jB{aJe`+E^sgwspp#S%7oQhX_`8Vr zZ++Waikx`C{jcGP0OKVNnFsHUk0J#+UPD``ljN(pS!_(yVCqKs2Shi$ySifSO*w;0 zdx|JX8yk&1-yvFv?|k{MqM7RtJGS)f=o`?z70%=lpbbi;_MsW3{7ON7yc|3jAr#sP zxzQ=ec%$>Nav~Yz?wT9m#Y;;&(#@D0%^wBE*;u8-a+3+%uHsZ^Zan%Ti-br+d#$~c zlY?exIt3vD`Am>3AClEb58UP+d^^77F74z-aO|D|py^$_}@ zSpO-(3sNx;IJK#eb9Njq*2gG4)nBxeMIPyi2ML?uuXy=H{-6gBR4qOdySQ->!k4OO z$l*-+QwFCKb6&rHTK|@u4n+BBeT@2C)X#&%#rhcW9&0@llHZIt&P1f8N3?G+ryG%e z0$_&iAH(5d|A?G8k3TLZ^b{BazJ{5U;&s68eH>K985*1jkWFJ7yt#v?MPmtPo}n2>*UipU8x z+_v8?7AN@(Hu%f$zBpBj^R}>VLncAO<3o~T=o(oiEGNj-s4lLCbun(VhrC_0xle6Q z&s+Xp=#E17Vtkk7?=`tE_=YuqcjLaGzd-&T%zYtO2k`e%+!y?B7JpyCeX;L!8-G8} zeL*)j`TH~O8|o}dP4fQRoflkfLN9s8&ObEuqr!Jm-sjDK@=Gb~y#2TG&ow2(JZJzN zdCqTMCGU0g@bsYd`k+96*S4PdRZSmGeUWxQZ~iYL+2sQl^kW)N=x1@9P&3%STVFLV zprp(Em+6P|g8jGhuT<@slvY)7+u$?2lTTrpa1Y_uAna@IA>w3kcNl&q9QhP>2`&q+ zt*4KtpR2bl_!Z4VsXX47h(egWOZ zL3`?cisSM`Nw3Gp5s38ZJbkBtcC_nLe@b7ZPy0&x7oz;KakD7WU1c$AN}sm89fbS} zx6b)|5N;hG5$0%bPl+*K3it8nzXsu}kN9GPaAEI;Lp6q*&*P^Ib3|-Bm4vt@Jk#n z_)84>$`v-C$Z9B7GQ}4;q);Bx-wYo$rz3N||C!*1?Pp~IPZ%5rL&xD?-*?S3NfGG{ z+K)h@{Np)X%ztz7cQSGb_HLn73_9_ZznssowDdwI%3-LUXDQGBGoF5Vd>7$xC1sF@ zr@y}#0xBW`(pgDXI~z_z8rtsuZ+KR9xt`9!q@3O@z`)i1_I=R!g-e>Cp3$v z7yU0FqJ1B5xESA)Q30agG@hS`|9Aa#p3b-Ezms3aH1-2(hPJ>{`aGD!VGNiXzd zrFC-VeZD-szP#_e5Z-z*AnKC)524i%sC6uqwd#S$Nv$LFeEF zt~`BS4?+Ke|B3NYh{MJDrr>`<4wp26&*cI;g_k$aJpV>uDo^iH`JauWC`{rKVa6gi zRmO$ULBRafVDV8)Szl!RG=rQNS)X%a@v;$n#qO7K0AH~N;;y#_g0B|f!gP&`Mp+J1 zK4z%Bd07m9f5&+*SqB2gZ`3$KTeFH}Ez1pZDOF7y*JF$aB6t^YX2E8!K>FETVT zLCs00BkWX=-IHAGIF5f~<;VR68jb~983>E=CUE3O@=B+ee2*3Vlk)n@{o9DcmD=X~ z75qblJmmEk?JxL;Xdj&kd@6517wf-AuOc7e`|@;Y|1!NSt9%S?#969gypdam!$|hk z&y$0EJ^j2od5D}9U$kG=n=iLt2#4bXi(=u4zBkIYn~d?9zL~afI>#gKcQ9?=9VT#G z5hFiww*RhuP0N$=5AozC=;)BRFKrs&RNB$i*B2}CdL7oZ9ER^Se@*#IX@A3T!{4Xh za{eTL-wfjDbNEvhPoLlX(>5Rcq`MhDBA;M8rM;C83m)<&B|d2R5hJ58Llj^9oyN-{ z_>YJz#@9v@_!C~CI9?tR|L^)KJe}J9U(yfhg8DBp7+cs7oe6j&al?1nBQ+j zL$M_`O~Oo)Y*kwhK-}CU6i=6ciLDTNty9@@U{bN%iD9Sbur?*k~SNwxK_ZSji+5$$87y)N`Ulh!P0-HY~i)BY{u!K8uN`}F@4cQ4~^r=oHf>i-IiEGSYSm0DFt%bx4R&3Jr(?mh*X0c(~IQ~;MPmh}> zqT}=!=#~YTE{~3r@u2ejA#jigF#z`Fa^Nsj-0T>ir z6f;ktZ(*gkTLaieZK&-Li%V0~7FtXB6Dx#OE^5~fiqX)1W&dtIo`urTt-w8Gf>KOjm=LyapxN z=R5I%QLLago~{9be)@%flAlcavi!8u$FW*$!g(Z@4lM;1}r0+PHfAd*a3yoM`V3!v%DOPDBXUUA}F~Gnd;@ z6omWA%|==qO%Qk_O-Mr;$q@Gt+;;^-WfV#V_k$wHAYL-Q1!9yB!hUHH4ofq*m?$=h z7BVem({#=>;A!2_nU0HDM0I1zB@}c6gR>eHlGDOWqd_|C0MQJR zlLnNPaVAP>=x8pXji3l*Ww}i}3_XQohldXW)U_=@%W;dB4Gko*@B{$ z8KXWd01bwwP2>lVDL&?x3D`TXPeAQTUzQD{>e~qt!BRHfrf(h5E5=Pl9g8+}clGrO zipP~vByZ}&;=IKm=HunzjP5av5snz)vHD1ikzsq8E=1X2!qVSYpM~04O`YBriW3%l zN=6KGPo!Ga^hI7mJ9 zOd15|3s)2_>*O=39o&l(_$COK0hbE50&WnT8t&5Z{Po9k$0KrPvHtYA|=i7z{ge*qsCIG9Iuv#GsUFSX`jgNq7rK?0AGEF*|0>EfW1b z{IK`UT#=IUr2Je_27mbfBwxnl?j+U&)r0yTmMo(TjTXxHRmdcO?+s*wQNHF)VVJPO zNk$pT7%vW<#KGjE0T09HI_kb4x%-s(hW%OJ&RMpA2=-#{41>a9FsQF2piWhO;{H3_ z4Te{um>5BH?LE7>w{!Jr>#45Kjqo)fw1CmI!irp1Dyogs z=2VjimO(?tx2i!zbVR{)WthwqWB_Fhy`O{V%~GF*9Gf=as3Rj}8=v|+>#!*tNado+ z6&L9##2`HeY!H?Py9BktJt_@&Pv}{k{BFR^D08h6DOSD*4p+RPTvRPJ4^X2~wTaQN z?K{}g-Z?@DBBj_4&a`7m4L*XaL=qD$)sD`-o*j9|S*q=tI(O^V%~IXi-kDepF+Unf z^kof2Q+l3r7dc-7a-*C|u#$NwZQF|JORX>RSF&&Hj72*xStz6d)H5&x<@P{@JPh{( zajv7J<$bEI)vQ@E8326;d<@cYvg5>`?i<_Rqe*}16j+mZW1Z#u%^ zU3qvv?qdolKS#Mgj)%|YKH;M0nBuW*Jbb@N`r{mak%woQq(8yo|H+&{W>qiAl=hO9bO#VxTe1&enL*)8Um_o@)G?ZEvtYWOmvXv(gFdC_% zc=CAWa9FjL^$$aQd~HFly!`10tOZJxQnHA|n4G&F^%k5N@&Ol&r)-pX!pbtY2n_ZO z!|~KvdVn@WZD4{qG%7X}nj5qze%qctq7j49hnghK!3#a<%Xk$7Mrxc&z~z>_w8mjd zVL3=|*caD-K*$-{t(I+KVP*mY+jN-Cz@jx*%}`&XQ2iYY2DYM;BV!ud^UP%BisWa` zbV8Z5geAmBiC=?)Vl=q@DzABv5^A73D*@;o*<_cThF;yazf-aC^4GPi93sL!T09#vI)~{bbHfPQp_T6{iv2o+ZvF+Qpvzj$) zvO$9eF<)O_*1UOhcJ=C2cI(zH79StaiWMuyLPJAY%a$!!t5&Vp@ZrN*pFVxqO+=(4HaDYvkG>MHIIg)8K z8usSR8}{RmKeA)Tj>xWOnG#A=b5PSLW{S&boBz!YWp*$j+TR$6Q=oSd}VO zSjUbXSw=<%3kwTlQBhIs&Ye4K>(;I8@ZrNOJUpEB@82H_k^XGes#VO<(UHxbJ)4y% zQG&gG{hH02H;+Ag_Kb}fF@n{qRf{DhC9!qu*0Jl?uj9I5Csw?8aRw>R`u6S1#*ZJ* z3KuTS_V3@%nlx#`N|r3iR4Ntw>8GFA#EBEx@4x@f?%%)9f`WorfdU0sojP?`Vqzkj zK7Bfih=^d-t5;|D?%iXzZ{KDC0RimNrAy4*+?<^}d6EqoGK4*R_>dJXT9jE@TCy@_ z%CK3pW-)tvd$xM@YPM<9CRVRrJ!WQR#%kBD&2HYj$+EMv+0mm%+2zZZ*|u%l*oO}v z*tKidn4O&+8!%u1JAL{zTf25Gt6aG<^YZdyyLazqojZ4CKmYtQd;a`6yLz?T%d)bvSlhO3*}{bjS+8EbSiyn?S%(fCn1h1@D__1m8$5V0t6R4& zTfTfbyK&i*tBWW*u{$%*$+Sbz#ct%#Lk>K!*=Z0!Fu=Z&HnuJPj>L& zL6)AL&i3xz%a$%(%38E&!3GW-$UHneSerI&SffUb*r!jQ*pnwuSZr)8JAeK>d;9h+ zD_5=@)9G|<=+L1oE-sGs=+T1>8#au6{`{HQ*x0a2l`65(qers}6)Lb_fBltBojR4( zs8NFzDpZKgoH>&vBqXqvD_638`}VP(J$thD?c1|4W5%%P=xA29Y*|*MND^fL>D8-OZ2fxL#>3c*88cY3X3f|yzx={7Gc%dBwKbbRe?E(e ziDC8Y*JrI;w`M6RDeT3I7tGn&nVmg*mRVR>un7|;u+5t{vj-0zFgG_hwsGS|_QxN8 zu*Z)dv%miOi+SV1#nPoqv&M}Zvu|*MfAQkQY|WZAEI2sW4;@?#1G+y3%Xu`SEwi<4 z3Ig~QjpK+xvlkuUf&sS#gLxr3c_aqxpXi{A=)8{@)I-tGcQEjpgGr16am>TOvOz;* zK~Ne8X5s)sm<-0?jzR2!&O3mCe*=W@2%UZmgFOHP;(IjE3{>78M86CT_&WwvZ4kRN zD)}4)>x~M`MCTO8pmak8KY-x(V=(%l6N+NsSfim9p;03+*y^L9E@NQS!64j#&Pl?+ z?um|Ej7r1OkXJN1@+S=3(-;>XJ4yM){1d1!XHCw>Urh$l~zMF5e#J)2g47 zx(x$nIpQYY@t}Aj$$@M*Bd>>%iD{g9&_t&R2nP zl?5SB0MQHpvv2~ln~FhD8U*4BhR_Mb-4{&n8W_rB5YQ|zqgNo(Qy}1zU|26ee4D_O z?t|gsVs-7$U@B`sOt_Icp%xhF0}$a_FrOx1lw&Y(ZiDH)2eCH;VLt?;tBOIA21Waxx7;sAn+|giOxDCU94g_`x7<5Gl#YSL; z1;KcSLlEx(6HSKjyZ}L47mW87gmxsDbvZCbXb@q6VDdE~+)F?Z4g+I^M7j-5<^!n| z0B-sT9B2ll+3((2c+ecR`XTgOgc*0|ErcIt!^(8Jw^?IP5-X2Gt;03qumQLUIj& z1PTOqdjV}^4kSz@IM`!w!1>_Xl^`{KgQO3G1iT4O_W%-UCyg0!SuLb&1T>6~kZ?bP z+j)aykAalC3rX$-ZKW7EwI{TIRp8X$LIOUA^fia%ctXqg&;Uk2BX|wT)Bs#@4LJ2F zNYAy93{#<@OoA3P2pYvxG^eYO(%Zn1|A0m?9nx$mqkNY+x2-gc0@O`&CDh$&d=oAej=N71%@aABDtx1gWte+Rj#Rj@8g=NrA#dFP;A%!Ot- z9GbvEXrRrZiS>nK*FjTDf`+&NTA@3%isjHsZ$VmSLW6t*O|~B->MLln-$4U$fCdl; z$zBMW=n_cD3D6SGLn9dsEoUq=pcT-5ZJ}izf_BsyT1y9LYSkgZmqFvI2W{dlw7n+K zOwK?8$3UyA1FfL~G@wz?^n#!{U4hnjADUhwBfF@8CQv4TaGrggm z#6oJPK!Y=b_8bol#sk{tJZP*@&<;|eX%>g3(G$|SF*KE7&{%pv>+*vZ^d~g15NHdF zAjSWJHk1zS`2w_n*3fQ-LL-TW2Kx*ePdR8|SA$5dQNK&at1*7Q!sk)>FlgdS^6{&5c znv%*)YAC6Mr2deaMXD&NIiwPjnnG$QsqCb3ka|t(45@Q8jmQAukh)H)8L7&oCX(t& zY7VI_G=(5FlGHR(pJ{4ADj=!Pr0SA-Sr9}@st&2fq@I&{M`|vqbEKY3Oaz) zZ&DXYohG%7RCJokkUB`JH%%#M3PkD_sf}qE45a>&>PgcUQmaUPrD+DKlBBxQ^n%oF zdT2VK#$Y0~lvFxWA886gQyNmIX&Oc9B&lOGwIG#{)I3t>X^KKqB%12bw1!kQQaee- zBvp~76*N_$=@?DBNJS(Sp457pX1QQ6lWIw7HBFyrx1f(P>OQI1 zq;iwmPg5dNZAoRNDGW_NNX@3{7ERMgb*CvFshl*eA{Cvc7Np(=gR#&Qj#Ofrg3wfo zrhKIK(zJFf_Fwm6xV_q&Aa^PE$&n3XpnEYCKH~Y3fK*K2nEis!3BWnu5@ji>4ej z%_TLO)NP@{)3l4GpENb2DIrY@XqrG%8=6kh)Q{9|nqtrtnAC5Y>e1AQRBW1x&~%BW zP&8$vX)H~vX?jId3z`zsl!>O)G`*s!DXHi*t)giiO{Hl%K+{y3KGL+Drb#qqq-h#W z2WTot(@&aC(A1fxr8HflsVGeYXj)HGJeu0mRD-4|G^L^`C{5>R3bb|K(9Sc=YSnwV zx~wiMX6}dM?bk=E57%6Hetmr@{dVu{YR#ryjeAtLX5y?m-;_G?u;AC?%LBpS5C47+ z^GkL%Awk${ibZdH#nwN@aAg_n3-CnRdu8|-r;nyJb;Q6%7uwXW#nPcO?P^zkP&(uI zw2)$q&=`*0CXo?*Cy$b=5nLM+M7xoI0j*n7{xWI7`1WlWMIfN^ z83B~Eay4Jj}b1i1cwEaTtSaf(3`XS#NM?S8Sli!=z*|Wa5 zM=rjxgPomKa|eSLdzgHaS(VGLia=sHa~DkY+Z2JPHLD*fHCH1&?A=ePak$rhcVRJ(Z;%`<~Zl3r~k8kDj3oIeiqX+tr(E~YS^ceDk(8$;z?2(}DRr<#eu1Si+YHW-h;N)TDI3Xw&mqC5$q3=L+ zb|$N~@_k5r_Yr9bMo%(_<1-0%G8*6%5tL{wlgEqmFt)!g_OG4eaIt^Qmi02reTlVU zts=03P2VwSL8^vumu5=({NR^(|Is)hM-QbJIA~8DJ>G7I z4sQKv;)RLtri`A^u)4}80{?lJX9l~^Qg~lGD=kF-YaN-lN}jt>W> zE`FC$^;^qhn!3}6CfM{0Y%qTH5;waoW3$aWyxqNjV(~u5Pd|%%GNPaR0^cJiTW|Or z{#)nEc0JsxJ050lz1iBPtNOn_HQ&C}(sNfF2bb(xZRx%cyK{ACE(?vUes%8T_Saiq zNEvYL{lFGI3pT2E$h^{mr{BCjdGx&1sfiV*_B_(W@0Yt18V78%I^5g0&5F?Sc9so7 z`;2(dKjE837bp5#wfU~tk@tIsE^FKE>O-?p6+&w5YrcHr+wbZ(tevsy`Ly>(ldEeE z&Dghd!;B6-t&%ofPG(mehj-gw+qTlgUp9=0S$yZcv~Q2uozjJxOnXr(?UGB_Rcrge zZRU|HSN=7y&acUvK6`&`JJPX6!8SgvdexXW@ad^fT??;0;Z!xwyYa-y8@)egtPj8b z{nW#ClIGb5Y-+Kr)tjSk9y@9~HS~A19M;!oNYpo;Tf#pVFL1eJpW$r6piwThu-lY9_HdJdLyp@G|F!3vaRptz39NQ1EV)wjFBjZ` zhOODsb^N`%k8B5jeBH6ae!tk5m(>?WG^%#jV(5bNt)HvEYngrB|HFXHU1mP*4xD$J zySLhv$0g^@s(EmANvEc@4mOH@xbW?Q`Kw3$)=TQ}W?=Q(uforEym;HsvbT^>^8$o&gPVmF027MTD3#%qUNJ-?}} zY0Q-#j}c zY?4DC3eer|qU$X~mYiHGMa+dxZm0-+Fh57X-ZR55Gq5OE#;YIilIqtni&J znrtjz>_pe{F_};2gs5(w*?DH`_VE^ls&{C2xSZ~6S#67kSIr)eIz48)UuMeu77wNG zb}tRIZvAmz-y=6~g%3=6)uZ6%=~HcDr#O_WHhR}&w^4)dhdVyIFzQUw{t2NgwykP- ze^_#da!()K3wwS2Ro5YZ*uDQ*g>x&eW$*O(wbIUszrU+rCN(s6;_$uNX1mt69Z=%C zD5pJvn~Se$|E!bLy3L+s-+fojEfy88;xzbmkpOje%_-}bd$-&DEI7h9*}8bgvf6o; z8(YsRU#0q^_QkFqEtY-pL$YIJ(7@6$_0CiXDYI_&K3n(AOTTedT}%vnmAK#hL4euM zOZL~iUwpTj>fDVk^?&~HZP#rXb%T8e4sLyPp>;ZuPxvQEBPs zzKh;Y?&$Y(vcn~()l2two*UirWvL16n)LPavr65%?C7ndPFs>%Zy0$n?rNuABW%m; zO>4eu+q`@0ecrfkADs=(j&AU}#j4n14y7;euVA}sLx|_izdoGnTKU4ucO|n}i$3n>o?G^Qm02>P z=-cNL=X9^EnSXkx)G}hrrfT5~pRl&qRU zbGZ+VYE(X(y6uOJnz)7|itZXYSoQSntx5+fdrPMVR{gfe_q&(&pQnr0J&P=`afWW! zt&vkzQIj@(?BC@?*#$0ljyK;t@=u$f5!Dy>&;GGc^4+l8m#>G-IsI((E%PUni}JWxj4-U`}Q8$fSK2`(Ie0 zO6{}9Z>(A9(DlO(`u*}dOJ1N|{h@t{<*FLfuD@8e-Q1`BsAYGgyQhlwADggl;+!A9 z-*Y3%cg^Q1y^8<2;LcpDPTBS@YdYOGFQL16z^v-Ffj*A+7MvPbV~KP-?9bub6DJSY zr~P=Rf!T@|0`5I;ZGS^AhXcJt$D&>X;vQ z*@n~~*>wEWIJ*gZHx`|BU^_M{^xso&*H4zkcN}_q)!|v`N$-yoskLuQ=GOB=IyB!J zm_4QX<#!#gWIsF7EVaz<{nz@9Y#qHUEul=0ZTG8{sx;qrLO(f-lgT-byvIe zcwepDhx>_U)wawk-(mCVUt09L7hZC4jf351F8>gGA#-Kzsnv&@ul29p#%sZ`t>MFb zc1);ubH&JUt17)Ax)9I34I67ciRm+@PQ#(^Pj;L#=I~FMmAWrTwpy}IJNfj|&eLGp>$ z&aF9ra=Y1ayAPxeyMAoV-qG{Uwd^&kPVLf#SN^u?Y1s_F`_|R79cNc^UYt1gwl+AV z#Tmb&3;NGJw50IIUB4Xhdm7ODw>~$f-Kdt8lJ@hI;_HppzrrJvzPSE{&Aj#|5scFJ z4KrCCGg)85f+b9Rn_$RUccIx9^^5RnJ;n&Xc3?amCN_L#J1Xlt`K{k<%LiVFBe|3h zysXHixq?3h@8swaYeV!~%n)y$eKz}g%8}rKG22rfcBygr=8P^$w|#9Fu6mT*rS08r zGuy@#__VBKC{T839zJI`Q(-tomp8zTOsTa~{s}Y}$WyLRKlen^x~UTE8pXFnZab#T(zW zY*g6kde3LyH10R};kb;&BRVYjaDB{Zo3V$Fbr@j#I4b;;*5QvAwX3Y?`lM`;q2DYm zXkDw;fxb(Rj8{x-?tS=&z& z_AalHz|Jn1w8j2#iyd~`wV4O@T$*^(e&v>-$&PpL>B_`TTawVd^q%PI?`Pb~eS0M|wvik$0kutzs(t7o-u_l!T@ zboh{!wf}th$DR>K9&}$=wRozX%ZkmTO3ZF!6W8bbTU|oT$%~_2e^V{~bos~jFP={8 za7cA@boaeyCN@*O-WKb&?qZ|Poz;yySRB9Kw%mxT-|akia!1rjk7woPoqBS$)s;#= z_86O9Z&pRSOZ8Hp`S(x%O=at9<9PL6DgT9Q3(t_=?QXWiIjMT$ksEF525-1_ZeQKF zp=UOI*xz*84+R{KGs!!H2d+U=_`ArpRYHyaAwtZaW#{!f46Pj z#oH(28idq%_Mm6yv5Q*NUc5gwt<%pN=Jd`O;M2DI(E7`c?x|7k(`4)SlW!Ef`uonS z553PdJo;#~#g*daw>b2hQKjYW*ZnKi+drpn&mFtX=MEfy@&35wWm?8pQ5CJZQhj<< zhsoxjvp)5_>Tb9CUP4-@+eL4;xx6D|e6i%H-XTM}R=l;dg!=o6l^WIX3-5opm9{|A zrSPH?E*Jh_^K!uRGga!IxpQ(sh(-IX8565tY+UT>#NXbm{^RbgWn;dbwQ*R9!o9l= zd_2J{`)ap>V?I6&-%<7E>Y9No8V~U;Sh8Z{wN?jKP3SQ>zPx#%53?)PJyZT(|Cx`6 zdd+NJsbaU8Z;v&)am3F%_C@c5o2M);@^ta&dh@;+TdI;}^1?eUPByh}(8;>XK2-**DkqMySHX^(5X6~SG2AWIrnT} z)u!#P%r3MyY|*x%?04s$cb|5SsPA>ZMu(xL>-_TDufP1*>`_8rI zm2I(XPw@f?$NNqw>QkV>>8jUKehNKwz~T3PH5Xs`_J|nwYG;K%1cMilqbD!^P{-x? z|HjAv#>fA;@!{g4j1L!#3v%@2H9qFp75*Rp{6EM)gWVMRpl_Sx=*f#dj-GM)pM3i- z$T#Mp^p6_-LXIB8{?SV97uG1f{M%QPFMNu>qnVc&5abtK`$m(yLw>pR&Ed^6wtT$$ z=v|ZF29DaFx#G{+T^e30y8rvC1&_~f;D7QPtu8JQ zasxc7*RQs`)&BFYnccMs((9{c2_;uN?lbG@^ug}~w@oi@^Yh9|4IZxgaQuIgn-_iP`?=timF-5HC~5aiht*|jpLbr=H#sqD`p9Q<(l#Aypk3k{ zyxDoiG`mklo{y`n*%H6brrVEY``n0lId5)zd)KQ2)~G#|_M!VX#2p-l?X&ZJlhe98 zNvAs2p6fOJ+e+pCJmgkq;^GGr7q*?+N2*bvhjoL^+aB3W7_n{7$~*1r4juj5*5iM* z*Sg)EI3jA8yLGZ=?18OyoX^`_t@pD-^O>rfF>fZ$Z`A7ZPvsXaxbEMfwNKKg^#`wx z939ZsdCQJF#TN$8EBE8z?T6PpjLdw|_vz3H1#Vt@SZnUiz%426?=sU`q;@OcU`X)Y z4l56JzHzKxOkhx_ppM5YcL-Ved{2t^nmMnl{d#rh_e(2|ZTNEikb2FxuWOmTfVENT zm*4mEJB6QQ*i<|8OHcQt(K^S@pXaWMnf3bEIh%~A_(CmrJ?r(I0dW!trIJUjC7 z&j~jZE+lCz=6l;MURb=PlsGOVKKS9mDId(&(DV)xelP?|<{JA#Jn80xi)i{3v z$E|}lVfYh-ldg!t%@8n8A8|3Q$k4>km0sCDWlgx4br}BGz~)C!3vF-g3&Kt>GwiCy zOK&rM7Pw$LEGjWvBX9b|1|N-@#fP%4UOtWOWxFwCR!$VhBy+rqeNQa~O`Wg~W$M_k{%l7_o`g!1xes zBlQcy6(vpV>>TK)96|qsV#1NJFPPpCUv=31A^M^XfYz`Uh<`Yi`$E z9sv)sB}ceHaH;n}({Pkt#Mg${kbRGw0h1SUgi$0tz0&a%aNgNs)ypo@pq9f*v*9gcsv2m zbTx(to4kv7|7ky~m6C6ovvK}^J0H+T*58i&pN}}E#YENamvy9f7W-Af*P5}d-mRql zZqCf!d#UQyQg6xId5M(Rss`&k)kR8jEyWgVFGz(aShJz`UrS~arZ9&pzq4(xz1heq z4ODwxmzBO>HAD&>>A?n{pU%2ys!NOd&SMk1yGz;k_Nd&8Z)S&H{HS~Gxl3}N^_-P$ z7$w~c9H_GQ7$=qPUyRxJRY|_86{^~^t4ro9wyPYwKa@0QKCuQL+Op%TI!UFhA+I`S zv)vauNcc9(>iT+1djb<#m%FRj{7adt{il{nKf8HL>u#A#lYB!}-dA6-LyO~?^_AId zUZa<~d1?Km#yfvy1xl}DZUJekznrSG+OAD>o=^8OtFdoXOTNF3b0*~^hl;KGWHo299i4$>X}$Ym=Gfb+sq)R3~$T|tlTOU85OGYOz$Hl z6uhIl{A#LnbZre)q^h1|z0Q-}wQ-UzW_jvPIeJRwx}T(qr_M=7%MF);&Ie1y(rdEA zg-%H?8>Z-L*UXUK-8-NfS$Yur*mssx#34?a=;$WZzx_tK+{Qw;=0Y*4o%>kTw2TXq zW!*UDv8{u2vd2d@^T{N(d6g4Oc%999EhxYu)`qf2KL)Et*d1eq=FMOgXB3mp4k^KE zjjbYGJwBd|E!sfJ@^7RIto#>?9>H`g$J?^!$ycQZYtOTjWpuitJBmodixpADHf+aY z9iHlfTTf!s_m0q=@X3%$^?#4u@t-qTfuz&AnhT4upO#ol zz1!4hQ4J^SVn0om=G{zXjqfd&ygtp7`XrQ)W~W_|=0CTPHalEJm!$0j+3wqGq=9Z1q@%5@qzIRylFx7Ex-p3! z(tm6GJ|5UovXGifo*TC4QZhHPq$OGRbhk+6 ze|n*+kT#SR{H>*Kb+Z`h^5)V~xm~N+wD}Rbt`~lj;)l#rJ+fTIMik9fU3mJKtt)hu z+4Xmp3cF=W1^UNGogbH#E)K}}uknoy#Xjl6W6rTsg_g5N*-NCVvlgf{)668@!Zy0L z@9(m1)$N&wQ<}85Qa{y5w~Vhha*huo5n`pAIOGvo6dT8{J}nZFJx7v zBsTDaj=6QPX7{f&V)q8^P|fgY#KsSOuG%@^pcK&Lt<*R{_g~{z9s|ouH+Hm;+={$Z zc@}QRy3CK#HCx`DMLS&8l}xWF9kA>#WzTFYEuA<_`em((HE!^LO>I?^O^EHS+79c` zsak6mGRs`5bhiq#yL_7s?C@B(Z%zqmi*2w}s$>LLCg%>MT zOYgX`{}!K|(&{=J+5Ljl?59FHk8*pZQpY!_YVW_yY#N_b)qVRbJNaE<-NLSQ*ky-l z(y;F@N`WnFNUKX0VOQRC(|xMlk~O=KCXLZJvMhC3-E^17tjg5Is`#W~?A@miOw;Fp zbZF9TUE_vZ*tinKbkS?hNC%((u6pS@m)Xv@k>%3kCAPYETjtQ`9V;_yk?!DWH|e+6-|80IZe@1PFLYaa z?`MD9Ev!0RsI>H>)iWt-MnTr2(=(}F>yA5%S?nd7=6z0zI?+#Roj8Z3 zdfKwucVk&b&3#hbg*`g$>{+a0L^syB{X2I1k14w2i#1Ya$Zpk}er4GGx7DSJGhh+7 zn}hE5=I&CaO%GlCB44Ry!aKHcc2~(Wb-k+F^D2^)dZ0>$TPs@(c7Sf_&m4;GV-M;* zlK!YQf!**}%X&6{rMq@!gp^U_t!`HBooxTpUs-JLlkD7IV^nj;oR;Q2Fk>!0b=i>j z;i~FoL!?$c->cq@>BtVYUZG1c^JCkd4%D4H_PgX9{z+G-&`~M5=NxHdr)seKuv+)* zVytwji6_f`QIY*V^SV^`)(!Sh+N4YJ8zVJ8yac_H7OdZzWxC>9 z80*|_mlU$gT=Fbz24g8xrJ}{OD%T6^q|0khGv5)**kAVw>XvUED)p#(T(_>p3#oX6 zcdDrRjiuD}`*lBmzzLt8uBt&TZ%A+UWwUA*c1tM*Dl^}?i&@8O15}Ssw3nJL>nkO+ zE5`2jv5~4Dt}NBQ&|Pv)pD6j?ULtiEwT7kCEzN>{oGo1(`irVlZZ4Tu z=>Nmebw6U&hT-c;N{gaIg^DCCvqeKCDh+Aii;O0b1`!e&EtP~qDqD%DWHnTzX=FrZ zLZnEgP|y9Hf8hP$yyrR3eP7dv`j0l?itQp^G`NwhmOsUr>??F!s+EMR99kb1@|~{? z5jc1lWyh97;mBe5bqAsN?`Qh2JcG^+?Bl(as}Lu@kKG(nk7oDDY^%>WS`#soJv}{v zbQ;#;#Him8!qBmKGV6R5g8F=}*Ea%^{h?IjP)edH z@qC8&1AI{orYXMz$uMvr?XoBQHXjJ>8LAi{--UrXi($G}3HuZ7;-NtvJ&%f|1!Boq zBcuT7Ef&G$HIpcr?_{592htXK&Mr*bOs8IV^1XqhD5pCBrNv%YK2w~pv|0pXT^YJD zNQp#x$3d~&0n*-cXpCYbwJ)4U3#ta;oQEkojxI%s@_m~8Z4jjd?Zh_ecX%dona|qz znVctIV6AjYJltXKv)V+F`1Zf8liuEAc>8H=oR$auIu3+Q}E zHGd@$Q?r0hp3Ehaoer=XWQ6v*Qp!qs!*rv{X~g#mBzvEM#qMrAj_k*DXL&RlN5SiJ zH9k&wg|_iw;=Af! z(dxevEZm@m#*X-p1twb2y$nC}Y0ecgD9U*1;wVh*(qd5$l&D-~6PtMVH%aXr$2Q7X zlm3`GTs(b*YRbQ`&#wq>^MlbeI2_v2!OV~~VuQaLH_^R9L54|~ysHxhZL@JmY9M9W z4WawqCQ!QF!Y1!B#D{2q{8Ej=#1JbUH{(2Bb{g`^P*JEZRbsxCso0#dna1TulKSTW zzAIw`{vEr`E~g*CufCz^kV(f$J71^>Nn9H8m&jv}GFl$3#<}S?Fyr`WnlWN5eWeI? z)nPk1-IJl+HG47l-Er6sFQ-dkLG(@ZDy$>KFlnzbn8+?Ha+pkg5qB}s;3+Au2x3>a z{eph;4t8Qf7uGe%Vy&Ya{Ymsd&avMZ5d4L&8|I4@3x>0MVllMtq#sSWF^mF#Y@*w( zmGn9^mO3kiIeSYa7mG2a@Brf$4DeS3!jTIJ6f1#}$2* zh3D(Zm74s>MPxt8jqnfxkybI&3vVgmQ4NolG^LE~W1--z1>;$EZ1{k|&|m+8mGmTI zxLP1cfzRBV)sp5)N%B(NLEp!`#I>fu*rU;bbz1qf`(-h^D=`u~^4F5hnpc>X^_?l^c|b8@ zEEQ=##xTzq)*F>Y1COg=jKw}$=+?^g3zaBKEsOSj8$(kyWXZNNhPIT+Q*5v(9UG*` z_SQSn6Qgvj+Hn^@W~(7Zb~x3TtZ5ij@FL0i8xvzmK}I!J=@%{G!nh#yj}?MJ(95?wlEiu181v`wyn zCeM~2TUUP)?Z`v#@1qo)BM*%hXWCo!fnto~$xt?lN4Tw{2@z&|@X=8S)|Jt!C`HT;78AzI42H5ZIKt^4y$W8Ntr@;(1F7*d2lVth$ z7CA_qKFkttWK(j!5&d1Ai<2JDU?^=xGsAjWP0)5Md3=>zJ3qoZ{Q~gV6JJiXhZz$Iiy#QCaLj9ab-~@9OYVYCxO_UzYkIS zI)mSd(j((5B6w1L6*mL|uwmFlQqH$QV(b)*H66@ivmIfj!eB>93LzWC~`H(VBhmZ$Cj(E#;79*iI`1 ze4=&dV7{jH3=(E9U>B`jXyo`t7XS7fIi^?8-Q&?X7ud)~RIjB2mnSis-LH{)z?mhy zU5%H|OxS`Y%W!J;KKAVQF*@1Mz@was5Wbz5{}g)^99u_TB@q(K!yX!uq2AxdaZT1ZABUkf~k#C{T)mZDHdMdf5#|qcmV9JwBesS?+obJ-2s`I`y zPkAPP?plhyY4LQeZXjxo9_DfO*Jwk{AND=<1kMMJrKD3EaqZ+<`slKrw8s0=Vyn}1 zsc$NBBP8%yGnA`He5S7EA#^fzJgr`7&8o|WAwV>m*=LnwK(9Tibg#gNLLubt$_Sx_ zYCS#c9ZNx@L!e=J0hUG=nM}VP6dsR7X4wmJZ;NKXZy6$b%Ljhc-waoW4d?NDK(;7X>wc`|Rv)Dopk8Oje#9PFNUPY5c6upgdCDp)V*pcqaA{~yST6_loo%oi@oF>3& z)F(0@Ifdod?FBC~p&{l!=*Q1wj59q*Zw?*7qn13}-9C&}O|hczwUPMJu0U_o(<$V! z5DDBDfF9{R@W^wZ0i_|7H0p*R#B?O*A!1C!U4`-<*kW?iHK?s$!QW|iVCIoud`5~G zZcS;UD7~9FqF+ho>j%(rJ1gFFAOLUF5A)lLme2;xQS^QE5Aqoy#*bC~py=_8o4b5R zPeBjO9qB@aSFa#u6vG*NH*C7@Ldpn11 z#IPc5y8k$v-JF<0kBn;B?;9T=o2fO|o_4D!b4wxJ^X#g6j{2#YGi@g-~VR#u29Z8?oc{~Y%r&U^g-r-EF2jnPq>hHPq7-?! zwIRE&fcrL|#>w?56z91d=U-mrUpoIFAk#(IM@P{S!xdcL=K{Ry{xE$n7n0vl$#Yjp zQFFo*?ku~M^xEg~a_LBf=~(cY6UI~a(O8-|s1sfXY}p5`0c2|x&lf#BN_*=P+3Jre zX!-aYy3W<~_s?ink^347PyD&N{$onIrNrmj{D*qgo%|%*i7V!^=sdE7{tjxx;5nmd z!=V%eOqoLx*`8=}N~P_08%g!+Px^W5BmW~g2{&y+Y1J1Ea^5hJ+a-QQkwY>2G$b1V zx=H-b)^qrIV>f-7=|L-Ov*CR5J{lA%p)zDU#*N&@mRD_oSlDP9w|xQKj(f$lTvlN4 zM9zQmUzBkE33=`xOSj$b;l#!goEjugW@-~KDMFlNyTTFp#(}LkxQIrp*z;52&&jg> zBVDc8KGQ{n#Oubgl846R;{KV9DBnTubKUuP0VmL~HKH>W6Uka{8OaQvfRxQ^ z*^=K@xE8PsOXvQe;MZ0(ZqOvM(KKO~%LQyJa}LQ?4}!VPtuW8Iokqx2@a40IQbM>dzocA%rRio=IO`^jur;C5 zoPTs4H_y4vc zZOP#xWu#-B@=0M}k zFB-bajH|6Xi#j78l8;}Ej^QInJ@Y4W_U}aXj(@m3KZ8#URfTN91@`s(Je*lBivMDh zX>Cw8U#9g2ABw!0!@*IQb8Z0}^T(C$kUa7_mI~j*!SwI38cFF_F_8+;k{uUVy{965 zS$T(g6F#CbbttorUI06%n`~pUDEXa9C;wk(VQub7*{`ywe$7~Vywwg81qZ3>(jVMR zccoAM+PFO@kM;FyqkQOgHuMLhClNUExXIe+}(nvBATrJXwk-{XE5386FoUKn8iEhV$7%r7XGk+D%R_e z5k@SM}oabpsai@CB+;xAFbK%jnd(=faM{AeUjn-nK+g_G?`X_1r|Ctz?PJ zep5M5WuNnmF=2WnAFeNkU>N~ZD^Q2Ot|DA|BuU+r^G{>4DMQbReUN4(eN>AcXseTx z>^UfV&83e!VtBFNLOQ9R!XCN=k*>`Lsv7Z&`c4eRM*a~m6g*j%WW(N+g$e1S5rasJ!b7 zYk8PN1&W`zqcBHR)PARV7X$Fvc`XmLD57(EAs8cRL)&KjWOk3%fNv7x6^^%QUW=3Jt5|GpC6zo7r9B;UNmap{3|>dn$aqO4ZvHrpuZlf5axRaT9l3yQ(}->HU4wyT3K*rZ7E@>5;xcEe zXxorM)MPRUHab3hk^Cfx9el^4t&h>*%(48?ghcvtDvWG?b|Krv2M7Lqp*^<>*)#e`IVdU^?T8e_3e{v7&?6;B^8UZO8B;sT0^9y94Ws*O0H! z{UsqHL6hPg5xH#>P08BFLhTeOKFkOQwgk}CCrdE=hyr~cyo295Yy$!7;E(2OQ{v}q z)G*POsw3kNb~y%BBQCQ1{bmT6aGe*8mB$|6CYsY?Nq)Cp)7JY}$n^YQzH^c}u3C%W zUUdX@9XJfT3T=vec#vKCuaQjcW>E1$;XG)0;L-RECjciHw* z7aUl2nZ}xqBeU?Wtj6^Woj*`Se-HN2y6W=^kv$YHLU|Z{=Ofjtlo$6TjfP zn}W)TdFQO44~OS~N!`NC(2MMki6LIKC9$*i^YFV@na%88Px5WMV6|Zd#=h7Gr9#Z@C- zPKu?^S_zBk6ZxM9U$HYH5HBpA()ZKrM3U zwIuEDUJA!+Pk6CpHjKyUB6oKJdBj`uQopm9*L{*t+vkIQVGG#4@<6(u{GF5sJ)^9_ z?lfyy4}R@A%p?X}C$YCPN%G|?GVwUb%7pZK6R{G0TG)e<=iK5NzkN~hpd9Bj_n@Bt z0R?x_*jz&l)|`V}*}J^vF39BCXv94DK?_Qr(3X|Du#-{8uihF+-%5bXu%{$-^eY^% zP9dEQvvD_PGjcB$v+Yy-Xs}ZrymKRIqn$VTHNJ#+$39XSy+g=@Rp**>R#AUeCRs!@ z(B0k!)*|fQhV$p}^hKFC{KgPjo&RW|L^Yl*n@8;vZ?ah*KB0JTJB?oanc}pcGrv!w zr1i!gtG=C~(8v$GGdZ35AJp@SXWvn^#3}au*?LS+vfCrR6Ww?>RR&Toud`d@v#C_TU8j{qQwG0E$%nM?bXOgJqpu_2 zf74jC+7qlV?M7*C5pu3y=kJC6y z=d3V=H2n56%RA<{l@S2TwEdWFR!JxR+L61z2^amfls2eOWiOzA z-K?RlYfmF+(mhI&31o9a@8GoVda9mkE#P$ar2EGZw_0YiK_(eAa!)irS!PUkGyU1r zx>%~+)6Y7cJh6DNH5Tt~qKgZL!(6w4HkSRxy2?cSseR54x-lpvyJBK=4$Ze$r(o4F zuq&9(=C9g5n)wx|p+@&?vCC>IWOS7@%wVtNyn zjiyN<#BcYornDwZwu|Anr>}$EwzVwl`w_|#UkD}k5+l;1>9>GOUT@jT^jH>^X~eO> z3ri@fyBcF+JyCx82wP^b1+SvgS=iR;xU^4{riye@74^~W#RjzM*BaKBB1x0go2X}2 zKZPr*G0!Ut$xdl4S$ABsr{iX$>fA7h@*`-AcT(2`ztWiCMlc&~?cavGeu$ zwFXtvsa!^fp9YfBT{m7dTZ~dl>jlhnInjnd)_1ZE)|>s<$o2a0J$@C3EVg52;Avb+ zzCz~H|AWEhS(rM~iKuf*xb|5nlI7 zmnJzr=lyoh_|!O%xh@z?wRs!4lizqeD11Su147Y0_ckrm(8Hy@NmR3mkyAhuqQ_;U z$SRBfJYf%u%Nne}It-4(Hq$xh6gpT|2+^1K@ilfR&+1%+4p&KT<8DidFP`vO?Ghw(5+ksTZ}lX{OE!fB8@RjA+N@okf_HGe1n_vsCZ=)7R6HnZ?yiXtUFRfeTU z9*dk_k8Os2-1Y4v9Levbw48OsXANL|2@kQ+TMDoC$5XGu18#WbB^4X2q#_wZ3>_)S zN{x-kwD>U{{b5hv0$u63TRWW`u0u*S?sV~vF7FyHho!J)O7hBdkXew`u2#yA(qWHd zyM(;<`6QE~2D3F0Ox36oKf~HER?QflURu1#XA1o}WWhXqU2uy(W`n+%kYj2q>z|MT z?_LYOG4mLV?kz&HlV8%;*fiP`jFY6fj>c)_I3ij#iEcZzZOg&_`h z?8d#{w08D4+E{v<%I!~Ms`4-xjtPaKk3Qb4iQs4b#t4nX$^4_L4&6Z|n{@0u+W(GV znd`*hD8G_=0w3T;Q8il?u1}|W)G1=(c6hE5p8ckUq}ZHBi#+q_^5$H&(zOgF?max9 zM47@C%wSvfD@c5}DgC`1PydRXNO!FXHF-GVuGL@CcAmszYc|j{HlCDY<0;lQi7!0A zf*!|9!oF`Q^7S;p?nn~tW;Fe>BCX$-2*=b!OxrV)K8U}e*tRo#I&%^Jho?y2aFtGN zIYMRM%;~(M2bVn)i~h(VuV0{25trMxSE*Wtn)LH45*YtPb1is>07(PGL;wFDAXi?=FmYRBpu4ycV zn_4jzCzTLN3(=4>gRP9-fFZZfk(5y$$>}68nd#w}AoLXk=6d7vmsivd2b!aI6}qOM z$?ab#|J!z)3LK{~lQjlZD6PZo{&mxs;YIXy=>wP-ykw2ZUc$Wc67yPo!8YHA!$Vd4 zSf0WhK82$&?Fdu6cAwJJHj#OC68*Wf7B9IY25C*lSsOiC93+hub{6=2%APsiSxE1^ zt66u+Rw$ZRv5a$ebZCdbJ@wVnt=EH~8ybU^$up?aaXo!Cy3DVi=|#xrX80+nP)h7! z?ANS-_oo4T$>blfZ~93oc7?R@@(QM*I1+uU-t&$JOX+g&2(+XRq}plU;L_wqmRrtn zet0WZcJ^@REyp1BE{M`*{YCSCJxu@DZ+f|A4ig(Tgf3gfqpIQ-`9B`OAe4wcNU>*U z{I?7E`VW?|^CrH8YvQb^JLx8xu_|!^H>wb2?-Dp>40_33B?WeDeVV>b` zF5qvs@q5h^jBj^ED=J85sysYxgD7G`MFU{Hr);p`*NA((KD!2_{P?B zjYN63EK@c}#G7mjuKw-}2}lk*ud`rls7An@4CB= z8V3qIkFXP82)NDK_sK(lX*r)}?$Q*N6-GDKXEOhc(U`V< z2fI9JB#grMvCVJW>G8E#9w*=~?0qa>HY$~phUrk$w1u=XSDc;>I!V&Oax{9E2=(|h z(GeA)Yh<BQKjiIJo zbNYMObQiE+Vf%4Y&_CrXJf~)3Wj0M`H2&>w!6gfE>gm3~E0VgXYv*2mEujP9!hIFm z_L9a+^|1j4ev~?VF$=n1fZeVK$*2D}MwKPdB6nZM!A3{v<@`%%D(@fb%Dr@mh6;TjC!bodIX2elLLyzv^@6{B7>xeigt_lyT#%lFhNW|OOLj9& z&3J~3{XV33d@n!7t|3W1fj{RLsejOM(rKBBQd)Y!|QS2Wc{m7D|rfuj!7`!z5pshzD~ zUW|*ce(<2d0T{%Azgb?e5%VTxMMHY0RKrxpnIUmWJ{J*uE(1&|`Q58~u;AbmWFNAl z=HDO4+a(V#Q|`0)>xOt?AI!g=ScSG0JGMvowl8UrXRKKSJHt}x$+u6$`^u2>)eXz~ ztysSNFx=nv8gB%h^OD*rjOyhnUF{uxFEpow5-XbTQ;STa{HQq0Ye;f@&sF8}Z| z9k5h@WUUxxw{nn^30x#9>6WYtf1Ia4-^N^^n|XrXtX-QQFLQ#~V|yl6JRbL|B&apy zGtP7z#rYx6Y52N(JUHVeNjYSYdRZe@#k@jl+eM6X(iD0`hLA)+FG8Dq@ERYOO!pgn zD|RO7pH3LpJQ-8g=aTZwx4g@|k>o^XlWKzzvVSCCqOSyrYI@>yfD8tG|A6FXKkBK_ zK~NL%(BRmp$mo=F!m;`2^i95MxQ)`9HP@oA`&_(5E96b9*jWp)Cds^j|rTb%^_ zskj_!8}Cq#TPq*`-hrZP?fJ^ir_`q~pF#r6C~NFNCK7XnB%S&oJ3oi6Tg77b$R8LU z*w2@>XVNsu>qs4BMc0zGxXkVQRFJocdAOaVFpUFLBkUhVouUlN_B8jKC0}vL66G~( znCmEg+7$bcUbP!TS$&EyXL#V`T6LcITMgS{|6)&40RDaQ$CCKfFkU&Dib{u~-7b_Y zCz}($I-l40+2VBYT`n^=3)AMy(*tWG=;hQ?L-G`wyl5M1J>P{jc1QV=OaDR6CITP( zwW9~6fm=!59v*$GkcHIxtN>KxbYl^;y&n>bmEAj6vQXB@Bvr%!)~+}eR^Yslcg#AZrOPkFfApDQS|l3rXeI}QIu0c>~M4&-hW^tHX-C>A^sMLuijVCom# z9B`6SgR(YkT{#2>n!p<~5rn{K}#ylpjq zWL$^u#^z+N{(^qKyMnqiA*A#kEr;S&~o zt{u&dgIRu}IKF6VvwyBB$RCtQFP(29X3Se0*kn!;(}vO$DO>2xeb1vW9D>H%GFoy$ zj-sNDv+Z#{lswj(Jhg@Mo+ru1sSl%jDKA*S3vt>m6@m{o>!50Tj$1*E@_SAA?vQo# z#qk8+aBK$YO;h5gLX%{UTMlgepW|lk9bP)@8!dJB;acqrp|*c4AGFz(4yXUZ7Vj76 z4lKdT1DkMB`Z{(!RfDYhO**yA2N^4m@QX4&c-I_`i4jrQxMv~Ko(!RQv(0RdNe+5d zoXJ6?lC&?(V2fwp!ISqQTzsQYikCKm41Z*k^C(Yxx8NOFtgDB)=`T86vX55O&BoB4 zbyQH5j;6+8Z0*rIv}pQK?7FB3Z?QQ3tLq{bYMzC0u|FhE9;A1NJLu}KKQzGq1ht%A zz=SJVcy@uL9-l$yS8QaPG6rLowuQjqU#GdkzA`g27Z)bX;7R7{a83Wt#NEAU@b~BJ z!BPz>IJbj8_z^&XGBSL%^%l7FhqJG91RVcD5gmWlLnoH(XJMb`qpSL$pdB7hOT1UI zze(ds#djz(f00Lj-MU!z+i93yV2z;d_woAudY&Arhu-FAe7E~bTC>}V``i`7Zuj}9 zdD%=md*5NR_-D#kTY}EUSlEr2NUkeKk^izbnDBeJ-{Hj6mK>+=?|+b9-bcLszMXIP zkEgFM^D%dXF(!KKB$ZETaJi?zTCe%j;hdKcmPb0K{D9(LgrdlG9GjCV=+(MkbHAl6 zn5?Y8GM(0AqGlX_^kXg-th~S@65a^D&r6igi|CfrZ+sj25}je)u+*7KU2;2V=+k^x;tIx=h0}=*P5h%yEo}>V z3}Y89nl!zVi3hJHvq(2CF1ZfD#ivkf#W*i0sl@2!SNv_u!&29*dhE!`*fP(`bmGQH}MyreO_<&v0jf z$5Qb}z>z|A?o+U}9712;!@ns82-FNnh)(gtB9MP-Tch($rN`zS}3C2f#0%|+4i9Mn7U#>Q1<5zOq#-rFC{X^wb_Q;S?sQ{8FFFowN@BdI`yyha7ejMa z107IXM?+FSqD~}_W?%bEWU+^ftF~a=sST`n`cI6Xs!TS;UbG}6gGBpEkfS?+tIJkX z(xEqWSke`dhl0sh+kr+1XTi}V0arepq(LG+q>&&`x>skD_pvM7QseCMfhG$%)wUD`R54u?0Q>$kw4<)_nWgL-^f&n$J=K!N`ILJ+N7(1zt-Vd-2j?NUd^ed3xcz$frA&HKHrQZWF8_8Yn%hO8 zEnkXLVl~`gZUPJ&H#3)qx!`#_*v;N#vW&XVEe7nR+ZIN&(smuKTH?)nX6eE9yBF^X z+etIDi@DCuc7&(Kl4{Di-jE8jawggYo^~RB}-(haF7>ic9(vhc*I6N>Nb={@# znKX+>s!T(|1t+E+vya?ve}PevIEly>uxVe)u}P_dsc&_lLK%6U*zpuWQ$1M6(-4>| zWzw=uH-wpd96#={oH`>EY0isSJd<`Nb%{5SX^>+__n(LJm<+tS8i@LUHMre!n;te- zlI@gxq&emk$v!Y6b+tHtY36U-*jtD7FGVq4e;0o(?M-+8F5;!^Kf2(^=|l7c)c-AK zI%1Oq{nSr*zf*(#wPHBwl)z!ldp>zg7WLT9qdTXiC`(R*HkwIcRi6ztsut4Ysy9?R zG6A-}+t~D$`QXD|k!|i`I-J+f*YBBw&-Wg%`}$5)d^3(_JKQCAlQ>+6)}ruX11YS@ zoGzTS<_p`Vk)`Tf+8f(}OUpTio)P93yLJ3W)JZH$U&_ z;rpr4Jcc~0enWCp1CA|q<&R~DkVfqrsF$rk8^sEKlOd=Td_>6&Kgn|5Th@JN04e+z z%UWigq6aNCm_K_V?HhIlY5!fqgcciEZ#jwrvmi=XXOG@B*O**e3x$r^%yoz5A#92g z&kFrPpUO;FvcQ|XNQ%Hu-FBS)GLS8+*2UxftJ$F+MWmM;0b}_{T5mXsOSU@DS^F{E zbDS^T9;rj2FBaf!(hC&3eS}J~IE5~>qX)=+oS zrK;wB9Nv2hQ>EPbarH0o-53O)mWw32DhHy!=1|s$?@aQ^C;I+!C-&@riHI-jFlI

ftkCp~!wv%1hvdP5^I;AEWO2W>@nC4-cr98JHz4mu${tbgfk6iyPM^^Rxh>Ge_U zli=}mpB=<~2gYJqN-|{s9l#drEv&C*Bdq=_q$!>{kkWI(b*=C8HF*%-eniCde0crC z7VP-fN*5Fz&?mQssY43x<`GPK^F*pH*Ax6cUeL8jA~CNFjLH`0|4#M@{G=K;`Ud*5 zbp_croJQslVuNFg@#c5|+fwlyJ{8+g8&Zd{$~SqwV>zZDJi{x~TwtZOlsQLzh4_*T znzdM%1GYV+#y4p+UGyv^+m_MKoM6alUZzinWVrl}B1rXwl7FixJpDhiHF`Ga@R>xS zj*FnbSD3l>OCxBs34e0Em5$%jMO8@}HD4^_BF8h~oR-5Th%3Gqi<9o-9UQ_o|00a73+x7 zA-nBc;P`O>n%e6SZgH4aImObl{|3;Qph>i|LYVtocJY{=cv$>C#1k4OP|bk(?B?5z zaQ`%l#=8nd)x(0>-Pw(_yD*E#4LE=`Ys)Y*JdI?Yx$zBGGGIRPAsZf?k8PcoXxJA6 zY`$=qlKm^7d;A%$H+nzsxa>$31;)kK6u79s!Hb@ofU6A~6Z{B)N(Ju_9JXk~XCE4;!|jCRqjq{;j}yGaK$ zN8!Y$CvXg%$L)HqLMn3|g|6wMi1pDz=u;BOg>A-i%aPbR*pb^fhfwdD7Wy~z3@SXf zaz&RfFjJe)q_yLbd48dwk$QrPKMT2zV-MWM81s0MPq14uj`TnKQ+JIvpH;I7`$K+{ z^_^Yx&`Z!bmt>5*((>=GJT8;=k9BjGDIgSP8ClkOK&u3~%( z1`iifj_DNv0~w32&ar4rtf%k;hbZP!HU9Y z$1V&laHD_JCG1qCsC`n&-C{;j<6v7nRL{V{A%5)hxKmWV+!r$rAE7%ong}tsgMmg1 z4ZZ9_X)9zAx8)7y3Vwla^48cNQ3RXIUYKnEfjb{aCZoH=yXW7b+R4d$UbH%yh!E|s zeL%UgpZG{qGcuS^z@Q5*{GoNQK7)JKfKeNI? z;&jhXkJo;>N$!hUSyTHRn*5-Q|IF#d!x8J5j~PR~-z^NOE1;!btB~;Cf+7+N*wP?i z`OaA^**qNYkFBO_Dw>EIHJ*8NsiWiNZ3^>vOv-r=u`OdEVuC%0;xuW3$|zoGwHBL$ zs=0#FOWHg{6#J$X($~G#n7?QSoHHfZ%NVjf%LBQGN5c3`Mmx8>nvpvfK zv0=(b`u6b?y{_=)(eB$R%dH(V_qJlG*gWz*aSX`~OL^**T(s1G}ESwlwjA|6zn*kOqWi4Wsjbm!2b1~ z?9#wMM1*S7vqQhod0-`%+AxYdJljb{>k(8-qbR~R4(Xz*Y{^y?QrfhJ(m%Q2eA<7`_>~NrGuLG+EZ?~9^E%4%zt~2W>3B+=>MXa!Rl>@RFR>brN$5fuPJ=8 z(9xZ`8e=-2;#BiCX7pGc&hA@SQ=<<&7cHg%1vkN!M)08Qx41|@NfGgo5Bcjh#6n@MF@Zlz&C=B3sTEyzCj+czqMnFL)q6elU$Gu191> zHzM4!U=o?a!v%jqw#jE!zrc;;#+pLW(~EA1hVa(}mql)pD!e6<{b#-997Tp?AQ4?x)5 zcvAlIAI8iI7j##lqhX?1+ZgllD6+02r!_%Ue<|GM!7l}TRVWwu^aWg{eg zBzGe5g%6#}OQLUKd8~5xG;}VE;{!yxA^j?ir@fXIJkaG_Vc0anRX2W3_5ek%FT|Cw zVF>qM%ihoV3$+IFD>ppOs+cb=)m2%{J%|K z5mL5>&0DFC%>|*bD7gmxHyQNPd^$!e-Nunawa`qM%39fC8j1&$`(o%s&GP770}fdl#3MT>F#P7bY! zjG)7tV{xPS0u}p()5VAd6z%$%|1FQe_YtbF)HseiH=JpZ{quLvLd0Vjs zw!i4*o0Sx)BwU^~z38U_4-)wH`63u`Y#Q>nuNJVFFBFub1J^$xv}tZ54wP#1=dTY# z{P!xhxZfMgc89S5pY>R0HkX`Ru8^$NIg|&9LjSuf3;D5)4ycaCal-)!*B(tP7dhbB z&P$j!{52g>9>)5H2BFCFB6@z-(X@%1m{a*tME7oH1_fSZJY)>BnL3bO8_Z;@_nkz$ zPAev=ZKKx;2bkP5VGsVEz%3lkV)yx(_%i$+X*tEhh`*#1@n|gk5=_&VWbro7D*P}_ z;H%Wd5czs3JSyCwTQ_;Y78<$ie2RThoFkF$Yj zZhA|}FBQr8b|Y1%Ey`(pxrd9w}X9_N|e^$esMb+E#~WQq|y zMQwMrsOz6NMepaN+`3e@UPK<2*GM6m!zpDR<=T#?WvBY#x!@R! zyp%%e!++D?jZxT;FV2$-O=!y0SmN&DsJVx%XXen_%zC;l z*N=7AHq)Ug>DaKQoNd?`DCp?RSgPrB`epf>CA&CKeAYu8zvqfA+=BeOR?@^@=je3w zE@7^eu~v8JQ(f_skaP*d)_|mA-s!ggQkX-3ay6=`=E9BVF00h~0ueZ&__PUL-Rv7Hx_+ zCP$tT%_JXQ!*+FUMGbSHmjw)#1I{v~IWzF(V-(%!ub`|oLtwqC8y{jqs7uj>>JOOm z$InGzH${eCTz4UBGh5cMU>EIp9?a`>ZP6~P!?Xg%W2eY}Jn{V(G=DyU-2zTEEAbnq zK3ay=F#^_XZA0_kC$hx0zofWNnznA7j&X%s*nj^M_vX=9g>T>YabEL$Q8G0b(jX;7 z86s2~NvTjMp-h=&N&_hxkTi)jX;9H5G^nIdnUZG7SkgcPIgfY$*1O)d?)P2mexJ3T z`;TW^*V_Ns?CY}ab05d|`~4gP8Suo&2KERR!V=LX^6$|CQ1-LOI8qAYEvCd#wjT%H z-6rz6d9W;JIi0a~66&ZHQ}rr23~s5Re;6;%S|;;<_>m?a{275-)8^yjWn1Yai#{+; z{Yg_M&cv0&3}Cc_Di%x|L`!Uzg7|0wagPs!On-j}J3J4|&6B8(REmf1vZ&qM2{1XU zkWLEVK}y2`qJG&6tcE#~FM5ZtU`ro;dhZUNc21-Q+TBn?D(TsaVZH(uF_Io3EeqsjRaCZT@zXV1I7U1^SU#RoL6RfYvQB*ww*aZ>rz5Nx5 ze6)heQa&NYTN&Ne<2iGG)PV)}RLL6k?|AA&5oiP^!4pd^Y8s_NhM37qFKfrXggR2l z_<~oxnUB_gQb5mN51f^kK#xWc%~@xUYWH{~)>H!qW{;p2U(R8+Vgoh5lmydbISggD z1AMczVee8tTBtLcY;F=RT3v#WdK**c+@c#6#$v~@4wB&5h0mp5$Pr%+yt?icT+JB- zxBY}f(L9oQ_PmOxA|r8Mu^pZB%?H&2#Mu058lKVX#K6TqIC5|h-uSi_njQDz+{Qn+ zK6ed?J8%HL?vRk?%CYb~NS&+~bV9(2y=32C8GOsUK-UF?L22?Ks%^BC>0eHU2?h%= z^Uh&#V*ErGr3!>Q_aj!)1F+=gGgv3wOhY}+yK3Pqz?_{VJ~sEUZDzwt0@hd{uosCY#`i#2YW12;M2#y=ymrUxoGtoPTbVMz3UV47*mHv z>$t;bmnLcykcBqEKgprL(=l$GBKf|g2OO=3kky~&;UY^5ENyOM^b|+D$gl$ff?v~@ zT4LOGYX_{ZD}r^pPQZ{-@ZF#WdeO=Un?Ef^t+(}%)0|F6-W~*51!5vvwHn{#t$>`` z7JRf*AGWS}i%G?8boZt$7;^p#o%%)zXDXe?Prk*V)HI6TSIC2Ax|1Y~^M>?=PqF6f zN0?r>opu{X!MRcw{HyRARS%k>=%5G|@6N~YA5TF2bv>9dxvPCluex>gQnb@~Nj{h< z!i&aerru@#A1-g8+gx^`ubBqsM=;vhKO1=SM-wVnc#~LldKo41Mt{ zys2DG<`ofGd3X#gYCOgGo&Tb+bpWdpdO`gkA04WOl6Y1CXl9OrHm5GUbFLCI`0tqK zys2>SbPBc)zJ}g=^wCpcC>ba}1@{{{s9&-VBadWJ$E}9ADBKifM&m(kd^9?q?S&Vo zY@jZehp%f(>0FnS_;9o*PGr{5ZA}-T$9ou9Sv4^^NhxkM)~34`8i7N)0T`}12K%H} z=$arVd#MtNJ*U5;_*MesZ>T^wCJQ)mKnG4{aA0?6H@Fg2`uR{To@MxYdfk^HaC|%5 z>oZ_3Mt{0<^LTXgnGFpYDwtGV2NOzi;K>9%+_0epZ(B8D$BYnYdGnJzWOG0>+>mmP z#-oPmd3tK+I;?A#!KyqFyezXo340aR#5W6Aq@e=$;NGEFej z#Ea4v5|%v%drjv-RdfI(dc{NIuMya_XD?VBU(fWqZ^P@5i#SFzoR(WJfss+KsO``! zyv1Zd=REocUUtWcV);0zHN8vJzdAu$qXcF;)uY(%2FA5+#=wgGBmm zI_Y~3)V;33fD=dHnMWv`ooj>-xcV^n!Vip5K87g_ujWKV29y6-1NUh;wNF0*VH5Y$ z$_tC|^oQf%HMk3VW1i#3ne`CT_z*JYcEOvGDpa&0w;j0Pc$=;A{DrL~oi2rrIarlGit2=@y}$ zBpFI~U&DkxFK}~yhm8jwGoNQDEHSWiwSNtasnnwRNlQ^J?k6tTrwJQ0)M+TwSFmEdXB)HY zadM6o9ym7uMT&BGm30cwkNrhlrGw#AMF_lLICwpgSI9cH7v%qN!+s`HTDx!p>04}r z<~>V@x5qCq-8qANb*cy1Om{rvun-itPo~C~9%7-{O;|AN8CA!DY@tZ(0h6c1p>lT(F8mUQ{tGM7bgmmdYV5}e4VAEC|6??6O(CDxl|jn9 zvDBwb39m1%L3_`g@XO~ij8Qbf!M1@+-hL4t>sG=8PUN)hdMuy7WK}jbqovAoXnDB~RlC(e)M18^qI{yRk%wWg9}%6L z+n{iE0-QE3!(r;`5Ob;x`hC`+X-fpo2;If#n~ESE6F^rgoCVG2-Z=Jg18Q&ZpuFxt z(DwXDf5rNt`I#B8{o5YkX0E`vd6~F+WeT(!rhq`_A}nU=-k@8*!C}@mnEhb@pOwsl z!^7-|4wGSbtou*>JP+eWeO?y2W;m!(Ic(8gcZulyu1~CkuhIruQR2Dprio#^cE0CUM zd`SHaovAMhH>9QDb?FlrW_ku1GX(U_Rvm_ujAXinBf8viqk;W080GCu)So4T>N6=F zqBjL^r3GW{#3s-jbAq0%nSfR*u6X^00DD6c(el0?%$F>sOBjE<@RSDmim*DQ7#vozz#9ue=VEr9yY?bc;a{mGDIi%v9G(yOp6Y%>3>Pa-#mn)Dgq!SbpRYae90t+H`l}T5m#rl z<4hMOBa!-s(GaC%lX&LM6fd3g0b$XS66_ytp*Y;%G!bmtxVYInhA#h=hJKodX*JsktoED1 zCxufu{q0|xU*iNzQ$AAblw06Z<3$zJE<)QaEhyQXg#FS0^!9Us{<-JiuF88sq3|A))cOd+wL}0r&9P-}4b_Tw#zn85 z6E6)1lyL9ik4vU_CwDR_NKM5}w|CR%3nPI&{~vA8ki)&9ssybMpkG`lRJiXYBU zKVxE^0gfF~iF2A?kal~fPM^}uWY}+FS^q!g`GV<{cx=PDXNzEaLNxC3a>K7T&*D!n z2TXYR5qIzFg5tzl+u4u$#&*Eu+`!JY%v>(qK-Nf!`j5lJ}Hpch#lZYOdg1Os#sOdfd zcgshTkQYBebifS#k@rGea_%$iRb7EPZ4rh1-5{YTK7X@BAK%gONPNg5ijQHCE)IneRD z9p{`MjGjGH(ZSONts;7e{Rb(GUpx{2K0SjC`a|g5QOxtCzX^EQYN4`|106n0ie+sL zwC8X+QlRtopAN_F0yyfYN(u;M2j!I27mXx zc+mU=*6PingHsG3MQ16^xBrR?I~?$18FMYVDPef%SPax_!xJq>u~uCIf#ZVkXZ>*es8rt=D zVQs1e)C~DBN!~!GebIs2R&iuQY7-1|(V<_G<)~hLkQoovR(_=MbR*a_ohC*1_M!rR1&XSYAmr{*qG+TAL!*4i`G)DZW}ps^B%H-x z`G@FXD_dwcb*0|hXTsGBX7})5jIj~%ezFv{q&^3p zrwDC#S)kjJb@(E0H0s6MqTj)-)ZgI(I6Rt9|I7?P!OMIiys-wp4i(UIRd3*aO9Hqr z=)#Xq>csx_IBdH8h%}Z*pk09glPsP>{xe6~_ir+Kt@I-UC7HPIMJ8r3J|%-2&SXe= zDW;6xM5+nG=M59_jD9;DYhg5*5o*x)b||r6a@va{AArS!_qbq^B3bs`3ZC5fixzct zC>(v5%$d0aE|t#2WQJF}E~^JxpBuqUwfS^OX(r6j zZqD%`krQt-9D}EH$@RJT{MQGfXd;B{XIhZ#>jW?5wYYPUAGqgu;gBT}crpJ5iQUU# zdaU;Jg@P1azm6uEX{{I=XNJ?T2F;Sc&|}jXpXIn7xLe%E%Yw6HCVNl$57%c6w!TDYm>1z&$$mt*9rs7=KaaKf?6OQ6|HBX%KWCq+i zV28!=-SGKZ32oe6jJ8wknK=Y4P%_XDdMy&HO}<06^r&HO+h)34w*kPI!`V6`rpF8hO+O zZkWx7#Lw5EvI+6U?iyqT32?Z?AM}qB7#Pxznx{rm$<|ufFvx&TSbG>`ji&Ua*cr1_-y`q$hq_YCXsIte(N%ox-Y=4sPEXGQjF!UAE0vNcz9ke zg&|F@cpsAVgX`Lwz{@ITU=Q|U-*QvN5htlNw zU(l|ZLER>;gU6bBq^`#p^3LDDzqSEz`sfIF_tp)6y3C{f9_#RBqYKhqMGSXGA7@rv z!SdDm5EPh+r!u@q%-W9_daQ?RELVVgt6Cs}w*roia-q@RYZ)HXF+6p62;TgljD4yZ zxM|@?_%pC!B1!1ujK;GyL*JbaqcS_8NN9MOr_Q<;>*z@*Huu z`94tf8H!`p4pxowln@LO|oghMs)F7NA^8cLBI6F#qavKT*ij-tbjvrtX)o#dL_ zfl=F%vFmswu70?h22(aV7r4;~H)lK-AcG+X{=lDRHY{=Vh52`FiDcDB%-&!{o(IM< zx+_v!bzA&hkWM3#Od!>U@kD56V|Fp)Rj^3FA3^`XO!o;~WzZg5r+2|A#ak%KErp}L zuP`7f61}#(r&sp)V1(vt+_G>G`unI5r@QkZuU8p4U(6VN^$=;kNTF-Tfyj|GpV;;jZ1d5kf;1sc<0|roI1i#xROs; z?gY|oci^;NSMk%805YS*2TLou=#c9BkSZEWmLL1b@Zxq;BmR6eTNMn~Ombn@i8^X` zW+YUt3c%3;&9L-f2)XiM9_H<9#Ma8isJxKLGcM|c55_T6I5io5q@E&P*OTzfb_t2J ziiIY}airfz0A=^~k_d(?dO_I+^sIu>SgIfO1-ClPfww-ULc(>sZ+;CV;oy(1I*YzN>$2A3Z?ED07gVJGoza=EC=fD%sgD_(7ADqT$JWtA2 z!t{qtG`_QB)nn(!dJ5XZRl@X&oTbZec1>rEGcdfgX1>81c>GgBZ(jNYqmO+ydKcA^CA-Ff3A*51$t|eqA4zVX*@vGd4W?UW zx5JCS8|lvd%W?bU%TQ9(jL(&mps|+8vDw|CyZc7Mh*@PM;mA73da6Q;PSm18u{qG^ zQ(>9I9r%9t2Of&qPdZPWz*e`HWL829+)jH>^kE_n8&^VR?feRt9u$K6$9jxC-a|fK zGJ&j)J>)9mTer?wNk)1MfqiNx>28MY<)jt?qf)sr?p7q42eqQhnKIm4{{{<=4n{T0 z&F~_t5m`EBxM6V$otC&39oMxnSwLov(oKSS!f3{imrXPRlW_`@b?jw$B;35W)I9JA zCQQ#FOGYL@OkV-{@=6DkhB3av)Oql?WIItTxr^`jl;K<@IrbTJQMq^!46WTn>o*!< zUTO-u#!LZ~d%i^T#A@QW_QiN4g^Qp_p2{D3yr#5P!`W`nK zg%YLh1kcxe0i*Akcq?cy3R?1D$|N9xfv1r-?;}>N?19AQ`Q*<;9hVH!!+K3$}^Hk zrN%UDA2AU=+g!t0MkzFR5L5dRDVFP9M*aF;dbZjP?#!7EV;I(O`@R{Z(6$6_?Kwba zS;t~_MJirCcn5a2RnVO4iI5%BPdi3gg4Hui7%@x}TmoGQb^eW$&RfHiFfkT~>JePJ z6X)2ggH1CFMtzPT*Tx@)Iq@xw8%G1iXK>-L`8*tRJqjY;rlWdgJsE$2c_uoRg1%do zV9v&J{JFk_>4Wa4lUIa*;Au15@f$$jElMEGChN+t zVXVbzaw@(Oyw02ja&j@lOPEP)^tRyoFez>3B`~bd0?b$d+!IN5S-*i%2YF=M8D;FU zVsif_>5y}N7fvhYF>Loln)a~(u5Emd@gwc=pob2|J!ygub5mgo!#2D>>nZJel?fY| z?;9xTKu@_MmbxM2>*Uh1rXw(JN(d%w2m&{)YmlyMflIfx&|g|{;M{$fI<1X`Z2!^t zwebgTE4eNke%Js`+ipm|VVDvm4 z+j?f597KC_TCs3LFfJW?93+gszhsOVC^+WfMUQ3hM8l3|Sy$q$rXrZ}bTusBrwc91 zd%=AFZKBB?2fqF4keJ#DCnEOazTl_$u)Pp(+)l!I5{kQ(e&D%P-RNdnguT}i=sQM( z@8wRT6}pQc!{a5)Q;7!ZI+}d0nTHdrR}g-jFKqVuM9=-GfFG3!_+(fITJU1w_`W%? zE@=%cN|!?a#!zy7Ml=#FA51Q(M!}J2vMI+2BN#?te76rS(ES5BpSnTOUj!=-%*Te$ z-Eii(D(W8e!Hw0$(9yP*4rBT}d1H5>pQ;tItgpew_4cs7ix18kUHJCIQZoGs4-+~Q zP_^$JSgbxvd;iqn8K1`#v;Cn;Kw+me7}j0hjuRVV@XC&@n7KHO(M2?gZ*PLi*&`LVGxtyc38>Go!SDcH!*cd z+;eo3FQvj^#n3H02_{uc-#Nz}Zw_KIDc5&{@62%I-0g?lns2Ci!I`Gj_F{pBJ`6~M zpfK+#2`oOq@Io)bM26|V!epdb z-M@&Rl`^nCPbPIH8^L>mH<7hw0H3=JlD!UNJ(~yHKApgVb;C$o9B8P9bLeb$IQ|YC24v@hmDc-q7`n;mO?=QhvDs#?R`(r#BbD869(y zH5PEDWDiyf_u=c+EoAf104VYH#aYi8u4C+U!unVSlNMCN!Hk7iqcWL1K5vbaYTMwp z<_GM3V1~KZ-Z67>6&a2EA-0UoAVaLRG5=#Wq!rwQ*QJzbKb?kc&V6Jy;|Cm)_8rby z+hfF_HgpbT!%eeRXnO3(X!a-Y+K)GIvFI)NXm$>bVj4+^v>6K~G5v((Be?JFQuti` z94089BK>wdAgcEFvz#4g&5 zAC3^TXE-DIN1x*@wW;`yT|-*ZZ{sp1OE}&k8RtbhP#48?2pc?%j8bmEVJell=es_B z(vODW3!Xv4nLc{yWGhU6=1qKydNF&_8#3Nw3!YI}4K6P>V(46;OH4a4;u6F2$n6KW zajCTL!Bjj|;78xv6ru8-XmXgDvle=J0ukjMf}_ss;jAjNJ$jrvl1;OTI*rIZsR*oBtoPgn|qLG9(ox#*V&m1Gp zdtuh=)!=9^qiqwoaB6ofUCzvz+G=7+D@N$x;d-6-#%f10V|7^)q^(k0o_zP>xG%#YU9_YV(f?B)d z=#P2KeWWcJC+JqfqF^<`X}W{F)K4&D#TD3mss;ZoeT*N@xRNV3Gx3La0r^w*4R%;o z5UQaII;ue!W=7#b(=8gA%*-fQHXc9v-+=nIgUp;HK7QSm29~L#apbRLtWFL_uYi%T zBKra?ZD^&s{s%!vOP_4lsf1lyd}&8WJpR0Wk$(U34eVpTQ0@2G=y$ydBlEf;;m3Y5 zt@<#evx8{k$$vQgs5R54M{J*`LzD*Bq3gq$)U|&!Xg!)oW?lG=A;CuYNpTRE?eZkQ zT25k5=wrHk)N%A3lSr1;-U89RdvtRt^ZvfB#}lv4gHK~N$vig(F6$m4*FK3+a1=mc zz6(5cM>6B^Sdjd@NoR*xVrxqzJf7eO@t^YPEuT=FG59dr=bB;Q-XPNbKo2iYxreDN z2TYGorEA*ffp4=uy_3lJIVwlc1^RAy@^cK(sA90aK7>RJAB*2d@aeKwFOct$PVI(< zVAk;rYN`4bn?)uhIbl6KFG(jM1xqxcI0*A2l5+;9Ni+h&fJR z-7}PgY;%Uu8J95W&_?V}m`ELWaj>j2l}2PZFdm{KYx`y#qz$5J>J*Ghiwh)3<6 z3b1hFV!W};nOv!S0y%S1F~j;cT$ol&`f4su-H-+R}yN8;(d+5HBQ#d*08}R0Df$_)6 zsbfSvkWF8JtJ4SjB=#_p$pbZYhv6B12^M|Yj(&`Xc=e=8azg(hEGqs^jg^w2CqS~{_ZLFOz$(JuyAP*nj)XCcF3Eow3Wtho;h<75?X}Rys{?*S_ewQnuT^9i zDo-G~;2()JjKTfJcVPOh2oU|;1yzh6F#70sns&4hn+F$T)c8?2a?DezXuK3El{ImK zt2>0Pze(7)hk>8{D=e?Pi;wq*LP%u_Y#-%L?v_TthU`D2Yef{pU{Hsu^Q-XBl$Rt~ zvlXKlpJnFR5%}WI5C|yZAW%t7#KVKs5{wZop#1!$~q z%;c17@b8>z+>`qiGD{9&9`&T|qh*l1pcOam)<^k_Iyl?#82?l@koQ(uXngnv)n)Xy z4W|>qZs#sIHE|lW?KTDDH8W|byBeb;8q~U!$Y+9Q`wwMLL z+6}3Yb6*6btFFTfSsun|wV}cF_uxL^IR2JuLvhU&!W#mJrfD=$Ck|Jt2h$j>K_|3)Z(DB@ze@<9ltMIXB9K3BE9~iWz~u60AY9{x;+{N+ zZ;yd9B$6uJJAmyS-K5?o0RIJN(I4;LVAZl_;1|w-(BI}Hcp<|+>@BC}gEVoYK|9rZ zTg&*Y_>{GJB3w7SPO}!3V?xq7_eGrT+m@XC8+B;?VM5 zEwIl1K@{@SVUy8TI6u;xnfc;_QzvYIeue{O?Q#H=j47N{^M_T%tFV&u5VY%=KCkO` zT(Rpa{ge`gH-G&Gi;(3wu)c=U2n|RKVxx)bONbvd9A!C_Q z9C(#zVxe&#~(C(4&f|DABGiXbY>~3<14ywe@rR9oiKoE zYY&3kzd9V%$sHPWyqXw?+&>MW zy*e)=V8*8ZGiePXod;cCR{wmGc)o=-(B z41f0R1Uf>g4(zwEVM_H+2#c77dd)|XX-X2$q5J;Z!Qq#)WVH5iJZ7ryg;;L`aFvw6 znTCF5-rp9w!J`RB{Nq51B=5gH{(AUI+!0s{C4NItF4_R&?-IypkHBJ+EIhR7DZ-79 z^s00&b3^#QH^S`x>+2Q%XOjc{Z}#&4&&G_;`G0-=KR@?>cmJPr`JZh6)8qdqzxzMO zKD!)gTmK@c{G#a0*oK$WItJ2@4)T~ksA%mymubvs`TynifBO9Y^Jo9BC;6X?;lIB0 zPJNZ1u41!4Ein?+e|HsBB?WT&3bj}giAZELeydD5rBgWU^jeno&C%@fvqljQlMFEQ zI?0B3QR=D!hbO}ps{oh*6@CM zW(%*EDDbW(rb~D~H*x>y%oq5_ER(;EpCmRKxWu})bF#Et-YIccJel%$Ao53(f?y(_Ll@Y9kYP%N@T89p`j$ z1NYl-^2x&2>}XQ4`~|;qMLj?9 zN0cCN>t?o^suf#jjwPv1e#TQCSt|UIzm8nm*3Fi>*u$#BX<&Ev2~Rb{N?xP&T_(H` zChJH~k>r1v!S8AwBmA}Y9_bvaCmdoko@XpR#LAE8mpHWMN~S7-c*fyMac4^dYmTR` zL@91EHzjs1=kJ5V{G-7xVzovTk7^wvo$%LhzVA* zo10|fdgamLIkR5yy3Q+0JQTUo)#Bxnv?VXNZ&sxdg}(}X57jZU&q+sQk0;)f7%bW^ zu*>b^`0CaPUozSG-NX6>QET^#Z>|#v$3-UzT91^Gf1ST&o&DkbWkxQ7-s=+X)%tSQ zm)H@qmgqK4SIG=vI5&!;Jffa^bIMg>B3Z}1`p83gaH29P%1_{wejQ43f{qF=4oZ|7 zp_wQ!F-BUQ+s)FdR+2Ss-Xz~G*};u4-^MD5SK?nBN73`ay!(~^(7w~d#ePyq^zMA*<(q-QCH)6h( z=~VH{LKE@7#c_gw*Iu%u`GG=He~_-;?a2=+5lIr~zZd&PEr312hge~c@3ZE`zm*;m z<;XwBu96h7=8K2Sc`1wM{Fd%ouEs8ES;%|&L(V_&bvo~JOb*wzDVbYpF`aF*H-l81 z@{zgOoM1Jce@bRi;FdTF*$)SG$R`-yCpEi0<%!{{+(#u7dH)Q&1lbDnL_T)+h1>Yg z1tT9V7p@t*R{k&CSvaPYE82*UUrJ$I7D>pw4-3a_4FU;0a>S-(E8o1E6M7cLqm7#liB z9O~L8F}6G?`1`?6zL=R=b16}WbIoS9fZnhXWE&@o%0`~xHU1dM(JU?(>5U8GpZQqF z(>1T;cpu3T?p-iTbVB4Tn7d=Nh$w1_BgbiQ(({H%ylSHPqF3I6&TU@=$1mR%=T2-F z#IoF^o==YnSC*d?HJKk5>rK5Nt2t0co?R}KOLgtI<0GbUKCDpTWxxhbc+eJ+rS?~L z-=_>#_2UKXuLV=3R~H2fpG!P=kDvC5^4zAAg8k*9T>*Y9--YqA{a43|${V(eV)MNO z=hXHHI+EJhb@3}f+t(FziMG689*e|uMUx|!#)`MkV(uMQ%OOp4MBH=btHg)fC|Vst z`36G^rAG~hh^s9U{BuHojzkLfPtn_L_r9g-v$JX~{0^rb0=(-avf zi)VNSBZif+pN-NJG_J}})OsZg($43Di5&e|73SlR-Ccj#zoxskTmZcvuI%tKyk#4y(vH_8O|S}vTh3s2?Vl|Q&^>T?AT)u+gH+I)lw z3lH)qk6kLCW85Zsq^-ga=R2}o`CMWCm2HB7VK*hOf^uXR)d^SMHBqw1@hp3jZy$H* z=~41$39DpNb%t=KKJk*3-@C<%8@xblswWd`=GF5zt{g7^a5YM}#X3(mT6#pj<-#bT z&7fKA-@muWUpQV9ZlCTem>d#G3hE|8k>w1bv5l5^{FNZl7!IFRATfe-7cAKM+3TeX z_giq2Zg1dK4IUy{n5Ifd=3pi(ArMp)+43x>&S8xb%oMXVUU7e9x=Uh@NXfJ>B6-!z zK+d=^V(!(Eb*z+KKJt-~8(Ghs`D7YLg+03Hx;WyMJL}^9G}!_p9qHV~-NIwv*7F0# z9TE`5jpFp#D@Zqe%=7&7Q>40I3m&j-SW)(B?5UA&g}Fg51!))B$PCZFGMo9Q2K*VK8l6lZUe z58EM;-s_W-gZhU2`&;~Ymt7^~x$Q{#Z}}X-tORFra($Sjqu!49PI;45ZRcRYOif3L z;`~&$U(aZHm*A%?!!4VCw8KHRc2OvIu%lF+WJ^;7xc@cJrspJ(`AwAFI9mBnCxk_yQZiLh-Tb;8ZXQF&>lOLyXj6`&3akj9#{hYwCNKG8Euv_-; z$~bAWbDLn?;e2-1D-V(Nl|=%>@}tt=u2RXCt|sBmh(pBmK$lqC;sjTvD^={Vwx6B; zaFZb6j1r7`e?l^5b^#1O>LM4tRux#T^q2Dv9p#J^R&tJ`n72!Hm#n={58T5hu}2qw zV2w?fCEJngC$sTQhlHJZ1xrIuuWeC8L?x@l(oMkT6P}9 z{Hu!aWmh+Un(h$JIhQHIH!)E#EFg%rc>QU(0w1{%;eK+nIW>|@r{~;w$9Rd#n#JTm zu0OB3CRXxc%V&Yk;Z)9{dzQki`5LTe?ku@y+i3QlUr%^p(Jid$oW*4B;~!#O_bO5P z{%MkcaU=Lo7rZ7Pzn&Jqt$#<78C~nVAfE4J7%CP~PuO8Rg6s(q%4_@9Nndw+lNT3! zr8g3H%7k0b%2vE}X3vZD6@;9u67SrXz^Zs##h!m4MnKN^lB#nlvJ-yGga`kOly1E8 zL|`8BUJ`i7NPKs|mouX4tgI*TA?I%l<^24@6&%UC$vPFREqp0(W-VAyC+ILTW*z-? zUZTH0L_Tx=9=^@lQr_P9YRS2@Y`)tZOZloX&t*5)nFxQJ&XTHb-XM86fk%42?h=JK z%GuvGZ{%NmG69Y|&fpE)RN%-~HnLx@{6ch8%_ZNPJBZTxNfNW8t2jZ|^H`1Xu55MSTHSk!5tNo;Qvu`_Qilci zx-SX%s32f1l=F7mRj~~n5=D^}#hgK#szs3ZN_5g@4G&tv1R zPASj0SrpgS%ksTzz)pX~uVQ`27cQzk#x(?WHfLrCw7y zFm{NXS9eTe{%aa&*YSh{OLlWQuU}S~;iV+%;)TaKAx~BPi7zfMl$q}8yvAi&W;7q5SJ+wy4h}EFZdY5vYFIPtgZ%tFq;TiPJOcX zwym=JH@}H9CR?+`F{cH=oBLQJH|{6*tA5GD)x)J~k6ZXHle`2u($Ugm3il*y(;$3#Q03{d0JZk5&lT{zQy=u2i_)DNOPy|D!Z-h>2vX>u`QRw2C|? zB~v<(Zp2FZnkKlY{)x<*Ia3y35zqTUIjlb)-f@p=sR`CcJeCcf(=QHxuP;Asyp~lu zJXEsI?+0a+-Q?mV*fA$PO*s|Yw9T(zu)^gr;eM=KNtT<`l9?b?@L;(L=B@zf@TWD zMRv>Q_P&RM+t$g}Stjr<8orl)tTbos2y>I!=BG;TuAd={kA2Ni^sJS?)p{z8*74xa z*3K3;JWY|d#gE{J9qklFE;e9$8?R@gzGrzw$?l@1jcZ_;73x9CO&D_K_wX+axSUOxjd6Nblxi(htC8-vUZG0fC zYd9e~Fyyu5&tX%RzSDHU@9;*Ro%lS+#deZ{H`<&o zEpsH?`0XrhsA3zd6|$q|&fxG?3CW_n$Wbkt|jU4+)fU#^~wt$E1`AuUV&&))l9Pyk9+% z(}rnW?NcUPm8NF?!b9_U`n`Nnq4!nEoMV~7pI-fvwz7MoWb~@+s-%p%0 z-=XZ6z4t__L8HVj&aootb_po$bQT5u)Z#Y2uVw|`c*G(m?t&|~pRjDKII`y6WpK-( zn=?~h%3D)VCbJ-}k{msC`SczK_TNzkA`P1h;{Ci_PLTOrN%Hb_BfRgk+`%Gy7hOtNeh4*tGN z#+|6k9h$sT(r7Ut-xqqF`&YSFs=atTxA5N}PGCxcD0$fb#n5@M1KEaQ_}zPi2q_s! zg|bRSMpQ&nDDokShRl)(i6~`{N>L$2A&QdBWJQAzl`>mor;w7ogyP-> zD;d@IvH15uQy{qQ6!j{?5Si{HpyU{e4y<9(9S(w!j6gWlv>+Vvdpp-rJDtyWZ@{?2 zs12fb@I7MUU`MU#$)JhS&NnL!v{?&4p~ zTML+Nc0xT?{|AZHNx&#DO%*09VBd!1sbSSDKBDv+7-$&6?RHP$?7OdFaV&yOY-1^N zm0ws_a~5J<{SXbCUc~Nt=}tIgcyqgF-PpVN(TKL$LSA0;BY5n>YWR{wI8}G#7^wJ| zh5xhE0Pj|uK?7=IxnFAH?EIL|z+FNOvvs!z7RorX=l)KTR&(qT0|_3y?(&^#zYq`j zi7$fp-s%BEhnlcIMHEl9T?EYsNurC42A%eTn9H33r11a=i8SSLCu7y9t;g%3K{r1V z2ezSzbTYapCyhOQ&Hx(bpCC_8^Yq@u)^lR5L8d)C4jrjB#1=Xg@(H0o@#H9w67;V^ zv1NYWFUIar65ft%4VVfXW4fW0iz5N)1sHs$ zsDSU=phrvHfJlcHIpXJ_3upCm8b15wD44(09Q(HKIQZ)B0a)O76=!ockFxkC1eeB5 z12lS^0$_V-E7kLI6A;n=ib#(XrpJ5z*lfED%s(QBiTA%W*WtXu z>wn$EG~CO@f4Hv%vx*Wx*JXNSe2xsiy=8=7_%jdOdi^tADp&(7sHnvH3swMM4fcXM z8&=c%Tp!~TyYG<&b1q2Y)ByBSB8gl>ETUS}mvD>3|Dz8`zCoLY)=*}1cRJUxVJd4N z17Fsca=zPK757Tc48BI>*GZ({N^(7&?6=GvFA~uyS;;Z(LlgDM!vYBkU1IOc#cts z%wQ(Eo^X_nAJEW#5OOy6q~4}q;-7c7k}v2s06SqodD{%2byi(-|GBH6`m0^&`}R06 z>z@pKt1SQ;tW*RuM%O`mW_&m;lS4?e?GO6KCI(u0#(>`(c%8CWQp4)y0{PqPc(_I& z7#JN%!D@`}Qo6ncK>b}8O8jUhxn_G9a&UDzvdcmco*D4KyM@gNbe9P(QR2@E&dY

cEshDtS{l5p;_m2akxWA=BD^`0pT3EW&Xf8Wvpu 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

1GGu)V4I_RkH!L`0W8^=)h~Hf4m6V_x%ea{U;yY z5TOXole)a+R>EoBr+U7&2JS%osc z|Ff>HWQUfw@7vF9(EXj~?0fFH=RD^*=Z>8D*}G#m_-Oy}kJbKt?6`|BDrq=y@wnSz zYw*%1Z;yUtyUSKjbX-67sJ(tS{+s0+J0IORZmsVxd3H?0)GJ0@{lLr#Pk#GU$=wIN zHR9mu$BcRO+h45y)X0hBTlRW(%@-d3bY$%Dz^K004jH-bhR?3K&4Wjecxk^iSNnd} z1rui9e)Gud((jCZv*uH0`maVzSbNJmN4Io5GJgHL)-0L&$VY4Kcgxo$hjy-TO4f|5 z(f7dg)yJIri1Vj2_FH4mdo~<7`?J;7y7JVsM?Y4v&FX(jJ0p)c`tsF(`Rh?@obhpO ziSylktNn4pc5BW4;I)$eQ=fDG^uhKM9)A6s)h@hn>G-uvYD;$5YW*?crVU0u`^A@Q zt^DJ;W7qgy?OKOkaY4yLE#Iy_<;9+HYmYc{%*K09TWy;g|2!`HqC4*1@0!=#@Qo+O zZyUL9~ikNtv;z4bAZ>{m^YTG8? z9{+kWx7M!fw@kQsyVIO`)whg2?4`(r()L)%@6KD#`K)@$b*DenvH9XtA3ZtqP|IfB z(_Xx>_SL#a-rM}CL+R|$Rs8L4XNp2zaGq!}5Rxr z50zh6^V4JLw5a<*^4q^ueuG-Ru1;Z#&wjf#f4%zKufOgp{9Cw+aZ>)kc=>+V;U?TjWvgs#u`JdG5E%HG}Rc1=2DqZYbq9ZI`$g;;cEPQ0{`ah zJ@`Wh{vD5hJ@|JQ{%r&IF#cV>c<_fl@Bn`4n*Q0f{T91l4gdLiE4(_F8YTXM$4UA7 z^mpL!!usevwve4;3c0_CdsY<6C6)iZ{|+24@duBP-yUtRKQ#rro5`j`GCnz;YzoCX zlenSnp=fhFy3}b%BxAU#Bz2~)``HgU{QGvD&wh9dzbE0}<@omtFhWII6H%vHeq9OT zwxlAlM6$`vwx!dlOwOra5DHc3B5Jn22ZHTyxw_M{><>F2&c$_;R5 zjhk(bWa2TmCDD+HWICO?1);sF=G0WpMIn9RQ*Jbs%q5a-aW~!`Pr8Xlw>_T8CQ?b4 z%RuQjMiMPqcbkS(swEytZtK)mYenVbi6kxAM9ig@>o%q`Rsd&SZT+H9Wwix!_HIVQ zk7p>;kyy-)ut(%obFO7cBy;ghGSY$~WOME|fnAfS?aOxUjAyqm-?cT8j78A?JGXVJ zYZr#*EvTf(^Z8kxPl0ODZOo)v-L1(hvaz)rOJw5o_)r!8XvC7~%2+ImTw173iEepw zBHFBZ&bm=lK|@?i;z)+(QPOQ`zB6`L^w!1PhE6xdwUCYHa08mMLtEby>U7hu%DErE zOMgeG`;+?np}K#izxr4@PpN$R_7c8Ae=YpeDsNWz4*j+8%Sb?+~d|4!wbOp^Gw z(O--IS(Wdr?qU5MrSAXgXPZSeXgH|3(1Ku1U48w$P;hR|KHE~YQo9Uh677*(++7;) zbhpfob21j+&~OW@rf%!z;@Mm%kxb-52(it!xMeLZ@z^*gm5wK~*%qfh)tFn3hsK^i zd+sb+Clkw{-8r>rm@V$Y>V=hc)#_Kg4DAnck%pGI_foH}sb4awYG#!~7fvjm?Vu}j zAqVD~>Y6F$IE7rNn6v#(s;Qbuf=TgMd{R8xVD6sBDSjVQ*h?ZdDchQ8jZccSG)=0S zUq1y&FV95MoWLZ$s;#c6(MNyOq2r@p49nw{vv$;RU`r+)raahZ>=Ft<*17FLxr z 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πSpiGDRrauhA!f|ux*z~>5xn;7@dDlxB+ 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�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

QE@fA4-B(KO#Ab}!JffN+^ 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

HkQ`rd7%?|X@+`T5< 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%0D$kf?WpoCL9Tj8M+R+jxAxOT;n~ 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 ecncUDfmR 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⩓D5R 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